diff --git a/MARKUP_GUIDELINES.md b/MARKUP_GUIDELINES.md
index 43ed01c..350f211 100644
--- a/MARKUP_GUIDELINES.md
+++ b/MARKUP_GUIDELINES.md
@@ -29,6 +29,7 @@ Bare flags are accepted as tags with no value:
```ink
#optional
+#auto
```
## Right-Page Glossary Notes
@@ -85,8 +86,24 @@ Implemented choice metadata:
- `#key:x`: reserves keyboard key `X` for the choice.
- `#letter[x]`: older equivalent for reserving keyboard key `X`.
- `#action:group` or `#action[group]`: assigns the choice to an invisible action group.
+- `#auto`: hides the choice from the visible list and lets the UI choose it automatically when it is ready.
-The current UI renders all choices in one visible list. Choices are first grouped by `#action` in the order each new action group appears in the authored choice list. Choices inside each group are randomized. Choices without `#action` form one final unlabelled group shown after all tagged groups. Explicit keys are assigned before automatic keys; choices without explicit keys receive `1` through `0`, then `A` through `Z` in final visible order while skipping explicit keys. `#optional` choices are displayed italic. Grouping columns, `#gated[...]`, and `#sort[...]` are documented authoring conventions or future metadata, not fully implemented UI behavior yet.
+The current UI renders all non-auto choices in one visible list. Choices are first grouped by `#action` in the order each new action group appears in the authored choice list. Choices inside each group are randomized. Choices without `#action` form one final unlabelled group shown after all tagged groups. Explicit keys are assigned before automatic keys; choices without explicit keys receive `1` through `0`, then `A` through `Z` in final visible order while skipping explicit keys. `#optional` choices are displayed italic. Grouping columns, `#gated[...]`, and `#sort[...]` are documented authoring conventions or future metadata, not fully implemented UI behavior yet.
+
+Auto choices are ordinary Ink choices, usually with no visible `[...]` choice text. Ink owns their availability and once-only behavior; the UI owns automatic selection and timing. Supported forms:
+
+```ink
+* {condition} #auto
+ -> event
+
+* {condition} #auto(2)
+ -> event
+
+* {condition} #auto[tunnel](2)
+ -> event
+```
+
+`#auto` fires as soon as it is the first ready auto choice. `#auto(2)` waits at least two UI choice turns since the previous global auto trigger. `#auto[keyword](2)` waits only against the same keyword, so unrelated auto groups do not throttle each other. Use the global form when two different authored events must not fire immediately after each other.
## Popup And End-State Tags
diff --git a/README.md b/README.md
index 1217ba6..8c78c78 100644
--- a/README.md
+++ b/README.md
@@ -140,6 +140,8 @@ Tag format:
For Ink choices, put choice-local tags under the choice they belong to. Explicit keyboard letters are supported with `# letter[x]`, `#letter[x]`, or the colon form `#key:x`; the client reserves those keys first, then assigns the remaining visible choices from `1` through `0`, then `A` through `Z` in visible order. `#optional` renders the choice in italic. `# action[name]` or `#action:name` assigns an invisible action group: group order follows the first appearance of each action tag in the authored list, entries inside each group are randomized, and choices without an action tag are grouped last.
+`#auto` marks an Ink choice that the browser should choose automatically instead of rendering as a visible button. The choice should usually omit visible `[...]` text. `#auto(2)` waits two UI choice turns since the last global auto trigger. `#auto[keyword](2)` waits two UI choice turns only since the last auto trigger with the same keyword.
+
Chapter:
```text
diff --git a/SPECIFICATION.md b/SPECIFICATION.md
index 154c7c1..969d904 100644
--- a/SPECIFICATION.md
+++ b/SPECIFICATION.md
@@ -21,6 +21,18 @@ The production client must tolerate speech being unavailable. The safe TTS provi
- `scripts/`: project utility scripts. Currently used: `check-node-version.js` and `run-engine.js`.
- `templates/`: not present in the current repository and not used.
+## Text Encoding
+
+Ink source files and game UI localization files must be saved as UTF-8 and must contain the real written characters. German text uses full umlauts and special characters directly, for example `ä`, `ö`, `ü`, `Ä`, `Ö`, `Ü`, `ß`, and German quotation marks `„…“`. Do not transliterate German into `ae`, `oe`, `ue`, or `ss` as an encoding workaround.
+
+## Ink Authoring State
+
+Use Ink's built-in visit state for simple facts such as "this knot has been shown". Do not create parallel boolean flags for knot visits. Use explicit LIST-based state chains only when the state has semantic order or knowledge progression, such as character-generation dependencies, relationship frames, evidence chains, or episode progress.
+
+## Choice Text Perspective
+
+Choice text must describe the player character's intention before the action is taken. Do not write choices from a post-hoc author perspective that reveals what the branch will discover. For example, use "try the door" before the destination is known, not "go to the second-class cars"; use automatic or hidden events for things the player character cannot control, such as the train entering a tunnel.
+
## Engine Selection And Commands
`DEFAULT_GAME_ENGINE` in `.env` selects the engine used by:
@@ -107,10 +119,10 @@ The YAML engine is no longer the architectural default; it is one engine beside
- Config: `config/engines/ink.json`
- Server: `src/server-ink.ts`
- Engine: `src/engine/ink-engine.ts`
-- Source: `data/ink-src/eibenreith.ink` plus included chapter files.
+- Source: `data/ink-src/eibenreith/main.ink` plus included chapter files.
- Compiled output: `data/ink/eibenreith.ink.json`
-The Ink server compiles source at startup using `inkjs/full`, then runs the compiled story with `inkjs`. Ink choices become `ChoiceResult` objects. Ink tags become shared `StoryTag` objects. Choice preview tags support `#key`, `#letter`, `#optional`, `#action`, `#gated`, and `#sort`.
+The Ink server compiles source at startup using `inkjs/full`, then runs the compiled story with `inkjs`. Ink choices become `ChoiceResult` objects. Ink tags become shared `StoryTag` objects. Choice preview tags support `#key`, `#letter`, `#optional`, `#action`, `#gated`, `#sort`, and `#auto`.
The server keeps only ephemeral per-socket InkEngine instances. Browser IndexedDB owns durable Ink saves and the current autosave. If the socket reconnects or the page reloads, the browser sends the autosaved Ink state to `resumeGame()` and restores rendered history locally.
@@ -223,10 +235,13 @@ Choice tags:
- `#letter[x]`
- `#optional`
- `#action[name]`
+- `#auto`, `#auto(2)`, `#auto[keyword]`, `#auto[keyword](2)`
The active choice UI is one list. Explicit keys are reserved first, then remaining choices receive `1` through `0`, then `A` through `Z`.
Before key assignment, choices are ordered by invisible `#action` groups. The first appearance of each action group in the authored list determines group order. Choices inside each group are randomized for presentation. Choices without an action group form one final group shown last. Group labels are not displayed.
+`#auto` marks an ordinary Ink choice that should not be rendered as a visible button. The browser selects the first ready auto choice when the choice surface becomes ready. Ink still owns availability and once-only behavior through normal choice syntax and conditions. A numeric parameter delays the trigger by UI choice turns since the last matching auto trigger. Without a keyword the delay is global; with a keyword it applies only to that keyword. Use global `#auto(n)` when different auto events must not happen back-to-back, and keyworded `#auto[name](n)` when only repeated events of the same class should be spaced out.
+
TTS instruction tags are paragraph/block metadata. They are ignored by renderers and by providers that do not support per-request reading instructions. Providerless `#tts[...]` and `#tts(...)` are the default authoring forms; provider-specific forms are optional filters for provider overrides. OpenAI consumes matching instructions only for `gpt-4o-mini-tts`, where they are sent as the Speech API `instructions` field. Instructions should describe delivery, such as tone, emotion, intonation, pace, accent, whispering, humming, or singing style.
Markdown emphasis:
diff --git a/TODO.md b/TODO.md
index aff6d3c..05ed462 100644
--- a/TODO.md
+++ b/TODO.md
@@ -85,7 +85,7 @@ This is the active implementation checklist. Architecture lives in `SPECIFICATIO
- [x] Ink metadata handoff to client.
- [x] Ink choices converted to `ChoiceResult`.
- [x] Ink tags converted to shared `StoryTag`.
-- [x] Choice preview tags for `#key`, `#letter`, `#optional`, and `#action`.
+- [x] Choice preview tags for `#key`, `#letter`, `#optional`, `#action`, and `#auto`.
- [x] Save/load of Ink state plus client history state.
- [x] `#score`, `#error`, `#achievement`, and `#alert` tag behavior.
- [x] `#gloss[term](definition)` support on right-page text.
diff --git a/config/engines/ink.json b/config/engines/ink.json
index d65a76c..81356b1 100644
--- a/config/engines/ink.json
+++ b/config/engines/ink.json
@@ -3,7 +3,7 @@
"locale": "de_DE",
"paths": {
"mainGameFile": "data/ink/eibenreith.ink.json",
- "inkSource": "data/ink-src/eibenreith.ink",
+ "inkSource": "data/ink-src/eibenreith/main.ink",
"inkCompiled": "data/ink/eibenreith.ink.json",
"music": "public/music",
"sfx": "public/sounds",
diff --git a/data/ink-src/eibenreith/01_zug.ink b/data/ink-src/eibenreith/01_zug.ink
new file mode 100644
index 0000000..b220e0e
--- /dev/null
+++ b/data/ink-src/eibenreith/01_zug.ink
@@ -0,0 +1,1588 @@
+// ============================================================================
+// EIBENREITH 01 ZUG
+// ============================================================================
+// Kapitel 01: Das Abteil / Der Zug.
+//
+// Neue Struktur:
+// - Der Zug ist das erste begehbare Ambiente.
+// - Das Abteil ist der zentrale Hub.
+// - Der Weg zum Waschraum erklärt Traversal.
+// - Charakterdefinition entsteht an Orten im Zug, nicht in einem linearen Weave.
+// - Viktor kontrolliert die Papiere.
+// - Stand und Name entstehen aus sozialer Form, nicht aus falscher Identität.
+// - Sprache und Verhalten beeinflussen Reaktionen, sind aber keine Klasse.
+// ============================================================================
+
+
+// ============================================================================
+// ENTRY
+// ============================================================================
+
+=== train_intro_start ===
+~ loc_move_to(loc_train_compartment)
+~ character_move_to(viktor, loc_train_compartment)
+~ companion_join(viktor)
+
+Der Zug hat Wien hinter sich gelassen, doch du hast Wien noch nicht hinter dir gelassen. #chapter[Das Abteil] #music[Kaiserpunk Waltz.mp3](crossfade, loop, lead=8)
+
+Es sitzt dir im Nacken, wie die Anspannung, die dein Auftrag mit sich bringt. Es klebt dir auf der Haut, wie der Kohlerauch des Bahnhofs, von dem aus du es verlassen hast. Es begleitet dich in den Schriftstücken, die aus der geöffneten Ledertasche am Fenstertischchen des Coupés ragen. #gloss[Coupé](Abgeschlossenes Abteil der ersten Klasse. Polster, Gepäcknetz und das stille Versprechen, dass die Mitreisenden planmäßig ausgewählt wurden.) Und es sitzt dir gegenüber, in der Form von Rittmeister Viktor Alois Nowak, der dich seit der Abreise noch kein einziges Mal direkt angesehen hat. #gloss[Rittmeister](Kavalleriedienstgrad der k.u.k. Armee, etwa einem Hauptmann entsprechend.) Du spürst seine urteilenden Blicke trotzdem auf dir ruhen.
+
+Für alle Fremden ist er nun dein Sekretär. Er öffnet Türen, trägt Gepäck, ordnet Papiere und sorgt dafür, dass eine Frau deines Standes nicht allein reist. Zivil gekleidet, korrekt genug, um nicht aufzufallen. Laut der Kabinettskanzlei Seiner Majestät ist er dafür verantwortlich, für deine Sicherheit während des Auftrages zu sorgen. #gloss[Kabinettskanzlei](Die Kanzlei für Angelegenheiten, die im Namen des Kaisers erledigt werden. Je offizieller das Schreiben, desto sorgfältiger meidet es den Namen des Verfassers.) Als er dir heute Morgen zugeteilt wurde, wirkte er nicht besonders erfreut über seine neuen Befehle.
+
+-> train_compartment
+
+
+// ============================================================================
+// EPISODE BUCKET
+// ============================================================================
+
+=== train_intro_episode_bucket ===
+* {present(viktor)}
+ {loc(loc_train_dining_car)} [__Frage__: Ob ein Auftrag erst am Ziel beginnt.]
+ -> episode_begin_question
+
+* {present(viktor)}
+ {loc(loc_train_dining_car)} [__Bemerke__: Wie rasch ein Tisch die Welt sortiert.]
+ Der Speisewagen braucht keinen Wappenrock, um Rang herzustellen: Der eine bestellt, der andere wartet ab; der Kellner lächelt, weil es Arbeit ist; Viktor beobachtet, weil es Dienst ist. Hohenreith wird dieselbe Kunst beherrschen, nur mit älteren Möbeln.
+ -> provide_choices
+
+* {has((name_def, relig_def, body_def, face_def, belief_def))}
+ {state_reached(CourtMission.hidden_instruction_revealed)} [__Weiter__: Den Umstieg kommen lassen.]
+ -> train_intro_end
+-> DONE
+
+- (episode_begin_question)
+ „Beginnt ein Auftrag erst dort, wo man aussteigt, Herr Nowak?“
+
+ „Nur im Bericht“, sagt Viktor. „Menschen beginnen früher. Beim Packen. Beim Schweigen. Beim Entschluss, welche Frage man höflich nicht stellt.“
+
+ * [__Prüfe__: „Dann begann meiner schon in Wien.“]
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ „Wahrscheinlich davor“, sagt er. „Wien bemerkt seine eigenen Anfänge selten.“
+
+ * [__Wahre Form__: „Dann achten wir auf die fehlenden Fragen.“]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ „Eine Gewohnheit, die in fremden Häusern selten schadet.“
+ -
+ -> provide_choices
+
+
+// ============================================================================
+// ROOM: COMPARTMENT
+// ============================================================================
+
+=== train_compartment ===
+-> enter_room(loc_train_compartment, -> train_compartment_entry, -> train_compartment_look, -> train_compartment_exits, -> train_compartment_bucket) -> provide_choices
+
+
+=== train_compartment_bucket ===
+{
+- not tut_choice_intro:
+ #alert[Links erscheinen Entscheidungen. Du kannst sie mit der Maus wählen oder mit der angezeigten Taste auslösen. Das hervorgehobene Wort beschreibt, was Valerie versucht; Kürzel wie L für Schaue oder X für Untersuche folgen Textadventure-Gewohnheiten.]
+ ~ tut_choice_intro = true
+}
+* {not class} [__Sprich__: Viktor auf die Reise an.]
+ „Wie lange bis zum Umstieg?“
+
+ Viktor zieht den Fahrplan aus der Mappe, obwohl er die Antwort vermutlich auswendig kennt. „Lang genug, um eine Sache zu erledigen, die sonst bei der Ankunft ungeschickt würde.“
+
+ Sein Blick fällt auf ein vorgedrucktes Blatt zwischen den Schriftstücken.
+ -> identity_papers_tunnel ->
+ -> provide_choices
+
+* [__Untersuche__: Viktors Mappe. #key:x #optional]
+ {class && not tut_optional_intro:
+ #alert[Optionale Entscheidungen vertiefen Szene, Welt oder Haltung. Sie können wichtig sein, ohne allein den Weg zu versperren.]
+ ~ tut_optional_intro = true
+ }
+
+ Die Ledermappe enthält genau die Sorte Ordnung, die vorgibt, nur Ordnung zu sein. Fahrplan. Billets. Ein vorgedrucktes Personalblatt. Ein Kuvert mit Viktors Namen, ungeöffnet für dich. Und darunter die Abschrift des Schreibens aus Hohenreith, deren Rand Viktor mit zwei Fingern festhält, als gehöre selbst Papier zur Eskorte.
+ {not class:
+ -> identity_papers_tunnel ->
+ }
+ -> provide_choices
+
+* [__Schaue__: Aus dem Fenster. #key:f #optional]
+ {class && not tut_optional_intro:
+ #alert[Optionale Entscheidungen vertiefen Szene, Welt oder Haltung. Sie können wichtig sein, ohne allein den Weg zu versperren.]
+ ~ tut_optional_intro = true
+ }
+
+ Draußen löst sich Wien nicht auf einmal, sondern ungern: Vorstädte, Gärten, Fabrikmauern, dann Felder, deren Braun noch nicht weiß, ob es Winter oder Frühling dienen soll. Telegraphenstangen gleiten vorbei, gleichmäßig und unerbittlich. Jede trägt eine Nachricht, die schneller reisen darf als eine Frau im Korsett. #gloss[Telegraphenstangen](Holzstangen der elektrischen Nachrichten. Die Monarchie liebt Drähte, weil sie Gerüchte schneller machen und zugleich wie Ordnung aussehen.)
+ {not class:
+ -> identity_papers_tunnel ->
+ }
+ -> provide_choices
+
+* {present(viktor)} [__Betrachte__: Viktor. #key:v #optional]
+ {class && not tut_optional_intro:
+ #alert[Optionale Entscheidungen vertiefen Szene, Welt oder Haltung. Sie können wichtig sein, ohne allein den Weg zu versperren.]
+ ~ tut_optional_intro = true
+ }
+
+ Viktor trägt Zivil, aber nicht Entspannung: dunkler Gehrock, nüchterne Weste, tadelloser Kragen, dazu die Haltung eines Mannes, der selbst im Sitzen nie ganz außer Dienst ist. Kein Schneider der Monarchie kann Disziplin verbergen. Er kann sie nur angemessener aussehen lassen. #gloss[Gehrock](Langer Herrenrock für korrekte Tageskleidung. Ein Kleidungsstück, das Männern erlaubt, bürgerlich, amtlich und moralisch zugleich auszusehen.)
+
+ Seine Augen prüfen Tür, Fenster, Gepäcknetz, Korridor, dein Gesicht und wieder die Tür. Nicht gierig. Nicht unhöflich. Nur vollständig.
+ {not class:
+ -> identity_papers_tunnel ->
+ }
+ -> provide_choices
+
+* {has(name_def)}
+ {lacks(belief_def)} [__Verlange__: Zu sehen, weshalb du gerufen wurdest.]
+ ~ state_reach(CourtMission.sealed_letter_known)
+ ~ state_reach(CourtMission.official_cover_understood)
+ ~ state_reach(CourtMission.household_affair_named)
+ ~ state_reach(CourtMission.supernatural_pretext_named)
+
+ Viktor lässt den Vordruck trocknen, dann nimmt er ein zweites Blatt aus der Mappe. Nicht das Memorandum mit seinen knappen Amtswörtern, sondern eine Abschrift auf besserem Papier. Die Schrift wirkt, als habe jemand sehr ordentlich in Eile geschrieben.
+
+ „Die Bitte aus Hohenreith“, sagt er. „Nicht alles daran ist für eine Eisenbahnfahrt gedacht. Aber genug.“
+
+ > An die zuständigen Stellen wird in äußerster Diskretion das Ersuchen gerichtet, eine geeignete Person nach Jagdhaus Hohenreith zu entsenden. Im Haushalt und in dessen näherem Umfeld sind wiederholt Störungen vorgefallen, deren öffentliche Behandlung gegenwärtig weder ratsam noch erwünscht erscheint.
+ >
+ > Die Anwesenheit einer Dame von Bildung, Verschwiegenheit und bekannter Sensibilität für ungewöhnliche seelische oder spiritistische Erscheinungen wäre der Familie willkommen, sofern sie ohne Aufsehen, Polizei, Presse oder kirchliche Untersuchung erfolgen kann. #gloss[spiritistische Erscheinungen](Erscheinungen im Umkreis des Spiritismus. Sehr brauchbar, wenn Unheimliches behandelt werden soll, ohne zuzugeben, dass ein Amt an Geister glaubt.) #gloss[kirchliche Untersuchung](Prüfung durch geistliche Stellen. Besonders beruhigend, solange man sicher ist, dass der Schrecken der richtigen Art angehört.)
+
+ Niemand hat das Wort Geist geschrieben. Niemand hat das Wort Betrug geschrieben. Niemand hat das Wort Tochter geschrieben. Gerade deshalb treten die Auslassungen hervor, wie Möbel um einen Fleck, den niemand ansehen will.
+
+ Nun bleibt die Frage, was du selbst für möglich hältst.
+
+ * * [__Glaube__: Dass die Toten seltener schweigen, als Lebende behaupten.]
+
+ ~ belief = believer
+ ~ route_inc(route_sapphic)
+ Du hältst den Unglauben gebildeter Leute für eine besonders eitle Form der Provinzialität. Es gibt Druck in Zimmern, in denen Kummer gewesen ist. Es gibt Worte, die Menschen sprechen, bevor sie wissen, dass sie gesprochen haben.
+
+ * * [__Prüfe__: Ob eine Erscheinung zuerst einen Nutzen hat.]
+
+ ~ belief = sceptic
+ ~ route_inc(route_detective)
+ Das Wort Geist verdeckt zu viel und erklärt zu wenig. Falls Hohenreith Gespenster hat, erwartest du von ihnen Fußspuren, Gelegenheiten und einen Nutznießer.
+
+ * * [__Täusche__: Mit jener Sensibilität, die andere von dir brauchen.]
+
+ ~ belief = performer
+ ~ route_inc(route_lover)
+ Du hast gelernt, dass Männer, die dem Verstand einer Frau misstrauen, manchmal ihre Nerven verehren. Eine Schlussfolgerung macht sie unruhig. Eine Vision macht sie aufmerksam.
+
+ * * [__Zögere__: Das Unsichtbare noch nicht zu sortieren.]
+
+ ~ belief = unsure
+ ~ route_inc(route_composure)
+ Es gibt Dinge, die du erklären kannst, Dinge, die du noch nicht erklären kannst, und Dinge, denen Erklärung schadet, wenn man sie zu früh verlangt. Vorläufigkeit ist manchmal die sauberste Methode.
+
+ -
+ ~ mark(belief_def)
+ -> train_compartment
+
++ {has(name_def)}
+ {lacks(route_language_def)} [__Frage__: Viktor, weshalb er wirklich mitreist.]
+ ~ state_reach(ViktorRelationFrame.escort_present)
+ ~ state_reach(ViktorRelationFrame.secretary_cover_understood)
+
+ {not tut_dialog_intro:
+ #alert[Steht eine Entscheidung in Anführungszeichen, spricht Valerie diese Zeile aus. Das hervorgehobene Verb benennt die soziale Bewegung der Antwort.]
+ ~ tut_dialog_intro = true
+ }
+
+ Viktor legt den Vordruck zurück in die Mappe. Du lässt ihm einen Augenblick, den Riemen zu schließen, und nimmst ihm dann die Bequemlichkeit, nur Sekretär zu sein.
+
+ * * [__Wahre Form__: „Welche Zeile betrifft Sie, Herr Nowak?“]
+ „Welche Zeile betrifft Sie, Herr Nowak?“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ ~ rel_inc(viktor_closed)
+ Er sieht dich an, als habe er gehofft, du würdest höflicher ausweichen. „Auf dem Papier: Sekretär. In der Praxis: Begleitung.“
+
+ * * [__Prüfe__: „Wer hat angeordnet, dass ich nicht allein reise?“]
+ „Wer hat angeordnet, dass ich nicht allein reise?“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ ~ rel_inc(viktor_bold)
+ „Die Stelle, die vermeiden möchte, dass diese Reise nach einer Anordnung aussieht.“
+
+ * * [__Entwaffne__: „Soll ich Sie Sekretär nennen, damit wir beide uns wohler fühlen?“]
+ „Soll ich Sie Sekretär nennen, damit wir beide uns wohler fühlen?“
+ ~ route_inc(route_lover)
+ ~ rel_inc(viktor_open)
+ ~ rel_inc(viktor_unreliable)
+ „Mich macht das Wort nicht wohler“, sagt er. „Aber es macht andere Leute weniger aufmerksam.“
+
+ * * [__Schütze dich__: „Wessen Sicherheit meinen Sie, wenn Sie von meiner Begleitung sprechen?“]
+ „Wessen Sicherheit meinen Sie, wenn Sie von meiner Begleitung sprechen?“
+ ~ route_inc(route_sapphic)
+ ~ rel_inc(viktor_closed)
+ ~ rel_inc(viktor_insightful)
+ Er antwortet nicht sofort. „Ihre. Die der Gastgeber. Und, falls die Berichte stimmen, die der Menschen, die nicht gefragt wurden.“
+
+ * * [__Verplappere dich__: „Ich weiß nicht, ob ich einen Sekretär, einen Wächter oder einen Zeugen vor mir habe.“]
+ „Ich weiß nicht, ob ich einen Sekretär, einen Wächter oder einen Zeugen vor mir habe.“
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ ~ rel_inc(viktor_passive)
+ Etwas an seiner Aufmerksamkeit wird vorsichtiger. „Das ist immerhin näher an der Wahrheit als Sekretär.“
+
+ * * [__Benenne__: „Sie reisen mit, damit Wien später sagen kann, es habe aufgepasst.“]
+ „Sie reisen mit, damit Wien später sagen kann, es habe aufgepasst.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_bold)
+ ~ rel_inc(viktor_adversarial)
+ „Wien sagt vieles später“, sagt Viktor. „Meistens mit saubereren Händen als vorher.“
+
+ -
+ ~ mark(route_language_def)
+ ~ state_reach(ValerieWorkingMask.social_strategy_established)
+ -> briefing
+
+
+ - (briefing)
+ ~ state_reach(ViktorRelationFrame.handler_role_understood)
+
+ Viktor öffnet die Mappe und nimmt ein Memorandum heraus. Diesmal behält er es nicht bei sich, sondern legt es so vor dich, dass du lesen kannst. #gloss[Memorandum](Amtliche Denkschrift. Lang genug, um Zuständigkeit zu behaupten, kurz genug, um gefährliche Dinge nicht beim Namen nennen zu müssen.)
+
+ „Beim Umstieg erwartet uns eine Kutsche aus Hohenreith“, sagt er. „Ihren Gastgebern wurde mitgeteilt, ich sei Ihnen bei Korrespondenz, Reiseangelegenheiten und praktischen Vorkehrungen behilflich. Mehr müssen sie vorerst nicht wissen.“ #gloss[Korrespondenz](Briefwechsel. Die vornehme Kunst, Absichten so lange zu falten, bis sie in ein Kuvert passen.)
+
+ * * [__Präzisiere__: „Was wissen sie, was vermuten sie, und was soll ich prüfen dürfen?“]
+ „Was wissen sie, was vermuten sie, und was soll ich prüfen dürfen?“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_reliable)
+ „Sie wissen, dass Sie empfohlen kommen. Sie vermuten, dass Sie Störungen ohne Polizei, Priester oder Presse beilegen könnten. Ihnen ist gestattet, Betrug, Zwang, Gefährdung der öffentlichen Ordnung oder glaubwürdige, derzeit nicht einzuordnende Erscheinungen zu prüfen.“
+
+ * * [__Spotte__: „Wie fürsorglich. Der Staat erspart ihnen die Wörter.“]
+ „Wie fürsorglich. Der Staat erspart ihnen die Wörter.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ „Der Staat erspart Unruhe, wenn er kann“, sagt Viktor. „Oder verteilt sie wenigstens an die richtigen Personen.“
+
+ * * [__Wahre Form__: „Die Familie bekommt eine Dame. Die Akten bekommen eine Konsultation. Sie bekommen Spielraum.“]
+ „Die Familie bekommt eine Dame. Die Akten bekommen eine Konsultation. Sie bekommen Spielraum.“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ „Eine Zusammenfassung, die ich nicht unterschreiben würde. Aber ich würde ihr nicht widersprechen.“
+
+ -
+ ~ state_reach(CourtMission.household_affair_named)
+ ~ state_reach(CourtMission.supernatural_pretext_named)
+
+ Das Memorandum ist nicht lang. Es nennt nur, was für die Reise nötig ist.
+
+ Ein gräflicher Haushalt. Ein Jagdhaus in der Obersteiermark, nicht der Hauptsitz der Familie. Berichte über Störungen unter Dienerschaft und Dorfbewohnern. Kein Einschreiten der Polizei erbeten. Keine öffentliche kirchliche Untersuchung erwünscht. Keine Presse. Deine Anwesenheit ist als diskrete Konsultation auf Wunsch der Familie zu erklären. Herr Nowak dient zur Unterstützung praktischer Angelegenheiten. #gloss[Jagdhaus](Adeliger Landsitz für Jagden und kurze Aufenthalte. Weniger Hauptsitz als Bühne für Gäste, Förster, Gewehre und Geheimnisse.) #gloss[Obersteiermark](Der gebirgige Norden der Steiermark. Wälder, Eisen, enge Täler und ein Wetter, das sich nicht für Wiener Empfindlichkeiten interessiert.) #gloss[Dienerschaft](Die Bediensteten eines Hauses. Offiziell Teil der Ordnung, praktisch ihr Gedächtnis.)
+
+ * * [__Entlarve__: „Das ist nicht die ganze Weisung.“]
+ „Das ist nicht die ganze Weisung.“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ Viktor fragt nicht, woher du es weißt. „Es gibt immer noch eine weitere Weisung.“
+
+ * * [__Benenne__: „Wien vertraut uns beiden so wenig, dass es Misstrauen aufteilen musste.“]
+ „Wien vertraut uns beiden so wenig, dass es Misstrauen aufteilen musste.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ Viktor fragt nicht, woher du es weißt. „Es gibt immer noch eine weitere Weisung.“
+
+ * * [__Zügle dich__: „Dann behalten Sie sie. Ich werde merken, wann sie zwischen uns steht.“]
+ „Dann behalten Sie sie. Ich werde merken, wann sie zwischen uns steht.“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ „Das halte ich für wahrscheinlich.“
+
+ -
+ ~ state_reach(CourtMission.hidden_instruction_revealed)
+ ~ state_reach(ViktorRelationFrame.skepticism_registered)
+ -> train_compartment
+
++ {has(dining_car_known_def)}
+ {meal(meal_unset)} [__Schlage vor__: Die Mittagsfrage zu klären.]
+ „Beim Umstieg“, sagt Viktor, „wird Zeit sein, wenn wir sie nicht verlieren. Speisewagen, Bahnhofsrestauration oder nur etwas Kleines im Abteil. Alles spart etwas und kostet etwas.“ #gloss[Bahnhofsrestauration](Gastwirtschaft am Bahnhof. Reisezeit wird dort zu Suppe, Kaffee, Gedränge und sehr genauer Beobachtung von Gepäck und Stand.)
+
+ * * [__Wähle__: Jetzt mit Viktor in den Speisewagen zu gehen.]
+ ~ meal_choose(dining_car)
+ ~ companion_join(viktor)
+ Der Speisewagen ist kontrollierter als ein Bahnhof und öffentlicher als dieses Abteil. Man schaut dort mit Besteck in der Hand; das macht den Blick nicht freundlicher, nur gesellschaftsfähiger.
+
+ Viktor schließt die Mappe, steht auf und reicht dir nicht den Arm, sondern die Gelegenheit, ihn anzunehmen. Gemeinsam geht ihr in Fahrtrichtung durch die Wagen, bis der schmale Luxus des Speisewagens euch aufnimmt.
+ -> train_dining_car
+
+ * * [__Wähle__: Am Bahnhof zu essen.]
+ ~ meal_choose(station_restaurant)
+ Der Bahnhof ist lauter, unsauberer, ehrlicher. Man erfährt selten mehr über eine Ordnung, als wenn sie Suppe bestellt, Trinkgeld gibt und auf die Uhr sieht.
+
+ * * [__Wähle__: Nur Tee, Gebäck und Ruhe zu verlangen.]
+ ~ meal_choose(light_refreshment)
+ Du sparst Zeit, nicht Erschöpfung. Der Körper führt über solche Rechnungen eigene Bücher, und er ist selten nachsichtig.
+
+ -
+ -> train_compartment
+
+-> DONE
+
+
+=== train_compartment_entry ===
+Erste Klasse bedeutet: grüne Polster, Messinggriffe und genug Platz, um die Enge für Behaglichkeit auszugeben. Im Gepäcknetz über euren Köpfen verbringen deine Gepäckstücke und Viktors einzelner Koffer die Reise in aufgezwungener Nachbarschaft. Der Zug trägt euch mit einem Rhythmus, den man nach einer Weile aufhört zu hören und nur noch unter den Sohlen spürt. #gloss[Gepäcknetz](Ablage über den Sitzen des Eisenbahnabteils. Dort reisen Hüte, Schachteln und alles, was zu leicht für den Koffer und zu wichtig für den Gepäckwagen ist.) #gloss[erste Klasse](Der teuerste Eisenbahnraum. Nicht unbedingt stiller, aber besser gepolstert gegen Zufall, Gedränge und fremde Körper.)
+
+Das Fenstertischchen zieht den Blick auf sich. Viktors Ledertasche liegt dort, noch geöffnet, die Schriftstücke halb heraus.
+
+Hinter dem Fenster zieht Österreich vorbei.
+-> DONE
+
+
+=== train_compartment_look ===
++ [__Schaue__: Im Abteil umher. #key:l]
+ Das Abteil hat sich nicht verändert, nur dein Verhältnis dazu: der Griff zur Tür, Viktors Mappe, das Fenster, der Platz neben dem Gepäcknetz, an dem ein Blick hängen bleiben kann, ohne als Unruhe zu gelten. Es ist ein kleiner Raum, der vorgibt, ein gesellschaftlicher Zustand zu sein.
+ {not class:
+ -> identity_papers_tunnel ->
+ }
+ -> provide_choices
+-> DONE
+
+
+=== train_compartment_exits ===
++ {lacks(intro_def)} [__Verlasse__: Das Abteil. #key:e]
+ -> train_depart_compartment
+-> DONE
+
+
+=== identity_papers_tunnel ===
+ {not tut_character_intro:
+ #alert[Manche Entscheidungen legen dauerhafte Tatsachen über Valerie fest. Sie verändern nicht nur diese Szene, sondern wie spätere Figuren sie lesen, ansprechen und unterschätzen.]
+ ~ tut_character_intro = true
+ }
+
+ Es klopft.
+
+ Viktor hat die Billets bereits in der Hand, als die Tür aufgeht. Der Schaffner prüft sie, knipst, nickt und gibt sie zurück. Keine Frage nach Namen, Stand oder Auftrag. Nur die kurze Amtsbewegung eines Mannes, der Menschen nach Fahrscheinen ordnet und nicht nach Geheimnissen. #gloss[Schaffner](Bahnbediensteter für Fahrkarten, Ordnung und Auskünfte. In einem Zug liest er Menschen fast so berufsmäßig wie Billets.)
+
+ Als die Tür wieder geschlossen ist, betrachtet Viktor die beiden Billets einen Moment zu lange.
+
+ „Das erinnert mich“, sagt er und zieht das vorgedruckte Blatt aus der Mappe. „Personalblatt der Kabinettskanzlei. Für die Akte, für die Ankündigung in Hohenreith und für jene Leute, die am liebsten so tun, als habe eine Reise erst begonnen, wenn sie korrekt vermerkt wurde.“
+
+ Er legt Tinte und Reisefeder daneben. „Das meiste ist Routine.“
+
+ Das erste Feld verlangt dein Geschlecht. Viktor sagt nichts dazu. Du schreibst weiblich, weil das Formular für diese Frage weniger Fantasie besitzt als jeder Mensch, der daraus Befehle ableitet.
+
+ Darunter steht: Höchste abgeschlossene Ausbildung.
+
+ * [__Notiere__: Privater Unterricht durch eine Gouvernante.]
+ ~ class = noble
+ ~ mark(class_def)
+ Du trägst ein: Privater Unterricht durch eine Gouvernante. Was eine Tochter deines Standes eben erhält: Bildung ohne Zeugnis, Sprachen ohne Amt, Geschichte ohne Prüfung. Nicht abgeschlossen, weil niemand es Abschluss nennt, wenn es als Voraussetzung gilt.
+ -> noble_names
+
+ * [__Notiere__: Mädchenlyzeum.]
+ ~ class = middle
+ ~ mark(class_def)
+ Du trägst ein: Mädchenlyzeum. Die Schule gab dir Formen, Sprachen, Bücher, Handschrift und jene Art von Bildung, die einer Frau erlaubt ist, solange sie nicht zu sichtbar Anspruch daraus ableitet. Wenn du als Mann geboren wärst, stünde hier vielleicht ein akademischer Grad. So stehen hier Umwege.
+ -> middle_names
+
+ * [__Notiere__: Volksschule.]
+ ~ class = working
+ ~ mark(class_def)
+ Du trägst ein: Volksschule. Pflichtunterricht, dann Arbeit, Beobachtung und die Art Unterricht, für die niemand Zeugnisse ausstellt. Du hast lesen gelernt, bevor man dir zutraute, etwas Wichtiges zu lesen. Den Rest hast du dir genommen.
+ -> working_names
+
+- (noble_names)
+ Das Feld Titel füllt sich beinahe von selbst. Freiin. Der Adelstitel steht da, nicht weil er dich erklärt, sondern weil viele Menschen zufrieden sind, sobald ein Titel erklärt hat, wie tief sie sich verbeugen müssen. #gloss[Freiin](Unverheiratete Dame freiherrlichen Ranges. Hoch genug, um angekündigt zu werden, niedrig genug, um von höheren Häusern übersehen werden zu dürfen.)
+ ~ title_part = "Freiin von"
+
+ Für Vornamen ist reichlich Platz. Das war bei deiner Taufe offenbar auch so.
+
+ * [__Heiße__: Valerie Eleonore Josepha.]
+ ~ given_names = "Valerie Eleonore Josepha"
+ Du schreibst die Vornamen aus: Valerie Eleonore Josepha. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Valerie.]
+ ~ common_name = "Valerie"
+ * * [__Höre auf__: Vally.]
+ ~ common_name = "Vally"
+ * * [__Höre auf__: Eleonore.]
+ ~ common_name = "Eleonore"
+ * * [__Höre auf__: Nora.]
+ ~ common_name = "Nora"
+ * * [__Höre auf__: Lenchen.]
+ ~ common_name = "Lenchen"
+ * * [__Höre auf__: Josepha.]
+ ~ common_name = "Josepha"
+ * * [__Höre auf__: Pepi.]
+ ~ common_name = "Pepi"
+ * [__Heiße__: Helene Cäcilie Franziska.]
+ ~ given_names = "Helene Cäcilie Franziska"
+ Du schreibst die Vornamen aus: Helene Cäcilie Franziska. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Helene.]
+ ~ common_name = "Helene"
+ * * [__Höre auf__: Leni.]
+ ~ common_name = "Leni"
+ * * [__Höre auf__: Cäcilie.]
+ ~ common_name = "Cäcilie"
+ * * [__Höre auf__: Cilli.]
+ ~ common_name = "Cilli"
+ * * [__Höre auf__: Franziska.]
+ ~ common_name = "Franziska"
+ * * [__Höre auf__: Fanni.]
+ ~ common_name = "Fanni"
+ * [__Heiße__: Clara Theresia Leopoldine.]
+ ~ given_names = "Clara Theresia Leopoldine"
+ Du schreibst die Vornamen aus: Clara Theresia Leopoldine. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Clara.]
+ ~ common_name = "Clara"
+ * * [__Höre auf__: Clari.]
+ ~ common_name = "Clari"
+ * * [__Höre auf__: Theresia.]
+ ~ common_name = "Theresia"
+ * * [__Höre auf__: Resi.]
+ ~ common_name = "Resi"
+ * * [__Höre auf__: Leopoldine.]
+ ~ common_name = "Leopoldine"
+ * * [__Höre auf__: Poldi.]
+ ~ common_name = "Poldi"
+ * [__Heiße__: Sophie Eleonore Auguste.]
+ ~ given_names = "Sophie Eleonore Auguste"
+ Du schreibst die Vornamen aus: Sophie Eleonore Auguste. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Sophie.]
+ ~ common_name = "Sophie"
+ * * [__Höre auf__: Sopherl.]
+ ~ common_name = "Sopherl"
+ * * [__Höre auf__: Eleonore.]
+ ~ common_name = "Eleonore"
+ * * [__Höre auf__: Nora.]
+ ~ common_name = "Nora"
+ * * [__Höre auf__: Lenchen.]
+ ~ common_name = "Lenchen"
+ * * [__Höre auf__: Auguste.]
+ ~ common_name = "Auguste"
+ * * [__Höre auf__: Gusti.]
+ ~ common_name = "Gusti"
+ * [__Heiße__: Mathilde Josepha Henriette.]
+ ~ given_names = "Mathilde Josepha Henriette"
+ Du schreibst die Vornamen aus: Mathilde Josepha Henriette. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Mathilde.]
+ ~ common_name = "Mathilde"
+ * * [__Höre auf__: Tilli.]
+ ~ common_name = "Tilli"
+ * * [__Höre auf__: Josepha.]
+ ~ common_name = "Josepha"
+ * * [__Höre auf__: Pepi.]
+ ~ common_name = "Pepi"
+ * * [__Höre auf__: Henriette.]
+ ~ common_name = "Henriette"
+ * * [__Höre auf__: Jetti.]
+ ~ common_name = "Jetti"
+ * [__Heiße__: Therese Valerie Franziska.]
+ ~ given_names = "Therese Valerie Franziska"
+ Du schreibst die Vornamen aus: Therese Valerie Franziska. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Therese.]
+ ~ common_name = "Therese"
+ * * [__Höre auf__: Resi.]
+ ~ common_name = "Resi"
+ * * [__Höre auf__: Valerie.]
+ ~ common_name = "Valerie"
+ * * [__Höre auf__: Vally.]
+ ~ common_name = "Vally"
+ * * [__Höre auf__: Franziska.]
+ ~ common_name = "Franziska"
+ * * [__Höre auf__: Fanni.]
+ ~ common_name = "Fanni"
+ * [__Heiße__: Ilona Theresia Eleonore.]
+ ~ given_names = "Ilona Theresia Eleonore"
+ Du schreibst die Vornamen aus: Ilona Theresia Eleonore. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Ilona.]
+ ~ common_name = "Ilona"
+ * * [__Höre auf__: Ilonka.]
+ ~ common_name = "Ilonka"
+ * * [__Höre auf__: Theresia.]
+ ~ common_name = "Theresia"
+ * * [__Höre auf__: Resi.]
+ ~ common_name = "Resi"
+ * * [__Höre auf__: Eleonore.]
+ ~ common_name = "Eleonore"
+ * * [__Höre auf__: Nora.]
+ ~ common_name = "Nora"
+ * * [__Höre auf__: Lenchen.]
+ ~ common_name = "Lenchen"
+ * [__Heiße__: Zdenka Eleonore Josepha.]
+ ~ given_names = "Zdenka Eleonore Josepha"
+ Du schreibst die Vornamen aus: Zdenka Eleonore Josepha. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Zdenka.]
+ ~ common_name = "Zdenka"
+ * * [__Höre auf__: Eleonore.]
+ ~ common_name = "Eleonore"
+ * * [__Höre auf__: Nora.]
+ ~ common_name = "Nora"
+ * * [__Höre auf__: Lenchen.]
+ ~ common_name = "Lenchen"
+ * * [__Höre auf__: Josepha.]
+ ~ common_name = "Josepha"
+ * * [__Höre auf__: Pepi.]
+ ~ common_name = "Pepi"
+ * [__Heiße__: Beatrix Maria Leopoldine.]
+ ~ given_names = "Beatrix Maria Leopoldine"
+ Du schreibst die Vornamen aus: Beatrix Maria Leopoldine. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Beatrix.]
+ ~ common_name = "Beatrix"
+ * * [__Höre auf__: Maria.]
+ ~ common_name = "Maria"
+ * * [__Höre auf__: Mitzi.]
+ ~ common_name = "Mitzi"
+ * * [__Höre auf__: Leopoldine.]
+ ~ common_name = "Leopoldine"
+ * * [__Höre auf__: Poldi.]
+ ~ common_name = "Poldi"
+ * [__Heiße__: Leopoldine Amalie Theresia.]
+ ~ given_names = "Leopoldine Amalie Theresia"
+ Du schreibst die Vornamen aus: Leopoldine Amalie Theresia. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Leopoldine.]
+ ~ common_name = "Leopoldine"
+ * * [__Höre auf__: Poldi.]
+ ~ common_name = "Poldi"
+ * * [__Höre auf__: Amalie.]
+ ~ common_name = "Amalie"
+ * * [__Höre auf__: Mali.]
+ ~ common_name = "Mali"
+ * * [__Höre auf__: Theresia.]
+ ~ common_name = "Theresia"
+ * * [__Höre auf__: Resi.]
+ ~ common_name = "Resi"
+ -
+ {common_name} ist der Name, auf den du innerlich zuerst reagierst. Die übrigen bleiben auf dem Papier, ordnungsgemäß und etwas weiter entfernt.
+ -> noble_surnames
+
+- (noble_surnames)
+ Ein freiherrlicher Name muss nicht groß sein. Er muss nur alt genug wirken, dass niemand nachfragt, wer ihn zuletzt bezahlt hat.
+
+ * [__Führe den Namen__: von Rauhenfels.]
+ ~ surname = "Rauhenfels"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Rauhenfels.
+ * [__Führe den Namen__: von Traunegg.]
+ ~ surname = "Traunegg"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Traunegg.
+ * [__Führe den Namen__: von Ebenwald.]
+ ~ surname = "Ebenwald"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Ebenwald.
+ * [__Führe den Namen__: von Arnsberg.]
+ ~ surname = "Arnsberg"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Arnsberg.
+ * [__Führe den Namen__: von Reichenau.]
+ ~ surname = "Reichenau"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Reichenau.
+ * [__Führe den Namen__: von Waldstätten.]
+ ~ surname = "Waldstätten"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Waldstätten.
+ * [__Führe den Namen__: von Greiffenstein.]
+ ~ surname = "Greiffenstein"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Greiffenstein.
+ * [__Führe den Namen__: von Lichtenau.]
+ ~ surname = "Lichtenau"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Lichtenau.
+ * [__Führe den Namen__: von Altenried.]
+ ~ surname = "Altenried"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Altenried.
+ * [__Führe den Namen__: von Hartenfels.]
+ ~ surname = "Hartenfels"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: von Hartenfels.
+ -
+ -> birthplace_choices
+
+- (middle_names)
+ Das Feld Titel bleibt schmal. Fräulein. Wenn man Frauen anders gelassen hätte, stünde hier vielleicht mehr. Nicht notwendigerweise ein Doktorgrad, nicht so früh, nicht so leicht. Aber irgendein amtliches Zeichen dafür, dass Verstand nicht nur bei Männern als Laufbahn gilt.
+ ~ title_part = "Fräulein"
+
+ Zwei Namen. Genug für Festtage, Schulzeugnisse und Familienbriefe.
+
+ * [__Heiße__: Clara Eleonore.]
+ ~ given_names = "Clara Eleonore"
+ Du schreibst die Vornamen aus: Clara Eleonore. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Clara.]
+ ~ common_name = "Clara"
+ * * [__Höre auf__: Clari.]
+ ~ common_name = "Clari"
+ * * [__Höre auf__: Eleonore.]
+ ~ common_name = "Eleonore"
+ * * [__Höre auf__: Nora.]
+ ~ common_name = "Nora"
+ * * [__Höre auf__: Lenchen.]
+ ~ common_name = "Lenchen"
+ * [__Heiße__: Anna Katharina.]
+ ~ given_names = "Anna Katharina"
+ Du schreibst die Vornamen aus: Anna Katharina. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Anna.]
+ ~ common_name = "Anna"
+ * * [__Höre auf__: Anni.]
+ ~ common_name = "Anni"
+ * * [__Höre auf__: Katharina.]
+ ~ common_name = "Katharina"
+ * * [__Höre auf__: Käthe.]
+ ~ common_name = "Käthe"
+ * [__Heiße__: Helene Theresia.]
+ ~ given_names = "Helene Theresia"
+ Du schreibst die Vornamen aus: Helene Theresia. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Helene.]
+ ~ common_name = "Helene"
+ * * [__Höre auf__: Leni.]
+ ~ common_name = "Leni"
+ * * [__Höre auf__: Theresia.]
+ ~ common_name = "Theresia"
+ * * [__Höre auf__: Resi.]
+ ~ common_name = "Resi"
+ * [__Heiße__: Rosa Franziska.]
+ ~ given_names = "Rosa Franziska"
+ Du schreibst die Vornamen aus: Rosa Franziska. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Rosa.]
+ ~ common_name = "Rosa"
+ * * [__Höre auf__: Rosi.]
+ ~ common_name = "Rosi"
+ * * [__Höre auf__: Franziska.]
+ ~ common_name = "Franziska"
+ * * [__Höre auf__: Fanni.]
+ ~ common_name = "Fanni"
+ * [__Heiße__: Johanna Elise.]
+ ~ given_names = "Johanna Elise"
+ Du schreibst die Vornamen aus: Johanna Elise. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Johanna.]
+ ~ common_name = "Johanna"
+ * * [__Höre auf__: Hanni.]
+ ~ common_name = "Hanni"
+ * * [__Höre auf__: Elise.]
+ ~ common_name = "Elise"
+ * * [__Höre auf__: Liesl.]
+ ~ common_name = "Liesl"
+ * [__Heiße__: Katharina Sophie.]
+ ~ given_names = "Katharina Sophie"
+ Du schreibst die Vornamen aus: Katharina Sophie. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Katharina.]
+ ~ common_name = "Katharina"
+ * * [__Höre auf__: Käthe.]
+ ~ common_name = "Käthe"
+ * * [__Höre auf__: Sophie.]
+ ~ common_name = "Sophie"
+ * * [__Höre auf__: Sopherl.]
+ ~ common_name = "Sopherl"
+ * [__Heiße__: Therese Leopoldine.]
+ ~ given_names = "Therese Leopoldine"
+ Du schreibst die Vornamen aus: Therese Leopoldine. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Therese.]
+ ~ common_name = "Therese"
+ * * [__Höre auf__: Resi.]
+ ~ common_name = "Resi"
+ * * [__Höre auf__: Leopoldine.]
+ ~ common_name = "Leopoldine"
+ * * [__Höre auf__: Poldi.]
+ ~ common_name = "Poldi"
+ * [__Heiße__: Magdalena Cäcilie.]
+ ~ given_names = "Magdalena Cäcilie"
+ Du schreibst die Vornamen aus: Magdalena Cäcilie. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Magdalena.]
+ ~ common_name = "Magdalena"
+ * * [__Höre auf__: Leni.]
+ ~ common_name = "Leni"
+ * * [__Höre auf__: Cäcilie.]
+ ~ common_name = "Cäcilie"
+ * * [__Höre auf__: Cilli.]
+ ~ common_name = "Cilli"
+ * [__Heiße__: Marie Karoline.]
+ ~ given_names = "Marie Karoline"
+ Du schreibst die Vornamen aus: Marie Karoline. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Marie.]
+ ~ common_name = "Marie"
+ * * [__Höre auf__: Mizzi.]
+ ~ common_name = "Mizzi"
+ * * [__Höre auf__: Mitzi.]
+ ~ common_name = "Mitzi"
+ * * [__Höre auf__: Karoline.]
+ ~ common_name = "Karoline"
+ * [__Heiße__: Paula Viktoria.]
+ ~ given_names = "Paula Viktoria"
+ Du schreibst die Vornamen aus: Paula Viktoria. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Paula.]
+ ~ common_name = "Paula"
+ * * [__Höre auf__: Pauli.]
+ ~ common_name = "Pauli"
+ * * [__Höre auf__: Viktoria.]
+ ~ common_name = "Viktoria"
+ * * [__Höre auf__: Vicki.]
+ ~ common_name = "Vicki"
+ -
+ {common_name} ist der Name, auf den du innerlich zuerst reagierst. Die übrigen bleiben auf dem Papier, ordnungsgemäß und etwas weiter entfernt.
+ -> middle_surnames
+
+- (middle_surnames)
+ Dein Familienname trägt kein kleines `von` vor sich her. Er muss allein aufrecht stehen.
+
+ * [__Führe den Namen__: Leitner.]
+ ~ surname = "Leitner"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Leitner.
+ * [__Führe den Namen__: Wagner.]
+ ~ surname = "Wagner"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Wagner.
+ * [__Führe den Namen__: Kellner.]
+ ~ surname = "Kellner"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Kellner.
+ * [__Führe den Namen__: Baumgartner.]
+ ~ surname = "Baumgartner"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Baumgartner.
+ * [__Führe den Namen__: Fischer.]
+ ~ surname = "Fischer"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Fischer.
+ * [__Führe den Namen__: Schmid.]
+ ~ surname = "Schmid"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Schmid.
+ * [__Führe den Namen__: Pichler.]
+ ~ surname = "Pichler"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Pichler.
+ * [__Führe den Namen__: Rosenfeld.]
+ ~ surname = "Rosenfeld"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Rosenfeld.
+ * [__Führe den Namen__: Adler.]
+ ~ surname = "Adler"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Adler.
+ * [__Führe den Namen__: Berger.]
+ ~ surname = "Berger"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Berger.
+ -
+ -> birthplace_choices
+
+- (working_names)
+ Das Feld Titel gibt dir dasselbe Wort wie vielen anderen und nicht denselben Schutz. Fräulein. Ein höfliches Dach über sehr verschiedenen Leben.
+ ~ title_part = "Fräulein"
+
+ Ein Name. Der, den man dir gab, ehe jemand daran dachte, dass er einmal an Türen gemeldet werden würde.
+
+ * [__Heiße__: Anna.]
+ ~ given_names = "Anna"
+ Du schreibst den Vornamen aus: Anna. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Anna.]
+ ~ common_name = "Anna"
+ * * [__Höre auf__: Anni.]
+ ~ common_name = "Anni"
+ * [__Heiße__: Klara.]
+ ~ given_names = "Klara"
+ Du schreibst den Vornamen aus: Klara. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Klara.]
+ ~ common_name = "Klara"
+ * * [__Höre auf__: Klärchen.]
+ ~ common_name = "Klärchen"
+ * [__Heiße__: Agnes.]
+ ~ given_names = "Agnes"
+ Du schreibst den Vornamen aus: Agnes. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ ~ common_name = "Agnes"
+ * [__Heiße__: Leni.]
+ ~ given_names = "Leni"
+ Du schreibst den Vornamen aus: Leni. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ ~ common_name = "Leni"
+ * [__Heiße__: Rosa.]
+ ~ given_names = "Rosa"
+ Du schreibst den Vornamen aus: Rosa. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Rosa.]
+ ~ common_name = "Rosa"
+ * * [__Höre auf__: Rosi.]
+ ~ common_name = "Rosi"
+ * [__Heiße__: Gertrud.]
+ ~ given_names = "Gertrud"
+ Du schreibst den Vornamen aus: Gertrud. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Gertrud.]
+ ~ common_name = "Gertrud"
+ * * [__Höre auf__: Trude.]
+ ~ common_name = "Trude"
+ * [__Heiße__: Elisabeth.]
+ ~ given_names = "Elisabeth"
+ Du schreibst den Vornamen aus: Elisabeth. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Elisabeth.]
+ ~ common_name = "Elisabeth"
+ * * [__Höre auf__: Sisi.]
+ ~ common_name = "Sisi"
+ * * [__Höre auf__: Liesl.]
+ ~ common_name = "Liesl"
+ * * [__Höre auf__: Else.]
+ ~ common_name = "Else"
+ * [__Heiße__: Franziska.]
+ ~ given_names = "Franziska"
+ Du schreibst den Vornamen aus: Franziska. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Franziska.]
+ ~ common_name = "Franziska"
+ * * [__Höre auf__: Fanni.]
+ ~ common_name = "Fanni"
+ * [__Heiße__: Marie.]
+ ~ given_names = "Marie"
+ Du schreibst den Vornamen aus: Marie. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Marie.]
+ ~ common_name = "Marie"
+ * * [__Höre auf__: Mizzi.]
+ ~ common_name = "Mizzi"
+ * * [__Höre auf__: Mitzi.]
+ ~ common_name = "Mitzi"
+ * [__Heiße__: Josefa.]
+ ~ given_names = "Josefa"
+ Du schreibst den Vornamen aus: Josefa. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.
+ So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.
+ * * [__Höre auf__: Josefa.]
+ ~ common_name = "Josefa"
+ * * [__Höre auf__: Pepi.]
+ ~ common_name = "Pepi"
+ -
+ {common_name} ist der Name, auf den du innerlich zuerst reagierst.
+ -> working_surnames
+
+- (working_surnames)
+ Ein einfacher Familienname ist in Wien kein Mangel an Buchstaben, sondern an Schutz. Er sagt den Leuten, wie wenig Achtung sie vorgeben müssen, ehe du gesprochen hast.
+
+ * [__Führe den Namen__: Pichler.]
+ ~ surname = "Pichler"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Pichler.
+ * [__Führe den Namen__: Huber.]
+ ~ surname = "Huber"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Huber.
+ * [__Führe den Namen__: Maier.]
+ ~ surname = "Maier"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Maier.
+ * [__Führe den Namen__: Gruber.]
+ ~ surname = "Gruber"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Gruber.
+ * [__Führe den Namen__: Schuster.]
+ ~ surname = "Schuster"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Schuster.
+ * [__Führe den Namen__: Krenn.]
+ ~ surname = "Krenn"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Krenn.
+ * [__Führe den Namen__: Wolf.]
+ ~ surname = "Wolf"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Wolf.
+ * [__Führe den Namen__: Moser.]
+ ~ surname = "Moser"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Moser.
+ * [__Führe den Namen__: Bauer.]
+ ~ surname = "Bauer"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Bauer.
+ * [__Führe den Namen__: Hofer.]
+ ~ surname = "Hofer"
+ Der Familienname steht nun dort, wo das Formular ihn erwartet: Hofer.
+ -
+ -> birthplace_choices
+
+- (birthplace_choices)
+ Wohnort: Wien. Natürlich. Als gäbe es für jemanden in deiner Lage eine andere Antwort, sobald die Kabinettskanzlei einmal ihre Finger im Papier hat.
+
+ Geburtsort. Die Liste ist nicht vollständig; sie beschränkt sich auf Städte, die während deines ganzen Lebens offiziell zur Habsburgermonarchie gehörten und in Wien eine Vorstellung auslösen, noch bevor jemand die Karte aufschlägt.
+
+ * [__Schreibe__: Wien.]
+ ~ birthplace = "Wien"
+ Du trägst Wien ein.
+ In Wien geboren, wo alles entschieden wird und man trotzdem ständig behauptet, von nichts gewusst zu haben.
+ * [__Schreibe__: Prag.]
+ ~ birthplace = "Prag"
+ Du trägst Prag ein.
+ Die zweite Hauptstadt, was Wien niemals so nennen würde. Hundert Türme, mehr Sprachen und genug Stolz, um Wiener Urteile zu überleben.
+ * [__Schreibe__: Budapest.]
+ ~ birthplace = "Budapest"
+ Du trägst Budapest ein.
+ Jenseits der Leitha, wo Wien gern Temperament vermutet, wenn es eigentlich politische Selbstachtung meint.
+ * [__Schreibe__: Graz.]
+ ~ birthplace = "Graz"
+ Du trägst Graz ein.
+ Ein Ort, den Wien für angenehm hält, solange er nicht zu eigenständig denkt. Steirische Ruhe, sagt man, und meint oft nur Entfernung.
+ * [__Schreibe__: Linz.]
+ ~ birthplace = "Linz"
+ Du trägst Linz ein.
+ Solide, deutsch, ordentlich, etwas beleidigt, wenn Wien es übergeht, und gerade deshalb sehr leicht von Wien zu übergehen.
+ * [__Schreibe__: Salzburg.]
+ ~ birthplace = "Salzburg"
+ Du trägst Salzburg ein.
+ Musik, Fürsterzbischöfe und eine Schönheit, die sich von Wien bewundern lässt, ohne ihm ganz zu gehören.
+ * [__Schreibe__: Innsbruck.]
+ ~ birthplace = "Innsbruck"
+ Du trägst Innsbruck ein.
+ Berge, Kaiserjäger, katholische Härte und die bequeme Wiener Vorstellung, dort beginne schon das Heroische.
+ * [__Schreibe__: Triest.]
+ ~ birthplace = "Triest"
+ Du trägst Triest ein.
+ Das Meer der Monarchie. Wien besitzt es auf Papier und versteht es bei jedem Hafenwind ein wenig weniger.
+ * [__Schreibe__: Brünn.]
+ ~ birthplace = "Brünn"
+ Du trägst Brünn ein.
+ Fabriken, Tuch, mährische Nüchternheit. Ein Ort, den Wien für praktisch hält, wenn es nicht bemerken will, wie modern er ist.
+ * [__Schreibe__: Krakau.]
+ ~ birthplace = "Krakau"
+ Du trägst Krakau ein.
+ Polnische Würde, alte Universitäten und eine Trauer, die Wien gern pittoresk nennt, wenn sie nicht politisch werden soll.
+ * [__Schreibe__: Lemberg.]
+ ~ birthplace = "Lemberg"
+ Du trägst Lemberg ein.
+ So weit östlich, dass Wien dort schon den Orient vermutet. Falsch, natürlich, aber aufschlussreich über Wien.
+ * [__Schreibe__: Czernowitz.]
+ ~ birthplace = "Czernowitz"
+ Du trägst Czernowitz ein.
+ Das kleine Wien des Ostens, sagen manche. Ein Kompliment, das mehr über Wien verrät als über Czernowitz.
+ * [__Schreibe__: Laibach.]
+ ~ birthplace = "Laibach"
+ Du trägst Laibach ein.
+ Südlich genug, dass Wien Landschaft daraus macht, und slawisch genug, dass dieselben Leute plötzlich Verwaltung brauchen.
+ * [__Schreibe__: Agram.]
+ ~ birthplace = "Agram"
+ Du trägst Agram ein.
+ Kroatisch, städtisch, eigensinnig. Wien hört den Namen und denkt sofort an Zuständigkeit.
+ -
+ -> birthdate_choices
+
+- (birthdate_choices)
+ Geburtsdatum. Das Feld verlangt nur einen Tag und einen Monat. Keine Erklärung, keine Deutung, nur eine Stelle im Kalender.
+
+ * [__Wähle__: 21. März 1879.]
+ ~ birthdate = "21. März 1879"
+ ~ zodiac = "Widder"
+ Du trägst den 21. März 1879 ein.
+ Neunzehn Jahre. Jung genug, dass manche dich für eine Laune halten möchten, alt genug, um bereits zu wissen, wie nützlich dieser Irrtum sein kann.
+ Der Widder stößt vorwärts, auch wenn andere noch die Tür suchen. Für einen Auftrag mit verschlossenen Zimmern ist das nicht das schlechteste Zeichen.
+ * [__Wähle__: 24. April 1878.]
+ ~ birthdate = "24. April 1878"
+ ~ zodiac = "Stier"
+ Du trägst den 24. April 1878 ein.
+ Zwanzig Jahre. Ein Alter, in dem man von dir schon Haltung erwartet und dir dennoch Erfahrung abspricht, sobald sie unbequem wird.
+ Der Stier gilt als standhaft, sinnlich, schwer zu bewegen. Nützlich, wenn ein Haus erwartet, dass man sich von seinem ersten Blick einschüchtern lässt.
+ * [__Wähle__: 2. Juni 1877.]
+ ~ birthdate = "2. Juni 1877"
+ ~ zodiac = "Zwillinge"
+ Du trägst den 2. Juni 1877 ein.
+ Einundzwanzig Jahre. Volljährig genug für Verantwortung, jung genug, dass ältere Herren sie dir nur leihweise zugestehen.
+ Die Zwillinge sprechen mit zwei Stimmen und hören mit dreien. Man kann das flatterhaft nennen oder beruflich brauchbar.
+ * [__Wähle__: 9. Juli 1879.]
+ ~ birthdate = "9. Juli 1879"
+ ~ zodiac = "Krebs"
+ Du trägst den 9. Juli 1879 ein.
+ Neunzehn Jahre. Die Zahl wirkt harmlos auf Papier; in Wahrheit ist sie alt genug für Ehrgeiz und jung genug für Zumutungen.
+ Der Krebs schützt, erinnert, zieht sich zurück und kommt seitwärts doch ans Ziel. Ein unterschätztes Talent.
+ * [__Wähle__: 15. August 1878.]
+ ~ birthdate = "15. August 1878"
+ ~ zodiac = "Löwe"
+ Du trägst den 15. August 1878 ein.
+ Zwanzig Jahre. Nicht mehr ganz Debütantin, noch nicht Frau von gesetzter Erwartung. Ein nützlicher Zwischenraum.
+ Der Löwe will gesehen werden. Das ist gefährlich, aber auch nützlich, wenn alle anderen glauben, sie seien die Beobachter.
+ * [__Wähle__: 6. September 1877.]
+ ~ birthdate = "6. September 1877"
+ ~ zodiac = "Jungfrau"
+ Du trägst den 6. September 1877 ein.
+ Einundzwanzig Jahre. Ein Alter, das man dir anrechnen müsste, wenn man Frauenalter nicht so gern gegen Frauen verwendete.
+ Die Jungfrau ordnet, prüft und findet Fehler dort, wo andere Erhabenheit sehen wollen. Ein sehr unromantisches, sehr wirksames Zeichen.
+ * [__Wähle__: 3. Oktober 1878.]
+ ~ birthdate = "3. Oktober 1878"
+ ~ zodiac = "Waage"
+ Du trägst den 3. Oktober 1878 ein.
+ Zwanzig Jahre. Alt genug, um Takt zu beherrschen, jung genug, dass man ihn dir noch als Gehorsam auslegen möchte.
+ Die Waage sucht Ausgleich. In Häusern wie Hohenreith kann das heißen, die Lüge zu finden, auf der alle noch stehen können.
+ * [__Wähle__: 7. November 1877.]
+ ~ birthdate = "7. November 1877"
+ ~ zodiac = "Skorpion"
+ Du trägst den 7. November 1877 ein.
+ Einundzwanzig Jahre. Das Papier nennt die Zahl und verschweigt, wie viel Übung schon nötig war, um hier zu sitzen.
+ Der Skorpion bewahrt Geheimnisse, bis er entscheiden kann, ob sie Waffe oder Wahrheit sind.
+ * [__Wähle__: 11. Dezember 1878.]
+ ~ birthdate = "11. Dezember 1878"
+ ~ zodiac = "Schütze"
+ Du trägst den 11. Dezember 1878 ein.
+ Zwanzig Jahre. Ein Alter zwischen Erlaubnis und Aufbruch, falls man entschlossen genug ist, beides zu erzwingen.
+ Der Schütze zielt auf die Ferne. Das passt zu einer Reise, die nicht nur aus Schienen besteht.
+ * [__Wähle__: 14. Januar 1879.]
+ ~ birthdate = "14. Januar 1879"
+ ~ zodiac = "Steinbock"
+ Du trägst den 14. Januar 1879 ein.
+ Neunzehn Jahre. Jung, ja, aber nicht weich. Manche Menschen verwechseln beides nur, weil es ihnen nützt.
+ Der Steinbock steigt langsam und merkt sich jeden sicheren Tritt. Für fremde Häuser ist das eine brauchbare Tugend.
+ * [__Wähle__: 5. Februar 1878.]
+ ~ birthdate = "5. Februar 1878"
+ ~ zodiac = "Wassermann"
+ Du trägst den 5. Februar 1878 ein.
+ Zwanzig Jahre. Alt genug, um Konventionen zu kennen, und jung genug, um sie noch nicht für Naturgesetze zu halten.
+ Der Wassermann gilt als eigenwillig und hellsichtig. Das eine ist leichter zu beweisen als das andere.
+ * [__Wähle__: 12. März 1877.]
+ ~ birthdate = "12. März 1877"
+ ~ zodiac = "Fische"
+ Du trägst den 12. März 1877 ein.
+ Einundzwanzig Jahre. Erwachsen nach Gesetz und Papier; beides ist hilfreich und keines davon genügt.
+ Die Fische sollen durchlässig sein für das, was andere nicht spüren. Schmeichelhaft und unbeweisbar. Beides kann einem Medium nützen.
+ -
+ ~ mark(name_def)
+ ~ state_reach(ValerieWorkingMask.name_claimed)
+
+ Du legst die Feder ab.
+
+ {title_part} {given_names} {surname}. Geboren am {birthdate} in {birthplace}, wohnhaft in Wien.
+
+ Viktor wartet, bis die Tinte nicht mehr glänzt. Dann nimmt er das Blatt, prüft es mit der Genauigkeit eines Mannes, der auch Schweigen ablegen könnte, und schiebt es zurück in die Mappe.
+
+ ->->
+
+
+// ============================================================================
+// TRAIN NAVIGATION / FREE TRAVERSAL
+// ============================================================================
+
+=== train_depart_compartment ===
+{not class:
+ -> identity_papers_tunnel ->
+}
+
+{not tut_traversal_intro:
+ #alert[Der Zug ist begehbar. Raum-Entscheidungen bewegen Valerie zwischen erreichbaren Bereichen; Moment-Entscheidungen untersuchen Dinge, sprechen Personen an oder lassen Ereignisse sichtbar werden.]
+ ~ tut_traversal_intro = true
+}
+
+Viktor sitzt noch immer dort, wo die Form ihn hingestellt hat: nah genug, um nützlich zu sein, zu nah, um vergessen zu werden. Draußen schwankt der Gang. Drinnen schwankt nur, was nicht ausgesprochen wird.
+
++ [__Wahre Form__: „Ich werde mich einen Augenblick frisch machen.“]
+ „Ich werde mich einen Augenblick frisch machen.“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ ~ rel_inc(viktor_closed)
+ Viktor neigt den Kopf. „Natürlich. Nehmen Sie sich den Augenblick.“
+ -> to_corridor
+
++ [__Prüfe__: „Ich möchte wissen, wie weit dieser Wagen reicht.“]
+ „Ich möchte wissen, wie weit dieser Wagen reicht.“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ ~ rel_inc(viktor_bold)
+ „Ein Zug reicht selten nur räumlich“, sagt Viktor. Er hält dich nicht auf.
+ -> to_corridor
+
++ [__Entwaffne__: „Verzeihen Sie. Ich traue mir einen Spiegel ohne amtliche Hilfe zu.“]
+ „Verzeihen Sie. Ich traue mir einen Spiegel ohne amtliche Hilfe zu.“
+ ~ route_inc(route_lover)
+ ~ rel_inc(viktor_open)
+ ~ rel_inc(viktor_personal_involvement)
+ Etwas an seinem Mundwinkel bewegt sich. „Ich werde die Monarchie nicht beunruhigen.“
+ -> to_corridor
+
++ [__Schütze dich__: „Ich brauche einen Augenblick ohne Aufsicht.“]
+ „Ich brauche einen Augenblick ohne Aufsicht.“
+ ~ route_inc(route_sapphic)
+ ~ rel_inc(viktor_closed)
+ ~ rel_inc(viktor_concern)
+ Viktor sieht zur Tür, nicht zu dir. „Dann nehmen Sie ihn. Aber verlieren Sie ihn nicht.“
+ -> to_corridor
+
++ [__Verplappere dich__: „Mir ist zu warm. Oder zu eng. Ich weiß nicht genau.“]
+ „Mir ist zu warm. Oder zu eng. Ich weiß nicht genau.“
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ ~ rel_inc(viktor_unreliable)
+ „Langsam“, sagt Viktor, sofort und nicht scharf. „Der Gang schwankt.“
+ -> to_corridor
+
++ [__Benenne__: Aufstehen, ohne um Erlaubnis zu bitten.]
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ ~ rel_inc(viktor_loss_of_control)
+ Du stehst auf. Nicht hastig, nicht trotzig; nur so, als sei dein Körper keine Akte, die Viktor gegenzeichnen muss.
+
+ Viktor erhebt sich halb. „Fräulein.“ Das Wort ist kein Gruß. „Wohin?“
+ -> silent_challenge
+
+- (silent_challenge)
++ [__Wahre Form__: „Zum Waschraum, Herr Nowak. Nicht aus der Monarchie.“]
+ „Zum Waschraum, Herr Nowak. Nicht aus der Monarchie.“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ Er setzt sich wieder. „Dann will ich die Monarchie beruhigt wissen.“
+ -> to_corridor
+
++ [__Trotze__: „Dorthin, wo Ihre Augen nicht zuerst ankommen.“]
+ „Dorthin, wo Ihre Augen nicht zuerst ankommen.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ ~ rel_inc(viktor_alarm)
+ Für einen Augenblick wird er sehr still. Dann macht er den Weg frei.
+ -> to_corridor
+
+- (to_corridor)
+ Du öffnest die Abteiltür. Der Griff ist kühler, als Messing sein sollte. Dahinter schwankt der schmale Gang des ersten Wagens in Fahrtrichtung.
+ ~ companion_leave(viktor)
+ -> train_home_corridor
+-> DONE
+
+
+// ============================================================================
+// ROOM: HOME CORRIDOR
+// ============================================================================
+
+=== train_home_corridor ===
+-> enter_room(loc_train_home_corridor, -> train_home_corridor_entry, -> train_home_corridor_look, -> train_home_corridor_exits, -> train_home_corridor_bucket) -> provide_choices
+
+
+=== train_home_corridor_bucket ===
+-> DONE
+
+
+=== train_home_corridor_entry ===
+Der Gang des ersten Wagens ist schmaler, als er durch die Scheibe wirkte. Links die Abteiltüren, rechts die Fenster, dazwischen Messinggriffe für Würde in Bewegung. Hinter einer Tür wartet Viktor; hinter den anderen reisen Husten, Parfüm, Papier und das beleidigte Schweigen von Menschen, die sich einander teuer vom Leib halten.
+-> DONE
+
+
+=== train_home_corridor_look ===
++ [__Schaue__: Den Gang des ersten Wagens entlang. #key:l]
+ Der Gang ist nicht länger neu, aber seine Enge arbeitet weiter. Gegen die Fahrtrichtung liegt eine Tür, die nicht zu deiner Fahrt gehört; in Fahrtrichtung wartet der Übergang zum nächsten Wagen. Dein Abteil ist die einzige seitliche Tür, die jetzt wirklich dein Ort ist.
+ -> provide_choices
+-> DONE
+
+
+=== train_home_corridor_exits ===
++ [__Betrete__: Dein Abteil. #key:w]
+ Du öffnest die seitliche Tür und trittst zurück in den kleinen Raum aus Polster, Papier und Viktors Aufmerksamkeit.
+ -> train_compartment_return
+
++ [__Gehe__: In Fahrtrichtung zum nächsten Wagen. #key:s]
+ Du gehst in Fahrtrichtung bis zur Übergangstür. Für einen Atemzug greifen Lärm, Kälte und Kohlenrauch nach Rock und Hut; dann nimmt dich der nächste Wagen auf.
+ -> train_clergy_corridor
+
+* [__Prüfe__: Die Tür gegen die Fahrtrichtung. #key:n]
+ -> train_second_class_door
+-> DONE
+
+
+=== train_second_class_door ===
+Die Tür ist nicht verschlossen wie ein Tresor. Sie ist verschlossen wie eine soziale Gewissheit. Durch die Scheibe erkennst du nicht viel: engeres Holz, mehr Körper, andere Hüte, eine Luft, die weniger Abstand zwischen Menschen erlaubt. Du legst die Hand an den Griff und lässt sie wieder sinken. Neugier ist kein ausreichender Anlass, ohne Einladung durch fremde Klassen zu gehen.
+-> provide_choices
+
+
+// ============================================================================
+// ROOM: CLERGY CORRIDOR
+// ============================================================================
+
+=== train_clergy_corridor ===
+-> enter_room(loc_train_clergy_corridor, -> train_clergy_corridor_entry, -> train_clergy_corridor_look, -> train_clergy_corridor_exits, -> train_clergy_corridor_bucket) -> provide_choices
+
+
+=== train_clergy_corridor_bucket ===
+<- train_clergy_faith_choices
+<- train_corridor_tunnel_choices
+-> DONE
+
+
+=== train_clergy_corridor_entry ===
+Im nächsten Wagen riecht der Gang stärker nach Kohle, feuchter Wolle und kalter Luft, die bei jedem Übergang hereingebeten wird. Hinter den Abteiltüren liegen Stimmen, Gepäck, Müdigkeit und das geübte Schweigen von Reisenden, die einander höflich nicht zur Kenntnis nehmen.
+-> DONE
+
+
+=== train_clergy_corridor_look ===
++ [__Schaue__: Den zweiten Gang entlang. #key:l]
+ Der Wagen wirkt gewöhnlicher als der erste, aber nicht freier. Gegen die Fahrtrichtung liegt dein eigener Wagen. In Fahrtrichtung wird der Zug praktischer: härterer Boden, weniger Polster, ein Schild zum Waschraum.
+ -> provide_choices
+-> DONE
+
+
+=== train_clergy_corridor_exits ===
++ [__Gehe__: Gegen die Fahrtrichtung zurück. #key:n]
+ Du trittst über die unruhige Verbindung zurück. Lärm und Kälte schließen sich hinter dir; der erste Korridor empfängt dich wieder mit Messinggriffen, Polstergeräuschen und der Nähe deines Abteils.
+ -> train_home_corridor
+
++ [__Gehe__: In Fahrtrichtung weiter. #key:s]
+ Du gehst in Fahrtrichtung weiter. Der Gang wird enger, sachlicher; vorn hängt ein Schild zum Waschraum.
+ -> train_washroom_corridor
+-> DONE
+
+
+// ============================================================================
+// ROOM: WASHROOM CORRIDOR
+// ============================================================================
+
+=== train_washroom_corridor ===
+-> enter_room(loc_train_washroom_corridor, -> train_washroom_corridor_entry, -> train_washroom_corridor_look, -> train_washroom_corridor_exits, -> train_washroom_corridor_bucket) -> provide_choices
+
+
+=== train_washroom_corridor_bucket ===
+<- train_corridor_tunnel_choices
+-> DONE
+
+
+=== train_washroom_corridor_entry ===
+Der dritte Wagen ist praktischer gebaut. Türen stehen enger, der Boden antwortet härter auf jeden Ruck, und ein Schild weist zum Waschraum. Hier gibt der Zug weniger vor, ein Salon zu sein. Er wird Apparat.
+-> DONE
+
+
+=== train_washroom_corridor_look ===
++ [__Schaue__: Den praktischen Wagen entlang. #key:l]
+ Gegen die Fahrtrichtung liegen der zweite Wagen, der erste Wagen und Viktor. Seitlich wartet der Waschraum mit seinem kleinen Spiegelversprechen. In Fahrtrichtung schließt eine Tür den nächsten Wagen ab; durch ihr Glas blitzt Weiß von Tischtüchern.
+ -> provide_choices
+-> DONE
+
+
+=== train_washroom_corridor_exits ===
++ [__Gehe__: Gegen die Fahrtrichtung zurück. #key:n]
+ Du lässt das Schild zum Waschraum hinter dir und gehst gegen die Fahrtrichtung zurück in den zweiten Wagen.
+ -> train_clergy_corridor
+
++ [__Betrete__: Den Waschraum. #key:e]
+ Du öffnest die schmale Tür zur Seite. Der Gang bleibt hinter dir zurück; vor dir wartet ein Raum, der kaum mehr als Spiegel, Wasser und Verriegelung ist.
+ -> train_washroom
+
++ {lacks(dining_car_known_def)} [__Sieh nach__: Was hinter der Tür in Fahrtrichtung liegt. #key:s]
+ ~ mark(dining_car_known_def)
+ Du öffnest die Tür in Fahrtrichtung nur weit genug, um hineinzusehen. Dahinter liegt der Speisewagen: weiße Tücher, Glas, Besteck, Kellner mit ruhigen Händen. Allein weiterzugehen wäre auffällig; mit Viktor wäre es eine Mahlzeit.
+ -> provide_choices
+-> DONE
+
+
+// ============================================================================
+// ROOM: DINING CAR
+// ============================================================================
+
+=== train_dining_car ===
+-> enter_room(loc_train_dining_car, -> train_dining_car_entry, -> train_dining_car_look, -> train_dining_car_exits, -> train_dining_car_bucket) -> provide_choices
+
+
+=== train_dining_car_bucket ===
+<- train_dining_car_viktor_choices
+<- train_dining_car_episode_choices
+-> DONE
+
+
+=== train_dining_car_entry ===
+Der Speisewagen ist schmaler Luxus in Bewegung: Tische mit zu weißen Tüchern, Metall, Glas, das helle Klirren von Geschirr und Kellner, die Balance nicht als Kunst, sondern als Beruf gelernt haben. Viktor zieht einen Stuhl für dich zurück. Für alle anderen sieht es nach Begleitung aus. Für dich fühlt es sich an wie ein anderer Tisch, an dem dieselben Fragen Platz nehmen. #gloss[Speisewagen](Eisenbahnwagen mit Bewirtung. Ein Ort, an dem Reisezeit in Mahlzeit verwandelt wird und Standesunterschiede trotzdem mit am Tisch sitzen.)
+-> DONE
+
+
+=== train_dining_car_look ===
++ [__Schaue__: Durch den Speisewagen. #key:l]
+ Die weißen Tücher sind weniger Verheißung als Arbeitsfläche. Besteck, Gläser, Kellner, fremde Reisende, Viktor gegenüber: Der Raum hält Gesellschaft und Mechanik auf einem schmalen Gleis zusammen. Jeder Bissen hat Zeugen.
+ -> provide_choices
+-> DONE
+
+
+=== train_dining_car_viktor_choices ===
++ {present(viktor)} [__Frage__: Wen Viktor hier beobachtet. #key:x]
+ -> viktor_observes_dining_car
+-> DONE
+
+- (viktor_observes_dining_car)
+ „Wer sieht uns an?“, fragst du, während der Kellner die Suppe abstellt.
+
+ Viktor nimmt das Messer auf, als sei auch Besteck eine Gelegenheit zur Tarnung. „Der Kellner, weil er muss. Der Herr am zweiten Tisch, weil Sie nicht hierher passen wollen. Die ältere Dame am Fenster, weil sie hofft, dass Sie es doch tun.“
+
+ * [__Prüfe__: „Und Sie?“]
+ „Und Sie?“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ „Ich sehe nach Ausgängen“, sagt er. „Das ist weniger poetisch, aber zuverlässiger.“
+
+ * [__Entwaffne__: „Wie schade. Ich hoffte, Sie hätten wenigstens Hunger.“]
+ „Wie schade. Ich hoffte, Sie hätten wenigstens Hunger.“
+ ~ route_inc(route_lover)
+ ~ rel_inc(viktor_open)
+ Er sieht auf den Teller. „Hunger lässt sich besser verbergen als Sorge.“
+
+ * [__Wahre Form__: „Dann essen wir, bevor die Beobachtung auffällt.“]
+ „Dann essen wir, bevor die Beobachtung auffällt.“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ „Eine zivile Taktik“, sagt er. „Ich billige sie.“
+ -
+ -> provide_choices
+-> DONE
+
+
+=== train_dining_car_episode_choices ===
++ {present(viktor)}
+ {state_reached(CourtMission.supernatural_pretext_named)} [__Sprich__: Über Hohenreith, solange Geschirr klirrt.]
+ -> dining_car_mission_talk
+-> DONE
+
+- (dining_car_mission_talk)
+ Das Essen gibt dem Gespräch Deckung. Eine Frage kann unter Porzellan verschwinden, eine Antwort unter dem Ruck der Kupplung.
+
+ * [__Präzisiere__: „Warum keine Polizei?“]
+ „Warum keine Polizei?“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_reliable)
+ „Weil Polizei Öffentlichkeit erzeugt. Und weil manche Familien lieber gefährdet sind als lächerlich.“
+
+ * [__Benenne__: „Eine Familie, die Geister bestellt, fürchtet Lebende.“]
+ „Eine Familie, die Geister bestellt, fürchtet Lebende.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_insightful)
+ Viktor hebt den Blick. „Oder sie hat gelernt, dass Lebende sich besser hinter Geistern verstecken.“
+
+ * [__Schütze dich__: „Und wenn man dort vor allem mich prüfen will?“]
+ „Und wenn man dort vor allem mich prüfen will?“
+ ~ route_inc(route_sapphic)
+ ~ rel_inc(viktor_concern)
+ „Dann prüfen Sie zurück“, sagt er. „Höflich, wenn möglich. Schnell, wenn nötig.“
+ -
+ -> provide_choices
+-> DONE
+
+
+=== train_dining_car_exits ===
++ {present(viktor)} [__Beende__: Das Essen und kehre mit Viktor ins Abteil zurück. #key:n]
+ Der Speisewagen entlässt euch mit Glasgeräusch und Kohlenrauch. Ihr geht gegen die Fahrtrichtung zurück, durch den praktischen Wagen, den zweiten Wagen und den ersten Korridor, bis Viktor die Tür zu eurem Abteil öffnet.
+ ~ character_move_to(viktor, loc_train_compartment)
+ ~ companion_leave(viktor)
+ -> train_compartment
+-> DONE
+
+
+=== train_clergy_faith_choices ===
+* {has(name_def)}
+ {lacks(relig_def)} #auto
+ -> priest_encounter
+-> DONE
+
+- (priest_encounter)
+Eine Abteiltür öffnet sich, bevor du sie erreicht hast. Ein Priester tritt heraus, eine Mappe unter dem Arm, das Gesicht noch bei den Menschen im Abteil. Er will an dir vorbei und bleibt doch einen halben Schritt zu lange stehen. Hinter ihm hebt eine Nonne den Blick, senkt ihn wieder und sieht gerade dadurch genug. #gloss[Nonne](Ordensfrau. Von der Welt getrennt zu sein bedeutet nicht, sie nicht lesen zu können.)
+-> faith_choices
+
+- (faith_choices)
+* [__Bekenne__: Dich bekreuzigen und ehrerbietig grüßen.]
+ ~ relig = catholic
+ Gott ist kein Gesprächsthema für Abteile. Du glaubst nicht kindlich, aber tief: an Sünde, Gnade, Sakrament, Versuchung und an die gefährliche Nähe der unsichtbaren Welt. #gloss[Sakrament](Heilige Handlung der katholischen Kirche. In einer katholischen Gesellschaft ist es zugleich Gnade, Ordnung und öffentliche Form.)
+ -> faith_defined
+
+* [__Ordne ein__: Höflich nicken, wie man es gelernt hat.]
+ ~ relig = social
+ Du nickst mit der richtigen Mischung aus Achtung und Distanz. Du kennst Feiertage, Beichten, Prozessionen und die Macht eines Pfarrers über Menschen, die behaupten, ihn nicht zu fürchten.
+ -> faith_defined
+
+* [__Misstraue__: Den Blick halten, aber keinen Schritt zu viel weichen.]
+ ~ relig = reform
+ Du weichst höflich genug aus, aber nicht demütig. Priester erklären zu oft, was sie zuerst besitzen möchten: Schuld, Frauen, Armut und Angst.
+ -> faith_defined
+
+* [__Verbinde__: Im Segen auch die Toten hören.]
+ ~ relig = spiritist
+ Heiligenbilder, Totenmessen, Séancen, Träume: Die sauberen Grenzen dazwischen scheinen dir eher von Männern gezogen als von der Ewigkeit selbst. #gloss[Séancen](Geistersitzungen mit Tisch, gedämpftem Licht und sehr viel Erwartung. Je dunkler der Raum, desto leichter glauben die Anwesenden, sie sähen klar.)
+ -> faith_defined
+
+* [__Erinnere dich__: Dass der Glaube dich formte, bevor du dich wehren konntest.]
+ ~ relig = wounded
+ Du kennst die Gebete zu gut, um sie einfach abzulegen, und die Schuld zu gut, um sie fromm zu nennen. Katholische Bilder sind für dich keine Dekoration. Sie greifen nach Stellen, die du lieber versiegelt hieltest.
+ -> faith_defined
+
+- (faith_defined)
+ ~ mark(relig_def)
+ Der Priester neigt den Kopf, als habe er genau so viel erfahren, wie Höflichkeit erlaubt. Dann tritt er in sein Abteil zurück. Die Tür schließt sich; der Gang gehört wieder dir.
+ -> train_clergy_corridor
+-> DONE
+
+
+=== train_corridor_tunnel_choices ===
+* {has(name_def)}
+ {lacks(body_def)}
+ {not (loc(loc_train_clergy_corridor) && lacks(relig_def))} #auto(3)
+ -> tunnel_event
+-> DONE
+
+
+- (tunnel_event)
+Der Zug stößt in einen Tunnel.
+
+Das Land draußen erlischt. Die Scheiben verlieren Felder, Himmel und die hellen Fetzen von Ortschaften; übrig bleiben Messinggriffe, dunkles Holz und der bleiche Umriss deines Körpers.
+
+Ausgerechnet jetzt wird das Glas nützlich. Es zeigt die Frau, die in Eibenreith aussteigen wird.
+
+* {lacks(body_def)} [__Erkenne__: Eine kleine, schmale Gestalt.]
+ ~ body = small_slender
+ Unter Mantel, Rock und Haltung bleibt etwas Knappes, Schnelles an dir: schmale Schultern, feine Handgelenke, ein Körper, den Räume leicht übersehen und Gespräche zu spät bemerken.
+ -> outfit_choice
+
+* {lacks(body_def)} [__Erkenne__: Eine mittelgroße Gestalt mit ruhiger Gegenwart.]
+ ~ body = medium_soft
+ Du wirkst nicht zerbrechlich. Die Taille ist geformt, nicht mädchenhaft; die Schultern sind ruhig, die Anwesenheit fester, als manche Männer an einer jungen Frau bequem finden.
+ -> outfit_choice
+
+* {lacks(body_def)} [__Erkenne__: Eine hochgewachsene, schlanke Gestalt.]
+ ~ body = tall_slender
+ Aufrecht stehend nimmst du mehr Raum ein, als deine Rolle verspricht: lange Linien, schmale Hände, eine Haltung, die Disziplin beinahe wie Herkunft aussehen lässt.
+ -> outfit_choice
+
+* {lacks(body_def)} [__Erkenne__: Eine kompakte, kräftigere Gestalt.]
+ ~ body = compact_strong
+ Reisekleidung und Korsett ordnen dich, aber sie verleugnen nicht alles. In Nacken, Unterarmen und Gleichgewicht liegt mehr Kraft, als man einer Dame höflich zutraut.
+ -> outfit_choice
+
+- (outfit_choice)
+Die Spiegelung spricht auch durch Stoff: was verborgen werden soll, was gezeigt werden darf, was nur eine andere Frau sofort versteht.
+
+* [__Trage__: Ein dunkel anthrazitfarbenes Reisekostüm mit pflaumenfarbenem Samtkragen.]
+ ~ outfit = charcoal_plum_velvet
+ Anthrazitfarbene Wolle, pflaumenfarbener Samt an Kragen und Manschetten: gedämpft genug für den Tag, teuer genug für Menschen mit Augen. #gloss[Reisekostüm](Damenkleidung für die Reise. Fest genug für Bahnhofsschmutz, korrekt genug für fremde Blicke, und unbequem genug, damit niemand vergisst, dass auch Zweckmäßigkeit weiblich auszusehen hat.)
+
+* [__Trage__: Ein schwarzbraunes Wollkostüm mit elfenbeinfarbener Bluse und schmaler Spitze.]
+ ~ outfit = black_brown_ivory_lace
+ Der Rock ist dunkel und schwer genug für die Reise, die Jacke streng, die elfenbeinfarbene Bluse am Hals hochgeschlossen. Die Spitze ist schmal, sauber und gefährlich nahe an Frömmigkeit.
+
+* [__Trage__: Ein graublaues Kostüm mit kurzem Mantel und praktischen Knöpfen.]
+ ~ outfit = blue_grey_practical
+ Graublaue Wolle, ein kurzer Mantel, ein Rock, der beim Aussteigen nicht sofort Verrat übt, und Knöpfe, die mehr nach Zweck als nach Schmuck aussehen.
+
+* [__Trage__: Ein dunkelgrünes Kostüm mit schwarzem Besatz und passendem Hut.]
+ ~ outfit = dark_green_black_trim
+ Das Grün ist so dunkel, dass es erst im Licht der Fenster sichtbar wird. Schwarzer Besatz, passende Handschuhe, ein Hut mit kleiner Feder: nicht laut, aber schwer zu vergessen.
+
+* [__Trage__: Ein schwarzes Reisekleid mit Schleier, zu ernst für bloße Mode.]
+ ~ outfit = black_veil_severe
+ Das Schwarz ist nicht Trauer, jedenfalls nicht offiziell. Ein schmaler Schleier, dunkle Handschuhe, glatter Rock. Kleidung, in der skeptische Männer leichter an Ahnungen glauben.
+
+-
+~ mark(body_def)
+-> provide_choices
+
+
+// ============================================================================
+// ROOM: WASHROOM
+// ============================================================================
+
+=== train_washroom ===
+-> enter_room(loc_train_washroom, -> train_washroom_entry, -> train_washroom_look, -> train_washroom_exits, -> train_washroom_bucket) -> provide_choices
+
+
+=== train_washroom_bucket ===
+<- train_washroom_face_choices
+-> DONE
+
+
+=== train_washroom_entry ===
+Der Waschraum ist eng, metallisch und beleidigend praktisch. Wasser, Spiegel, Haken, Becken, ein Riegel, der zu dünn wirkt, um die Welt draußen aufzuhalten. Endlich ist Viktor nicht im Raum. Dafür bist du es.
+
+Du ziehst die Handschuhe aus. Die Hände darunter sind feucht und gerötet. Eine Dame macht sich nicht nur frisch. Sie stellt die Oberfläche wieder her, an der andere ihre Urteile befestigen.
+-> DONE
+
+
+=== train_washroom_look ===
++ [__Schaue__: Im Waschraum umher. #key:l]
+ Der Raum ist noch immer zu klein für die Menge Welt, die er draußen halten soll. Wasser, Haken, Becken, Spiegel. Vor allem der Spiegel bleibt nützlich und unverschämt.
+ -> provide_choices
+-> DONE
+
+
+=== train_washroom_face_choices ===
+* {has(name_def)}
+ {lacks(face_def)} [__Erkenne__: Dunkelbraunes Haar unter dem Reisehut.]
+ ~ hair = dark_brown
+ Dunkelbraunes Haar rahmt Stirn und Schläfen. Im schwachen Lampenlicht wird es wärmer, als es im Wiener Morgen wirkte.
+ -> hair_style_choice
+
+* {has(name_def)}
+ {lacks(face_def)} [__Erkenne__: Kastanienbraunes Haar, das Licht sammelt.]
+ ~ hair = chestnut
+ Kastanienbraunes Haar fängt jedes bisschen Licht und macht dein Gesicht weicher, als dein Blick es erlaubt.
+ -> hair_style_choice
+
+* {has(name_def)}
+ {lacks(face_def)} [__Erkenne__: Aschblondes Haar, das sich zurücknimmt.]
+ ~ hair = dark_blond_ash
+ Dunkelblondes, aschbraun wirkendes Haar gibt dir etwas Zurückhaltendes, besonders unter dem dunklen Reisehut.
+ -> hair_style_choice
+
+* {has(name_def)}
+ {lacks(face_def)} [__Erkenne__: Rotbraunes Haar, sorgfältig gebändigt.]
+ ~ hair = auburn
+ Rotbraunes Haar ist nie ganz unauffällig, auch wenn Nadeln, Hut und Sitte es zur Ordnung zwingen.
+ -> hair_style_choice
+-> DONE
+
+
+- (hair_style_choice)
+Die Frisur ist nicht bloß Geschmack. Eine Frau trägt auch ihre Beherrschung auf dem Kopf.
+
+* [__Ordne__: Einen glatten Mittelscheitel und einen tiefen Knoten.]
+ ~ style = centre_part_low_bun
+ Der Mittelscheitel ist sauber, der Knoten tief und fest. Keine Locke bittet um Nachsicht.
+
+* [__Ordne__: Weiche Stirnwellen und einen sorgfältigen Chignon.]
+ ~ style = soft_waves_chignon
+ Die Stirnwellen sind weich gelegt, der Chignon sitzt sauber unter dem Hut. Zugänglicher, aber nicht weniger berechnet.
+
+* [__Ordne__: Geflochtene Partien und einen schweren Knoten.]
+ ~ style = braided_low_knot
+ Geflochtene Partien führen das Haar zur Ordnung zurück. Der Knoten im Nacken ist schwerer, ländlicher vielleicht, aber unter städtischer Hand gezähmt.
+
+* [__Ordne__: Eine modisch gehobene Stirnpartie.]
+ ~ style = raised_front_modern
+ Das Haar hebt sich über der Stirn mit jener neuen Fülle, die ältere Damen für Eitelkeit und jüngere für Freiheit halten. Unter dem Reisehut bleibt es gerade noch anständig.
+
+-
+Das Gesicht im Spiegel ist deutlich genug, um nicht mehr auszuweichen.
+
+* [__Erkenne__: Helle Haut, kühle Augen und scharfe Brauen.]
+ ~ face = cool_sharp
+ Dein Teint ist hell und kühl, die Brauen geben dem Gesicht mehr Bestimmtheit, als ein flüchtiger Blick erwartet.
+
+* [__Erkenne__: Rosigen Teint, weichen Mund und wachen Blick.]
+ ~ face = soft_alert
+ Der Mund wirkt weicher als der Blick; zusammen macht dich das zugänglicher, aber nicht einfacher.
+
+* [__Erkenne__: Warmen Teint, dunklere Augen und ruhige Miene.]
+ ~ face = calm_dark_eyes
+ Der Teint ist wärmer, die Augen dunkler, die Miene ruhiger. Du wirkst weniger ätherisch als gegenwärtig: eine Frau aus Fleisch, Gedächtnis und Absicht.
+
+* [__Erkenne__: Blasse Haut, feine Züge und ein kontrolliertes Gesicht.]
+ ~ face = fine_controlled
+ Die Züge sind fein, fast zerbrechlich, doch die Kontrolle darin ist zu sichtbar, um harmlos zu wirken. Wer dich für schwach hält, möchte es zu gern.
+
+* [__Erkenne__: Ein markanteres Gesicht mit gerader Nase und festem Kinn.]
+ ~ face = marked_jaw
+ Die Linien sind weniger gefällig, als ein Porträtmaler sie gern hätte. Das Gesicht verrät eher Willen als Sanftmut.
+
+-
+~ mark(face_def)
+
+Du befestigst Hut und Nadeln, ziehst die Handschuhe wieder an und öffnest den Riegel. Das Gesicht, das nach Hohenreith reisen wird, ist wieder gesellschaftsfähig.
+
+-> train_washroom
+
+
+=== train_washroom_exits ===
++ [__Verlasse__: Den Waschraum. #key:w]
+ Du ziehst den Riegel zurück und trittst seitlich wieder hinaus in den praktischen Wagen mit seinem harten Boden und dem Schild, das nun hinter dir liegt.
+ -> train_washroom_corridor
+
++ {has(face_def)} [__Gehe__: Gegen die Fahrtrichtung zurück ins Abteil. #key:n]
+ Du gehst den Weg zurück: aus dem Waschraum, gegen die Fahrtrichtung durch den praktischen Wagen, den zweiten Wagen und den ersten Korridor bis zur Tür deines eigenen Abteils.
+ -> train_compartment_return
+-> DONE
+
+
+=== train_compartment_return ===
+Viktor hebt den Blick, als du wieder eintrittst. Er fragt nicht, ob alles in Ordnung sei. Er ist zu gut erzogen oder zu gut ausgebildet.
+
+-> train_compartment
+
+
+// ============================================================================
+// CHAPTER EXIT
+// ============================================================================
+
+=== train_intro_end ===
+~ mark(intro_def)
+~ episode_end("normal")
+
+Der Zug beginnt langsamer zu werden. Der Rhythmus verändert sich zuerst im Boden, dann im Fenster, dann im Körper. Häuser sammeln sich neben der Strecke; ein Stationsdach erscheint zwischen Rauch und den dunklen Kämmen bewaldeter Hänge. #sfx[steam-whistle.ogg]
+
+Viktor legt das Memorandum zurück in die Mappe. „Ab jetzt“, sagt er, „reisen Blicke schneller als wir.“
+
+Du richtest die Handschuhe.
+
+-> advance_to_slot(noon)
+
diff --git a/data/ink-src/eibenreith/02_bahnhof.ink b/data/ink-src/eibenreith/02_bahnhof.ink
new file mode 100644
index 0000000..13e610f
--- /dev/null
+++ b/data/ink-src/eibenreith/02_bahnhof.ink
@@ -0,0 +1,379 @@
+// ============================================================================
+// EIBENREITH 02 BAHNHOF
+// ============================================================================
+// Kapitel 02: Mittag / Bahnhof und Umstieg.
+//
+// Architektur:
+// - episode start/end + episode bucket
+// - Räume mit entry, look, exits, bucket
+// - Interaktionen als konditionierte Weaves in Buckets
+// ============================================================================
+
+
+// ============================================================================
+// EPISODE DEFINITION
+// ============================================================================
+
+=== railway_station ===
+-> station_midday
+
+
+=== station_midday ===
+~ state_reach(meal_plan_chosen)
+~ character_move_to(viktor, loc_station_platform)
+~ companion_join(viktor)
+
+Die Station ist klein genug, dass der Zug kurz verlegen wirkt, als er dort hält. #chapter[Der Bahnhof] #image[muerzzuschlag.png](portrait)
+
+Dampf hängt unter dem Stationsdach. Ein Gepäckträger mit zu großer Kappe eilt über den Bahnsteig. Jenseits des Gebäudes stampft ein Kutschpferd im gefrorenen Schlamm. Der Ortsname steht auf einem Schild, sachlich und kaiserlich, als hätte er nie vorgehabt, in einem Salon ausgesprochen zu werden. #gloss[Gepäckträger](Bahnhofsdienstmann für Koffer, Schachteln und jene kleine Demütigung, dass auch Besitz getragen werden muss.) #gloss[Stationsdach](Überdachung des Bahnsteigs. Sie schützt Reisende vor Wetter, nicht vor Blicken.)
+
+{meal(MealPlan.dining_car):
+ ~ state_reach(meal_taken_in_train)
+ Der Speisewagen hat dir ein kontrolliertes Mittagessen gegeben. Tischtuch, Besteck, gedämpfte Stimmen, Suppe unter Bewegung. Jetzt bleibt am Bahnhof vor allem der Umstieg.
+- else:
+ {meal(MealPlan.station_restaurant):
+ Die Bahnhofsrestauration wartet mit Kaffee, Suppe, Zeitungen und dem Trost, dass jede Reiseklasse am Tisch wieder neu sortiert werden kann. #gloss[Bahnhofsrestauration](Gastwirtschaft am Bahnhof. Praktisch, laut und gesellschaftlich nützlich, weil Menschen dort essen, während sie so tun, als seien sie nur unterwegs.)
+ - else:
+ {meal(MealPlan.light_refreshment):
+ Tee, Gebäck und ein wenig Ruhe haben deinen Hunger nicht beseitigt, nur vertagt. Der Körper nimmt solche Höflichkeiten nicht immer dankbar an.
+ - else:
+ Du hast die Frage des Mittagessens noch nicht entschieden. Das ist kein Skandal, aber der Bahnhof wird aus kleinen Unterlassungen rasch praktische Schwierigkeiten machen.
+ }
+ }
+}
+
+-> station_platform
+
+
+=== station_midday_episode_bucket ===
+<- station_episode_viktor_current_room
+<- station_episode_viktor_public_arrival
+-> DONE
+
+
+=== station_midday_end ===
+-> DONE
+
+
+// ============================================================================
+// ROOM: STATION PLATFORM
+// ============================================================================
+
+=== station_platform ===
+-> enter_room(loc_station_platform, -> station_platform_entry, -> station_platform_look, -> station_platform_exits, -> station_platform_bucket) -> provide_choices
+
+
+=== station_platform_entry ===
+~ state_reach(noticed_as_official_arrival)
+
+Der Zug atmet aus. Menschen bewegen sich nicht chaotisch, sondern nach unsichtbaren Ranglinien. Wer zuerst aussteigt, wer wartet, wer trägt, wer nicht trägt, wer so tut, als habe er nichts gesehen. Viktor steht neben dir, korrekt genug, um als Sekretär durchzugehen, und zu aufmerksam, um einer zu sein.
+
+-> DONE
+
+
+=== station_platform_look ===
++ [__Schaue__: Über den Bahnsteig. #key:l]
+ Unter dem Stationsdach stehen Reisende, Kisten, Körbe und jene kleinen Gruppen, die nur auf Bahnhöfen entstehen. Niemand starrt offen. Stattdessen entstehen Leerstellen in den Bewegungen der Leute. Ein Blick wandert zu spät weiter. Ein Schritt ändert seine Richtung. Ein Gespräch besteht plötzlich nur noch aus Endungen.
+ -> provide_choices
+-> DONE
+
+
+=== station_platform_exits ===
++ {state_reached(baggage_handed_over)} [__Gehe__: Zur Kutsche. #key:s]
+ -> station_baggage_and_carriage
+-> DONE
+
+
+=== station_platform_bucket ===
+<- station_platform_sign
+<- station_platform_listen
+<- station_platform_waiting_people
+<- station_late_meal_choice
+<- station_restaurant_offer
+<- station_baggage
+-> DONE
+
+
+=== station_platform_sign ===
+* [__Lies__: Das Schild am Bahnsteig. #key:x]
+ Der Ortsname ist mit schwarzer Farbe auf hellem Grund gemalt, zweckmäßig, kaiserlich, ohne jede Rücksicht auf den Eindruck, den er auf Ankommende macht. Die Buchstaben sehen aus, als hätten sie nur deshalb Haltung, weil man sie angeschraubt hat.
+ -> provide_choices
+-> DONE
+
+
+=== station_platform_listen ===
+* [__Höre__: Auf den Bahnhof.]
+ Unter dem Zischen der Lokomotive liegen kleinere Geräusche. Ein Koffer wird auf Holz abgesetzt. Ein Beamter räuspert sich. Pferdehufe schlagen im gefrorenen Schlamm. Eine Frau beginnt ein Gebet und verschluckt das zweite Wort.
+ -> provide_choices
+-> DONE
+
+
+=== station_platform_waiting_people ===
+* [__Untersuche__: Die Wartenden.]
+ Niemand scheint nur zu warten. Die einen zählen Gepäckstücke, die anderen Rangzeichen, wieder andere mögliche Fehler. Der Bahnhof ist kein Ort, an dem man unbemerkt ankommt. Er ist nur höflich genug, diese Tatsache nicht auszusprechen.
+ -> provide_choices
+-> DONE
+
+
+=== station_restaurant_offer ===
++ {meal(MealPlan.station_restaurant)} {state_before(meal_taken_at_station)} [__Speise__: In der Bahnhofsrestauration.]
+ -> station_restaurant_room
+-> DONE
+
+
+=== station_late_meal_choice ===
++ {meal(MealPlan.meal_unset)} {state_before(meal_skipped_or_light)} [__Speise__: In der Bahnhofsrestauration, auch wenn es eilt.]
+ Viktor sieht auf die Bahnhofsuhr. "Für ein ordentliches Essen ist wenig Zeit. Für eine schlechte Entscheidung immer genug."
+
+ ~ meal_choose(MealPlan.station_restaurant)
+ Eine warme Suppe ist kein Luxus, wenn ein fremdes Haus den restlichen Tag besitzen wird.
+ -> station_restaurant_room
+
++ {meal(MealPlan.meal_unset)} {state_before(meal_skipped_or_light)} [__Nimm__: Nur Tee und etwas Gebäck.]
+ Viktor sieht auf die Bahnhofsuhr. "Für ein ordentliches Essen ist wenig Zeit. Für eine schlechte Entscheidung immer genug."
+
+ ~ meal_choose(MealPlan.light_refreshment)
+ ~ state_reach(meal_skipped_or_light)
+ Tee, Gebäck, ein paar Minuten Sitzen. Nicht genug, aber genug, um später nicht von Schwäche überrascht zu werden.
+ -> provide_choices
+
++ {meal(MealPlan.meal_unset)} {state_before(meal_skipped_or_light)} [__Verzichte__: Auf eine eigentliche Mahlzeit.]
+ Viktor sieht auf die Bahnhofsuhr. "Für ein ordentliches Essen ist wenig Zeit. Für eine schlechte Entscheidung immer genug."
+
+ ~ meal_choose(MealPlan.skipped)
+ ~ state_reach(meal_skipped_or_light)
+ Du behältst Zeit und verlierst Wärme. Der Körper wird sich die Rechnung merken.
+ -> provide_choices
+-> DONE
+
+
+=== station_baggage ===
++ {state_before(baggage_handed_over)} [__Überblicke__: Eine disziplinierte amtliche Zusammenstellung.]
+ Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.
+
+ ~ route_inc(route_detective)
+ Zuerst kommt ein nüchterner Reisekoffer mit vom Gebrauch stumpfen Messingecken, dann eine Aktenmappe, dann eine Hutschachtel, dann der schmale schwarze Kasten, dessen Inhalt sowohl einen Priester als auch einen Taschenspieler in Verlegenheit bringen würde, falls einer von beiden ihn ohne Phantasie durchsuchte.
+ -> station_baggage_after_choice
+
++ {state_before(baggage_handed_over)} [__Überblicke__: Das Gepäck einer eleganten Dame.]
+ Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.
+
+ ~ route_inc(route_composure)
+ Zuerst kommt ein großer Koffer aus dunklem Leder, dann ein kleinerer für Wäsche, dann eine runde Hutschachtel, ein Reise-Necessaire und das Ridikül, das du zu nahe bei der Hand behältst, als dass ein Gepäckträger seine Bedeutung missverstehen dürfte. #gloss[Reise-Necessaire](Kasten oder Tasche für Waschzeug, Fläschchen, Bürsten und jene Ausrüstung, mit der eine Dame nach einer Reise wieder wie eine Dame auszusehen hat.)
+ -> station_baggage_after_choice
+
++ {state_before(baggage_handed_over)} [__Überblicke__: Das Gepäck einer Darstellerin.]
+ Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.
+
+ ~ route_inc(route_lover)
+ Zuerst kommt ein respektabler Koffer, dann eine Hutschachtel, dann ein Reisekasten mit Handschuhen, Schleiern, Bändern, Visitenkarten und kleinen Gegenständen, mit denen man ein Zimmer überreden kann, an Kräfte zu glauben, die längst anwesend sind.
+ -> station_baggage_after_choice
+
++ {state_before(baggage_handed_over)} [__Überblicke__: Eine praktische Auswahl, die zu viel Vorbereitung verrät.]
+ Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.
+
+ ~ route_inc(route_detective)
+ Zuerst kommt ein abgenützter, an den Ecken verstärkter Koffer, dann eine Ledertasche mit Notizheften, Bleistiften, gefalteten Karten, Ersatzhandschuhen, einer kleinen Lampe und genug Notwendigkeiten, um jeden zu beleidigen, der Frauen lieber dekorativ hat.
+ -> station_baggage_after_choice
+
++ {state_before(baggage_handed_over)} [__Überblicke__: Ein übertriebener Haufen, der jede Tarnung erschwert.]
+ Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.
+
+ ~ route_inc(route_careless)
+ Zuerst kommt ein Koffer, dann ein zweiter, dann eine Hutschachtel, dann eine Reisedecke, dann ein Toilettenkasten, dann der schmale schwarze Kasten, dann ein kleineres Paket, von dem du vergessen hattest, dass es das Packen überlebt hat. Am Ende sieht selbst Viktor einen Augenblick lang zahlenmäßig unterlegen aus.
+ -> station_baggage_after_choice
+-> DONE
+
+
+=== station_baggage_after_choice ===
+Viktor überwacht die Umladung mit knapper Höflichkeit. Er trägt nicht wie ein Diener. Er weist an wie ein Mann, der vorgibt, nicht zu befehlen.
+
+Die kleine Szene vor dem Waggon ist harmlos genug, um gefährlich zu sein. Ein Gepäckträger wartet mit geneigtem Kopf. Der Kutscher steht einige Schritte entfernt. Viktor ist nah genug, um dir beim Aussteigen die Hand zu reichen, aber nicht so nah, dass er es ohne dein stilles Einverständnis täte. Drei Männer, drei Stände, drei verschiedene Arten von Nützlichkeit.
+
+Was hier geschieht, wird niemand in einem Bericht erwähnen. Gerade deshalb wird es behalten.
+
+-> station_manners_puzzle
+
+
+=== station_manners_puzzle ===
+* {class ? noble} [__Warte__: Bis Viktor seine Hand anbietet. #key:z]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ Du wartest einen Atemzug, bis Viktor seine Hand anbietet, und nimmst sie dann, als wäre dies keine Hilfe, sondern die Ordnung der Welt.
+
+ Du gibst ihm nicht dein Gewicht. Nur deine Hand. Genau genug, dass er dienen darf, ohne Diener zu werden. Der Gepäckträger senkt den Blick ein wenig tiefer. Der Kutscher sieht, was er sehen muss. Eine Dame, die ihren Rang nicht beweist, weil Beweise für Leute ohne Rang sind.
+ ~ state_reach(public_mask_established)
+
+* [__Gewähre__: Viktor die Hand und dem Gepäckträger das Gepäck.]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ Du nimmst Viktors angebotene Hand knapp und sicher, dankst ihm mit einem Nicken und lässt den Gepäckträger das Gepäck nehmen.
+
+ Es ist gutes Benehmen ohne Prunk. Nicht zu vertraut gegenüber Viktor, nicht zu freundlich gegenüber dem Gepäckträger, nicht so kalt, dass es nach Unsicherheit riecht. Mittelstand könnte dies lernen. Adel könnte es billigen. Dienstboten würden erkennen, dass du ihre Arbeit nicht mit Herablassung verwechselst.
+ ~ state_reach(public_mask_established)
+
+* [__Dirigiere__: "Zuerst den kleineren Kasten, wenn ich bitten darf."]
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ Du steigst selbst aus, bevor Viktor sich entscheiden kann, und bittest den Gepäckträger sachlich, zuerst den kleineren Kasten zu nehmen.
+
+ Das ist nicht ganz falsch, aber auch nicht ganz richtig. Viktor bemerkt die kleine Missachtung der erwarteten Form. Der Gepäckträger gehorcht erleichtert, weil klare Anweisungen leichter zu tragen sind als feine Ungewissheit. Der Kutscher ordnet dich eher der Nützlichkeit als dem Rang zu.
+ ~ state_reach(public_mask_strained)
+ ~ state_reach(staff_as_witnesses_noticed)
+
+* [__Reize__: Viktor einen Augenblick zu lang mit ausgestreckter Hand warten lassen.]
+ ~ route_inc(route_lover)
+ ~ rel_inc(viktor_unreliable)
+ ~ rel_inc(viktor_open)
+ Du lässt Viktor zu lange mit ausgestreckter Hand warten und lächelst erst dann, als hättest du ihn absichtlich geprüft.
+
+ Es ist fast ein Fauxpas, gerettet durch Anmut und die Tatsache, dass Männer Demütigungen leichter verzeihen, wenn sie sich wie Aufmerksamkeit fühlen. Viktor hilft dir hinunter. Seine Hand bleibt vollkommen korrekt. Sein Blick nicht ganz.
+ ~ state_reach(public_mask_strained)
+
+* [__Verplappere dich__: "Ach, das macht doch zu viel Mühe."]
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ Du entschuldigst dich beim Gepäckträger dafür, dass deine Sachen Mühe machen, und greifst selbst nach einem Koffer.
+
+ Der Gepäckträger erstarrt, als hättest du ihm eine philosophische Frage gestellt. Viktor tritt sofort dazwischen, höflich genug, um die Rettung wie Zufall aussehen zu lassen. Du hast gegen keine Moral verstoßen, nur gegen die unsichtbare Arbeitsteilung, auf der diese kleine Welt ruht.
+ ~ state_reach(public_mask_strained)
+ ~ state_reach(staff_as_witnesses_noticed)
+
+* {class ? working} [__Greife zu__: Dem Gepäckträger beinahe den Koffer abnehmen. #key:t]
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ ~ rel_inc(viktor_control)
+ Du springst hinunter, bevor jemand dir helfen kann, und nimmst dem Gepäckträger beinahe den Koffer aus der Hand.
+
+ Für eine Sekunde bist du schneller als deine Verkleidung. Der Gepäckträger hält fest, Viktor greift nach deinem Ellbogen, der Kutscher sieht weg, weil Wegsehen manchmal die höflichste Form von Zeugenschaft ist. Es ist kein Unglück. Nur ein Riss, klein genug, um ihn mit Haltung zu schließen.
+ ~ state_reach(public_mask_strained)
+ ~ state_reach(staff_as_witnesses_noticed)
+
+-
+~ state_reach(baggage_handed_over)
+-> provide_choices
+
+
+// ============================================================================
+// ROOM: STATION RESTAURANT
+// ============================================================================
+
+=== station_restaurant_room ===
+-> enter_room(loc_station_restaurant, -> station_restaurant_entry, -> station_restaurant_look, -> station_restaurant_exits, -> station_restaurant_bucket) -> provide_choices
+
+
+=== station_restaurant_entry ===
+~ state_reach(meal_taken_at_station)
+
+Die Bahnhofsrestauration ist wärmer als der Bahnsteig und weniger privat als das Abteil. Ein Kellner wischt einen Tisch, als könne er Reise, Klasse und Hunger mit demselben Tuch ordnen. An der Wand hängt eine Uhr, unter ihr ein Fahrplan, daneben ein Bild des Kaisers, das in diesem Licht mehr Geduld als Macht zeigt. #gloss[Fahrplan](Gedruckte Zusicherung, dass selbst Entfernung eine Bürokratie besitzt.)
+
+Viktor wählt einen Tisch, von dem aus er Tür und Fenster sehen kann. Du wählst, ob du das bemerkst.
+
+-> DONE
+
+
+=== station_restaurant_look ===
++ [__Schaue__: Durch den Gastraum. #key:l]
+ Der Raum ist zu klein für Geheimnisse und groß genug für Gerüchte. Reisende essen mit der Ungeduld von Menschen, die weiter müssen. Der Kellner sieht alles, ohne etwas gesehen zu haben.
+ -> provide_choices
+-> DONE
+
+
+=== station_restaurant_exits ===
++ [__Verlasse__: Die Bahnhofsrestauration. #key:n]
+ Der Bahnsteig empfängt dich mit kalter Luft, Dampf und dem Gefühl, wieder öffentlich zu sein.
+ -> station_platform
+-> DONE
+
+
+=== station_restaurant_bucket ===
+<- station_restaurant_viktor_table
+-> DONE
+
+
+=== station_restaurant_viktor_table ===
+* [__Wahre Form__: "Ein Tisch, der Ihnen Ausblick erlaubt. Wie aufmerksam."]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ "Ein Tisch, der Ihnen Ausblick erlaubt. Wie aufmerksam."
+
+ Viktor zieht den Stuhl nicht zu rasch zurück. "Gewohnheit, gnädiges Fräulein."
+ -> station_restaurant_lunch_end
+
+* [__Prüfe__: "Sie setzen sich nie mit dem Rücken zur Tür."]
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ "Sie setzen sich nie mit dem Rücken zur Tür."
+
+ "Nicht, solange ich dafür bezahlt werde, es nicht zu tun."
+ -> station_restaurant_lunch_end
+
+* [__Entschärfe__: "Ich verspreche, weder durch das Fenster noch durch die Küche zu entkommen."]
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_open)
+ ~ rel_inc(viktor_concern)
+ "Ich verspreche, weder durch das Fenster noch durch die Küche zu entkommen."
+
+ "Nehmen Sie mir nicht alle beruflichen Hoffnungen."
+ -> station_restaurant_lunch_end
+
+
+=== station_restaurant_lunch_end ===
+Das Essen ist einfach. Suppe, Brot, Kaffee, vielleicht ein Stück kaltes Fleisch. Es erfüllt keinen Traum, aber einen Zweck. Als du wieder aufstehst, hat der Bahnhof dich nicht weniger fremd gemacht, nur etwas belastbarer.
+
+-> station_platform
+
+
+// ============================================================================
+// EPISODE BUCKET: VIKTOR PRESENT
+// ============================================================================
+
+=== station_episode_viktor_current_room ===
+* {present(viktor)} {loc(loc_station_platform)} [__Frage__: Viktor, was er vom Bahnhof hält.]
+ "Ein Bahnhof ist selten nur ein Bahnhof", sagt Viktor. "Er zeigt, wer erwartet wird, wer abgefertigt wird und wer glaubt, ungesehen warten zu können."
+ -> provide_choices
+-> DONE
+
+
+=== station_episode_viktor_public_arrival ===
+* {present(viktor)} {state_between(noticed_as_official_arrival, public_mask_established)} [__Frage__: Viktor, ob die Leute dich ansehen.]
+ "Ja", sagt er. "Aber noch nicht gefährlich. Neugier ist leichter zu lenken als Misstrauen."
+ -> provide_choices
+-> DONE
+
+
+// ============================================================================
+// EXIT TO CHAPTER 03
+// ============================================================================
+
+=== station_baggage_and_carriage ===
+~ state_reach(carriage_arranged)
+~ state_reach(road_departure_ready)
+
+Die Kutsche aus Hohenreith wartet jenseits des Stationshofes. Dunkelgrüner Lack, schwarze Räder, das gräfliche Wappen dezent auf der Tür, zwei Pferde bereits unruhig im Geschirr. Der Kutscher nimmt den Hut ab, als er dich sieht. Nicht zu tief. Tief genug für Rang, nicht tief genug für Ehrfurcht. #sfx[horse-neigh.ogg]
+
+"Gnädiges Fräulein? Herr Sekretär?"
+
+{class ? noble:
+ Man hat ihm genug gesagt, um dich einzuordnen. Das ist eine Höflichkeit. Es ist auch eine Warnung.
+- else:
+ Er zögert bei dir um das kleinste Maß. Das Zögern ist keine Unhöflichkeit. Es ist Berechnung. Erste Klasse, Hofschreiben, kein Titel außer Fräulein, und ein Mann neben dir, der aussieht, als hätte er Menschen für weniger verhaften lassen als Starren.
+}
+
+Viktor antwortet, bevor du es kannst.
+
+"Vom Jagdhaus Hohenreith?"
+
+"Jawohl, Herr Sekretär. Der Weg ist befahrbar. Wenn der Nebel nicht dichter wird, sollten wir Eibenreith vor Einbruch der Dunkelheit erreichen."
+
+Das Wort tritt ohne Zeremonie in die Luft.
+
+Eibenreith.
+
+Nicht Hohenreith, der Name, der in sauberer Hand auf der Einladung steht. Eibenreith. Das Dorf darunter. Ein kleinerer Name. Älter im Mund. Ein Name mit Wurzeln statt Briefpapier.
+
+~ episode_end("normal")
+~ time_move_to(afternoon)
+~ loc_move_to(loc_carriage)
+
+-> carriage_ride
diff --git a/data/ink-src/eibenreith/03_anreise_routes.ink b/data/ink-src/eibenreith/03_anreise_routes.ink
new file mode 100644
index 0000000..36253c6
--- /dev/null
+++ b/data/ink-src/eibenreith/03_anreise_routes.ink
@@ -0,0 +1,431 @@
+// ============================================================================
+// EIBENREITH 03 ROUTES / ANKUNFT HOHENREITH
+// ============================================================================
+// Zielknoten der Nachmittags-Episode "Anreise nach Hohenreith".
+// Diese Datei gehört strukturell zu Kapitel 03: Kutschenfahrt, Eibenreith,
+// Routenentscheidung und Ankunft in Hohenreith.
+// ============================================================================
+
+=== direct_hohenreith_arrival ===
+~ loc_move_to(loc_hohenreith_arrival)
+~ state_reach(HohenreithArrivalFrame.punctual_official_guest)
+~ state_reach(HohenreithArrivalFrame.household_form_preserved)
+
+Die Kutsche lässt Eibenreith unterhalb der Straße zurück. #chapter[Hohenreith]
+
+Das Dorf bleibt nicht ungesehen, nur unbetreten: ein Kirchturm, niedrige Dächer, Rauch, ein paar Gesichter in Fenstern. Dann nimmt der Wald es wieder an sich. Der Weg steigt, und mit jedem Ruck der Kutsche wird der Nachmittag förmlicher. Du fährst nicht mehr irgendwohin. Du wirst erwartet.
+
+Jagdhaus Hohenreith erscheint zwischen Fichten und kahlen Obstbäumen nicht wie ein Schloss, sondern wie ein sehr entschlossener Irrtum: zu neu im oberen Bau, zu alt in den Fundamenten, zu höflich in der Fassade für die Kälte, die darunter aus dem Hang steigt. Dunkle Holzgalerien, helle Mauern, ein vorspringender Mittelteil, Geweihe über dem Portal und Fenster, die das Tal betrachten, als hätten sie es gekauft. #gloss[Jagdhaus](Adeliger Landsitz für Jagden und kurze Aufenthalte. Weniger Hauptsitz als Bühne für Gäste, Förster, Gewehre und Geheimnisse.) #gloss[Portal](Haupteingang eines repräsentativen Gebäudes. Eine Tür, die gelernt hat, Menschen schon vor dem Eintreten zu beurteilen.)
+
+Viktor steigt zuerst aus. Der Kutscher öffnet den Schlag. Ein Diener steht bereits vor der Tür, als wäre er aus dem Haus gesandt worden, noch ehe die Kutsche um die letzte Biegung kam.
+
+Du kommst pünktlich an. Das ist keine Kleinigkeit. In Häusern wie diesem ist Pünktlichkeit die erste Lüge, die alle Beteiligten gemeinsam schützen.
+
+* [__Wahre Form__: Den ersten Blick des Hauses annehmen.]
+ ~ route_inc(route_composure)
+ ~ state_reach(HohenreithArrivalFrame.expected_guest)
+ Du steigst aus, nimmst Viktor nur so weit in Anspruch, wie die Form verlangt, und lässt Mantel, Hut und Handschuhe sprechen, bevor du selbst etwas sagst.
+
+ Der Diener verneigt sich. Nicht tief. Richtig. Das Haus hat entschieden, dich zunächst als Dame zu behandeln.
+ -> hohenreith_direct_butler_welcome
+
+* [__Prüfe__: Die Fassade, bevor du dich ihr überlässt.]
+ ~ route_inc(route_detective)
+ ~ state_reach(HohenreithArrivalFrame.expected_guest)
+ Dein Blick folgt den Linien des Hauses: neue Fenster über älterem Mauerwerk, ein sauberer Eingang über feuchtem Stein, Försterordnung über etwas, das nicht nach Jagd aussieht.
+
+ Viktor bemerkt deinen Blick. Er sagt nichts. Das ist klug von ihm.
+ -> pre_dinner_transition
+
+* [__Entschärfe__: „Es sieht fast so aus, als wolle es uns gefallen.“]
+ „Es sieht fast so aus, als wolle es uns gefallen.“
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_open)
+ „Häuser wollen nichts“, sagt Viktor.
+
+ „Dann ist dieses besonders schlecht darin.“
+ -> pre_dinner_transition
+
+
+// ============================================================================
+// VILLAGE DETOUR ROUTE
+// ============================================================================
+
+=== village_detour_start ===
+~ loc_move_to(loc_eibenreith_village)
+~ mark(AfternoonOutcome.village_knowledge_prioritised)
+~ state_reach(EibenreithPublicFace.curious)
+
+Zuerst kommt der Geruch von Rauch. Dann ein Dach, niedrig und dunkel vom Wetter. Dann ein zweites. Dann ein Kirchturm, nicht hoch, nicht anmutig, sondern breitschultrig und blass vor dem Hang dahinter. Seine Mauern wirken älter als das Dorf um sie her und weniger sicher ihres Sieges. Die Fenster sind klein. Die Kirchhofmauer hält die Straße auf Abstand, als bräuchten die Toten Schutz vor den Lebenden oder die Lebenden vor etwas anderem. #chapter[Eibenreith] #sfx[church-bells.ogg](max=8, fade) #image[eibenreith.png](landscape)
+
+Eibenreith erscheint nicht, wie ein Dorf auf einem Bild erscheint, auf einmal und zur Bewunderung geordnet, sondern in Bruchstücken.
+
+Eine Frau mit einem dunklen Kopftuch hält mit einem Eimer in der Hand inne. Ein Bub hört auf, Gänse zu treiben, und lässt sie um seine Stiefel klagen. Zwei Männer vor einem Schuppen beenden im selben Augenblick ihr Gespräch, ohne einander anzusehen. Vorhänge rühren sich an Fenstern, hinter denen niemand zugibt zu stehen. Ein Schmiedeschild bewegt sich leicht in Luft, die du nicht fühlen kannst. Wasser läuft irgendwo unter Brettern, unter Stein, unter der Straße selbst, schnell, kalt und verborgen. #gloss[Schmiedeschild](Schild einer Schmiede. In einem Dorf oft weniger Werbung als Zusicherung, dass Eisen, Pferde und Männer noch in Ordnung gebracht werden können.)
+
+Die Häuser sind nicht arm, nicht eigentlich. Viele sind fest, weißgekalkt, geschindelt, erhalten mit der störrischen Anständigkeit von Menschen, die reparieren, was sie nicht ersetzen können. Und doch stört etwas in ihrer Anordnung das Auge. Sie wenden sich der Kirche zu, aber nicht ganz. Sie halten die Straße, aber lehnen sich von ihr weg. Sie lassen zwischen Hof, Zaun und Holzstoß schmale Durchgänge, in denen sich Schatten zu früh sammelt.
+
+Die Kutsche hält.
+
+Niemand läuft herbei, um dich zu begrüßen. Niemand muss das. Die Nachricht ist bereits ins Dorf eingetreten, auf Wegen schneller als Bahn, Telegraph oder kaiserliches Siegel.
+
+Du sitzt sehr gerade, während Eibenreith dich zum ersten Mal betrachtet.
+
+-> village_detour_surface
+
+
+// ============================================================================
+// VILLAGE DETOUR SURFACE
+// ============================================================================
+
+=== village_detour_surface ===
+
+Die Dorfstraße ist kein Salon und gerade deshalb nicht weniger gesellschaftlich. Jeder Blick hat hier weniger Politur, aber mehr Gedächtnis.
+
+* [__Schaue__: In die Gesichter am Straßenrand. #key:l]
+ Die Gesichter verschwinden nicht, wenn du hinsiehst. Sie verändern nur ihre Begründung: Eine Frau prüft plötzlich ihren Eimer. Ein Bub entdeckt die Gänse neu. Ein Mann tut, als habe er schon immer zum Kirchtor gesehen. Das Dorf besitzt keine Bühne, aber jeder hier kennt seinen Auftritt.
+ -> village_detour_surface
+
+* [__Höre__: Auf das Wasser unter der Straße.]
+ Unter den Rädern, unter Brettern und Steinen, unter der höflichen Behauptung einer Dorfstraße läuft Wasser. Es klingt nicht tief, aber schnell. Als hätte der Ort einen zweiten Atem, einen kalten, verborgenen, der nicht durch menschliche Münder geht.
+ -> village_detour_surface
+
+* [__Untersuche__: Die Kirche. #key:x]
+ ~ state_reach(VillageReligiousTension.church_as_center_seen)
+ Der Turm ist nicht schlank genug, um in den Himmel zu zeigen. Er steht da wie eine Faust. Die kleinen Fenster geben wenig preis, und die Mauer des Kirchhofs wirkt weniger wie Einfriedung als wie eine alte Gewohnheit, sich gegen etwas zu stemmen.
+
+ {
+ - relig ? catholic:
+ Gerade das stört dich: nicht der Mangel an Schönheit, sondern der Mangel an Frieden.
+ - relig ? reform:
+ Du siehst weniger Andacht als Institution: Stein, Besitz, Grenze, Verwaltung der Furcht.
+ - else:
+ Die Kirche sieht nicht aus, als habe sie den älteren Dingen im Tal widersprochen. Eher, als habe sie gelernt, über ihnen zu stehen.
+ }
+ -> village_detour_surface
+
+* [__Betrachte__: Das Bild neben dem Kirchhofstor.]
+ -> religious_image_reaction
+
+* [__Warte__: Bis die Kutsche wieder bereit ist. #required #key:z]
+ -> village_exit_puzzle
+
+
+=== religious_image_reaction ===
+~ state_reach(VillageReligiousTension.christian_surface_noted)
+~ state_reach(VillageReligiousTension.older_presence_hint)
+
+Über dem alten Putz neben dem Kirchtor blickt eine verblasste gemalte Frau unter einem abblätternden blauen Mantel herab. Ihre Hände sind zum Gebet gefaltet. Ihre Augen, vom Wetter beschädigt, zeigen nicht mehr in dieselbe Richtung.
+
+{
+- relig ? catholic:
+ Für einen Atemzug stört dich nicht, dass das Bild alt ist. Es stört dich, dass es nicht mehr ganz heilig wirkt.
+- relig ? reform:
+ Für einen Atemzug wirkt das Bild weniger wie Andacht als wie Verwaltung: ein aufgemaltes Siegel über etwas, das man nicht fortschaffen konnte.
+- relig ? social:
+ Für einen Atemzug erkennst du die vertraute Geste und misstraust trotzdem dem Ort, an dem sie gemalt wurde.
+- else:
+ Für einen Atemzug, als die Räder über ein verborgenes Wasserrinnsal fahren, wirkt das gemalte Gesicht weniger wie die Heilige Mutter als wie eine Maske, die etwas aufgesetzt wurde, das länger gewartet hatte.
+}
+
+-> village_detour_surface
+
+
+// ============================================================================
+// VILLAGE EXIT SOCIAL PUZZLE
+// ============================================================================
+
+=== village_exit_puzzle ===
+~ state_reach(EibenreithPublicFace.cautious)
+
+Der Kutscher hält vor dem Wirtshaus oder vielleicht nur vor dem Gebäude, das in einem besseren Dorf eines gewesen wäre. Ein Knecht aus dem Dorf tritt aus dem Schatten des Tors. Viktor öffnet die Kutschentür von innen nicht sofort; der Kutscher steigt ab, um den Schlag zu öffnen. Der Knecht sieht auf dein Gepäck, dann auf deine Handschuhe, dann auf Viktor.
+
+Wieder stellt die Welt eine Frage, ohne sie auszusprechen: Wer darf dir helfen, wer muss dir helfen, und wem erlaubst du, dabei wichtig zu wirken?
+
+* {class ? noble} [__Warte__ · **Adel**: Bis der Kutscher den Schlag öffnet und Viktor zuerst aussteigt. #key:z]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ Du wartest, bis der Kutscher den Schlag öffnet und Viktor zuerst aussteigt; erst dann reichst du Viktor die behandschuhte Hand.
+
+ Es geschieht langsam genug, dass alle Beteiligten ihre Rolle finden. Der Kutscher ist Dienst, Viktor ist Begleitung, der Knecht ist noch nicht wichtig genug, um dich zu berühren. Dein Fuß erreicht den Boden, als hätte die Straße sich dafür bereitgehalten.
+ ~ state_reach(EibenreithPublicFace.cautious)
+
+* [__Gewähre__: Viktor die Hand und dem Kutscher den Dank.]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ Du lässt Viktor aussteigen, nimmst seine Hand beim Abtreten und dankst dem Kutscher erst danach mit einem knappen Blick.
+
+ Der Ablauf ist korrekt genug, um keine Geschichte zu erzeugen. In einem Dorf, das von Geschichten lebt, ist das ein kleiner Sieg.
+ ~ state_reach(EibenreithPublicFace.cautious)
+
+* [__Dirigiere__: „Zuerst den kleineren Kasten.“]
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ Du gibst dem Knecht eine klare Anweisung, welches Gepäck zuerst abgeladen werden soll, bevor er danach fragen kann.
+
+ Er gehorcht sofort. Viktor registriert die Zweckmäßigkeit. Der Kutscher registriert die Ungewöhnlichkeit. Eine Dame, die Gepäckreihenfolgen kennt, ist entweder sehr erfahren, sehr nervös oder beides.
+ ~ state_reach(EibenreithPublicFace.suspicious)
+ ~ state_reach(ServiceWorld.staff_as_witnesses_noticed)
+
+* [__Reize__: Den Kutscher mit zu warmer Freundlichkeit.]
+ ~ route_inc(route_lover)
+ ~ rel_inc(viktor_open)
+ ~ rel_inc(viktor_unreliable)
+ Du bietest dem Kutscher ein sichtbares Lächeln und ein zu freundliches „Danke“ an.
+
+ Der Mann senkt den Blick, verwirrt und geschmeichelt. Viktor wird stiller. Freundlichkeit über Standesgrenzen hinweg kann Güte sein, Taktik oder Unachtsamkeit. Auf dem Dorf wird niemand lange brauchen, eine vierte Möglichkeit zu erfinden.
+ ~ state_reach(EibenreithPublicFace.suspicious)
+
+* [__Verplappere dich__: „Ach, das macht doch zu viel Mühe.“]
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ Du entschuldigst dich beim Knecht dafür, dass deine Sachen Mühe machen, und greifst selbst nach einem Koffer.
+
+ Der Knecht erstarrt, als hättest du ihm eine philosophische Frage gestellt. Viktor tritt sofort dazwischen, höflich genug, um die Rettung wie Zufall aussehen zu lassen. Du hast gegen keine Moral verstoßen, nur gegen die unsichtbare Arbeitsteilung, auf der diese kleine Welt ruht.
+ ~ state_reach(EibenreithPublicFace.unsettled)
+ ~ state_reach(ServiceWorld.staff_as_witnesses_noticed)
+
+* {class ? working} [__Rutsche aus__ · **Unterschicht**: Allein, bevor jemand dir helfen kann.]
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ ~ rel_inc(viktor_control)
+ Du steigst allein aus, nimmst deinen Rock hoch genug, um den Schlamm zu sehen, und sagst dem Knecht, er solle mit dem schweren Koffer vorsichtig sein.
+
+ Es ist praktisch, schnell und völlig falsch. Nicht, weil du unrecht hast, sondern weil du recht hast wie jemand, der selbst schon getragen hat. Der Knecht erkennt es. Viktor auch.
+ ~ state_reach(EibenreithPublicFace.unsettled)
+ ~ state_reach(ServiceWorld.staff_as_witnesses_noticed)
+
+-
+
+Neben dir senkt Viktor die Stimme.
+
+„Vergessen Sie nicht: In Hohenreith wird jede Höflichkeit etwas bedeuten. Hier wird es jedes Schweigen tun.“
+
+* [__Prüfe__: „Dann werden wir bereits empfangen.“]
+ „Dann werden wir bereits empfangen.“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ „Ja“, sagt er. „Und geprüft.“
+
+* [__Benenne__: „Sie lassen es klingen, als stünde das Dorf über dem Grafen.“]
+ „Sie lassen es klingen, als stünde das Dorf über dem Grafen.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ „Nein“, sagt Viktor. „Nur, als hätte es vielleicht mehr als einen überlebt.“
+
+* [__Entwaffne__: „Wie glücklich, dass ich mehrere Arten des Schweigens eingepackt habe.“]
+ „Wie glücklich, dass ich mehrere Arten des Schweigens eingepackt habe.“
+ ~ route_inc(route_lover)
+ ~ rel_inc(viktor_open)
+ Sein Mund bewegt sich beinahe. „Verwenden Sie zuerst das schlichteste.“
+
+* [__Verplappere dich__: „Ich mag es nicht, von Leuten beobachtet zu werden, die sich nicht vorstellen.“]
+ „Ich mag es nicht, von Leuten beobachtet zu werden, die sich nicht vorstellen.“
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ „Das“, sagt er, „wird sich heute kaum bessern.“
+
+* [__Schone sie__: „Wenn Amalia ihr ganzes Leben unter diesem Blick gelebt hat, beginne ich zu verstehen, weshalb man nach Geistern sandte.“]
+ „Wenn Amalia ihr ganzes Leben unter diesem Blick gelebt hat, beginne ich zu verstehen, weshalb man nach Geistern sandte.“
+ ~ route_inc(route_sapphic)
+ ~ rel_inc(viktor_insightful)
+ Viktor sieht dich an, doch welche Antwort er auch erwägt, er behält sie hinter den Zähnen.
+
+-
+~ state_reach(EibenreithPublicFace.openly_watching_valerie)
+-> village_departure_choice
+
+
+// ============================================================================
+// DIRECT CARRIAGE WELCOME
+// ============================================================================
+
+=== hohenreith_direct_butler_welcome ===
+
+Ein Butler tritt an die unterste Stufe. Nicht der Diener von vorhin, sondern ein Mann, der dem Haus seine Stimme geliehen hat: schwarz gekleidet, glatt rasiert, mit dem leeren Gesichtsausdruck vollendeter Haushaltskenntnis. Er verneigt sich zuerst vor dir, dann vor Viktor.
+
+„Willkommen in Hohenreith.“
+
+Die Worte sind vollkommen richtig. Genau deshalb ist unklar, ob sie Gruß, Urteil oder Besitzanzeige sind.
+
+-> pre_dinner_transition
+
+
+// ============================================================================
+// VILLAGE DEPARTURE CHOICE
+// ============================================================================
+
+=== village_departure_choice ===
+
+Die Kutsche wartet. Das Dorf wartet nicht; es sieht nur so aus. Zwischen den Häusern haben sich die Blicke anders verteilt. Ein paar Menschen sind verschwunden, aber die Fenster haben mehr Augen bekommen.
+
+Viktor hält die Kutschentür offen. „Wenn wir jetzt fahren, lässt sich die Verspätung noch als Wegverhältnis erklären.“
+
+Der Kutscher sieht zu dir. Er hat verstanden, dass nicht er entscheidet, wann die Reise weitergeht.
+
+* [__Wahre Form__: Wieder einsteigen und nach Hohenreith weiterfahren.]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ ~ state_reach(HohenreithArrivalFrame.delayed_after_village_detour)
+ Du steigst wieder ein. Die Entscheidung rettet nicht die Pünktlichkeit, aber die Form: Verspätung durch Aufenthalt, nicht durch Auflehnung.
+ -> delayed_hohenreith_arrival
+
+* [__Prüfe__: Das Dorf gesehen haben; jetzt das Haus sehen.]
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ ~ state_reach(HohenreithArrivalFrame.delayed_after_village_detour)
+ Du steigst ein, bevor das Dorf den Aufenthalt in eine zweite Szene verwandeln kann. Du hast nicht genug gesehen. Aber genug, um zu wissen, welche Fragen im Haus falsch beantwortet werden könnten.
+ -> delayed_hohenreith_arrival
+
+* [__Verfüge__: Die Kutsche mit Gepäck und Nachricht vorausschicken.]
+ „Die Kutsche fährt voraus“, sagst du. „Mit dem Gepäck. Und mit einer Nachricht, dass wir nachkommen.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_loss_of_control)
+ ~ rel_inc(viktor_irritation)
+ ~ rel_inc(viktor_concern)
+ ~ state_reach(HohenreithArrivalFrame.household_form_disturbed)
+ Viktor sieht dich an, als hättest du nicht einen Weg, sondern eine Dienstvorschrift verlassen.
+ -> village_send_carriage_ahead
+
+
+// ============================================================================
+// CARRIAGE SENT AHEAD / ARRIVAL ON FOOT
+// ============================================================================
+
+=== village_send_carriage_ahead ===
+
+Der Kutscher nimmt die Nachricht entgegen, als sei Papier unter bestimmten Umständen gefährlicher als Glatteis. Viktor prüft jedes Wort, das du ihm diktierst, ohne offen zu widersprechen. Das Gepäck wird wieder aufgeladen. Der Kutscher fährt an, langsam genug, dass das Dorf den Vorgang vollständig verstehen kann.
+
+Zurück bleiben du, Viktor, die Straße nach Hohenreith und ein Schweigen, das nicht mehr in die Kutsche passt.
+
+* [__Wahre Form__: Eine knappe, korrekte Nachricht schicken.]
+ „Teilen Sie mit, dass wir dem Jagdhaus zu Fuß folgen und vor dem Abend eintreffen.“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ Die Nachricht klingt wie Absicht. Das ist das Mindeste, was man einer Unordnung schuldig ist.
+ -> footpath_to_hohenreith
+
+* [__Prüfe__: Die Nachricht sachlich halten.]
+ „Wir kommen zu Fuß nach. Das Gepäck soll bereits aufgenommen werden. Man möge unseren verspäteten Eintritt erwarten.“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ Keine Entschuldigung, keine Erklärung. Eine Erklärung vor der Beobachtung wäre Verschwendung.
+ -> footpath_to_hohenreith
+
+* [__Benenne__: Die Nachricht als Warnung formulieren.]
+ „Sagen Sie, wir wollten Eibenreith nicht durchqueren wie ein Möbelstück im Besitz des Hauses.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ Viktor schließt kurz die Augen. „Das werde ich nicht diktieren.“
+
+ „Dann schreiben Sie: Wir kommen zu Fuß.“
+ -> footpath_to_hohenreith
+
+
+=== footpath_to_hohenreith ===
+~ loc_move_to(loc_eibenreith_village)
+~ state_reach(HohenreithArrivalFrame.delayed_after_village_detour)
+~ state_reach(HohenreithArrivalFrame.household_form_disturbed)
+
+Der Weg nach Hohenreith steigt nicht steil genug an, um dramatisch zu sein, aber stetig genug, um deine Schuhe, deinen Saum und deine Atmung an die Wirklichkeit zu erinnern. Hinter dir bleibt Eibenreith. Vor dir liegt das Jagdhaus. Dazwischen ist kein Salon, keine Kutsche, keine Polsterung der Verhältnisse.
+
+Viktor geht neben dir, nicht vor dir und nicht hinter dir. Das ist vielleicht Takt. Vielleicht Aufsicht. Vielleicht die einzige Form von Zustimmung, die er sich im Freien leisten kann.
+
+* [__Entschärfe__: „Sie dürfen jetzt sagen, dass Sie mir davon abgeraten hätten.“]
+ „Sie dürfen jetzt sagen, dass Sie mir davon abgeraten hätten.“
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_open)
+ „Ich hätte Ihnen davon abgeraten.“
+
+ „Das kam überzeugender, als ich gehofft hatte.“
+ -> foot_hohenreith_arrival
+
+* [__Prüfe__: „Wer uns jetzt sieht, sieht uns ohne Hausordnung.“]
+ „Wer uns jetzt sieht, sieht uns ohne Hausordnung.“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ „Und wer uns erwartet, wird entscheiden, ob das Absicht oder Mangel an Disziplin war.“
+ -> foot_hohenreith_arrival
+
+* [__Trotze__: „Manchmal muss man einem Haus den ersten Schritt verweigern.“]
+ „Manchmal muss man einem Haus den ersten Schritt verweigern.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ „Häuser erinnern sich nicht.“
+
+ „Familien tun es.“
+ -> foot_hohenreith_arrival
+
+
+=== foot_hohenreith_arrival ===
+~ loc_move_to(loc_hohenreith_arrival)
+
+Als ihr das Tor erreicht, steht die Kutsche bereits im Hof. Das Gepäck ist fortgetragen. Eure Ankunft dagegen hat niemand forttragen können. Zwei Diener wissen, dass ihr zu Fuß kamt. Ein Kutscher weiß, dass du es angeordnet hast. Ein Fenster im ersten Stock weiß es ebenfalls.
+
+Der Butler wartet am Portal. Wenn ihn eure Ankunft überrascht, hat er die Überraschung vor vielen Jahren abgeschafft. Er verneigt sich mit einer Genauigkeit, die nicht wärmer wird, nur weil du Atem in der Brust hast und Wegschmutz am Saum.
+
+„Willkommen in Hohenreith.“
+
+Der Satz nimmt euch auf. Er verzeiht nichts.
+
+-> pre_dinner_transition
+
+
+// ============================================================================
+// DELAYED ARRIVAL AFTER VILLAGE DETOUR BY CARRIAGE
+// ============================================================================
+
+=== delayed_hohenreith_arrival ===
+~ loc_move_to(loc_hohenreith_arrival)
+~ state_reach(HohenreithArrivalFrame.delayed_after_village_detour)
+~ state_reach(HohenreithArrivalFrame.household_form_disturbed)
+
+Die Pferde ziehen die Kutsche an der Kirchhofmauer vorbei und aus dem Dorf hinaus. Die Straße biegt zur unsichtbaren Höhe, auf der Jagdhaus Hohenreith über Eibenreith unter seinem neueren Namen steht.
+
+Als das Jagdhaus erscheint, ist der Nachmittag bereits weiter fortgeschritten, als die Einladung vorsah. Das Haus empfängt dich nicht unhöflich. Das wäre zu ehrlich. Es empfängt dich mit jener gesteigerten Korrektheit, mit der bessere Häuser kleine Verstöße festhalten, ohne sie beim Namen zu nennen.
+
+Ein Diener steht vor dem Portal. Hinter einem Fenster im ersten Stock bewegt sich ein Vorhang zu spät zurück.
+
+Viktor sagt leise: „Jetzt weiß man, dass Sie eigene Umwege nehmen.“
+
+Der Kutscher bringt die Pferde zum Stehen. Noch einmal wird der Schlag geöffnet. Wer verspätet mit der Kutsche ankommt, erhält die Form ein zweites Mal; nur ist sie nun nicht mehr unschuldig.
+
+* [__Wahre Form__: Aussteigen, als sei die Verspätung Teil des Plans.]
+ „Dann wollen wir dafür sorgen, dass der Umweg Absicht war.“
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ Du wartest, bis Viktor aussteigt, und nimmst seine Hand gerade lange genug. Die Geste schützt euch beide vor der gröberen Wahrheit: dass du im Dorf getan hast, was eine eingeladene Dame nicht tun muss und vielleicht nicht tun sollte.
+ -> hohenreith_delayed_butler_welcome
+
+* [__Prüfe__: Beim Aussteigen das Fenster beachten.]
+ „Wer am Fenster stand, wusste es schon vor dem Diener.“
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ Du steigst aus und siehst nicht zum Fenster. Nicht sofort. Das ist die einzige Höflichkeit, die Beobachtung manchmal braucht.
+ -> hohenreith_delayed_butler_welcome
+
+* [__Benenne__: Die Verspätung nicht entschuldigen.]
+ „Ein Haus, das Verspätung kränkt, hat Angst vor eigener Zeit.“
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ „Bitte sagen Sie das nicht beim Abendessen.“
+
+ „Ich sagte es Ihnen. Das ist beinahe dasselbe wie Zurückhaltung.“
+ -> hohenreith_delayed_butler_welcome
+
+
+=== hohenreith_delayed_butler_welcome ===
+
+Der Butler tritt an die unterste Stufe. Seine Verneigung ist nicht kürzer als sie bei pünktlicher Ankunft gewesen wäre. Das ist die Härte daran.
+
+„Willkommen in Hohenreith.“
+
+Die Worte lassen keinen Vorwurf hören. Sie brauchen keinen.
+
+-> pre_dinner_transition
+
+
+// ============================================================================
+// PRE-DINNER TRANSITION / INTRO SCORE
+// ============================================================================
+
+
diff --git a/data/ink-src/eibenreith/03_kutschenfahrt.ink b/data/ink-src/eibenreith/03_kutschenfahrt.ink
new file mode 100644
index 0000000..9f68174
--- /dev/null
+++ b/data/ink-src/eibenreith/03_kutschenfahrt.ink
@@ -0,0 +1,571 @@
+// ============================================================================
+// EIBENREITH 03 KUTSCHENFAHRT
+// ============================================================================
+// Kapitel 03: Nachmittag / Kutschenfahrt.
+//
+// Architektur:
+// - episode start/end + episode bucket
+// - Kutsche und Wegzeichen als Räume
+// - Landschaft, Wegzeichen und Nachmittagsentscheidung als Bucket-Weaves
+// - drei Ausgänge in Kapitel 04:
+// direkt nach Hohenreith
+// Dorfdetour, danach mit der Kutsche weiter
+// Dorfdetour, Kutsche voraus, Ankunft zu Fuß
+// ============================================================================
+
+
+// ============================================================================
+// EPISODE DEFINITION
+// ============================================================================
+
+=== coach_journey ===
+-> carriage_ride
+
+
+=== carriage_ride ===
+~ character_move_to(viktor, loc_carriage)
+~ companion_join(viktor)
+
+Die Kutsche lässt die Station hinter sich und damit das letzte leicht erkennbare Zeichen der Monarchie. #chapter[Die Kutschenfahrt] #music[Kaiserpunk Jodler.mp3](crossfade, loop, lead=4)
+
+Zuerst folgt der Weg einem Tal, in dem Telegraphendraht ihm noch Gesellschaft leistet und der Fluss in einem hellen, steinigen Bett läuft. Sägewerke, umzäunte Wiesen und Bauernhäuser erscheinen und verschwinden hinter Fichtenbeständen. Die Berge steigen nicht auf einmal. Sie rücken zuständigkeitsweise vor: ein bewaldeter Hang links, eine graue Wand aus Kalk im Norden, ein weiterer Rücken im Osten, bis selbst die Wolken in Dienst getreten scheinen. #gloss[Telegraphendraht](Drahtleitung für elektrische Nachrichten. Sehr modern, solange man nicht fragt, welche Dinge Menschen dadurch nur schneller missverstehen.) #gloss[Sägewerk](Ort, an dem Wald in Bretter, Lohn und Sägemehl übersetzt wird.)
+
+Der Kutscher nennt Orte, wenn Viktor fragt, doch die Namen sind örtlich und praktisch, gedacht für Männer, die wissen, welche Brücke bei Hochwasser nachgibt und welcher Hof störrische Pferde hält. Irgendwo hinter den sichtbaren Rücken, sagt er, liegt der große weiße Rücken des Hochschwab. Nach Osten, jenseits von Wald und Pass, hält die Hohe Veitsch ihr eigenes Wetter. Er sagt das nicht wie ein Führer, sondern wie ein Mann, der Nachbarn erklärt, die vielleicht guter Laune sind und vielleicht nicht. #gloss[Hochschwab](Gebirgsstock der Obersteiermark. Für Wiener eine Landschaft, für Einheimische Wetter, Wasser, Wege und Verschüttungen.)
+
+-> carriage_room
+
+
+=== carriage_ride_episode_bucket ===
+<- carriage_episode_viktor_road
+<- carriage_episode_coachman_places
+-> DONE
+
+
+=== carriage_ride_end ===
+-> DONE
+
+
+// ============================================================================
+// ROOM: CARRIAGE
+// ============================================================================
+
+=== carriage_room ===
+-> enter_room(loc_carriage, -> carriage_entry, -> carriage_look, -> carriage_exits, -> carriage_bucket) -> provide_choices
+
+
+=== carriage_entry ===
+Die Kutsche schaukelt nicht wie ein Salon. Sie widerspricht dem Körper bei jeder Rinne. Nach der Bahn wirkt die Straße nicht langsamer, sondern persönlicher: Sie gibt jede Unebenheit mit eigener Handschrift weiter.
+
+-> DONE
+
+
+=== carriage_look ===
++ [__Schaue__: Durch das Kutschenfenster. #key:l]
+ Draußen läuft das Tal neben euch her, erst offen genug für Telegraphendraht und Flussbett, dann enger, dunkler, nasser. Die Straße gehört noch zur Karte, aber immer weniger zu Wien.
+ -> provide_choices
+-> DONE
+
+
+=== carriage_exits ===
++ [__Warte__: Während das Tal enger wird. #key:z]
+ -> carriage_graben_entry
+-> DONE
+
+
+=== carriage_bucket ===
+<- carriage_touch_window
+<- carriage_listen_wheels
+<- carriage_observe_viktor
+<- carriage_observe_coachman
+-> DONE
+
+
+=== carriage_touch_window ===
+* [__Berühre__: Das kalte Kutschenfenster.]
+ Das Glas ist kälter, als es im Inneren der Kutsche sein dürfte. Feuchtigkeit sammelt sich an deinem Handschuh und verschwindet sofort wieder, als hätte sie es sich anders überlegt. Draußen streifen Zweige so nah vorbei, dass sie die Scheibe beinahe mit Nägeln prüfen.
+ -> provide_choices
+-> DONE
+
+
+=== carriage_listen_wheels ===
+* [__Höre__: Auf die Räder im Tal.]
+ Auf der offenen Straße ist das Geräusch der Räder noch Rhythmus: Holz, Eisen, Stein, Wiederholung. Es lässt sich fast zählen. Vielleicht beruhigt deshalb jede moderne Ordnung so gern: Sie gibt dem Ungewissen Takt.
+ -> provide_choices
+-> DONE
+
+
+=== carriage_observe_viktor ===
+* [__Untersuche__: Viktors Reaktion. #key:x]
+ Viktor betrachtet nicht die Landschaft. Er betrachtet ihre Möglichkeiten: Engstellen, Böschungen, tote Winkel, die Entfernung bis zum Kutscher, die Frage, wie rasch man aus einer Kutsche steigt, wenn die Straße selbst dagegen ist.
+ -> provide_choices
+-> DONE
+
+
+=== carriage_observe_coachman ===
+* [__Bemerke__: Wie der Kutscher spricht.]
+ Der Kutscher erklärt nichts, wenn Viktor nicht fragt. Das ist keine Stumpfheit. Es ist Ortskenntnis. Wer hier lebt, weiß, welche Dinge fremd genug sind, dass man sie zeigen muss, und welche Dinge zu nah sind, um sie zu benennen.
+ -> provide_choices
+-> DONE
+
+
+=== carriage_graben_entry ===
+~ state_reach(managed_landscape_seen)
+~ state_reach(city_order_receding)
+
+Das Haupttal verengt sich.
+
+Der Weg biegt davon in einen Seitengraben, und die Veränderung ist augenblicklich. Der Klang ändert sich. Die Räder klingen nicht mehr gegen offene Entfernung, sondern mahlen zwischen Böschungen, Wurzeln und nassem Stein. Die Luft riecht nach Lauberde, Harz und kaltem Wasser. Eiben erscheinen zwischen den Fichten in dunkler, unwahrscheinlicher Geduld, ihre Nadeln zu schwarz für den Nachmittag. #gloss[Seitengraben](Ein kleineres Tal, das von einem Haupttal abzweigt. Auf der Karte eine Linie, in der Kutsche ein Eintritt.) #gloss[Eiben](Dunkle, langsam wachsende Nadelbäume. Giftig, langlebig und daher für Menschen mit Aberglauben oder Bildung gleichermaßen verdächtig.)
+
+"Eibenreither Graben", sagt der Kutscher und bekreuzigt sich so rasch, dass die Geste auch einem Schlagloch gegolten haben könnte.
+
+Viktor bemerkt es. Natürlich bemerkt er es.
+
+"Schlechter Weg?", fragt er.
+
+"Alter Weg", sagt der Kutscher.
+
+Eine Weile spricht niemand.
+
+~ state_reach(valley_order_emerging)
+~ state_reach(local_rules_beginning)
+~ state_reach(old_boundary_felt)
+
+-> roadside_statue_room
+
+
+// ============================================================================
+// ROOM: ROADSIDE STATUE
+// ============================================================================
+
+=== roadside_statue_room ===
+-> enter_room(loc_roadside_statue, -> roadside_statue_entry, -> roadside_statue_look, -> roadside_statue_exits, -> roadside_statue_bucket) -> provide_choices
+
+
+=== roadside_statue_entry ===
+~ state_reach(religious_markers_seen)
+
+Du beobachtest die Bäume.
+
+Es gibt Wälder, die zu Geschichten einladen, weil sie hübsch sind, und Wälder, die Geschichten zurückweisen, weil das, was dort geschah, keine Zeugen brauchte. Dieser gehört zur zweiten Art. Seine Stämme stehen eng, nicht wild, sondern mit der Haltung einer Menge, die Platz macht für etwas, das vor langer Zeit durch sie getragen wurde.
+
+An einem Hang oberhalb des Weges, halb vom Unterholz verschluckt, erblickst du Stein.
+
+Ein Wegheiligtum vielleicht. Ein Grenzzeichen. Eine Figur. Die Kutsche rollt schon vorbei, bevor deine Augen sich auf ihre Form einigen können. Für einen Augenblick bleibt der Eindruck eines Frauenkopfes zurück, geneigt nicht im Gebet, sondern im Lauschen. #image[statue.png](square) #gloss[Wegheiligtum](Religiöses Zeichen an Straße oder Weg: Kreuz, Bildstock, Heiligenfigur. Es erklärt, dass der Weg nicht nur Richtung, sondern auch Aufsicht besitzt.) #gloss[Grenzzeichen](Markierung einer Grenze. Manche Grenzen trennen Besitz, andere Gewohnheit, und die älteren geben sich selten Mühe, lesbar zu bleiben.)
+
+Der Eindruck bleibt im Nacken sitzen.
+
+-> DONE
+
+
+=== roadside_statue_look ===
++ [__Schaue__: Zu dem Hang zurück. #key:l]
+ Die Kutsche ist bereits weiter. Der Hang, der Stein, der mögliche Frauenkopf: alles ist wieder Wald geworden. Das macht es nicht weniger wirklich. Nur weniger zitierfähig.
+ -> provide_choices
+-> DONE
+
+
+=== roadside_statue_exits ===
++ {state_reached(faculty_committed)} [__Warte__: Bis der Graben sich öffnet. #key:z]
+ Der Graben öffnet sich widerwillig.
+ -> afternoon_approach_choice
+-> DONE
+
+
+=== roadside_statue_bucket ===
+<- supernatural_faculty_choice
+<- roadside_viktor_response
+-> DONE
+
+
+=== supernatural_faculty_choice ===
++ {state_before(faculty_committed)} [__Leugne__: Nichts. Nur altes Gestein und bewegte Zweige.]
+ ~ route_inc(route_composure)
+ ~ state_reach(no_claim_made)
+ ~ state_reach(faculty_committed)
+ Du hältst dich an das, was ein Bericht tragen kann. Stein. Hang. Unterholz. Bewegung. Alles andere ist Ermüdung, Erwartung oder die Unverschämtheit eines Waldes, der zu gut komponiert ist.
+ -> provide_choices
+
++ {state_before(faculty_committed)} [__Spüre__: Eine körperliche Warnung, ehe der Gedanke folgt.]
+ ~ route_inc(route_sapphic)
+ ~ state_reach(sensory_anomaly_framed)
+ ~ state_reach(faculty_committed)
+ Der Nacken zieht sich zusammen, bevor du einen Grund dafür hast. Nicht Furcht. Wiedererkennen wäre schlimmer. Dein Körper ist manchmal schneller als deine gebildeten Ausreden.
+ -> provide_choices
+
++ {state_before(faculty_committed)} [__Deute__: Ein Muster, das andere übersehen würden.]
+ ~ route_inc(route_detective)
+ ~ state_reach(intuition_framed)
+ ~ state_reach(faculty_committed)
+ Du glaubst nicht an zufällige Blickführung. Der Hang, der Stein, der alte Weg, das Kreuzzeichen des Kutschers: Es ist noch kein Beweis. Aber es ist eine Anordnung.
+ -> provide_choices
+
++ {state_before(faculty_committed)} [__Nutze__: Den Eindruck, weil andere ihn von dir erwarten.]
+ ~ route_inc(route_lover)
+ ~ state_reach(performance_framed)
+ ~ state_reach(faculty_committed)
+ Vielleicht ist dort nichts. Vielleicht ist dort etwas. Für den Moment genügt, dass alle Beteiligten glauben, du könntest mehr gesehen haben als sie. Ein Ruf ist manchmal ein Instrument, ehe er eine Lüge wird.
+ -> provide_choices
+-> DONE
+
+
+=== roadside_viktor_response ===
+* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Wahre Form__: "Ein Zeichen am Weg. Ich möchte es nicht voreilig benennen."]
+ "Ein Zeichen am Weg. Ich möchte es nicht voreilig benennen."
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ "Vorsicht ist in fremden Gegenden selten ein Fehler."
+ -> roadside_viktor_response_done
+
+* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Prüfe__: "Ein Grenz- oder Wegzeichen. Ich wüsste gern, wohin dieser Pfad führt."]
+ "Ein Grenz- oder Wegzeichen. Ich wüsste gern, wohin dieser Pfad führt."
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ "Sie haben einen Pfad gesehen?"
+
+ "Nicht deutlich. Genug, um später danach zu fragen."
+
+ Viktor blickt durch das kleine rückwärtige Fenster. Die Biegung hat den Hang bereits ausgelöscht. "Fragen Sie vorsichtig. Orte, die man nicht erwähnt, sind oft aufschlussreicher als jene, die man empfiehlt."
+ -> roadside_viktor_response_done
+
+* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Benenne__: "Vielleicht eine Frau im Wald. Oder ein Stein, der eine sein wollte."]
+ "Vielleicht eine Frau im Wald. Oder ein Stein, der eine sein wollte."
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_adversarial)
+ ~ rel_inc(viktor_bold)
+ Er betrachtet die vorbeiziehenden Bäume. "Ein Wegheiligtum?"
+
+ "Wenn es ein Heiligtum ist, wurde es seit langem nicht mehr geliebt."
+
+ "Sie sprechen, als bemerkten Steine Vernachlässigung."
+ -> roadside_viktor_response_done
+
+* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Entschärfe__: "Nur Bäume. Die Art, bei der man für Herren mit Revolvern dankbar wird."]
+ "Nur Bäume. Die Art, bei der man für Herren mit Revolvern dankbar wird."
+ ~ route_inc(route_careless)
+ ~ rel_inc(viktor_concern)
+ Sein Ausdruck verdunkelt sich um einen amtlichen Grad. "Ein Revolver ist ein schlechtes Werkzeug gegen Bäume."
+
+ "Dann werde ich mich darauf verlassen, dass Ihre Unterhaltung sie einschüchtert."
+
+ Der Kutscher tut, als höre er nichts. Seine Schultern jedoch hören alles.
+ -> roadside_viktor_response_done
+
+* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Locke__: "Würden Sie mir glauben, wenn ich sagte, ich hätte etwas gesehen?"]
+ "Würden Sie mir glauben, wenn ich sagte, ich hätte etwas gesehen?"
+ ~ route_inc(route_lover)
+ ~ rel_inc(viktor_unreliable)
+ "Das hinge davon ab, welchen Vorteil Sie sich von der Antwort versprechen."
+
+ "Herr Nowak. Sie verletzen mich."
+
+ "Noch nicht."
+
+ Es ist das Erste, was er an diesem Tag gesagt hat, das beinahe wie ein Flirt klingt, wenn auch vielleicht nur deshalb, weil Gefahr ein Talent dafür hat, wärmere Kleider zu borgen.
+ -> roadside_viktor_response_done
+
+* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Verberge__: "Nein."]
+ "Nein."
+ ~ route_inc(route_sapphic)
+ ~ rel_inc(viktor_closed)
+
+ Die Verneinung kommt zu rasch, und ihr hört es beide.
+
+ Du denkst nicht mehr an den Stein. Du denkst an die junge Frau, die irgendwo vor euch wartet: die Tochter des Grafen, der Grund, der sorgsam nicht im Memorandum steht, die Fremde, deren Haushalt dich unter einem Titel herbeigerufen hat, der zugleich lächerlich und nützlich ist.
+ -> roadside_viktor_response_done
+
+* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Halte__: Die Kutsche anhalten und zurückgehen.]
+ "Halten Sie an", sagst du.
+
+ Der Kutscher hört zuerst die Stimme, dann die Unmöglichkeit des Befehls. Die Pferde gehen noch ein paar Längen weiter, ehe der Wagen schwer in den Schlamm sinkt und steht.
+
+ Viktor sieht zur Biegung zurück, hinter der der Hang mit dem Stein verschwunden ist.
+
+ "Wegen eines undeutlichen Wegzeichens?"
+
+ "Wegen der Frage, weshalb es undeutlich bleiben soll."
+
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ -> carriage_halt_room
+-> DONE
+
+
+=== roadside_viktor_response_done ===
+-> provide_choices
+
+
+// ============================================================================
+// ROOM: CARRIAGE HALT AFTER STATUE
+// ============================================================================
+
+=== carriage_halt_room ===
+-> enter_room(loc_carriage_halt, -> carriage_halt_entry, -> carriage_halt_look, -> carriage_halt_exits, -> carriage_halt_bucket) -> provide_choices
+
+
+=== carriage_halt_entry ===
+Die Kutsche hält eine Biegung weiter, dort, wo der Weg breiter wird und trotzdem nicht einladender. Der Kutscher bleibt auf dem Bock sitzen, als habe er beschlossen, für diese Entscheidung nicht verantwortlich zu sein. Hinter euch liegt die Stelle mit dem Stein. Vor euch wartet der Nachmittag, verstimmt durch eure Verzögerung.
+
+-> DONE
+
+
+=== carriage_halt_look ===
++ [__Schaue__: Zurück zur Biegung. #key:l]
+ Von hier aus sieht man den Hang nicht mehr. Nur die dunkle Stelle, an der der Weg die Bäume wieder freigibt. Es ist erstaunlich, wie rasch ein Ort so tun kann, als sei dort nichts gewesen.
+ -> provide_choices
+-> DONE
+
+
+=== carriage_halt_exits ===
++ [__Bitte__: Viktor soll auf die Höflichkeiten verzichten.]
+ "Lassen Sie die Hand und den Schlag. Hier ist niemand, der daraus eine Etikette machen müsste."
+
+ {class ? noble:
+ Viktor öffnet die Tür trotzdem selbst, aber sein Blick ist nicht bei der Geste. "Gnädiges Fräulein, der Umstand, dass niemand zusieht, macht den Wald nicht weniger ungeeignet für Einfälle."
+ - else:
+ Viktor lässt die Hand einen Augenblick sichtbar unangeboten. "Warum sollte ich Sie wie eine Dame behandeln, wenn Sie sich so undamenhaft benehmen, mitten auf der Straße eine Untersuchung zu beginnen?"
+
+ Es ist zu trocken gesagt, um ganz ein Vorwurf zu sein.
+ }
+
+ -> crossroad_statue_room
+
++ [__Bestehe__: Viktor soll dich wie eine Dame aussteigen lassen.]
+ "Herr Nowak. Wenn ich schon im Wald aussteige, dann wenigstens nicht wie ein Paket."
+
+ {class ? noble:
+ Er reicht dir die Hand mit tadelloser Korrektheit und schlecht verborgener Gereiztheit. "Sie wählen einen bemerkenswerten Ort, um auf Form zu bestehen."
+ - else:
+ Er reicht dir die Hand mit der Miene eines Mannes, der eine Herausforderung angenommen hat. "Warum sollte ich Sie wie eine Dame behandeln, wenn Sie sich so un-damenhaft benehmen, mitten auf der Straße anzuhalten?"
+
+ "Weil Sie soeben bewiesen haben, dass Sie es können."
+ }
+
+ -> crossroad_statue_room
+-> DONE
+
+
+=== carriage_halt_bucket ===
+<- carriage_halt_coachman
+-> DONE
+
+
+=== carriage_halt_coachman ===
+* [__Frage__: Den Kutscher, ob hier jemand anhält.]
+ "Hier?", sagt der Kutscher.
+
+ Er blickt nicht zurück. Das genügt als Antwort beinahe.
+
+ "Nur wenn was am Rad ist."
+
+ ~ state_reach(old_name_heard)
+ -> provide_choices
+-> DONE
+
+
+// ============================================================================
+// ROOM: CROSSROAD STATUE WITHOUT CARRIAGE
+// ============================================================================
+
+=== crossroad_statue_room ===
+-> enter_room(loc_crossroad_statue, -> crossroad_statue_entry, -> crossroad_statue_look, -> crossroad_statue_exits, -> crossroad_statue_bucket) -> provide_choices
+
+
+=== crossroad_statue_entry ===
+Der Weg zurück ist kurz genug, um vernünftig zu wirken, und lang genug, um dem Entschluss Gewicht zu geben. Ohne Kutsche klingt der Graben anders. Wasser unter Stein. Ein Vogel, der aufhört. Viktors Schritte hinter dir, nicht weit genug entfernt, um zufällig zu sein.
+
+An der Biegung zeigt sich der Hang wieder. Diesmal siehst du, dass der Stein nicht am Weg steht. Er steht dahinter, jenseits eines schmalen Durchlasses zwischen Eiben, als hätte jemand den Zugang nicht versteckt, nur nicht erklärt. #gloss[Eiben](Dunkle, langsam wachsende Nadelbäume. Giftig, langlebig und daher für Menschen mit Aberglauben oder Bildung gleichermaßen verdächtig.)
+
+-> DONE
+
+
+=== crossroad_statue_look ===
++ [__Schaue__: Den Hang hinauf. #key:l]
+ Das Unterholz hat die Formen zurückgenommen, aber nicht vollständig. Zwischen den Zweigen liegt ein heller Fleck Stein. Kein Kreuz. Keine klare Nische. Eher eine Schulter, ein geneigter Kopf, eine Linie, die nicht zu einem Wegheiligtum passen will.
+ -> provide_choices
+-> DONE
+
+
+=== crossroad_statue_exits ===
++ [__Gehe__: Durch die Eiben zur Lichtung. #key:n]
+ -> forest_clearing_room
+-> DONE
+
+
+=== crossroad_statue_bucket ===
+<- crossroad_old_path
+-> DONE
+
+
+=== crossroad_old_path ===
+* [__Untersuche__: Den schmalen Durchlass.]
+ Der Boden ist nicht oft begangen, aber auch nicht unberührt. Unter Laub und Nadeln liegt eine ältere Linie, fester als Zufall. Ein Weg, der nicht mehr Weg heißen möchte.
+
+ ~ state_reach(prechristian_underlayer_suspected)
+ -> provide_choices
+-> DONE
+
+
+// ============================================================================
+// ROOM: FOREST CLEARING
+// ============================================================================
+
+=== forest_clearing_room ===
+-> enter_room(loc_forest_clearing, -> forest_clearing_entry, -> forest_clearing_look, -> forest_clearing_exits, -> forest_clearing_bucket) -> provide_choices
+
+
+=== forest_clearing_entry ===
+Die Eiben geben eine kleine Lichtung frei. Nicht groß genug für Versammlung, nicht offen genug für Zufall. In ihrer Mitte steht die überwachsene Steinfigur, halb von Moos, Brombeerranken und altem Laub gehalten.
+
+Auf den ersten Blick könnte sie die Jungfrau Maria sein. Eine Frauengestalt, ein geneigter Kopf, etwas Mantelartiges über den Schultern. Doch der Stein kennt keine rechte Demut. Die Haltung ist nicht Fürbitte. Sie ist Wachen. Oder Lauschen. Oder etwas Älteres, dem später ein christlicher Name übergestülpt wurde. #gloss[Jungfrau Maria](Mutter Jesu und zentrale Heiligenfigur der katholischen Verehrung. Ihre Bilder können Orte heiligen, aber manchmal auch ältere Orte überdecken.)
+
+Viktor bleibt am Rand der Lichtung stehen.
+
+"Das ist kein gewöhnlicher Bildstock", sagt er.
+
+-> DONE
+
+
+=== forest_clearing_look ===
++ [__Schaue__: Die Lichtung an. #key:l]
+ Die Bäume stehen zu gleichmäßig, um ganz natürlich zu wirken, und zu alt, um einer jüngeren Absicht zu gehorchen. Der Boden ist weich, aber darunter liegt Stein. Irgendwo sammelt Wasser sich, ohne sichtbar zu werden.
+ -> provide_choices
+-> DONE
+
+
+=== forest_clearing_exits ===
++ {TURNS_SINCE(-> forest_clearing_statue_done) >= 0} [__Kehre__: Zur Kutsche zurück. #key:s]
+ -> return_to_carriage_with_tear
+-> DONE
+
+
+=== forest_clearing_bucket ===
+<- forest_clearing_statue
+-> DONE
+
+
+=== forest_clearing_statue ===
+* {TURNS_SINCE(-> forest_clearing_statue_done) < 0} [__Untersuche__: Die überwachsene Frauengestalt. #key:x]
+ Aus der Nähe verliert die Figur ihre bequeme Erklärung. Der Mantel ist kein Mantel. Die Hände sind nicht gefaltet, sondern liegen am Körper, als hielten sie etwas, das abgeschlagen oder nie fertig gemeißelt wurde. Unter dem Moos erkennst du Reste einer Linie, die weder Rosenkranz noch Faltenwurf ist.
+
+ "Römisch?", fragt Viktor.
+
+ "Vielleicht", sagst du. "Oder keltisch. Oder etwas, das beide schon falsch benannt hätten."
+
+ Das Wort heidnisch liegt kurz in der Luft und wird von niemandem ausgesprochen. #gloss[heidnisch](Christliche Sammelbezeichnung für vor- oder außerchristliche Kulte. Nützlich, wenn man vieles auf einmal verurteilen will, ohne es genau zu kennen.) #gloss[keltisch](Bezeichnung für vor- und frühgeschichtliche Kulturen und Sprachen in Europa. Im 19. Jahrhundert oft halb Wissenschaft, halb romantische Projektionsfläche.)
+
+ ~ state_reach(prechristian_underlayer_suspected)
+ ~ state_reach(old_site_has_claim)
+ -> forest_clearing_statue_done
+-> DONE
+
+
+=== forest_clearing_statue_done ===
+-> provide_choices
+
+
+=== return_to_carriage_with_tear ===
+Der Rückweg ist enger, als er beim Hineingehen war. Oder du bist unvorsichtiger. Eine Brombeerranke fängt den Saum deines Reisekleids, hält ihn einen Atemzug lang fest und gibt ihn mit einem kleinen, beleidigend klaren Reißen wieder frei.
+
+Viktor hört es.
+
+Natürlich hört er es.
+
+"Verletzt?"
+
+"Nur beleidigt."
+
+Der Riss ist klein. Sichtbar genug, um später nicht mehr ganz zu verschwinden.
+
+-> afternoon_approach_choice
+
+
+// ============================================================================
+// EPISODE BUCKET: CARRIAGE JOURNEY
+// ============================================================================
+
+=== carriage_episode_viktor_road ===
+* {present(viktor)} {loc(loc_carriage)} [__Frage__: Viktor nach dem Weg.]
+ "Was erwarten Sie dort oben?", fragst du.
+
+ "Ein Haus, das Ordnung zeigen möchte", sagt Viktor. "Das genügt fast immer, um Unordnung zu verbergen."
+ -> provide_choices
+-> DONE
+
+
+=== carriage_episode_coachman_places ===
+* {loc(loc_carriage)} [__Frage__: Den Kutscher nach den Namen am Weg.]
+ Der Kutscher nennt die Höfe, Gräben und Stege ohne die kleinste Absicht, poetisch zu sein. Gerade deshalb wirken die Namen älter als die Karten.
+
+ ~ state_reach(old_name_heard)
+ -> provide_choices
+-> DONE
+
+
+// ============================================================================
+// AFTERNOON APPROACH CHOICE
+// ============================================================================
+
+=== afternoon_approach_choice ===
+Der Kutscher zeigt mit der Peitsche nicht auf etwas, sondern in eine Richtung.
+
+"Dort unten liegt Eibenreith. Wenn gnädiges Fräulein wünscht, kann ich im Dorf halten. Das Jagdhaus liegt höher, hinterm Wald. Wenn wir gleich weiterfahren, kommen wir ordentlich vor dem Abend an."
+
+Viktor sieht dich nicht an, was bei ihm die strengere Form von Erwartung ist.
+
+Nun zum ersten Mal gehört der Nachmittag dir.
+
++ [__Fahre__: Direkt nach Hohenreith.]
+ ~ route_inc(route_composure)
+ ~ rel_inc(viktor_reliable)
+ ~ mark(punctual_arrival_preserved)
+ Du entscheidest dich für die Form. Wer eingeladen wurde, erscheint nicht verspätet, nur weil ein Dorf Fragen verspricht. Fragen laufen nicht davon. Ein erster Eindruck manchmal schon.
+ -> direct_to_hohenreith
+
++ [__Halte__: In Eibenreith, aber lass die Kutsche warten.]
+ ~ route_inc(route_detective)
+ ~ rel_inc(viktor_insightful)
+ ~ mark(village_knowledge_prioritised)
+ Ein Haus erklärt sich selten selbst. Ein Dorf tut es ebenfalls nicht, aber es verrät manchmal, wo die Erklärungen begraben liegen.
+ -> depart_for_village_detour
+
++ [__Verfüge__: In Eibenreith aussteigen und die Kutsche voraus schicken.]
+ "Die Kutsche fährt voraus", sagst du. "Mit dem Gepäck. Und mit einer Nachricht, dass wir nachkommen."
+ ~ route_inc(route_eccentric)
+ ~ rel_inc(viktor_loss_of_control)
+ ~ rel_inc(viktor_irritation)
+ ~ rel_inc(viktor_concern)
+ ~ mark(village_knowledge_prioritised)
+ ~ mark(arrival_form_compromised)
+ Viktor sieht dich an, als hättest du nicht einen Weg, sondern eine Dienstvorschrift verlassen.
+ -> depart_for_village_on_foot
+
+
+// ============================================================================
+// EXIT BRANCHES INTO CHAPTER 04
+// ============================================================================
+
+=== direct_to_hohenreith ===
+~ companion_join(viktor)
+~ loc_move_to(loc_hohenreith_arrival)
+
+Die Kutsche fährt am Dorf vorbei, nicht schnell genug, um ungesehen zu bleiben. Häuser, Kirche, ein Brunnen, ein paar Gesichter im Fenster: Eibenreith wird zur Randnotiz eines höflichen Entschlusses. Doch Randnotizen haben die schlechte Gewohnheit, später den Sinn eines Schreibens zu verändern.
+
+-> direct_hohenreith_arrival
+
+
+=== depart_for_village_detour ===
+~ companion_join(viktor)
+~ loc_move_to(loc_eibenreith_village)
+
+Die Kutsche hält im Dorf. Sofort verändert sich das Verhältnis der Dinge: Das Jagdhaus ist nicht mehr Ziel, sondern Verspätung; Viktor nicht mehr nur Begleiter, sondern Zeuge; Eibenreith nicht mehr Kulisse, sondern erster Gesprächspartner.
+
+-> village_detour_start
+
+
+=== depart_for_village_on_foot ===
+~ companion_join(viktor)
+~ loc_move_to(loc_eibenreith_village)
+
+Die Kutsche hält im Dorf. Das Jagdhaus ist nicht mehr Ziel, sondern eine Adresse, an die Gepäck und Nachricht vorausgeschickt werden können. Viktor ist nicht mehr nur Begleiter, sondern Zeuge einer Eigenmächtigkeit. Eibenreith wird nicht Kulisse, sondern Boden unter deinen Schuhen.
+
+-> village_send_carriage_ahead
diff --git a/data/ink-src/eibenreith/04_ankunft.ink b/data/ink-src/eibenreith/04_ankunft.ink
new file mode 100644
index 0000000..4446bfa
--- /dev/null
+++ b/data/ink-src/eibenreith/04_ankunft.ink
@@ -0,0 +1,186 @@
+// ============================================================================
+// EIBENREITH 04 ABEND-PAUSE / ANKUNFT HOHENREITH
+// ============================================================================
+// Abend-Pause / Übergang nach Hohenreith.
+//
+// Kapitel 03 endet mit der Ankunft am Portal. Erst pre_dinner_transition
+// beendet die Nachmittags-Episode und öffnet die feste Abend-Pause:
+// Ankunft in Hohenreith, Übergang zum Haushalt und abschließender Intro-#score.
+// ============================================================================
+
+
+// ============================================================================
+// COMPATIBILITY ALIAS
+// ============================================================================
+
+=== village_arrival_options ===
+-> village_detour_start
+
+
+// ============================================================================
+// PRE-DINNER TRANSITION
+// ============================================================================
+
+
+=== pre_dinner_transition ===
+~ episode_end("normal")
+~ time_move_to(TimeSlot.evening)
+~ loc_move_to(loc_hohenreith_dining_room)
+~ episode_start(EpisodeId.episode_first_dinner, TimeSlot.evening)
+
+Das Portal schließt sich hinter dir nicht laut. Es muss nicht. Das Haus nimmt Mantel, Hut, Namen, Ruf und Verspätung entgegen und verteilt alles unsichtbar auf Diener, Treppe, Salon, Küche und künftige Tischgespräche.
+
+Noch bevor du die Familie siehst, ist aus der Reise eine Person geworden, die man erklären kann.
+
+-> intro_score
+
+
+=== intro_score ===
+~ temp score_origin = ""
+~ temp score_body = ""
+~ temp score_outfit = ""
+~ temp score_hair = ""
+~ temp score_hairstyle = ""
+~ temp score_face = ""
+~ temp score_religion = ""
+~ temp score_belief = ""
+~ temp score_approach = ""
+~ temp score_route = ""
+
+{
+- class ? noble:
+ ~ score_origin = "Glückwunsch. Du hast {given_names} {title_part} {surname} erschaffen: eine junge Dame aus niederem Adel, hofnah genug, um eingeladen zu werden, aber nicht hoch genug, um unantastbar zu sein."
+- class ? middle:
+ ~ score_origin = "Glückwunsch. Du hast {title_part} {given_names} {surname} erschaffen: eine bürgerlich geborene Frau, die gelernt hat, Bildung, Ehrgeiz und gesellschaftliche Lesbarkeit als Aufstiegsmittel zu führen."
+- else:
+ ~ score_origin = "Glückwunsch. Du hast {title_part} {given_names} {surname} erschaffen: eine Frau aus niedrigerer Herkunft, die sich so weit in die feinen Räume Wiens gearbeitet hat, dass nun jedes falsche Wort doppelt zählt."
+}
+
+{
+- body ? small_slender:
+ ~ score_body = "Sie ist klein und schmal gebaut; ein Körper, den die Welt leicht unterschätzt, gerade weil er schnell aus ihrem Blick geraten kann."
+- body ? medium_soft:
+ ~ score_body = "Sie ist mittelgroß, geformt und gegenwärtig; nicht zerbrechlich, nicht schwerfällig, sondern körperlich präsenter, als manche an einer jungen Dame bequem finden."
+- body ? tall_slender:
+ ~ score_body = "Sie ist hochgewachsen und schlank; eine Gestalt, die mehr Raum beansprucht, als ihre Rolle ihr zugestehen möchte."
+- body ? compact_strong:
+ ~ score_body = "Sie ist kompakt und kräftiger gebaut; unter Reisekleid und Korsett bleibt eine praktische Stärke sichtbar, die nicht recht zur Erwartung einer Dame passt."
+- else:
+ ~ score_body = "Ihr Körper ist noch nicht vollständig beschrieben."
+}
+
+{
+- outfit ? charcoal_plum_velvet:
+ ~ score_outfit = "Ihr Reisekostüm aus anthrazitfarbener Wolle mit pflaumenfarbenem Samt wirkt gedämpft, teuer und kontrolliert."
+- outfit ? black_brown_ivory_lace:
+ ~ score_outfit = "Ihr schwarzbraunes Wollkostüm mit elfenbeinfarbener Bluse wirkt streng, korrekt und beinahe fromm."
+- outfit ? blue_grey_practical:
+ ~ score_outfit = "Ihr graublaues Reisekostüm wirkt praktischer, beweglicher und weniger dekorativ, ohne die gesellschaftliche Form aufzugeben."
+- outfit ? dark_green_black_trim:
+ ~ score_outfit = "Ihr dunkelgrünes Kostüm mit schwarzem Besatz bleibt diskret und doch schwer zu vergessen."
+- outfit ? black_veil_severe:
+ ~ score_outfit = "Ihr schwarzes Reisekleid mit Schleier gibt ihr eine Strenge, die nicht offiziell Trauer ist, aber sehr gut mit ihrem Ruf zusammenarbeitet."
+- else:
+ ~ score_outfit = "Ihr Reisekostüm ist noch nicht vollständig beschrieben."
+}
+
+{
+- hair ? dark_brown:
+ ~ score_hair = "Sie hat dunkelbraunes Haar."
+- hair ? chestnut:
+ ~ score_hair = "Sie hat kastanienbraunes Haar mit warmem Glanz."
+- hair ? dark_blond_ash:
+ ~ score_hair = "Sie hat dunkelblondes bis aschbraunes Haar."
+- hair ? auburn:
+ ~ score_hair = "Sie hat rotbraunes Haar, das selbst unter Hut und Nadeln nicht ganz unauffällig wird."
+- else:
+ ~ score_hair = "Ihre Haarfarbe ist noch nicht vollständig beschrieben."
+}
+
+{
+- style ? centre_part_low_bun:
+ ~ score_hairstyle = "Sie trägt einen glatten Mittelscheitel und einen tiefen Knoten: streng, sauber, ohne überflüssige Bitte um Nachsicht."
+- style ? soft_waves_chignon:
+ ~ score_hairstyle = "Sie trägt weiche Stirnwellen und einen sorgfältigen Chignon: zugänglicher in der Wirkung, aber nicht weniger berechnet."
+- style ? braided_low_knot:
+ ~ score_hairstyle = "Sie trägt geflochtene Partien und einen schweren Knoten im Nacken: praktisch, geordnet und etwas erdiger als die glatte Wiener Form."
+- style ? raised_front_modern:
+ ~ score_hairstyle = "Sie trägt eine modisch gehobene Stirnpartie: gerade noch anständig, aber nicht ganz bereit, älteren Damen zu gefallen."
+- else:
+ ~ score_hairstyle = "Ihre Frisur ist noch nicht vollständig beschrieben."
+}
+
+{
+- face ? cool_sharp:
+ ~ score_face = "Ihr helles, kühles Gesicht mit bestimmten Brauen wirkt wacher und schärfer, als ihr Alter erwarten lässt."
+- face ? soft_alert:
+ ~ score_face = "Ihr Gesicht verbindet weicheren Mund und wachen Blick; sie wirkt zugänglich, aber nicht einfach."
+- face ? calm_dark_eyes:
+ ~ score_face = "Ihr wärmerer Teint und die dunkleren Augen geben ihr eine ruhige Gegenwart, weniger ätherisch als wach."
+- face ? fine_controlled:
+ ~ score_face = "Ihre feinen, blassen Züge wirken zerbrechlich, bis man die sichtbare Kontrolle darin bemerkt."
+- face ? marked_jaw:
+ ~ score_face = "Ihr markanteres Gesicht mit gerader Nase und festem Kinn verrät eher Willen als Gefälligkeit."
+- else:
+ ~ score_face = "Ihr Gesicht ist noch nicht vollständig beschrieben."
+}
+
+{
+- relig ? catholic:
+ ~ score_religion = "Ihr Glaube ist ernsthaft katholisch; sie weiß, dass Sünde, Gnade und unsichtbare Mächte keine bloßen Salonwörter sind."
+- relig ? social:
+ ~ score_religion = "Ihr Katholizismus ist Erziehung, Gewohnheit und gesellschaftliche Grammatik; vertraut genug, um zu wirken, aber nicht immer tief genug, um zu tragen."
+- relig ? reform:
+ ~ score_religion = "Sie begegnet Kirche und Frömmigkeit mit reformerischer Nüchternheit: nützlich, wenn sie ordnen; verdächtig, wenn sie Angst verwalten."
+- relig ? spiritist:
+ ~ score_religion = "Sie verbindet katholische Bilder, Totenmessen, Séancen und Ahnungen leichter, als es einem Katechismus lieb wäre."
+- relig ? wounded:
+ ~ score_religion = "Der Glaube hat sie geformt und verwundet; sie kennt Gebet und Schuld zu genau, um beides harmlos zu nennen."
+- else:
+ ~ score_religion = "Ihr Verhältnis zur Religion ist noch nicht vollständig beschrieben."
+}
+
+{
+- belief ? believer:
+ ~ score_belief = "Sie hält das Unsichtbare für möglich und manchmal für näher, als die Gebildeten zugeben möchten."
+- belief ? sceptic:
+ ~ score_belief = "Sie sucht zuerst irdische Ursachen: Nutzen, Spuren, Gewohnheiten, Lügen und Menschen, die vom Glauben anderer profitieren."
+- belief ? performer:
+ ~ score_belief = "Sie weiß, dass ihr mystischer Ruf auch Bühne, Werkzeug und Schutzkleidung ist. Ob Wahrheit oder Trick: Wirkung ist bereits Macht."
+- belief ? unsure:
+ ~ score_belief = "Sie hält ihr Urteil zurück; nicht aus Schwäche, sondern weil vorschnelle Gewissheit oft nur eine elegantere Form der Dummheit ist."
+- else:
+ ~ score_belief = "Ihr Glaube an das Übernatürliche ist noch nicht vollständig beschrieben."
+}
+
+{
+- has(arrival_form_compromised):
+ ~ score_approach = "Am Nachmittag ließ sie die Kutsche mit Gepäck und Nachricht vorausfahren und kam zu Fuß in Hohenreith an: eigenmächtig, beobachtet und schwerer zu erklären."
+- has(village_knowledge_prioritised):
+ ~ score_approach = "Am Nachmittag wählte sie den Umweg durch Eibenreith und fuhr anschließend verspätet weiter: weniger korrekt, aber reicher an Blicken, Stimmen und Ortswissen."
+- else:
+ ~ score_approach = "Am Nachmittag bewahrte sie die Form und fuhr direkt nach Hohenreith: pünktlich, kontrolliert und standesgemäß."
+}
+
+{
+- axis_up(order_axis):
+ ~ score_route = "Ihre bisher stärkste Maske ist Fassung: Form, Abstand und Selbstbeherrschung als Waffe."
+- axis_up(inquiry_axis):
+ ~ score_route = "Ihre bisher stärkste Methode ist Untersuchung: Sie ordnet, prüft und entlarvt, bevor sie sich rühren lässt."
+- route_up(route_lover):
+ ~ score_route = "Ihre bisher stärkste Methode ist Wirkung: Charme, Blick und soziale Wärme werden zu Werkzeugen."
+- route_up(route_sapphic):
+ ~ score_route = "Ihre bisher stärkste Bewegung ist Resonanz: Sie erkennt besonders dort Gefangenschaft, wo Frauen gelernt haben, sie schön zu nennen."
+- route_up(route_careless):
+ ~ score_route = "Ihre bisher stärkste Bewegung ist entwaffnende Unsicherheit: kleine Kontrollverluste, die andere näher heranlassen."
+- axis_down(order_axis):
+ ~ score_route = "Ihre bisher stärkste Bewegung ist Regelbruch: Sie benennt, was höfliche Menschen nur umstellen."
+- else:
+ ~ score_route = "Ihre Persönlichkeit ist noch nicht auf eine einzige Maske festgelegt. Sie trägt mehrere Möglichkeiten nach Hohenreith hinein."
+}
+
+#score[{score_origin} {score_body} {score_outfit} {score_hair} {score_hairstyle} {score_face} {score_religion} {score_belief} {score_approach} {score_route} Charaktererschaffung abgeschlossen. Willkommen in Hohenreith.]
+
+-> END
+
+
diff --git a/data/ink-src/eibenreith/WritingWithInk.md b/data/ink-src/eibenreith/WritingWithInk.md
new file mode 100644
index 0000000..a301f94
--- /dev/null
+++ b/data/ink-src/eibenreith/WritingWithInk.md
@@ -0,0 +1,3454 @@
+# Writing with ink
+
+
+ Table of Contents
+
+ * [Introduction](#introduction)
+ * [Part One: The Basics](#part-one-the-basics)
+ * [1) Content](#1-content)
+ * [2) Choices](#2-choices)
+ * [3) Knots](#3-knots)
+ * [4) Diverts](#4-diverts)
+ * [5) Branching The Flow](#5-branching-the-flow)
+ * [6) Includes and Stitches](#6-includes-and-stitches)
+ * [7) Varying Choices](#7-varying-choices)
+ * [8) Variable Text](#8-variable-text)
+ * [9) Game Queries and Functions](#9-game-queries-and-functions)
+ * [Part 2: Weave](#part-2-weave)
+ * [1) Gathers](#1-gathers)
+ * [2) Nested Flow](#2-nested-flow)
+ * [3) Tracking a Weave](#3-tracking-a-weave)
+ * [Part 3: Variables and Logic](#part-3-variables-and-logic)
+ * [1) Global Variables](#1-global-variables)
+ * [2) Logic](#2-logic)
+ * [3) Conditional blocks (if/else)](#3-conditional-blocks-ifelse)
+ * [4) Temporary Variables](#4-temporary-variables)
+ * [5) Functions](#5-functions)
+ * [6) Constants](#6-constants)
+ * [7) Advanced: Game-side logic](#7-advanced-game-side-logic)
+ * [Part 4: Advanced Flow Control](#part-4-advanced-flow-control)
+ * [1) Tunnels](#1-tunnels)
+ * [2) Threads](#2-threads)
+ * [Part 5: Advanced State Tracking](#part-5-advanced-state-tracking)
+ * [1) Basic Lists](#1-basic-lists)
+ * [2) Reusing Lists](#2-reusing-lists)
+ * [3) List Values](#3-list-values)
+ * [4) Multivalued Lists](#4-multivalued-lists)
+ * [5) Advanced List Operations](#5-advanced-list-operations)
+ * [6) Multi-list Lists](#6-multi-list-lists)
+ * [7) Long example: crime scene](#7-long-example-crime-scene)
+ * [8) Summary](#8-summary)
+ * [Part 6: International character support in identifiers](#part-6-international-character-support-in-identifiers)
+
+
+## Introduction
+
+**ink** is a scripting language built around the idea of marking up pure-text with flow in order to produce interactive scripts.
+
+At its most basic, it can be used to write a Choose Your Own-style story, or a branching dialogue tree. But its real strength is in writing dialogues with lots of options and lots of recombination of the flow.
+
+**ink** offers several features to enable non-technical writers to branch often, and play out the consequences of those branches, in both minor and major ways, without fuss.
+
+The script aims to be clean and logically ordered, so branching dialogue can be tested "by eye". The flow is described in a declarative fashion where possible.
+
+It's also designed with redrafting in mind; so editing a flow should be fast.
+
+# Part One: The Basics
+
+## 1) Content
+
+### The simplest ink script
+
+The most basic ink script is just text in a .ink file.
+
+ Hello, world!
+
+On running, this will output the content, and then stop.
+
+Text on separate lines produces new paragraphs. The script:
+
+ Hello, world!
+ Hello?
+ Hello, are you there?
+
+produces output that looks the same.
+
+
+### Comments
+
+By default, all text in your file will appear in the output content, unless specially marked up.
+
+The simplest mark-up is a comment. **ink** supports two kinds of comment. There's the kind used for someone reading the code, which the compiler ignores:
+
+ "What do you make of this?" she asked.
+
+ // Something unprintable...
+
+ "I couldn't possibly comment," I replied.
+
+ /*
+ ... or an unlimited block of text
+ */
+
+and there's the kind used for reminding the author what they need to do, that the compiler prints out during compilation:
+
+
+ TODO: Write this section properly!
+
+### Tags
+
+Text content from the game will appear 'as is' when the engine runs. However, it can sometimes be useful to mark up a line of content with extra information to tell the game what to do with that content.
+
+**ink** provides a simple system for tagging lines of content, with hashtags.
+
+ A line of normal game-text. # colour it blue
+
+These don't show up in the main text flow, but can be read off by the game and used as you see fit. See [Running Your Ink](RunningYourInk.md#marking-up-your-ink-content-with-tags) for more information.
+
+
+## 2) Choices
+
+Input is offered to the player via text choices. A text choice is indicated by an `*` character.
+
+If no other flow instructions are given, once made, the choice will flow into the next line of text.
+
+ Hello world!
+ * Hello back!
+ Nice to hear from you!
+
+This produces the following game:
+
+ Hello world!
+ 1: Hello back!
+
+ > 1
+ Hello back!
+ Nice to hear from you!
+
+By default, the text of a choice appears again, in the output.
+
+### Suppressing choice text
+
+Some games separate the text of a choice from its outcome. In **ink**, if the choice text is given in square brackets, the text of the choice will not be printed into response.
+
+ Hello world!
+ * [Hello back!]
+ Nice to hear from you!
+
+produces
+
+ Hello world!
+ 1: Hello back!
+
+ > 1
+ Nice to hear from you!
+
+#### Advanced: mixing choice and output text
+
+The square brackets in fact divide up the option content. What's before is printed in both choice and output; what's inside only in choice; and what's after, only in output. Effectively, they provide alternative ways for a line to end.
+
+ Hello world!
+ * Hello [back!] right back to you!
+ Nice to hear from you!
+
+produces:
+
+ Hello world!
+ 1: Hello back!
+ > 1
+ Hello right back to you!
+ Nice to hear from you!
+
+This is most useful when writing dialogue choices:
+
+ "What's that?" my master asked.
+ * "I am somewhat tired[."]," I repeated.
+ "Really," he responded. "How deleterious."
+
+produces:
+
+ "What's that?" my master asked.
+ 1: "I am somewhat tired."
+ > 1
+ "I am somewhat tired," I repeated.
+ "Really," he responded. "How deleterious."
+
+### Multiple Choices
+
+To make choices really choices, we need to provide alternatives. We can do this simply by listing them:
+
+ "What's that?" my master asked.
+ * "I am somewhat tired[."]," I repeated.
+ "Really," he responded. "How deleterious."
+ * "Nothing, Monsieur!"[] I replied.
+ "Very good, then."
+ * "I said, this journey is appalling[."] and I want no more of it."
+ "Ah," he replied, not unkindly. "I see you are feeling frustrated. Tomorrow, things will improve."
+
+This produces the following game:
+
+ "What's that?" my master asked.
+
+ 1: "I am somewhat tired."
+ 2: "Nothing, Monsieur!"
+ 3: "I said, this journey is appalling."
+
+ > 3
+ "I said, this journey is appalling and I want no more of it."
+ "Ah," he replied, not unkindly. "I see you are feeling frustrated. Tomorrow, things will improve."
+
+The above syntax is enough to write a single set of choices. In a real game, we'll want to move the flow from one point to another based on what the player chooses. To do that, we need to introduce a bit more structure.
+
+## 3) Knots
+
+### Pieces of content are called knots
+
+To allow the game to branch we need to mark up sections of content with names (as an old-fashioned gamebook does with its 'Paragraph 18', and the like.)
+
+These sections are called "knots" and they're the fundamental structural unit of ink content.
+
+### Writing a knot
+
+The start of a knot is indicated by two or more equals signs, as follows.
+
+ === top_knot ===
+
+(The equals signs on the end are optional; and the name needs to be a single word with no spaces.)
+
+The start of a knot is a header; the content that follows will be inside that knot.
+
+ === back_in_london ===
+
+ We arrived into London at 9.45pm exactly.
+
+#### Advanced: a knottier "hello world"
+
+When you start an ink file, content outside of knots will be run automatically. But knots won't. So if you start using knots to hold your content, you'll need to tell the game where to go. We do this with a divert arrow `->`, which is covered properly in the next section.
+
+The simplest knotty script is:
+
+ -> top_knot
+
+ === top_knot ===
+ Hello world!
+
+However, **ink** doesn't like loose ends, and produces a warning on compilation and/or run-time when it thinks this has happened. The script above produces this on compilation:
+
+ WARNING: Apparent loose end exists where the flow runs out. Do you need a '-> END' statement, choice or divert? on line 3 of tests/test.ink
+
+and this on running:
+
+ Runtime error in tests/test.ink line 3: ran out of content. Do you need a '-> DONE' or '-> END'?
+
+The following plays and compiles without error:
+
+ === top_knot ===
+ Hello world!
+ -> END
+
+`-> END` is a marker for both the writer and the compiler; it means "the story flow should now stop".
+
+## 4) Diverts
+
+### Knots divert to knots
+
+You can tell the story to move from one knot to another using `->`, a "divert arrow". Diverts happen immediately without any user input.
+
+ === back_in_london ===
+
+ We arrived into London at 9.45pm exactly.
+ -> hurry_home
+
+ === hurry_home ===
+ We hurried home to Savile Row as fast as we could.
+
+#### Diverts are invisible
+
+Diverts are intended to be seamless and can even happen mid-sentence:
+
+ === hurry_home ===
+ We hurried home to Savile Row -> as_fast_as_we_could
+
+ === as_fast_as_we_could ===
+ as fast as we could.
+
+produces the same line as above:
+
+ We hurried home to Savile Row as fast as we could.
+
+#### Glue
+
+The default behaviour inserts line-breaks before every new line of content. In some cases, however, content must insist on not having a line-break, and it can do so using `<>`, or "glue".
+
+ === hurry_home ===
+ We hurried home <>
+ -> to_savile_row
+
+ === to_savile_row ===
+ to Savile Row
+ -> as_fast_as_we_could
+
+ === as_fast_as_we_could ===
+ <> as fast as we could.
+
+also produces:
+
+ We hurried home to Savile Row as fast as we could.
+
+You can't use too much glue: multiple glues next to each other have no additional effect. (And there's no way to "negate" a glue; once a line is sticky, it'll stick.)
+
+
+## 5) Branching The Flow
+
+### Basic branching
+
+Combining knots, options and diverts gives us the basic structure of a choose-your-own game.
+
+ === paragraph_1 ===
+ You stand by the wall of Analand, sword in hand.
+ * [Open the gate] -> paragraph_2
+ * [Smash down the gate] -> paragraph_3
+ * [Turn back and go home] -> paragraph_4
+
+ === paragraph_2 ===
+ You open the gate, and step out onto the path.
+
+ ...
+
+### Branching and joining
+
+Using diverts, the writer can branch the flow, and join it back up again, without showing the player that the flow has rejoined.
+
+ === back_in_london ===
+
+ We arrived into London at 9.45pm exactly.
+
+ * "There is not a moment to lose!"[] I declared.
+ -> hurry_outside
+
+ * "Monsieur, let us savour this moment!"[] I declared.
+ My master clouted me firmly around the head and dragged me out of the door.
+ -> dragged_outside
+
+ * [We hurried home] -> hurry_outside
+
+
+ === hurry_outside ===
+ We hurried home to Savile Row -> as_fast_as_we_could
+
+
+ === dragged_outside ===
+ He insisted that we hurried home to Savile Row
+ -> as_fast_as_we_could
+
+
+ === as_fast_as_we_could ===
+ <> as fast as we could.
+
+
+### The story flow
+
+Knots and diverts combine to create the basic story flow of the game. This flow is "flat" - there's no call-stack, and diverts aren't "returned" from.
+
+In most ink scripts, the story flow starts at the top, bounces around in a spaghetti-like mess, and eventually, hopefully, reaches a `-> END`.
+
+The very loose structure means writers can get on and write, branching and rejoining without worrying about the structure that they're creating as they go. There's no boiler-plate to creating new branches or diversions, and no need to track any state.
+
+#### Advanced: Loops
+
+You absolutely can use diverts to create looped content, and **ink** has several features to exploit this, including ways to make the content vary itself, and ways to control how often options can be chosen.
+
+See the sections on [Varying Text](#8-variable-text) and [Conditional Choices](#conditional-choices) for more information.
+
+Oh, and the following is legal and not a great idea:
+
+ === round ===
+ and
+ -> round
+
+## 6) Includes and Stitches
+
+### Knots can be subdivided
+
+As stories get longer, they become more confusing to keep organised without some additional structure.
+
+Knots can include sub-sections called "stitches". These are marked using a single equals sign.
+
+ === the_orient_express ===
+ = in_first_class
+ ...
+ = in_third_class
+ ...
+ = in_the_guards_van
+ ...
+ = missed_the_train
+ ...
+
+One could use a knot for a scene, for instance, and stitches for the events within the scene.
+
+### Stitches have unique names
+
+A stitch can be diverted to using its "address".
+
+ * [Travel in third class]
+ -> the_orient_express.in_third_class
+
+ * [Travel in the guard's van]
+ -> the_orient_express.in_the_guards_van
+
+### The first stitch is the default
+
+Diverting to a knot which contains stitches will divert to the first stitch in the knot. So:
+
+ * [Travel in first class]
+ "First class, Monsieur. Where else?"
+ -> the_orient_express
+
+is the same as:
+
+ * [Travel in first class]
+ "First class, Monsieur. Where else?"
+ -> the_orient_express.in_first_class
+
+(...unless we move the order of the stitches around inside the knot!)
+
+You can also include content at the top of a knot outside of any stitch. However, you need to remember to divert out of it - the engine *won't* automatically enter the first stitch once it's worked its way through the header content.
+
+ === the_orient_express ===
+
+ We boarded the train, but where?
+ * [First class] -> in_first_class
+ * [Second class] -> in_second_class
+
+ = in_first_class
+ ...
+ = in_second_class
+ ...
+
+
+### Local diverts
+
+From inside a knot, you don't need to use the full address for a stitch.
+
+ -> the_orient_express
+
+ === the_orient_express ===
+ = in_first_class
+ I settled my master.
+ * [Move to third class]
+ -> in_third_class
+
+ = in_third_class
+ I put myself in third.
+
+This means stitches and knots can't share names, but several knots can contain the same stitch name. (So both the Orient Express and the SS Mongolia can have first class.)
+
+The compiler will warn you if ambiguous names are used.
+
+### Script files can be combined
+
+You can also split your content across multiple files, using an include statement.
+
+ INCLUDE newspaper.ink
+ INCLUDE cities/vienna.ink
+ INCLUDE journeys/orient_express.ink
+
+Include statements should always go at the top of a file, and not inside knots.
+
+There are no rules about what file a knot must be in to be diverted to. (In other words, separating files has no effect on the game's namespacing).
+
+
+## 7) Varying Choices
+
+### Choices can only be used once
+
+By default, every choice in the game can only be chosen once. If you don't have loops in your story, you'll never notice this behaviour. But if you do use loops, you'll quickly notice your options disappearing...
+
+ === find_help ===
+
+ You search desperately for a friendly face in the crowd.
+ * The woman in the hat[?] pushes you roughly aside. -> find_help
+ * The man with the briefcase[?] looks disgusted as you stumble past him. -> find_help
+
+produces:
+
+ You search desperately for a friendly face in the crowd.
+
+ 1: The woman in the hat?
+ 2: The man with the briefcase?
+
+ > 1
+ The woman in the hat pushes you roughly aside.
+ You search desperately for a friendly face in the crowd.
+
+ 1: The man with the briefcase?
+
+ >
+
+... and on the next loop you'll have no options left.
+
+#### Fallback choices
+
+The above example stops where it does, because the next choice ends up in an "out of content" run-time error.
+
+ > 1
+ The man with the briefcase looks disgusted as you stumble past him.
+ You search desperately for a friendly face in the crowd.
+
+ Runtime error in tests/test.ink line 6: ran out of content. Do you need a '-> DONE' or '-> END'?
+
+We can resolve this with a 'fallback choice'. Fallback choices are never displayed to the player, but are 'chosen' by the game if no other options exist.
+
+A fallback choice is simply a "choice without choice text":
+
+ * -> out_of_options
+
+And, in a slight abuse of syntax, we can make a default choice with content in it, using an "choice then arrow":
+
+ * ->
+ Mulder never could explain how he got out of that burning box car. -> season_2
+
+#### Example of a fallback choice
+
+Adding this into the previous example gives us:
+
+ === find_help ===
+
+ You search desperately for a friendly face in the crowd.
+ * The woman in the hat[?] pushes you roughly aside. -> find_help
+ * The man with the briefcase[?] looks disgusted as you stumble past him. -> find_help
+ * ->
+ But it is too late: you collapse onto the station platform. This is the end.
+ -> END
+
+and produces:
+
+ You search desperately for a friendly face in the crowd.
+
+ 1: The woman in the hat?
+ 2: The man with the briefcase?
+
+ > 1
+ The woman in the hat pushes you roughly aside.
+ You search desperately for a friendly face in the crowd.
+
+ 1: The man with the briefcase?
+
+ > 1
+ The man with the briefcase looks disgusted as you stumble past him.
+ You search desperately for a friendly face in the crowd.
+ But it is too late: you collapse onto the station platform. This is the end.
+
+
+### Sticky choices
+
+The 'once-only' behaviour is not always what we want, of course, so we have a second kind of choice: the "sticky" choice. A sticky choice is simply one that doesn't get used up, and is marked by a `+` bullet.
+
+ === homers_couch ===
+ + [Eat another donut]
+ You eat another donut. -> homers_couch
+ * [Get off the couch]
+ You struggle up off the couch to go and compose epic poetry.
+ -> END
+
+Fallback choices can be sticky too.
+
+ === conversation_loop
+ * [Talk about the weather] -> chat_weather
+ * [Talk about the children] -> chat_children
+ + -> sit_in_silence_again
+
+### Conditional Choices
+
+You can also turn choices on and off by hand. **ink** has quite a lot of logic available, but the simplest tests is "has the player seen a particular piece of content".
+
+Every knot/stitch in the game has a unique address (so it can be diverted to), and we use the same address to test if that piece of content has been seen.
+
+ * { not visit_paris } [Go to Paris] -> visit_paris
+ + { visit_paris } [Return to Paris] -> visit_paris
+
+ * { visit_paris.met_estelle } [ Telephone Mme Estelle ] -> phone_estelle
+
+Note that the test `knot_name` is true if *any* stitch inside that knot has been seen.
+
+Note also that conditionals don't override the once-only behaviour of options, so you'll still need sticky options for repeatable choices.
+
+#### Advanced: multiple conditions
+
+You can use several logical tests on an option; if you do, *all* the tests must all be passed for the option to appear.
+
+ * { not visit_paris } [Go to Paris] -> visit_paris
+ + { visit_paris } { not bored_of_paris }
+ [Return to Paris] -> visit_paris
+
+#### Logical operators: AND and OR
+
+The above "multiple conditions" are really just conditions with an the usual programming AND operator. Ink supports `and` (also written as `&&`) and `or` (also written as `||`) in the usual way, as well as brackets.
+
+ * { not (visit_paris or visit_rome) && (visit_london || visit_new_york) } [ Wait. Go where? I'm confused. ] -> visit_someplace
+
+For non-programmers `X and Y` means both X and Y must be true. `X or Y` means either or both. We don't have a `xor`.
+
+You can also use the standard `!` for `not`, though it'll sometimes confuse the compiler which thinks `{!text}` is a once-only list. We recommend using `not` because negated boolean tests are never that exciting.
+
+#### Advanced: knot/stitch labels are actually read counts
+
+The test:
+
+ * {seen_clue} [Accuse Mr Jefferson]
+
+is actually testing an *integer* and not a true/false flag. A knot or stitch used this way is actually an integer variable containing the number of times the content at the address has been seen by the player.
+
+If it's non-zero, it'll return true in a test like the one above, but you can also be more specific as well:
+
+ * {seen_clue > 3} [Flat-out arrest Mr Jefferson]
+
+
+#### Advanced: more logic
+
+**ink** supports a lot more logic and conditionality than covered here - see the section on [variables and logic](#part-3-variables-and-logic).
+
+
+## 8) Variable Text
+
+### Text can vary
+
+So far, all the content we've seen has been static, fixed pieces of text. But content can also vary at the moment of being printed.
+
+### Sequences, cycles and other alternatives
+
+The simplest variations of text are provided by alternatives, which are selected from depending on some kind of rule. **ink** supports several types. Alternatives are written inside `{`...`}` curly brackets, with elements separated by `|` symbols (vertical divider lines).
+
+These are only useful if a piece of content is visited more than once!
+
+#### Types of alternatives
+
+**Sequences** (the default):
+
+A sequence (or a "stopping block") is a set of alternatives that tracks how many times its been seen, and each time, shows the next element along. When it runs out of new content it continues the show the final element.
+
+ The radio hissed into life. {"Three!"|"Two!"|"One!"|There was the white noise racket of an explosion.|But it was just static.}
+
+ {I bought a coffee with my five-pound note.|I bought a second coffee for my friend.|I didn't have enough money to buy any more coffee.}
+
+**Cycles** (marked with a `&`):
+
+Cycles are like sequences, but they loop their content.
+
+ It was {&Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday} today.
+
+
+**Once-only** (marked with a `!`):
+
+Once-only alternatives are like sequences, but when they run out of new content to display, they display nothing. (You can think of a once-only alternative as a sequence with a blank last entry.)
+
+ He told me a joke. {!I laughed politely.|I smiled.|I grimaced.|I promised myself to not react again.}
+
+**Shuffles** (marked with a `~`):
+
+Shuffles produce randomised output.
+
+ I tossed the coin. {~Heads|Tails}.
+
+#### Features of Alternatives
+
+Alternatives can contain blank elements.
+
+ I took a step forward. {!||||Then the lights went out. -> eek}
+
+Alternatives can be nested.
+
+ The Ratbear {&{wastes no time and |}swipes|scratches} {&at you|into your {&leg|arm|cheek}}.
+
+Alternatives can include divert statements.
+
+ I {waited.|waited some more.|snoozed.|woke up and waited more.|gave up and left. -> leave_post_office}
+
+They can also be used inside choice text:
+
+ + "Hello, {&Master|Monsieur Fogg|you|brown-eyes}!"[] I declared.
+
+(...with one caveat; you can't start an option's text with a `{`, as it'll look like a conditional.)
+
+(...but the caveat has a caveat, if you escape a whitespace `\ ` before your `{` ink will recognise it as text.)
+
+ +\ {&They headed towards the Sandlands|They set off for the desert|The party followed the old road South}
+
+#### Examples
+
+Alternatives can be used inside loops to create the appearance of intelligent, state-tracking gameplay without particular effort.
+
+Here's a one-knot version of whack-a-mole. Note we use once-only options, and a fallback, to ensure the mole doesn't move around, and the game will always end.
+
+ === whack_a_mole ===
+ {I heft the hammer.|{~Missed!|Nothing!|No good. Where is he?|Ah-ha! Got him! -> END}}
+ The {&mole|{&nasty|blasted|foul} {&creature|rodent}} is {in here somewhere|hiding somewhere|still at large|laughing at me|still unwhacked|doomed}. <>
+ {!I'll show him!|But this time he won't escape!}
+ * [{&Hit|Smash|Try} top-left] -> whack_a_mole
+ * [{&Whallop|Splat|Whack} top-right] -> whack_a_mole
+ * [{&Blast|Hammer} middle] -> whack_a_mole
+ * [{&Clobber|Bosh} bottom-left] -> whack_a_mole
+ * [{&Nail|Thump} bottom-right] -> whack_a_mole
+ * ->
+ Then you collapse from hunger. The mole has defeated you!
+ -> END
+
+
+produces the following 'game':
+
+ I heft the hammer.
+ The mole is in here somewhere. I'll show him!
+
+ 1: Hit top-left
+ 2: Whallop top-right
+ 3: Blast middle
+ 4: Clobber bottom-left
+ 5: Nail bottom-right
+
+ > 1
+ Missed!
+ The nasty creature is hiding somewhere. But this time he won't escape!
+
+ 1: Splat top-right
+ 2: Hammer middle
+ 3: Bosh bottom-left
+ 4: Thump bottom-right
+
+ > 4
+ Nothing!
+ The mole is still at large.
+ 1: Whack top-right
+ 2: Blast middle
+ 3: Clobber bottom-left
+
+ > 2
+ Where is he?
+ The blasted rodent is laughing at me.
+ 1: Whallop top-right
+ 2: Bosh bottom-left
+
+ > 1
+ Ah-ha! Got him!
+
+
+And here's a bit of lifestyle advice. Note the sticky choice - the lure of the television will never fade:
+
+ === turn_on_television ===
+ I turned on the television {for the first time|for the second time|again|once more}, but there was {nothing good on, so I turned it off again|still nothing worth watching|even less to hold my interest than before|nothing but rubbish|a program about sharks and I don't like sharks|nothing on}.
+ + [Try it again] -> turn_on_television
+ * [Go outside instead] -> go_outside_instead
+
+ === go_outside_instead ===
+ -> END
+
+
+
+#### Sneak Preview: Multiline alternatives
+**ink** has another format for making alternatives of varying content blocks, too. See the section on [multiline blocks](#multiline-blocks) for details.
+
+
+
+### Conditional Text
+
+Text can also vary depending on logical tests, just as options can.
+
+ {met_blofeld: "I saw him. Only for a moment." }
+
+and
+
+ "His real name was {met_blofeld.learned_his_name: Franz|a secret}."
+
+These can appear as separate lines, or within a section of content. They can even be nested, so:
+
+ {met_blofeld: "I saw him. Only for a moment. His real name was {met_blofeld.learned_his_name: Franz|kept a secret}." | "I missed him. Was he particularly evil?" }
+
+can produce either:
+
+ "I saw him. Only for a moment. His real name was Franz."
+
+or:
+
+ "I saw him. Only for a moment. His real name was kept a secret."
+
+or:
+
+ "I missed him. Was he particularly evil?"
+
+## 9) Game Queries and Functions
+
+**ink** provides a few useful 'game level' queries about game state, for use in conditional logic. They're not quite parts of the language, but they're always available, and they can't be edited by the author. In a sense, they're the "standard library functions" of the language.
+
+The convention is to name these in capital letters.
+
+### CHOICE_COUNT()
+
+`CHOICE_COUNT` returns the number of options created so far in the current chunk. So for instance.
+
+ * {false} Option A
+ * {true} Option B
+ * {CHOICE_COUNT() == 1} Option C
+
+produces two options, B and C. This can be useful for controlling how many options a player gets on a turn.
+
+### TURNS()
+
+This returns the number of game turns since the game began.
+
+### TURNS_SINCE(-> knot)
+
+`TURNS_SINCE` returns the number of moves (formally, player inputs) since a particular knot/stitch was last visited.
+
+A value of 0 means "was seen as part of the current chunk". A value of -1 means "has never been seen". Any other positive value means it has been seen that many turns ago.
+
+ * {TURNS_SINCE(-> sleeping.intro) > 10} You are feeling tired... -> sleeping
+ * {TURNS_SINCE(-> laugh) == 0} You try to stop laughing.
+
+Note that the parameter passed to `TURNS_SINCE` is a "divert target", not simply the knot address itself (because the knot address is a number - the read count - not a location in the story...)
+
+TODO: (requirement of passing `-c` to the compiler)
+
+#### Sneak preview: using TURNS_SINCE in a function
+
+The `TURNS_SINCE(->x) == 0` test is so useful it's often worth wrapping it up as an ink function.
+
+ === function came_from(-> x)
+ ~ return TURNS_SINCE(x) == 0
+
+The section on [functions](#5-functions) outlines the syntax here a bit more clearly but the above allows you to say things like:
+
+ * {came_from(-> nice_welcome)} 'I'm happy to be here!'
+ * {came_from(-> nasty_welcome)} 'Let's keep this quick.'
+
+... and have the game react to content the player saw *just now*.
+
+### SEED_RANDOM()
+
+For testing purposes, it's often useful to fix the random number generator so ink will produce the same outcomes every time you play. You can do this by "seeding" the random number system.
+
+ ~ SEED_RANDOM(235)
+
+The number you pass to the seed function is arbitrary, but providing different seeds will result in different sequences of outcomes.
+
+#### Advanced: more queries
+
+You can make your own external functions, though the syntax is a bit different: see the section on [functions](#5-functions) below.
+
+
+# Part 2: Weave
+
+So far, we've been building branched stories in the simplest way, with "options" that link to "pages".
+
+But this requires us to uniquely name every destination in the story, which can slow down writing and discourage minor branching.
+
+**ink** has a much more powerful syntax available, designed for simplifying story flows which have an always-forwards direction (as most stories do, and most computer programs don't).
+
+This format is called "weave", and its built out of the basic content/option syntax with two new features: the gather mark, `-`, and the nesting of choices and gathers.
+
+## 1) Gathers
+
+### Gather points gather the flow back together
+
+Let's go back to the first multi-choice example at the top of this document.
+
+ "What's that?" my master asked.
+ * "I am somewhat tired[."]," I repeated.
+ "Really," he responded. "How deleterious."
+ * "Nothing, Monsieur!"[] I replied.
+ * "I said, this journey is appalling[."] and I want no more of it."
+ "Ah," he replied, not unkindly. "I see you are feeling frustrated. Tomorrow, things will improve."
+
+In a real game, all three of these options might well lead to the same conclusion - Monsieur Fogg leaves the room. We can do this using a gather, without the need to create any new knots, or add any diverts.
+
+ "What's that?" my master asked.
+ * "I am somewhat tired[."]," I repeated.
+ "Really," he responded. "How deleterious."
+ * "Nothing, Monsieur!"[] I replied.
+ "Very good, then."
+ * "I said, this journey is appalling[."] and I want no more of it."
+ "Ah," he replied, not unkindly. "I see you are feeling frustrated. Tomorrow, things will improve."
+
+ - With that Monsieur Fogg left the room.
+
+This produces the following playthrough:
+
+ "What's that?" my master asked.
+
+ 1: "I am somewhat tired."
+ 2: "Nothing, Monsieur!"
+ 3: "I said, this journey is appalling."
+
+ > 1
+ "I am somewhat tired," I repeated.
+ "Really," he responded. "How deleterious."
+ With that Monsieur Fogg left the room.
+
+### Options and gathers form chains of content
+
+We can string these gather-and-branch sections together to make branchy sequences that always run forwards.
+
+ === escape ===
+ I ran through the forest, the dogs snapping at my heels.
+
+ * I checked the jewels[] were still in my pocket, and the feel of them brought a spring to my step. <>
+
+ * I did not pause for breath[] but kept on running. <>
+
+ * I cheered with joy. <>
+
+ - The road could not be much further! Mackie would have the engine running, and then I'd be safe.
+
+ * I reached the road and looked about[]. And would you believe it?
+ * I should interrupt to say Mackie is normally very reliable[]. He's never once let me down. Or rather, never once, previously to that night.
+
+ - The road was empty. Mackie was nowhere to be seen.
+
+This is the most basic kind of weave. The rest of this section details additional features that allow weaves to nest, contain side-tracks and diversions, divert within themselves, and above all, reference earlier choices to influence later ones.
+
+#### The weave philosophy
+
+Weaves are more than just a convenient encapsulation of branching flow; they're also a way to author more robust content. The `escape` example above has already four possible routes through, and a more complex sequence might have lots and lots more. Using normal diverts, one has to check the links by chasing the diverts from point to point and it's easy for errors to creep in.
+
+With a weave, the flow is guaranteed to start at the top and "fall" to the bottom. Flow errors are impossible in a basic weave structure, and the output text can be easily skim read. That means there's no need to actually test all the branches in game to be sure they work as intended.
+
+Weaves also allow for easy redrafting of choice-points; in particular, it's easy to break a sentence up and insert additional choices for variety or pacing reasons, without having to re-engineer any flow.
+
+
+## 2) Nested Flow
+
+The weaves shown above are quite simple, "flat" structures. Whatever the player does, they take the same number of turns to get from top to bottom. However, sometimes certain choices warrant a bit more depth or complexity.
+
+For that, we allow weaves to nest.
+
+This section comes with a warning. Nested weaves are very powerful and very compact, but they can take a bit of getting used to!
+
+### Options can be nested
+
+Consider the following scene:
+
+ - "Well, Poirot? Murder or suicide?"
+ * "Murder!"
+ * "Suicide!"
+ - Ms. Christie lowered her manuscript a moment. The rest of the writing group sat, open-mouthed.
+
+The first choice presented is "Murder!" or "Suicide!". If Poirot declares a suicide, there's no more to do, but in the case of murder, there's a follow-up question needed - who does he suspect?
+
+We can add new options via a set of nested sub-choices. We tell the script that these new choices are "part of" another choice by using two asterisks, instead of just one.
+
+
+ - "Well, Poirot? Murder or suicide?"
+ * "Murder!"
+ "And who did it?"
+ * * "Detective-Inspector Japp!"
+ * * "Captain Hastings!"
+ * * "Myself!"
+ * "Suicide!"
+ - Mrs. Christie lowered her manuscript a moment. The rest of the writing group sat, open-mouthed.
+
+(Note that it's good style to also indent the lines to show the nesting, but the compiler doesn't mind.)
+
+And should we want to add new sub-options to the other route, we do that in similar fashion.
+
+ - "Well, Poirot? Murder or suicide?"
+ * "Murder!"
+ "And who did it?"
+ * * "Detective-Inspector Japp!"
+ * * "Captain Hastings!"
+ * * "Myself!"
+ * "Suicide!"
+ "Really, Poirot? Are you quite sure?"
+ * * "Quite sure."
+ * * "It is perfectly obvious."
+ - Mrs. Christie lowered her manuscript a moment. The rest of the writing group sat, open-mouthed.
+
+Now, that initial choice of accusation will lead to specific follow-up questions - but either way, the flow will come back together at the gather point, for Mrs. Christie's cameo appearance.
+
+But what if we want a more extended sub-scene?
+
+### Gather points can be nested too
+
+Sometimes, it's not a question of expanding the number of options, but having more than one additional beat of story. We can do this by nesting gather points as well as options.
+
+ - "Well, Poirot? Murder or suicide?"
+ * "Murder!"
+ "And who did it?"
+ * * "Detective-Inspector Japp!"
+ * * "Captain Hastings!"
+ * * "Myself!"
+ - - "You must be joking!"
+ * * "Mon ami, I am deadly serious."
+ * * "If only..."
+ * "Suicide!"
+ "Really, Poirot? Are you quite sure?"
+ * * "Quite sure."
+ * * "It is perfectly obvious."
+ - Mrs. Christie lowered her manuscript a moment. The rest of the writing group sat, open-mouthed.
+
+If the player chooses the "murder" option, they'll have two choices in a row on their sub-branch - a whole flat weave, just for them.
+
+#### Advanced: What gathers do
+
+Gathers are hopefully intuitive, but their behaviour is a little harder to put into words: in general, after an option has been taken, the story finds the next gather down that isn't on a lower level, and diverts to it.
+
+The basic idea is this: options separate the paths of the story, and gathers bring them back together. (Hence the name, "weave"!)
+
+
+### You can nest as many levels are you like
+
+Above, we used two levels of nesting; the main flow, and the sub-flow. But there's no limit to how many levels deep you can go.
+
+ - "Tell us a tale, Captain!"
+ * "Very well, you sea-dogs. Here's a tale..."
+ * * "It was a dark and stormy night..."
+ * * * "...and the crew were restless..."
+ * * * * "... and they said to their Captain..."
+ * * * * * "...Tell us a tale Captain!"
+ * "No, it's past your bed-time."
+ - To a man, the crew began to yawn.
+
+After a while, this sub-nesting gets hard to read and manipulate, so it's good style to divert away to a new stitch if a side-choice goes unwieldy.
+
+But, in theory at least, you could write your entire story as a single weave.
+
+### Example: a conversation with nested nodes
+
+Here's a longer example:
+
+ - I looked at Monsieur Fogg
+ * ... and I could contain myself no longer.
+ 'What is the purpose of our journey, Monsieur?'
+ 'A wager,' he replied.
+ * * 'A wager!'[] I returned.
+ He nodded.
+ * * * 'But surely that is foolishness!'
+ * * * 'A most serious matter then!'
+ - - - He nodded again.
+ * * * 'But can we win?'
+ 'That is what we will endeavour to find out,' he answered.
+ * * * 'A modest wager, I trust?'
+ 'Twenty thousand pounds,' he replied, quite flatly.
+ * * * I asked nothing further of him then[.], and after a final, polite cough, he offered nothing more to me. <>
+ * * 'Ah[.'],' I replied, uncertain what I thought.
+ - - After that, <>
+ * ... but I said nothing[] and <>
+ - we passed the day in silence.
+ - -> END
+
+with a couple of possible playthroughs. A short one:
+
+ I looked at Monsieur Fogg
+
+ 1: ... and I could contain myself no longer.
+ 2: ... but I said nothing
+
+ > 2
+ ... but I said nothing and we passed the day in silence.
+
+and a longer one:
+
+ I looked at Monsieur Fogg
+
+ 1: ... and I could contain myself no longer.
+ 2: ... but I said nothing
+
+ > 1
+ ... and I could contain myself no longer.
+ 'What is the purpose of our journey, Monsieur?'
+ 'A wager,' he replied.
+
+ 1: 'A wager!'
+ 2: 'Ah.'
+
+ > 1
+ 'A wager!' I returned.
+ He nodded.
+
+ 1: 'But surely that is foolishness!'
+ 2: 'A most serious matter then!'
+
+ > 2
+ 'A most serious matter then!'
+ He nodded again.
+
+ 1: 'But can we win?'
+ 2: 'A modest wager, I trust?'
+ 3: I asked nothing further of him then.
+
+ > 2
+ 'A modest wager, I trust?'
+ 'Twenty thousand pounds,' he replied, quite flatly.
+ After that, we passed the day in silence.
+
+Hopefully, this demonstrates the philosophy laid out above: that weaves offer a compact way to offer a lot of branching, a lot of choices, but with the guarantee of getting from beginning to end!
+
+
+## 3) Tracking a Weave
+
+Sometimes, the weave structure is sufficient. But when it's not, we need a bit more control.
+
+### Weaves are largely unaddressed
+
+By default, lines of content in a weave don't have an address or label, which means they can't be diverted to, and they can't be tested for. In the most basic weave structure, choices vary the path the player takes through the weave and what they see, but once the weave is finished those choices and that path are forgotten.
+
+But should we want to remember what the player has seen, we can - we add in labels where they're needed using the `(label_name)` syntax.
+
+### Gathers and options can be labelled
+
+Gather points at any nested level can be labelled using brackets.
+
+ - (top)
+
+Once labelled, gather points can be diverted to, or tested for in conditionals, just like knots and stitches. This means you can use previous decisions to alter later outcomes inside the weave, while still keeping all the advantages of a clear, reliable forward-flow.
+
+Options can also be labelled, just like gather points, using brackets. Label brackets come before conditions in the line.
+
+These addresses can be used in conditional tests, which can be useful for creating options unlocked by other options.
+
+ === meet_guard ===
+ The guard frowns at you.
+
+ * (greet) [Greet him]
+ 'Greetings.'
+ * (get_out) 'Get out of my way[.'],' you tell the guard.
+
+ - 'Hmm,' replies the guard.
+
+ * {greet} 'Having a nice day?' // only if you greeted him
+
+ * 'Hmm?'[] you reply.
+
+ * {get_out} [Shove him aside] // only if you threatened him
+ You shove him sharply. He stares in reply, and draws his sword!
+ -> fight_guard // this route diverts out of the weave
+
+ - 'Mff,' the guard replies, and then offers you a paper bag. 'Toffee?'
+
+
+### Scope
+
+Inside the same block of weave, you can simply use the label name; from outside the block you need a path, either to a different stitch within the same knot:
+
+ === knot ===
+ = stitch_one
+ - (gatherpoint) Some content.
+ = stitch_two
+ * {stitch_one.gatherpoint} Option
+
+or pointing into another knot:
+
+ === knot_one ===
+ - (gather_one)
+ * {knot_two.stitch_two.gather_two} Option
+
+ === knot_two ===
+ = stitch_two
+ - (gather_two)
+ * {knot_one.gather_one} Option
+
+
+#### Advanced: all options can be labelled
+
+In truth, all content in ink is a weave, even if there are no gathers in sight. That means you can label *any* option in the game with a bracket label, and then reference it using the addressing syntax. In particular, this means you can test *which* option a player took to reach a particular outcome.
+
+ === fight_guard ===
+ ...
+ = throw_something
+ * (rock) [Throw rock at guard] -> throw
+ * (sand) [Throw sand at guard] -> throw
+
+ = throw
+ You hurl {throw_something.rock:a rock|a handful of sand} at the guard.
+
+
+#### Advanced: Loops in a weave
+
+Labelling allows us to create loops inside weaves. Here's a standard pattern for asking questions of an NPC.
+
+ - (opts)
+ * 'Can I get a uniform from somewhere?'[] you ask the cheerful guard.
+ 'Sure. In the locker.' He grins. 'Don't think it'll fit you, though.'
+ * 'Tell me about the security system.'
+ 'It's ancient,' the guard assures you. 'Old as coal.'
+ * 'Are there dogs?'
+ 'Hundreds,' the guard answers, with a toothy grin. 'Hungry devils, too.'
+ // We require the player to ask at least one question
+ * {loop} [Enough talking]
+ -> done
+ - (loop)
+ // loop a few times before the guard gets bored
+ { -> opts | -> opts | }
+ He scratches his head.
+ 'Well, can't stand around talking all day,' he declares.
+ - (done)
+ You thank the guard, and move away.
+
+
+
+
+
+#### Advanced: diverting to options
+
+Options can also be diverted to: but the divert goes to the output of having chosen that choice, *as though the choice had been chosen*. So the content printed will ignore square bracketed text, and if the option is once-only, it will be marked as used up.
+
+ - (opts)
+ * [Pull a face]
+ You pull a face, and the soldier comes at you! -> shove
+
+ * (shove) [Shove the guard aside] You shove the guard to one side, but he comes back swinging.
+
+ * {shove} [Grapple and fight] -> fight_the_guard
+
+ - -> opts
+
+produces:
+
+ 1: Pull a face
+ 2: Shove the guard aside
+
+ > 1
+ You pull a face, and the soldier comes at you! You shove the guard to one side, but he comes back swinging.
+
+ 1: Grapple and fight
+
+ >
+
+#### Advanced: Gathers directly after an option
+
+The following is valid, and frequently useful.
+
+ * "Are you quite well, Monsieur?"[] I asked.
+ - - (quitewell) "Quite well," he replied.
+ * "How did you do at the crossword, Monsieur?"[] I asked.
+ -> quitewell
+ * I said nothing[] and neither did my Master.
+ - We fell into companionable silence once more.
+
+Note the level 2 gather point directly below the first option: there's nothing to gather here, really, but it gives us a handy place to divert the second option to.
+
+
+
+
+
+
+# Part 3: Variables and Logic
+
+So far we've made conditional text, and conditional choices, using tests based on what content the player has seen so far.
+
+**ink** also supports variables, both temporary and global, storing numerical and content data, or even story flow commands. It is fully-featured in terms of logic, and contains a few additional structures to help keep the often complex logic of a branching story better organised.
+
+
+## 1) Global Variables
+
+The most powerful kind of variable, and arguably the most useful for a story, is a variable to store some unique property about the state of the game - anything from the amount of money in the protagonist's pocket, to a value representing the protagonist's state of mind.
+
+This kind of variable is called "global" because it can be accessed from anywhere in the story - both set, and read from. (Traditionally, programming tries to avoid this kind of thing, as it allows one part of a program to mess with another, unrelated part. But a story is a story, and stories are all about consequences: what happens in Vegas rarely stays there.)
+
+### Defining Global Variables
+
+Global variables can be defined anywhere, via a `VAR` statement. They should be given an initial value, which defines what type of variable they are - integer, floating point (decimal), content, or a story address.
+
+ VAR knowledge_of_the_cure = false
+ VAR players_name = "Emilia"
+ VAR number_of_infected_people = 521
+ VAR current_epilogue = -> they_all_die_of_the_plague
+
+### Using Global Variables
+
+We can test global variables to control options, and provide conditional text, in a similar way to what we have previously seen.
+
+ === the_train ===
+ The train jolted and rattled. { mood > 0:I was feeling positive enough, however, and did not mind the odd bump|It was more than I could bear}.
+ * { not knows_about_wager } 'But, Monsieur, why are we travelling?'[] I asked.
+ * { knows_about_wager} I contemplated our strange adventure[]. Would it be possible?
+
+#### Advanced: storing diverts as variables
+
+A "divert" statement is actually a type of value in itself, and can be stored, altered, and diverted to.
+
+ VAR current_epilogue = -> everybody_dies
+
+ === continue_or_quit ===
+ Give up now, or keep trying to save your Kingdom?
+ * [Keep trying!] -> more_hopeless_introspection
+ * [Give up] -> current_epilogue
+
+
+#### Advanced: Global variables are externally visible
+
+Global variables can be accessed, and altered, from the runtime as well from the story, so provide a good way to communicate between the wider game and the story.
+
+The **ink** layer is often be a good place to store gameplay-variables; there's no save/load issues to consider, and the story itself can react to the current values.
+
+
+
+### Printing variables
+
+The value of a variable can be printed as content using an inline syntax similar to sequences, and conditional text:
+
+ VAR friendly_name_of_player = "Jackie"
+ VAR age = 23
+
+ My name is Jean Passepartout, but my friends call me {friendly_name_of_player}. I'm {age} years old.
+
+This can be useful in debugging. For more complex printing based on logic and variables, see the section on [functions](#5-functions).
+
+### Evaluating strings
+
+It might be noticed that above we refered to variables as being able to contain "content", rather than "strings". That was deliberate, because a string defined in ink can contain ink - although it will always evaluate to a string. (Yikes!)
+
+ VAR a_colour = ""
+
+ ~ a_colour = "{~red|blue|green|yellow}"
+
+ {a_colour}
+
+... produces one of red, blue, green or yellow.
+
+Note that once a piece of content like this is evaluated, its value is "sticky". (The quantum state collapses.) So the following:
+
+ The goon hits you, and sparks fly before you eyes, {a_colour} and {a_colour}.
+
+... won't produce a very interesting effect. (If you really want this to work, use a text function to print the colour!)
+
+This is also why
+
+ VAR a_colour = "{~red|blue|green|yellow}"
+
+is explicitly disallowed; it would be evaluated on the construction of the story, which probably isn't what you want.
+
+
+## 2) Logic
+
+Obviously, our global variables are not intended to be constants, so we need a syntax for altering them.
+
+Since by default, any text in an **ink** script is printed out directly to the screen, we use a markup symbol to indicate that a line of content is intended meant to be doing some numerical work, we use the `~` mark.
+
+The following statements all assign values to variables:
+
+
+ === set_some_variables ===
+ ~ knows_about_wager = true
+ ~ x = (x * x) - (y * y) + c
+ ~ y = 2 * x * y
+
+and the following will test conditions:
+
+ { x == 1.2 }
+ { x / 2 > 4 }
+ { y - 1 <= x * x }
+
+### Mathematics
+
+**ink** supports the four basic mathematical operations (`+`, `-`, `*` and `/`), as well as `%` (or `mod`), which returns the remainder after integer division. There's also POW for to-the-power-of:
+
+ {POW(3, 2)} is 9.
+ {POW(16, 0.5)} is 4.
+
+
+If more complex operations are required, one can write functions (using recursion if necessary), or call out to external, game-code functions (for anything more advanced).
+
+
+#### RANDOM(min, max)
+
+Ink can generate random integers if required using the RANDOM function. RANDOM is authored to be like a dice (yes, pendants, we said *a dice*), so the min and max values are both inclusive.
+
+ ~ temp dice_roll = RANDOM(1, 6)
+
+ ~ temp lazy_grading_for_test_paper = RANDOM(30, 75)
+
+ ~ temp number_of_heads_the_serpent_has = RANDOM(3, 8)
+
+The random number generator can be seeded for testing purposes, see the section of Game Queries and Functions section above.
+
+#### Advanced: numerical types are implicit
+
+Results of operations - in particular, for division - are typed based on the type of the input. So integer division returns integer, but floating point division returns floating point results.
+
+ ~ x = 2 / 3
+ ~ y = 7 / 3
+ ~ z = 1.2 / 0.5
+
+assigns `x` to be 0, `y` to be 2 and `z` to be 2.4.
+
+#### Advanced: INT(), FLOOR() and FLOAT()
+
+In cases where you don't want implicit types, or you want to round off a variable, you can cast it directly.
+
+ {INT(3.2)} is 3.
+ {FLOOR(4.8)} is 4.
+ {INT(-4.8)} is -4.
+ {FLOOR(-4.8)} is -5.
+
+ {FLOAT(4)} is, um, still 4.
+
+
+
+### String queries
+
+Oddly for a text-engine, **ink** doesn't have much in the way of string-handling: it's assumed that any string conversion you need to do will be handled by the game code (and perhaps by external functions.) But we support three basic queries - equality, inequality, and substring (which we call ? for reasons that will become clear in a later chapter).
+
+The following all return true:
+
+ { "Yes, please." == "Yes, please." }
+ { "No, thank you." != "Yes, please." }
+ { "Yes, please" ? "ease" }
+
+
+## 3) Conditional blocks (if/else)
+
+We've seen conditionals used to control options and story content; **ink** also provides an equivalent of the normal if/else-if/else structure.
+
+### A simple 'if'
+
+The if syntax takes its cue from the other conditionals used so far, with the `{`...`}` syntax indicating that something is being tested.
+
+ { x > 0:
+ ~ y = x - 1
+ }
+
+Else conditions can be provided:
+
+ { x > 0:
+ ~ y = x - 1
+ - else:
+ ~ y = x + 1
+ }
+
+### Extended if/else if/else blocks
+
+The above syntax is actually a specific case of a more general structure, something like a "switch" statement of another language:
+
+ {
+ - x > 0:
+ ~ y = x - 1
+ - else:
+ ~ y = x + 1
+ }
+
+And using this form we can include 'else-if' conditions:
+
+ {
+ - x == 0:
+ ~ y = 0
+ - x > 0:
+ ~ y = x - 1
+ - else:
+ ~ y = x + 1
+ }
+
+(Note, as with everything else, the white-space is purely for readability and has no syntactic meaning.)
+
+### Switch blocks
+
+And there's also an actual switch statement:
+
+ { x:
+ - 0: zero
+ - 1: one
+ - 2: two
+ - else: lots
+ }
+
+#### Example: context-relevant content
+
+Note these tests don't have to be variable-based and can use read-counts, just as other conditionals can, and the following construction is quite frequent, as a way of saying "do some content which is relevant to the current game state":
+
+ === dream ===
+ {
+ - visited_snakes && not dream_about_snakes:
+ ~ fear++
+ -> dream_about_snakes
+
+ - visited_poland && not dream_about_polish_beer:
+ ~ fear--
+ -> dream_about_polish_beer
+
+ - else:
+ // breakfast-based dreams have no effect
+ -> dream_about_marmalade
+ }
+
+The syntax has the advantage of being easy to extend, and prioritise.
+
+
+
+### Conditional blocks are not limited to logic
+
+Conditional blocks can be used to control story content as well as logic:
+
+ I stared at Monsieur Fogg.
+ { know_about_wager:
+ <> "But surely you are not serious?" I demanded.
+ - else:
+ <> "But there must be a reason for this trip," I observed.
+ }
+ He said nothing in reply, merely considering his newspaper with as much thoroughness as entomologist considering his latest pinned addition.
+
+You can even put options inside conditional blocks:
+
+ { door_open:
+ * I strode out of the compartment[] and I fancied I heard my master quietly tutting to himself. -> go_outside
+ - else:
+ * I asked permission to leave[] and Monsieur Fogg looked surprised. -> open_door
+ * I stood and went to open the door[]. Monsieur Fogg seemed untroubled by this small rebellion. -> open_door
+ }
+
+...but note that the lack of weave-syntax and nesting in the above example isn't accidental: to avoid confusing the various kinds of nesting at work, you aren't allowed to include gather points inside conditional blocks.
+
+### Multiline blocks
+
+There's one other class of multiline block, which expands on the alternatives system from above. The following are all valid and do what you might expect:
+
+ // Sequence: go through the alternatives, and stick on last
+ { stopping:
+ - I entered the casino.
+ - I entered the casino again.
+ - Once more, I went inside.
+ }
+
+ // Shuffle: show one at random
+ At the table, I drew a card. <>
+ { shuffle:
+ - Ace of Hearts.
+ - King of Spades.
+ - 2 of Diamonds.
+ 'You lose this time!' crowed the croupier.
+ }
+
+ // Cycle: show each in turn, and then cycle
+ { cycle:
+ - I held my breath.
+ - I waited impatiently.
+ - I paused.
+ }
+
+ // Once: show each, once, in turn, until all have been shown
+ { once:
+ - Would my luck hold?
+ - Could I win the hand?
+ }
+
+#### Advanced: modified shuffles
+
+The shuffle block above is really a "shuffled cycle"; in that it'll shuffle the content, play through it, then reshuffle and go again.
+
+There are two other versions of shuffle:
+
+`shuffle once` which will shuffle the content, play through it, and then do nothing.
+
+ { shuffle once:
+ - The sun was hot.
+ - It was a hot day.
+ }
+
+`shuffle stopping` will shuffle all the content (except the last entry), and once its been played, it'll stick on the last entry.
+
+ { shuffle stopping:
+ - A silver BMW roars past.
+ - A bright yellow Mustang takes the turn.
+ - There are like, cars, here.
+ }
+
+
+## 4) Temporary Variables
+
+### Temporary variables are for scratch calculations
+
+Sometimes, a global variable is unwieldy. **ink** provides temporary variables for quick calculations of things.
+
+ === near_north_pole ===
+ ~ temp number_of_warm_things = 0
+ { blanket:
+ ~ number_of_warm_things++
+ }
+ { ear_muffs:
+ ~ number_of_warm_things++
+ }
+ { gloves:
+ ~ number_of_warm_things++
+ }
+ { number_of_warm_things > 2:
+ Despite the snow, I felt incorrigibly snug.
+ - else:
+ That night I was colder than I have ever been.
+ }
+
+The value in a temporary variable is thrown away after the story leaves the stitch in which it was defined.
+
+### Knots and stitches can take parameters
+
+A particularly useful form of temporary variable is a parameter. Any knot or stitch can be given a value as a parameter.
+
+ * [Accuse Hasting]
+ -> accuse("Hastings")
+ * [Accuse Mrs Black]
+ -> accuse("Claudia")
+ * [Accuse myself]
+ -> accuse("myself")
+
+ === accuse(who) ===
+ "I accuse {who}!" Poirot declared.
+ "Really?" Japp replied. "{who == "myself":You did it?|{who}?}"
+ "And why not?" Poirot shot back.
+
+
+... and you'll need to use parameters if you want to pass a temporary value from one stitch to another!
+
+#### Example: a recursive knot definition
+
+Temporary variables are safe to use in recursion (unlike globals), so the following will work.
+
+ -> add_one_to_one_hundred(0, 1)
+
+ === add_one_to_one_hundred(total, x) ===
+ ~ total = total + x
+ { x == 100:
+ -> finished(total)
+ - else:
+ -> add_one_to_one_hundred(total, x + 1)
+ }
+
+ === finished(total) ===
+ "The result is {total}!" you announce.
+ Gauss stares at you in horror.
+ -> END
+
+
+(In fact, this kind of definition is useful enough that **ink** provides a special kind of knot, called, imaginatively enough, a `function`, which comes with certain restrictions and can return a value. See the section below.)
+
+
+#### Advanced: sending divert targets as parameters
+
+Knot/stitch addresses are a type of value, indicated by a `->` character, and can be stored and passed around. The following is therefore legal, and often useful:
+
+ === sleeping_in_hut ===
+ You lie down and close your eyes.
+ -> generic_sleep (-> waking_in_the_hut)
+
+ === generic_sleep (-> waking)
+ You sleep perchance to dream etc. etc.
+ -> waking
+
+ === waking_in_the_hut
+ You get back to your feet, ready to continue your journey.
+
+...but note the `->` in the `generic_sleep` definition: that's the one case in **ink** where a parameter needs to be typed: because it's too easy to otherwise accidentally do the following:
+
+ === sleeping_in_hut ===
+ You lie down and close your eyes.
+ -> generic_sleep (waking_in_the_hut)
+
+... which sends the read count of `waking_in_the_hut` into the sleeping knot, and then attempts to divert to it.
+
+
+
+
+
+## 5) Functions
+
+The use of parameters on knots means they are almost functions in the usual sense, but they lack one key concept - that of the call stack, and the use of return values.
+
+**ink** includes functions: they are knots, with the following limitations and features:
+
+A function:
+- cannot contain stitches
+- cannot use diverts or offer choices
+- can call other functions
+- can include printed content
+- can return a value of any type
+- can recurse safely
+
+(Some of these may seem quite limiting, but for more story-oriented call-stack-style features, see the section on [Tunnels](#1-tunnels).)
+
+Return values are provided via the `~ return` statement.
+
+### Defining and calling functions
+
+To define a function, simply declare a knot to be one:
+
+ === function say_yes_to_everything ===
+ ~ return true
+
+ === function lerp(a, b, k) ===
+ ~ return ((b - a) * k) + a
+
+Functions are called by name, and with brackets, even if they have no parameters:
+
+ ~ x = lerp(2, 8, 0.3)
+
+ * {say_yes_to_everything()} 'Yes.'
+
+As in any other language, a function, once done, returns the flow to wherever it was called from - and despite not being allowed to divert the flow, functions can still call other functions.
+
+ === function say_no_to_nothing ===
+ ~ return say_yes_to_everything()
+
+### Functions don't have to return anything
+
+A function does not need to have a return value, and can simply do something that is worth packaging up:
+
+ === function harm(x) ===
+ { stamina < x:
+ ~ stamina = 0
+ - else:
+ ~ stamina = stamina - x
+ }
+
+...though remember a function cannot divert, so while the above prevents a negative Stamina value, it won't kill a player who hits zero.
+
+### Functions can be called inline
+
+Functions can be called on `~` content lines, but can also be called during a piece of content. In this context, the return value, if there is one, is printed (as well as anything else the function wants to print.) If there is no return value, nothing is printed.
+
+Content is, by default, 'glued in', so the following:
+
+ Monsieur Fogg was looking {describe_health(health)}.
+
+ === function describe_health(x) ===
+ {
+ - x == 100:
+ ~ return "spritely"
+ - x > 75:
+ ~ return "chipper"
+ - x > 45:
+ ~ return "somewhat flagging"
+ - else:
+ ~ return "despondent"
+ }
+
+produces:
+
+ Monsieur Fogg was looking despondent.
+
+#### Examples
+
+For instance, you might include:
+
+ === function max(a,b) ===
+ { a < b:
+ ~ return b
+ - else:
+ ~ return a
+ }
+
+ === function exp(x, e) ===
+ // returns x to the power e where e is an integer
+ { e <= 0:
+ ~ return 1
+ - else:
+ ~ return x * exp(x, e - 1)
+ }
+
+Then:
+
+ The maximum of 2^5 and 3^3 is {max(exp(2,5), exp(3,3))}.
+
+produces:
+
+ The maximum of 2^5 and 3^3 is 32.
+
+
+#### Example: turning numbers into words
+
+The following example is long, but appears in pretty much every inkle game to date. (Recall that a hyphenated line inside multiline curly braces indicates either "a condition to test" or, if the curly brace began with a variable, "a value to compare against".)
+
+ === function print_num(x) ===
+ {
+ - x >= 1000:
+ {print_num(x / 1000)} thousand { x mod 1000 > 0:{print_num(x mod 1000)}}
+ - x >= 100:
+ {print_num(x / 100)} hundred { x mod 100 > 0:and {print_num(x mod 100)}}
+ - x == 0:
+ zero
+ - else:
+ { x >= 20:
+ { x / 10:
+ - 2: twenty
+ - 3: thirty
+ - 4: forty
+ - 5: fifty
+ - 6: sixty
+ - 7: seventy
+ - 8: eighty
+ - 9: ninety
+ }
+ { x mod 10 > 0:<>-<>}
+ }
+ { x < 10 || x > 20:
+ { x mod 10:
+ - 1: one
+ - 2: two
+ - 3: three
+ - 4: four
+ - 5: five
+ - 6: six
+ - 7: seven
+ - 8: eight
+ - 9: nine
+ }
+ - else:
+ { x:
+ - 10: ten
+ - 11: eleven
+ - 12: twelve
+ - 13: thirteen
+ - 14: fourteen
+ - 15: fifteen
+ - 16: sixteen
+ - 17: seventeen
+ - 18: eighteen
+ - 19: nineteen
+ }
+ }
+ }
+
+which enables us to write things like:
+
+ ~ price = 15
+
+ I pulled out {print_num(price)} coins from my pocket and slowly counted them.
+ "Oh, never mind," the trader replied. "I'll take half." And she took {print_num(price / 2)}, and pushed the rest back over to me.
+
+
+
+### Parameters can be passed by reference
+
+Function parameters can also be passed 'by reference', meaning that the function can actually alter the the variable being passed in, instead of creating a temporary variable with that value.
+
+For instance, most **inkle** stories include the following:
+
+ === function alter(ref x, k) ===
+ ~ x = x + k
+
+Lines such as:
+
+ ~ gold = gold + 7
+ ~ health = health - 4
+
+then become:
+
+ ~ alter(gold, 7)
+ ~ alter(health, -4)
+
+which are slightly easier to read, and (more usefully) can be done inline for maximum compactness.
+
+ * I ate a biscuit[] and felt refreshed. {alter(health, 2)}
+ * I gave a biscuit to Monsieur Fogg[] and he wolfed it down most undecorously. {alter(foggs_health, 1)}
+ - <> Then we continued on our way.
+
+Wrapping up simple operations in function can also provide a simple place to put debugging information, if required.
+
+
+
+
+## 6) Constants
+
+
+### Global Constants
+
+Interactive stories often rely on state machines, tracking what stage some higher level process has reached. There are lots of ways to do this, but the most conveninent is to use constants.
+
+Sometimes, it's convenient to define constants to be strings, so you can print them out, for gameplay or debugging purposes.
+
+ CONST HASTINGS = "Hastings"
+ CONST POIROT = "Poirot"
+ CONST JAPP = "Japp"
+
+ VAR current_chief_suspect = HASTINGS
+
+ === review_evidence ===
+ { found_japps_bloodied_glove:
+ ~ current_chief_suspect = POIROT
+ }
+ Current Suspect: {current_chief_suspect}
+
+Sometimes giving them values is useful:
+
+ CONST PI = 3.14
+ CONST VALUE_OF_TEN_POUND_NOTE = 10
+
+And sometimes the numbers are useful in other ways:
+
+ CONST LOBBY = 1
+ CONST STAIRCASE = 2
+ CONST HALLWAY = 3
+
+ CONST HELD_BY_AGENT = -1
+
+ VAR secret_agent_location = LOBBY
+ VAR suitcase_location = HALLWAY
+
+ === report_progress ===
+ {
+ - secret_agent_location == suitcase_location:
+ The secret agent grabs the suitcase!
+ ~ suitcase_location = HELD_BY_AGENT
+
+ - secret_agent_location < suitcase_location:
+ The secret agent moves forward.
+ ~ secret_agent_location++
+ }
+
+Constants are simply a way to allow you to give story states easy-to-understand names.
+
+## 7) Advanced: Game-side logic
+
+There are two core ways to provide game hooks in the **ink** engine. External function declarations in ink allow you to directly call C# functions in the game, and variable observers are callbacks that are fired in the game when ink variables are modified. Both of these are described in [Running your ink](RunningYourInk.md).
+
+# Part 4: Advanced Flow Control
+
+
+## 1) Tunnels
+
+The default structure for **ink** stories is a "flat" tree of choices, branching and joining back together, perhaps looping, but with the story always being "at a certain place".
+
+But this flat structure makes certain things difficult: for example, imagine a game in which the following interaction can happen:
+
+ === crossing_the_date_line ===
+ * "Monsieur!"[] I declared with sudden horror. "I have just realised. We have crossed the international date line!"
+ - Monsieur Fogg barely lifted an eyebrow. "I have adjusted for it."
+ * I mopped the sweat from my brow[]. A relief!
+ * I nodded, becalmed[]. Of course he had!
+ * I cursed, under my breath[]. Once again, I had been belittled!
+
+...but it can happen at several different places in the story. We don't want to have to write copies of the content for each different place, but when the content is finished it needs to know where to return to. We can do this using parameters:
+
+ === crossing_the_date_line(-> return_to) ===
+ ...
+ - -> return_to
+
+ ...
+
+ === outside_honolulu ===
+ We arrived at the large island of Honolulu.
+ - (postscript)
+ -> crossing_the_date_line(-> done)
+ - (done)
+ -> END
+
+ ...
+
+ === outside_pitcairn_island ===
+ The boat sailed along the water towards the tiny island.
+ - (postscript)
+ -> crossing_the_date_line(-> done)
+ - (done)
+ -> END
+
+Both of these locations now call and execute the same segment of storyflow, but once finished they return to where they need to go next.
+
+But what if the section of story being called is more complex - what if it spreads across several knots? Using the above, we'd have to keep passing the 'return-to' parameter from knot to knot, to ensure we always knew where to return.
+
+So instead, **ink** integrates this into the language with a new kind of divert, that functions rather like a subroutine, and is called a 'tunnel'.
+
+### Tunnels run sub-stories
+
+The tunnel syntax looks like a divert, with another divert on the end:
+
+ -> crossing_the_date_line ->
+
+This means "do the crossing_the_date_line story, then continue from here".
+
+Inside the tunnel itself, the syntax is simplified from the parameterised example: all we do is end the tunnel using the `->->` statement which means, essentially, "go on".
+
+ === crossing_the_date_line ===
+ // this is a tunnel!
+ ...
+ - ->->
+
+Note that tunnel knots aren't declared as such, so the compiler won't check that tunnels really do end in `->->` statements, except at run-time. So you will need to write carefully to ensure that all the flows into a tunnel really do come out again.
+
+Tunnels can also be chained together, or finish on a normal divert:
+
+ ...
+ // this runs the tunnel, then diverts to 'done'
+ -> crossing_the_date_line -> done
+ ...
+
+ ...
+ //this runs one tunnel, then another, then diverts to 'done'
+ -> crossing_the_date_line -> check_foggs_health -> done
+ ...
+
+Tunnels can be nested, so the following is valid:
+
+ === plains ===
+ = night_time
+ The dark grass is soft under your feet.
+ + [Sleep]
+ -> sleep_here -> wake_here -> day_time
+ = day_time
+ It is time to move on.
+
+ === wake_here ===
+ You wake as the sun rises.
+ + [Eat something]
+ -> eat_something ->
+ + [Make a move]
+ - ->->
+
+ === sleep_here ===
+ You lie down and try to close your eyes.
+ -> monster_attacks ->
+ Then it is time to sleep.
+ -> dream ->
+ ->->
+
+... and so on.
+
+
+#### Advanced: Tunnels can return elsewhere
+
+Sometimes, in a story, things happen. So sometimes a tunnel can't guarantee that it will always want to go back to where it came from. **ink** supplies a syntax to allow you to "returning from a tunnel but actually go somewhere else" but it should be used with caution as the possibility of getting very confused is very high indeed.
+
+Still, there are cases where it's indispensable:
+
+ === fall_down_cliff
+ -> hurt(5) ->
+ You're still alive! You pick yourself up and walk on.
+
+ === hurt(x)
+ ~ stamina -= x
+ { stamina <= 0:
+ ->-> youre_dead
+ }
+
+ === youre_dead
+ Suddenly, there is a white light all around you. Fingers lift an eyepiece from your forehead. 'You lost, buddy. Out of the chair.'
+
+And even in less drastic situations, we might want to break up the structure:
+
+ -> talk_to_jim ->
+
+ === talk_to_jim
+ - (opts)
+ * [ Ask about the warp lacelles ]
+ -> warp_lacells ->
+ * [ Ask about the shield generators ]
+ -> shield_generators ->
+ * [ Stop talking ]
+ ->->
+ - -> opts
+
+ = warp_lacells
+ { shield_generators : ->-> argue }
+ "Don't worry about the warp lacelles. They're fine."
+ ->->
+
+ = shield_generators
+ { warp_lacells : ->-> argue }
+ "Forget about the shield generators. They're good."
+ ->->
+
+ = argue
+ "What's with all these questions?" Jim demands, suddenly.
+ ...
+ ->->
+
+#### Advanced: Tunnels use a call-stack
+
+Tunnels are on a call-stack, so can safely recurse.
+
+
+## 2) Threads
+
+So far, everything in ink has been entirely linear, despite all the branching and diverting. But it's actually possible for a writer to 'fork' a story into different sub-sections, to cover more possible player actions.
+
+We call this 'threading', though it's not really threading in the sense that computer scientists mean it: it's more like stitching in new content from various places.
+
+Note that this is definitely an advanced feature: the engineering stories becomes somewhat more complex once threads are involved!
+
+### Threads join multiple sections together
+
+Threads allow you to compose sections of content from multiple sources in one go. For example:
+
+ == thread_example ==
+ I had a headache; threading is hard to get your head around.
+ <- conversation
+ <- walking
+
+
+ == conversation ==
+ It was a tense moment for Monty and me.
+ * "What did you have for lunch today?"[] I asked.
+ "Spam and eggs," he replied.
+ * "Nice weather, we're having,"[] I said.
+ "I've seen better," he replied.
+ - -> house
+
+ == walking ==
+ We continued to walk down the dusty road.
+ * [Continue walking]
+ -> house
+
+ == house ==
+ Before long, we arrived at his house.
+ -> END
+
+It allows multiple sections of story to combined together into a single section:
+
+ I had a headache; threading is hard to get your head around.
+ It was a tense moment for Monty and me.
+ We continued to walk down the dusty road.
+ 1: "What did you have for lunch today?"
+ 2: "Nice weather, we're having,"
+ 3: Continue walking
+
+On encountering a thread statement such as `<- conversation`, the compiler will fork the story flow. The first fork considered will run the content at `conversation`, collecting up any options it finds. Once it has run out of flow here it'll then run the other fork.
+
+All the content is collected and shown to the player. But when a choice is chosen, the engine will move to that fork of the story and collapse and discard the others.
+
+Note that global variables are *not* forked, including the read counts of knots and stitches.
+
+### Uses of threads
+
+In a normal story, threads might never be needed.
+
+But for games with lots of independent moving parts, threads quickly become essential. Imagine a game in which characters move independently around a map: the main story hub for a room might look like the following:
+
+ CONST HALLWAY = 1
+ CONST OFFICE = 2
+
+ VAR player_location = HALLWAY
+ VAR generals_location = HALLWAY
+ VAR doctors_location = OFFICE
+
+ == run_player_location
+ {
+ - player_location == HALLWAY: -> hallway
+ }
+
+ == hallway ==
+ <- characters_present(HALLWAY)
+ * [Drawers] -> examine_drawers
+ * [Wardrobe] -> examine_wardrobe
+ * [Go to Office] -> go_office
+ - -> run_player_location
+ = examine_drawers
+ // etc...
+
+ // Here's the thread, which mixes in dialogue for characters you share the room with at the moment.
+
+ == characters_present(room)
+ { generals_location == room:
+ <- general_conversation
+ }
+ { doctors_location == room:
+ <- doctor_conversation
+ }
+ -> DONE
+
+ == general_conversation
+ * [Ask the General about the bloodied knife]
+ "It's a bad business, I can tell you."
+ - -> run_player_location
+
+ == doctor_conversation
+ * [Ask the Doctor about the bloodied knife]
+ "There's nothing strange about blood, is there?"
+ - -> run_player_location
+
+
+
+Note in particular, that we need an explicit way to return the player who has gone down a side-thread to return to the main flow. In most cases, threads will either need a parameter telling them where to return to, or they'll need to end the current story section.
+
+
+### When does a side-thread end?
+
+Side-threads end when they run out of flow to process: and note, they collect up options to display later (unlike tunnels, which collect options, display them and follow them until they hit an explicit return, possibly several moves later).
+
+Sometimes a thread has no content to offer - perhaps there is no conversation to have with a character after all, or perhaps we have simply not written it yet. In that case, we must mark the end of the thread explicitly.
+
+If we didn't, the end of content might be a story-bug or a hanging story thread, and we want the compiler to tell us about those.
+
+### Using `-> DONE`
+
+In cases where we want to mark the end of a thread, we use `-> DONE`: meaning "the flow intentionally ends here". If we don't, we might end up with a warning message - we can still play the game, but it's a reminder that we have unfinished business.
+
+The example at the start of this section will generate a warning; it can be fixed as follows:
+
+ == thread_example ==
+ I had a headache; threading is hard to get your head around.
+ <- conversation
+ <- walking
+ -> DONE
+
+The extra DONE tells ink that the flow here has ended and it should rely on the threads for the next part of the story.
+
+Note that we don't need a `-> DONE` if the flow ends with options that fail their conditions. The engine treats this as a valid, intentional, end of flow state.
+
+**You do not need a `-> DONE` after an option has been chosen**. Once an option is chosen, a thread is no longer a thread - it is simply the normal story flow once more.
+
+Using `-> END` in this case will not end the thread, but the whole story flow. (And this is the real reason for having two different ways to end flow.)
+
+
+#### Example: adding the same choice to several places
+
+Threads can be used to add the same choice into lots of different places. When using them this way, it's normal to pass a divert as a parameter, to tell the story where to go after the choice is done.
+
+ === outside_the_house
+ The front step. The house smells. Of murder. And lavender.
+ - (top)
+ <- review_case_notes(-> top)
+ * [Go through the front door]
+ I stepped inside the house.
+ -> the_hallway
+ * [Sniff the air]
+ I hate lavender. It makes me think of soap, and soap makes me think about my marriage.
+ -> top
+
+ === the_hallway
+ The hallway. Front door open to the street. Little bureau.
+ - (top)
+ <- review_case_notes(-> top)
+ * [Go through the front door]
+ I stepped out into the cool sunshine.
+ -> outside_the_house
+ * [Open the bureau]
+ Keys. More keys. Even more keys. How many locks do these people need?
+ -> top
+
+ === review_case_notes(-> go_back_to)
+ + {not done || TURNS_SINCE(-> done) > 10}
+ [Review my case notes]
+ // the conditional ensures you don't get the option to check repeatedly
+ {I|Once again, I} flicked through the notes I'd made so far. Still not obvious suspects.
+ - (done) -> go_back_to
+
+Note this is different than a tunnel, which runs the same block of content but doesn't give a player a choice. So a layout like:
+
+ <- childhood_memories(-> next)
+ * [Look out of the window]
+ I daydreamed as we rolled along...
+ - (next) Then the whistle blew...
+
+might do exactly the same thing as:
+
+ * [Remember my childhood]
+ -> think_back ->
+ * [Look out of the window]
+ I daydreamed as we rolled along...
+ - (next) Then the whistle blew...
+
+but as soon as the option being threaded in includes multiple choices, or conditional logic on choices (or any text content, of course!), the thread version becomes more practical.
+
+
+#### Example: organisation of wide choice points
+
+A game which uses ink as a script rather than a literal output might often generate very large numbers of parallel choices, intended to be filtered by the player via some other in-game interaction - such as walking around an environment. Threads can be useful in these cases simply to divide up choices.
+
+```
+=== the_kitchen
+- (top)
+ <- drawers(-> top)
+ <- cupboards(-> top)
+ <- room_exits
+= drawers (-> goback)
+ // choices about the drawers...
+ ...
+= cupboards(-> goback)
+ // choices about cupboards
+ ...
+= room_exits
+ // exits; doesn't need a "return point" as if you leave, you go elsewhere
+ ...
+```
+
+# Part 5: Advanced State Tracking
+
+Games with lots of interaction can get very complex, very quickly and the writer's job is often as much about maintaining continuity as it is about content.
+
+This becomes particularly important if the game text is intended to model anything - whether it's a game of cards, the player's knowledge of the gameworld so far, or the state of the various light-switches in a house.
+
+**ink** does not provide a full world-modelling system in the manner of a classic parser IF authoring language - there are no "objects", no concepts of "containment" or being "open" or "locked". However, it does provide a simple yet powerful system for tracking state-changes in a very flexible way, to enable writers to approximate world models where necessary.
+
+#### Note: New feature alert!
+
+This feature is very new to the language. That means we haven't begun to discover all the ways it might be used - but we're pretty sure it's going to be useful! So if you think of a clever usage we'd love to know!
+
+
+## 1) Basic Lists
+
+The basic unit of state-tracking is a list of states, defined using the `LIST` keyword. Note that a list is really nothing like a C# list (which is an array).
+
+For instance, we might have:
+
+ LIST kettleState = cold, boiling, recently_boiled
+
+This line defines two things: firstly three new values - `cold`, `boiling` and `recently_boiled` - and secondly, a variable, called `kettleState`, to hold these states.
+
+We can tell the list what value to take:
+
+ ~ kettleState = cold
+
+We can change the value:
+
+ * [Turn on kettle]
+ The kettle begins to bubble and boil.
+ ~ kettleState = boiling
+
+We can query the value:
+
+ * [Touch the kettle]
+ { kettleState == cold:
+ The kettle is cool to the touch.
+ - else:
+ The outside of the kettle is very warm!
+ }
+
+For convenience, we can give a list a value when it's defined using a bracket:
+
+ LIST kettleState = cold, (boiling), recently_boiled
+ // at the start of the game, this kettle is switched on. Edgy, huh?
+
+...and if the notation for that looks a bit redundant, there's a reason for that coming up in a few subsections time.
+
+
+
+## 2) Reusing Lists
+
+The above example is fine for the kettle, but what if we have a pot on the stove as well? We can then define a list of states, but put them into variables - and as many variables as we want.
+
+ LIST daysOfTheWeek = Monday, Tuesday, Wednesday, Thursday, Friday
+ VAR today = Monday
+ VAR tomorrow = Tuesday
+
+### States can be used repeatedly
+
+This allows us to use the same state machine in multiple places.
+
+ LIST heatedWaterStates = cold, boiling, recently_boiled
+ VAR kettleState = cold
+ VAR potState = cold
+
+ * {kettleState == cold} [Turn on kettle]
+ The kettle begins to boil and bubble.
+ ~ kettleState = boiling
+ * {potState == cold} [Light stove]
+ The water in the pot begins to boil and bubble.
+ ~ potState = boiling
+
+But what if we add a microwave as well? We might want start generalising our functionality a bit:
+
+ LIST heatedWaterStates = cold, boiling, recently_boiled
+ VAR kettleState = cold
+ VAR potState = cold
+ VAR microwaveState = cold
+
+ === function boilSomething(ref thingToBoil, nameOfThing)
+ The {nameOfThing} begins to heat up.
+ ~ thingToBoil = boiling
+
+ === do_cooking
+ * {kettleState == cold} [Turn on kettle]
+ {boilSomething(kettleState, "kettle")}
+ * {potState == cold} [Light stove]
+ {boilSomething(potState, "pot")}
+ * {microwaveState == cold} [Turn on microwave]
+ {boilSomething(microwaveState, "microwave")}
+
+or even...
+
+ LIST heatedWaterStates = cold, boiling, recently_boiled
+ VAR kettleState = cold
+ VAR potState = cold
+ VAR microwaveState = cold
+
+ === cook_with(nameOfThing, ref thingToBoil)
+ + {thingToBoil == cold} [Turn on {nameOfThing}]
+ The {nameOfThing} begins to heat up.
+ ~ thingToBoil = boiling
+ -> do_cooking.done
+
+ === do_cooking
+ <- cook_with("kettle", kettleState)
+ <- cook_with("pot", potState)
+ <- cook_with("microwave", microwaveState)
+ - (done)
+
+Note that the "heatedWaterStates" list is still available as well, and can still be tested, and take a value.
+
+#### List values can share names
+
+Reusing lists brings with it ambiguity. If we have:
+
+ LIST colours = red, green, blue, purple
+ LIST moods = mad, happy, blue
+
+ VAR status = blue
+
+... how can the compiler know which blue you meant?
+
+We resolve these using a `.` syntax similar to that used for knots and stitches.
+
+ VAR status = colours.blue
+
+...and the compiler will issue an error until you specify.
+
+Note the "family name" of the state, and the variable containing a state, are totally separate. So
+
+ { statesOfGrace == statesOfGrace.fallen:
+ // is the current state "fallen"
+ }
+
+... is correct.
+
+
+#### Advanced: a LIST is actually a variable
+
+One surprising feature is the statement
+
+ LIST statesOfGrace = ambiguous, saintly, fallen
+
+actually does two things simultaneously: it creates three values, `ambiguous`, `saintly` and `fallen`, and gives them the name-parent `statesOfGrace` if needed; and it creates a variable called `statesOfGrace`.
+
+And that variable can be used like a normal variable. So the following is valid, if horribly confusing and a bad idea:
+
+ LIST statesOfGrace = ambiguous, saintly, fallen
+
+ ~ statesOfGrace = 3.1415 // set the variable to a number not a list value
+
+...and it wouldn't preclude the following from being fine:
+
+ ~ temp anotherStateOfGrace = statesOfGrace.saintly
+
+
+
+
+## 3) List Values
+
+When a list is defined, the values are listed in an order, and that order is considered to be significant. In fact, we can treat these values as if they *were* numbers. (That is to say, they are enums.)
+
+ LIST volumeLevel = off, quiet, medium, loud, deafening
+ VAR lecturersVolume = quiet
+ VAR murmurersVolume = quiet
+
+ { lecturersVolume < deafening:
+ ~ lecturersVolume++
+
+ { lecturersVolume > murmurersVolume:
+ ~ murmurersVolume++
+ The murmuring gets louder.
+ }
+ }
+
+The values themselves can be printed using the usual `{...}` syntax, but this will print their name.
+
+ The lecturer's voice becomes {lecturersVolume}.
+
+### Converting values to numbers
+
+The numerical value, if needed, can be got explicitly using the LIST_VALUE function. Note the first value in a list has the value 1, and not the value 0.
+
+ The lecturer has {LIST_VALUE(deafening) - LIST_VALUE(lecturersVolume)} notches still available to him.
+
+### Converting numbers to values
+
+You can go the other way by using the list's name as a function:
+
+ LIST Numbers = one, two, three
+ VAR score = one
+ ~ score = Numbers(2) // score will be "two"
+
+### Advanced: defining your own numerical values
+
+By default, the values in a list start at 1 and go up by one each time, but you can specify your own values if you need to.
+
+ LIST primeNumbers = two = 2, three = 3, five = 5
+
+If you specify a value, but not the next value, ink will assume an increment of 1. So the following is the same:
+
+ LIST primeNumbers = two = 2, three, five = 5
+
+
+## 4) Multivalued Lists
+
+The following examples have all included one deliberate untruth, which we'll now remove. Lists - and variables containing list values - do not have to contain only one value.
+
+### Lists are boolean sets
+
+A list variable is not a variable containing a number. Rather, a list is like the in/out nameboard in an accommodation block. It contains a list of names, each of which has a room-number associated with it, and a slider to say "in" or "out".
+
+Maybe no one is in:
+
+ LIST DoctorsInSurgery = Adams, Bernard, Cartwright, Denver, Eamonn
+
+Maybe everyone is:
+
+ LIST DoctorsInSurgery = (Adams), (Bernard), (Cartwright), (Denver), (Eamonn)
+
+Or maybe some are and some aren't:
+
+ LIST DoctorsInSurgery = (Adams), Bernard, (Cartwright), Denver, Eamonn
+
+Names in brackets are included in the initial state of the list.
+
+Note that if you're defining your own values, you can place the brackets around the whole term or just the name:
+
+ LIST primeNumbers = (two = 2), (three) = 3, (five = 5)
+
+#### Assiging multiple values
+
+We can assign all the values of the list at once as follows:
+
+ ~ DoctorsInSurgery = (Adams, Bernard)
+ ~ DoctorsInSurgery = (Adams, Bernard, Eamonn)
+
+We can assign the empty list to clear a list out:
+
+ ~ DoctorsInSurgery = ()
+
+
+#### Adding and removing entries
+
+List entries can be added and removed, singly or collectively.
+
+ ~ DoctorsInSurgery = DoctorsInSurgery + Adams
+ ~ DoctorsInSurgery += Adams // this is the same as the above
+ ~ DoctorsInSurgery -= Eamonn
+ ~ DoctorsInSurgery += (Eamonn, Denver)
+ ~ DoctorsInSurgery -= (Adams, Eamonn, Denver)
+
+Trying to add an entry that's already in the list does nothing. Trying to remove an entry that's not there also does nothing. Neither produces an error, and a list can never contain duplicate entries.
+
+
+### Basic Queries
+
+We have a few basic ways of getting information about what's in a list:
+
+ LIST DoctorsInSurgery = (Adams), Bernard, (Cartwright), Denver, Eamonn
+
+ {LIST_COUNT(DoctorsInSurgery)} // "2"
+ {LIST_MIN(DoctorsInSurgery)} // "Adams"
+ {LIST_MAX(DoctorsInSurgery)} // "Cartwright"
+ {LIST_RANDOM(DoctorsInSurgery)} // "Adams" or "Cartwright"
+
+#### Testing for emptiness
+
+Like most values in ink, a list can be tested "as it is", and will return true, unless it's empty.
+
+ { DoctorsInSurgery: The surgery is open today. | Everyone has gone home. }
+
+#### Testing for exact equality
+
+Testing multi-valued lists is slightly more complex than single-valued ones. Equality (`==`) now means 'set equality' - that is, all entries are identical.
+
+So one might say:
+
+ { DoctorsInSurgery == (Adams, Bernard):
+ Dr Adams and Dr Bernard are having a loud argument in one corner.
+ }
+
+If Dr Eamonn is in as well, the two won't argue, as the lists being compared won't be equal - DoctorsInSurgery will have an Eamonn that the list (Adams, Bernard) doesn't have.
+
+Not equals works as expected:
+
+ { DoctorsInSurgery != (Adams, Bernard):
+ At least Adams and Bernard aren't arguing.
+ }
+
+#### Testing for containment
+
+What if we just want to simply ask if Adams and Bernard are present? For that we use a new operator, `has`, otherwise known as `?`.
+
+ { DoctorsInSurgery ? (Adams, Bernard):
+ Dr Adams and Dr Bernard are having a hushed argument in one corner.
+ }
+
+And `?` can apply to single values too:
+
+ { DoctorsInSurgery has Eamonn:
+ Dr Eamonn is polishing his glasses.
+ }
+
+We can also negate it, with `hasnt` or `!?` (not `?`). Note this starts to get a little complicated as
+
+ DoctorsInSurgery !? (Adams, Bernard)
+
+does not mean neither Adams nor Bernard is present, only that they are not *both* present (and arguing).
+
+#### Warning: no lists contain the empty list
+
+Note that the test
+
+ SomeList ? ()
+
+will always return false, regardless of whether `SomeList` itself is empty. In practice this is the most useful default, as you'll often want to do tests like:
+
+ SilverWeapons ? best_weapon_to_use
+
+to fail if the player is empty-handed.
+
+#### Example: basic knowledge tracking
+
+The simplest use of a multi-valued list is for tracking "game flags" tidily.
+
+ LIST Facts = (Fogg_is_fairly_odd), first_name_phileas, (Fogg_is_English)
+
+ {Facts ? Fogg_is_fairly_odd:I smiled politely.|I frowned. Was he a lunatic?}
+ '{Facts ? first_name_phileas:Phileas|Monsieur}, really!' I cried.
+
+In particular, it allows us to test for multiple game flags in a single line.
+
+ { Facts ? (Fogg_is_English, Fogg_is_fairly_odd):
+ <> 'I know Englishmen are strange, but this is *incredible*!'
+ }
+
+
+#### Example: a doctor's surgery
+
+We're overdue a fuller example, so here's one.
+
+ LIST DoctorsInSurgery = (Adams), Bernard, Cartwright, (Denver), Eamonn
+
+ -> waiting_room
+
+ === function whos_in_today()
+ In the surgery today are {DoctorsInSurgery}.
+
+ === function doctorEnters(who)
+ { DoctorsInSurgery !? who:
+ ~ DoctorsInSurgery += who
+ Dr {who} arrives in a fluster.
+ }
+
+ === function doctorLeaves(who)
+ { DoctorsInSurgery ? who:
+ ~ DoctorsInSurgery -= who
+ Dr {who} leaves for lunch.
+ }
+
+ === waiting_room
+ {whos_in_today()}
+ * [Time passes...]
+ {doctorLeaves(Adams)} {doctorEnters(Cartwright)} {doctorEnters(Eamonn)}
+ {whos_in_today()}
+
+This produces:
+
+ In the surgery today are Adams, Denver.
+
+ > Time passes...
+
+ Dr Adams leaves for lunch. Dr Cartwright arrives in a fluster. Dr Eamonn arrives in a fluster.
+
+ In the surgery today are Cartwright, Denver, Eamonn.
+
+#### Advanced: nicer list printing
+
+The basic list print is not especially attractive for use in-game. The following is better:
+
+ === function listWithCommas(list, if_empty)
+ {LIST_COUNT(list):
+ - 2:
+ {LIST_MIN(list)} and {listWithCommas(list - LIST_MIN(list), if_empty)}
+ - 1:
+ {list}
+ - 0:
+ {if_empty}
+ - else:
+ {LIST_MIN(list)}, {listWithCommas(list - LIST_MIN(list), if_empty)}
+ }
+
+ LIST favouriteDinosaurs = (stegosaurs), brachiosaur, (anklyosaurus), (pleiosaur)
+
+ My favourite dinosaurs are {listWithCommas(favouriteDinosaurs, "all extinct")}.
+
+It's probably also useful to have an is/are function to hand:
+
+ === function isAre(list)
+ {LIST_COUNT(list) == 1:is|are}
+
+ My favourite dinosaurs {isAre(favouriteDinosaurs)} {listWithCommas(favouriteDinosaurs, "all extinct")}.
+
+And to be pendantic:
+
+ My favourite dinosaur{LIST_COUNT(favouriteDinosaurs) != 1:s} {isAre(favouriteDinosaurs)} {listWithCommas(favouriteDinosaurs, "all extinct")}.
+
+
+#### Lists don't need to have multiple entries
+
+Lists don't *have* to contain multiple values. If you want to use a list as a state-machine, the examples above will all work - set values using `=`, `++` and `--`; test them using `==`, `<`, `<=`, `>` and `>=`. These will all work as expected.
+
+### The "full" list
+
+Note that `LIST_COUNT`, `LIST_MIN` and `LIST_MAX` are refering to who's in/out of the list, not the full set of *possible* doctors. We can access that using
+
+ LIST_ALL(element of list)
+
+or
+
+ LIST_ALL(list containing elements of a list)
+
+ {LIST_ALL(DoctorsInSurgery)} // Adams, Bernard, Cartwright, Denver, Eamonn
+ {LIST_COUNT(LIST_ALL(DoctorsInSurgery))} // "5"
+ {LIST_MIN(LIST_ALL(Eamonn))} // "Adams"
+
+Note that printing a list using `{...}` produces a bare-bones representation of the list; the values as words, delimited by commas.
+
+#### Advanced: "refreshing" a list's type
+
+If you really need to, you can make an empty list that knows what type of list it is.
+
+ LIST ValueList = first_value, second_value, third_value
+ VAR myList = ()
+
+ ~ myList = ValueList()
+
+You'll then be able to do:
+
+ { LIST_ALL(myList) }
+
+#### Advanced: a portion of the "full" list
+
+You can also retrieve just a "slice" of the full list, using the `LIST_RANGE` function. There are two formulations, both valid:
+
+ LIST_RANGE(list_name, min_integer_value, max_integer_value)
+
+and
+
+ LIST_RANGE(list_name, min_value, max_value)
+
+Min and max values here are inclusive. If the game can’t find the values, it’ll get as close as it can, but never go outside the range. So for example:
+
+ {LIST_RANGE(LIST_ALL(primeNumbers), 10, 20)}
+
+will produce
+
+ 11, 13, 17, 19
+
+
+
+### Example: Tower of Hanoi
+
+To demonstrate a few of these ideas, here's a functional Tower of Hanoi example, written so no one else has to write it.
+
+
+ LIST Discs = one, two, three, four, five, six, seven
+ VAR post1 = ()
+ VAR post2 = ()
+ VAR post3 = ()
+
+ ~ post1 = LIST_ALL(Discs)
+
+ -> gameloop
+
+ === function can_move(from_list, to_list) ===
+ {
+ - LIST_COUNT(from_list) == 0:
+ // no discs to move
+ ~ return false
+ - LIST_COUNT(to_list) > 0 && LIST_MIN(from_list) > LIST_MIN(to_list):
+ // the moving disc is bigger than the smallest of the discs on the new tower
+ ~ return false
+ - else:
+ // nothing stands in your way!
+ ~ return true
+
+ }
+
+ === function move_ring( ref from, ref to ) ===
+ ~ temp whichRingToMove = LIST_MIN(from)
+ ~ from -= whichRingToMove
+ ~ to += whichRingToMove
+
+ == function getListForTower(towerNum)
+ { towerNum:
+ - 1: ~ return post1
+ - 2: ~ return post2
+ - 3: ~ return post3
+ }
+
+ === function name(postNum)
+ the {postToPlace(postNum)} temple
+
+ === function Name(postNum)
+ The {postToPlace(postNum)} temple
+
+ === function postToPlace(postNum)
+ { postNum:
+ - 1: first
+ - 2: second
+ - 3: third
+ }
+
+ === function describe_pillar(listNum) ==
+ ~ temp list = getListForTower(listNum)
+ {
+ - LIST_COUNT(list) == 0:
+ {Name(listNum)} is empty.
+ - LIST_COUNT(list) == 1:
+ The {list} ring lies on {name(listNum)}.
+ - else:
+ On {name(listNum)}, are the discs numbered {list}.
+ }
+
+
+ === gameloop
+ Staring down from the heavens you see your followers finishing construction of the last of the great temples, ready to begin the work.
+ - (top)
+ + [ Regard the temples]
+ You regard each of the temples in turn. On each is stacked the rings of stone. {describe_pillar(1)} {describe_pillar(2)} {describe_pillar(3)}
+ <- move_post(1, 2, post1, post2)
+ <- move_post(2, 1, post2, post1)
+ <- move_post(1, 3, post1, post3)
+ <- move_post(3, 1, post3, post1)
+ <- move_post(3, 2, post3, post2)
+ <- move_post(2, 3, post2, post3)
+ -> DONE
+
+ = move_post(from_post_num, to_post_num, ref from_post_list, ref to_post_list)
+ + { can_move(from_post_list, to_post_list) }
+ [ Move a ring from {name(from_post_num)} to {name(to_post_num)} ]
+ { move_ring(from_post_list, to_post_list) }
+ { stopping:
+ - The priests far below construct a great harness, and after many years of work, the great stone ring is lifted up into the air, and swung over to the next of the temples.
+ The ropes are slashed, and in the blink of an eye it falls once more.
+ - Your next decree is met with a great feast and many sacrifices. After the funeary smoke has cleared, work to shift the great stone ring begins in earnest. A generation grows and falls, and the ring falls into its ordained place.
+ - {cycle:
+ - Years pass as the ring is slowly moved.
+ - The priests below fight a war over what colour robes to wear, but while they fall and die, the work is still completed.
+ }
+ }
+ -> top
+
+
+
+## 5) Advanced List Operations
+
+The above section covers basic comparisons. There are a few more powerful features as well, but - as anyone familiar with mathematical sets will know - things begin to get a bit fiddly. So this section comes with an 'advanced' warning.
+
+A lot of the features in this section won't be necessary for most games.
+
+### Comparing lists
+
+We can compare lists less than exactly using `>`, `<`, `>=` and `<=`. Be warned! The definitions we use are not exactly standard fare. They are based on comparing the numerical value of the elements in the lists being tested.
+
+#### "Distinctly bigger than"
+
+`LIST_A > LIST_B` means "the smallest value in A is bigger than the largest values in B": in other words, if put on a number line, the entirety of A is to the right of the entirety of B. `<` does the same in reverse.
+
+#### "Definitely never smaller than"
+
+`LIST_A >= LIST_B` means - take a deep breath now - "the smallest value in A is at least the smallest value in B, and the largest value in A is at least the largest value in B". That is, if drawn on a number line, the entirety of A is either above B or overlaps with it, but B does not extend higher than A.
+
+Note that `LIST_A > LIST_B` implies `LIST_A != LIST_B`, and `LIST_A >= LIST_B` allows `LIST_A == LIST_B` but precludes `LIST_A < LIST_B`, as you might hope.
+
+#### Health warning!
+
+`LIST_A >= LIST_B` is *not* the same as `LIST_A > LIST_B or LIST_A == LIST_B`.
+
+The moral is, don't use these unless you have a clear picture in your mind.
+
+### Inverting lists
+
+A list can be "inverted", which is the equivalent of going through the accommodation in/out name-board and flipping every switch to the opposite of what it was before.
+
+ LIST GuardsOnDuty = (Smith), (Jones), Carter, Braithwaite
+
+ === function changingOfTheGuard
+ ~ GuardsOnDuty = LIST_INVERT(GuardsOnDuty)
+
+
+Note that `LIST_INVERT` on an empty list will return a null value, if the game doesn't have enough context to know what invert. If you need to handle that case, it's safest to do it by hand:
+
+ === function changingOfTheGuard
+ {!GuardsOnDuty: // "is GuardsOnDuty empty right now?"
+ ~ GuardsOnDuty = LIST_ALL(Smith)
+ - else:
+ ~ GuardsOnDuty = LIST_INVERT(GuardsOnDuty)
+ }
+
+#### Footnote
+
+The syntax for inversion was originally `~ list` but we changed it because otherwise the line
+
+ ~ list = ~ list
+
+was not only functional, but actually caused list to invert itself, which seemed excessively perverse.
+
+### Intersecting lists
+
+The `has` or `?` operator is, somewhat more formally, the "are you a subset of me" operator, ⊇, which includes the sets being equal, but which doesn't include if the larger set doesn't entirely contain the smaller set.
+
+To test for "some overlap" between lists, we use the overlap operator, `^`, to get the *intersection*.
+
+ LIST CoreValues = strength, courage, compassion, greed, nepotism, self_belief, delusions_of_godhood
+ VAR desiredValues = (strength, courage, compassion, self_belief )
+ VAR actualValues = ( greed, nepotism, self_belief, delusions_of_godhood )
+
+ {desiredValues ^ actualValues} // prints "self_belief"
+
+The result is a new list, so you can test it:
+
+ {desiredValues ^ actualValues: The new president has at least one desirable quality.}
+
+ {LIST_COUNT(desiredValues ^ actualValues) == 1: Correction, the new president has only one desirable quality. {desiredValues ^ actualValues == self_belief: It's the scary one.}}
+
+
+
+
+## 6) Multi-list Lists
+
+
+So far, all of our examples have included one large simplification, again - that the values in a list variable have to all be from the same list family. But they don't.
+
+This allows us to use lists - which have so far played the role of state-machines and flag-trackers - to also act as general properties, which is useful for world modelling.
+
+This is our inception moment. The results are powerful, but also more like "real code" than anything that's come before.
+
+### Lists to track objects
+
+For instance, we might define:
+
+ LIST Characters = Alfred, Batman, Robin
+ LIST Props = champagne_glass, newspaper
+
+ VAR BallroomContents = (Alfred, Batman, newspaper)
+ VAR HallwayContents = (Robin, champagne_glass)
+
+We could then describe the contents of any room by testing its state:
+
+ === function describe_room(roomState)
+ { roomState ? Alfred: Alfred is here, standing quietly in a corner. } { roomState ? Batman: Batman's presence dominates all. } { roomState ? Robin: Robin is all but forgotten. }
+ <> { roomState ? champagne_glass: A champagne glass lies discarded on the floor. } { roomState ? newspaper: On one table, a headline blares out WHO IS THE BATMAN? AND *WHO* IS HIS BARELY-REMEMBERED ASSISTANT? }
+
+So then:
+
+ { describe_room(BallroomContents) }
+
+produces:
+
+ Alfred is here, standing quietly in a corner. Batman's presence dominates all.
+
+ On one table, a headline blares out WHO IS THE BATMAN? AND *WHO* IS HIS BARELY-REMEMBERED ASSISTANT?
+
+While:
+
+ { describe_room(HallwayContents) }
+
+gives:
+
+ Robin is all but forgotten.
+
+ A champagne glass lies discarded on the floor.
+
+And we could have options based on combinations of things:
+
+ * { currentRoomState ? (Batman, Alfred) } [Talk to Alfred and Batman]
+ 'Say, do you two know each other?'
+
+### Lists to track multiple states
+
+We can model devices with multiple states. Back to the kettle again...
+
+ LIST OnOff = on, off
+ LIST HotCold = cold, warm, hot
+
+ VAR kettleState = (off, cold) // we need brackets because it's a proper, multi-valued list now
+
+ === function turnOnKettle() ===
+ { kettleState ? hot:
+ You turn on the kettle, but it immediately flips off again.
+ - else:
+ The water in the kettle begins to heat up.
+ ~ kettleState -= off
+ ~ kettleState += on
+ // note we avoid "=" as it'll remove all existing states
+ }
+
+ === function can_make_tea() ===
+ ~ return kettleState ? (hot, off)
+
+These mixed states can make changing state a bit trickier, as the off/on above demonstrates, so the following helper function can be useful.
+
+ === function changeStateTo(ref stateVariable, stateToReach)
+ // remove all states of this type
+ ~ stateVariable -= LIST_ALL(stateToReach)
+ // put back the state we want
+ ~ stateVariable += stateToReach
+
+ which enables code like:
+
+ ~ changeState(kettleState, on)
+ ~ changeState(kettleState, warm)
+
+
+#### How does this affect queries?
+
+The queries given above mostly generalise nicely to multi-valued lists
+
+ LIST Letters = a,b,c
+ LIST Numbers = one, two, three
+
+ VAR mixedList = (a, three, c)
+
+ {LIST_ALL(mixedList)} // a, one, b, two, c, three
+ {LIST_COUNT(mixedList)} // 3
+ {LIST_MIN(mixedList)} // a
+ {LIST_MAX(mixedList)} // three or c, albeit unpredictably
+
+ {mixedList ? (a,b) } // false
+ {mixedList ^ LIST_ALL(a)} // a, c
+
+ { mixedList >= (one, a) } // true
+ { mixedList < (three) } // false
+
+ { LIST_INVERT(mixedList) } // one, b, two
+
+
+## 7) Long example: crime scene
+
+Finally, here's a long example, demonstrating a lot of ideas from this section in action. You might want to try playing it before reading through to better understand the various moving parts.
+
+ -> murder_scene
+
+ // Helper function: popping elements from lists
+ === function pop(ref list)
+ ~ temp x = LIST_MIN(list)
+ ~ list -= x
+ ~ return x
+
+ //
+ // System: items can have various states
+ // Some are general, some specific to particular items
+ //
+
+
+ LIST OffOn = off, on
+ LIST SeenUnseen = unseen, seen
+
+ LIST GlassState = (none), steamed, steam_gone
+ LIST BedState = (made_up), covers_shifted, covers_off, bloodstain_visible
+
+ //
+ // System: inventory
+ //
+
+ LIST Inventory = (none), cane, knife
+
+ === function get(x)
+ ~ Inventory += x
+
+ //
+ // System: positioning things
+ // Items can be put in and on places
+ //
+
+ LIST Supporters = on_desk, on_floor, on_bed, under_bed, held, with_joe
+
+ === function move_to_supporter(ref item_state, new_supporter) ===
+ ~ item_state -= LIST_ALL(Supporters)
+ ~ item_state += new_supporter
+
+
+ // System: Incremental knowledge.
+ // Each list is a chain of facts. Each fact supersedes the fact before
+ //
+
+ VAR knowledgeState = ()
+
+ === function reached (x)
+ ~ return knowledgeState ? x
+
+ === function between(x, y)
+ ~ return knowledgeState? x && not (knowledgeState ^ y)
+
+ === function reach(statesToSet)
+ ~ temp x = pop(statesToSet)
+ {
+ - not x:
+ ~ return false
+
+ - not reached(x):
+ ~ temp chain = LIST_ALL(x)
+ ~ temp statesGained = LIST_RANGE(chain, LIST_MIN(chain), x)
+ ~ knowledgeState += statesGained
+ ~ reach (statesToSet) // set any other states left to set
+ ~ return true // and we set this state, so true
+
+ - else:
+ ~ return false || reach(statesToSet)
+ }
+
+ //
+ // Set up the game
+ //
+
+ VAR bedroomLightState = (off, on_desk)
+
+ VAR knifeState = (under_bed)
+
+
+ //
+ // Knowledge chains
+ //
+
+
+ LIST BedKnowledge = neatly_made, crumpled_duvet, hastily_remade, body_on_bed, murdered_in_bed, murdered_while_asleep
+
+ LIST KnifeKnowledge = prints_on_knife, joe_seen_prints_on_knife,joe_wants_better_prints, joe_got_better_prints
+
+ LIST WindowKnowledge = steam_on_glass, fingerprints_on_glass, fingerprints_on_glass_match_knife
+
+
+ //
+ // Content
+ //
+
+ === murder_scene ===
+ The bedroom. This is where it happened. Now to look for clues.
+ - (top)
+ { bedroomLightState ? seen: <- seen_light }
+ <- compare_prints(-> top)
+
+ * (dobed) [The bed...]
+ The bed was low to the ground, but not so low something might not roll underneath. It was still neatly made.
+ ~ reach (neatly_made)
+ - - (bedhub)
+ * * [Lift the bedcover]
+ I lifted back the bedcover. The duvet underneath was crumpled.
+ ~ reach (crumpled_duvet)
+ ~ BedState = covers_shifted
+ * * (uncover) {reached(crumpled_duvet)}
+ [Remove the cover]
+ Careful not to disturb anything beneath, I removed the cover entirely. The duvet below was rumpled.
+ Not the work of the maid, who was conscientious to a point. Clearly this had been thrown on in a hurry.
+ ~ reach (hastily_remade)
+ ~ BedState = covers_off
+ * * (duvet) {BedState == covers_off} [ Pull back the duvet ]
+ I pulled back the duvet. Beneath it was a sheet, sticky with blood.
+ ~ BedState = bloodstain_visible
+ ~ reach (body_on_bed)
+ Either the body had been moved here before being dragged to the floor - or this is was where the murder had taken place.
+ * * {BedState !? made_up} [ Remake the bed ]
+ Carefully, I pulled the bedsheets back into place, trying to make it seem undisturbed.
+ ~ BedState = made_up
+ * * [Test the bed]
+ I pushed the bed with spread fingers. It creaked a little, but not so much as to be obnoxious.
+ * * (darkunder) [Look under the bed]
+ Lying down, I peered under the bed, but could make nothing out.
+
+ * * {TURNS_SINCE(-> dobed) > 1} [Something else?]
+ I took a step back from the bed and looked around.
+ -> top
+ - - -> bedhub
+
+ * {darkunder && bedroomLightState ? on_floor && bedroomLightState ? on}
+ [ Look under the bed ]
+ I peered under the bed. Something glinted back at me.
+ - - (reaching)
+ * * [ Reach for it ]
+ I fished with one arm under the bed, but whatever it was, it had been kicked far enough back that I couldn't get my fingers on it.
+ -> reaching
+ * * {Inventory ? cane} [Knock it with the cane]
+ -> knock_with_cane
+
+ * * {reaching > 1 } [ Stand up ]
+ I stood up once more, and brushed my coat down.
+ -> top
+
+ * (knock_with_cane) {reaching && TURNS_SINCE(-> reaching) >= 4 && Inventory ? cane } [Use the cane to reach under the bed ]
+ Positioning the cane above the carpet, I gave the glinting thing a sharp tap. It slid out from the under the foot of the bed.
+ ~ move_to_supporter( knifeState, on_floor )
+ * * (standup) [Stand up]
+ Satisfied, I stood up, and saw I had knocked free a bloodied knife.
+ -> top
+
+ * * [Look under the bed once more]
+ Moving the cane aside, I looked under the bed once more, but there was nothing more there.
+ -> standup
+
+ * {knifeState ? on_floor} [Pick up the knife]
+ Careful not to touch the handle, I lifted the blade from the carpet.
+ ~ get(knife)
+
+ * {Inventory ? knife} [Look at the knife]
+ The blood was dry enough. Dry enough to show up partial prints on the hilt!
+ ~ reach (prints_on_knife)
+
+ * [ The desk... ]
+ I turned my attention to the desk. A lamp sat in one corner, a neat, empty in-tray in the other. There was nothing else out.
+ Leaning against the desk was a wooden cane.
+ ~ bedroomLightState += seen
+
+ - - (deskstate)
+ * * (pickup_cane) {Inventory !? cane} [Pick up the cane ]
+ ~ get(cane)
+ I picked up the wooden cane. It was heavy, and unmarked.
+
+ * * { bedroomLightState !? on } [Turn on the lamp]
+ -> operate_lamp ->
+
+ * * [Look at the in-tray ]
+ I regarded the in-tray, but there was nothing to be seen. Either the victim's papers were taken, or his line of work had seriously dried up. Or the in-tray was all for show.
+
+ + + (open) {open < 3} [Open a drawer]
+ I tried {a drawer at random|another drawer|a third drawer}. {Locked|Also locked|Unsurprisingly, locked as well}.
+
+ * * {deskstate >= 2} [Something else?]
+ I took a step away from the desk once more.
+ -> top
+
+ - - -> deskstate
+
+ * {(Inventory ? cane) && TURNS_SINCE(-> deskstate) <= 2} [Swoosh the cane]
+ I was still holding the cane: I gave it an experimental swoosh. It was heavy indeed, though not heavy enough to be used as a bludgeon.
+ But it might have been useful in self-defence. Why hadn't the victim reached for it? Knocked it over?
+
+ * [The window...]
+ I went over to the window and peered out. A dismal view of the little brook that ran down beside the house.
+
+ - - (window_opts)
+ <- compare_prints(-> window_opts)
+ * * (downy) [Look down at the brook]
+ { GlassState ? steamed:
+ Through the steamed glass I couldn't see the brook. -> see_prints_on_glass -> window_opts
+ }
+ I watched the little stream rush past for a while. The house probably had damp but otherwise, it told me nothing.
+ * * (greasy) [Look at the glass]
+ { GlassState ? steamed: -> downy }
+ The glass in the window was greasy. No one had cleaned it in a while, inside or out.
+ * * { GlassState ? steamed && not see_prints_on_glass && downy && greasy }
+ [ Look at the steam ]
+ A cold day outside. Natural my breath should steam. -> see_prints_on_glass ->
+ + + {GlassState ? steam_gone} [ Breathe on the glass ]
+ I breathed gently on the glass once more. { reached (fingerprints_on_glass): The fingerprints reappeared. }
+ ~ GlassState = steamed
+
+ + + [Something else?]
+ { window_opts < 2 || reached (fingerprints_on_glass) || GlassState ? steamed:
+ I looked away from the dreary glass.
+ {GlassState ? steamed:
+ ~ GlassState = steam_gone
+ <> The steam from my breath faded.
+ }
+ -> top
+ }
+ I leant back from the glass. My breath had steamed up the pane a little.
+ ~ GlassState = steamed
+
+ - - -> window_opts
+
+ * {top >= 5} [Leave the room]
+ I'd seen enough. I {bedroomLightState ? on:switched off the lamp, then} turned and left the room.
+ -> joe_in_hall
+
+ - -> top
+
+
+ = operate_lamp
+ I flicked the light switch.
+ { bedroomLightState ? on:
+ <> The bulb fell dark.
+ ~ bedroomLightState += off
+ ~ bedroomLightState -= on
+ - else:
+ { bedroomLightState ? on_floor: <> A little light spilled under the bed.} { bedroomLightState ? on_desk : <> The light gleamed on the polished tabletop. }
+ ~ bedroomLightState -= off
+ ~ bedroomLightState += on
+ }
+ ->->
+
+
+ = compare_prints (-> backto)
+ * { between ((fingerprints_on_glass, prints_on_knife), fingerprints_on_glass_match_knife) }
+ [Compare the prints on the knife and the window ]
+ Holding the bloodied knife near the window, I breathed to bring out the prints once more, and compared them as best I could.
+ Hardly scientific, but they seemed very similar - very similiar indeed.
+ ~ reach (fingerprints_on_glass_match_knife)
+ -> backto
+
+ = see_prints_on_glass
+ ~ reach (fingerprints_on_glass)
+ {But I could see a few fingerprints, as though someone hadpressed their palm against it.|The fingerprints were quite clear and well-formed.} They faded as I watched.
+ ~ GlassState = steam_gone
+ ->->
+
+ = seen_light
+ * {bedroomLightState !? on} [ Turn on lamp ]
+ -> operate_lamp ->
+
+ * { bedroomLightState !? on_bed && BedState ? bloodstain_visible }
+ [ Move the light to the bed ]
+ ~ move_to_supporter(bedroomLightState, on_bed)
+
+ I moved the light over to the bloodstain and peered closely at it. It had soaked deeply into the fibres of the cotton sheet.
+ There was no doubt about it. This was where the blow had been struck.
+ ~ reach (murdered_in_bed)
+
+ * { bedroomLightState !? on_desk } {TURNS_SINCE(-> floorit) >= 2 }
+ [ Move the light back to the desk ]
+ ~ move_to_supporter(bedroomLightState, on_desk)
+ I moved the light back to the desk, setting it down where it had originally been.
+ * (floorit) { bedroomLightState !? on_floor && darkunder }
+ [Move the light to the floor ]
+ ~ move_to_supporter(bedroomLightState, on_floor)
+ I picked the light up and set it down on the floor.
+ - -> top
+
+ === joe_in_hall
+ My police contact, Joe, was waiting in the hall. 'So?' he demanded. 'Did you find anything interesting?'
+ - (found)
+ * {found == 1} 'Nothing.'
+ He shrugged. 'Shame.'
+ -> done
+ * { Inventory ? knife } 'I found the murder weapon.'
+ 'Good going!' Joe replied with a grin. 'We thought the murderer had gotten rid of it. I'll bag that for you now.'
+ ~ move_to_supporter(knifeState, with_joe)
+
+ * {reached(prints_on_knife)} { knifeState ? with_joe }
+ 'There are prints on the blade[.'],' I told him.
+ He regarded them carefully.
+ 'Hrm. Not very complete. It'll be hard to get a match from these.'
+ ~ reach (joe_seen_prints_on_knife)
+ * { reached((fingerprints_on_glass_match_knife, joe_seen_prints_on_knife)) }
+ 'They match a set of prints on the window, too.'
+ 'Anyone could have touched the window,' Joe replied thoughtfully. 'But if they're more complete, they should help us get a decent match!'
+ ~ reach (joe_wants_better_prints)
+ * { between(body_on_bed, murdered_in_bed)}
+ 'The body was moved to the bed at some point[.'],' I told him. 'And then moved back to the floor.'
+ 'Why?'
+ * * 'I don't know.'
+ Joe nods. 'All right.'
+ * * 'Perhaps to get something from the floor?'
+ 'You wouldn't move a whole body for that.'
+ * * 'Perhaps he was killed in bed.'
+ 'It's just speculation at this point,' Joe remarks.
+ * { reached(murdered_in_bed) }
+ 'The victim was murdered in bed, and then the body was moved to the floor.'
+ 'Why?'
+ * * 'I don't know.'
+ Joe nods. 'All right, then.'
+ * * 'Perhaps the murderer wanted to mislead us.'
+ 'How so?'
+ * * * 'They wanted us to think the victim was awake[.'], I replied thoughtfully. 'That they were meeting their attacker, rather than being stabbed in their sleep.'
+ * * * 'They wanted us to think there was some kind of struggle[.'],' I replied. 'That the victim wasn't simply stabbed in their sleep.'
+ - - - 'But if they were killed in bed, that's most likely what happened. Stabbed, while sleeping.'
+ ~ reach (murdered_while_asleep)
+ * * 'Perhaps the murderer hoped to clean up the scene.'
+ 'But they were disturbed? It's possible.'
+
+ * { found > 1} 'That's it.'
+ 'All right. It's a start,' Joe replied.
+ -> done
+ - -> found
+ - (done)
+ {
+ - between(joe_wants_better_prints, joe_got_better_prints):
+ ~ reach (joe_got_better_prints)
+ <> 'I'll get those prints from the window now.'
+ - reached(joe_seen_prints_on_knife):
+ <> 'I'll run those prints as best I can.'
+ - else:
+ <> 'Not much to go on.'
+ }
+ -> END
+
+
+
+## 8) Summary
+
+To summarise a difficult section, **ink**'s list construction provides:
+
+### Flags
+* Each list entry is an event
+* Use `+=` to mark an event as having occurred
+* Test using `?` and `!?`
+
+Example:
+
+ LIST GameEvents = foundSword, openedCasket, metGorgon
+ { GameEvents ? openedCasket }
+ { GameEvents ? (foundSword, metGorgon) }
+ ~ GameEvents += metGorgon
+
+### State machines
+* Each list entry is a state
+* Use `=` to set the state; `++` and `--` to step forward or backward
+* Test using `==`, `>` etc
+
+Example:
+
+ LIST PancakeState = ingredients_gathered, batter_mix, pan_hot, pancakes_tossed, ready_to_eat
+ { PancakeState == batter_mix }
+ { PancakeState < ready_to_eat }
+ ~ PancakeState++
+
+### Properties
+* Each list is a different property, with values for the states that property can take (on or off, lit or unlit, etc)
+* Change state by removing the old state, then adding in the new
+* Test using `?` and `!?`
+
+Example:
+
+ LIST OnOffState = on, off
+ LIST ChargeState = uncharged, charging, charged
+
+ VAR PhoneState = (off, uncharged)
+
+ * {PhoneState !? uncharged } [Plug in phone]
+ ~ PhoneState -= LIST_ALL(ChargeState)
+ ~ PhoneState += charging
+ You plug the phone into charge.
+ * { PhoneState ? (on, charged) } [ Call my mother ]
+
+
+
+
+# Part 6: International character support in identifiers
+
+By default, ink has no limitations on the use of non-ASCII characters inside the story content. However, a limitation currently exsits
+on the characters that can be used for names of constants, variables, stictches, diverts and other named flow elements (a.k.a. *identifiers*).
+
+Sometimes it is inconvenient for a writer using a non-ASCII language to write a story because they have to constantly switch to naming identifiers in ASCII and then switching back to whatever language they are using for the story. In addition, naming identifiers in the author's own language could improve the overal readibility of the raw story format.
+
+In an effort to assist in the above scenario, ink *automatically* supports a list of pre-defined non-ASCII character ranges that can be used as identifiers. In general, those ranges have been selected to include the alpha-numeric subset of the official unicode character range, which would suffice for naming identifiers. The below section gives more detailed information on the non-ASCII characters that ink automatically supports.
+
+### Supported Identifier Characters
+
+The support for the additional character ranges in ink is currently limited to a predefined set of character ranges.
+
+Below is a listing of the currently supported identifier ranges.
+
+ - **Arabic**
+
+ Enables characters for languages of the Arabic family and is a subset of the official *Arabic* unicode range `\u0600`-`\u06FF`.
+
+
+ - **Armenian**
+
+ Enables characters for the Armenian language and is a subset of the official *Armenian* unicode range `\u0530`-`\u058F`.
+
+
+ - **Cyrillic**
+
+ Enables characters for languages using the Cyrillic alphabet and is a subset of the official *Cyrillic* unicode range `\u0400`-`\u04FF`.
+
+
+ - **Greek**
+
+ Enables characters for languages using the Greek alphabet and is a subset of the official *Greek and Coptic* unicode range `\u0370`-`\u03FF`.
+
+
+ - **Hebrew**
+
+ Enables characters in Hebrew using the Hebrew alphabet and is a subset of the official *Hebrew* unicode range `\u0590`-`\u05FF`.
+
+
+ - **Latin Extended A**
+
+ Enables an extended character range subset of the Latin alphabet - completely represented by the official *Latin Extended-A* unicode range `\u0100`-`\u017F`.
+
+
+ - **Latin Extended B**
+
+ Enables an extended character range subset of the Latin alphabet - completely represented by the official *Latin Extended-B* unicode range `\u0180`-`\u024F`.
+
+- **Latin 1 Supplement**
+
+ Enables an extended character range subset of the Latin alphabet - completely represented by the official *Latin 1 Supplement* unicode range `\u0080` - `\u00FF`.
+
+
+**NOTE!** ink files should be saved in UTF-8 format, which ensures that the above character ranges are supported.
+
+If a particular character range that you would like to use within identifiers isn't supported, feel free to open an [issue](/inkle/ink/issues/new) or [pull request](/inkle/ink/pulls) on the main ink repo.
diff --git a/data/ink-src/eibenreith/buckets.ink b/data/ink-src/eibenreith/buckets.ink
new file mode 100644
index 0000000..3b8a9b8
--- /dev/null
+++ b/data/ink-src/eibenreith/buckets.ink
@@ -0,0 +1,31 @@
+// ============================================================================
+// EIBENREITH BUCKET SURFACE
+// ============================================================================
+// Rooms and episodes install bucket entry points as divert-target variables.
+// The active choice surface collects the buckets in priority order.
+// Room definitions provide one first-entry bucket and one repeat-look bucket:
+// first entry shows the room description, later entries offer the Look choice.
+// ============================================================================
+
+
+=== provide_choices ===
+{
+- room_seen_on_enter():
+ <- current_moment_bucket
+ <- current_room_look_bucket
+- else:
+ <- current_room_entry_bucket
+ <- current_moment_bucket
+}
+<- current_room_exit_bucket
+<- current_episode_bucket
+<- current_game_bucket
+-> DONE
+
+
+=== empty_bucket ===
+-> DONE
+
+
+=== game_bucket ===
+-> DONE
diff --git a/data/ink-src/eibenreith/characters.ink b/data/ink-src/eibenreith/characters.ink
new file mode 100644
index 0000000..33d6d79
--- /dev/null
+++ b/data/ink-src/eibenreith/characters.ink
@@ -0,0 +1,137 @@
+// ============================================================================
+// EIBENREITH 00 CHARACTER RELATIONSHIPS
+// ============================================================================
+// Include after eibenreith_00_helpers.ink and before all chapter files.
+//
+// This file contains only relationship variable definitions and starting values.
+// It deliberately contains no helper functions, no route counters, no LIST
+// declarations, and no scene logic.
+//
+// Relationship variables use this naming convention:
+//
+// normalized_character_id + "_" + value_name
+//
+// The ten standard values follow the Scarlet-Hollow-style impression model:
+//
+// agreeable / adversarial
+// open / closed
+// bold / passive
+// reliable / unreliable
+// insightful / dull
+//
+// These are separate counters, not signed opposites. A character can experience
+// Valerie as both open and closed, both reliable and unreliable, depending on
+// the history of choices.
+//
+// Project-specific values may be added per character when needed, but should be
+// clearly separated from the ten standard values.
+// ============================================================================
+
+
+// ============================================================================
+// AMALIA
+// ============================================================================
+// Relationship meaning:
+// These values describe how Amalia experiences Valerie.
+// At story start, Amalia has not yet encountered Valerie directly, so all
+// standard impressions begin at 0.
+// ============================================================================
+
+VAR amalia_agreeable = 0
+VAR amalia_adversarial = 0
+VAR amalia_open = 0
+VAR amalia_closed = 0
+VAR amalia_bold = 0
+VAR amalia_passive = 0
+VAR amalia_reliable = 0
+VAR amalia_unreliable = 0
+VAR amalia_insightful = 0
+VAR amalia_dull = 0
+
+// Project-specific Amalia values.
+// These track the special emotional field between Valerie and Amalia.
+VAR amalia_desire = 0
+VAR amalia_shame = 0
+VAR amalia_alarm = 0
+VAR amalia_fascination = 0
+VAR amalia_empowerment = 0
+VAR amalia_containment = 0
+
+
+// ============================================================================
+// VIKTOR
+// ============================================================================
+// Relationship meaning:
+// These values describe how Viktor experiences Valerie.
+// Viktor begins with a slight professional reserve and a mild assumption that
+// Valerie is an official responsibility rather than a fully trusted partner.
+// ============================================================================
+
+VAR viktor_location = loc_train_compartment
+
+VAR viktor_agreeable = 0
+VAR viktor_adversarial = 0
+VAR viktor_open = 0
+VAR viktor_closed = 1
+VAR viktor_bold = 0
+VAR viktor_passive = 0
+VAR viktor_reliable = 0
+VAR viktor_unreliable = 0
+VAR viktor_insightful = 0
+VAR viktor_dull = 0
+
+// Project-specific Viktor values.
+// These track his role as escort, handler, witness, and potential ally.
+VAR viktor_concern = 0
+VAR viktor_irritation = 0
+VAR viktor_alarm = 0
+VAR viktor_control = 1
+VAR viktor_loss_of_control = 0
+VAR viktor_professional_distance = 2
+VAR viktor_personal_involvement = 0
+
+
+// ============================================================================
+// HOHENREITH FAMILY — RESERVED IDS
+// ============================================================================
+// Add these only when the characters are named and mechanically active.
+// Keep reserved ids stable once introduced, because they become part of save
+// data and authoring convention.
+//
+// Suggested ids:
+// graf_...
+// graefin_...
+// tante_...
+// amalias_brother_...
+// amalias_mother_...
+//
+// Do not define counters for every named NPC unless the game actually branches,
+// gates content, or changes tone based on their relationship to Valerie.
+// ============================================================================
+
+
+// ============================================================================
+// HOUSEHOLD / SERVICE WORLD — RESERVED IDS
+// ============================================================================
+// Suggested ids:
+// steward_...
+// housekeeper_...
+// maid_...
+// valet_...
+// coachman_...
+// cook_...
+// ============================================================================
+
+
+// ============================================================================
+// VILLAGE / CHURCH / OFFICIALS — RESERVED IDS
+// ============================================================================
+// Suggested ids:
+// priest_...
+// station_master_...
+// teacher_...
+// doctor_...
+// mayor_...
+// forester_...
+// ============================================================================
+
diff --git a/data/ink-src/eibenreith/eibenreith_game_design_document.md b/data/ink-src/eibenreith/eibenreith_game_design_document.md
new file mode 100644
index 0000000..616fea9
--- /dev/null
+++ b/data/ink-src/eibenreith/eibenreith_game_design_document.md
@@ -0,0 +1,4097 @@
+# Eibenreith Game Design Document
+
+**Arbeitsstand:** verbindliche Referenzfassung nach der Neustrukturierung von Intro, Ink-Architektur, Beziehungsmodell, Stilregeln und Anreise.
+**Zweck:** Dieses Dokument ist keine Chronik der bisherigen Arbeit, sondern die zentrale Design-, Writing- und Implementierungsbibel für *Eibenreith*.
+
+**Encoding-Regel:** Alle Ink-Dateien und UI-Lokalisierungsdateien werden in UTF-8 gespeichert. Deutscher Text verwendet echte Umlaute, `ß` und typografische Sonderzeichen direkt, zum Beispiel `ä`, `ö`, `ü`, `Ä`, `Ö`, `Ü` und `„…“`. Keine Umschreibung als `ae`, `oe`, `ue` oder `ss` als Ersatz für korrekte Zeichen.
+
+Dieses Dokument ist ausführlich, weil *Eibenreith* kein rein mechanisches Choice-Spiel ist. Die literarische Stimme, die soziale Semantik, die historische Oberfläche, die Beziehungsheuristiken und die Ink-Architektur hängen direkt zusammen. Eine zu starke Kürzung würde Designentscheidungen zerstören. Die Kurzfassungen am Anfang jedes großen Abschnitts dienen nur der schnellen Orientierung; die Detailabschnitte sind die eigentliche Referenz.
+
+**Regel zur Konfliktauflösung:** Neuere Entscheidungen überschreiben ältere. Entscheidungen des Autors überschreiben Vorschläge des Assistenten, sofern sie nicht später ausdrücklich verworfen wurden. Frühere Ideen werden nur erwähnt, wenn sie als Negativregel oder offene Frage für die weitere Arbeit relevant bleiben.
+
+---
+
+# 0. Rekonstruktionsverfahren und Materialinventar
+
+Dieser Abschnitt ist der erste Durchgang der GDD-Rekonstruktion. Er dient nicht als endgültiger Leseteil, sondern als Kontrollinstrument: Erst wird vollständig inventarisiert, dann widersprüchliches Material bereinigt, dann werden die endgültigen Referenzkapitel ausgearbeitet. Dieser Abschnitt bleibt solange im Dokument, bis die Arbeitsbibel vollständig genug ist, um ihn als Checkliste in einen Anhang zu verschieben.
+
+## 0.1 Ziel dieses Dokuments
+
+Das Ziel ist keine Zusammenfassung der letzten Arbeitsschritte. Das Ziel ist eine **Produktionsbibel** für Schreiben, Design und Ink-Implementierung. Das Dokument muss später beantworten können:
+
+- Wie muss eine neue Szene klingen?
+- Welche sozialen und körperlichen Ebenen muss sie bedienen?
+- Welche Valerie-Route wird mit welchen Verben ausgedrückt?
+- Welche Relationship-Werte sind gemeint?
+- Welche States dürfen gesetzt werden?
+- Welche Inhalte gehören in Glossare statt Haupttext?
+- Wie werden Episodes, Traversals und Bucket-Content gebaut?
+- Welche offenen Entscheidungen dürfen nicht versehentlich als entschieden behandelt werden?
+- Welche alten Ideen sind verworfen und dürfen nicht wieder eingeschleppt werden?
+
+Die Zielqualität ist daher nicht „kurz“, sondern **vollständig, navigierbar, widerspruchsbereinigt und umsetzbar**.
+
+## 0.2 Arbeitsmethode ab jetzt
+
+Die Rekonstruktion erfolgt in echten Durchgängen:
+
+1. **Materialinventar**
+ Alle erarbeiteten Bereiche werden gesammelt, ohne sie vorschnell zu kürzen.
+
+2. **Widerspruchsauflösung**
+ Neuere Entscheidungen überschreiben ältere. Autorentscheidungen überschreiben Assistentenvorschläge. Verworfenes wird als Negativregel markiert.
+
+3. **Zielstruktur**
+ Das GDD wird nicht als Fließzusammenfassung, sondern als Arbeitsbibel gegliedert: Creative Bible, Style Guide, Character Bible, Systems Design, Ink Architecture, UI/Tag-Spec, Content Spec.
+
+4. **Ausbau der Abschnitte**
+ Jeder große Bereich erhält nicht nur Prinzipien, sondern Beispiele, Gegenbeispiele, Templates und Prüffragen.
+
+5. **Finale QA**
+ Prüfung gegen die bisher erarbeiteten Inhalte: Fehlt eine Entscheidung? Ist ein alter Stand wieder hineingerutscht? Ist etwas zu abstrakt für spätere Umsetzung?
+
+## 0.3 Materialinventar: Creative Direction
+
+Folgende Entscheidungen gehören dauerhaft in die Creative Bible:
+
+- Das Spiel heißt bzw. arbeitet unter dem Titel *Eibenreith*.
+- Es ist ein deutschsprachiges, choice-basiertes Ink-Spiel.
+- Es spielt 1898 in einer kaiserpunkartigen, aber historisch oberflächenplausiblen österreichisch-ungarischen Welt.
+- Das öffentliche Erscheinungsbild bleibt realistisch; das Übernatürliche ist verborgen, sozial vermittelt und nicht als offenes Fantasy-System sichtbar.
+- Der Kern ist psychologisches Beziehungsdrama über Identität, Rollen, weibliche Selbstbehauptung, soziale Lesbarkeit und Kontrolle.
+- Die Ermittlung ist wichtig, aber nicht die Hauptstruktur. Krimi-Logik darf das Projekt nicht dominieren.
+- Das Verhältnis Valerie/Amalia ist ein Kern des Projekts, nicht Nebenhandlung.
+- Zentrale Frage: Ist Valerie frei, oder trägt sie nur eine bessere Maske?
+- Der Horror entsteht durch Unstimmigkeit, Bedeutungslücken, alte Orte, soziale Formen und verdrängte Wahrheit.
+- Die moderne Welt der Bahn, des Hofes und der Verwaltung trifft auf ältere lokale Ordnungen, verdrängt sie aber nicht vollständig.
+
+Diese Creative-Direction-Entscheidungen müssen im endgültigen Dokument ausführlicher mit Beispielen, nicht nur als Liste, ausgearbeitet werden.
+
+## 0.4 Materialinventar: Setting und historische Welt
+
+Dauerhaft zu dokumentieren:
+
+- Jahr: 1898. Frühere 1889-Fassungen sind überholt.
+- Mögliche offene Datierung: vor/nach Sisis Ermordung, kurz vor/nach Kaiserjubiläum, kalter Spätherbst oder Winter.
+- Wien als Hof-, Amts-, Kultur- und Modernezentrum.
+- Obersteiermark als geographischer und kultureller Zielraum.
+- Eibenreith als Dorf, nicht zu glossieren, Bedeutung im Spiel entfalten.
+- Hohenreith als Jagdhaus/Jagdschlösschen, nicht Hauptsitz der Familie.
+- Eibenklause, Eibenbrunn/Frauenquelle als ältere mögliche Ortskerne.
+- Bahn und Telegraph als etablierte Moderne, nicht als Wundertechnik.
+- Speisewagen möglich, aber nicht blind als selbstverständlich behandeln.
+- Bahnhofsrestauration plausibel als soziale und praktische Mittagsoption.
+- Kirche, Pfarrhof, Dorf, Haus und Dienerschaft als soziale Institutionen.
+- Menschenzoos / Wiener Sehenswürdigkeiten / Sängerknaben / Riesenrad / Prater etc. sind Hintergrundwissen für Valeries Wienbild, aber nicht automatisch Storyinhalt.
+
+Offen in diesem Bereich:
+
+- Genaues Datum.
+- Jahreszeit endgültig festlegen.
+- Wie stark historische Großereignisse aktiv in die Handlung eingreifen.
+- Name der gräflichen Familie.
+- Exakte Lage und Funktion von Eibenbrunn/Frauenquelle.
+
+## 0.5 Materialinventar: Literarischer Stil
+
+Der Style Guide muss deutlich ausführlicher werden als bisher. Er muss enthalten:
+
+- Stilanker: „Der Zug lässt Wien hinter sich, doch Wien hat dich noch nicht freigegeben.“
+- Ziel: weniger langatmig, aber nicht maximal kurz; eher zwei Drittel bis drei Viertel der ursprünglichen Textlänge bei höherer Dichte.
+- Gleiche Menge an Implikation und Atmosphäre in weniger, präziserem Text.
+- Stärkerer Fokus auf Verkörperung: weiblicher Körper, Kleidung, Korsett, Handschuhe, Kosmetik, Haltung, Hunger, Müdigkeit, Kälte, beobachtet werden.
+- Gesellschaftskritik mit Witz, aber nicht modern-plakativ.
+- Lovecraftsche Unstimmigkeit ohne direkte Monster- oder Gruselformeln.
+- Keine bloße Intelligenzbewunderung: Spieler soll sich wie Valerie fühlen, nicht nur ihren Witz bewundern.
+- Satzzeichen-Regeln für romanartige Prosa: Doppelpunkt, Semikolon, Gedankenstrich sparsam und rhythmisch sinnvoll.
+- Glossar als Ort für Belehrung, historische Erklärung und bissige Kommentare.
+- Haupttext soll stärker Szene und Körper tragen.
+
+Noch fehlend und im nächsten Durchgang zu ergänzen:
+
+- konkrete gute/schlechte Stilbeispiele,
+- Absatzmuster,
+- Beispielrevisionen,
+- Regeln für Metaphern,
+- Regeln für wann Glossar statt Haupttext,
+- Beispiele für konkrete Unheimlichkeit,
+- Beispiele für Valeries soziale Wahrnehmung.
+
+## 0.6 Materialinventar: Dialog- und Choice-Stil
+
+Dauerhafte Regeln:
+
+- Dialogchoices beginnen mit einem Verb, das soziale/emotionale Absicht beschreibt.
+- Verboten bzw. zu vermeiden: Sage, Frage, Antworte, Sprich.
+- Richtige Richtung: Wahre Form, Prüfe, Entwaffne, Verplappere dich, Benenne, Schone, Trotze, Reize, Präzisiere, Zügle dich.
+- Jede Dialogzeile soll sozial gelesen werden: Was tut Valerie mit diesem Satz?
+- Nicht nur relevant, was sie sagt, sondern zu wem sie es sagt.
+- Reaktion muss Wirkung zeigen: Nähe, Distanz, Kontrolle, Irritation, Vertrauen, Öffentlichkeit.
+- Valeries gesprochene Zeilen sollen nicht automatisch im Fließtext stehen, wenn der Spieler an dieser Stelle wählen soll.
+
+Noch auszubauen:
+
+- Verb-Lexikon pro Route.
+- Beispielchoices pro Route.
+- Beispiel einer schlechten neutralen Dialogchoice und ihrer Überarbeitung.
+- Reaktionsmuster wichtiger Figuren auf jede Route.
+
+## 0.7 Materialinventar: Valerie-Routen
+
+Sechs Routen sind gesetzt:
+
+1. Fassung / `route_composure`
+2. Detective / `route_detective`
+3. Lover / `route_lover`
+4. Sapphic / `route_sapphic`
+5. Careless / `route_careless`
+6. Eccentric / `route_eccentric`
+
+Wichtige Korrektur: Fassung ist nicht Default, sondern gleichberechtigte Route.
+
+Jede Route braucht im endgültigen Dokument:
+
+- Definition,
+- psychologische Grundlage,
+- soziale Funktion,
+- typische Verben,
+- typische Sätze,
+- typische Risiken,
+- mögliche Wirkung auf Viktor,
+- mögliche Wirkung auf Amalia,
+- mögliche Wirkung auf Haus, Dorf und Dienerschaft,
+- typische Relationship-Updates,
+- gute und schlechte Beispiele.
+
+## 0.8 Materialinventar: Figuren
+
+### Valerie
+
+Gesetzt:
+
+- junge Frau aus Wien / Wien-naher Sphäre,
+- offizieller diskreter Auftrag,
+- Ruf als Medium oder spiritistisch sensible Frau,
+- Masken als Überlebens- und Arbeitsstrategie,
+- nicht einfach frei,
+- Herkunft und Erscheinung werden im Intro definiert,
+- kanonischer Beispielname: Valerie Eleonore Josepha Freiin von Rauhenfels.
+
+Noch ausführlicher zu schreiben:
+
+- ihre Angst,
+- ihr Wunsch,
+- ihre Beziehung zu Wahrheit und Wirkung,
+- ihr Verhältnis zu Weiblichkeit,
+- ihre Beziehung zur Kabinettskanzlei Seiner Majestät,
+- ihr innerer Widerspruch zwischen Kontrolle und Sehnsucht nach Angenommensein.
+
+### Amalia
+
+Gesetzt:
+
+- Tochter der gräflichen Familie,
+- Erwachsene sprechen für sie,
+- erste private Szene ist kein Krimi-Interview,
+- sie bewundert Valerie als junge Frau mit scheinbarer Freiheit, nicht wegen Eisenbahnfaszination,
+- sie ist Kern des Beziehungsdramas.
+
+Noch auszubauen:
+
+- konkretes Alter,
+- Stimme,
+- erste Erscheinung,
+- Verhältnis zu Vater/Mutter/Tante,
+- Verhältnis zur alten Macht,
+- was sie weiß,
+- was sie will,
+- was sie an Valerie missversteht,
+- wie sie auf jede Route reagiert.
+
+### Viktor
+
+Gesetzt:
+
+- voller Name und Dienstgrad: **Rittmeister Viktor Alois Nowak**,
+- offizieller Sekretär / Begleiter, faktisch auch Aufsicht und Sicherheitsmensch,
+- zivil gekleidet, aber militärisch/amtlich geprägt,
+- kontrollierend, aber nicht platt feindselig,
+- Startwerte: `viktor_closed = 1`, `viktor_control = 1`, `viktor_professional_distance = 2`,
+- mögliche Entwicklung zu Respekt, Sorge, Irritation, Kontrollverlust, Verbündetenrolle.
+
+Noch auszubauen:
+
+- konkrete Biographie,
+- Aussehen in fünf möglichen Varianten oder finale Auswahl,
+- Sprachstil,
+- Grenzen seiner Loyalität,
+- Reaktionsmatrix auf Valeries Routen.
+
+### Hohenreith-Familie
+
+Gesetzt:
+
+- gräflich,
+- Name noch offen,
+- „von Schönberg“ verworfen,
+- Jagdhaus ist nicht Hauptsitz.
+
+Noch offen:
+
+- Familienname,
+- Graf,
+- Gräfin/Mutterstatus,
+- Tante/Hausdame,
+- Geschwister,
+- wer über Amalia spricht,
+- wer schweigt,
+- wer das Haus kontrolliert.
+
+### Dorf, Dienerschaft, Butler
+
+Gesetzt:
+
+- nicht Kulisse,
+- soziale Beobachtungs- und Erinnerungssysteme,
+- Butler spricht am Intro-Ende immer: „Willkommen in Hohenreith.“
+
+Noch auszubauen:
+
+- Butlerprofil,
+- Kutscherprofil,
+- wichtige Diener,
+- Pfarrer,
+- Dorfrollen,
+- soziale Netzwerke.
+
+## 0.9 Materialinventar: Systeme aus Referenztalks
+
+Zu bewahren:
+
+- John-Ingold-/Inkle-Denken: Encounters, State Machines, dynamische Autorensysteme.
+- Heaven’s Vault: vier Buckets, vorconditioned Content, der dynamisch aufsteigen kann.
+- Wichtig: Episode- und Game-Buckets müssen breit sein dürfen. Lokale Vorfilterung darf diesen Kern nicht zerstören.
+- Engine filtert Präsentation, Ink authorisiert Verfügbarkeit.
+- Ink kann `*`-Choices nach Wahl ausblenden, aber nicht „offered but not chosen“ tracken.
+- Choice-Tags müssen für Engine vor Auswahl lesbar sein.
+- Keine Side Effects beim Choice-Sammeln.
+- State Trees mit Ink-`LIST`s, nicht externe Engine-States.
+- Relationship-Matrix bleibt in Ink, trotz vieler Variablen.
+
+Noch auszubauen:
+
+- konkrete Episode-Templates,
+- Bucket-Provider-Templates,
+- Engine-Auswahlalgorithmus,
+- Debug-Anforderungen,
+- State-Tree-Beispiele,
+- Relationship-Beispiele.
+
+## 0.10 Materialinventar: Ink-Architektur
+
+Gesetzt:
+
+- `Eibenreith.ink` ist Root/Index/Referenzdatei.
+- Hauptdatei enthält LISTs, Includes, Index, Entry Divert; keine Prosa, keine normalen VARs, keine Funktionen.
+- `eibenreith_00_helpers.ink` enthält globale Variablen und alle Helper-Funktionen, inklusive `rel_*`.
+- `eibenreith_00_character_relationships.ink` enthält nur Relationship-Variablen und Startwerte.
+- Kapiteldateien enthalten Szene, Prosa, Choices, lokale Struktur.
+- `LIST`s modellieren semantische States oder kontrollierte Vokabulare, keine redundanten Knot-Besuche.
+- Character-Generation-Variablen liegen in Helpers, nicht Kapitel 01.
+- Relationship-Helper nutzen `ref`, keine String-IDs.
+- Ink hat keine optionalen Parameter; daher `_by`-Varianten.
+- `#score` als ein Tag mit Gesamttext.
+- gültiges Else-Format in Ink beachten.
+
+Noch auszubauen:
+
+- vollständige Dateistruktur,
+- Naming-Conventions,
+- Beispielcode für Episode, Traversal, Bucket, Score,
+- Syntax-Fallen,
+- Tests.
+
+## 0.11 Materialinventar: Intro / Anreise
+
+Gesetzt:
+
+- Intro ist Anwendung der Tagesstruktur.
+- Vormittag: Zug.
+- Mittag: Bahnhof / Umstieg / Mahlzeit.
+- Nachmittag: Kutsche / Wegzeichen / Dorfentscheidung.
+- Abend: Ankunft Hohenreith / Butler / Score / Übergang Dinner.
+
+Zug:
+
+- erstes begehbares Ambiente,
+- Traversal-Tutorial,
+- Charaktergenerierung an Orten,
+- Stand / Herkunft als erste Pflichtentscheidung im Abteil,
+- Name / Titel / Anrede durch amtliche Erfassung, Schaffner- oder Viktor-Formularmoment,
+- Missionslage durch Hohenreith-Hilfsgesuch und Viktors Memorandum,
+- Geistlichenabteil = Religiosität,
+- Tunnelspiegel = Körper/Kleidung,
+- Waschraum = Gesicht/Frisur,
+- Viktor-Gespräch = Auftrag, Memorandum, Routen-/Reaktionstutorial,
+- Speisewagen/Bahnhof/Imbiss = Mittagsplanung.
+
+Bahnhof:
+
+- Noon-Slot,
+- Mahlzeitenauswertung,
+- Gepäck als soziale Autobiographie,
+- Manierenpuzzle mit Gepäckträger/Kutscher/Viktor.
+
+Kutsche:
+
+- Übergang in lokale Ordnung,
+- Wegzeichen/Statue = übernatürliche Begabung,
+- Entscheidung direkt Hohenreith oder Dorf.
+
+Dorf/Hohenreith:
+
+- drei Anreisevarianten:
+ 1. direkt mit Kutsche,
+ 2. Dorfdetour + Kutsche,
+ 3. Dorfdetour + Kutsche voraus + zu Fuß.
+- Alle enden mit Butler-Satz.
+- Bei Kutschenankunft erneute Ausstiegsszene.
+- Score beschreibt erschaffene Figur.
+
+Noch auszubauen:
+
+- Beat Sheet des Intros,
+- Player Objectives je Abschnitt,
+- mögliche spätere Callbacks der drei Anreisevarianten,
+- Dinner-Folgen.
+
+## 0.12 Materialinventar: UI, Tutorial, Tags
+
+Gesetzt:
+
+- Entscheidungen links.
+- Auswahl per Maus oder angezeigter Taste.
+- Spiel erfolgt über Entscheidungen.
+- Buchstabenkürzel können Textadventure-Konventionen folgen.
+- Begriff „Entscheidungen“ ist Standard; „Wahlen“ verworfen.
+- Bei Dialog ist relevant, was gesagt wird und zu wem.
+- `#gloss` am Absatzende.
+- `#alert` für Tutorial/UI-Hinweise.
+- `#score` für Endauswertung.
+- Asset-Tags unterstützen, aber tragen nicht die Szene.
+
+Noch auszubauen:
+
+- UI-Writing-Styleguide,
+- Tag-Spec für Engine,
+- Score-Rendering,
+- Glossar-Parsing,
+- Choice-Grouping.
+
+## 0.13 Materialinventar: Offene Entscheidungen
+
+Aktuell offen:
+
+- exaktes Datum,
+- Jahreszeit endgültig,
+- Sisi/Kaiserjubiläum,
+- Name der gräflichen Familie,
+- Hohenreith-Familienstruktur,
+- Amalias Kernkonflikt,
+- Natur von Eibenbrunn/Frauenquelle,
+- objektiver Status des Übernatürlichen,
+- Sprachstil der Hohenreith-Familie,
+- Kapitel 05 Dinner,
+- Engine-Details für Choice-Tags, Offered-History, Glossar, Score,
+- zusätzlicher State für Fußankunft,
+- Umbenennung Kapitel-03-Datei.
+
+## 0.14 Materialinventar: Verworfenes
+
+Nicht wieder aufnehmen:
+
+- 1889 als aktuelles Spieljahr,
+- Charaktergenerierung als lineares Weave,
+- Zug als bloß statisches Abteil,
+- Übernatürliche Begabung im Dorf als Pflichtauslöser,
+- Fassung als unsichtbarer Default,
+- Krimi als Hauptstruktur,
+- Amalias Faszination primär über Eisenbahn/Technik,
+- Relationship-Matrix als engine-seitiges String-Dictionary,
+- State-Listen für Knot-Besuche,
+- Glossare in Choice-Texten,
+- alte `{gloss:term|entry}`-Syntax,
+- HTML-Glossartags,
+- mehrere `#score`-Tags am Intro-Ende.
+
+## 0.15 Durchgang 2: Widerspruchsauflösung
+
+Dieser Durchgang entscheidet, welche Fassungen als gültig gelten, welche älteren Fassungen überschrieben sind und welche Punkte weiterhin offen bleiben. Er dient als Sperrschicht gegen Rückfälle in ältere Entwürfe.
+
+### 0.15.1 Grundregel
+
+Wenn mehrere Fassungen existieren, gilt folgende Priorität:
+
+1. spätere ausdrückliche Autorentscheidung,
+2. spätere gemeinsam akzeptierte Arbeitsfassung,
+3. funktionierende aktuelle Ink-Architektur,
+4. frühere Recherche oder Assistentenvorschlag nur, wenn nicht widersprochen.
+
+Assistentenvorschläge gelten nie automatisch als endgültig. Wenn der Autor einen Vorschlag korrigiert hat, ist die Korrektur verbindlich.
+
+### 0.15.2 Spieljahr
+
+**Gültig:** 1898.
+**Verworfen:** 1889 als aktuelles Spieljahr.
+
+1889 bleibt nur für historische Vergleichsfragen relevant. Alle konkreten Ereignisse, Zeitungen, Bahnverbindungen, gesellschaftlichen Details und Wiener Bezugspunkte müssen auf 1898 geprüft werden, bevor sie als Storyinhalt verwendet werden.
+
+**Offen:** Exaktes Datum, Jahreszeit, Verhältnis zu Sisis Ermordung und Kaiserjubiläum.
+
+### 0.15.3 Genregewichtung
+
+**Gültig:** psychologisches Beziehungsdrama mit Horror- und Mystery-Elementen.
+**Verworfen:** Krimi als Hauptstruktur.
+
+Ermittlungslogik darf vorkommen, aber sie darf das Spiel nicht dominieren. Wenn eine Szene wahlweise als Spurensuche oder als Beziehungs-/Rollenszene verstanden werden kann, ist die zweite Lesart vorrangig. Amalia ist kein Fall. Das Dorf ist nicht nur Informationsquelle. Viktor ist nicht nur Ermittlungsassistent oder Hindernis.
+
+### 0.15.4 Valerie
+
+**Gültig:** Valerie ist eine junge Frau, die Masken beherrscht, weil sie in ihrer Welt ohne Masken weniger Handlungsspielraum hätte.
+**Verworfen:** Valerie als moderne, offen emanzipierte Ermittlerin ohne historische Verkörperung.
+
+Valerie darf scharf, berechnend, manipulativ und witzig sein, aber diese Eigenschaften müssen aus ihrer historischen Lage entstehen. Sie soll nicht einfach die Stimme einer modernen Autorposition tragen.
+
+**Gültig als Default-/Beispielname:** Valerie Eleonore Josepha Freiin von Rauhenfels.
+**Gültig als Spielerstruktur:** Name, Herkunft und Erscheinung sind im Intro wählbar.
+
+### 0.15.5 Charaktergenerierung
+
+**Gültig:** Charaktergenerierung entsteht durch Orte und Handlungen im Zug und auf der Anreise.
+**Verworfen:** vordefiniertes lineares Charaktergenerierungs-Weave.
+
+Gültige Zuordnung:
+
+- Abteil / amtliche Erfassung: Stand, Herkunft, Name, Titel, Anrede.
+- Hohenreith-Hilfsgesuch und Viktors Memorandum: Auftrag, Informationsgefälle, Glaube ans Übernatürliche.
+- Geistlichenabteil: Religiosität.
+- Tunnelspiegel: Körper, Statur, Kleidung.
+- Waschraum: Gesicht, Haar, Frisur.
+- Wegzeichen / Statue vor der Nachmittagsgabelung: übernatürliche Begabung.
+- Viktor-Gespräch oder Ausrede zum Waschraum: erste Präsentation der sechs Routen als Reaktionssystem, nicht als Charaktergenerierung.
+
+**Verworfen:** übernatürliche Begabung im Dorf als Pflichtauslöser, weil die direkte Hohenreith-Route das Dorf überspringen kann.
+
+**Verworfen:** Schreiben im Ridikül als feste Quelle für Name / Herkunft / Auftrag. Wenn Valerie ein Ridikül oder Notizbuch trägt, ist es persönlicher Besitz, nicht die Hauptakte. Viktor kontrolliert als Sekretär / Begleiter die offiziellen Papiere.
+
+### 0.15.6 Valeries sechs Routen
+
+**Gültig:** sechs gleichberechtigte Routen:
+
+- Fassung,
+- Detective,
+- Lover,
+- Sapphic,
+- Careless,
+- Eccentric.
+
+**Verworfen:** Fassung als unsichtbarer Default oder Ideal, von dem andere Routen nur Abweichungen sind.
+
+Fassung ist eine eigene Wahlstrategie mit eigenen Kosten. Sie darf nicht automatisch als „richtige“ Valerie behandelt werden.
+
+### 0.15.7 Amalia
+
+**Gültig:** Amalia ist Zentrum des Beziehungsdramas.
+**Verworfen:** Amalia als bloßer Fall, Hinweisgeberin, Opferobjekt oder Krimi-NPC.
+
+Amalia bewundert Valerie nicht primär wegen Eisenbahn oder technischer Moderne. Diese Deutung ist verworfen, weil Frauen ihres Standes die Eisenbahn wahrscheinlich bereits kennen. Amalias Faszination liegt in Valeries scheinbarer weiblicher Freiheit, Verantwortung, Hofnähe, Mobilität und mystischem Ruf.
+
+Die erste private Amalia-Szene muss aus dieser Beziehungsspannung entstehen, nicht aus einem Ermittlungsinterview.
+
+### 0.15.8 Viktor
+
+**Gültig:** Viktor ist offizieller Sekretär/Begleiter nach außen und Aufsicht/Sicherheitsmensch nach innen. Er ist kontrollierend, aber nicht eindimensional feindlich.
+**Verworfen:** Viktor als bloßer Bodyguard, Schurke oder expositorischer Stichwortgeber.
+
+Seine Funktion ist Spannung zwischen Schutz, Kontrolle, Professionalität und möglicher Loyalität. Er reagiert besonders stark auf Valeries Formbrüche, Kontrollverluste und Kompetenzbeweise.
+
+### 0.15.9 Hohenreith-Familie
+
+**Gültig:** gräfliche Familie, Jagdhaus Hohenreith als Jagdresidenz, nicht Hauptsitz.
+**Verworfen:** der frühere Name „von Schönberg“.
+
+**Offen:** endgültiger Familienname, Familienstruktur, Mutter/Tante/Frauenrolle im Haus, Verhältnis Amalias zu Vater und Haushalt.
+
+### 0.15.10 Eibenreith / Hohenreith / alte Namen
+
+**Gültig:**
+
+- Eibenreith: Dorf.
+- Eibenreither Graben: Seitental.
+- Jagdhaus Hohenreith: moderner Landsitzname.
+- Eibenklause: älterer lokaler Name.
+- Eibenbrunn / Frauenquelle: älterer Kern, Quelle oder verbotener Ort.
+
+**Gültig:** Eibenreith und Hohenreith werden im Intro nicht glossiert, weil ihre Bedeutung im Spiel offenbart werden soll.
+
+### 0.15.11 Anreise und Intro
+
+**Gültig:** Die Anreise ist bereits nach Tagesstruktur gegliedert.
+
+- Vormittag: Zug.
+- Mittag: Bahnhof / Umstieg / Mahlzeit.
+- Nachmittag: Kutschenfahrt / Wegzeichen / Dorfentscheidung.
+- Abend: Hohenreith-Empfang / Score / Übergang zum Dinner.
+
+**Gültig:** drei finale Anreisevarianten:
+
+1. direkt mit Kutsche nach Hohenreith,
+2. Dorfdetour und dann mit Kutsche weiter,
+3. Dorfdetour, Kutsche mit Gepäck und Nachricht voraus, Ankunft zu Fuß.
+
+Alle enden mit dem Butler-Satz:
+
+> Willkommen in Hohenreith.
+
+**Gültig:** Bei Ankunft mit Kutsche gibt es eine Ausstiegsszene. Bei Fußankunft nicht; dort ist die soziale Wirkung der fehlenden Kutsche entscheidend.
+
+### 0.15.12 Glossarsystem
+
+**Gültig:**
+
+```ink
+#gloss[Term](Erklärung)
+```
+
+am Ende des Absatzes.
+
+**Verworfen:**
+
+- `{gloss:term|entry}`,
+- HTML-artige ``-Tags,
+- Glossar-Tags in Choice-Texten.
+
+Glossare dienen historischer und linguistischer Aufklärung in Valeries bissigem Lexikonstil. Sie dürfen optional ausführlicher sein. Sie dürfen soziale Puzzle-Lösungen nicht verraten.
+
+### 0.15.13 Score
+
+**Gültig:** Ein einziges `#score[...]`-Tag gibt den vollständigen Endtext aus.
+**Verworfen:** mehrere einzelne `#score`-Tags.
+
+Der Score soll literarisch die erschaffene Valerie zusammenfassen, nicht bloß technische Werte ausgeben.
+
+### 0.15.14 Ink-Architektur
+
+**Gültig:**
+
+- `Eibenreith.ink` ist Root/Index/Referenzdatei.
+- `eibenreith_00_helpers.ink` enthält globale Variablen und Helper-Funktionen.
+- `eibenreith_00_character_relationships.ink` enthält nur Relationship-Variablen und Startwerte.
+- Kapiteldateien enthalten Prosa, Knots, Choices und lokale Struktur.
+
+**Gültig:** Relationship-Helfer gehören in die Helper-Datei, nicht in die Character-Relationships-Datei.
+
+**Gültig:** Charaktergenerierungsvariablen sind global in der Helper-Datei, weil spätere Kapitel sie brauchen.
+
+### 0.15.15 Ink-State-Modell
+
+**Gültig:** `LIST`s modellieren semantische States und kontrollierte Vokabulare.
+**Verworfen:** `LIST`s, die nur Knot- oder Choice-Besuche duplizieren.
+
+Für reine Besuchsfragen werden Ink-Readcounts / Knotnamen verwendet. `TURNS_SINCE()` ist nur für Recency oder aktuellen Chunk sinnvoll, nicht als Standardprüfung für „gesehen“.
+
+### 0.15.16 Relationship-Matrix
+
+**Gültig:** Relationship-Matrix bleibt Ink-intern.
+**Verworfen:** engine-seitiges dynamisches String-Dictionary als Hauptlösung.
+
+Jede wichtige Figur erhält explizite Variablen. Das ist nicht elegant, aber transparent und ink-nah. Helper-Funktionen arbeiten mit `ref`-Parametern.
+
+### 0.15.17 Bucket-System
+
+**Gültig:** Episode- und Game-Buckets dürfen breit sein.
+**Verworfen:** Architektur, die Episode/Game-Content zu stark lokal vorfiltert und damit das Heaven’s-Vault-Prinzip zerstört.
+
+Ink stellt gültige Choices bereit. Die Engine filtert sichtbare Choices nach Tags, Priorität, Bucket, Wiederholungsregeln und Offered-History.
+
+### 0.15.18 Tutorial- und UI-Sprache
+
+**Gültig:** Standardbegriff ist „Entscheidungen“.
+**Verworfen:** „Wahlen“ als Standardbegriff für Choices.
+
+Tutorialtexte müssen präzise, stilistisch sauber und nicht umgangssprachlich sein. Sie müssen linke Choice-Seite, Maus-/Tastenwahl, Entscheidung als Grundmechanik und Textadventure-Kürzel erklären.
+
+## 0.16 Durchgang 2: endgültige Zielstruktur des Dokuments
+
+Die finale Arbeitsbibel wird in folgende Großteile gegliedert. Diese Struktur überschreibt die bisherige kürzere Gliederung und dient als Ausbauplan für die nächsten Durchgänge.
+
+### Teil I: Executive Reference
+
+Kurzreferenz für schnelle Orientierung:
+
+- Projektformel,
+- Creative Pillars,
+- zentrale Negativregeln,
+- wichtigste offene Entscheidungen,
+- Dateistruktur,
+- Kernsysteme.
+
+Dieser Teil darf kurz sein, aber er ersetzt nicht die Detailteile.
+
+### Teil II: Creative Bible
+
+Ausführliche Vision:
+
+- Genre,
+- Ton,
+- Themen,
+- zentrale emotionale Fragen,
+- Verhältnis von Historie, Horror und Beziehungsdrama,
+- Was das Spiel nicht sein darf.
+
+### Teil III: Literary Style Guide
+
+Ausführlicher Schreibstil:
+
+- Prosa-Rhythmus,
+- Verkörperung,
+- Valeries Wahrnehmungsfilter,
+- Gesellschaftskritik,
+- Horrorprinzipien,
+- Satzzeichen,
+- gute und schlechte Beispiele,
+- Glossar vs. Haupttext,
+- Beispielrevisionen.
+
+Dieser Teil ist derzeit am wichtigsten auszubauen, weil er die größte Gefahr für Informationsverlust enthält.
+
+### Teil IV: Choice & Dialogue Style Guide
+
+Konventionen für Spielerentscheidungen:
+
+- Absichtsverben,
+- verbotene neutrale Verben,
+- Routenverben,
+- Dialogreaktionen,
+- Beispiele pro Route,
+- NPC-Reaktionsprinzipien.
+
+### Teil V: Character Bible
+
+Ausführliche Figurenreferenz:
+
+- Valerie,
+- Amalia,
+- Viktor,
+- Hohenreith-Familie,
+- Butler,
+- Dienerschaft,
+- Dorfrollen,
+- Kirche/Pfarrer,
+- spätere NPCs.
+
+Jede wichtige Figur braucht: Funktion, Erscheinung, Stimme, Motivation, Angst, Machtmittel, Beziehung zu Valerie, mögliche Relationship-Reaktionen.
+
+### Teil VI: World & Setting Bible
+
+Historische und räumliche Welt:
+
+- 1898,
+- Wien,
+- Obersteiermark,
+- Eibenreith,
+- Hohenreith,
+- Eibenklause / Eibenbrunn / Frauenquelle,
+- Dorf, Kirche, Haus, Bahnhof, Kutsche,
+- soziale Institutionen,
+- offene historische Datumsfragen.
+
+### Teil VII: Narrative Systems Design
+
+Systeme aus den Referenztalks:
+
+- Encounters,
+- State Trees,
+- Bucket Content,
+- Cascades/Callbacks/Heuristics,
+- Relationship Matrix,
+- Tagesstruktur,
+- Episodenmodell,
+- Traversal.
+
+### Teil VIII: Ink Implementation Guide
+
+Code-nahe Referenz:
+
+- Dateistruktur,
+- Include-Reihenfolge,
+- Naming-Conventions,
+- LIST-Konventionen,
+- VAR-Konventionen,
+- Helper-Funktionen,
+- State-Templates,
+- Relationship-Templates,
+- Bucket-Templates,
+- Episode-Templates,
+- Traversal-Templates,
+- Score-Template,
+- Syntax-Fallen,
+- Teststrategie.
+
+### Teil IX: UI, Tags, Glossary & Engine Integration
+
+Engine-naher Designteil:
+
+- Choice-Tags,
+- Bucket-Filterung,
+- Offered-History,
+- `#alert`,
+- `#score`,
+- `#gloss`,
+- `#music`, `#image`, `#sfx`,
+- TTS-Verhalten,
+- Debugging.
+
+### Teil X: Current Content Specification
+
+Aktueller Content-Plan:
+
+- Intro Beat Sheet,
+- Kapitel 01–04 als Referenzmuster,
+- Kapitel 05 Dinner als nächster Zielblock,
+- erste private Amalia-Szene,
+- geplante Tages- und Episodenstruktur.
+
+Dieser Teil darf konkrete Kapitel enthalten, aber nicht als Änderungsprotokoll. Er beschreibt Zielzustände und Designfunktionen.
+
+### Teil XI: Open Decisions, Deprecated Ideas, Decision Log
+
+Kontrollteil:
+
+- offene Entscheidungen,
+- verworfene Ansätze,
+- echte unaufgelöste Widersprüche,
+- spätere Designentscheidungen mit Datum/Arbeitsstand.
+
+## 0.17 Durchgang 2: Qualitätskriterien für die finale Arbeitsbibel
+
+Die fertige GDD-Fassung ist erst brauchbar, wenn folgende Tests bestanden werden:
+
+### 0.17.1 Writing-Test
+
+Eine neue Szene kann aus dem Dokument heraus geschrieben werden, ohne erneut fragen zu müssen:
+
+- wie Valerie denkt,
+- wie körperlich der Text sein soll,
+- wie Choices formuliert werden,
+- wie Glossare klingen,
+- wie Horror konkret wird,
+- wie gesellschaftlicher Subtext funktioniert.
+
+### 0.17.2 Ink-Test
+
+Ein neuer Encounter kann aus dem Dokument heraus implementiert werden, ohne erneut klären zu müssen:
+
+- wohin LISTs gehören,
+- wohin VARs gehören,
+- wie State-Reach funktioniert,
+- wie Relationships upgedatet werden,
+- wie Choice-Tags aussehen,
+- wie Bucket-Content geschrieben wird,
+- wie Traversal und Episode-Start/Ende funktionieren.
+
+### 0.17.3 Character-Test
+
+Eine neue Szene mit Valerie, Viktor oder Amalia kann geschrieben werden, ohne die Figuren auf Funktionen zu reduzieren. Das Dokument muss genug über Motivation, Angst, Stimme, soziale Rolle und Reaktionsmuster enthalten.
+
+### 0.17.4 Continuity-Test
+
+Das Dokument verhindert Rückfälle in verworfene Fassungen:
+
+- kein 1889,
+- keine lineare Charaktererstellung,
+- keine Krimi-Dominanz,
+- keine Glossare in Choices,
+- keine Fassung als Default,
+- keine redundanten State-Listen,
+- keine mehrfachen Score-Tags.
+
+### 0.17.5 Production-Test
+
+Das Dokument ist lang genug, um keine wichtigen Entscheidungen zu verlieren, aber strukturiert genug, um benutzt zu werden. Es braucht Inhaltslogik, Überschriften, Beispiele, Templates und klare Negativregeln.
+
+# 1. Projektvision
+
+## 1.1 Projektformel
+
+*Eibenreith* ist ein deutschsprachiges, choice-basiertes Ink-Spiel im Stil eines literarischen historischen Gothic-Horror- und Beziehungsdramas. Es spielt im Jahr **1898** in der österreichisch-ungarischen Monarchie. Der Spieler steuert Valerie, eine junge Frau aus dem Umfeld der Kabinettskanzlei Seiner Majestät, die mit einem mystischen Ruf und einem diskreten Auftrag nach Hohenreith reist.
+
+Das Spiel verbindet kaiserzeitliche Bürokratie, Rang, Ruf, Eisenbahnmoderne, Adel, Kirche, Dorf, Dienstbotenwelt, ethnisch-konfessionelle Spannungen, weibliche und männliche Rollen, soziale Macht und eine ältere, schwer benennbare Bedrohung.
+
+Das Spiel ist **nicht primär ein Krimi** und nicht primär eine moderne Unterdrückungsparabel. Es nutzt Mystery- und Ermittlungsformen, aber sein Kern ist ein psychologisches Drama über Rollen, Privileg, Abhängigkeit, Selbstbehauptung, Intimität, Kontrolle und die Frage, wer in einer streng ritualisierten Welt überhaupt sprechen darf.
+
+## 1.2 Moralische Grundformel
+
+Der moralische Kernsatz des Spiels lautet:
+
+> **Eibenreith erzählt, dass in einer Welt aus Rang, Ruf und Ritual nicht der die meiste Macht hat, der offiziell befiehlt, sondern der, der am besten versteht, was alle anderen nicht aussprechen dürfen.**
+
+Kürzeres Motto:
+
+> **Macht wohnt dort, wo alle gelernt haben, nicht hinzusehen.**
+
+Diese Formel ersetzt jede platte Gegenwartsschablone. *Eibenreith* handelt nicht davon, dass Männer Macht haben und Frauen machtlos sind. Es handelt davon, dass Macht in dieser Welt über Stand, Geschlecht, Religion, Ethnizität, Sprache, Bildung, Amt, Besitz, Haushalt, Ruf, Körper, Schweigen und Zugang verteilt ist.
+
+Valerie ist als Dame der gehobenen Gesellschaft nicht einfach Opfer. Sie besitzt erhebliches Privileg: Stand, Bildung, Kleidung, Sprache, Hofnähe, Zugang, Schutz, Glaubwürdigkeit und die Fähigkeit, andere Menschen sozial lesen und benutzen zu können. Gegenüber einem Kutscher, Knecht, Bahnhofsarbeiter, einfachen Soldaten, jüdischen Händler, slowenischen Dienstboten oder bäuerlichen Mann hat sie oft mehr reale Macht als viele Männer.
+
+Das Spiel muss daher zeigen: **Jede Figur hat Macht und Ohnmacht zugleich.** Entscheidend ist, ob eine Figur ihre Rolle benutzt, um andere handlungsfähiger zu machen, oder um sie in einer Rolle festzuhalten.
+
+## 1.3 Was das Spiel leisten soll
+
+Der Spieler soll nicht nur erfahren, was passiert. Er soll lernen, wie Valerie in dieser Welt funktioniert: wie sie sich hält, wie sie atmet, welche Rolle sie spielt, wie sie beobachtet wird, welche Privilegien sie besitzt, welche Grenzen sie spürt und wie jede kleine Geste sozial gelesen werden kann.
+
+Die Spielerfahrung lautet nicht:
+
+> Ich bin eine arme Frau in einer Männerwelt.
+
+Sondern:
+
+> Ich bin eine junge Dame mit gefährlich viel und gefährlich wenig Macht. Jede Rolle, die mich schützt, kann auch andere einschließen. Jede Form, die mir Zugang gibt, kann jemanden zum Schweigen bringen. Jede Freiheit, die ich nehme, erzeugt Zeichen, die andere bezahlen könnten.
+
+## 1.4 Genre und Ton
+
+*Eibenreith* steht zwischen:
+
+- historischem Gothic Horror,
+- psychologischem Beziehungsdrama,
+- Gesellschaftsroman,
+- Mystery-Adventure,
+- interaktiver Rollen- und Identitätsstudie,
+- Kaiserpunk ohne plakative Steampunk-Oberfläche.
+
+„Kaiserpunk“ bedeutet hier nicht Messingroboter, Dampfmaschinen-Spektakel oder generische Retrofuturistik. Es bedeutet: die ästhetische und soziale Macht der späten Habsburgermonarchie wird als Spielmaterial verwendet. Papier, Siegel, Hofsprache, Eisenbahn, Telegraph, Rang, Uniform, Etikette, katholische Zeichen, ethnisch-konfessionelle Ordnung, Dienstboten und Adel werden zu Mechaniken der Wahrnehmung und Kontrolle.
+
+## 1.5 Creative Pillars
+
+### 1.5.1 Verkörperte historische Perspektive
+
+Der Spieler soll spüren, dass Valerie als junge Dame des späten 19. Jahrhunderts handelt. Das bedeutet:
+
+- Korsett, Handschuhe, Hut, Nadeln und Reisekleidung sind nicht Dekor.
+- Der Körper ist sozial geformt.
+- Erschöpfung, Hunger, Schwitzen, Haltung und Atem sind erzählerisch relevant.
+- Weiblichkeit ist gesellschaftliche Lesart, aber nicht automatisch Machtlosigkeit.
+- Valeries Handlungsspielraum entsteht aus Beschränkung **und** Privileg.
+
+### 1.5.2 Soziale Bedeutung vor mechanischem Fortschritt
+
+Eine kleine Geste kann wichtiger sein als ein gefundener Gegenstand. Ein falsch behandelter Koffer, ein zu freundlicher Blick zum Kutscher oder eine nicht erwartete Fußankunft kann mechanisch und narrativ bedeutender sein als ein klassischer Hinweis.
+
+### 1.5.3 Beziehungsdrama statt Opfer-Täter-Schablone
+
+Die Handlung soll nicht auf „Finde die Wahrheit hinter dem Spuk“ reduziert werden und ebenso wenig auf „Männer kontrollieren, Frauen leiden“. Die wichtigere Frage ist:
+
+- Wer sieht wen wirklich?
+- Wer benutzt Fürsorge als Besitzanspruch?
+- Wer hat Macht, aber nennt sie Pflicht?
+- Wer hat wenig offizielle Macht, aber kontrolliert Ruf, Zugang, Haushalt oder Schweigen?
+- Wann macht Valerie andere freier, und wann ersetzt sie nur deren alte Rolle durch ihre eigene Deutung?
+
+### 1.5.4 Historische Oberfläche, verborgene Tiefe
+
+Öffentlich muss die Welt historisch plausibel bleiben. Das Übernatürliche darf nicht wie ein sichtbares Fantasy-System auftreten. Es zeigt sich in Lücken, Ritualen, Körpersignalen, Fehlbenennungen, alten Orten, sozialen Tabus und unpassenden Reaktionen.
+
+### 1.5.5 Ink als Autorensystem, nicht bloßer Dialogbaum
+
+Das Spiel soll mit Ink nicht als linearer Branching Tree, sondern als modulares, zustandsbasiertes Erzählmodell gebaut werden:
+
+- Encounters statt Quests,
+- State Trees als semantische Wissensketten,
+- Relationship Heuristics statt Approval-Meter,
+- Buckets für Moment-, Room-, Episode- und Game-Content,
+- Engine-gesteuerte Präsentation aktuell gültiger Choices.
+
+# 2. Setting-Bibel
+
+## 2.1 Zeit: 1898
+
+Das Spiel spielt im Jahr **1898**. Frühere 1889-Annahmen sind überholt. Alle historischen Details müssen, wenn sie konkret eingebaut werden, auf 1898 geprüft werden.
+
+1898 ist interessant, weil es eine späte Phase der Habsburgermonarchie markiert: modern genug für Eisenbahn, Telegraph, Presse, städtische Kultur und bürokratische Durchdringung; zugleich geprägt von Adel, Kirche, Standesformen, Nationalitätenkonflikten, Geschlechterrollen und imperialer Erstarrung.
+
+## 2.2 Offene Datumsentscheidung
+
+Noch nicht endgültig festgelegt:
+
+- Spielt die Handlung vor oder nach der Ermordung Elisabeths?
+- Soll die Nachricht von Sisis Tod während des Aufenthalts als Störmoment eintreffen?
+- Soll das Kaiserjubiläum als gerade stattgefundenes Ereignis thematisch eingebaut werden?
+- Ist es Spätherbst oder Winter?
+
+Die aktuelle Prosa tendiert zu kaltem Spätherbst oder Winter: gefrorener Schlamm, dunkle Wälder, kaltes Glas, frühes Dunkel, körperliche Kälte. Diese Atmosphäre passt zum Horror, ist aber erst verbindlich, wenn der konkrete Kalender festgelegt wird.
+
+## 2.3 Region
+
+Die Handlung liegt in einer fiktiv ergänzten Obersteiermark, vermutlich nahe:
+
+- Aflenzer Becken / Aflenztal,
+- Hochschwab-Südraum,
+- Aflenz,
+- Graßnitz,
+- Turnau,
+- Stübming,
+- Hohe Veitsch / Hochschwab als landschaftliche Bezugspunkte.
+
+Die Region ist nicht austauschbare Alpenkulisse. Sie soll aus realer obersteirischer Erfahrung gespeist werden: enge Seitentäler, Kalkberge, dunkle Wälder, Wasser, Holz, Eisen, Jagd, katholische Zeichen, lokale Sprache, soziale Enge.
+
+## 2.4 Orte
+
+### 2.4.1 Eibenreith
+
+Eibenreith ist das Dorf im Tal bzw. im Seitengraben. Der Name soll im Spiel nicht sofort erklärt und nicht glossiert werden. Er ist ein Bedeutungsträger, der sich erst durch Verlauf, Ort und ältere Namen entfaltet.
+
+Funktion des Dorfes:
+
+- erste Gegenöffentlichkeit zum Adelshaus,
+- soziales Gedächtnis,
+- lokales Wissen,
+- Beobachtungsmaschine,
+- Ort zwischen Kirche, Wasser, Straße und Haus,
+- möglicher Zugang zu alten Namen und verdrängter Geschichte.
+
+Das Dorf soll nicht romantisiert werden. Es ist weder idyllisch noch bloß feindselig. Es ist eine soziale Ordnung mit eigenem Überlebenswissen.
+
+### 2.4.2 Jagdhaus Hohenreith
+
+Hohenreith ist der moderne, gastfreundliche und sozial präsentable Name des adeligen Landsitzes. Es ist nicht der Hauptsitz der Familie, sondern ein Jagdhaus / Jagdschlösschen, das für Jagden, Gäste und saisonale Aufenthalte genutzt wird.
+
+Hohenreith soll geschichtet sein:
+
+- neuere repräsentative Oberfläche,
+- ältere Fundamente oder Bauteile,
+- möglicherweise modernisiert für Gäste,
+- ältere lokale Bedeutung darunter.
+
+Das Haus soll beim ersten Erscheinen nicht wie ein Märchenschloss wirken, sondern wie eine repräsentative Anlage, die zu korrekt, zu bewusst und zu höflich auftritt. Es empfängt, aber Empfang ist bereits Kontrolle.
+
+### 2.4.3 Eibenklause
+
+Die Eibenklause ist der ältere lokale Name der Anlage oder eines älteren Ortes darunter. Der genaue Status ist offen. Sie kann ein alter Name für das Gelände, eine bauliche Vorgängerstruktur, eine religiöse oder kultische Stelle, eine Quelle oder ein lokales Tabu sein.
+
+### 2.4.4 Eibenbrunn / Frauenquelle
+
+Der Eibenbrunn bzw. die Frauenquelle ist ein möglicher älterer Kern des Mysteriums. Er steht wahrscheinlich mit Wasser, weiblicher Gottheit, Schutz, Opfer, Geburt, Krankheit, Heilung, Schweigen oder Gefangenschaft in Verbindung.
+
+Noch offen:
+
+- Ist er real übernatürlich?
+- Ist er sozial/kultisch überformt?
+- Ist er unter dem Haus, im Wald, bei der Kirche oder im alten Fundament?
+- Welche Beziehung hat Amalia dazu?
+
+## 2.5 Historische Moderne im Spiel
+
+### 2.5.1 Eisenbahn
+
+1898 ist die Eisenbahn für Menschen aus Valeries und Amalias Sphäre etabliert. Sie ist kein Wunder. Deshalb darf Amalia nicht naiv von der Eisenbahn fasziniert sein. Die Bahn steht stattdessen für:
+
+- moderne Ordnung,
+- Klassenabteile,
+- Hofnähe,
+- Fahrplan,
+- technische Infrastruktur,
+- Bewegung von Informationen und Personen,
+- Übergang aus Wien in die Provinz.
+
+### 2.5.2 Telegraph und Presse
+
+Telegraph und Zeitung können Informationen schnell verbreiten, aber im Spiel soll sichtbar bleiben, dass Geschwindigkeit nicht Wahrheit bedeutet. Ein abgelegener Ort kann Nachrichten haben und trotzdem eigene Deutungen behalten.
+
+### 2.5.3 Bahnhof
+
+Der Bahnhof ist ein sozialer Sortierort. Er ist kein neutraler Transit. Dort werden Klasse, Gepäck, Kleidung, Dienst und öffentliche Form sichtbar.
+
+### 2.5.4 Kutsche
+
+Die Kutsche nach Hohenreith ist nicht nur Transport. Sie markiert den Übergang aus der modernen, planbaren Bahnwelt in die lokale Ordnung des Grabens. Die Straße überträgt Unebenheiten direkt in den Körper. Die Landschaft tritt näher.
+
+---
+
+# 3. Moral Universe und thematische Architektur
+
+Dieser Abschnitt ist die verbindliche moralische Physik des Spiels. Er beantwortet nicht, welche Figuren „gut“ oder „böse“ sind, sondern welche Handlungen in dieser Erzählwelt Bedeutung haben, welche Formen von Macht gefährlich werden und welche Art Wahrheit die Geschichte ernst nimmt.
+
+## 3.1 Grundsatz: Jedes Spiel hat eine Moral
+
+*Eibenreith* darf nicht so tun, als hätte es keine moralische Perspektive. Wenn die Moral unbewusst bleibt, rutscht sie in fremde Schablonen: moderne amerikanische Machtbegriffe, pauschale Männer/Frauen-Erzählungen, flache Unterdrückungsdramaturgie oder bloßen Nihilismus.
+
+Die Moral dieses Spiels muss historisch, sozial und psychologisch ehrlicher sein:
+
+> Macht ist nicht Besitz einer Gruppe. Macht ist ein Geflecht aus Rang, Ruf, Ritual, Geschlecht, Religion, Ethnizität, Sprache, Bildung, Amt, Besitz, Haushalt, Körper und Schweigen.
+
+Daraus folgt: Fast jede Figur hat Macht über jemanden und Abhängigkeit von jemand anderem. Das Spiel wird interessant, wenn diese Gleichzeitigkeit sichtbar bleibt.
+
+## 3.2 Moralische Grundformel
+
+Die prägnante Formel für *Eibenreith* lautet:
+
+> **In einer Welt aus Rang, Ruf und Ritual hat nicht der die meiste Macht, der offiziell befiehlt, sondern der, der am besten versteht, was alle anderen nicht aussprechen dürfen.**
+
+Oder als knappes Motto:
+
+> **Macht wohnt dort, wo alle gelernt haben, nicht hinzusehen.**
+
+Diese Formel muss bei späterer Szenenarbeit als oberster Test dienen. Eine Szene ist stärker, wenn sie nicht nur fragt „wer unterdrückt wen?“, sondern:
+
+- Wer darf hier offiziell sprechen?
+- Wer bestimmt tatsächlich, was gesagt werden kann?
+- Welche Rolle schützt eine Person?
+- Welche Rolle hält eine andere gefangen?
+- Welches Wissen darf nicht ausgesprochen werden?
+- Wer bezahlt den Preis, wenn Valerie eine Form bricht?
+
+## 3.3 Kein importiertes White-Male-Privilege-Modell
+
+Die soziale Welt von *Eibenreith* ist nicht nach amerikanischen Gegenwartsachsen zu schreiben. Hautfarbe ist nicht die zentrale Differenzlogik dieser Welt. In der österreichisch-ungarischen Monarchie um 1898 laufen zentrale Spannungen über:
+
+- Stand,
+- Besitz,
+- Bildung,
+- Sprache,
+- Ethnizität,
+- Nationalität,
+- Konfession,
+- Judentum / Antisemitismus,
+- katholische Mehrheitsordnung,
+- Stadt vs. Land,
+- Hofnähe,
+- Militär,
+- Verwaltung,
+- Geschlecht,
+- Legitimität und Ruf.
+
+Ein adeliger oder hofnaher weiblicher Gast kann mehr reale Macht über einen männlichen Bediensteten haben als dieser je über sie. Ein jüdischer Mann, ein slowenischer Arbeiter, ein tschechischer Beamter, ein protestantischer Außenseiter, ein bäuerlicher Knecht oder ein armer katholischer Mann stehen jeweils in anderen Machtgeflechten. Diese Komplexität ist Teil des Spiels.
+
+## 3.4 Frauenmacht ist reale Macht
+
+Das Spiel darf weibliche Machtformen des 19. Jahrhunderts nicht entwerten, nur weil sie anders funktionieren als moderne politische oder berufliche Macht.
+
+Frauen können Macht ausüben über:
+
+- Haushalt,
+- Ruf,
+- Ehe und Heiratsaussicht,
+- Verwandtschaft,
+- Salon und Einladung,
+- Krankheit und Pflege,
+- Frömmigkeit,
+- moralische Autorität,
+- Scham,
+- Sexualität,
+- Erziehung,
+- soziale Empfehlung,
+- Geheimnisse,
+- Zugang zu privaten Räumen,
+- die Fähigkeit, Männer und andere Frauen gesellschaftlich lesbar oder unlesbar zu machen.
+
+Diese Macht ist nicht automatisch gut. Sie kann schützen, vermitteln, retten, zerstören, erpressen, ausschließen oder begraben. Eine Tante, Mutter, Hausdame oder fromme Frau kann im Haus mehr tatsächliche Kontrolle ausüben als ein junger Mann mit Titel.
+
+## 3.5 Valerie als privilegierte und begrenzte Figur
+
+Valerie ist nicht einfach eine unterdrückte Frau. Sie ist zugleich begrenzt und privilegiert.
+
+Sie ist begrenzt durch:
+
+- Geschlechterrollen,
+- Erwartungen an weibliche Form,
+- Ruf und Lesbarkeit,
+- körperliche Kleidungscodes,
+- amtliche Kontrolle,
+- die Gefahr, als hysterisch, kokett, unweiblich oder unglaubwürdig gelesen zu werden.
+
+Sie ist privilegiert durch:
+
+- Bildung,
+- Sprache,
+- Kleidung,
+- Hofnähe,
+- Stand oder erarbeiteten Zugang,
+- schriftlichen Auftrag,
+- Reise in erster Klasse,
+- Schutz durch Viktor,
+- ihren Ruf als Medium,
+- die Fähigkeit, Bedienstete, Dorfleute und Männer niedereren Standes sozial zu dirigieren.
+
+Gute Valerie-Szenen müssen diese Doppelstellung spürbar machen. Wenn der Text nur ihre Begrenzung zeigt, wird er flach. Wenn er nur ihre Macht zeigt, verliert er die Spannung.
+
+## 3.6 Moralische Pole des Spiels
+
+Die wichtigsten moralischen Spannungen:
+
+| Pol A | Pol B | Bedeutung im Spiel |
+|---|---|---|
+| Sehen | Erklären | Amalia als Subjekt vs. Amalia als Fall, Symbol oder Beweisstück |
+| Schützen | Besitzen | Fürsorge vs. Kontrolle |
+| Form | Wahrheit | Würde bewahren vs. Schweigen erzwingen |
+| Nähe | Benutzung | Beziehung vs. Taktik |
+| Freiheit | Verantwortung | Ausbruch vs. Folgen für andere |
+| Erinnerung | Verdrängung | Dorf, Ort, Wasser, alte Namen vs. Haus, Hof, Akte |
+| Glauben | Ausbeuten | echte Offenheit vs. performative Instrumentalisierung |
+| Privileg | Verpflichtung | Rang als Schutz und als Schuld |
+| Schweigen | Stimme | Diskretion als Würde oder als Auslöschung |
+
+Diese Pole sind nicht binäre Gut/Böse-Schalter. In einer guten Szene können beide Seiten zugleich recht und gefährlich sein.
+
+## 3.7 Rollen sind nicht falsch; Einsperrung ist falsch
+
+Eine Rolle ist in *Eibenreith* nicht automatisch moralisch verwerflich. Rollen machen Gesellschaft überhaupt lesbar. Sie können Schutz, Würde und Form geben.
+
+Moralisch gefährlich werden Rollen, wenn sie Menschen daran hindern, selbst zu sprechen, sich zu verändern oder anders gelesen zu werden.
+
+Die Schuld dieser Welt entsteht nicht daraus, dass Menschen Rollen spielen. Sie entsteht daraus, dass sie andere Menschen in Rollen einsperren und es Fürsorge, Ordnung, Glauben, Liebe oder Pflicht nennen.
+
+## 3.8 Fürsorge vs. Besitz
+
+Dies ist eine Kernachse für fast alle Hauptfiguren.
+
+- Viktor schützt Valerie, aber kontrolliert sie.
+- Der Hof schützt Ordnung, aber benutzt Valerie.
+- Der Graf schützt Amalia, aber könnte für sie sprechen.
+- Eine Mutter oder Tante schützt Ruf und Zukunft, aber kann Amalia einschließen.
+- Valerie kann Amalia helfen, aber auch zur neuen Deuterin werden.
+- Das Dorf bewahrt Erinnerung, aber kann Menschen durch Gerücht festhalten.
+
+Jede Fürsorge-Szene muss fragen:
+
+> Wird hier jemand handlungsfähiger, oder nur sicherer verwahrt?
+
+## 3.9 Wahrheit vs. Timing
+
+Wahrheit ist nicht automatisch moralisch richtig, wenn sie im falschen Moment oder auf Kosten anderer ausgesprochen wird. Besonders Detective und Eccentric brauchen diese Grenze.
+
+Eine Wahrheit kann:
+
+- befreien,
+- bloßstellen,
+- schützen,
+- zerstören,
+- nur Valeries Selbstbild dienen,
+- Amalia gefährden,
+- Viktor zu berechtigter Kontrolle zwingen,
+- das Haus alarmieren.
+
+Die Frage lautet nicht nur: Stimmt es? Sondern auch:
+
+> Wer kann diese Wahrheit jetzt tragen?
+
+## 3.10 Freiheit vs. Verantwortung
+
+Valerie darf Formen brechen. Aber das Spiel darf Regelbruch nicht automatisch als Befreiung feiern.
+
+Beispiel: Kutsche mit Gepäck vorausschicken und zu Fuß nach Hohenreith kommen.
+
+Diese Handlung ist frei, eigenmächtig und stark. Sie ist aber auch sozial riskant. Sie erzeugt Zeichen, Gerüchte, Dienerwissen, Viktors Kontrollverlust und eine veränderte Lesart im Haus. Sie kann richtig sein, aber sie ist nicht unschuldig.
+
+Jede Freiheitsentscheidung muss fragen:
+
+> Wer zahlt den Preis dieser Freiheit außer Valerie?
+
+## 3.11 Form als Schutz und Gefängnis
+
+Form ist ambivalent. Sie ist nicht bloß Unterdrückung. Sie kann Menschen schützen, Scham verhindern, Gewalt dämpfen, Würde erhalten und gefährliche Wahrheit tragbar machen.
+
+Form wird moralisch problematisch, wenn sie nur noch Schweigen organisiert.
+
+Fassung ist daher nicht die brave Route und Eccentric nicht automatisch die mutige Wahrheit. Beide können moralisch richtig oder falsch sein.
+
+## 3.12 Die alte Ordnung und die moderne Ordnung
+
+Das Spiel darf nicht moderne Rationalität als gut und alte lokale Ordnung als böse setzen.
+
+- Hof, Bahn, Akte und Telegraph bringen Ordnung, aber auch Verschleierung.
+- Dorf, Kirche, Eiben, Wasser und alte Namen bringen Angst, aber auch Erinnerung.
+- Kirche kann schützen oder verdrängen.
+- Dorf kann bewahren oder zerstören.
+- Amt kann klären oder begraben.
+- Familie kann Heimat oder Gefängnis sein.
+
+Das moralische Universum ist dann ehrlich, wenn keine Ordnung automatisch recht hat.
+
+## 3.13 Konsequenzen für Valeries Routen
+
+Die sechs Routen sind sechs Arten, sich zu diesem Moral Universe zu verhalten:
+
+- **Fassung** schützt Form. Gut, wenn sie Würde bewahrt; schlecht, wenn sie Schweigen erzwingt.
+- **Detective** sucht Wahrheit. Gut, wenn sie Menschen ernst nimmt; schlecht, wenn sie Menschen zerlegt.
+- **Lover** erzeugt Nähe. Gut, wenn Wärme öffnet; schlecht, wenn Wirkung Wahrheit ersetzt.
+- **Sapphic** erkennt weibliche Gefangenschaft. Gut, wenn sie Raum gibt; schlecht, wenn sie Rettung zur Projektion macht.
+- **Careless** lässt Maske rutschen. Gut, wenn Menschlichkeit entsteht; schlecht, wenn andere die Folgen tragen müssen.
+- **Eccentric** bricht Form. Gut, wenn eine Lüge benannt werden muss; schlecht, wenn Wahrheit zur Selbstinszenierung wird.
+
+## 3.14 Konsequenzen für Figuren
+
+### Valerie
+
+Valerie muss als privilegierte und begrenzte Figur geschrieben werden. Sie darf nicht in eine pauschale Opferrolle kippen. Ihre Macht über Niedriggestellte, Bedienstete, Dorfleute und sozial schlechter geschützte Männer muss sichtbar bleiben.
+
+### Amalia
+
+Amalia ist nicht nur gefangen. Sie ist adelige Tochter mit symbolischem Wert, möglicher Heiratsmacht, emotionaler Macht über Familie und Haushalt und vielleicht einer besonderen Beziehung zur alten Ordnung. Dass andere für sie sprechen, nimmt ihr nicht jede Macht; es verformt sie.
+
+### Viktor
+
+Viktor ist nicht „der Mann als Kontrolle“. Er ist Amt, Schutz, Sicherheitslogik, Unterordnung unter Befehl und mögliche Loyalität. Seine Kontrolle kann falsch, berechtigt oder tragisch notwendig sein.
+
+### Hohenreith-Familie
+
+Das Haus darf nicht einfach als patriarchales Gefängnis geschrieben werden. Es muss zeigen, dass Familie, Stand, Ruf und Schutz reale Werte sind, die moralisch kippen können.
+
+### Dorf
+
+Das Dorf darf nicht bloß abergläubisch sein. Es ist Erinnerung und soziale Öffentlichkeit. Es kann bewahren und zerstören.
+
+### Kirche
+
+Die Kirche ist nicht nur Unterdrückung und nicht nur Trost. Sie ist Institution, Ritual, Deutung, Macht, Schutz und mögliche Verdrängung älterer Ordnungen.
+
+## 3.15 Szenenprüfung: Moral Universe
+
+Vor jeder größeren Szene prüfen:
+
+1. Welche Macht hat jede anwesende Figur tatsächlich?
+2. Welche Ohnmacht hat sie zugleich?
+3. Welche Rolle schützt sie?
+4. Welche Rolle hält sie oder andere fest?
+5. Was darf hier nicht ausgesprochen werden?
+6. Wer profitiert vom Schweigen?
+7. Wer würde durch Wahrheit gefährdet?
+8. Ist Fürsorge hier Schutz oder Besitz?
+9. Ist Form hier Würde oder Auslöschung?
+10. Welche moderne Schablone könnte die Szene verfälschen?
+
+# 4. Literarische Stilbibel
+
+Dieser Abschnitt ist Durchgang 3 der Rekonstruktion: Die bisher erarbeitete Stilrichtung wird nicht mehr nur als Prinzip beschrieben, sondern als konkrete Schreibreferenz für spätere Szenen ausgearbeitet. Dieser Teil ist für alle künftigen Textarbeiten verbindlich.
+
+## 4.1 Ziel der Prosa
+
+Die Prosa von *Eibenreith* soll wie ein literarischer historischer Roman funktionieren, nicht wie ein Adventure-Log, nicht wie ein Drehbuch und nicht wie ein Regeltext. Sie muss zugleich vier Aufgaben erfüllen:
+
+1. Sie trägt die Szene konkret und sinnlich.
+2. Sie zeigt Valeries soziale Intelligenz.
+3. Sie verkörpert Valeries weibliche, historische Lage.
+4. Sie lässt Unheimlichkeit aus konkreten Verschiebungen entstehen.
+
+Die Prosa soll nicht einfach „schön“ sein. Jede schöne Formulierung muss mindestens eine Funktion erfüllen: Atmosphäre, Körpergefühl, soziale Lesart, Charakterisierung, Bedrohung, historische Materialität oder spätere Bedeutung.
+
+Der Stilanker bleibt:
+
+> Der Zug lässt Wien hinter sich, doch Wien hat dich noch nicht freigegeben.
+
+Dieser Satz ist maßgeblich, weil er mehrere Dinge gleichzeitig tut: Er etabliert Ort und Bewegung, aber auch soziale Bindung, innere Spannung und metaphorische Bedeutung. Er erklärt nicht, sondern setzt ein Verhältnis.
+
+## 4.2 Dichte statt Länge oder Kürze
+
+Die frühere Rohfassung war oft zu langatmig. Eine reine Kürzung auf 50% war aber zu grob, weil der Text zugleich mehr leisten muss: Körper, Rolle, Kleidung, soziale Form und psychologische Spannung. Die Zielgröße ist daher nicht mathematisch, sondern funktional:
+
+- unnötige Wiederholung streichen,
+- abstrakte Erklärung durch konkrete Beobachtung ersetzen,
+- Haupttext auf Szene und Körper konzentrieren,
+- historische Belehrung ins Glossar auslagern,
+- Metaphern nur behalten, wenn sie Bedeutung tragen,
+- lieber ein präziser Satz als drei atmosphärische Variationen.
+
+Grobe Zielrichtung: häufig zwei Drittel bis drei Viertel der ursprünglichen Länge, aber mit höherer Informationsdichte.
+
+### Schlechte Verdichtung
+
+> Der Bahnhof wirkte unheimlich, weil die Leute Valerie anstarrten und sie spürte, dass hier etwas nicht stimmte.
+
+Problem: abstrakt, behauptend, psychologisch direkt, keine konkrete soziale Form.
+
+### Gute Verdichtung
+
+> Niemand starrte offen. Das wäre grob. Stattdessen entstanden kleine Leerstellen in den Bewegungen der Leute: ein Blick, der zu spät weiterwanderte; ein Schritt, der seine Richtung änderte; ein Gespräch, das plötzlich nur noch aus Endungen bestand.
+
+Warum besser: Die Szene zeigt Beobachtung, soziale Norm, Unheimlichkeit und Dorföffentlichkeit zugleich.
+
+## 4.3 Valeries Wahrnehmungsfilter
+
+Valerie beschreibt die Welt nicht neutral. Sie liest sie. Ihr Blick ist geprägt durch Hof, Wien, Geschlecht, Stand, Taktik, Verletzlichkeit und eine eingeübte Fähigkeit, soziale Räume schnell zu analysieren.
+
+Valerie bemerkt besonders:
+
+- wer spricht und wer schweigt,
+- wer warten muss,
+- wer tragen darf,
+- wer berühren darf,
+- welche Hilfe Dienst ist und welche Kontrolle,
+- welche Blicke höflich getarnt sind,
+- wo Form eine Wahrheit ersetzt,
+- wo ein Raum Menschen sortiert,
+- wo Frauen vertreten statt gehört werden,
+- wo ein Gegenstand mehr über Stand verrät als ein Satz.
+
+Valerie soll nicht permanent witzeln. Ihre Schärfe darf je nach Szene als Ironie, Kälte, Angst, Erschöpfung, Zärtlichkeit oder Selbstschutz erscheinen. In intimen Momenten mit Amalia kann derselbe Blick leiser werden. Bei Viktor kann er taktischer sein. Im Dorf kann er misstrauischer werden. Im Haus kann er gesellschaftlich präziser werden.
+
+## 4.4 Verkörperung als Pflicht
+
+Eine zentrale Korrektur der bisherigen Arbeit: Valerie darf nicht nur als scharfer Geist geschrieben werden. Der Spieler soll sich in einem weiblichen Körper des späten 19. Jahrhunderts befinden.
+
+Jede größere Szene soll mindestens einige dieser Ebenen berühren:
+
+- Kleidung: Korsett, Rock, Mantel, Hut, Handschuhe, Saum, Schuhe, Schleier.
+- Körper: Atem, Haltung, Müdigkeit, Hunger, Kälte, Hitze, Schwitzen, Druck, Gleichgewicht.
+- Oberfläche: Puder, Haar, Nadeln, Gesicht, Handschuhe, gesellschaftsfähige Erscheinung.
+- Beobachtung: Wer darf sehen? Wer darf helfen? Wer darf berühren? Wer darf kommentieren?
+- soziale Körperpolitik: Wann ist eine Frau zu laut, zu schnell, zu frei, zu körperlich, zu sichtbar?
+
+### Beispiel: zu abstrakt
+
+> Valerie spürte, dass sie beobachtet wurde.
+
+### Besser
+
+> Sie zog den Handschuh am Handgelenk glatt, obwohl dort nichts verrutscht war. Viktor sah nicht auf ihre Hände. Gerade deshalb spürte sie den Blick dort.
+
+Warum besser: Nervosität wird nicht behauptet, sondern über Körperhandlung und Beobachtung gezeigt.
+
+### Beispiel: weibliche historische Körperlichkeit
+
+> Eine Dame macht sich nicht nur frisch. Sie stellt die Oberfläche wieder her, an der andere ihre Urteile befestigen.
+
+Das ist ein Muster für *Eibenreith*: Eine konkrete Handlung wird gesellschaftlich gelesen, ohne aus der Figur herauszufallen.
+
+## 4.5 Gesellschaftskritik ohne modernen Essayton
+
+Valeries Kritik an Geschlecht, Stand, Amt und Kirche darf scharf sein, aber sie darf nicht wie ein heutiger politischer Kommentar klingen. Die Kritik muss in der historischen Stimme entstehen: aus Gegenständen, Ritualen, Umgangsformen, Unterschieden zwischen Sagen und Tun.
+
+### Zu modern / zu direkt
+
+> Valerie wusste, dass die patriarchale Gesellschaft Frauen systematisch unterdrückte.
+
+### Eibenreith-Stil
+
+> Menschen, die einer jungen Dame keinen nüchternen Verstand zutrauen wollen, sind oft erstaunlich bereit, ihre Nerven ernst zu nehmen. Eine saubere Schlussfolgerung wirkt anmaßend. Eine Vision wirkt standesgemäß rätselhaft.
+
+Warum besser: Die politische Beobachtung ist vorhanden, aber in Valeries Erfahrung, Sprache und sozialer Taktik verkörpert.
+
+### Zu belehrend
+
+> In der Monarchie waren Weisungen eine Möglichkeit, Befehle zu tarnen und Verantwortung zu vermeiden.
+
+### Besser als Glossar
+
+> Weisung: Ein Befehl, dem man die Uniform ausgezogen hat. Sehr nützlich, wenn Gehorsam erwartet wird, aber niemand persönlich Verantwortung tragen möchte.
+
+Regel: Wenn eine Erklärung historisch, begrifflich oder essayistisch wird, zuerst prüfen, ob sie ins Glossar gehört.
+
+## 4.6 Horror durch konkrete Unstimmigkeit
+
+Der Horror in *Eibenreith* soll nicht durch frühe Enthüllung entstehen, sondern durch Unstimmigkeit. Dinge sind nicht einfach gruselig. Sie sind sozial, religiös, räumlich oder körperlich falsch.
+
+Geeignete Muster:
+
+- Ein christliches Bild wirkt nicht mehr ganz christlich.
+- Eine Kirche wirkt wie Verteidigung, nicht wie Trost.
+- Ein Haus empfängt korrekt, aber nicht warm.
+- Ein Dorf sieht weg und beobachtet dadurch stärker.
+- Wasser ist hörbar, aber nicht sichtbar.
+- Ein Wegzeichen schaut nicht auf den Weg, sondern lauscht seitwärts.
+- Ein altes Wort wirkt wahrer als der offizielle Name.
+
+### Schlecht
+
+> Die Kirche sah böse aus.
+
+### Besser
+
+> Der Turm war nicht schlank genug, um in den Himmel zu zeigen. Er stand da wie eine Faust.
+
+### Schlecht
+
+> Valerie spürte eine übernatürliche Präsenz.
+
+### Besser
+
+> Der Nacken zog sich zusammen, bevor sie einen Grund dafür hatte. Nicht Furcht. Wiedererkennen wäre schlimmer.
+
+Regel: Das Unheimliche zuerst über Wahrnehmung schreiben. Erklärung später, wenn überhaupt.
+
+## 4.7 Metaphernregeln
+
+Metaphern sind erwünscht, aber sie müssen kontrolliert bleiben. *Eibenreith* darf metaphorisch dicht sein, soll aber nicht in beliebige Bildsprache kippen.
+
+Gute Metaphern in diesem Projekt:
+
+- verbinden soziale und sinnliche Wahrnehmung,
+- passen zur Epoche oder zu Valeries Erfahrungswelt,
+- machen einen Machtzusammenhang konkreter,
+- bleiben knapp,
+- verändern den Blick auf die Szene.
+
+Schlechte Metaphern:
+
+- sind nur dekorativ,
+- wirken zu modern,
+- erklären nichts über Szene oder Figur,
+- häufen sich ohne Rhythmus,
+- ersetzen konkrete Wahrnehmung.
+
+### Beispiel gut
+
+> Das Schreiben wartete im Ridikül, als hätte Papier Geduld.
+
+Warum gut: Es charakterisiert das Schreiben als aktiven Druck, ohne Magie zu behaupten.
+
+### Beispiel problematisch
+
+> Die Schatten krochen wie schwarze Gedanken durch das Dorf.
+
+Warum problematisch: generisch, horrorhaft ohne lokale oder soziale Spezifik.
+
+### Besser
+
+> In den schmalen Durchgängen zwischen Hof, Zaun und Holzstoß sammelte sich der Schatten zu früh.
+
+Warum besser: konkret, räumlich, unheimlich, ohne Klischee.
+
+## 4.8 Rhythmus und Absatzbau
+
+Ein typischer *Eibenreith*-Absatz sollte nicht nur beschreiben, sondern eine kleine Bewegung vollziehen. Häufige Absatzstruktur:
+
+1. konkrete Wahrnehmung,
+2. soziale Lesart,
+3. kleine Verschiebung ins Unheimliche oder Psychologische.
+
+Beispielstruktur:
+
+> Konkrete Wahrnehmung: Der Kutscher nimmt den Hut ab.
+> Soziale Lesart: Nicht zu tief, tief genug für Rang.
+> Verschiebung: Das Haus hat ihm genug gesagt, um dich einzuordnen.
+
+Diese Dreischrittigkeit muss nicht mechanisch in jedem Absatz erscheinen, ist aber ein gutes Grundmodell.
+
+## 4.9 Haupttext und Glossar zusammendenken
+
+Der Haupttext soll Szene, Körper, Stimmung und Entscheidung tragen. Das Glossar darf erklären, kommentieren, historisch einordnen und beißen.
+
+### Haupttext sollte leisten
+
+- Was passiert?
+- Was sieht/spürt Valerie?
+- Was ist sozial relevant?
+- Was ist unheimlich?
+- Welche Entscheidung steht an?
+
+### Glossar sollte leisten
+
+- Was bedeutet ein historischer Begriff?
+- Welche gesellschaftliche Funktion hat ein Gegenstand?
+- Welche bissige Interpretation hätte Valerie?
+- Welche Erklärung würde den Haupttext sonst überladen?
+
+### Beispiel
+
+Haupttext:
+
+> Im Ridikül ruht das versiegelte Schreiben des Hofes.
+
+Glossar:
+
+> Ridikül: Kleine Damenhandtasche oder Handarbeitsbeutel. Klein genug, um harmlos zu wirken, groß genug für Briefe, Schlüssel und jene Dinge, von denen Herren später behaupten, sie hätten nichts davon gewusst.
+
+Regel: Glossare dürfen umfangreicher sein, aber sie dürfen keine Puzzle-Lösungen verraten.
+
+## 4.10 Stil der Schauplätze
+
+### Wien
+
+Wien ist nicht nur Ort, sondern Bindung. Wien steht für:
+
+- Hof,
+- Kultur,
+- Ausbildung,
+- Beobachtung,
+- moderne Stadt,
+- gesellschaftliche Bühne,
+- Valeries gelernte Masken.
+
+Wien darf in der Anreise abwesend anwesend sein. Es bleibt an Valerie haften: Puder, Haltung, Sprache, Auftrag, Blick, Erwartungen.
+
+### Zug
+
+Der Zug ist erstes Ambiente, nicht bloß Verkehrsmittel. Er ist:
+
+- Salon,
+- Amtszimmer,
+- Maschine,
+- Klassensystem,
+- Beobachtungsraum,
+- Charaktergenerator.
+
+Im Zug sollen Bewegung und Enge zugleich spürbar sein.
+
+### Bahnhof
+
+Der Bahnhof ist öffentliche Sortierung. Er ist:
+
+- Übergang,
+- Bühne,
+- Klassenschnittstelle,
+- Dienstleistungsraum,
+- Ort, an dem Gepäck und Rang sichtbar werden.
+
+### Kutsche
+
+Die Kutsche ist Körpermaschine. Sie übersetzt Straße in Haltung, Landschaft in Nähe, Übergang in Erschütterung.
+
+### Dorf
+
+Das Dorf ist Beobachtung ohne Salon. Es ist:
+
+- Blick,
+- Gerücht,
+- Gedächtnis,
+- Wasser,
+- Kirche,
+- Schatten,
+- lokale Ordnung.
+
+### Hohenreith
+
+Hohenreith ist höfliche Kontrolle. Es ist:
+
+- Empfang,
+- Form,
+- Stand,
+- Hausgedächtnis,
+- Dienerschaft,
+- alte Grundlage unter neuer Fassade.
+
+Das Haus soll nicht sofort als verflucht erscheinen. Es soll zu korrekt sein.
+
+## 4.11 Satzzeichen und Syntax
+
+### Doppelpunkt
+
+Der Doppelpunkt ist geeignet für pointierte Klärung oder Verschiebung.
+
+Gut:
+
+> Drei Männer, drei Stände, drei verschiedene Arten von Nützlichkeit.
+
+Auch ohne Doppelpunkt funktioniert der Satz. Das ist oft besser als ein mechanischer Doppelpunkt.
+
+Gut mit Doppelpunkt:
+
+> Nun blieb nur noch die Frage: welche Frau würde in Hohenreith aussteigen?
+
+Schlecht:
+
+> Es blieb an dir haften: Puder am Kragen, Kohlenrauch im Haar, der Druck des Korsetts.
+
+Nicht falsch, aber leicht katalogartig. Besser ist oft ein selbständiger Satz:
+
+> Es blieb an dir haften. Puder am Kragen, Kohlenrauch im Haar, der Druck des Korsetts unter dem Reisekleid.
+
+### Semikolon
+
+Semikola nur verwenden, wenn der zweite Satz den ersten spiegelt, verschärft oder kippt. Kein Semikolon aus bloßem Bildungsdrang.
+
+Schwach:
+
+> Viktor saß im Abteil; seine Haltung war korrekt.
+
+Besser:
+
+> Viktor saß im Abteil, korrekt genug, um keinen Widerspruch hervorzurufen.
+
+### Gedankenstrich
+
+Der Gedankenstrich eignet sich für:
+
+- nachträgliche Korrektur,
+- innere Unterbrechung,
+- gesellschaftliche Präzisierung,
+- Valeries scharfen Nachsatz.
+
+Aber nicht in jedem zweiten Satz.
+
+### Klammern
+
+Klammern sollten im Haupttext selten sein. Sie wirken moderner und essayistischer. Besser sind Nebensätze oder Gedankenstriche.
+
+## 4.12 Verbotene oder gefährliche Stilbewegungen
+
+Vermeiden:
+
+- moderne Essaybegriffe im Erzählertext,
+- generische Horroradjektive,
+- zu viele abstrakte Substantive,
+- überlange Listen ohne Rhythmus,
+- Valeries Witz ohne Körper,
+- Erklärungen, die ins Glossar gehören,
+- Figuren als reine Themenvertreter,
+- Amalia als Fall,
+- Viktor als reinen Kontrollmann,
+- Dorf als bloße Kulisse.
+
+## 4.13 Schreibprüfung für neue Absätze
+
+Vor dem Einbau eines Absatzes prüfen:
+
+1. Ist mindestens eine konkrete Wahrnehmung enthalten?
+2. Gibt es eine soziale Lesart?
+3. Spürt man Valeries Körper oder Rolle?
+4. Ist die Sprache historisch plausibel genug?
+5. Wird etwas behauptet, das besser gezeigt werden könnte?
+6. Gehört Erklärung ins Glossar?
+7. Ist die Metapher funktional?
+8. Ist das Unheimliche konkret?
+9. Könnte der Absatz um ein Drittel kürzer und stärker sein?
+10. Klingt es nach Valerie, nicht nach heutiger Analyse?
+
+# 5. Choice- und Dialogstil
+
+Dieser Abschnitt ist der zweite ausgebaute Referenzteil. Er legt fest, wie Spielerentscheidungen, Dialogzeilen, Choice-Verben und Reaktionen in *Eibenreith* funktionieren. Choices sind nicht nur Interface-Elemente. Sie sind die primäre Form, in der Valerie ihre Maske wählt, soziale Beziehungen verändert und sich selbst definiert.
+
+## 5.1 Grundprinzip: Eine Choice ist eine soziale Handlung
+
+Eine Choice beantwortet nicht nur die Frage „Was sagt Valerie?“, sondern vor allem:
+
+- Was versucht Valerie mit diesem Satz?
+- Welche Rolle nimmt sie ein?
+- Wen schützt oder verletzt sie?
+- Welche Form wahrt oder bricht sie?
+- Was riskiert sie?
+- Wie soll der NPC sie danach lesen?
+
+Der sichtbare Choice-Text muss daher die soziale Absicht mitführen. Das geschieht durch das vorangestellte Verb.
+
+Standardform:
+
+```ink
+* [__Absichtsverb__: „Gesprochene Zeile.“ #id:... #route:...]
+```
+
+Beispiele:
+
+```ink
+* [__Wahre Form__: „Zurückhaltung ist nicht Schweigen, Herr Nowak.“]
+* [__Prüfe__: „Sie fragen nicht nach meinem Schweigen. Sie prüfen, ob ich mich führen lasse.“]
+* [__Entwaffne__: „Wenn dies bemerkenswerte Zurückhaltung ist, fürchte ich, Sie haben bisher vor allem Offiziere begleitet.“]
+* [__Benenne__: „Wien vertraut uns beiden so wenig, dass es das Misstrauen aufteilen musste.“]
+```
+
+Das Verb ist kein Ornament. Es ist die Kurzform der Handlung.
+
+## 5.2 Verbotene und schwache Choice-Verben
+
+Für Spieler-Dialoge vermeiden:
+
+- Sage,
+- Frage,
+- Antworte,
+- Sprich,
+- Erkläre,
+- Bemerkst du,
+- Sagst du.
+
+Diese Verben beschreiben Grammatik, nicht soziale Dynamik. Sie zeigen nicht, welche Valerie der Spieler wählt.
+
+### Schwaches Beispiel
+
+```ink
+* [Frage: „Was wissen Sie über Hohenreith?“]
+```
+
+Problem: Das Verb sagt nur, dass eine Frage gestellt wird. Es verrät keine Haltung.
+
+### Besser
+
+```ink
+* [__Prüfe__: „Was wissen Sie über Hohenreith, das nicht im Schreiben steht?“]
+```
+
+Jetzt ist klar: Valerie testet Lücke und Informationskontrolle.
+
+### Noch anders, andere Route
+
+```ink
+* [__Entwaffne__: „Ich nehme an, Hohenreith hat auch Eigenschaften, die man nicht in Schreiben setzt.“]
+```
+
+Jetzt ist klar: Valerie nutzt Charme und Umweg.
+
+### Eccentric-Variante
+
+```ink
+* [__Benenne__: „Das Schreiben erwähnt Hohenreith so vorsichtig, als hätte das Haus einen Anwalt.“]
+```
+
+Jetzt ist klar: Valerie verletzt die Form, um Wahrheit zu erzwingen.
+
+## 5.3 Das Absichtsverb muss präzise sein
+
+Das Verb darf nicht bloß ein anderes Wort für „sagen“ sein. Es muss die soziale, emotionale oder taktische Funktion benennen.
+
+Gute Absichtsverben:
+
+- Wahre Form
+- Zügle dich
+- Prüfe
+- Präzisiere
+- Entlarve
+- Setze nach
+- Entwaffne
+- Necke
+- Locke
+- Reize
+- Schone sie
+- Ermutige
+- Vertraue dich an
+- Verplappere dich
+- Überspiele
+- Platze heraus
+- Benenne
+- Trotze
+- Verweigere
+- Verletze die Form
+
+Schwache Verben:
+
+- Sage
+- Frage
+- Rede
+- Meinst du
+- Denkst du
+- Antwortest du
+- Kommentiere
+
+Grenzfälle:
+
+- „Erkläre“ ist meistens zu neutral, kann aber funktionieren, wenn das Erklären selbst eine soziale Handlung ist, z. B. gegenüber Amalia als bewusste Ermächtigung. Dann besser präziser: „Ermutige“, „Unterweise“, „Vertraue ihr an“, „Rüste sie aus“.
+- „Widersprich“ ist brauchbar, aber oft weniger stark als „Trotze“, „Präzisiere“, „Verweigere“ oder „Stelle richtig“.
+
+## 5.4 Choice-Verben nach Route
+
+Die folgenden Verbgruppen sind keine starre Liste, aber sie bilden die Referenz für spätere Choices. Neue Verben müssen in dieselbe Qualität fallen: soziale Handlung, emotionale Färbung, taktische Funktion.
+
+### 5.4.1 Fassung / route_composure
+
+Fassung bedeutet Form, Haltung, Selbstkontrolle, Schutz durch Korrektheit.
+
+Typische Verben:
+
+- Wahre Form
+- Zügle dich
+- Mäßige dich
+- Beruhige
+- Schone die Form
+- Halte Abstand
+- Richte dich auf
+- Ermahne höflich
+- Verdecke
+- Bewahre Haltung
+- Antworte korrekt
+
+Beispiel:
+
+```ink
+* [__Wahre Form__: „Zurückhaltung ist nicht Schweigen, Herr Nowak. Sie ist nur die Kunst, den richtigen Augenblick nicht zu verschenken.“]
+```
+
+Wirkung:
+
+- Valerie wirkt kontrolliert.
+- Viktor liest sie eher als zuverlässig.
+- Öffentliche Situationen stabilisieren sich.
+- Emotionale Nähe wird verzögert.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_composure)
+~ rel_inc(viktor_reliable)
+~ rel_inc(viktor_closed)
+```
+
+### 5.4.2 Detective / route_detective
+
+Detective bedeutet Analyse, Präzision, Mustererkennung, Kontrolle durch Verstehen.
+
+Typische Verben:
+
+- Prüfe
+- Präzisiere
+- Ordne
+- Entlarve
+- Setze nach
+- Rekonstruiere
+- Durchschaue
+- Verknüpfe
+- Isoliere
+- Stelle richtig
+- Vergleiche
+
+Beispiel:
+
+```ink
+* [__Prüfe__: „Sie fragen nicht nach meinem Schweigen. Sie prüfen, ob ich mich führen lasse.“]
+```
+
+Wirkung:
+
+- Valerie erkennt die Struktur hinter der Oberfläche.
+- Viktor kann Respekt entwickeln.
+- Menschen können sich ertappt oder benutzt fühlen.
+- Nähe wird leicht durch Analyse ersetzt.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_detective)
+~ rel_inc(viktor_insightful)
+~ rel_inc(viktor_bold)
+```
+
+### 5.4.3 Lover / route_lover
+
+Lover bedeutet Wirkung, Charme, Spannung lösen oder erzeugen, soziale Wärme, Flirt, bewusste Lesbarkeit.
+
+Typische Verben:
+
+- Entwaffne
+- Necke
+- Locke
+- Kokettiere
+- Reize
+- Spiele gekränkt
+- Verführe
+- Erwärme
+- Schmeichle
+- Lächle zu lange
+- Gib Nähe
+
+Beispiel:
+
+```ink
+* [__Entwaffne__: „Wenn dies bemerkenswerte Zurückhaltung ist, fürchte ich, Sie haben bisher vor allem Offiziere begleitet.“]
+```
+
+Wirkung:
+
+- Spannung wird gelöst oder verfeinert.
+- NPCs können offener werden.
+- Valerie kann als unzuverlässig, reizvoll oder gefährlich gelesen werden.
+- Öffentlichkeit kann aus Charme Gerücht machen.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_lover)
+~ rel_inc(viktor_open)
+~ rel_inc(viktor_unreliable)
+```
+
+### 5.4.4 Sapphic / route_sapphic
+
+Sapphic bedeutet weibliche Resonanz, Schutz, Erkennen, verletzliche Nähe, Solidarität gegen Formen, die Frauen vertreten statt hören.
+
+Typische Verben:
+
+- Schone sie
+- Erkenne sie
+- Ermutige
+- Vertraue dich an
+- Zeige dich
+- Schütze
+- Gib Raum
+- Sprich leiser
+- Teile Wahrheit
+- Löse sie aus der Form
+
+Beispiel:
+
+```ink
+* [__Schone sie__: „Sie müssen mir nichts sagen, was Ihnen später zur Last gelegt werden kann.“]
+```
+
+Wirkung:
+
+- Amalia kann sich als Subjekt erkannt fühlen.
+- Valerie riskiert echte Nähe.
+- Die Szene wird weniger taktisch, aber verletzlicher.
+- Das Haus könnte weibliche Verbundenheit als Gefahr lesen.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_sapphic)
+~ rel_inc(amalia_open)
+~ rel_inc(amalia_reliable)
+~ rel_inc(amalia_fascination)
+```
+
+### 5.4.5 Careless / route_careless
+
+Careless bedeutet entwaffnende Unbewachtheit, Verlegenheit, Kontrollverlust, zu schnelle Ehrlichkeit oder soziale Ungeschicklichkeit mit emotionaler Wahrheit.
+
+Typische Verben:
+
+- Verplappere dich
+- Überspiele
+- Platze heraus
+- Suche Halt
+- Entschärfe
+- Rutsche aus
+- Greife zu schnell
+- Entschuldige dich zu sehr
+- Lache falsch
+- Verrate dich
+
+Beispiel:
+
+```ink
+* [__Verplappere dich__: „Ich versuchte, die Polster nicht so zu berühren, als könnten sie mich anklagen.“]
+```
+
+Wirkung:
+
+- Valerie wirkt menschlicher und weniger kontrolliert.
+- Viktor kann Sorge oder Kontrollimpuls entwickeln.
+- Dienstboten und Dorf können Herkunft oder Unsicherheit wittern.
+- Nähe wird möglich, aber Form wird beschädigt.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_careless)
+~ rel_inc(viktor_concern)
+~ rel_inc(viktor_passive)
+```
+
+### 5.4.6 Eccentric / route_eccentric
+
+Eccentric bedeutet Regelbruch, Benennung, soziale Provokation, Wahrheitsstoß, Verweigerung der erwarteten Form.
+
+Typische Verben:
+
+- Benenne
+- Trotze
+- Verweigere
+- Verletze die Form
+- Stelle bloß
+- Schneide ab
+- Sprich zu klar
+- Zerlege die Höflichkeit
+- Verdrehe die Regel
+- Setze einen falschen Namen richtig
+
+Beispiel:
+
+```ink
+* [__Benenne__: „Zurückhaltung ist, was furchtsame Leute Gehorsam nennen, nachdem sie vergessen haben, wer sie dazu erzogen hat.“]
+```
+
+Wirkung:
+
+- Wahrheit wird sichtbar.
+- Viktor kann Alarm, Irritation oder Respekt entwickeln.
+- Das Haus kann Valerie als gefährlich markieren.
+- Amalia kann beeindruckt oder erschreckt sein.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_eccentric)
+~ rel_inc(viktor_bold)
+~ rel_inc(viktor_adversarial)
+```
+
+## 5.5 Route ist nicht Ergebnisgarantie
+
+Eine Route beschreibt Valeries Handlung, nicht automatisch den Erfolg. Eine Lover-Choice muss nicht verführen. Eine Detective-Choice muss nicht die Wahrheit finden. Eine Fassung-Choice muss nicht immer sozial optimal sein. Eine Sapphic-Choice muss nicht sicher sein.
+
+Beispiel:
+
+```ink
+* [__Schone sie__: „Sie müssen mir nichts sagen.“]
+```
+
+Mögliche Reaktionen:
+
+- Amalia öffnet sich.
+- Amalia fühlt sich durchschaut und schließt sich.
+- Eine ältere Verwandte deutet es als unpassende Intimität.
+- Viktor bemerkt, dass Valerie Amalia anders behandelt als andere.
+
+Die Route ist der Modus. Die Situation entscheidet die Wirkung.
+
+## 5.6 Nicht alle Routen müssen in jeder Szene erscheinen
+
+Eine Szene muss nicht zwanghaft sechs Choices enthalten. Die sechs Routen sind ein Ausdrucksfeld, kein Pflichtmenü. Eine Szene kann:
+
+- nur zwei sinnvolle Routen anbieten,
+- lokale Handlungen statt Dialogrouten anbieten,
+- eine Route bewusst ausschließen,
+- eine Route als schlechte, aber interessante Option zulassen,
+- Mischformen anbieten.
+
+Regel: Jede angebotene Choice muss in der Szene sozial plausibel sein. Keine Choice nur einbauen, um die Route abzudecken.
+
+## 5.7 Mischformen
+
+Mischformen sind erlaubt und oft interessant. Eine Zeile kann z. B. Detective und Sapphic zugleich sein, wenn Valerie eine soziale Struktur erkennt und Amalia schützt.
+
+Beispiel:
+
+```ink
+* [__Schone sie__: „Sie haben diese Antwort nicht zum ersten Mal geübt.“]
+```
+
+Das ist:
+
+- Detective, weil Valerie Muster erkennt.
+- Sapphic, wenn sie es sanft sagt und Amalia Raum gibt.
+- potenziell gefährlich, wenn es Amalia bloßstellt.
+
+Mögliche Updates können daher gemischt sein:
+
+```ink
+~ route_inc(route_sapphic)
+~ route_inc(route_detective)
+~ rel_inc(amalia_insightful)
+~ rel_inc(amalia_open)
+```
+
+Aber Updates müssen sparsam bleiben. Nicht jede Nuance braucht mehrere Zähler.
+
+## 5.8 Dialogreaktionen schreiben
+
+Eine gute Dialogreaktion besteht nicht nur aus einer Antwortzeile des NPCs. Sie zeigt:
+
+- was der NPC hört,
+- was er nicht ausspricht,
+- wie sich Macht verschiebt,
+- ob Öffentlichkeit reagiert,
+- ob Valeries Maske hält.
+
+### Schwache Reaktion
+
+```text
+Viktor nickt. „Das stimmt.“
+```
+
+Problem: keine soziale Bewegung.
+
+### Bessere Reaktion
+
+```text
+Viktor nickt nicht. Das wäre Zustimmung gewesen. Stattdessen faltet er die Zeitung zusammen, obwohl du sehr sicher bist, dass er nicht gelesen hat.
+
+„Eine mögliche Auslegung“, sagt er.
+```
+
+Warum besser: Körpersprache, Vermeidung, Kontrolle, Spannung.
+
+## 5.9 Dialog mit Viktor
+
+Viktor reagiert besonders auf:
+
+- Kontrollverlust,
+- Kompetenz,
+- Sicherheitsrisiko,
+- öffentliche Form,
+- Valeries Selbstgefährdung,
+- Widerspruch gegen seine Rolle.
+
+### Viktor und Fassung
+
+Er respektiert Fassung, weil sie Einsatzfähigkeit signalisiert. Zu viel Fassung kann ihn aber auf Distanz halten.
+
+Mögliche Wirkung:
+
+```ink
+~ rel_inc(viktor_reliable)
+~ rel_inc(viktor_closed)
+```
+
+### Viktor und Detective
+
+Er respektiert Analyse, besonders wenn sie Sicherheits- oder Amtslogik trifft. Er kann sich aber ertappt fühlen.
+
+```ink
+~ rel_inc(viktor_insightful)
+~ rel_inc(viktor_bold)
+```
+
+### Viktor und Lover
+
+Er kann auf Charme reagieren, aber er liest ihn auch als Unzuverlässigkeit oder Taktik.
+
+```ink
+~ rel_inc(viktor_open)
+~ rel_inc(viktor_unreliable)
+```
+
+### Viktor und Sapphic
+
+Er erkennt möglicherweise Valeries Schutzimpuls gegenüber Amalia, aber er versteht die emotionale Dimension nicht immer. Er kann Sorge oder Misstrauen entwickeln.
+
+```ink
+~ rel_inc(viktor_insightful)
+~ rel_inc(viktor_closed)
+```
+
+### Viktor und Careless
+
+Er wird besorgter und kontrollierender. Careless kann ihn menschlicher machen, aber auch seinen Aufsichtsmodus aktivieren.
+
+```ink
+~ rel_inc(viktor_concern)
+~ rel_inc(viktor_control)
+```
+
+### Viktor und Eccentric
+
+Er erlebt Regelbruch als Risiko. Manchmal respektiert er Mut; oft registriert er Kontrollverlust.
+
+```ink
+~ rel_inc(viktor_adversarial)
+~ rel_inc(viktor_loss_of_control)
+~ rel_inc(viktor_irritation)
+```
+
+## 5.10 Dialog mit Amalia
+
+Amalia darf nicht wie eine Informationsquelle geschrieben werden. Ihre Dialoge sollen immer die Frage berühren: Wird sie gerade gesehen, benutzt, geschont, geprüft oder befreit?
+
+### Amalia und Fassung
+
+Valerie wirkt sicher und bewundernswert, aber vielleicht auch wie eine weitere Erwachsene, die Form beherrscht.
+
+Mögliche Wirkung:
+
+```ink
+~ rel_inc(amalia_reliable)
+~ rel_inc(amalia_closed)
+```
+
+### Amalia und Detective
+
+Amalia kann sich ernst genommen fühlen, wenn Valerie genau zuhört. Sie kann sich aber auch analysiert fühlen.
+
+```ink
+~ rel_inc(amalia_insightful)
+~ rel_inc(amalia_alarm)
+```
+
+### Amalia und Lover
+
+Nicht als bloßer Flirt behandeln. Bei Amalia kann Lover Wärme, Charme, Bewunderung und gefährliches Funkeln bedeuten. Die Szene muss Altersnähe, Stand, Risiko und soziale Unsichtbarkeit beachten.
+
+```ink
+~ rel_inc(amalia_fascination)
+~ rel_inc(amalia_desire)
+```
+
+### Amalia und Sapphic
+
+Kernroute für echte Nähe. Valerie erkennt Amalia als Subjekt und nicht als familiäres Problem.
+
+```ink
+~ rel_inc(amalia_open)
+~ rel_inc(amalia_reliable)
+~ rel_inc(amalia_empowerment)
+```
+
+### Amalia und Careless
+
+Valeries Kontrollverlust kann Amalia zeigen, dass Valerie nicht nur Rolle ist. Das kann Nähe erzeugen.
+
+```ink
+~ rel_inc(amalia_open)
+~ rel_inc(amalia_fascination)
+```
+
+### Amalia und Eccentric
+
+Valeries Regelbruch kann Amalia beeindrucken, aber auch erschrecken. Besonders gefährlich, wenn Valerie soziale Schutzmechanismen durchbricht, die Amalia noch braucht.
+
+```ink
+~ rel_inc(amalia_bold)
+~ rel_inc(amalia_alarm)
+```
+
+## 5.11 Dialog mit Dorf und Dienerschaft
+
+Dorf und Dienerschaft reagieren weniger auf die wörtliche Aussage als auf Form, Rang und Abweichung.
+
+Wichtig:
+
+- Zu viel Freundlichkeit kann als Schwäche, Taktik oder Unordnung gelesen werden.
+- Zu direkte Anweisung kann nützlich, aber unweiblich oder unstandesgemäß wirken.
+- Selbsthilfe bei Gepäck oder Ausstieg kann Herkunft verraten.
+- Korrekte Distanz kann Schutz sein, aber auch Kälte.
+
+Beispiel für soziale Mikroentscheidung:
+
+```ink
+* [__Gewähre__: Viktor die Hand und dem Kutscher den Dank.]
+```
+
+Diese Choice ist nicht banal. Sie ordnet drei Männer, drei Stände und Valeries Rolle zueinander.
+
+## 5.12 Choice-Texte und gesprochene Zeilen
+
+Wenn eine Choice eine gesprochene Zeile enthält, steht sie in Anführungszeichen. Wenn sie eine Handlung ist, steht keine gesprochene Zeile darin.
+
+Dialogchoice:
+
+```ink
+* [__Prüfe__: „Sie setzen sich nie mit dem Rücken zur Tür.“]
+```
+
+Handlungschoice:
+
+```ink
+* [__Warte__: Bis Viktor seine Hand anbietet.]
+```
+
+Gemischte Choice:
+
+```ink
+* [__Verfüge__: Die Kutsche mit Gepäck und Nachricht vorausschicken.]
+```
+
+Die Ausgabe kann danach eine gesprochene Zeile enthalten:
+
+```ink
+„Die Kutsche fährt voraus“, sagst du. „Mit dem Gepäck. Und mit einer Nachricht, dass wir nachkommen.“
+```
+
+## 5.13 Choice-Länge
+
+Choice-Texte sollen klar und nicht zu lang sein. Die Choice beschreibt die Handlung; die literarische Ausarbeitung folgt nach Auswahl.
+
+Zu lang:
+
+```ink
+* [__Prüfe__: Viktor sehr genau ansehen und daraus schließen, dass er nicht nur Sekretär ist, sondern wahrscheinlich eine militärische oder polizeiliche Aufsichtsfunktion hat.]
+```
+
+Besser:
+
+```ink
+* [__Prüfe__: Viktors Rolle hinter der Sekretärsmaske.]
+```
+
+Danach im Branch ausführen.
+
+## 5.14 Tasten- und Choice-Konventionen
+
+Choice-Tags können Tastenkürzel enthalten. Buchstaben dürfen Textadventure-Konventionen folgen:
+
+- `#key:l` für Schaue,
+- `#key:x` für Untersuche,
+- `#key:z` für Warten / Weiter / zögernde Form, wenn passend,
+- weitere nur konsistent und sparsam.
+
+Nicht jede Choice braucht ein Tastenkürzel. Pflicht- und Standardhandlungen profitieren stärker davon als komplexe Dialogoptionen.
+
+## 5.15 Choice-Metadaten
+
+Für Engine-Filterung sollen Choices Tags erhalten:
+
+```ink
+#id:stable_unique_id
+#bucket:moment|room|episode|game|travel|exit
+#priority:0-100
+#route:...
+#required
+#repeat:once_offered|once_chosen|sticky
+#auto
+#auto(2)
+#auto[keyword]
+#auto[keyword](2)
+```
+
+Das `#id` bleibt stabil, auch wenn sichtbarer Text überarbeitet wird.
+
+`#auto` markiert eine normale Ink-Choice ohne sichtbaren Choice-Text, die von der UI automatisch gewählt werden darf. Die Ink-Seite zählt keine Auto-Turns und setzt keine Auto-Flags. Ein Zahlenparameter begrenzt die Auslösung auf mindestens diese Anzahl UI-Choice-Turns seit dem letzten passenden Auto-Trigger. Ohne Keyword gilt die Begrenzung global; mit Keyword gilt sie nur für Auto-Trigger desselben Keywords. Beispiel: `#auto[tunnel](2)` wartet zwei Choice-Turns seit dem letzten `tunnel`-Auto, blockiert aber keinen `#auto[religion]`.
+
+## 5.16 Do / Don't für Dialogchoices
+
+### Do
+
+- Absichtsverb verwenden.
+- Gesprochene Zeile in Anführungszeichen setzen.
+- Route und soziale Wirkung klar machen.
+- Reaktion mit Körpersprache oder sozialer Verschiebung zeigen.
+- Bei Amalia Beziehung vor Information priorisieren.
+- Bei Viktor Kontrolle und Professionalität mitdenken.
+- Bei Dienerschaft Stand und Beobachtung mitdenken.
+
+### Don't
+
+- neutrale Sprechverben verwenden,
+- jede Szene mit allen sechs Routen überladen,
+- Choice-Text zu lang machen,
+- Reaktion als reine Antwortzeile schreiben,
+- Valerie automatisch sprechen lassen, wo der Spieler wählen soll,
+- Amalia zu einer Hinweisquelle reduzieren,
+- soziale Konsequenzen ignorieren.
+
+## 5.17 Prüfverfahren für neue Choices
+
+Vor Einbau einer Choice prüfen:
+
+1. Welches Absichtsverb trägt sie?
+2. Welche Route oder Mischform ist gemeint?
+3. Ist die Handlung sozial plausibel?
+4. Ist die Zeile historisch und charakterlich stimmig?
+5. Was riskiert Valerie damit?
+6. Wer beobachtet die Choice?
+7. Welche Relationship-Werte können sich ändern?
+8. Gibt es einen späteren Callback?
+9. Ist der Choice-Text kurz genug?
+10. Ist die Reaktion mehr als bloße Antwort?
+
+# 6. Valeries sechs Ausdrucksrouten
+
+Dieser Abschnitt beschreibt Valeries sechs Ausdrucksrouten als dramaturgische, soziale und mechanische Module. Die Routen sind keine Klassen, keine moralischen Pfade und keine festen Persönlichkeiten. Sie sind wiederkehrende Strategien, mit denen Valerie in einer Welt handelt, die sie fortwährend liest, bewertet und begrenzt.
+
+Eine Route bedeutet nicht: „Valerie ist so.“ Sie bedeutet: „Valerie benutzt jetzt diese Maske, diesen Muskel, diese Überlebensform.“ Ein Spieler kann Routen mischen. Das Spiel soll keine Route als objektiv richtige Variante behandeln.
+
+## 6.1 Gemeinsame Regeln aller Routen
+
+Alle Routen müssen gleichzeitig drei Ebenen erfüllen:
+
+1. **Psychologische Ebene**
+ Was schützt Valerie an sich? Was lässt sie zu? Was verbirgt sie?
+
+2. **Soziale Ebene**
+ Wie wird sie von Viktor, Amalia, Haus, Dorf oder Dienerschaft gelesen?
+
+3. **Mechanische Ebene**
+ Welche Route-, Relationship- oder State-Werte können dadurch verändert werden?
+
+Eine Route ist ein Modus, kein Erfolg. Eine gute Fassung-Choice kann scheitern, wenn das Haus bereits gegen Valerie voreingenommen ist. Eine Detective-Choice kann Amalia verletzen. Eine Careless-Choice kann echte Nähe schaffen. Eine Eccentric-Choice kann eine Wahrheit sagen und trotzdem taktisch katastrophal sein.
+
+## 6.2 Fassung / `route_composure`
+
+### Kernformel
+
+**Form als Waffe. Haltung als Rüstung. Selbstbeherrschung als Handlung.**
+
+Fassung ist Valeries Fähigkeit, gesellschaftliche Form so präzise zu tragen, dass sie daraus Handlungsspielraum gewinnt. Diese Route ist nicht Unterwerfung und nicht Passivität. Sie ist die Kunst, in einer Welt zu wirken, in der sichtbarer Kontrollverlust gegen Frauen verwendet werden kann.
+
+### Psychologischer Kern
+
+Fassung schützt Valerie vor Bloßstellung. Sie hält Schmerz, Angst, Wut oder Unsicherheit in einer Form, die andere nicht gegen sie verwenden können. Sie erlaubt ihr, eine Situation zu überstehen, ohne sich selbst zu verraten.
+
+Fassung kann aber auch Selbstentfremdung sein. Wenn Valerie immer nur Haltung ist, wird sie für andere unlesbar. Besonders Amalia kann dann zwar bewundern, aber nicht unbedingt vertrauen.
+
+### Soziale Funktion
+
+Fassung wirkt in:
+
+- Adelsräumen,
+- Bahnhöfen,
+- Tischszenen,
+- formellen Begrüßungen,
+- Gesprächen mit Viktor,
+- Situationen, in denen Dienstboten, Dorf oder Haus beobachten.
+
+Sie erzeugt:
+
+- Respekt,
+- Ruhe,
+- korrekte Lesbarkeit,
+- weniger Angriffsfläche,
+- aber auch Distanz.
+
+### Typische Verben
+
+- Wahre Form
+- Zügle dich
+- Mäßige dich
+- Bewahre Haltung
+- Beruhige
+- Schone die Form
+- Halte Abstand
+- Richte dich auf
+- Verberge
+- Antworte korrekt
+- Lass nichts fallen
+
+### Typische Sätze
+
+> „Zurückhaltung ist nicht Schweigen, Herr Nowak. Sie ist nur die Kunst, den richtigen Augenblick nicht zu verschenken.“
+
+> „Dann wollen wir dafür sorgen, dass der Umweg Absicht war.“
+
+> „Ein Zeichen am Weg. Ich möchte es nicht voreilig benennen.“
+
+### Typische Körperlichkeit
+
+- Handschuhe glätten,
+- aufrechte Haltung,
+- kontrollierter Atem,
+- zu knappe, präzise Gesten,
+- keine überflüssige Bewegung,
+- Blick wird gehalten, aber nicht herausfordernd.
+
+### Wirkung auf Viktor
+
+Viktor respektiert Fassung, weil sie Einsatzfähigkeit signalisiert. Sie beruhigt seinen professionellen Kontrollinstinkt. Zugleich kann sie ihn auf Distanz halten.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_composure)
+~ rel_inc(viktor_reliable)
+~ rel_inc(viktor_closed)
+```
+
+### Wirkung auf Amalia
+
+Amalia kann Fassung bewundern, weil Valerie dadurch frei, sicher und erwachsen wirkt. Gleichzeitig kann Fassung Amalia an die Erwachsenen erinnern, die über sie sprechen, ohne sie zu hören.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_composure)
+~ rel_inc(amalia_reliable)
+~ rel_inc(amalia_closed)
+```
+
+### Wirkung auf Haus und Dorf
+
+Das Haus liest Fassung als Stand, Disziplin und Erziehbarkeit. Das Dorf liest Fassung als Fremdheit, möglicherweise als Hochmut, aber auch als Stärke.
+
+### Risiken
+
+- emotionale Distanz,
+- Selbstverhärtung,
+- Amalia fühlt sich nicht gesehen,
+- Valerie schützt Form, obwohl Wahrheit eine Verletzung der Form bräuchte.
+
+### Schlechte Fassung-Choice
+
+```ink
+* [__Wahre Form__: „Das ist unangemessen.“]
+```
+
+Zu allgemein. Kein sozialer Präzisionsgewinn.
+
+### Bessere Fassung-Choice
+
+```ink
+* [__Wahre Form__: „Ich nehme an, diese Frage war für den Hausherrn bestimmt und nur versehentlich an mich geraten.“]
+```
+
+Warum besser: Valerie wahrt Form und weist zugleich Grenze und Rangordnung zurecht.
+
+## 6.3 Detective / `route_detective`
+
+### Kernformel
+
+**Verstehen als Kontrolle. Präzision als Selbstbehauptung.**
+
+Detective ist Valeries Fähigkeit, Muster zu erkennen, Auslassungen zu lesen und soziale oder materielle Widersprüche zu isolieren. Diese Route ist nicht bloß Kriminalermittlung. Sie ist die Weigerung, sich mit der offiziellen Formulierung zufriedenzugeben.
+
+### Psychologischer Kern
+
+Detective schützt Valerie vor Ohnmacht. Wenn sie etwas benennen, sortieren oder rekonstruieren kann, wird es weniger überwältigend. Sie gewinnt Handlungsspielraum, indem sie die Welt in prüfbare Teile zerlegt.
+
+Die Gefahr: Menschen werden zu Fällen. Nähe wird zu Diagnose. Amalia kann sich nicht verstanden, sondern durchschaut fühlen.
+
+### Soziale Funktion
+
+Detective wirkt besonders in:
+
+- Gesprächen mit Viktor,
+- Auswertung von Schreiben und Memoranden,
+- Beobachtung von Haus und Dorf,
+- Gesprächen mit Dienstboten,
+- Widersprüchen zwischen offizieller und lokaler Version.
+
+Sie erzeugt:
+
+- Respekt bei rationalen Figuren,
+- Unruhe bei verschleiernden Figuren,
+- schnelle Orientierung,
+- aber auch Verteidigungshaltung bei verletzlichen Figuren.
+
+### Typische Verben
+
+- Prüfe
+- Präzisiere
+- Ordne
+- Entlarve
+- Setze nach
+- Rekonstruiere
+- Durchschaue
+- Verknüpfe
+- Isoliere
+- Vergleiche
+- Stelle richtig
+- Lies die Lücke
+
+### Typische Sätze
+
+> „Sie fragen nicht nach meinem Schweigen. Sie prüfen, ob ich mich führen lasse.“
+
+> „Ein Grenz- oder Wegzeichen. Ich wüsste gern, wohin dieser Pfad führt.“
+
+> „Wer am Fenster stand, wusste es schon vor dem Diener.“
+
+### Typische Körperlichkeit
+
+- Blick folgt Reihenfolgen,
+- Kopf leicht geneigt,
+- weniger Bewegung, mehr Fixierung,
+- Notizbuch oder Gedächtnis wird wichtig,
+- Valerie sieht Details, die andere als Dekor behandeln.
+
+### Wirkung auf Viktor
+
+Viktor respektiert Detective, wenn Valerie Sicherheitslogik, Lücken oder Widersprüche erkennt. Er kann sich aber ertappt fühlen, wenn sie seine Funktion zu klar benennt.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_detective)
+~ rel_inc(viktor_insightful)
+~ rel_inc(viktor_bold)
+```
+
+### Wirkung auf Amalia
+
+Detective kann Amalia ernst nehmen, indem Valerie ihr genau zuhört und nicht für sie spricht. Es kann aber auch wie ein Verhör wirken.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_detective)
+~ rel_inc(amalia_insightful)
+~ rel_inc(amalia_alarm)
+```
+
+### Wirkung auf Haus und Dorf
+
+Das Haus kann Detective als gefährlich lesen, weil Valerie nicht nur Formen akzeptiert. Das Dorf kann Detective respektieren, wenn sie nicht überheblich wirkt, oder sich verschließen, wenn sie zu amtlich fragt.
+
+### Risiken
+
+- Überanalyse,
+- emotionale Kälte,
+- Menschen werden Beweisstücke,
+- Amalia fühlt sich geprüft statt gesehen,
+- Valerie unterschätzt symbolische oder emotionale Wahrheit.
+
+### Schlechte Detective-Choice
+
+```ink
+* [__Prüfe__: „Gibt es Spuren?“]
+```
+
+Zu generisch, zu krimimäßig.
+
+### Bessere Detective-Choice
+
+```ink
+* [__Prüfe__: „Wer hat zuerst entschieden, dass man darüber nicht beim Abendessen spricht?“]
+```
+
+Warum besser: Es fragt nach sozialer Kontrolle statt nur nach Spuren.
+
+## 6.4 Lover / `route_lover`
+
+### Kernformel
+
+**Wirkung als Werkzeug. Nähe als Taktik. Charme als Zugang.**
+
+Lover ist Valeries Fähigkeit, soziale Wärme, Charme, Blick, Rhythmus und kleine Irritationen zu verwenden. Diese Route ist nicht nur romantisch und nicht bloß heterosexuell. Sie ist ein Modus der Wirkung.
+
+### Psychologischer Kern
+
+Lover erlaubt Valerie, Kontrolle nicht durch Abstand, sondern durch Anziehung zu gewinnen. Sie kann Menschen öffnen, entschärfen, verunsichern oder näherziehen.
+
+Die Gefahr: Wirkung wird Manipulation. Valerie kann sich selbst in der Rolle verlieren, die sie spielt. Andere können ihr Charmieren als Unzuverlässigkeit, Koketterie oder moralische Gefahr lesen.
+
+### Soziale Funktion
+
+Lover wirkt besonders in:
+
+- Gesprächen mit Viktor,
+- halböffentlichen Salonszenen,
+- Momenten mit Spannung,
+- Situationen, in denen Wärme Türen öffnet,
+- Begegnungen, in denen Distanz zu starr wäre.
+
+### Typische Verben
+
+- Entwaffne
+- Necke
+- Locke
+- Kokettiere
+- Reize
+- Spiele gekränkt
+- Verführe
+- Erwärme
+- Schmeichle
+- Lächle zu lange
+- Gib Nähe
+- Lass ihn/sie näher kommen
+
+### Typische Sätze
+
+> „Wenn dies bemerkenswerte Zurückhaltung ist, fürchte ich, Sie haben bisher vor allem Offiziere begleitet.“
+
+> „Wie bedauerlich. Sie wirkten so berufsmäßig beruhigend.“
+
+> „Wie glücklich, dass ich mehrere Arten des Schweigens eingepackt habe.“
+
+### Typische Körperlichkeit
+
+- Blick wird etwas länger gehalten,
+- Stimme wird wärmer,
+- Lächeln erscheint als soziale Handlung,
+- eine kleine Verzögerung,
+- Nähe wird angeboten, aber nicht verschenkt.
+
+### Wirkung auf Viktor
+
+Viktor kann auf Lover reagieren, aber er liest es zugleich als Risiko. Er kann offener werden, aber Valerie als weniger zuverlässig oder taktisch gefährlich einstufen.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_lover)
+~ rel_inc(viktor_open)
+~ rel_inc(viktor_unreliable)
+```
+
+### Wirkung auf Amalia
+
+Bei Amalia ist Lover heikel. Es darf nicht mechanisch als Flirt abgespult werden. Es kann Wärme, Bewunderung, sichtbare Weiblichkeit, gefährliches Funkeln oder eine erste Ahnung von Begehren bedeuten. Die Szene muss Amalias Lage, Alter, Stand und Unerfahrenheit respektieren.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_lover)
+~ rel_inc(amalia_fascination)
+~ rel_inc(amalia_desire)
+```
+
+### Wirkung auf Haus und Dorf
+
+Das Haus kann Lover als unpassende Koketterie, gefährliche Anziehung oder taktisches Talent lesen. Das Dorf kann zu warme Freundlichkeit als Schwäche, Unordnung oder Provokation deuten.
+
+### Risiken
+
+- Gerücht,
+- falsche Nähe,
+- moralische Lesbarkeit,
+- Viktor zweifelt an Zuverlässigkeit,
+- Amalia verwechselt Wirkung mit Wahrheit,
+- Valerie manipuliert, wo sie eigentlich ehrlich sein möchte.
+
+### Schlechte Lover-Choice
+
+```ink
+* [__Flirte__: „Sie sehen gut aus.“]
+```
+
+Zu platt, zu modern, zu direkt.
+
+### Bessere Lover-Choice
+
+```ink
+* [__Entwaffne__: „Sie haben eine beruhigende Art, Gefahren aufzuzählen, Herr Nowak.“]
+```
+
+Warum besser: Es ist Flirt, Beobachtung und Taktik zugleich.
+
+## 6.5 Sapphic / `route_sapphic`
+
+### Kernformel
+
+**Weibliche Resonanz. Erkennen statt Erklären. Schutz ohne Besitz.**
+
+Sapphic ist die Route, in der Valerie andere Frauen nicht als Rollen, Fälle oder Hindernisse liest, sondern als Subjekte. Besonders gegenüber Amalia ist diese Route zentral. Sie muss nicht sofort erotisch sein, aber sie kann erotische, intime oder emotional gefährliche Ladung tragen.
+
+### Psychologischer Kern
+
+Sapphic ist Valeries Sehnsucht, nicht nur zu wirken, sondern erkannt zu werden und selbst zu erkennen. Sie erlaubt ihr, die weibliche Isolation anderer zu spüren, weil sie ihre eigene kennt.
+
+Die Gefahr: echte Nähe bedroht Valeries Maske. Außerdem kann Schutz in Bevormundung kippen, wenn Valerie glaubt, Amalia besser zu verstehen als Amalia sich selbst.
+
+### Soziale Funktion
+
+Sapphic wirkt besonders in:
+
+- privaten Gesprächen mit Amalia,
+- Momenten, in denen Frauen von Erwachsenen oder Männern vertreten werden,
+- Situationen weiblicher Scham, Angst oder Sehnsucht,
+- Blicken, die nicht öffentlich gelesen werden dürfen,
+- Szenen, in denen Valerie eine andere Frau nicht ausliefert.
+
+### Typische Verben
+
+- Schone sie
+- Erkenne sie
+- Ermutige
+- Vertraue dich an
+- Zeige dich
+- Schütze
+- Gib Raum
+- Sprich leiser
+- Teile Wahrheit
+- Löse sie aus der Form
+- Lass sie antworten
+- Stelle dich neben sie
+
+### Typische Sätze
+
+> „Sie müssen mir nichts sagen, was Ihnen später zur Last gelegt werden kann.“
+
+> „Wenn Amalia ihr ganzes Leben unter diesem Blick gelebt hat, beginne ich zu verstehen, weshalb man nach Geistern sandte.“
+
+> „Vielleicht ist nicht die Frage, ob Sie frei sind. Vielleicht ist die Frage, wer bemerken würde, wenn Sie es wären.“
+
+### Typische Körperlichkeit
+
+- Stimme wird leiser, nicht weicher im kitschigen Sinn,
+- Blick wird angeboten, nicht erzwungen,
+- Valerie lässt eine Pause stehen,
+- sie nimmt eine Frau nicht aus der Öffentlichkeit heraus, ohne ihr Wahl zu lassen,
+- kleine Gesten schützen vor Bloßstellung.
+
+### Wirkung auf Viktor
+
+Viktor kann erkennen, dass Valerie Amalia anders behandelt als andere. Je nach Situation kann das als Einsicht, Risiko oder schwer zu kontrollierende Bindung erscheinen.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_sapphic)
+~ rel_inc(viktor_insightful)
+~ rel_inc(viktor_closed)
+```
+
+### Wirkung auf Amalia
+
+Dies ist Amalias wichtigste Nähe-Route. Sie kann Vertrauen, Faszination, Empowerment oder Begehren erzeugen. Sie kann aber auch Alarm auslösen, wenn Valerie zu schnell zu viel erkennt.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_sapphic)
+~ rel_inc(amalia_open)
+~ rel_inc(amalia_reliable)
+~ rel_inc(amalia_fascination)
+~ rel_inc(amalia_empowerment)
+```
+
+### Wirkung auf Haus und Dorf
+
+Das Haus kann weibliche Nähe als Unordnung lesen, besonders wenn sie Amalia aus der familialen Deutung löst. Das Dorf kann Frauenbündnisse anders lesen als das Haus, je nach lokaler Tradition und Gerücht.
+
+### Risiken
+
+- Nähe wird sichtbar,
+- Valerie verwechselt Resonanz mit Rettungsauftrag,
+- Amalia idealisiert Valerie,
+- das Haus reagiert repressiv,
+- echte Verletzlichkeit destabilisiert Valeries Maske.
+
+### Schlechte Sapphic-Choice
+
+```ink
+* [__Schone sie__: „Ich verstehe genau, wie Sie sich fühlen.“]
+```
+
+Zu direkt, besitzergreifend, psychologisch platt.
+
+### Bessere Sapphic-Choice
+
+```ink
+* [__Gib Raum__: „Sie müssen nicht sofort die richtige Antwort finden. Hier hört gerade niemand außer mir.“]
+```
+
+Warum besser: Valerie nimmt Amalia ernst, ohne ihre Gefühle zu behaupten.
+
+## 6.6 Careless / `route_careless`
+
+### Kernformel
+
+**Kontrollverlust als Wahrheit. Verlegenheit als Zugang. Menschlichkeit als Risiko.**
+
+Careless ist die Route, in der Valerie nicht vollständig funktioniert. Sie sagt etwas zu schnell, entschuldigt sich zu sehr, greift falsch nach einem Koffer, lacht im falschen Moment oder verrät einen echten Affekt.
+
+Careless ist nicht Dummheit. Es ist die Stelle, an der die Maske rutscht.
+
+### Psychologischer Kern
+
+Careless kann entstehen aus Müdigkeit, Verlegenheit, Herkunft, Hunger, körperlicher Überforderung oder einem Moment echter Betroffenheit. Diese Route erlaubt menschliche Nähe, aber sie beschädigt Kontrolle.
+
+### Soziale Funktion
+
+Careless wirkt besonders in:
+
+- Übergängen,
+- körperlich anstrengenden Szenen,
+- Dienstbotensituationen,
+- Momenten mit Hunger oder Müdigkeit,
+- Gesprächen, in denen Valerie zu schnell ehrlich wird,
+- Szenen, in denen ihre Herkunft durchscheinen kann.
+
+### Typische Verben
+
+- Verplappere dich
+- Überspiele
+- Platze heraus
+- Suche Halt
+- Entschärfe
+- Rutsche aus
+- Greife zu schnell
+- Entschuldige dich zu sehr
+- Lache falsch
+- Verrate dich
+- Mach dich kleiner
+
+### Typische Sätze
+
+> „Ich versuchte, die Polster nicht so zu berühren, als könnten sie mich anklagen.“
+
+> „Ich mag es nicht, von Leuten beobachtet zu werden, die sich nicht vorstellen.“
+
+> „Sie dürfen jetzt sagen, dass Sie mir davon abgeraten hätten.“
+
+### Typische Körperlichkeit
+
+- zu schnelle Handbewegung,
+- falsches Lachen,
+- Griff an Handschuh, Saum oder Tasche,
+- Erröten oder Atembruch,
+- ein Schritt ohne perfekte Berechnung,
+- Blick weicht aus und kehrt zurück.
+
+### Wirkung auf Viktor
+
+Viktor reagiert auf Careless häufig mit Sorge und Kontrolle. Er kann menschlicher werden, aber auch stärker in seine Aufsichtsrolle fallen.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_careless)
+~ rel_inc(viktor_concern)
+~ rel_inc(viktor_control)
+```
+
+### Wirkung auf Amalia
+
+Careless kann Amalia zeigen, dass Valerie nicht nur Rolle ist. Gerade kleine Unvollkommenheit kann Nähe erzeugen.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_careless)
+~ rel_inc(amalia_open)
+~ rel_inc(amalia_fascination)
+```
+
+### Wirkung auf Haus und Dorf
+
+Das Haus kann Careless als Mangel an Form lesen. Das Dorf kann dadurch Herkunft, Echtheit oder Schwäche erkennen. Dienerschaft bemerkt Careless besonders, weil sie mit praktischen Gesten vertraut ist.
+
+### Risiken
+
+- soziale Form wird beschädigt,
+- Herkunft wird sichtbar,
+- Viktor kontrolliert stärker,
+- das Haus unterschätzt Valerie,
+- Valerie wird als unzuverlässig gelesen.
+
+### Schlechte Careless-Choice
+
+```ink
+* [__Careless__: „Ups.“]
+```
+
+Zu modern, zu komisch, keine soziale Tiefe.
+
+### Bessere Careless-Choice
+
+```ink
+* [__Verplappere dich__: „Ach, das macht doch zu viel Mühe.“]
+```
+
+Warum besser: Die Zeile zeigt soziale Fehlkalibrierung, Herkunft, Höflichkeit und Risiko zugleich.
+
+## 6.7 Eccentric / `route_eccentric`
+
+### Kernformel
+
+**Regelbruch als Erkenntnis. Benennung als Angriff. Fremdheit als Macht.**
+
+Eccentric ist die Route, in der Valerie sich weigert, die soziale Form mitzuspielen, wenn sie dadurch Lüge, Angst oder Gewalt deckt. Sie sagt nicht einfach Unhöfliches. Sie benennt, was alle anderen korrekt umgehen.
+
+### Psychologischer Kern
+
+Eccentric gibt Valerie Freiheit von der Form, aber nicht von den Konsequenzen. Es ist der Moment, in dem sie Wahrheit höher wertet als Lesbarkeit. Manchmal ist das mutig. Manchmal eitel. Manchmal notwendig.
+
+### Soziale Funktion
+
+Eccentric wirkt besonders in:
+
+- Gesprächen mit Viktor über Amt und Kontrolle,
+- Hausregeln,
+- religiösen oder familiären Tabus,
+- Situationen, in denen höfliche Sprache Gewalt verdeckt,
+- Momenten, in denen Amalia durch Form unsichtbar gemacht wird.
+
+### Typische Verben
+
+- Benenne
+- Trotze
+- Verweigere
+- Verletze die Form
+- Stelle bloß
+- Schneide ab
+- Sprich zu klar
+- Zerlege die Höflichkeit
+- Verdrehe die Regel
+- Setze den falschen Namen richtig
+- Widersetze dich
+
+### Typische Sätze
+
+> „Zurückhaltung ist, was furchtsame Leute Gehorsam nennen, nachdem sie vergessen haben, wer sie dazu erzogen hat.“
+
+> „Wien vertraut uns beiden so wenig, dass es das Misstrauen aufteilen musste.“
+
+> „Ich möchte Eibenreith sehen, bevor Hohenreith mir sagt, was ich davon zu halten habe.“
+
+### Typische Körperlichkeit
+
+- Blick wird direkter,
+- Haltung verliert höfliche Rundung,
+- Stimme bleibt ruhig, aber zu klar,
+- Valerie bewegt sich einen Augenblick zu früh oder zu unabhängig,
+- andere müssen die Lücke füllen, die sie in die Form schneidet.
+
+### Wirkung auf Viktor
+
+Viktor erlebt Eccentric häufig als Risiko oder Kontrollverlust. Er kann Valeries Mut respektieren, aber sein Auftrag macht ihn empfindlich gegen unberechenbare Regelbrüche.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_eccentric)
+~ rel_inc(viktor_adversarial)
+~ rel_inc(viktor_loss_of_control)
+~ rel_inc(viktor_irritation)
+```
+
+### Wirkung auf Amalia
+
+Amalia kann Eccentric bewundern, weil Valerie ausspricht, was Amalia nicht sagen darf. Sie kann aber auch erschrecken, weil Regelbruch Konsequenzen hat, die Valerie vielleicht unterschätzt.
+
+Mögliche Updates:
+
+```ink
+~ route_inc(route_eccentric)
+~ rel_inc(amalia_bold)
+~ rel_inc(amalia_alarm)
+~ rel_inc(amalia_fascination)
+```
+
+### Wirkung auf Haus und Dorf
+
+Das Haus liest Eccentric als Störung, Gefahr oder schlechte Erziehung. Das Dorf kann Eccentric als Mut oder als fremde Anmaßung lesen. Die Wirkung hängt stark davon ab, ob Valerie lokale Ordnung versteht oder nur Wiener Form bricht.
+
+### Risiken
+
+- Eskalation,
+- soziale Isolation,
+- Verlust von Zugang,
+- Viktor greift stärker ein,
+- Amalia wird mitbestraft,
+- Wahrheit wird gesagt, bevor sie tragfähig ist.
+
+### Schlechte Eccentric-Choice
+
+```ink
+* [__Benenne__: „Sie sind alle Heuchler.“]
+```
+
+Zu platt, zu direkt, keine historische oder soziale Präzision.
+
+### Bessere Eccentric-Choice
+
+```ink
+* [__Benenne__: „Dieses Haus spricht über Fürsorge, als wäre sie eine Art Besitzrecht.“]
+```
+
+Warum besser: Es verletzt die Form, aber mit genauer sozialer Diagnose.
+
+## 6.8 Routen im Verhältnis zueinander
+
+Die Routen sind nicht gleichmäßig gegeneinander abgegrenzt. Einige berühren sich bewusst:
+
+- Fassung und Detective teilen Kontrolle, aber Fassung kontrolliert soziale Form, Detective kontrolliert Erkenntnis.
+- Lover und Careless teilen Entwaffnung, aber Lover wirkt bewusst, Careless rutscht.
+- Sapphic und Lover teilen Nähe, aber Sapphic erkennt Subjektsein, Lover nutzt Wirkung.
+- Eccentric und Detective teilen Wahrheitssuche, aber Detective ordnet, Eccentric bricht.
+- Fassung und Sapphic können beide schonend sein, aber Fassung schützt Form, Sapphic schützt Person.
+- Careless und Sapphic können beide verletzlich sein, aber Careless verrät Valerie, Sapphic wählt Verletzlichkeit als Beziehung.
+
+Diese Überlappungen sind erwünscht. Mischformen sollen möglich sein, aber der Choice-Text muss dann klar machen, welche primäre Bewegung der Spieler wählt.
+
+## 6.9 Dominante Route auswerten
+
+Die dominante Route soll nicht naiv als höchster Zähler allein behandelt werden, sondern nach Bedarf über Differenzen und Kontexte. Eine Route ist besonders aussagekräftig, wenn sie gegen eine naheliegende Gegenbewegung stark wird.
+
+Beispiele:
+
+```ink
+{route_diff_reached(route_composure, route_eccentric, 2): ...}
+{route_diff_reached(route_detective, route_careless, 2): ...}
+{route_diff_reached(route_careless, route_composure, 2): ...}
+```
+
+Diese Logik darf später verfeinert werden. Wichtig ist: Der Score oder spätere Reaktionen sollen eine interpretierte Maske beschreiben, nicht bloß einen Zahlenwert.
+
+## 6.10 Routen und Herkunft
+
+Herkunft kann beeinflussen, wie eine Route gelesen wird.
+
+### Niederer Adel
+
+- Fassung wirkt natürlicher.
+- Careless wirkt auffälliger.
+- Eccentric kann als gefährliche adelige Eigenwilligkeit gelesen werden.
+- Dienstboten erwarten mehr Form.
+
+### Bürgertum / Mittelstand
+
+- Detective und Fassung können als erarbeitete Kompetenz wirken.
+- Lover kann als sozialer Aufstieg durch Wirkung gelesen werden.
+- Careless kann bürgerliche Unsicherheit verraten.
+- Eccentric wirkt eher intellektuell oder unpassend modern.
+
+### Niedrigere Herkunft
+
+- Careless kann Herkunft durch praktische Gesten verraten.
+- Fassung wirkt erarbeitet und fragil.
+- Detective kann stark sein, wenn sie praktische Weltkenntnis nutzt.
+- Eccentric kann als Anmaßung gelesen werden.
+- Sapphic kann besonders stark mit sozialer Solidarität verbunden sein.
+
+## 6.11 Routen und Score
+
+Der Intro-Score soll die bisher dominante Route als literarische Maske beschreiben. Er soll nicht sagen: „Du hast 4 Punkte in Detective.“ Er soll interpretieren:
+
+- Fassung: Form, Abstand und Selbstbeherrschung als Waffe.
+- Detective: Untersuchung, Ordnung und Entlarvung.
+- Lover: Wirkung, Charme und soziale Wärme.
+- Sapphic: Resonanz, weibliche Gefangenschaft und Nähe.
+- Careless: entwaffnende Unsicherheit und Kontrollverlust.
+- Eccentric: Regelbruch und Benennung.
+
+## 6.12 Routenprüfung für neue Szenen
+
+Wenn eine Szene mehrere Routen anbietet, prüfen:
+
+1. Ist jede Route in dieser Situation plausibel?
+2. Wiederholen die Choices nur alte Muster oder erzeugen sie neue soziale Bedeutung?
+3. Hat jede Choice eine andere Wirkung auf mindestens eine Figur?
+4. Gibt es eine Route, die hier bewusst fehlen sollte?
+5. Sind Mischformen markiert oder zu unscharf?
+6. Wird Fassung nicht automatisch bevorzugt?
+7. Wird Careless nicht als Dummheit geschrieben?
+8. Wird Sapphic nicht auf Erotik reduziert?
+9. Wird Lover nicht platt flirtig?
+10. Wird Detective nicht krimimäßig verengt?
+11. Wird Eccentric nicht zu modern-provokant?
+
+# 7. Charakterdesign
+
+Dieser Abschnitt beschreibt Figuren nicht nur nach Funktion, sondern nach ihrer Stellung im moralischen Universum: Welche Macht besitzen sie? Welche Ohnmacht übersehen andere? Welche Rolle schützt sie, und welche Rolle hält sie fest?
+
+## 7.1 Valerie
+
+### 7.1.1 Funktion
+
+Valerie ist die spielbare Hauptfigur. Sie ist nicht einfach eine Ermittlerin und nicht einfach eine unterdrückte junge Frau. Sie ist eine junge Dame mit gefährlich viel und gefährlich wenig Macht zugleich.
+
+Ihre Kompetenzen entstehen aus einer Mischung aus:
+
+- Bildung,
+- sozialer Beobachtung,
+- Hofnähe,
+- Sprache,
+- Kleidung,
+- Performance,
+- mystischem Ruf,
+- weiblicher Lesbarkeit,
+- Stand oder erarbeitetem Zugang,
+- Fähigkeit zur Manipulation.
+
+### 7.1.2 Macht
+
+Valerie besitzt Macht durch:
+
+- gehobenen gesellschaftlichen Zugang,
+- ein Schreiben der Kabinettskanzlei Seiner Majestät,
+- Reise erster Klasse,
+- Viktor als Schutz und Zeichen staatlicher Rückendeckung,
+- Kleidung, Benehmen und Sprache,
+- die Fähigkeit, Diener, Kutscher, Gepäckträger und Dorfleute sozial zu dirigieren,
+- ihren Ruf als Medium,
+- die Möglichkeit, Räume zu betreten, die anderen verschlossen bleiben.
+
+Diese Macht muss sichtbar bleiben. Eine Szene, in der Valerie nur als arme Frau gegen Männer steht, ist für dieses Spiel zu flach.
+
+### 7.1.3 Ohnmacht
+
+Valerie ist begrenzt durch:
+
+- Geschlechterrollen,
+- Ruf,
+- Körper- und Kleidungscodes,
+- amtliche Kontrolle,
+- die Gefahr sozialer Fehllektüre,
+- mögliche Abhängigkeit vom Schutz anderer,
+- die Notwendigkeit, sich ständig gesellschaftsfähig zu halten.
+
+Ihre Ohnmacht ist real, aber sie ist nicht absolut. Gerade die Spannung zwischen Macht und Begrenzung macht sie interessant.
+
+### 7.1.4 Innere Spannung
+
+Valerie manipuliert, weil sie gelernt hat, dass offene Kompetenz allein nicht reicht. Sie trägt Masken, weil Masken Zugang schaffen. Gleichzeitig sehnt sie sich nach Menschen, vor denen sie nicht funktionieren muss.
+
+Ihre zentrale Gefahr ist nicht nur Unterdrückung, sondern Selbstverwechslung: Sie könnte vergessen, wo die Maske endet und wo sie selbst beginnt.
+
+### 7.1.5 Kanonischer Beispielname
+
+Der kanonische/default Beispielname für Referenz und Marketing bleibt:
+
+**Valerie Eleonore Josepha Freiin von Rauhenfels**
+
+## 7.2 Amalia
+
+### 7.2.1 Funktion
+
+Amalia ist die zentrale Beziehungspartnerin und psychologische Spiegelung Valeries. Sie ist nicht bloß Auftrag, Opfer, Verdächtige oder Hinweisquelle.
+
+Sie ist eine junge adelige Frau, für die andere sprechen, aber nicht notwendigerweise eine machtlose Person. Ihre Macht liegt möglicherweise in:
+
+- symbolischem Wert,
+- Erbschaft oder Heiratsaussicht,
+- emotionaler Bedeutung für den Grafen,
+- Stellung im Haus,
+- Verbindung zu Ruf und Zukunft der Familie,
+- möglicher Beziehung zur alten Macht,
+- der Tatsache, dass viele etwas von ihr brauchen.
+
+### 7.2.2 Ohnmacht
+
+Amalias Ohnmacht liegt darin, dass ihre Macht nicht unbedingt ihr selbst gehört. Andere können ihren Wert verwalten, beschützen, verheiraten, deuten oder verstecken.
+
+Erwachsene sprechen für sie. Das heißt aber nicht, dass sie nichts bewirkt. Es heißt: Ihre Wirkung wird durch andere geleitet.
+
+### 7.2.3 Beziehung zu Valerie
+
+Amalia bewundert Valerie nicht primär wegen Technik oder Eisenbahn. Sie bewundert Valerie, weil Valerie als junge Frau eine Möglichkeit verkörpert:
+
+- reisen,
+- im Auftrag handeln,
+- mit Männern verhandeln,
+- am Hof bekannt sein,
+- gefährlich wirken,
+- eine eigene Rolle spielen,
+- gehört werden.
+
+Die zentrale Frage zwischen beiden:
+
+> Ist Valerie frei, oder nur besser verkleidet?
+
+Valerie muss Amalia als Subjekt sehen, nicht als Fall, Opfer, Spiegel oder Rettungsprojekt.
+
+## 7.3 Rittmeister Viktor Alois Nowak
+
+### 7.3.1 Funktion
+
+Rittmeister Viktor Alois Nowak ist offiziell Sekretär / Begleiter und faktisch auch Aufsicht, Sicherheitsmensch und Vertreter staatlicher Kontrolle. Er ist aber nicht „der Mann als Unterdrücker“. Er ist selbst gebunden: an Auftrag, Befehl, Risiko, Bericht und Pflicht.
+
+Seine Kontrolle kann falsch sein. Sie kann aber auch berechtigt sein. Diese Ambivalenz ist wichtig.
+
+### 7.3.2 Macht
+
+Viktor besitzt Macht durch:
+
+- Geschlecht,
+- körperliche Präsenz,
+- Amt oder militärische Schulung,
+- Zugriff auf Informationen,
+- Sicherheitsfunktion,
+- Fähigkeit, Bewegung und Risiko zu kontrollieren.
+
+### 7.3.3 Ohnmacht
+
+Viktor ist begrenzt durch:
+
+- Auftrag,
+- Hierarchie,
+- seine Tarnrolle als Sekretär,
+- Valeries Hofauftrag,
+- gesellschaftliche Formen gegenüber einer Dame,
+- die Tatsache, dass Valerie Dinge bewirken kann, die seine Mittel nicht erfassen.
+
+### 7.3.4 Startbeziehung
+
+Startwerte:
+
+```ink
+VAR viktor_closed = 1
+VAR viktor_control = 1
+VAR viktor_professional_distance = 2
+```
+
+Das bedeutet: Er ist reserviert, kontrollierend und professionell distanziert, aber nicht feindselig.
+
+## 7.4 Die Hohenreith-Familie
+
+Die Familie ist gräflich. Der Familienname ist offen; „von Schönberg“ ist verworfen.
+
+Das Haus darf nicht als simples patriarchales Gefängnis geschrieben werden. Es soll eine Ordnung zeigen, die sich selbst als Schutz versteht: Schutz von Ruf, Zukunft, Namen, Tochter, Besitz, Glaube, Dienst und Kontinuität. Der Schrecken entsteht, wenn Schutz in Besitz umkippt.
+
+Offen:
+
+- Familienname,
+- Graf,
+- Gräfin oder Mutterstatus,
+- Tante / Hausdame,
+- Geschwister,
+- wer für Amalia spricht,
+- wer tatsächlich entscheidet,
+- wer vom Schweigen profitiert.
+
+## 7.5 Butler, Dienerschaft und Haushalt
+
+Der Butler ist die Stimme des Hauses. Sein Satz am Ende des Intros lautet immer:
+
+> Willkommen in Hohenreith.
+
+Er ist nicht bloß Diener. Er kontrolliert Zugang, Form, Information und Übergabe. Seine Macht ist keine Standesmacht, aber Hausmacht.
+
+Dienerschaft besitzt Macht durch:
+
+- Wissen,
+- Nähe zu privaten Räumen,
+- Kontrolle über Türen, Kleidung, Mahlzeiten, Gepäck und Nachrichten,
+- Beobachtung,
+- Erinnerung,
+- Weitergabe oder Zurückhaltung von Information.
+
+Sie besitzt Ohnmacht durch Stand, Lohn, Abhängigkeit, Dienstpflicht und Risiko.
+
+## 7.6 Dorf
+
+Das Dorf ist nicht Kulisse und nicht nur abergläubische Masse. Es ist soziale Öffentlichkeit und Erinnerungssystem.
+
+Macht des Dorfes:
+
+- Gerücht,
+- Beobachtung,
+- lokale Namen,
+- Kenntnis von Wegen, Wasser, Familiengeschichte und alten Regeln,
+- kollektives Schweigen.
+
+Ohnmacht des Dorfes:
+
+- Abhängigkeit vom Adel,
+- Kirche,
+- Besitzverhältnissen,
+- Armut,
+- Entfernung von Wien und Amt,
+- Gefahr, nicht geglaubt zu werden.
+
+Das Dorf kann Wahrheit bewahren und Menschen zugleich zerstören.
+
+## 7.7 Kirche und Religion
+
+Die Kirche ist nicht einfach Unterdrückung und nicht einfach Trost. Sie ist:
+
+- Ritual,
+- Deutung,
+- Institution,
+- soziale Ordnung,
+- Schutz gegen Angst,
+- mögliche Übermalung älterer Mächte,
+- moralische Macht.
+
+In der Monarchie sind konfessionelle und ethnische Linien moralisch und sozial relevanter als moderne amerikanische Hautfarbenlogik. Das muss bei Figuren, Dorf, Namen, Sprache und Konflikten beachtet werden.
+
+# 8. Beziehungssystem
+
+## 8.1 Grundmodell
+
+Das Relationship-System orientiert sich an *Scarlet Hollow*: Es ist kein einzelner Approval-Wert, sondern ein Eindrucksmodell. Figuren sammeln Eindrücke davon, wie Valerie auf sie wirkt.
+
+Standardwerte pro wichtiger Figur:
+
+- agreeable,
+- adversarial,
+- open,
+- closed,
+- bold,
+- passive,
+- reliable,
+- unreliable,
+- insightful,
+- dull.
+
+Diese Werte sind nicht paarweise zu einem einzigen Vorzeichenwert reduziert. Ein NPC kann Valerie zugleich offen und verschlossen, zuverlässig und unzuverlässig erlebt haben.
+
+## 8.2 Warum Ink-intern
+
+Die Beziehungsmatrix bleibt Ink-intern, weil die wichtigen Figuren endlich und authored sind. Ein engine-seitiges String-Dictionary wäre flexibler, aber weniger transparent beim Schreiben.
+
+Ink-Lösung:
+
+- 10 Standardvariablen pro wichtiger Figur,
+- projektbezogene Zusatzvariablen nach Bedarf,
+- universelle `rel_*`-Hilfsfunktionen mit `ref`.
+
+## 8.3 Zusatzwerte
+
+Zusatzwerte sind erlaubt, wenn sie spezifisch erzählerisch gebraucht werden.
+
+Amalia:
+
+- desire,
+- shame,
+- alarm,
+- fascination,
+- empowerment,
+- containment.
+
+Viktor:
+
+- concern,
+- irritation,
+- control,
+- loss_of_control,
+- professional_distance,
+- personal_involvement.
+
+Nicht jede Figur braucht Zusatzwerte. Keine Variablen auf Vorrat für unwichtige NPCs.
+
+## 8.4 Anwendung
+
+Relationship-Änderungen sollen klein, häufig und bedeutungsvoll sein. Eine Choice kann mehrere Eindrücke setzen:
+
+```ink
+~ rel_inc(viktor_insightful)
+~ rel_inc(viktor_reliable)
+```
+
+Aber sie darf nicht mechanisch jede Route immer gleich abbilden. Eine Sapphic-Choice kann bei Amalia Vertrauen erzeugen, bei Viktor aber Geschlossenheit oder Sorge. Beziehungseffekte hängen von Situation und Figur ab.
+
+---
+
+# 9. Glossar-Bibel
+
+## 9.1 Syntax
+
+Gültige Syntax:
+
+```ink
+#gloss[Term](Erklärung)
+```
+
+Der Glossartag steht am Absatzende. Die Engine markiert den Begriff im Absatz.
+
+Nicht verwenden:
+
+- `{gloss:term|entry}`,
+- HTML-artige Glossartags,
+- Glossar direkt im Choice-Text.
+
+## 9.2 Stil
+
+Glossare sind optional und nicht TTS-relevant. Sie dürfen daher ausführlicher, bissiger und erklärender sein als der Haupttext.
+
+Ziel:
+
+- historisch-linguistische Aufklärung,
+- Valeries inneres Lexikon,
+- Gegenwart der Spielzeit,
+- Ton zwischen Lehrbuch, Teufelswörterbuch und höfischer Bosheit.
+
+## 9.3 Beispielton
+
+Gute Richtung:
+
+> Weisung: Ein Befehl, dem man die Uniform ausgezogen hat. Sehr nützlich, wenn Gehorsam erwartet wird, aber niemand persönlich Verantwortung tragen möchte.
+
+> Ridikül: Kleine Damenhandtasche oder Handarbeitsbeutel. Klein genug, um harmlos zu wirken, groß genug für Briefe, Schlüssel und jene Dinge, von denen Herren später behaupten, sie hätten nichts davon gewusst.
+
+## 9.4 Was glossiert wird
+
+Glossieren:
+
+- historische Begriffe,
+- soziale Institutionen,
+- Standesbegriffe,
+- Gegenstände des 19. Jahrhunderts,
+- Begriffe, die heutige jüngere Spieler nicht sicher kennen,
+- Wörter, die Valeries Zeitgeist erklären.
+
+Nicht glossieren:
+
+- Eibenreith,
+- Hohenreith,
+- Eigennamen mit späterer Offenbarungsfunktion,
+- offensichtliche Wörter,
+- soziale Puzzle-Lösungen.
+
+---
+
+# 10. Narrative-Systeme aus den Referenztalks
+
+## 10.1 Encounters und State Machines
+
+Aus Jon Ingolds *Narrative Sorcery* gilt:
+
+- Encounters ersetzen Quests. Sie sind nicht primär Spielerziele, sondern modulare narrative Maschinen, die aus dem aktuellen Zustand sinnvolle Handlungsmöglichkeiten erzeugen.
+- Ein Encounter kann ein Ort sein, muss es aber nicht. Er kann auch ein wiederverwendbarer Einschub sein, der per Tunnel betreten und wieder verlassen wird.
+- Encounters speichern Fortschritt nicht über willkürliche Flags, sondern über klare semantische Zustände.
+- Ink-`LIST`s sind das richtige Werkzeug für geordnete State Chains.
+- State Chains sind High-Water-Marks: Ein späterer Zustand impliziert die früheren Zustände derselben Kette.
+- Diese State Chains sind Autorwerkzeuge, keine sichtbaren Questbäume. Der Spieler soll sie nicht „abarbeiten“, sondern sich frei in einer glaubwürdigen Situation verhalten.
+
+State Trees sollen Bedeutung modellieren, nicht Knotenbesuche. Für einfache Fragen wie „wurde dieser Knot schon gelesen?“ ist Ink-eigener Visit-State zu verwenden. Keine zusätzlichen Flags für bloße Knot-Besuche anlegen.
+
+## 10.2 Heaven’s Vault: dynamische Content-Buckets
+
+Aus *Heaven’s Vault* wird das Bucket-Prinzip übernommen:
+
+- Moment Bucket,
+- Room Bucket,
+- Episode Bucket,
+- Game Bucket.
+
+Content ist atomisch. Jede Handlung, Beobachtung oder Dialogzeile ist ein kleiner Blob, der irgendwo in einem passenden Bucket liegt und nur über Preconditions entscheidet, ob er im aktuellen Augenblick sinnvoll ist. Wenn ein Atom nicht passt, wird nicht ein neuer Sonderpfad gebaut, sondern seine Preconditions werden präziser gemacht oder seine Priorität angepasst.
+
+Content darf aus höheren Ebenen dynamisch aufsteigen, wenn Preconditions erfüllt sind. Genau das ist die Stärke des Systems. Episode- und Game-Buckets dürfen breit sein; sie sollen nicht künstlich nur lokal drei Choices enthalten.
+
+Die Bucket-Reihenfolge folgt Nähe zum aktuellen Spielmoment:
+
+1. Moment: das, was jetzt gerade passiert oder direkt an einem Objekt / einer Person hängt.
+2. Room: Raum- und Traversal-Content am aktuellen Ort.
+3. Episode: Inhalt, der während der laufenden Episode überall plausibel auftauchen kann.
+4. Game: übergreifender Lore-, Rollen-, Beziehungs- oder Finale-Content.
+
+Jede niedrigere Ebene füllt nur den Raum, den die höhere Ebene lässt. Wenn wichtige Moment- oder Room-Atoms offen sind, sollen sie nicht von allgemeinem Episode- oder Game-Content verdrängt werden.
+
+Orte in einem offenen Spiel werden nicht bloß aus Vollständigkeit angeboten. Ein Ort oder eine Episode soll erst ansteuerbar sein, wenn der Spieler einen Grund hat, dorthin zu gehen. Das verhindert tote Wege und hält die Freiheit erzählerisch motiviert.
+
+Trennung:
+
+- Ink entscheidet, was gültig ist.
+- Engine entscheidet, was sichtbar wird.
+
+## 10.2.1 Preconditions als defensive Autorlogik
+
+Ingold beschreibt defensive Logik als Preconditions auf beinahe jeder Zeile und jeder Option. Für *Eibenreith* heißt das:
+
+- Keine Szene darf stillschweigend annehmen, dass eine andere Szene vorher stattgefunden hat, außer diese Abhängigkeit steht explizit in der Precondition.
+- Preconditions beschreiben Bedeutung: Wissen, Zustand, Ort, gerade geschehenes Ereignis, aktuelle Gesprächssituation, vorhandene Person, soziale Möglichkeit.
+- Preconditions werden an Atom-Provider geschrieben, nicht an jede einzelne Choice im Atom, sofern die ganze Atomgruppe dieselbe Voraussetzung teilt.
+- Knot-Visits ersetzen simple Flags. LIST-State wird nur verwendet, wenn die Reihenfolge selbst Bedeutung hat.
+- Wenn Content „fast immer“ passt, wird er breit in einen Bucket gelegt und nur durch die wenigen notwendigen Preconditions begrenzt.
+- Wenn Content „zu oft“ auftaucht, ist zuerst Priorität oder Precondition zu prüfen, nicht die Architektur zu verengen.
+
+## 10.2.2 Episoden und offene Räume
+
+Eine Episode ist ein begrenzter Zeitraum mit Anfang, Erkundung und Ende. Der Spieler kann innerhalb der Episode frei genug navigieren, aber die Episode selbst gibt einen Grund, warum diese Räume jetzt relevant sind.
+
+Für das Intro bedeutet das:
+
+- Die Zugfahrt ist eine Episode.
+- Die Wagen sind frei begehbare Räume innerhalb dieser Episode.
+- Charaktergenerierung ist kein lineares Formular, sondern eine Reihe von Moment-Atoms, die während der Erkundung auftauchen.
+- Die Episode endet erst, wenn alle unverzichtbaren Identitäts- und Rollenabhängigkeiten erfüllt sind.
+- Wiederholbare Traversal-Choices sind nötig, damit der Spieler denselben Ort erneut passieren kann, ohne dass der Text wie ein Fehler wirkt.
+
+## 10.3 Engine-Filterung
+
+Ink kann `*`-Choices nach Auswahl verschwinden lassen. Ink weiß aber nicht, ob eine Choice angezeigt und ignoriert wurde. Daher:
+
+- `once_chosen` kann Ink unterstützen,
+- `once_offered` muss Engine tracken,
+- Engine filtert und priorisiert aktuelle Choices.
+
+Die Engine durchsucht nicht das ganze Spiel. Sie erhält die aktuell von Ink erzeugten Choices und wählt daraus aus.
+
+## 10.4 Choice-Metadaten
+
+Choice-Tags müssen vor Auswahl lesbar sein und daher in der Choice-Klammer stehen.
+
+Beispiel:
+
+```ink
+* [__Prüfe__: „...“ #id:amalia_open_followup_01 #bucket:episode #priority:70 #repeat:once_offered #route:detective]
+```
+
+Minimal:
+
+- `#id`,
+- `#bucket`,
+- `#priority`.
+
+Optional:
+
+- `#required`,
+- `#repeat`,
+- `#weight`,
+- `#route`,
+- `#slot`,
+- `#episode`,
+- `#group`,
+- `#action`,
+- `#location`.
+
+## 10.5 Side Effects vermeiden
+
+Bucket-Provider müssen side-effect-safe sein. Keine State-, Route- oder Relationship-Updates vor einer Choice. Updates gehören in den gewählten Branch.
+
+Falsch:
+
+```ink
+=== bucket ===
+~ rel_inc(amalia_open)
+* [Choice]
+```
+
+Richtig:
+
+```ink
+* [Choice]
+ ~ rel_inc(amalia_open)
+```
+
+---
+
+# 11. Spielstruktur: Tage, Episoden, Traversal
+
+## 11.1 Tagesstruktur
+
+Jeder Spieltag besteht aus:
+
+1. Early Morning: Morgenroutine, Frühstück, Tagesplanung.
+2. Mid Morning: erste Episode.
+3. Noon: Mahlzeit, Tischgespräch, soziale Auswertung.
+4. Afternoon: zweite Episode.
+5. Evening: Dinner, Gespräche, Hausdynamik.
+6. Early Night: Schlaf oder nächtliche Eskapaden.
+7. Late Night: meist Schlaf.
+
+Der Spieler wählt üblicherweise Slot 2, Slot 4 und eventuell Slot 6. Andere Slots ergeben sich aus den gewählten Episoden und deren Auflösung.
+
+## 11.2 Episoden
+
+Episoden sind modulare Blöcke, die meist in unterschiedlicher Reihenfolge spielbar sind. Eine Episode braucht:
+
+- Angebot,
+- Preconditions,
+- Start,
+- relevante Räume / Traversals,
+- lokale Figuren,
+- Moment-Content,
+- mögliche Episode- und Game-Buckets,
+- Completion State,
+- Outcome für den Tagesplan.
+
+## 11.3 Traversal
+
+Traversal ist kein bloßer Ortswechsel, sondern eine Szene im Übergang.
+
+Elemente:
+
+- Depart-Choice,
+- unterwegs auftauchende Inhalte,
+- Gespräch mit anwesenden Figuren,
+- Beobachtungen,
+- Arrive-Choice oder automatisches Erreichen des Ziels.
+
+Im Intro wird Traversal zuerst im Zug erklärt: Abteil → Gang → Geistlichenabteil → Tunnelspiegel → Waschraum → Rückweg.
+
+## 11.4 Anreise als Referenzstruktur
+
+Die Anreise ist das Muster für spätere Modularität:
+
+- Zug: erstes Ambiente und Charaktergenerierung,
+- Bahnhof: öffentliche Lesbarkeit,
+- Kutsche: Schwellenraum,
+- Dorf/Hohenreith: erste große soziale Konsequenz,
+- Butler-Satz: identischer Text mit unterschiedlicher Bedeutung.
+
+---
+
+# 12. Ink-Architektur
+
+## 12.1 Dateiaufteilung
+
+### Eibenreith.ink
+
+Nur:
+
+- globale `LIST`-Definitionen,
+- semantische State-Listen,
+- Includes,
+- Kapitelindex,
+- wichtige Knotnamen,
+- Entry-Divert.
+
+Keine:
+
+- Prosa,
+- Hilfsfunktionen,
+- normalen Variablen,
+- Relationship-Variablen.
+
+### eibenreith_00_helpers.ink
+
+Enthält:
+
+- globale Nicht-Charakter-Variablen,
+- Intro-Variablen,
+- Route-Zähler,
+- Route-Helfer,
+- Time-/Day-Helfer,
+- Episode-/Outcome-Helfer,
+- Meal-Helfer,
+- Location-Helfer,
+- Traversal-Helfer,
+- State-Helfer,
+- Relationship-Helfer.
+
+### eibenreith_00_character_relationships.ink
+
+Nur:
+
+- Relationship-Variablen,
+- Startwerte,
+- reservierte ID-Kommentare.
+
+Keine Funktionen.
+
+### Kapiteldateien
+
+Kapiteldateien enthalten:
+
+- Knots,
+- Prosa,
+- Choices,
+- lokale Struktur,
+- State-/Route-/Relationship-Updates.
+
+## 12.2 LIST-Regeln
+
+`LIST`s sind für:
+
+- geordnete semantische Zustände,
+- TimeSlot,
+- EpisodeId,
+- MealPlan,
+- Locations,
+- Traversal IDs.
+
+Nicht für:
+
+- bloße Knotenbesuche,
+- jede kleine Beobachtung,
+- UI-Tracking.
+
+## 12.3 State-Helfer
+
+Verwendete Konvention:
+
+```ink
+~ state_reach(CourtMission.hidden_instruction_revealed)
+{state_reached(CourtMission.hidden_instruction_revealed): ...}
+{state_before(CourtMission.hidden_instruction_revealed): ...}
+{state_between(CourtMission.official_cover_understood, CourtMission.hidden_instruction_revealed): ...}
+```
+
+`state_reach` ist High-Watermark-Logik: ein späterer Zustand erreicht automatisch frühere Zustände derselben Liste.
+
+## 12.4 Relationship-Helfer
+
+Konvention:
+
+```ink
+~ rel_inc(amalia_open)
+~ rel_inc_by(amalia_open, 2)
+{rel_reached(amalia_open, 3): ...}
+{rel_diff_reached(amalia_open, amalia_closed, 2): ...}
+```
+
+Ink unterstützt keine optionalen Parameter und keine Funktionsüberladung. Deshalb gibt es `_by`-Varianten.
+
+## 12.5 Route-Helfer
+
+Konvention:
+
+```ink
+~ route_inc(route_sapphic)
+~ route_inc_by(route_detective, 2)
+{route_reached(route_composure, 3): ...}
+```
+
+## 12.6 Conditionals
+
+Erweitertes Format:
+
+```ink
+{
+- condition_a:
+ ...
+- condition_b:
+ ...
+- else:
+ ...
+}
+```
+
+Das ist die sichere Form für mehrere Bedingungen und `else`.
+
+## 12.7 Score
+
+Am Ende des Intros gibt es genau ein `#score[...]`-Tag mit dem gesamten Text. Der Text wird vorher aus temporären Variablen zusammengesetzt.
+
+Nicht verwenden:
+
+- viele einzelne `#score`-Tags.
+
+---
+
+# 13. UI- und Tag-Konventionen
+
+## 13.1 Tutorialtexte
+
+Tutorialtexte müssen präzise und stilistisch sauber sein. Sie dürfen nicht umgangssprachlich oder schlampig klingen.
+
+Erster Tutorialtext muss erklären:
+
+- Entscheidungen erscheinen links.
+- Auswahl per Maus oder angezeigter Taste.
+- Das Spiel erfolgt über Entscheidungen.
+- Buchstabenkürzel folgen teilweise Textadventure-Konventionen.
+
+Standardbegriff: **Entscheidungen**. „Wahlen“ ist verworfen.
+
+## 13.2 Choice-Perspektive
+
+Choice-Texte werden aus Valeries Perspektive vor der Handlung formuliert. Sie beschreiben Absicht, Aufmerksamkeit, Haltung oder unmittelbare Handlung, nicht die nachträgliche Erklärung des Autors, was der Branch offenbaren wird.
+
+Regeln:
+
+- Kein Zielwissen in Choice-Texten, das Valerie noch nicht hat.
+- Keine Ereignisse als Choice anbieten, die Valerie nicht kontrollieren kann.
+- Türen, Übergänge und unbekannte Bereiche heißen vor der Entdeckung `Versuche`, `Öffne`, `Geh weiter`, `Sieh nach`, nicht nach ihrem späteren Ziel.
+- Automatische äußere Ereignisse wie Tunnel, Pfiffe, Erschütterungen oder eintretende Figuren werden als Moment-Events ausgespielt oder hinter eine plausible Wahrnehmungshandlung gelegt.
+
+Beispiel:
+
+- Falsch: `Prüfe: Die Tür zu den Wagen zweiter und dritter Klasse.`
+- Richtig: `Versuche: Die andere Übergangstür.`
+
+## 13.3 Tags
+
+Verwendete Tagarten:
+
+- `#chapter[...]`
+- `#music[...]`
+- `#image[...]`
+- `#sfx[...]`
+- `#alert[...]`
+- `#score[...]`
+- `#gloss[...](...)`
+- Choice-Metadaten wie `#id`, `#bucket`, `#priority`, `#route`, `#required`.
+
+## 13.3 Asset-Tags
+
+Musik, Bild und Sound dürfen die Szene unterstützen, aber der Text muss ohne Asset verständlich und wirksam bleiben.
+
+---
+
+# 14. Intro als Design-Muster
+
+## 14.1 Ziel
+
+Das Intro soll nicht nur Exposition sein. Es erfüllt mehrere systemische Funktionen:
+
+- erste Spielmechanik,
+- erste Traversal-Erfahrung,
+- Charaktergenerierung,
+- Einführung von Viktor,
+- Einführung des Auftrags,
+- Einführung der Routen,
+- erstes soziales Lesen durch Öffentlichkeit,
+- erste Schwellenerfahrung,
+- Wahl der Ankunftsform.
+
+## 14.2 Zug
+
+Der Zug ist das erste begehbare Ambiente. Der Weg zum Waschraum ist der zentrale Traversal-Tutorialpfad und zugleich Charaktergenerator. Er besteht nicht aus einem generischen Gang, sondern aus mehreren Wagen mit je eigenem Korridor:
+
+- Wagen mit Valeries Abteil und der Grenze zu den niedrigeren Klassen,
+- Wagen der Geistlichen,
+- Wagen mit Waschraum,
+- daran anschließend der Speisewagen.
+
+Die Charaktergenerierung nutzt nur dort Progressionslisten, wo es echte semantische Ketten gibt. Unabhängige Pflichtdefinitionen bleiben checklistartige Fakten. Jeder Schritt ist ein einmaliger Moment-Atom, der nur im passenden Bereich und erst nach seinen Voraussetzungen auftaucht. Wiederholbare Traversal-Entscheidungen sorgen dafür, dass der Spieler dieselben Orte mehrfach passieren kann, bis der nächste passende Moment plausibel erscheint. Keine dieser Voraussetzungen soll an jede einzelne Choice geschrieben werden; sie gehört in den jeweiligen Atom-Provider oder Traversal-Provider.
+
+Pflichtdefinitionen:
+
+- Stand / Herkunft als erste Charakterentscheidung im Abteil,
+- Name / Titel / amtliche Anrede nach Stand,
+- Glaube ans Übernatürliche durch Auftrag, Hohenreith-Schreiben oder Viktor-Memorandum,
+- Religiosität durch den Priester im Korridor des Geistlichenwagens,
+- Körper / Kleidung durch den einmaligen Tunnelmoment in einem der Korridore,
+- Gesicht / Haar / Frisur im Waschraum.
+
+Die sechs Routen sind keine Charaktergenerierungsfragen. Sie tutorialisieren, dass Sprache und Verhalten Beziehungen und Reaktionen verändern. Sie dürfen in der Abteil-Szene, in der Ausrede zum Waschraum oder im Viktor-Briefing auftauchen, zählen aber nicht zur Identitätsvollständigkeit.
+
+Der Speisewagen wird erst nach Sichtung als Gesprächsoption mit Viktor freigeschaltet. Ein offenes Western-Ende des Zuges ist für diese Strecke nicht die Standardannahme; falls ein Endblick gebraucht wird, ist er als gefährlicher Blick durch Tür oder Scheibe zu behandeln, nicht als frei begehbare Außenplattform.
+
+### 14.2.1 Optimale Struktur des Zug-Intros
+
+Das Zug-Intro ist kein nummeriertes Onboarding. Es ist ein kleiner Encounter mit eng kontrolliertem Anfang und anschließend echter Traversal-Freiheit.
+
+Der erste Choice-Punkt bietet mehrere sinnvolle Handlungen im Abteil. Sie wirken wie Spiel, sind aber alle so authoriert, dass sie dieselbe soziale Wahrheit erzwingen: Bevor der Zug als freier Raum geöffnet wird, muss klar sein, welchen Stand Valerie in dieser Welt hat. Der Spieler kann also Viktor, Papiere, Schaffner oder Abteilwirkung zuerst berühren; das Encounter-System führt aus jedem Einstieg zur Standentscheidung.
+
+Tutorials werden nicht gesammelt, sondern dort verteilt, wo der Spieler die jeweilige Mechanik zum ersten Mal erlebt:
+
+- Choice-Interface: beim ersten Choice-Punkt im Abteil.
+- Permanente Charakterentscheidung: unmittelbar vor der Standentscheidung.
+- Optionaler Moment: beim ersten optionalen Beobachtungs- oder Untersuchungsmoment.
+- Dialog / Route / Reaktion: bei der ersten gesprochenen Viktor-Auswahl.
+- Wiederholbare Traversalentscheidung: beim ersten Verlassen des Abteils.
+
+Nach Stand und Name öffnet sich die Zugschleife. Danach können Priester, Tunnel, Waschraum, Speisewagen, Hohenreith-Schreiben und Viktor-Memorandum in einer spielbaren Reihenfolge surfacen. Die Episode endet erst, wenn alle Pflichtdefinitionen und das Missionsbriefing abgeschlossen sind.
+
+Der erste Pflichtmoment darf nicht der Brief im Ridikül sein, solange nicht feststeht, dass Valerie überhaupt ein Ridikül trägt oder eigene Akten führt. Wenn Viktor als Sekretär auftritt, kontrolliert er die offiziellen Papiere.
+
+Valerie nimmt den Auftrag aus eigenem Interesse an. Es geht zu Beginn nicht darum, ob sie wirklich ein Medium ist. Der kanonische Charakter gibt vor, ein Medium zu sein; tatsächliche übernatürliche Fähigkeiten werden erst später entdeckt und nicht in der Zugeröffnung behauptet. Was Valerie beweisen will, sind ihre Fähigkeiten als Spionin, Ermittlerin, Beobachterin und Diplomatin. Persönlich geht es ihr um die Möglichkeit, selbständig zu reisen, die Welt zu sehen, interessante Menschen und Orte kennenzulernen und als Person für Intelligenz und Auffassungsgabe ernst genommen zu werden. Sie ist zu Beginn also nicht bloß ausgeliefert, sondern ehrgeizig, vorbereitet, neugierig und zugleich beobachtet.
+
+Valerie kennt Viktors militärischen Rang und seine wahre Identität: **Rittmeister Viktor Alois Nowak**. Die Sekretärsrolle ist eine Tarnung, damit er sie inkognito begleiten kann, ohne im Haus sofort als militärische oder staatliche Aufsicht sichtbar zu werden. Ihr wurde gesagt, er reise mit, um sie als Leibwächter zu schützen, ihr praktische Arbeiten abzunehmen, die ihr als Frau nicht zugetraut werden, und die Reise einer Dame ihres Standes gesellschaftlich unauffälliger zu machen. Sie vermutet aber, dass er auch mitreist, um sie zu beurteilen oder über sie zu berichten. Er wurde ihr erst kurz vor der Abreise vorgestellt.
+
+Sinnvolle Papierrollen:
+
+- **Viktors Memorandum:** bleibt zentral. Es enthält Reiseangelegenheiten, Cover-Story, zulässige Sprache, Auftrag der Kabinettskanzlei Seiner Majestät und vermutlich eine nicht gezeigte Handlungsanweisung zum Umgang mit Valerie.
+- **Amtschreiben / Viktors versiegelte Anweisungen:** ein Schreiben der Kabinettskanzlei Seiner Majestät ist sichtbar. Valerie war anwesend, als Viktor das Kuvert mit seinen Anweisungen übergeben wurde, hat es aber nur von außen gesehen.
+- **Hohenreiths Hilfsgesuch / Einladung / Bittschrift:** beste Quelle für den eigentlichen Anlass. Dieses Schreiben wurde an die Kabinettskanzlei Seiner Majestät gerichtet, nicht an Valerie persönlich. Valerie hat es bei der mündlichen Unterweisung gelesen, bei der ihr Viktor vorgestellt wurde. Im Zug ist es in Viktors Mappe sichtbar und kann erneut angefordert werden.
+- **Valeries amtliche Erfassung / Reiseformular / Passagierformalität:** bester Auslöser für Stand und Namen. Viktor händigt Valerie den Vordruck aus; der Spieler füllt ihn selbst aus. Es geht nicht um falsche Identität, sondern darum, welche soziale Wahrheit diese Valerie in der Welt hat.
+- **Valeries persönliches Notizbuch / Tagebuch / Visitenkartenetui:** möglich, aber nicht nötig für die Mission. Es kann später Persönlichkeit zeigen, sollte aber nicht die zentrale Akte ersetzen.
+
+Ein Schaffner-Moment ist geeignet, weil er Stand sofort sichtbar macht: Fahrkarte, Abteilrecht, Gepäck, Anrede, Diensthaltung. Viktor kann antworten oder das Papier reichen, aber der Spieler entscheidet, was die Welt an Valerie liest.
+
+Ein Viktor-Formularmoment ist noch präziser: Viktor händigt den Vordruck aus und fordert Valerie auf, selbst einzutragen, wie sie in Hohenreith angemeldet werden soll. Das zeigt seine Kontrolle über die Papiere, lässt die Entscheidung aber beim Spieler und vermeidet den Eindruck einer falschen Identität:
+
+> „Bitte tragen Sie selbst ein, wie Sie dort angemeldet werden wollen. Vollständiger Name, Anrede, Stand. Ich übernehme die Abschrift für die Kutsche.“
+
+Die Szene sagt damit: Viktor weiß, wer sie ist; das Spiel fragt, welche soziale Wahrheit diese Valerie in der Welt hat.
+
+Glossare in der Zugeröffnung müssen sparsam bleiben. `Ledermappe` braucht kein Glossar. `Korsett` ist nur dann zu glossieren, wenn die konkrete Szene die historische Körperpraxis wirklich braucht; als bloße Atmosphäre ist es zu gewöhnlich für ein Glossar.
+
+### 14.2.2 Optimale Dependency-Graph für die Charaktergenerierung
+
+Die Charaktergenerierung soll nicht linear wirken, braucht aber eine klare Abhängigkeitslogik. Frühere Entscheidungen, die spätere Auswahlräume formen, müssen zuerst unvermeidbar werden. Entscheidungen mit gleichem Parent dürfen in beliebiger Reihenfolge entstehen.
+
+```mermaid
+flowchart TD
+ start["Start im Abteil: Szene, Viktor, Papiere"] --> first_choice["mehrere erste Abteil-Atoms: Interface-Tutorial"]
+ first_choice --> class["Stand / Herkunft als konvergierende soziale Wahrheit"]
+ class --> name["Name, Titel, amtliche Anrede"]
+ name --> traversal_unlock["Abteil verlassen möglich"]
+ name --> briefing_available["Missionspapier / Hohenreith-Gesuch / Memorandum verfügbar"]
+
+ briefing_available --> supernatural_belief["Glaube ans Übernatürliche"]
+ briefing_available --> mission_briefed["Mission verstanden"]
+ briefing_available --> route_tutorial["Routen / Sprachverhalten tutorialisiert"]
+
+ traversal_unlock --> free_train["freie Traversal durch die Wagen"]
+ free_train --> clergy_corridor["Wagen der Geistlichen"]
+ free_train --> tunnel_any_corridor["Tunnelmoment in einem Korridor"]
+ free_train --> washroom["Waschraum"]
+ free_train --> dining_seen["Speisewagen gesehen"]
+
+ clergy_corridor --> faith["Religiosität / Gruß an den Priester"]
+ class --> body_dress["Körper / Kleidung / soziale Erscheinung"]
+ faith --> religious_accessories["religiöse Accessoires oder bewusste Abwesenheit"]
+ tunnel_any_corridor --> body_dress
+ religious_accessories --> body_dress
+
+ class --> face_hair["Gesicht / Haar / Frisur"]
+ washroom --> face_hair
+ body_dress -. "optional bessere Prosa, keine harte Pflicht" .-> face_hair
+
+ dining_seen --> meal_plan["Viktor auf Speisewagen / Bahnhofsessen ansprechen"]
+
+ name --> identity_complete["Intro-Identität vollständig"]
+ supernatural_belief --> identity_complete
+ faith --> identity_complete
+ body_dress --> identity_complete
+ face_hair --> identity_complete
+ mission_briefed --> identity_complete
+```
+
+Pflichtabhängigkeiten:
+
+- `Stand / Herkunft` vor `Name`, weil Namensräume, Titel, Anrede und gesellschaftliche Lesbarkeit davon abhängen.
+- `Stand / Herkunft` vor `Kleidung` und teilweise vor `Frisur`, weil Reisegarderobe, Material, Accessoires und Pflegegrad sozial codiert sind.
+- `Name / Anrede` vor freier Traversal, weil der Spieler erst wissen muss, wer die Welt hier anspricht.
+- `Missionspapier / Hohenreith-Gesuch / Memorandum` vor `Glaube ans Übernatürliche`, weil erst der Auftrag den Grund dieser Frage setzt.
+- `Religiosität` vor `Kleidung / Accessoires`, weil Gebetbuch, Medaillon, Kreuz, religiöser Schmuck oder bewusste Abwesenheit solcher Zeichen nur sinnvoll sind, wenn die Haltung zur Kirche bekannt ist.
+- `Körper / Kleidung` vor `Gesicht / Haar` ist keine harte Pflicht. Beide können Geschwister sein. Der Waschraum kann Gesicht / Haar auch zuerst definieren, solange Stand / Herkunft bekannt ist. Wenn Kleidung bereits definiert ist, darf der Waschraum darauf reagieren.
+- `Routen / Sprachverhalten` sind keine Completion-Pflicht der Charaktergenerierung. Das Tutorial muss aber vor oder während der ersten relevanten Dialogauswahl mit Viktor stattfinden.
+
+Freie Reihenfolge innerhalb der Episode:
+
+- Nach Stand und Name darf der Spieler die Wagen frei erkunden.
+- Missionsbriefing, Routen-Tutorial und Übernatürlichkeitsglaube können im Abteil mit Viktor passieren, müssen aber nicht zwingend vor der ersten kurzen Erkundung liegen, solange die Episode vor Abschluss darauf zurückführt.
+- Der Priester-Atom kann nur im Geistlichenwagen erscheinen.
+- Der Tunnel-Atom kann in jedem Korridor erscheinen, aber nur einmal. Er braucht Stand / Herkunft, weil Kleidung sozial gelesen wird. Religiosität ist nur nötig, wenn religiöse Accessoires in diesem Atom eingebunden werden.
+- Der Waschraum kann betreten werden, bevor Gesicht / Haar verfügbar sind; er bleibt dann Traversal- und Raumatmosphäre, bis die Voraussetzungen erfüllt sind.
+- Der Speisewagen ist reine Entdeckung. Sein Besuch wird nicht per Flag gespeichert, sondern über Ink-Visit-State; danach kann Viktor auf die Option angesprochen werden.
+
+Garantie gegen Sackgassen:
+
+- Die frühesten Pflichtentscheidungen bleiben im Abteil, bis sie erledigt sind: erster Choice-Tutorialmoment, Stand, Name / Anrede.
+- Erst danach öffnet sich die Traversal-Schleife.
+- Alle Wagenübergänge bleiben wiederholbar, damit versäumte Moment-Atoms später erneut auftauchen können.
+- Pflicht-Moment-Atoms müssen höhere Priorität als allgemeine Room-, Episode- oder Game-Atoms haben, damit sie nicht von Füllcontent verdrängt werden.
+- Wenn ein Pflicht-Atom nicht passt, muss mindestens ein plausibler Traversal- oder Beobachtungs-Atom offen bleiben, der den Spieler zurück in die Schleife führt.
+- Der Zug darf nicht enden, bevor Stand, Name, Mission, Übernatürlichkeitsglaube, Religiosität, äußere Erscheinung und Gesicht / Haar definiert sind.
+- Routenpunkte dürfen fehlen; sie sind Verhaltenserinnerung, nicht Identitätsvollständigkeit.
+
+## 14.3 Bahnhof
+
+Der Bahnhof macht Valerie öffentlich. Gepäck, Kutscher, Gepäckträger und Viktor bilden ein Manierenpuzzle. Essen wird abhängig von der Zugentscheidung verarbeitet.
+
+## 14.4 Kutschenfahrt
+
+Die Kutschenfahrt führt aus moderner Ordnung in lokale Ordnung. Das Wegzeichen / die alte Statue ist der garantierte Auslöser der übernatürlichen Begabung.
+
+## 14.5 Drei Anreisevarianten
+
+1. Direkt mit Kutsche bis Hohenreith.
+ Pünktlich, korrekt, nobler Empfang.
+
+2. Im Dorf anhalten, umsehen, mit Kutsche weiter.
+ Ortswissen, Reibung, verspätete erklärbare Ankunft.
+
+3. Im Dorf anhalten, Kutsche mit Gepäck und Nachricht vorausschicken, zu Fuß ankommen.
+ Eigenmächtig, beobachtet, sozial riskant, stärkere Wirkung auf Viktor und Haus.
+
+Alle enden mit:
+
+> Willkommen in Hohenreith.
+
+---
+
+# 15. Erstes Dinner und nächste Storystruktur
+
+## 15.1 Funktion des ersten Dinners
+
+Das erste Dinner ist der nächste große Zielblock. Es soll:
+
+- die Hohenreith-Familie einführen,
+- die Anreisevariante auswerten,
+- Tischordnung und Rangordnung sichtbar machen,
+- Amalia erstmals als Person unter Erwachsenenblicken zeigen,
+- Valeries gewählte Masken testen,
+- Viktor im Haus neu positionieren,
+- Dienerschaft und Butler als Beobachtungssystem etablieren.
+
+## 15.2 Amalias erster Eindruck
+
+Amalia soll nicht als bloße „mysteriöse Tochter“ eingeführt werden. Sie muss sichtbar machen, dass andere für sie sprechen. Der Spieler soll früh spüren, dass sie nicht einfach Objekt der Untersuchung ist, sondern ein mögliches Gegenüber.
+
+## 15.3 Erste private Szene
+
+Diese Szene folgt später und muss aus dem Beziehungsdrama heraus entstehen, nicht aus Krimi-Logik. Der Anlass muss sozial plausibel sein: Gästezimmer, Gastgeberinnenpflicht, Waschwasser, Handschuhe, ein kurzer unbeobachteter Moment.
+
+---
+
+# 16. Offene Entscheidungen
+
+1. Genaues Datum und Jahreszeit.
+2. Verwendung von Sisis Ermordung / Kaiserjubiläum.
+3. Name der gräflichen Familie.
+4. Struktur der Hohenreith-Familie.
+5. Amalias konkreter Kernkonflikt.
+6. Natur der Frauenquelle / des Eibenbrunns.
+7. Sprachstil der Hohenreith-Familie.
+8. Objektiver Status des Übernatürlichen.
+9. Aufbau des ersten Dinners.
+10. Engine-Details für Choice-Tags, Offered-History, Glossar und Score.
+11. Ob `HohenreithArrivalFrame` einen eigenen State für Fußankunft braucht.
+12. Ob Kapitel 03-Datei inhaltlich von „Graben“ auf „Kutschenfahrt“ umbenannt werden soll.
+
+---
+
+# 17. Verworfene oder überholte Ansätze
+
+Nicht wieder aufnehmen:
+
+- 1889 als aktuelles Spieljahr.
+- Charaktergenerierung als lineares Weave.
+- Zug nur als statisches Abteil.
+- Übernatürliche Begabung im Dorf als Pflichtauslöser.
+- Fassung als unsichtbarer Default.
+- Relationship-Matrix engine-seitig als String-Dictionary.
+- State-Listen, die nur Knotenbesuche duplizieren.
+- Glossare in Choice-Texten.
+- `{gloss:term|entry}` oder HTML-Glossare.
+- mehrere `#score`-Tags am Intro-Ende.
+- Krimi als Hauptstruktur.
+- Moderne pauschale „Männer kontrollieren, Frauen leiden“-Schablone.
+- Amerikanisierte White-Male-Privilege-Logik als Hauptmodell der Monarchie.
+- Frauenmacht des 19. Jahrhunderts als wertlos behandeln, nur weil sie indirekt, häuslich, rituell, sozial oder über Ruf funktioniert.
+- Valerie als bloßes Opfer ihrer Weiblichkeit schreiben; sie ist auch privilegierte Dame und Machtakteurin.
+- Viktor als bloße Verkörperung männlicher Unterdrückung schreiben; er ist auch Auftrag, Schutz, Pflicht und begrenzter Akteur.
+- Amalias Faszination primär über Eisenbahn oder Technik erklären.
+
+---
+
+# 18. Praktische Szenen-Checkliste
+
+Vor jeder neuen Szene prüfen:
+
+1. Welche Rolle spielt Valerie gerade?
+2. Welche Route kann sie ausdrücken?
+3. Was spürt ihr Körper?
+4. Wer beobachtet sie?
+5. Welche soziale Form wird gewahrt, gestört oder gebrochen?
+6. Welche Figur liest Valerie dadurch anders?
+7. Welcher semantische State ändert sich?
+8. Welche Relationship-Werte ändern sich?
+9. Welche späteren Callbacks entstehen?
+10. Welche Glossarbegriffe können Erklärung auslagern?
+11. Was ist konkret unheimlich?
+12. Ist die Szene Beziehungsdrama, nicht bloß Informationsabfrage?
+
+Die beste *Eibenreith*-Szene verschiebt mit einer kleinen Handlung mehrere Ebenen zugleich: Körper, Stand, Beziehung, Rolle, Ort und Bedrohung.
diff --git a/data/ink-src/eibenreith/helpers.ink b/data/ink-src/eibenreith/helpers.ink
new file mode 100644
index 0000000..e3d985f
--- /dev/null
+++ b/data/ink-src/eibenreith/helpers.ink
@@ -0,0 +1,712 @@
+// ============================================================================
+// EIBENREITH 00 HELPERS
+// ============================================================================
+// Include after global LIST definitions in Eibenreith.ink and before all
+// character relationship and chapter files.
+//
+// Contains:
+// - global non-character variables
+// - route counters and route helper functions
+// - time-slot, meal-plan, episode, location, and traversal helpers
+// - global story-state storage and LIST/state-tree helpers
+// - relationship helper functions
+//
+// Does not contain:
+// - global LIST declarations
+// - chapter-specific LIST declarations
+// - character relationship variables
+// - chapter prose or scene knots
+// ============================================================================
+
+
+// ============================================================================
+// GLOBAL SCHEDULE / LOCATION / EPISODE VARIABLES
+// ============================================================================
+// The LIST values used here are declared in Eibenreith.ink before this file is
+// included.
+
+VAR current_day = 1
+VAR current_slot = mid_morning
+VAR active_episode = episode_train_intro
+VAR last_slot_outcome = "normal"
+
+VAR meal_plan = meal_unset
+
+VAR current_location = loc_train_compartment
+VAR companions = ()
+VAR current_room_entry_bucket = -> empty_bucket
+VAR current_moment_bucket = -> empty_bucket
+VAR current_room_look_bucket = -> empty_bucket
+VAR current_room_exit_bucket = -> empty_bucket
+VAR current_episode_bucket = -> empty_bucket
+VAR current_episode_start = -> empty_bucket
+VAR current_episode_end = -> empty_bucket
+VAR current_game_bucket = -> game_bucket
+
+VAR slot_early_morning_episode = no_episode
+VAR slot_mid_morning_episode = episode_train_intro
+VAR slot_noon_episode = episode_station_midday
+VAR slot_afternoon_episode = episode_carriage_ride
+VAR slot_evening_episode = episode_first_dinner
+VAR slot_early_night_episode = no_episode
+VAR slot_late_night_episode = no_episode
+
+
+// ============================================================================
+// INTRO / CHARACTER-GENERATION VARIABLES
+// ============================================================================
+// These values are defined during chapter 01, but they are global character
+// facts and may be referenced by later chapters.
+
+VAR tut_choice_intro = false
+VAR tut_traversal_intro = false
+VAR tut_character_intro = false
+VAR tut_dialog_intro = false
+VAR tut_optional_intro = false
+
+VAR class = ()
+VAR title_part = ""
+VAR given_names = ""
+VAR common_name = ""
+VAR surname = ""
+VAR birthplace = ""
+VAR birthdate = ""
+VAR zodiac = ""
+
+VAR relig = ()
+VAR belief = ()
+VAR body = ()
+VAR outfit = ()
+VAR hair = ()
+VAR style = ()
+VAR face = ()
+
+
+// ============================================================================
+// VALERIE ROUTE VALUES
+// ============================================================================
+// These are counters, not mutually exclusive classes.
+// They describe the strategies the player repeatedly chooses for Valerie.
+
+VAR route_composure = 0
+VAR route_detective = 0
+VAR route_lover = 0
+VAR route_sapphic = 0
+VAR route_careless = 0
+VAR route_eccentric = 0
+
+
+// ============================================================================
+// ROUTE HELPERS
+// ============================================================================
+// Ink does not support overloaded functions or optional parameters.
+// Therefore:
+// - route_inc(route) increases by 1
+// - route_inc_by(route, amount) increases by amount
+
+=== function route(value) ===
+ ~ return value
+
+=== function route_inc(ref value) ===
+ ~ value += 1
+
+=== function route_inc_by(ref value, amount) ===
+ ~ value += amount
+
+=== function route_dec(ref value) ===
+ ~ value -= 1
+
+=== function route_dec_by(ref value, amount) ===
+ ~ value -= amount
+
+=== function route_move_to(ref value, amount) ===
+ ~ value = amount
+
+=== function route_clear(ref value) ===
+ ~ value = 0
+
+=== function route_is(value, amount) ===
+ ~ return value == amount
+
+=== function route_before(value, amount) ===
+ ~ return value <= amount
+
+=== function route_reached(value, amount) ===
+ ~ return value >= amount
+
+=== function route_between(value, min, max) ===
+ ~ return value >= min && value <= max
+
+=== function route_min(a, b) ===
+ {
+ - a <= b:
+ ~ return a
+ - else:
+ ~ return b
+ }
+
+=== function route_max(a, b) ===
+ {
+ - a >= b:
+ ~ return a
+ - else:
+ ~ return b
+ }
+
+=== function route_diff(positive, negative) ===
+ ~ return positive - negative
+
+=== function route_diff_reached(positive, negative, threshold) ===
+ ~ return positive - negative >= threshold
+
+=== function route_diff_before(positive, negative, threshold) ===
+ ~ return positive - negative <= threshold
+
+=== function route_diff_between(positive, negative, min, max) ===
+ ~ temp d = positive - negative
+ ~ return d >= min && d <= max
+
+=== function route_total() ===
+ ~ return route_composure + route_detective + route_lover + route_sapphic + route_careless + route_eccentric
+
+=== function route_share_reached(value, numerator, denominator) ===
+ ~ temp total = route_total()
+ ~ return total > 0 && value * denominator >= total * numerator
+
+=== function route_share_before(value, numerator, denominator) ===
+ ~ temp total = route_total()
+ ~ return total > 0 && value * denominator < total * numerator
+
+=== function route_high(value) ===
+ ~ return route_share_reached(value, 9, 10)
+
+=== function route_up(value) ===
+ ~ return route_share_reached(value, 7, 10)
+
+=== function route_down(value) ===
+ ~ return route_share_before(value, 3, 10)
+
+=== function route_low(value) ===
+ ~ return route_share_before(value, 1, 10)
+
+=== function matrix_total(positive, negative) ===
+ ~ return positive + negative
+
+=== function matrix_share_reached(positive, negative, numerator, denominator) ===
+ ~ temp total = matrix_total(positive, negative)
+ ~ return total > 0 && positive * denominator >= total * numerator
+
+=== function matrix_high(positive, negative) ===
+ ~ return matrix_share_reached(positive, negative, 9, 10)
+
+=== function matrix_up(positive, negative) ===
+ ~ return matrix_share_reached(positive, negative, 7, 10)
+
+=== function matrix_down(positive, negative) ===
+ ~ return matrix_share_reached(negative, positive, 7, 10)
+
+=== function matrix_low(positive, negative) ===
+ ~ return matrix_share_reached(negative, positive, 9, 10)
+
+=== function axis_positive(axis) ===
+ {
+ - axis == order_axis:
+ ~ return route_composure
+ - axis == inquiry_axis:
+ ~ return route_detective
+ - axis == allure_axis:
+ ~ return route_lover + route_sapphic
+ - else:
+ ~ return 0
+ }
+
+=== function axis_negative(axis) ===
+ {
+ - axis == order_axis:
+ ~ return route_eccentric
+ - axis == inquiry_axis:
+ ~ return route_careless
+ - axis == allure_axis:
+ ~ return route_composure
+ - else:
+ ~ return 0
+ }
+
+=== function axis_high(axis) ===
+ ~ return matrix_high(axis_positive(axis), axis_negative(axis))
+
+=== function axis_up(axis) ===
+ ~ return matrix_up(axis_positive(axis), axis_negative(axis))
+
+=== function axis_down(axis) ===
+ ~ return matrix_down(axis_positive(axis), axis_negative(axis))
+
+=== function axis_low(axis) ===
+ ~ return matrix_low(axis_positive(axis), axis_negative(axis))
+
+
+// ============================================================================
+// TIME-SLOT HELPERS
+// ============================================================================
+// TimeSlot is an ordered LIST declared in Eibenreith.ink.
+// Use these helpers for the daily schedule structure.
+
+=== function day(value) ===
+ ~ return current_day == value
+
+=== function day_move_to(value) ===
+ ~ current_day = value
+
+=== function day_inc() ===
+ ~ current_day += 1
+
+=== function time(slot) ===
+ ~ return current_slot == slot
+
+=== function time_move_to(slot) ===
+ ~ current_slot = slot
+
+=== function time_is(slot) ===
+ ~ return current_slot == slot
+
+=== function time_before(slot) ===
+ ~ return current_slot < slot
+
+=== function time_reached(slot) ===
+ ~ return current_slot >= slot
+
+=== function time_between(first, last) ===
+ ~ return current_slot >= first && current_slot <= last
+
+
+// ============================================================================
+// TIMETABLE / EPISODE DISPATCH
+// ============================================================================
+// Content files define episode entry knots and buckets. Timetable control lives
+// here so authored episode files do not choose themselves.
+
+=== start_game ===
+-> run_slot(mid_morning)
+
+=== run_slot(slot) ===
+{
+- slot == mid_morning:
+ -> run_episode(slot_mid_morning_episode)
+- slot == noon:
+ -> run_episode(slot_noon_episode)
+- slot == afternoon:
+ -> run_episode(slot_afternoon_episode)
+- slot == evening:
+ -> run_episode(slot_evening_episode)
+- else:
+ -> END
+}
+
+=== function slot_episode(slot, episode_to_run) ===
+ {
+ - slot == early_morning:
+ ~ return slot_early_morning_episode == episode_to_run
+ - slot == mid_morning:
+ ~ return slot_mid_morning_episode == episode_to_run
+ - slot == noon:
+ ~ return slot_noon_episode == episode_to_run
+ - slot == afternoon:
+ ~ return slot_afternoon_episode == episode_to_run
+ - slot == evening:
+ ~ return slot_evening_episode == episode_to_run
+ - slot == early_night:
+ ~ return slot_early_night_episode == episode_to_run
+ - slot == late_night:
+ ~ return slot_late_night_episode == episode_to_run
+ - else:
+ ~ return false
+ }
+
+=== function slot_schedule(slot, episode_to_run) ===
+ {
+ - slot == early_morning:
+ ~ slot_early_morning_episode = episode_to_run
+ - slot == mid_morning:
+ ~ slot_mid_morning_episode = episode_to_run
+ - slot == noon:
+ ~ slot_noon_episode = episode_to_run
+ - slot == afternoon:
+ ~ slot_afternoon_episode = episode_to_run
+ - slot == evening:
+ ~ slot_evening_episode = episode_to_run
+ - slot == early_night:
+ ~ slot_early_night_episode = episode_to_run
+ - slot == late_night:
+ ~ slot_late_night_episode = episode_to_run
+ }
+
+=== run_episode(episode_to_run) ===
+{
+- episode_to_run == episode_train_intro:
+ -> enter_episode(episode_train_intro, mid_morning, -> train_intro_start, -> train_intro_end, -> train_intro_episode_bucket) -> train_intro_start
+- episode_to_run == episode_station_midday:
+ -> enter_episode(episode_station_midday, noon, -> station_midday, -> station_midday_end, -> station_midday_episode_bucket) -> station_midday
+- episode_to_run == episode_carriage_ride:
+ -> enter_episode(episode_carriage_ride, afternoon, -> carriage_ride, -> carriage_ride_end, -> carriage_ride_episode_bucket) -> carriage_ride
+- episode_to_run == episode_first_dinner:
+ -> pre_dinner_transition
+- else:
+ -> END
+}
+
+=== advance_to_slot(slot) ===
+~ current_slot = slot
+-> run_slot(slot)
+
+
+// ============================================================================
+// EPISODE HELPERS
+// ============================================================================
+// EpisodeId is a LIST declared in Eibenreith.ink.
+// active_episode is the coarse structural episode currently being played.
+
+=== function episode(value) ===
+ ~ return active_episode == value
+
+=== function episode_start(value, slot) ===
+ ~ active_episode = value
+ ~ current_slot = slot
+ ~ last_slot_outcome = "normal"
+
+=== function episode_move_to(value) ===
+ ~ active_episode = value
+
+=== function episode_end(outcome) ===
+ ~ active_episode = no_episode
+ ~ current_episode_bucket = -> empty_bucket
+ ~ current_episode_start = -> empty_bucket
+ ~ current_episode_end = -> empty_bucket
+ ~ last_slot_outcome = outcome
+
+=== function episode_active(value) ===
+ ~ return active_episode == value
+
+=== function outcome_is(value) ===
+ ~ return last_slot_outcome == value
+
+=== function outcome_move_to(value) ===
+ ~ last_slot_outcome = value
+
+
+// ============================================================================
+// MEAL-PLAN HELPERS
+// ============================================================================
+// MealPlan is a LIST declared in Eibenreith.ink.
+// The arrival day uses this to remember how lunch is handled.
+
+=== function meal(value) ===
+ ~ return meal_plan == value
+
+=== function meal_choose(value) ===
+ ~ meal_plan = value
+
+=== function meal_is(value) ===
+ ~ return meal_plan == value
+
+=== function meal_clear() ===
+ ~ meal_plan = meal_unset
+
+
+// ============================================================================
+// LOCATION HELPERS
+// ============================================================================
+// Location is a LIST declared in Eibenreith.ink.
+// current_location is intentionally coarse and exists so episode/game buckets
+// can react to where Valerie currently is.
+
+=== function loc(value) ===
+ ~ return current_location == value
+
+=== function loc_move_to(value) ===
+ ~ current_location = value
+ ~ move_companions_to(value)
+
+=== function loc_is(value) ===
+ ~ return current_location == value
+
+=== function accompanied_by(character) ===
+ ~ return companions ? character
+
+=== function companion_join(character) ===
+ ~ companions += character
+
+=== function companion_leave(character) ===
+ ~ companions -= character
+
+=== function present(character) ===
+ {
+ - character == viktor:
+ ~ return viktor_location == current_location
+ - else:
+ ~ return false
+ }
+
+=== function character_move_to(character, location) ===
+ {
+ - character == viktor:
+ ~ viktor_location = location
+ }
+
+=== function move_companions_to(location) ===
+ {
+ - accompanied_by(viktor):
+ ~ viktor_location = location
+ }
+
+=== enter_episode(value, slot, start_bucket, end_bucket, episode_bucket) ===
+ ~ episode_start(value, slot)
+ ~ current_episode_start = start_bucket
+ ~ current_episode_end = end_bucket
+ ~ current_episode_bucket = episode_bucket
+->->
+
+=== enter_room(location, entry_bucket, look_bucket, exit_bucket, moment_bucket) ===
+ ~ loc_move_to(location)
+ ~ current_room_entry_bucket = entry_bucket
+ ~ current_moment_bucket = moment_bucket
+ ~ current_room_look_bucket = look_bucket
+ ~ current_room_exit_bucket = exit_bucket
+->->
+
+=== function room_seen_on_enter() ===
+ ~ return TURNS_SINCE(current_room_entry_bucket) >= 0
+
+// ============================================================================
+// GLOBAL STORY-STATE STORAGE
+// ============================================================================
+// Chapter-specific state machines are declared as LISTs in the main file,
+// directly above the chapter index they belong to.
+//
+// story_state stores all reached states from all LIST-based state machines.
+// State functions below implement high-watermark logic:
+// reaching a later state automatically reaches all earlier states in the same
+// LIST chain.
+
+VAR story_state = ()
+
+
+// ============================================================================
+// STATE HELPERS
+// ============================================================================
+
+// Remove and return the lowest item from a list.
+// Internal helper for state_reach().
+=== function state_pop(ref list) ===
+ ~ temp x = LIST_MIN(list)
+ ~ list -= x
+ ~ return x
+
+
+// Return true if the given forward state has been reached.
+// Use only with one-way encounter/progress LISTs advanced through state_reach().
+// For independent checklist facts, use has() / lacks() / mark().
+// Example:
+// {state_reached(CourtMission.hidden_instruction_revealed): ...}
+=== function state_reached(state) ===
+ ~ return LIST_COUNT(story_state ^ state) > 0
+
+
+// Return true if the given forward state has not yet been reached.
+// Use only with one-way encounter/progress LISTs advanced through state_reach().
+// Example:
+// {state_before(CourtMission.hidden_instruction_revealed): ...}
+=== function state_before(state) ===
+ ~ return not state_reached(state)
+
+
+// Return true if lower_state has been reached but upper_state has not.
+// Lower bound inclusive, upper bound exclusive.
+// Example:
+// {state_between(CourtMission.official_cover_understood, CourtMission.hidden_instruction_revealed): ...}
+=== function state_between(lower_state, upper_state) ===
+ ~ return state_reached(lower_state) && not state_reached(upper_state)
+
+
+// Return true if state is the highest reached state in its LIST chain.
+// This is the practical equivalent of current-state testing for a high-watermark chain.
+=== function state_is(state) ===
+ ~ temp chain = LIST_ALL(state)
+ ~ temp reached_in_chain = story_state ^ chain
+ {
+ - reached_in_chain:
+ ~ return LIST_MAX(reached_in_chain) == state
+ - else:
+ ~ return false
+ }
+
+
+// Return the highest reached state in the same LIST chain as state.
+// Useful mainly for debugging or diagnostic text.
+=== function state_current(state) ===
+ ~ temp chain = LIST_ALL(state)
+ ~ temp reached_in_chain = story_state ^ chain
+ {
+ - reached_in_chain:
+ ~ return LIST_MAX(reached_in_chain)
+ - else:
+ ~ return ()
+ }
+
+
+// Mark a state, or a list of states, as reached.
+// High-watermark behavior:
+// reaching a state automatically reaches all earlier states in the same LIST chain.
+//
+// Examples:
+// ~ state_reach(CourtMission.hidden_instruction_revealed)
+// ~ state_reach((CourtMission.official_cover_understood, ViktorRelationFrame.handler_role_understood))
+=== function state_reach(states_to_set) ===
+ ~ temp x = state_pop(states_to_set)
+ {
+ - not x:
+ ~ return false
+
+ - not state_reached(x):
+ ~ temp chain = LIST_ALL(x)
+ ~ temp states_gained = LIST_RANGE(chain, LIST_MIN(chain), x)
+ ~ story_state += states_gained
+ ~ state_reach(states_to_set)
+ ~ return true
+
+ - else:
+ ~ return false || state_reach(states_to_set)
+ }
+
+
+// Return true if every given independent fact has been marked.
+// Facts are exact checklist items, not forward-moving encounter states.
+// Example:
+// {has(class_def)}
+// {has((class_def, name_def))}
+=== function has(facts) ===
+ ~ return story_state ? facts
+
+
+// Return true if at least one given independent fact is still missing.
+// Example:
+// {lacks(relig_def)}
+// {lacks((body_def, face_def))}
+=== function lacks(facts) ===
+ ~ return not has(facts)
+
+
+// Mark an independent fact, or a list of independent facts.
+// Unlike state_reach(), this does not imply earlier items in the same LIST.
+// Example:
+// ~ mark(class_def)
+// ~ mark((class_def, name_def))
+=== function mark(facts_to_set) ===
+ ~ story_state += facts_to_set
+ ~ return true
+
+
+// Alias for readability when scene code wants to say move_to.
+// Same high-watermark behavior as state_reach().
+=== function state_move_to(state) ===
+ ~ state_reach(state)
+
+
+// Remove all reached states in the same LIST chain as state.
+// Use rarely: debug, dream logic, simulation reset, or deliberate memory loss.
+=== function state_clear(state) ===
+ ~ story_state -= LIST_ALL(state)
+
+
+// Clear all reached states from all state machines.
+// Use only for debug or full reinitialization.
+=== function state_clear_all() ===
+ ~ story_state = ()
+
+
+// ============================================================================
+// RELATIONSHIP HELPERS
+// ============================================================================
+// Relationship variables are defined in eibenreith_00_character_relationships.ink.
+// These helpers operate on those variables by reference.
+//
+// Ink does not support overloaded functions or optional parameters.
+// Therefore:
+// - rel_inc(rel) increases by 1
+// - rel_inc_by(rel, amount) increases by amount
+
+=== function rel(value) ===
+ ~ return value
+
+=== function rel_inc(ref value) ===
+ ~ value += 1
+
+=== function rel_inc_by(ref value, amount) ===
+ ~ value += amount
+
+=== function rel_dec(ref value) ===
+ ~ value -= 1
+
+=== function rel_dec_by(ref value, amount) ===
+ ~ value -= amount
+
+=== function rel_move_to(ref value, amount) ===
+ ~ value = amount
+
+=== function rel_clear(ref value) ===
+ ~ value = 0
+
+=== function rel_is(value, amount) ===
+ ~ return value == amount
+
+=== function rel_before(value, amount) ===
+ ~ return value <= amount
+
+=== function rel_reached(value, amount) ===
+ ~ return value >= amount
+
+=== function rel_between(value, min, max) ===
+ ~ return value >= min && value <= max
+
+=== function rel_min(a, b) ===
+ {
+ - a <= b:
+ ~ return a
+ - else:
+ ~ return b
+ }
+
+=== function rel_max(a, b) ===
+ {
+ - a >= b:
+ ~ return a
+ - else:
+ ~ return b
+ }
+
+=== function rel_diff(positive, negative) ===
+ ~ return positive - negative
+
+=== function rel_diff_reached(positive, negative, threshold) ===
+ ~ return positive - negative >= threshold
+
+=== function rel_diff_before(positive, negative, threshold) ===
+ ~ return positive - negative <= threshold
+
+=== function rel_diff_between(positive, negative, min, max) ===
+ ~ temp d = positive - negative
+ ~ return d >= min && d <= max
+
+=== function rel_share_reached(value, total, numerator, denominator) ===
+ ~ return total > 0 && value * denominator >= total * numerator
+
+=== function rel_high(positive, negative) ===
+ ~ return matrix_high(positive, negative)
+
+=== function rel_up(positive, negative) ===
+ ~ return matrix_up(positive, negative)
+
+=== function rel_down(positive, negative) ===
+ ~ return matrix_down(positive, negative)
+
+=== function rel_low(positive, negative) ===
+ ~ return matrix_low(positive, negative)
diff --git a/data/ink-src/eibenreith/main.ink b/data/ink-src/eibenreith/main.ink
new file mode 100644
index 0000000..47ac807
--- /dev/null
+++ b/data/ink-src/eibenreith/main.ink
@@ -0,0 +1,83 @@
+// ============================================================================
+// EIBENREITH.INK - MAIN INDEX / GLOBAL REFERENCE
+// ============================================================================
+// Root file compiled by Ink. Keep this file to reference vocabularies, include
+// order, and the entry divert. Authoring guidance belongs in the design docs;
+// episode flow belongs in helpers.ink.
+
+// ============================================================================
+// GLOBAL STRUCTURAL LISTS
+// ============================================================================
+LIST TimeSlot = early_morning, mid_morning, noon, afternoon, evening, early_night, late_night
+LIST EpisodeId = no_episode, episode_train_intro, episode_station_midday, episode_carriage_ride, episode_first_dinner
+LIST MealPlan = meal_unset, dining_car, station_restaurant, light_refreshment, skipped
+LIST Location = loc_train_compartment, loc_train_home_corridor, loc_train_clergy_corridor, loc_train_washroom_corridor, loc_train_washroom, loc_train_dining_car, loc_train_rear_lookout, loc_train_second_class_door, loc_station_platform, loc_station_restaurant, loc_carriage, loc_carriage_halt, loc_crossroad_statue, loc_forest_clearing, loc_roadside_statue, loc_eibenreith_village, loc_hohenreith_arrival, loc_hohenreith_dining_room
+LIST Character = viktor
+
+LIST Class = noble, middle, working
+LIST Relig = catholic, social, reform, spiritist, wounded
+LIST Belief = believer, sceptic, performer, unsure
+LIST Body = small_slender, medium_soft, tall_slender, compact_strong
+LIST Outfit = charcoal_plum_velvet, black_brown_ivory_lace, blue_grey_practical, dark_green_black_trim, black_veil_severe
+LIST Hair = dark_brown, chestnut, dark_blond_ash, auburn
+LIST Style = centre_part_low_bun, soft_waves_chignon, braided_low_knot, raised_front_modern
+LIST Face = cool_sharp, soft_alert, calm_dark_eyes, fine_controlled, marked_jaw
+LIST Def = class_def, name_def, relig_def, body_def, face_def, belief_def, route_language_def, dining_car_known_def, intro_def
+LIST RouteAxis = order_axis, inquiry_axis, allure_axis
+
+// ============================================================================
+// SYSTEM INCLUDES
+// ============================================================================
+INCLUDE helpers.ink
+INCLUDE buckets.ink
+INCLUDE characters.ink
+
+// ============================================================================
+// CHAPTER 01 STATE LISTS
+// ============================================================================
+LIST CourtMission = court_mission_unknown, sealed_letter_known, official_cover_understood, household_affair_named, supernatural_pretext_named, hidden_instruction_revealed, mission_contradictions_suspected
+LIST ViktorRelationFrame = viktor_frame_unknown, escort_present, secretary_cover_understood, handler_role_understood, skepticism_registered, methods_negotiated, mutual_risk_recognized
+LIST ValerieWorkingMask = valerie_mask_unformed, courtly_woman_presented, name_claimed, medium_reputation_invoked, method_as_mask_understood, social_strategy_established
+
+INCLUDE 01_zug.ink
+
+// ============================================================================
+// CHAPTER 02 STATE LISTS
+// ============================================================================
+LIST PublicPersona = public_unseen, noticed_as_lady, noticed_as_official_arrival, station_audience_tested, public_mask_established, public_mask_strained
+LIST ServiceWorld = service_unseen, staff_as_function_noticed, staff_as_witnesses_noticed, staff_as_network_suspected, staff_as_power_source_understood
+LIST ArrivalLogistics = arrival_logistics_unknown, meal_plan_chosen, meal_taken_in_train, meal_taken_at_station, meal_skipped_or_light, carriage_arranged, baggage_handed_over, road_departure_ready
+
+INCLUDE 02_bahnhof.ink
+
+// ============================================================================
+// CHAPTER 03 STATE LISTS
+// ============================================================================
+LIST OldSiteKnowledge = old_site_unknown, managed_landscape_seen, religious_markers_seen, old_boundary_felt, old_name_heard, prechristian_underlayer_suspected, old_site_has_claim
+LIST ThresholdCrossing = ordinary_travel, city_order_receding, valley_order_emerging, local_rules_beginning, return_feels_less_simple
+LIST SupernaturalFaculty = faculty_unframed, no_claim_made, intuition_framed, sensory_anomaly_framed, performance_framed, faculty_committed
+LIST AfternoonOutcome = punctual_arrival_preserved, village_knowledge_prioritised, arrival_form_compromised
+
+INCLUDE 03_kutschenfahrt.ink
+INCLUDE 03_anreise_routes.ink
+
+// ============================================================================
+// CHAPTER 04 STATE LISTS
+// ============================================================================
+LIST EibenreithPublicFace = eibenreith_face_unknown, curious, cautious, suspicious, unsettled, openly_watching_valerie
+LIST VillageReligiousTension = village_religion_unknown, church_as_center_seen, christian_surface_noted, older_presence_hint, two_orders_in_conflict, village_fear_has_form
+LIST HohenreithArrivalFrame = hohenreith_arrival_unknown, expected_guest, punctual_official_guest, delayed_after_village_detour, household_form_preserved, household_form_disturbed, amalia_seen_before_dinner
+
+INCLUDE 04_ankunft.ink
+
+// ============================================================================
+// CHAPTER 05 STATE LISTS
+// ============================================================================
+LIST FirstDinner = dinner_not_started, household_assembled, seating_order_read, amalia_seen_as_spoken_for, valerie_tested_at_table, dinner_completed
+
+// INCLUDE 05_dinner.ink
+
+// ============================================================================
+// ENTRY POINT
+// ============================================================================
+-> start_game
diff --git a/data/ink-src/eibenreith/mermaid-diagram.png b/data/ink-src/eibenreith/mermaid-diagram.png
new file mode 100644
index 0000000..a0b3ce0
Binary files /dev/null and b/data/ink-src/eibenreith/mermaid-diagram.png differ
diff --git a/data/ink-src/eibenreith_01_zug.ink b/data/ink-src/eibenreith_01_zug.ink
index 3d655d3..b0ff63b 100644
--- a/data/ink-src/eibenreith_01_zug.ink
+++ b/data/ink-src/eibenreith_01_zug.ink
@@ -947,7 +947,7 @@ Viktors Höflichkeit ist glatt genug, um keine Fingerabdrücke zu behalten. Daru
** [__Summe__: Eine Antwort, die keine Worte braucht.] #action:conversation #optional
#route:eccentric
~ eccentric += 1
- Du summst so leise, dass es mehr Haltung als Ton ist. Der Rhythmus der Räder nimmt die Melodie auf und gibt sie höflicher zurück, als sie gekommen ist. #tts[Hum this line very softly, almost under the breath. Keep it restrained, intimate, and wordless, with a faint ironic composure.]
+ Du summst so leise, dass es mehr Haltung als Ton ist. Der Rhythmus der Räder nimmt die Melodie auf und gibt sie höflicher zurück, als sie gekommen ist. #tts[Hum the Kaiserhymne 'Gott erhalte Franz den Kaiser, Unsern guten Kaiser Franz!' very softly, almost under the breath. Keep it restrained, intimate, and wordless, with a faint ironic composure.]
Viktor sieht nicht auf.
@@ -956,7 +956,7 @@ Viktors Höflichkeit ist glatt genug, um keine Fingerabdrücke zu behalten. Daru
** [__Singe__: Die Kaiserhymne, beinahe ohne Stimme.] #action:conversation #optional
#route:eccentric
~ eccentric += 1
- Du singst kaum lauter als das Rauschen im Polster: „Gott beschütze Franz den Kaiser ...“ Nicht fromm genug für ein Gebet, nicht spöttisch genug für Hochverrat. #tts[Sing the quoted hymn fragment almost silently, like a controlled private murmur. Use a formal, old Austrian ceremonial feel, but keep the delivery restrained and ambiguous.]
+ Du singst kaum lauter als das Rauschen im Polster: „Gott erhalte Franz den Kaiser, Unsern guten Kaiser Franz!“ Nicht fromm genug für ein Gebet, nicht spöttisch genug für Hochverrat. #tts[Sing the Kaiserhymne almost silently, like a controlled private murmur. Use a formal, old Austrian ceremonial feel, but keep the delivery restrained and ambiguous.]
Ein Muskel an Viktors Kiefer bewegt sich.
diff --git a/data/ink/eibenreith.ink.json b/data/ink/eibenreith.ink.json
index 5f85caf..cdd58ef 100644
--- a/data/ink/eibenreith.ink.json
+++ b/data/ink/eibenreith.ink.json
@@ -1 +1 @@
-{"inkVersion":21,"root":[["\n","\n","\n","\n",{"->":"intro_train"},["done",{"#n":"g-0"}],null],"done",{"intro_train":["#","^chapter[Das Abteil] ","/#","#","^music[Kaiserpunk Waltz.mp3](crossfade, loop, lead=8)","/#","^Der Zug lässt Wien hinter sich, doch Wien hat dich noch nicht freigegeben. Es bleibt an dir haften, im Puder am Kragen, im Kohlenrauch im Haar, im Druck des Korsetts unter dem Reisekleid und im leisen Schwitzen unter den Handschuhen. Im Ridikül ruht das versiegelte Schreiben des Hofes; in den Polstern der ersten Klasse ruht der Geruch fremder Reisen. Herr Viktor Nowak sitzt dir gegenüber, unbewegt, korrekt, aufmerksam. Kein Blick von ihm ist unhöflich. Keiner ist unschuldig. Das Abteil fährt nach Süden, doch für einen Augenblick scheint es weniger ein Reiseraum als ein gepolstertes Amtszimmer, in dem selbst dein Atem Haltung annehmen muss. ","#","^tts[Begin in a low, intimate narrative voice. Keep the pace unhurried and formal, with a thread of contained unease.] ","/#","#","^gloss[Ridikül](Kleine Damenhandtasche oder Handarbeitsbeutel. Klein genug um harmlos zu wirken, groß genug für Briefe, Schlüssel und jene Dinge, von denen Herren später behaupten, sie hätten nichts davon gewusst.) ","/#","#","^gloss[erste Klasse](Die teuerste Wagenklasse der Eisenbahn. Sie bietet weichere Polster, bessere Luft und vor allem weniger Menschen, was im bürgerlichen Fortschrittsglauben oft dasselbe bedeutet.) ","/#","#","^gloss[Korsett](Formendes Mieder für Taille und Oberkörper. Es stützt Haltung, beschränkt Atem und beweist, dass weibliche Selbstbeherrschung zuerst am Körper verlangt wird.) ","/#","#","^gloss[Amtszimmer](Zimmer der amtlichen Ordnung. Dort wird ein Mensch selten lauter unterworfen, als wenn alles ganz höflich und schriftlich geschieht.)","/#","\n",{"->":"train_compartment"},null],"train_compartment":[["ev",{"VAR?":"tut_choice_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Links erscheinen deine Entscheidungen. Du kannst sie mit der Maus wählen oder die angezeigte Taste drücken. Das hervorgehobene Wort nennt die Handlung. Einige Kürzel folgen der alten Textadventure-Gewohnheit: L für Schaue, X für Untersuche.]","/#","ev",true,"/ev",{"VAR=":"tut_choice_intro","re":true},{"->":".^.^.^.5"},null]}],"nop","\n",["ev",{"CNT?":".^.c-0"},{"CNT?":".^.c-1"},"&&",{"CNT?":".^.c-2"},"&&",{"CNT?":".^.c-3"},"&&",{"CNT?":"define_appearance"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"first_viktor_exchange"},{"->":".^.^.^.12"},null]}],"nop","\n","ev","str","^__Schaue__: Aus dem Fenster.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Untersuche__: Viktor.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Betrachte__: Das Abteil.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Greife__: Nach dem Schreiben in deinem Ridikül.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["^ ","#","^action:orientation ","/#","#","^key:l","/#","\n",{"->t->":"look_out_window"},{"->t->":"next_compartment_definition"},{"->":".^.^"},{"#f":5}],"c-1":["^ ","#","^action:orientation ","/#","#","^key:x","/#","\n",{"->t->":"observe_viktor"},{"->t->":"next_compartment_definition"},{"->":".^.^"},{"#f":5}],"c-2":["^ ","#","^action:orientation","/#","\n",{"->t->":"compartment_room"},{"->t->":"next_compartment_definition"},{"->":".^.^"},{"#f":5}],"c-3":["^ ","#","^action:object","/#","\n",{"->t->":"compartment_letter"},{"->t->":"next_compartment_definition"},{"->":".^.^"},{"#f":5}],"#n":"abteil"}],null],null],"next_compartment_definition":["ev",{"CNT?":"define_class_and_name"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","^Was immer du im Abteil betrachtest, führt auf dieselbe unausgesprochene Frage zurück: Aus welcher Ordnung kommst du, dass Wien dich nun in eine andere schicken kann?","\n",{"->t->":"define_class_and_name"},"ev","void","/ev","->->",{"->":".^.^.^.5"},null]}],"nop","\n","ev",{"CNT?":"define_religion_and_supernatural"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","^Die Fahrt nach Hohenreith ist kein bloßer Auftrag. Sie berührt Kirche, Aberglauben, Spiritismus und die Frage, welche unsichtbaren Dinge du überhaupt für möglich hältst.","\n",{"->t->":"define_religion_and_supernatural"},"ev","void","/ev","->->",{"->":".^.^.^.12"},null]}],"nop","\n","ev",{"CNT?":"define_appearance"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","^Der Zug fährt in einen Tunnel. Das Land draußen verschwindet; die Scheibe verliert die Berge, die Felder, den Himmel, und behält nur noch das Abteil. ","#","^tts[Drop the volume slightly and slow down. Make the tunnel feel like the room closing around the listener.]","/#","\n",{"->t->":"define_appearance"},"ev","void","/ev","->->",{"->":".^.^.^.19"},null]}],"nop","\n","ev","void","/ev","->->",null],"compartment_room":["^Das Abteil bleibt, was es war: Polster, Messing, Glas, Bedienung, Abstand. Ein fahrender kleiner Salon, zusammengesetzt aus Dingen, die Menschen benutzen, ohne sie selbst zu putzen, zu polieren oder zu bezahlen. ","#","^gloss[Salon](Ein Raum, in dem Gesellschaft sich selbst für Geist hält. Wer dort spricht, spricht selten nur mit der Person vor sich.)","/#","\n","ev","void","/ev","->->",null],"compartment_letter":["^Deine Hand findet das Ridikül. Unter Stoff, Verschluss und Handschuh liegt das Schreiben des Hofes, schwerer durch Bedeutung als durch Papier. ","#","^tts[Read more quietly here, as if the letter has physical weight. Put a slight pause before \"schwerer\".] ","/#","#","^gloss[Ridikül](Kleine Damenhandtasche oder Handarbeitsbeutel. Klein genug um harmlos zu wirken, groß genug für Briefe, Schlüssel und jene Dinge, von denen Herren später behaupten, sie hätten nichts davon gewusst.)","/#","\n","ev",{"CNT?":"define_religion_and_supernatural"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Du kennst seinen Ton nun, seine Auslassungen, seine Vorsicht und die Art, wie eine Kanzlei das Unheimliche in anständige Grammatik kleidet. ","#","^gloss[Kanzlei](Amtliche Schreibstube. Sie verwandelt Furcht in Formulierungen, Schuld in Zuständigkeit und Menschen in Aktenlagen.)","/#","\n",{"->":".^.^.^.12"},null]}],"nop","\n","ev","void","/ev","->->",null],"look_out_window":["^Draußen zerfallen die letzten Ränder der Stadt in winterbraune Felder und Dörfer, deren Kirchtürme gegen den Pfiff der Lokomotive nichts auszurichten haben. Die Schienen nehmen sich das Land, ohne um Erlaubnis zu fragen. Dämme schneiden durch Obstgärten. Telegraphenstangen gleiten in regelmäßigen Abständen vorbei, eine nach der anderen, wie Gedanken, die man zu rasch verworfen hat. ","#","^tts[Let the rhythm lightly suggest train motion without becoming sing-song. Build a little momentum through the list of passing objects.] ","/#","#","^gloss[Telegraphenstangen](Holzstangen der elektrischen Nachrichten. Die Monarchie liebt Drähte, weil sie Gerüchte schneller machen und zugleich wie Ordnung aussehen.) ","/#","#","^sfx[steam-whistle.ogg]","/#","\n","^Du erwartest, dass sich die Eisenbahn wie ein Sieg des Jahrhunderts anfühlt.","\n","^Stattdessen fühlt sie sich wie ein Streit an. ","#","^image[train_cabin.png](landscape)","/#","\n","^Die Maschine wirft sich mit einer Gewalt nach Süden, die gute Gesellschaft niemals offen bewundert hätte. Die Lampen zittern in ihren Fassungen. Deine Tasse schlägt leise gegen die Untertasse. Jenseits der Scheibe beginnt das Land zu steigen, zuerst beinahe höflich, dann mit festerem Willen, bis die Bahnlinie selbst mit den Bergen zu verhandeln scheint: durch Steinbögen, schwarze Tunnel und Viadukte, die mit dem ganzen Selbstvertrauen kaiserlicher Ingenieurskunst über Schluchten gesetzt sind. ","#","^tts[Give this paragraph more force and breath than the previous one. Make the machinery feel powerful, then widen into awe at the viaducts.] ","/#","#","^gloss[Viadukte](Große Brücken der Eisenbahn über Täler und Schluchten. Ingenieurskunst hat den schönen Vorteil, dass sie Abgründe nicht leugnet, sondern überquert.)","/#","\n","ev","void","/ev","->->",null],"observe_viktor":[["^Viktor wirkt noch immer von nichts beeindruckt.","\n","^Seine Zivilkleidung ist korrekt genug, um keinen Widerspruch hervorzurufen: dunkler Gehrock, nüchterne Weste, Handschuhe, tadelloser Kragen, dazu die Haltung eines Mannes, der selbst im Sitzen nie ganz aufhört, im Dienst zu sein. Doch kein Schneider der Monarchie kann Disziplin verbergen. ","#","^tts[Use a precise, observant tone. Let the clothing list feel clipped and controlled, then sharpen the final sentence.] ","/#","#","^gloss[Zivilkleidung](Bürgerliche Kleidung im Gegensatz zur Uniform. Manche Männer legen damit nur den Stoff ab, nicht den Befehlston.) ","/#","#","^gloss[Gehrock](Langer Herrenrock für korrekte Tageskleidung. Ein Kleidungsstück, das Männern erlaubt, bürgerlich, amtlich und moralisch zugleich auszusehen.)","/#","\n","ev","str","^__Untersuche__: Viktors Haltung.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Schaue__: Viktors Blick nach.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Untersuche__: Viktors Kleidung.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:orientation","/#","\n","^Sie bleibt in seinen Schultern, in der Sparsamkeit seiner Bewegungen, in der Art, wie er selbst im Sitzen nie ganz aufhört, einen Raum zu sichern.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:orientation","/#","\n","^Seine Augen messen Türen, Fenster, Gepäcknetz, Korridor, dein Gesicht und wieder die Tür. Nicht gierig. Nicht unhöflich. Nur vollständig. ","#","^gloss[Gepäcknetz](Ablage über den Sitzen des Eisenbahnabteils. Dort reisen Hüte, Schachteln und kleine Lügen, die zu leicht für den Koffer sind.)","/#","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:orientation","/#","\n","^Auf dem Papier ist er dein Sekretär und Reisebegleiter. ","#","^gloss[Sekretär](Schreib und Vertrauensgehilfe. Ein Mann dieses Namens ordnet Papier, Termine und manchmal auch die Wahrheit, bis sie in ein vorzeigbares Format passt.)","/#","\n","^In Wahrheit ist er ein Offizier, den man einer heiklen Angelegenheit beigegeben hat; aus Kanälen, die Namen haben, aber sie nicht unnötig gebrauchen. Sein wirklicher Rang bleibt im Jagdhaus Hohenreith ungenannt: Rittmeister Viktor Alois Nowak. ","#","^gloss[Jagdhaus](Adeliger Landsitz für Jagden und kurze Aufenthalte. Weniger Hauptsitz als Bühne für Gäste, Förster, Gewehre und Geheimnisse.) ","/#","#","^gloss[Rittmeister](Kavallerieoffizier im Rang eines Hauptmanns. Ein solcher Mann kann Zivilkleidung tragen, aber nur selten Zivilist werden.)","/#","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["^Die Menschen, zu denen ihr reist, haben nicht nach einer Ermittlerin verlangt. Nicht offiziell. Die Kabinettskanzlei hat dich geschickt. Das Militär hat ihn geschickt, damit aus dir kein Skandal wird, ehe du nützlich werden kannst. ","#","^gloss[Kabinettskanzlei](Stelle nahe am Monarchen, wo Bitten, Berichte und Befehle in jene Sprache gebracht werden, in der Macht wie Papier aussieht.)","/#","\n","ev","void","/ev","->->",null]}],null],"define_class_and_name":[["ev",{"VAR?":"tut_character_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Einige Entscheidungen beschreiben nicht nur, was du tust, sondern wer du bist. Herkunft, Glaube, Auftreten und Ruf werden dadurch festgelegt und können später wieder Bedeutung gewinnen.]","/#","ev",true,"/ev",{"VAR=":"tut_character_intro","re":true},{"->":".^.^.^.5"},null]}],"nop","\n","ev","str","^__Bemerke__: Wie selbstverständlich dir dieses Abteil erscheint.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Berechne__: Was jedes Detail dieses Abteils kosten muss.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Bemerke__: Wie viel Arbeit in der Sauberkeit dieses Abteils steckt.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","#","^class:noble","/#","ev","str","^noble","/str","/ev",{"VAR=":"birth_class","re":true},"ev",{"VAR?":"class_confidence"},2,"+",{"VAR=":"class_confidence","re":true},"/ev","ev",{"VAR?":"court_loyalty"},1,"+",{"VAR=":"court_loyalty","re":true},"/ev","^Nicht der Luxus beunruhigt dich. Luxus ist nur Holz, Stoff, Messing, Bedienung, Stille. Entscheidend ist, ob die Diener zweimal hinsehen, ob der Schaffner die Stimme senkt, ob ein anderer Reisender deine Handschuhe prüft und beschließt, nicht nach deinem Auftrag zu fragen.","\n","^Du wurdest unter Menschen geboren, die solche Dinge früher verstanden als Freundlichkeit.","\n","^Du hast früh gelernt, dass jedes Zimmer einen Hof enthält, auch wenn kein Kaiser anwesend ist. Ein Mädchen deines Ranges wird darin unterrichtet, einzutreten, sich zu verneigen, vorgestellt, platziert und wieder vergessen zu werden; nur genug zu sprechen, mehr zu verstehen, als es zugibt, und zu wissen, dass ein Familienname zugleich Schlüssel und Kette sein kann.","\n","^Deine eigene Familie besitzt keinen großen Sitz, keine Schar von Verwaltern, kein altes Recht, Provinzen zu befehlen. Doch dein Name öffnete Türen in Wiener Salons, und sobald du in diesen Zimmern warst, lerntest du, Menschen Geschichten wiederholen zu lassen, die sie nur hatten andeuten wollen. ","#","^gloss[Verwaltern](Männer, die Besitz in Ordnung halten. Ein Gut ohne Verwalter ist Adel als Romantik, ein Gut mit Verwaltern ist Adel als Rechnung.) ","/#","#","^gloss[Salons](Gesellschaftliche Räume für Geist, Klavier, Ruf und Eheanbahnung. Man tritt ein, um zu sprechen, und wird oft erst beim Schweigen beurteilt.)","/#","\n","^Dein Ruf als Medium ist nicht vom Himmel gefallen. Er wurde zusammengesetzt aus Halblicht, richtigen Vermutungen, sorgsamen Pausen und der Bereitschaft besser geborener Toren, Aufführung für Offenbarung zu halten. ","#","^gloss[Medium](Person, durch die Geister oder verborgene Kräfte sprechen sollen. Gesellschaftlich besonders brauchbar, weil eine Frau so Dinge sagen darf, die man ihr als eigene Meinung übel nähme.)","/#","\n","^Bevor der Hof dich benutzen konnte, musste die Gesellschaft dich erst erfinden.","\n",{"->":"choose_name_noble"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","#","^class:middle","/#","ev","str","^middle","/str","/ev",{"VAR=":"birth_class","re":true},"ev",{"VAR?":"class_confidence"},1,"+",{"VAR=":"class_confidence","re":true},"/ev","^Die Polster, die Lampen, das polierte Furnier, die stille Bedienung an den Stationen: Nichts davon ist Zauberei. Es ist bezahlt. Verbucht. Irgendwo von jemandem aufgeschrieben, der Tinte an den Manschetten hat und eine Frau daheim, die weiß, wie lange Kerzen brennen dürfen, ehe das Haushaltsgeld Einspruch erhebt.","\n","^Du wurdest nicht für dieses Abteil geboren, aber nahe genug, um seine Regeln zu studieren.","\n","^Du wurdest in jenem breiten, unruhigen Gebiet zwischen Ehrerbietung und Ehrgeiz geboren. Deine Familie hatte Bücher, Rechnungen, Anstand, vielleicht ein Klavier, das niemand gut genug spielte, vielleicht einen Vater mit Amt, eine Mutter mit Besuchern, Brüder, von denen Aufstieg erwartet wurde, und Töchter, die nicht zeigen durften, dass auch sie danach hungerten.","\n","^Du lerntest Rechnen vor Etikette, Etikette vor Französisch und Französisch vor der Einsicht, wie leicht sich Männer von einer ruhigen Frauenstimme erklären lassen. Du stiegst auf, weil du zuhörtest. Du stiegst auf, weil du verstandest, dass Betrug, Glaube, Medizin, Tratsch, Politik und Kummer dieselben Türen in den menschlichen Geist benutzen.","\n","^Der Hof gibt ungern zu, dass er bürgerliche Tüchtigkeit braucht. Er borgt sie lieber aus, kleidet sie ordentlich ein und nennt sie Diskretion.","\n",{"->":"choose_name_middle"},{"#f":5}],"c-2":["^ ","#","^action:orientation","/#","\n","#","^class:working","/#","ev","str","^working","/str","/ev",{"VAR=":"birth_class","re":true},"ev",{"VAR?":"class_confidence"},1,"-",{"VAR=":"class_confidence","re":true},"/ev","^Der Samt sieht weich genug aus, um Fingerabdrücke zu verschlucken. Die Messingbeschläge sind von Händen poliert worden, die niemals hier sitzen werden. Das kleine Vorhangband ist dort abgenützt, wo andere Reisende, alle sicherer als du, es ohne Dankbarkeit berührt haben.","\n","^Du wurdest nicht auf dieser Seite des Dienstes geboren.","\n","^Du wurdest unter Menschen geboren, die wenig besaßen außer Verpflichtungen. Arbeit hatte einen Klang, bevor sie eine Bedeutung hatte: Wasser, Besen, Schritte, Atem, das Klirren von Geschirr, der Husten von Männern, die aus kalten Höfen kamen, Frauen, die Münzen unter dem Atem zählten. Du lerntest früh, dass die Hochgeborenen nicht aufmerksamer sind als andere. Sie müssen nur seltener aufmerksam sein.","\n","^Das war dein erster Vorteil.","\n","^Eine Dienstmagd weiß, welche Tür wichtig ist, weil sie die anderen benutzt. Eine Näherin lernt Körper, weil sie sie misst. Eine Zofe lernt Geheimnisse, weil feine Leute ihre Seelen wie Handschuhe liegen lassen, gewiss, dass niemand unter ihnen Hände hat. ","#","^gloss[Dienstmagd](Weibliche Hausbedienstete für niedere Arbeiten. Niedrig heißt dabei nur die Stellung, nicht die Menge dessen, was sie sieht.) ","/#","#","^gloss[Näherin](Frau, die Kleidung näht, ändert und ausbessert. Wer Körper ausmisst, lernt mehr über Stand und Eitelkeit, als ein Schneider je zugeben muss.) ","/#","#","^gloss[Zofe](Persönliche Dienerin einer Dame. Zuständig für Haar, Kleidung, kleine Notfälle und jene Wahrheiten, die eine Gesellschaft nur deshalb nicht kennt, weil Dienerinnen selten gefragt werden.)","/#","\n","^Du stiegst auf durch Begabung, Protektion, Nachahmung, Nervenstärke und die furchtbare Bequemlichkeit, für harmlos gehalten zu werden. Als Wien zu flüstern begann, du sähest mehr als anständige Leute sehen, hattest du schon Jahre damit verbracht, das zu sehen, was anständige Leute übersahen. ","#","^gloss[Protektion](Förderung durch eine höherstehende Person. Eine verwerfliche Begünstigung, sobald sie anderen nützt, und eine notwendige Verbindung, sobald sie einem selbst nützt.)","/#","\n",{"->":"choose_name_working"},{"#f":5}]}],{"#f":1}],"choose_name_noble":[["^Wien kannte dich unter dem Namen, den die Gesellschaft brauchbar gemacht hatte.","\n","ev","str","^__Heiße__: Valerie Eleonore Josepha","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Heiße__: Helene Cäcilie Franziska","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Heiße__: Clara Theresia Leopoldine","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Heiße__: Sophie Eleonore Auguste","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Heiße__: Mathilde Josepha Henriette","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Heiße__: Therese Valerie Franziska","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Heiße__: Ilona Theresia Eleonore","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Heiße__: Zdenka Eleonore Josepha","/str","/ev",{"*":".^.c-7","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","ev","str","^Valerie Eleonore Josepha","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Valerie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","ev","str","^Helene Cäcilie Franziska","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Helene","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:thinking","/#","\n","ev","str","^Clara Theresia Leopoldine","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Clara","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:thinking","/#","\n","ev","str","^Sophie Eleonore Auguste","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Sophie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:thinking","/#","\n","ev","str","^Mathilde Josepha Henriette","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Mathilde","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-5":["^ ","#","^action:thinking","/#","\n","ev","str","^Therese Valerie Franziska","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Therese","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-6":["^ ","#","^action:thinking","/#","\n","ev","str","^Ilona Theresia Eleonore","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Ilona","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-7":["^ ","#","^action:thinking","/#","\n","ev","str","^Zdenka Eleonore Josepha","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Zdenka","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"choose_surname_noble"},null]}],null],"choose_surname_noble":[["^Dein Titel ist durch Geburt und durch die vorsichtige Bescheidenheit deiner Familie bestimmt: keine Gräfin, keine Fürstin, keiner jener glänzenden Namen, die Botschafter und Gläubiger wie Staub anziehen. ","#","^gloss[Gräfin](Frau gräflichen Ranges. Der Titel öffnet Türen, aber auch Erwartungen, Schulden, Blicke und Verwandtschaften.) ","/#","#","^gloss[Fürstin](Frau fürstlichen Ranges. So hoch, dass selbst Fehler zunächst als Eigenart erscheinen dürfen.)","/#","\n","^Eine Freiin. Freiherrlicher Rang. Brauchbar. Zugelassen, aber nicht thronend. ","#","^gloss[Freiin](Unverheiratete Dame freiherrlichen Ranges. Hoch genug, um angekündigt zu werden, niedrig genug, um von höheren Häusern übersehen werden zu dürfen.)","/#","\n","ev","str","^__Führe den Namen__: Freiin von Rauhenfels","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Führe den Namen__: Freiin von Traunegg","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Führe den Namen__: Freiin von Ebenwald","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Führe den Namen__: Freiin von Arnsberg","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Führe den Namen__: Freiin von Reichenau","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Führe den Namen__: Freiin von Waldstätten","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","ev","str","^Freiin von","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Rauhenfels","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","ev","str","^Freiin von","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Traunegg","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:thinking","/#","\n","ev","str","^Freiin von","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Ebenwald","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:thinking","/#","\n","ev","str","^Freiin von","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Arnsberg","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:thinking","/#","\n","ev","str","^Freiin von","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Reichenau","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-5":["^ ","#","^action:thinking","/#","\n","ev","str","^Freiin von","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Waldstätten","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"assemble_full_name"},null]}],null],"choose_name_middle":[["^Die Salons, die zuerst über dich lachten und dich dann wieder einluden, lernten deinen Namen, bevor sie lernten, was er gekostet hatte.","\n","ev","str","^__Heiße__: Clara Eleonore","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Heiße__: Anna Katharina","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Heiße__: Helene Theresia","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Heiße__: Rosa Franziska","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Heiße__: Johanna Elise","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Heiße__: Katharina Sophie","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Heiße__: Therese Leopoldine","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Heiße__: Magdalena Cäcilie","/str","/ev",{"*":".^.c-7","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","ev","str","^Clara Eleonore","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Clara","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","ev","str","^Anna Katharina","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Anna","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:thinking","/#","\n","ev","str","^Helene Theresia","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Helene","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:thinking","/#","\n","ev","str","^Rosa Franziska","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Rosa","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:thinking","/#","\n","ev","str","^Johanna Elise","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Johanna","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-5":["^ ","#","^action:thinking","/#","\n","ev","str","^Katharina Sophie","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Katharina","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-6":["^ ","#","^action:thinking","/#","\n","ev","str","^Therese Leopoldine","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Therese","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-7":["^ ","#","^action:thinking","/#","\n","ev","str","^Magdalena Cäcilie","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Magdalena","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"choose_surname_middle"},null]}],null],"choose_surname_middle":[["^Dein Familienname enthält kein Partikel, das den Aufstieg abfedert. Er muss allein aufrecht stehen. ","#","^gloss[Partikel](Das kleine von oder zu im Namen. Ein winziges Wort, das so viel Gewicht tragen darf, wie andere Menschen mit Arbeit füllen müssen.)","/#","\n","ev","str","^__Führe den Namen__: Leitner","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Führe den Namen__: Wagner","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Führe den Namen__: Kellner","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Führe den Namen__: Baumgartner","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Führe den Namen__: Fischer","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Führe den Namen__: Schmid","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Führe den Namen__: Pichler","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Führe den Namen__: Rosenfeld","/str","/ev",{"*":".^.c-7","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Leitner","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Wagner","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Kellner","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Baumgartner","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Fischer","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-5":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Schmid","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-6":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Pichler","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-7":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Rosenfeld","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"assemble_full_name"},null]}],null],"choose_name_working":[["^Der Name, den du nach oben trugst, wurde vielleicht in der Aussprache verändert, aber nie ganz von seinem Ursprung gereinigt.","\n","ev","str","^__Heiße__: Anna","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Heiße__: Klara","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Heiße__: Agnes","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Heiße__: Leni","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Heiße__: Rosa","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Heiße__: Gertrud","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Heiße__: Elisabeth","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Heiße__: Franziska","/str","/ev",{"*":".^.c-7","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","ev","str","^Anna","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Anna","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","ev","str","^Klara","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Klara","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:thinking","/#","\n","ev","str","^Agnes","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Agnes","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:thinking","/#","\n","ev","str","^Leni","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Leni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:thinking","/#","\n","ev","str","^Rosa","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Rosa","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-5":["^ ","#","^action:thinking","/#","\n","ev","str","^Gertrud","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Gertrud","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-6":["^ ","#","^action:thinking","/#","\n","ev","str","^Elisabeth","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Elisabeth","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-7":["^ ","#","^action:thinking","/#","\n","ev","str","^Franziska","/str","/ev",{"VAR=":"given_names","re":true},"ev","str","^Franziska","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"choose_surname_working"},null]}],null],"choose_surname_working":[["^Ein einfacher Name kann in Wien eine Last sein. Er sagt den Leuten, wie wenig Achtung sie vorgeben müssen, ehe du gesprochen hast.","\n","ev","str","^__Führe den Namen__: Pichler","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Führe den Namen__: Huber","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Führe den Namen__: Maier","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Führe den Namen__: Gruber","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Führe den Namen__: Schuster","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Führe den Namen__: Krenn","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Führe den Namen__: Wolf","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Führe den Namen__: Moser","/str","/ev",{"*":".^.c-7","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Pichler","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Huber","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Maier","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Gruber","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Schuster","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-5":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Krenn","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-6":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Wolf","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"c-7":["^ ","#","^action:thinking","/#","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"ev","str","^Moser","/str","/ev",{"VAR=":"surname","re":true},{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"assemble_full_name"},null]}],null],"assemble_full_name":["ev",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^Auf Visitenkarten, in Briefen, in den vorsichtigen Mündern der Dienerschaft bist du ","ev",{"VAR?":"given_names"},"out","/ev","^ ","ev",{"VAR?":"title_part"},"out","/ev","^ ","ev",{"VAR?":"surname"},"out","/ev","^. ","#","^gloss[Visitenkarten](Gedruckte Besuchskarten mit Namen und Titel. Eine Dame gibt damit nicht nur ihre Anwesenheit ab, sondern eine kleine, korrekt geschnittene Behauptung.) ","/#","#","^gloss[Dienerschaft](Die Bediensteten eines Hauses. Offiziell Teil der Ordnung, praktisch ihr Gedächtnis.)","/#","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","^In Bahndokumenten, Hotelbüchern und auf den Zungen von Menschen, die noch nicht entschieden haben, wie viel Achtung du verdienst, bist du ","ev",{"VAR?":"title_part"},"out","/ev","^ ","ev",{"VAR?":"given_names"},"out","/ev","^ ","ev",{"VAR?":"surname"},"out","/ev","^. ","#","^gloss[Bahndokumenten](Papiere der Eisenbahn. Sie beweisen, wohin man fahren darf, was man mitführt und dass selbst Bewegung ein Formular verlangt.) ","/#","#","^gloss[Hotelbüchern](Gästebücher der Herbergen und Hotels. Wer reist, hinterlässt darin nicht nur einen Namen, sondern eine Spur für Wirte, Polizei und Neugier.)","/#","\n",{"->":".^.^.^.9"},null]}],"nop","\n","^Aber in der privaten Kammer, in der ein Name zuerst beantwortet wird, ehe er gespielt werden muss, bist du ","ev",{"VAR?":"common_name"},"out","/ev","^.","\n","ev","void","/ev","->->",null],"define_religion_and_supernatural":[["^Du berührst das Ridikül, ohne es sofort zu öffnen. ","#","^gloss[Ridikül](Kleine Damenhandtasche oder Handarbeitsbeutel. Klein genug um harmlos zu wirken, groß genug für Briefe, Schlüssel und jene Dinge, von denen Herren später behaupten, sie hätten nichts davon gewusst.)","/#","\n","^Das Schreiben darin nennt dich nicht Ermittlerin. Es nennt dich, in einer Prosa trocken genug, um durch beliebig viele Ämter zu gelangen, eine Frau, deren ungewöhnlicher spiritistischer Ruf sie für eine heikle Haushaltsangelegenheit empfehle. Die Formulierung ist erlesen. Sie bejaht nicht und verneint nicht. Sie erlaubt allen Beteiligten, später zu glauben, sie hätten nichts Ungehöriges geglaubt. ","#","^gloss[spiritistischer Ruf](Ein Ruf im Umkreis des Spiritismus. Sehr nützlich, wenn eine Frau gehört werden soll, aber nicht zu deutlich als Urheberin ihrer eigenen Einsichten erscheinen darf.)","/#","\n","^Die gräfliche Familie im Jagdhaus Hohenreith hat um Diskretion ersucht. Wien hat mit einem versiegelten Schreiben geantwortet, mit einer Frau, der man nachsagt, sie spreche mit dem Verborgenen, und mit einem Mann ihr gegenüber, der eigene Befehle hat. ","#","^gloss[Jagdhaus](Adeliger Landsitz für Jagden und kurze Aufenthalte. Weniger Hauptsitz als Bühne für Gäste, Förster, Gewehre und Geheimnisse.)","/#","\n","^Das Schreiben nennt keine Kirche. Gerade das macht die Kirche anwesend.","\n","ev","str","^__Glaube__: Der Glaube ist dir wirklich heilig.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Bedenke__: Die katholische Ordnung, in der du erzogen wurdest.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Misstraue__: Dem Weihrauch, hinter dem Behörden sitzen.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Verbinde__: Heiligenbilder, Totenmessen und Séancen.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Erinnere dich__: Der Glaube hat dich geformt, bevor du dich wehren konntest.","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["^ ","#","^action:thinking","/#","\n","ev","str","^devout_catholic","/str","/ev",{"VAR=":"religion_stance","re":true},"^Gott ist kein Gesprächsgegenstand für Abteile. Er ist kein Talent, kein Ruf, keine gesellschaftliche Bequemlichkeit. Du glaubst nicht kindlich, aber tief: an Sünde, Gnade, Sakrament, Versuchung und an die gefährliche Nähe der unsichtbaren Welt.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:thinking","/#","\n","ev","str","^social_catholic","/str","/ev",{"VAR=":"religion_stance","re":true},"^Du kennst die Feste, die Gebete, das Gewicht der Beichte und die Macht eines Pfarrers über Menschen, die behaupten, ihn nicht zu fürchten. Dein Glaube ist nicht leer; aber er ist ebenso Gewohnheit wie Überzeugung, ebenso Ordnung wie Trost.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:thinking","/#","\n","ev","str","^josephinian_sceptic","/str","/ev",{"VAR=":"religion_stance","re":true},"^Du achtest Register, Schulen, Spitäler, Archive und jene Nützlichkeit, die Institutionen gelegentlich gegen ihren eigenen Dünkel entwickeln. Aber Priester erklären zu oft, was sie zuerst besitzen möchten: Schuld, Frauen, Armut und Angst.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:thinking","/#","\n","ev","str","^spiritist_syncretic","/str","/ev",{"VAR=":"religion_stance","re":true},"^Heiligenbilder, Totenmessen, Séancen, Ahnungen, Tischklopfen, Träume: Die sauberen Grenzen dazwischen scheinen dir eher von Männern gezogen als von der Ewigkeit selbst. Was überlebt, spricht vielleicht in Formen, die keine Kanzlei genehmigt hat. ","#","^gloss[Heiligenbilder](Bilder heiliger Personen für Andacht, Trost und häusliche Überwachung des Gewissens. Ein guter Blick von der Wand erspart manchen schlechten Gedanken.) ","/#","#","^gloss[Totenmessen](Messen für Verstorbene. Die Kirche versteht den Umgang mit Toten besser als die Salons, doch nicht immer mit weniger Interesse.) ","/#","#","^gloss[Séancen](Geistersitzungen mit Tisch, gedämpftem Licht und sehr viel Erwartung. Je dunkler der Raum, desto leichter glauben die Anwesenden, sie sähen klar.) ","/#","#","^gloss[Tischklopfen](Klopfzeichen, die als Botschaften aus der unsichtbaren Welt gelten. Eine bequeme Methode, wenn Tote sprechen sollen, ohne die Gesprächsordnung der Lebenden zu stören.) ","/#","#","^gloss[Kanzlei](Amtliche Schreibstube. Sie verwandelt Furcht in Formulierungen, Schuld in Zuständigkeit und Menschen in Aktenlagen.)","/#","\n",{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:thinking","/#","\n","ev","str","^wounded_catholic","/str","/ev",{"VAR=":"religion_stance","re":true},"^Du kennst die Gebete zu gut, um sie einfach abzulegen, und die Schuld zu gut, um sie fromm zu nennen. Katholische Bilder erreichen dich nicht als Dekoration. Sie greifen nach Stellen, die du lieber versiegelt hieltest.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["^Vor dieser Reise, vor diesem Zug, bevor die Berge beginnen, Stück für Stück den Himmel zu nehmen, hat der Glaube bereits seine Stellung in dir bezogen. Nun bleibt die andere Frage: was du aus dem machst, was die Leute über deinen Ruf sagen.","\n","ev","str","^__Glaube__: Die Toten schweigen nicht. Die Lebenden hören nur schlecht zu.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Prüfe__: Jede Erscheinung zuerst auf irdische Ursachen.","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Täusche__: Mit dem Glauben, den andere von dir erwarten.","/str","/ev",{"*":".^.c-7","flg":20},"ev","str","^__Zögere__: Du hast gelernt, nicht zu früh zu entscheiden.","/str","/ev",{"*":".^.c-8","flg":20},{"c-5":["^ ","#","^action:thinking","/#","\n","#","^supernatural:believer","/#","ev","str","^believer","/str","/ev",{"VAR=":"supernatural_belief","re":true},"ev",{"VAR?":"medium_reputation"},1,"+",{"VAR=":"medium_reputation","re":true},"/ev","ev",{"VAR?":"supernatural_exposure"},1,"+",{"VAR=":"supernatural_exposure","re":true},"/ev","^Du hast den Unglauben der Gebildeten immer für eine provinzielle Anmaßung gehalten. Es gibt Druck in Zimmern, in denen Kummer gewesen ist. Es gibt Worte, die Menschen sprechen, bevor sie wissen, dass sie gesprochen haben. Es gibt Träume, die mit Schlamm am Saum eintreffen.","\n","^Vielleicht ist die Welt nicht heimgesucht. Vielleicht ist sie nur überfüllt.","\n",["ev",{"VAR?":"religion_stance"},"str","^devout_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Gerade deshalb erschreckt dich der Gedanke. Wer die Toten ruft, lädt vielleicht nicht nur die Toten ein.","\n",{"->":".^.^.^.34"},null]}],["ev",{"VAR?":"religion_stance"},"str","^spiritist_syncretic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Der Satz fügt sich in dir nicht gegen den Glauben, sondern unter seine Ränder, dort, wo Volksfrömmigkeit, Séance und Totenmesse einander längst heimlich berühren. ","#","^gloss[Volksfrömmigkeit](Frömmigkeit des Alltags. Sie hält sich an Kirche, Küche, Wetter, Krankheit und Erzählungen und fragt selten, ob eine Grenze amtlich gezogen wurde.) ","/#","#","^gloss[Séance](Geistersitzung mit Tisch, gedämpftem Licht und sehr viel Erwartung. Je dunkler der Raum, desto leichter glauben die Anwesenden, sie sähen klar.) ","/#","#","^gloss[Totenmesse](Messe für einen Verstorbenen. Ein kirchlicher Versuch, Trauer in Ordnung zu bringen und Schuld wenigstens liturgisch zu beschäftigen.)","/#","\n",{"->":".^.^.^.34"},null]}],["ev",{"VAR?":"religion_stance"},"str","^josephinian_sceptic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Du nennst es nicht Frömmigkeit. Eher eine vorläufige Hypothese über Dinge, für die die amtliche Sprache zu grob ist.","\n",{"->":".^.^.^.34"},null]}],[{"->":".^.b"},{"b":["\n","^Du hältst den Gedanken fest, ohne ihn schon jemand anderem zu überlassen.","\n",{"->":".^.^.^.34"},null]}],"nop","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-6":["^ ","#","^action:thinking","/#","\n","#","^supernatural:sceptic","/#","#","^route:detective","/#","ev","str","^sceptic","/str","/ev",{"VAR=":"supernatural_belief","re":true},"ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^Das Wort Geist verdeckt zu viel und erklärt zu wenig. Du hast anständige Menschen ein Echo eine Botschaft nennen hören, einen Zufall ein Zeichen, eine zitternde Hand eine himmlische Berührung. Männer der Wissenschaft können Toren sein, doch Toren mit Kerzen und Tischchen sind keine Verbesserung.","\n","^Falls Hohenreith Gespenster hat, erwartest du von ihnen Buchhaltung, Briefe, Fußspuren und einen Nutznießer.","\n",["ev",{"VAR?":"religion_stance"},"str","^devout_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Der Zweifel ist nicht Unglaube. Er ist eine Vorsichtsmaßnahme gegen Hochmut, Aberglauben und jene Versuchungen, die fromme Namen tragen.","\n",{"->":".^.^.^.30"},null]}],["ev",{"VAR?":"religion_stance"},"str","^josephinian_sceptic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Diese Haltung passt zu dir wie ein gut geführtes Register: nüchtern, verdächtig gegen Pathos, nützlich gegen Panik.","\n",{"->":".^.^.^.30"},null]}],[{"->":".^.b"},{"b":["\n","^Skepsis ist kein Mangel an Vorstellungskraft. Sie ist die Weigerung, Vorstellungskraft als Beweis gelten zu lassen.","\n",{"->":".^.^.^.30"},null]}],"nop","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-7":["^ ","#","^action:social","/#","\n","#","^supernatural:performer","/#","ev","str","^performer","/str","/ev",{"VAR=":"supernatural_belief","re":true},"ev",{"VAR?":"medium_reputation"},2,"+",{"VAR=":"medium_reputation","re":true},"/ev","^Du hast früh entdeckt, dass Männer, die dem Verstand einer Frau misstrauen, manchmal ihre Nerven verehren. Eine Schlussfolgerung aus Beweisen reizt sie. Eine Vision, mit gesenkten Wimpern gehaucht, lässt sie näher rücken.","\n","^Nun gut. Sollen sie näher rücken.","\n",["ev",{"VAR?":"religion_stance"},"str","^devout_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Irgendwo in dir notiert eine strengere Stimme das Wort Sünde. Eine andere, praktischere, antwortet: Auftrag.","\n",{"->":".^.^.^.27"},null]}],["ev",{"VAR?":"religion_stance"},"str","^wounded_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Wenn der Glaube dich schon als Mädchen verkleidete, ist es nur gerecht, dass du nun lernst, Verkleidungen selbst zu wählen.","\n",{"->":".^.^.^.27"},null]}],[{"->":".^.b"},{"b":["\n","^Die Maske ist nicht falsch, nur weil andere sie zuerst entworfen haben.","\n",{"->":".^.^.^.27"},null]}],"nop","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-8":["^ ","#","^action:thinking","/#","\n","#","^supernatural:undecided","/#","ev","str","^undecided","/str","/ev",{"VAR=":"supernatural_belief","re":true},"^Es gibt Dinge, die du erklären kannst, Dinge, die du noch nicht erklären kannst, und Dinge, denen Erklärung schadet, ehe sie hilft. Du hast einen Beruf daraus gemacht, an Schwellen zu stehen, mit einem Gesicht, das gefasst genug ist, damit beide Seiten weitersprechen.","\n","^Hohenreith wird dir zeigen müssen, welche Art von Fall es ist.","\n",["ev",{"VAR?":"religion_stance"},"str","^social_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^In Wien war Unentschiedenheit oft die höflichste Form von Klugheit. Auf dem Land könnte sie weniger elegant aussehen.","\n",{"->":".^.^.^.21"},null]}],["ev",{"VAR?":"religion_stance"},"str","^wounded_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Nicht zu früh zu entscheiden ist auch eine Art, dem alten Griff der Gewissheit auszuweichen.","\n",{"->":".^.^.^.21"},null]}],[{"->":".^.b"},{"b":["\n","^Vorläufigkeit ist kein Mangel an Mut. Sie ist manchmal die einzige saubere Methode.","\n",{"->":".^.^.^.21"},null]}],"nop","\n",{"->":".^.^.^.g-1"},{"#f":5}]}],"g-1":["^Glaube ist eine Sache. Erfahrung eine andere.","\n","^Man nennt eine Frau empfindsam, wenn ihre Wahrnehmungen wie eine Krankheit klingen sollen. Man nennt sie hysterisch, wenn diese Wahrnehmungen unbequem werden. Man nennt sie inspiriert, wenn man sie braucht, und labil, wenn man sie nicht mehr braucht.","\n","^Unter Ruf und Aufführung hat die Erinnerung ihre eigene Aussage.","\n","ev","str","^__Erinnere dich__: An Augenblicke, die du nicht wegerklären kannst.","/str","/ev",{"*":".^.c-9","flg":20},"ev","str","^__Erkläre__: Alles durch Beobachtung, Zeitpunkt und Nervenstärke.","/str","/ev",{"*":".^.c-10","flg":20},"ev","str","^__Spüre__: Etwas geschieht, aber niemals, wenn man es ruft.","/str","/ev",{"*":".^.c-11","flg":20},"ev","str","^__Verdränge__: Die ersten Zeichen, die du begraben hast.","/str","/ev",{"*":".^.c-12","flg":20},{"c-9":["^ ","#","^action:thinking","/#","\n","#","^powers:genuine","/#","ev","str","^genuine","/str","/ev",{"VAR=":"supernatural_senses","re":true},"ev",{"VAR?":"supernatural_exposure"},2,"+",{"VAR=":"supernatural_exposure","re":true},"/ev","^Einmal, als Kind, wusstest du es, bevor das Telegramm kam. Einmal, in einem überfüllten Zimmer, trat der Kummer einer Fremden mit solcher Gewalt in dich ein, dass deine eigenen Knie nachgaben. Einmal sahst du in einem Spiegel eine Tür hinter dir, die nicht im Raum war, als du dich umdrehtest.","\n","^Danach lerntest du Vorsicht. Es ist unklug für eine Frau, Dinge zu wissen, bevor ein Mann ihre Meinung erbeten hat.","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-10":["^ ","#","^action:thinking","/#","\n","#","^powers:faked","/#","#","^route:detective","/#","ev","str","^faked","/str","/ev",{"VAR=":"supernatural_senses","re":true},"ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^Du bemerkst Ringe, die zu frisch abgenommen wurden, Trauerhandschuhe, die zu sorgfältig getragen werden, Briefe, so oft gefaltet und wieder gefaltet, bis der Knick die Besessenheit des Lesers verrät. Du hörst, wenn Diener Gäste falsch benennen, wenn Mütter vor den Zimmern ihrer Töchter innehalten, wenn Offiziere lügen, indem sie zu genau werden.","\n","^Die Toten haben dir nie etwas gesagt. Die Lebenden können nicht aufhören, dir alles zu verraten.","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-11":["^ ","#","^action:thinking","/#","\n","#","^powers:ambiguous","/#","ev","str","^ambiguous","/str","/ev",{"VAR=":"supernatural_senses","re":true},"ev",{"VAR?":"supernatural_exposure"},1,"+",{"VAR=":"supernatural_exposure","re":true},"/ev","^Dein Ruf beruht auf Beherrschung. Die Wahrheit, falls es Wahrheit ist, hat keinen Respekt vor Terminen.","\n","^Manchmal verändert ein Zimmer den Druck um dich. Manchmal bekommt ein Gesicht einen alten Ausdruck, den kein Lebender ihm beigebracht hat. Manchmal kommen Namen vor den Vorstellungen. Aber je fester du danach greifst, desto gewöhnlicher wird die Welt.","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-12":["^ ","#","^action:thinking","/#","\n","#","^powers:repressed","/#","#","^route:eccentric","/#","ev","str","^repressed","/str","/ev",{"VAR=":"supernatural_senses","re":true},"ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^Es gibt Kindheitserinnerungen, die hinter Höflichkeit versiegelt sind: ein Kinderzimmerspiegel, zur Wand gedreht; eine Amme, ohne Zeugnis entlassen; die Hand deiner Mutter um dein Handgelenk, so fest, dass die Knochen sich beschwerten. ","#","^gloss[Amme](Frau, die ein fremdes Kind stillt oder früh betreut. Sie kommt dem Körper eines Hauses oft näher als jene, denen das Haus gehört.) ","/#","#","^gloss[Zeugnis](Schriftliche Bescheinigung über Dienst, Betragen und Befähigung. Wer keinen Rang besitzt, braucht Papier, das guten Leumund behauptet.)","/#","\n","^Danach wurdest du auf Arten sonderbar, die die Gesellschaft leichter bewundern als verstehen konnte.","\n",{"->":".^.^.^.g-2"},{"#f":5}]}],"g-2":["ev","void","/ev","->->",null]}],{"#f":1}],"define_appearance":[["^Für einige Sekunden gibt dir das Fenster nichts als Viktor, die Lampe, deine Handschuhe, die Linie deines Hutes und den bleichen Umriss deines Gesichts zurück. Der Tunnel löscht jede andere Welt aus.","\n","^Gerade deshalb wird das Glas nützlich. Nachdem Name und Auftrag in dir geordnet sind, zeigt es nicht bloß eine Dame im richtigen Abteil. Es zeigt die Frau, die in Eibenreith aussteigen wird.","\n","ev","str","^__Schaue__: Auf eine kleine, schmale Gestalt.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Schaue__: Auf eine mittelgroße Gestalt mit ruhiger Gegenwart.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Schaue__: Auf eine hochgewachsene, schlanke Gestalt.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Schaue__: Auf eine kompakte, kräftigere Gestalt.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Schaue__: Auf eine zierliche, empfindsam wirkende Gestalt.","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["^ ","#","^action:orientation","/#","\n","ev","str","^small_slender","/str","/ev",{"VAR=":"body_detail","re":true},"^Unter Mantel, Rock und Sitzhaltung bleibt etwas Knappes, Schnelles an dir: schmale Schultern, feine Handgelenke, ein Körper, der in Türen verschwindet und in Gesprächen unterschätzt wird.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:orientation","/#","\n","ev","str","^medium_soft","/str","/ev",{"VAR=":"body_detail","re":true},"^Du wirkst nicht zerbrechlich. Die Taille ist geformt, nicht mädchenhaft; die Schultern sind ruhig, die Hände gepflegt, die Anwesenheit fester, als manche Männer an einer jungen Frau bequem finden.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:orientation","/#","\n","ev","str","^tall_slender","/str","/ev",{"VAR=":"body_detail","re":true},"^Die Sitzbank macht dich weniger lang, als du bist. Aufrecht stehend würdest du mehr Raum einnehmen, als deine Rolle verspricht: lange Linien, schmale Hände, eine Haltung, die Disziplin beinahe wie Herkunft aussehen lässt.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:orientation","/#","\n","ev","str","^compact_strong","/str","/ev",{"VAR=":"body_detail","re":true},"^Reisekleidung und Korsett ordnen dich, aber sie verleugnen nicht alles. In deinen Unterarmen, im Nacken, in der Art, wie du ein Gleichgewicht hältst, liegt mehr Kraft, als man einer Dame höflich zutraut. ","#","^gloss[Korsett](Formendes Mieder für Taille und Oberkörper. Es stützt Haltung, beschränkt Atem und beweist, dass weibliche Selbstbeherrschung zuerst am Körper verlangt wird.)","/#","\n",{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:orientation","/#","\n","ev","str","^delicate","/str","/ev",{"VAR=":"body_detail","re":true},"^Du wirkst zart genug, dass Ärzte, Tanten und taktlose Herren zu rasch glauben, deinen Zustand deuten zu dürfen. Dass Zartheit nicht dasselbe ist wie Schwäche, bleibt eine nützliche Verwechslung.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["^Die dunkle Scheibe hält nun Haar und Hut fest.","\n","ev","str","^__Schaue__: Auf dunkelbraunes Haar im schwachen Licht.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Schaue__: Auf kastanienbraunes Haar mit warmem Glanz.","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Schaue__: Auf dunkelblondes bis aschbraunes Haar.","/str","/ev",{"*":".^.c-7","flg":20},"ev","str","^__Schaue__: Auf hellbraunes Haar mit goldenen Strähnen.","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Schaue__: Auf rotbraunes, sorgfältig gebändigtes Haar.","/str","/ev",{"*":".^.c-9","flg":20},{"c-5":["^ ","#","^action:orientation","/#","\n","ev","str","^dark_brown","/str","/ev",{"VAR=":"hair_colour","re":true},"^Dunkelbraunes Haar rahmt Stirn und Schläfen, im Tunnel beinahe schwarz, im Lampenlicht mit einem wärmeren Schimmer.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-6":["^ ","#","^action:orientation","/#","\n","ev","str","^chestnut","/str","/ev",{"VAR=":"hair_colour","re":true},"^Kastanienbraunes Haar fängt jedes bisschen Licht, das die Lampe hergibt, und macht dein Gesicht weicher, als dein Blick es erlaubt.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-7":["^ ","#","^action:orientation","/#","\n","ev","str","^dark_blond_ash","/str","/ev",{"VAR=":"hair_colour","re":true},"^Dunkelblondes, aschbraun wirkendes Haar gibt dir etwas Zurückhaltendes und Nordisches, besonders unter dem dunklen Hut.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-8":["^ ","#","^action:orientation","/#","\n","ev","str","^light_brown_gold","/str","/ev",{"VAR=":"hair_colour","re":true},"^Hellbraunes Haar mit goldenen Strähnen wirkt im Abteil beinahe zu warm für diese Reise, als habe Wien einen letzten Rest Nachmittag darin vergessen.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-9":["^ ","#","^action:orientation","/#","\n","ev","str","^auburn","/str","/ev",{"VAR=":"hair_colour","re":true},"^Rotbraunes Haar ist nie ganz unauffällig, auch wenn Nadeln, Hut und Sitte es zur Ordnung zwingen.","\n",{"->":".^.^.^.g-1"},{"#f":5}]}],"g-1":["^Die Frisur ist nicht bloß Geschmack. Eine Frau trägt auch ihre Beherrschung auf dem Kopf.","\n","ev","str","^__Schaue__: Auf einen glatten Mittelscheitel und einen tiefen Knoten.","/str","/ev",{"*":".^.c-10","flg":20},"ev","str","^__Schaue__: Auf weiche Stirnwellen und einen sorgfältigen Chignon.","/str","/ev",{"*":".^.c-11","flg":20},"ev","str","^__Schaue__: Auf geflochtene Partien und einen schweren Knoten.","/str","/ev",{"*":".^.c-12","flg":20},"ev","str","^__Schaue__: Auf eine modisch gehobene Stirnpartie.","/str","/ev",{"*":".^.c-13","flg":20},{"c-10":["^ ","#","^action:orientation","/#","\n","ev","str","^centre_part_low_bun","/str","/ev",{"VAR=":"hairstyle","re":true},"^Der Mittelscheitel ist sauber, der Knoten tief und fest. Keine Locke bittet um Nachsicht. Es ist eine Frisur für Frauen, die lieber richtig als reizend erscheinen.","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-11":["^ ","#","^action:orientation","/#","\n","ev","str","^soft_waves_chignon","/str","/ev",{"VAR=":"hairstyle","re":true},"^Die Stirnwellen sind weich gelegt, der Chignon sitzt sauber unter dem Hut. Das wirkt weiblicher, zugänglicher, aber nicht weniger berechnet.","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-12":["^ ","#","^action:orientation","/#","\n","ev","str","^braided_low_knot","/str","/ev",{"VAR=":"hairstyle","re":true},"^Geflochtene Partien führen das Haar zur Ordnung zurück. Der Knoten im Nacken ist schwerer, ländlicher vielleicht, aber unter städtischer Hand gezähmt.","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-13":["^ ","#","^action:orientation","/#","\n","ev","str","^raised_front_modern","/str","/ev",{"VAR=":"hairstyle","re":true},"^Das Haar hebt sich über der Stirn mit jener neuen Fülle, die ältere Damen für Eitelkeit und jüngere für Freiheit halten. Unter dem Reisehut bleibt es gerade noch anständig.","\n",{"->":".^.^.^.g-2"},{"#f":5}]}],"g-2":["^Das Gesicht unter dem Hut ist deutlich genug, um nicht mehr ausweichen zu können.","\n","ev","str","^__Schaue__: Auf helle Haut, kühle Augen und scharfe Brauen.","/str","/ev",{"*":".^.c-14","flg":20},"ev","str","^__Schaue__: Auf rosigen Teint, weichen Mund und wachen Blick.","/str","/ev",{"*":".^.c-15","flg":20},"ev","str","^__Schaue__: Auf warmen Teint, dunklere Augen und ruhige Miene.","/str","/ev",{"*":".^.c-16","flg":20},"ev","str","^__Schaue__: Auf blasse Haut, feine Züge und ein kontrolliertes Gesicht.","/str","/ev",{"*":".^.c-17","flg":20},"ev","str","^__Schaue__: Auf ein markanteres Gesicht mit gerader Nase und festem Kinn.","/str","/ev",{"*":".^.c-18","flg":20},{"c-14":["^ ","#","^action:orientation","/#","\n","ev","str","^fair_cool","/str","/ev",{"VAR=":"complexion_detail","re":true},"ev","str","^cool_sharp","/str","/ev",{"VAR=":"face_detail","re":true},"^Dein Teint ist hell und kühl, die Brauen geben dem Gesicht mehr Bestimmtheit, als ein flüchtiger Blick erwartet. Man könnte dich empfindlich nennen, bis man die Augen genauer ansieht.","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-15":["^ ","#","^action:orientation","/#","\n","ev","str","^rosy","/str","/ev",{"VAR=":"complexion_detail","re":true},"ev","str","^soft_alert","/str","/ev",{"VAR=":"face_detail","re":true},"^Du hast mehr Farbe im Gesicht, als die meisten Damen im Winter zeigen möchten. Der Mund wirkt weicher als der Blick; zusammen macht dich das zugänglicher, aber nicht einfacher.","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-16":["^ ","#","^action:orientation","/#","\n","ev","str","^warm","/str","/ev",{"VAR=":"complexion_detail","re":true},"ev","str","^calm_dark_eyes","/str","/ev",{"VAR=":"face_detail","re":true},"^Der Teint ist wärmer, die Augen dunkler, die Miene ruhiger. Du wirkst weniger ätherisch als gegenwärtig: eine Frau aus Fleisch, Gedächtnis und Absicht.","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-17":["^ ","#","^action:orientation","/#","\n","ev","str","^pale_fine","/str","/ev",{"VAR=":"complexion_detail","re":true},"ev","str","^fine_controlled","/str","/ev",{"VAR=":"face_detail","re":true},"^Die Züge sind fein, fast zerbrechlich, doch die Kontrolle darin ist zu sichtbar, um harmlos zu wirken. Wer dich für schwach hält, möchte es zu gerne.","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-18":["^ ","#","^action:orientation","/#","\n","ev","str","^clear","/str","/ev",{"VAR=":"complexion_detail","re":true},"ev","str","^marked_jaw","/str","/ev",{"VAR=":"face_detail","re":true},"^Die Nase ist gerade, das Kinn fester, die Linien weniger gefällig als ein Porträtmaler sie gern hätte. Das Gesicht verrät eher Willen als Sanftmut.","\n",{"->":".^.^.^.g-3"},{"#f":5}]}],"g-3":["^Der Rest der Spiegelung ist Kostüm, Rüstung und Beweismittel.","\n",["ev",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Die Kleidung muss genug Rang zeigen, um glaubwürdig zu sein, und genug Zurückhaltung, um nicht nach Provinztheater zu riechen.","\n",{"->":".^.^.^.5"},null]}],["ev",{"VAR?":"birth_class"},"str","^middle","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Die Kleidung muss eine höhere Welt betreten können, ohne zu schreien, dass sie dafür gearbeitet hat.","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Die Kleidung muss beweisen, dass man dich in die erste Klasse setzen konnte, ohne dass der Stoff gegen dich aussagt. ","#","^gloss[erste Klasse](Die teuerste Wagenklasse der Eisenbahn. Sie bietet weichere Polster, bessere Luft und vor allem weniger Menschen, was im bürgerlichen Fortschrittsglauben oft dasselbe bedeutet.)","/#","\n",{"->":".^.^.^.5"},null]}],"nop","\n","ev","str","^__Trage__: Ein dunkel anthrazitfarbenes Reisekostüm mit pflaumenfarbenem Samtkragen.","/str","/ev",{"*":".^.c-19","flg":20},"ev","str","^__Trage__: Ein schwarzbraunes Wollkostüm mit elfenbeinfarbener Bluse und schmaler Spitze.","/str","/ev",{"*":".^.c-20","flg":20},"ev","str","^__Trage__: Ein graublaues Reisekostüm mit kurzem Mantel und praktischen Knöpfen.","/str","/ev",{"*":".^.c-21","flg":20},"ev","str","^__Trage__: Ein dunkles grünes Kostüm mit schwarzem Besatz und passendem Hut.","/str","/ev",{"*":".^.c-22","flg":20},"ev","str","^__Trage__: Ein schwarzes Reisekleid mit Schleier, zu ernst für bloße Mode.","/str","/ev",{"*":".^.c-23","flg":20},{"c-19":["^ ","#","^action:thinking","/#","\n","ev","str","^charcoal_plum_velvet","/str","/ev",{"VAR=":"outfit_detail","re":true},"^Du trägst ein geschneidertes Reisekostüm aus dunkler anthrazitfarbener Wolle. Am Kragen und an den Manschetten liegt ein pflaumenfarbener Samtton, gedämpft genug für den Tag, teuer genug für Menschen mit Augen. ","#","^gloss[Reisekostüm](Damenkleidung für die Reise. Fest genug für Bahnhofsschmutz, korrekt genug für fremde Blicke, und unbequem genug, damit niemand vergisst, dass auch Zweckmäßigkeit weiblich auszusehen hat.) ","/#","#","^gloss[anthrazitfarbener](Von Anthrazit hergeleitet, also sehr dunkelgrau. Eine Farbe für Menschen, die nicht trauern, aber auch nicht verdächtig fröhlich wirken möchten.)","/#","\n",{"->":".^.^.^.g-4"},{"#f":5}],"c-20":["^ ","#","^action:thinking","/#","\n","ev","str","^black_brown_ivory_lace","/str","/ev",{"VAR=":"outfit_detail","re":true},"^Der Rock ist dunkel und schwer genug für die Reise, die Jacke streng, die elfenbeinfarbene Bluse am Hals hochgeschlossen. Die Spitze ist schmal, sauber und gefährlich nahe an Frömmigkeit.","\n",{"->":".^.^.^.g-4"},{"#f":5}],"c-21":["^ ","#","^action:thinking","/#","\n","ev","str","^blue_grey_practical","/str","/ev",{"VAR=":"outfit_detail","re":true},"^Graublaue Wolle, ein kurzer Mantel, ein Rock, der beim Aussteigen nicht sofort Verrat übt, und Knöpfe, die mehr nach Zweck als nach Schmuck aussehen. Korrekt, städtisch, brauchbar.","\n",{"->":".^.^.^.g-4"},{"#f":5}],"c-22":["^ ","#","^action:thinking","/#","\n","ev","str","^dark_green_black_trim","/str","/ev",{"VAR=":"outfit_detail","re":true},"^Das Grün ist so dunkel, dass es erst im Licht der Fenster sichtbar wird. Schwarzer Besatz, passende Handschuhe, ein Hut mit kleiner Feder: nicht laut, aber schwer zu vergessen.","\n",{"->":".^.^.^.g-4"},{"#f":5}],"c-23":["^ ","#","^action:thinking","/#","\n","ev","str","^black_veil_severe","/str","/ev",{"VAR=":"outfit_detail","re":true},"^Das Schwarz ist nicht Trauer, jedenfalls nicht offiziell. Ein schmaler Schleier, dunkle Handschuhe, glatter Rock, hohe Knopfleiste. Es ist die Art Kleidung, in der skeptische Männer leichter an Ahnungen glauben.","\n",{"->":".^.^.^.g-4"},{"#f":5}]}],"g-4":[["ev",{"VAR?":"outfit_detail"},"str","^blue_grey_practical","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Viktor wird dieses Kostüm später vermutlich für ein Zeichen von Vernunft halten. Das ist nützlich, auch wenn es nicht vollständig wahr ist.","\n",{"->":".^.^.^.4"},null]}],["ev",{"VAR?":"outfit_detail"},"str","^black_veil_severe","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Selbst Viktor wird Mühe haben, diese Kleidung ganz von deinem Ruf als Medium zu trennen. Das ist kein Zufall. ","#","^gloss[Medium](Person, durch die Geister oder verborgene Kräfte sprechen sollen. Gesellschaftlich besonders brauchbar, weil eine Frau so Dinge sagen darf, die man ihr als eigene Meinung übel nähme.)","/#","\n",{"->":".^.^.^.4"},null]}],["ev",{"VAR?":"outfit_detail"},"str","^dark_green_black_trim","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Das Kostüm ist diskret genug für die Reise und bestimmt genug, um in Erinnerung zu bleiben. Es sagt nicht viel. Nur genug.","\n",{"->":".^.^.^.4"},null]}],[{"->":".^.b"},{"b":["\n","^Die Kleidung wird in Hohenreith sprechen, bevor du es tust. Das ist der Sinn guter Kleidung und die Gefahr schlechter.","\n",{"->":".^.^.^.4"},null]}],"nop","\n","^Als die Berge zurückkehren, wirken sie näher.","\n","ev","void","/ev","->->",null]}],{"#f":1}],"first_viktor_exchange":["ev",{"VAR?":"tut_dialog_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Steht eine Zeile in Anführungszeichen, sprichst du sie aus. Das hervorgehobene Verb zeigt, was du tust und meist, an wen du dich richtest: Frage Viktor, Antworte, Spotte oder Widersprich.]","/#","ev",true,"/ev",{"VAR=":"tut_dialog_intro","re":true},{"->":".^.^.^.5"},null]}],"nop","\n","^Er faltet die Zeitung zusammen, obwohl du sehr sicher bist, dass er nicht gelesen hat.","\n","ev",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^„Sie sind sehr still, gnädiges Fräulein. Für eine Dame auf ihrer ersten amtlichen Reise beweisen Sie bemerkenswerte Zurückhaltung.“ ","#","^tts[For Viktor, use a restrained, polished officer's voice. Courteous on the surface, with a faint test hidden underneath.] ","/#","#","^gloss[amtliche Reise](Eine Reise im Auftrag einer Behörde oder Hofstelle. Der Unterschied zur privaten Reise besteht vor allem darin, dass man weniger frei ist und mehr Papier mitführt.)","/#","\n","^Die Anrede wahrt die Form und vermeidet den Titel. Gerade deshalb verrät sie Absicht.","\n",{"->":".^.^.^.18"},null]}],[{"->":".^.b"},{"b":["\n","^„Sie sind sehr still, Fräulein ","ev",{"VAR?":"surname"},"out","/ev","^. Für eine Dame auf ihrer ersten amtlichen Reise beweisen Sie bemerkenswerte Zurückhaltung.“ ","#","^tts[For Viktor, use a restrained, polished officer's voice. Courteous on the surface, with a faint test hidden underneath.]","/#","\n","^Die Anrede ist korrekt, doch sie prüft dich mehr, als sie dich schützt. Er weiß noch nicht, welcher Teil von dir brauchbar ist, welcher Verkleidung und welcher Gefahr.","\n",{"->":".^.^.^.18"},null]}],"nop","\n",["ev",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n",{"->":"viktor_class_noble"},{"->":".^.^.^.23"},null]}],["ev",{"VAR?":"birth_class"},"str","^middle","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n",{"->":"viktor_class_middle"},{"->":".^.^.^.23"},null]}],[{"->":".^.b"},{"b":["\n",{"->":"viktor_class_working"},{"->":".^.^.^.23"},null]}],"nop","\n",null],"viktor_class_noble":[["^Viktor wartet auf die Antwort, die seine Bemerkung verlangt. Der Zug ruckt einmal, dann findet er wieder in seinen harten, selbstgewissen Rhythmus.","\n","ev","str","^__Antworte__: „Zurückhaltung ist keine Tugend, Herr Nowak. Oft ist sie nur gute Erziehung mit geschlossenem Mund.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Sie brauchen nicht zu prüfen, ob ich stillsitzen kann, Herr Nowak. Ich wurde von Leuten erzogen, die weniger Geduld und schärfere Augen hatten.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Wenn dies bemerkenswerte Zurückhaltung ist, Herr Nowak, fürchte ich, Sie haben bisher vor allem Offiziere begleitet.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Zurückhaltung ist keine Tugend, Herr Nowak. Oft ist sie nur gute Erziehung mit geschlossenem Mund.“","\n","^Seine Brauen bewegen sich kaum merklich.","\n","^„Dann hat gute Erziehung also militärischen Nutzen“, sagt er.","\n",["ev","str","^__Antworte__: „Nur, wenn sie richtig kommandiert wird.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Nur, wenn Männer Schweigen mit Gehorsam verwechseln.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Ich bevorzuge jede Disziplin, die keinen Makel in den Akten hinterlässt.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Nur, wenn sie richtig kommandiert wird.“","\n","^„Sie gedenken, sie selbst zu kommandieren?“","\n","^Die Antwort bleibt im Winkel deines Handschuhs und in der Ruhe deines Blickes liegen.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:sapphic","/#","ev",{"VAR?":"sapphic"},1,"+",{"VAR=":"sapphic","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Nur, wenn Männer Schweigen mit Gehorsam verwechseln.“","\n","^„Das ist eine ehrgeizige Unterscheidung.“","\n","^Diese Unterscheidung hat viele Frauen davor bewahrt, zu früh verstanden zu werden.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Ich bevorzuge jede Disziplin, die keinen Makel in den Akten hinterlässt.“","\n","^„Eine nützliche Vorliebe“, sagt er. „Wenn sie aufrichtig ist.“","\n","^Die Frage der Aufrichtigkeit bleibt vorläufig sein Problem.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Sie brauchen nicht zu prüfen, ob ich stillsitzen kann, Herr Nowak. Ich wurde von Leuten erzogen, die weniger Geduld und schärfere Augen hatten.“","\n","^„Eine Familienerziehung also.“","\n",["ev","str","^__Antworte__: „Eher ein Familienurteil.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Eine Erziehung in Zimmern, in denen selbst jeder Stuhl Rang besitzt.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Eher ein Familienurteil.“","\n","^„Sie sprechen, als wäre Geburt ein Gefängnis.“","\n","^Die polierten Möbel antworten ihm besser, als es ein Einwand könnte.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"class_confidence"},1,"+",{"VAR=":"class_confidence","re":true},"/ev","^„Eine Erziehung in Zimmern, in denen selbst jeder Stuhl Rang besitzt.“","\n","^„Dann wird Hohenreith Sie vielleicht nicht überraschen.“","\n","^Die Möglichkeit, dass Hohenreith bessere Geheimnisse als Stühle besitzt, darf unausgesprochen bleiben.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Wenn dies bemerkenswerte Zurückhaltung ist, Herr Nowak, fürchte ich, Sie haben bisher vor allem Offiziere begleitet.“","\n","^Sein Mundwinkel verändert sich so wenig, dass man es beinahe übersehen könnte.","\n","^„Offiziere langweilen sich nicht so leicht.“","\n",["ev","str","^__Antworte__: „Oder weniger ehrlich darin.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Dann muss ich mich bemühen, die Armee nicht zu enttäuschen.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Oder weniger ehrlich darin.“","\n","^„Sie beschuldigen die Armee der Eitelkeit.“","\n","^Der Vorwurf der Beständigkeit ist der am wenigsten zu leugnende.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:careless","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","^„Dann muss ich mich bemühen, die Armee nicht zu enttäuschen.“","\n","^„Genau das zu verhindern, ist mir aufgetragen worden.“","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}]}],null],"viktor_class_middle":[["^Viktors Bemerkung bleibt zwischen euch liegen wie ein höflicher Vorwurf.","\n","ev","str","^__Antworte__: „Zurückhaltung fällt leichter, wenn man gelernt hat, dass jeder Fehler von jemandem behalten wird, der besser gestellt ist.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Wenn ich schweige, Herr Nowak, so deshalb, weil Männer sich schneller erklären, wenn ihnen die Stille missfällt.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Ich überlegte, ob Ihre Sorge amtlich, persönlich oder bloß männlich ist.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Zurückhaltung fällt leichter, wenn man gelernt hat, dass jeder Fehler von jemandem behalten wird, der besser gestellt ist.“","\n","^Viktor beobachtet dich genauer.","\n","^„Eine bittere Lektion.“","\n",["ev","str","^__Antworte__: „Eine nützliche. Bitterkeit ist nur der Geschmack, den Belehrung zurücklässt.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Eine gewöhnliche. Manche Menschen bemerken Unrecht erst, wenn es ihr eigenes Stockwerk erreicht.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Eine nützliche. Bitterkeit ist nur der Geschmack, den Belehrung zurücklässt.“ ","#","^tts[Read the protagonist's line dryly and evenly, with a small sting on \"Bitterkeit\".]","/#","\n","^„Sie sammeln Redewendungen wie Waffen.“","\n","^Der Satz liegt leicht genug da, dass er entscheiden muss, ob er Zierrat oder Waffe ist.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:sapphic","/#","ev",{"VAR?":"sapphic"},1,"+",{"VAR=":"sapphic","re":true},"/ev","^„Eine gewöhnliche. Manche Menschen bemerken Unrecht erst, wenn es ihr eigenes Stockwerk erreicht.“","\n","^„Sie haben also Stockwerke studiert?“","\n","^Schwellen, hast du gelernt, sind ehrlicher als Stockwerke; sie geben zu, dass Durchgang ein Vorrecht ist.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","ev",{"VAR?":"medium_reputation"},1,"+",{"VAR=":"medium_reputation","re":true},"/ev","^„Wenn ich schweige, Herr Nowak, so deshalb, weil Männer sich schneller erklären, wenn ihnen die Stille missfällt.“ ","#","^tts[Let this be calm and deliberate, almost conversationally intimate. Give \"Stille\" a tiny pause before continuing.]","/#","\n","^„Eine Methode?“","\n",["ev","str","^__Antworte__: „Eine Höflichkeit. Ich lasse sie mit ihrem Lieblingsthema beginnen.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Ein Versuch. Er hat verlässliche Ergebnisse geliefert.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Eine Höflichkeit. Ich lasse sie mit ihrem Lieblingsthema beginnen.“","\n","^„Mit sich selbst.“","\n","^Seine eigene Antwort vollendet den Grundsatz sauber genug, dass weitere Belehrung Eitelkeit wäre.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^„Ein Versuch. Er hat verlässliche Ergebnisse geliefert.“","\n","^„Dann bin ich Teil Ihres Versuches.“","\n","^Er sitzt dir lange genug gegenüber, um Beweisstück zu werden.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Ich überlegte, ob Ihre Sorge amtlich, persönlich oder bloß männlich ist.“","\n","^Seine Augen verhärten sich um genau einen Grad.","\n","^„Heute ist sie amtlich.“","\n",["ev","str","^__Antworte__: „Wie bequem. Die beiden anderen dürfen die Verantwortung leugnen.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Dann werde ich diese amtliche Sorge mit dem Respekt behandeln, der Papier gebührt.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Wie bequem. Die beiden anderen dürfen die Verantwortung leugnen.“","\n","^„Ich rate Ihnen, den Witz in Hohenreith nicht zu Ihrem ersten Werkzeug zu machen.“","\n","^Die Herabstufung des Witzes zum zweiten Werkzeug bleibt theoretisch genug, um ungefährlich zu sein.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^„Dann werde ich diese amtliche Sorge mit dem Respekt behandeln, der Papier gebührt.“","\n","^„Papier hat Armeen in Bewegung gesetzt.“","\n","^Papier hat auch Fehler begraben, aber nicht jede Verbesserung muss ausgesprochen werden.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}]}],null],"viktor_class_working":[["^Viktors Höflichkeit ist glatt genug, um keine Fingerabdrücke zu behalten. Darunter hörst du die Frage, wie sehr dieses Abteil dich verbessert hat.","\n","ev","str","^__Antworte__: „Zurückhaltung ist, was die Leute loben, wenn sie die Mühe dahinter nicht sehen wollen.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Ich schweige, weil man Frauen meiner Herkunft meist entweder dankbar oder unsichtbar wünscht.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Ich versuchte, die Polster nicht so zu berühren, als könnten sie mich anklagen.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Zurückhaltung ist, was die Leute loben, wenn sie die Mühe dahinter nicht sehen wollen.“","\n","^Die Zeitung in Viktors Hand knittert einmal.","\n","^„Sie haben etwas dagegen, gelobt zu werden?“","\n",["ev","str","^__Antworte__: „Nur, wenn es billig geschieht.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Nur, wenn es die Person verbirgt, die die Arbeit getan hat.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Nur, wenn es billig geschieht.“","\n","^„Das dürfte schwer zu vermeiden sein.“","\n","^Wenn Hohenreith dich billig loben will, wird es die Ökonomie der Enttäuschung kennenlernen müssen.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:sapphic","/#","ev",{"VAR?":"sapphic"},1,"+",{"VAR=":"sapphic","re":true},"/ev","^„Nur, wenn es die Person verbirgt, die die Arbeit getan hat.“","\n","^Er betrachtet dich, als wäre die Antwort von weiter hinten im Zug gekommen als aus der ersten Klasse.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Ich schweige, weil man Frauen meiner Herkunft meist entweder dankbar oder unsichtbar wünscht.“","\n","^„Ich habe Sie nicht um Dankbarkeit gebeten.“","\n",["ev","str","^__Summe__: Eine Antwort, die keine Worte braucht.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Singe__: Die Kaiserhymne, beinahe ohne Stimme.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Nein. Sie haben verlangt, dass ich lenkbar sei.“","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Antworte__: „Dann werde ich meine Dankbarkeit aufschieben, bis Sie sie verdienen.“","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["^ ","#","^action:conversation ","/#","#","^optional","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^Du summst so leise, dass es mehr Haltung als Ton ist. Der Rhythmus der Räder nimmt die Melodie auf und gibt sie höflicher zurück, als sie gekommen ist. ","#","^tts[Hum this line very softly, almost under the breath. Keep it restrained, intimate, and wordless, with a faint ironic composure.]","/#","\n","^Viktor sieht nicht auf.","\n","^„Sie haben die ungewöhnliche Gabe, Schweigen beschäftigt wirken zu lassen.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation ","/#","#","^optional","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^Du singst kaum lauter als das Rauschen im Polster: „Gott beschütze Franz den Kaiser ...“ Nicht fromm genug für ein Gebet, nicht spöttisch genug für Hochverrat. ","#","^tts[Sing the quoted hymn fragment almost silently, like a controlled private murmur. Use a formal, old Austrian ceremonial feel, but keep the delivery restrained and ambiguous.]","/#","\n","^Ein Muskel an Viktors Kiefer bewegt sich.","\n","^„Eine riskante Art, Ihre Loyalität nachzuweisen.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Nein. Sie haben verlangt, dass ich lenkbar sei.“","\n","^„Ich habe nichts dergleichen verlangt.“","\n","^Rang braucht, anders als Männer, selten direkt zu fragen. Die Möbel fragen an seiner Stelle.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Dann werde ich meine Dankbarkeit aufschieben, bis Sie sie verdienen.“","\n","^Eine Pause. Dann, sehr trocken: „Eine großzügige Abmachung.“","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","#","^route:careless","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","ev","str","^dependence","/str","/ev",{"VAR=":"viktor_relation","re":true},"^„Ich versuchte, die Polster nicht so zu berühren, als könnten sie mich anklagen.“","\n","^Etwas wie Sorge huscht über sein Gesicht, zu spät als Ärger verkleidet.","\n","^„Die Polster haben Minister überstanden. Sie werden auch Sie überstehen.“","\n",["ev","str","^__Antworte__: „Dann bin ich schon mutiger, als ich es eben war.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Ich werde es als Beruhigung auffassen, obgleich Sie es wie einen Verweis vorgetragen haben.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:careless","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","^„Dann bin ich schon mutiger, als ich es eben war.“","\n","^„Mut, an Polstern gemessen, ist kein militärischer Maßstab.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Ich werde es als Beruhigung auffassen, obgleich Sie es wie einen Verweis vorgetragen haben.“","\n","^„Mit beidem habe ich Übung.“","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":"viktor_mission_briefing"},null]}],{"#f":5}]}],null],"viktor_mission_briefing":[["^Der Zug tritt aus dem Tunnel in einen blassen Nachmittag aus dunklen Tannen und weißem Fels. Tief unten zeigt sich Wasser nur in Blitzen. Das Tal ist kein Anblick aus einem Salonbild mehr. Es hat Tiefe genug, um Dinge zu verbergen.","\n","^Viktor öffnet eine Ledermappe und nimmt ein Memorandum heraus. Er reicht es dir nicht sofort. ","#","^gloss[Memorandum](Amtliche Denkschrift. Lang genug, um Zuständigkeit zu behaupten, kurz genug, um die gefährlichen Dinge nicht beim Namen nennen zu müssen.)","/#","\n","^„Wenn wir die Bahn verlassen“, sagt er, „werden wir von einer Kutsche aus Hohenreith erwartet. Von diesem Augenblick an sind Äußerlichkeiten von Bedeutung. Ihren Gastgebern wurde mitgeteilt, dass ich bei Korrespondenz, Reiseangelegenheiten und praktischen Vorkehrungen behilflich bin. Mit militärischen Definitionen muss man sie nicht behelligen.“ ","#","^gloss[Korrespondenz](Briefwechsel. Die vornehme Kunst, Absichten so lange zu falten, bis sie in ein Kuvert passen.)","/#","\n","ev","str","^__Frage Viktor__: „Und die Dorfbewohner?“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Spotte__: „Wie barmherzig. Der Staat hat ihnen das Vokabular erspart.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Sie meinen, sie sollen nicht wissen, ob ich Gast, Werkzeug oder Warnung bin.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Und die Dorfbewohner?“","\n","^„Die Dorfbewohner müssen mit nichts behelligt werden.“","\n","^Da ist sie: die Monarchie im Kleinen. Ein Mann, eine Mappe, ein verschlossener Satz.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Wie barmherzig. Der Staat hat ihnen das Vokabular erspart.“","\n","^„Der Staat hat ihnen Unruhe erspart“, sagt Viktor.","\n","^Die staatliche Gewohnheit, Unwissenheit mit Ruhe zu verwechseln, muss nicht ausgesprochen werden, um anwesend zu sein.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Sie meinen, sie sollen nicht wissen, ob ich Gast, Werkzeug oder Warnung bin.“","\n","^„Ich meine, sie sollen nur wissen, was die Lage beruhigt.“","\n","^Die Antwort beruhigt nichts. Das ist kein Widerspruch.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["^„Man wird Sie nach dem Stand anreden, den Sie vorweisen“, fährt er fort. „Der Haushalt des Grafen wird den Rang beachten. Die Dienerschaft wird beachten, was der Haushalt beachtet. Die Dorfbewohner mögen weniger beachten und mehr behalten. Ich rate zur Zurückhaltung.“ ","#","^tts[For Viktor's briefing, sound exact and professional. Keep each sentence cleanly separated, like points in a confidential report.] ","/#","#","^gloss[Haushalt des Grafen](Das Haus als Rangordnung. Familie, Dienerschaft, Gäste und Zuständigkeiten bilden darin ein Uhrwerk, das besonders laut tickt, wenn jemand falsch steht.) ","/#","#","^gloss[Dienerschaft](Die Bediensteten eines Hauses. Offiziell Teil der Ordnung, praktisch ihr Gedächtnis.)","/#","\n","^Der Rat ist vernünftig. Das macht ihn nicht weniger ärgerlich.","\n","ev","str","^__Antworte__: „Wären Herren weniger leicht zu lenken, Herr Nowak, so bedürften Damen weniger Methoden.“","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Widersprich__: „Wenn Sie wünschen, dass ich harmlos erscheine, müssen Sie aufhören, mich wie ein Kerkermeister zu warnen.“","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Frage Viktor__: „Dann wollen wir genau sein. Was wissen sie, was vermuten sie, und was ist mir zu prüfen gestattet?“","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Antworte__: „Ich werde mein Möglichstes tun, nicht in Ohnmacht zu fallen, es sei denn, es erweist sich als nützlich.“","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Antworte__: „Zurückhaltung ist, was furchtsame Leute Gehorsam nennen, nachdem sie vergessen haben, wer sie dazu erzogen hat.“","/str","/ev",{"*":".^.c-7","flg":20},{"c-3":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","ev","str","^provocation","/str","/ev",{"VAR=":"viktor_relation","re":true},"ev",{"VAR?":"viktor_trust"},1,"-",{"VAR=":"viktor_trust","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Wären Herren weniger leicht zu lenken, Herr Nowak, so bedürften Damen weniger Methoden.“","\n","^Zum ersten Mal erreicht Belustigung beinahe seinen Mund.","\n","^„Eine gefährliche Lehre.“","\n",["ev","str","^__Antworte__: „Eine praktische.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Gefährliche Lehren reisen am besten in guten Handschuhen.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Eine praktische.“","\n","^„Sie gedenken, sie in Hohenreith anzuwenden?“","\n",["ev","str","^__Antworte__: „Nur dort, wo die Pflicht gegen die Monarchie Opfer verlangt.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Nur dort, wo Männer Begehren mit Urteil verwechseln.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Nur dort, wo die Pflicht gegen die Monarchie Opfer verlangt.“","\n","^Er blickt auf das Memorandum hinunter, aber nicht schnell genug, um zu verbergen, dass er dich neu einschätzt. ","#","^gloss[Memorandum](Amtliche Denkschrift. Lang genug, um Zuständigkeit zu behaupten, kurz genug, um die gefährlichen Dinge nicht beim Namen nennen zu müssen.)","/#","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Nur dort, wo Männer Begehren mit Urteil verwechseln.“","\n","^„Das mag mehr Gebiet umfassen, als die Karten zugeben.“","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Gefährliche Lehren reisen am besten in guten Handschuhen.“","\n","^„Sie gedenken, Hohenreith durch Charme zum Geständnis zu bringen?“","\n","^Wenn Hohenreith darauf besteht, bezaubert zu werden, wird es kaum deine Schuld sein.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-1"},null]}],{"#f":5}],"c-4":["^ ","#","^action:conversation","/#","\n","#","^route:sapphic","/#","ev",{"VAR?":"sapphic"},1,"+",{"VAR=":"sapphic","re":true},"/ev","ev","str","^tension","/str","/ev",{"VAR=":"viktor_relation","re":true},"ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Wenn Sie wünschen, dass ich harmlos erscheine, müssen Sie aufhören, mich wie ein Kerkermeister zu warnen.“","\n","^Sein Blick schärft sich.","\n","^„Ich bin nicht Ihr Kerkermeister.“","\n",["ev","str","^__Antworte__: „Nein. Ein Kerkermeister ist wenigstens ehrlich, was den Schlüssel betrifft.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Dann stellen Sie sich nicht zwischen mich und jede verschlossene Tür, noch ehe ich die Klinke berührt habe.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Nein. Ein Kerkermeister ist wenigstens ehrlich, was den Schlüssel betrifft.“","\n","^Die Worte überraschen dich dadurch, dass sie eine Spur hinterlassen. Vielleicht nicht bei ihm. Bei dir. Je näher dich der Zug an Amalias Welt trägt, obwohl du ihr Gesicht noch nicht kennst, desto unerträglicher scheint es, dass jedes weibliche Leben dort von Männern bewacht sein könnte, die Bewachung Sorge nennen.","\n","^Viktor faltet das Memorandum einmal, genau.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Dann stellen Sie sich nicht zwischen mich und jede verschlossene Tür, noch ehe ich die Klinke berührt habe.“","\n","^„Manche Türen sind nicht ohne Grund verschlossen.“","\n","^Jeder Grund, der eines Schlosses würdig ist, sollte die Unverschämtheit der Prüfung überstehen.","\n","^Viktor faltet das Memorandum einmal, genau.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-1"},null]}],{"#f":5}],"c-5":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev","str","^professional","/str","/ev",{"VAR=":"viktor_relation","re":true},"ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Dann wollen wir genau sein. Was wissen sie, was vermuten sie, und was ist mir zu prüfen gestattet?“","\n","^Er nickt kaum merklich, als hättest du die einzige Antwort gewählt, die Erwachsenen zusteht.","\n","^„Sie wissen, dass Sie empfohlen kommen. Sie vermuten, dass Sie imstande sein könnten, die Störungen ohne Polizei, Priester oder Presse beizulegen. Ihnen ist gestattet, Betrug, Zwang, Gefährdung der öffentlichen Ordnung oder glaubwürdige, derzeit nicht einzuordnende Erscheinungen zu prüfen.“","\n",["ev","str","^__Antworte__: „Glaubwürdige, derzeit nicht einzuordnende Erscheinungen.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Frage Viktor__: „Und wenn die Erscheinungen einzuordnen sind?“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Glaubwürdige, derzeit nicht einzuordnende Erscheinungen.“ ","#","^tts[Repeat the phrase with quiet skepticism, tasting the bureaucracy of it.]","/#","\n","^„So lautet die Wendung.“","\n","^Die Formulierung setzt sich in deinem Geist fest wie ein bürokratisches Gespenst. ","#","^tts[Make this sentence slightly colder and more uncanny, with a faint emphasis on \"bürokratisches Gespenst\".]","/#","\n","^„Die ungefährlichste Art“, sagt er.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","^„Und wenn die Erscheinungen einzuordnen sind?“","\n","^„Dann ordnen wir sie ein, ehe andere es tun.“","\n","^Der Satz hat die Kälte eines Berichts, der rasch über einem Grab geschrieben wurde.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-1"},null]}],{"#f":5}],"c-6":["^ ","#","^action:conversation","/#","\n","#","^route:careless","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","ev","str","^dependence","/str","/ev",{"VAR=":"viktor_relation","re":true},"ev",{"VAR?":"viktor_trust"},1,"-",{"VAR=":"viktor_trust","re":true},"/ev","^„Ich werde mein Möglichstes tun, nicht in Ohnmacht zu fallen, es sei denn, es erweist sich als nützlich.“","\n","^Etwas in seinem Gesicht spannt sich; nicht Verachtung genau, eher Bereitschaft.","\n","^„Ich würde es vorziehen, wenn Sie überhaupt nicht in Ohnmacht fielen.“","\n",["ev","str","^__Antworte__: „Wie unkavalierhaft.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Dann müssen Sie nahe genug bleiben, um mich aufzufangen.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Wie unkavalierhaft.“","\n","^„Wie praktisch.“","\n","^Die Last der Sachlichkeit wandert zu ihm hinüber, so anmutig wie ein Ohnmachtssofa, das in ein Feldlazarett geschleppt wird. ","#","^gloss[Ohnmachtssofa](Ruhemöbel für weibliche Schwächeanfälle, echte oder erwartete. Eine Gesellschaft, die Damen eng schnürt, sorgt immerhin für passende Möbel, wenn sie nicht mehr stehen.) ","/#","#","^gloss[Feldlazarett](Militärische Krankenstation im Feld. Dort endet die Sprache von Ehre und beginnt die Sprache von Blut, Listen und Verbänden.)","/#","\n","^Seine Antwort verzögert sich um einen halben Atemzug.","\n","^„Gerade das, gnädiges Fräulein, bereitet mir Sorge.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Dann müssen Sie nahe genug bleiben, um mich aufzufangen.“","\n","^„Meine Befehle erwähnten keine theatralischen Zusammenbrüche.“","\n","^Diese Auslassung spricht nicht für die Gründlichkeit seiner Vorgesetzten.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-1"},null]}],{"#f":5}],"c-7":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","ev","str","^challenge","/str","/ev",{"VAR=":"viktor_relation","re":true},"ev",{"VAR?":"viktor_suspicion"},2,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Zurückhaltung ist, was furchtsame Leute Gehorsam nennen, nachdem sie vergessen haben, wer sie dazu erzogen hat.“","\n","^Viktor betrachtet dich, als hätte man eine unbekannte Waffe im Gepäck gefunden.","\n","^„Sie haben Freude daran, sich Feinde zu machen.“","\n",["ev","str","^__Antworte__: „Nein. Ich missbillige nur die Bequemlichkeit, Dummköpfe unentschieden bleiben zu lassen.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Feinde sind nur Menschen, die ehrlich genug sind, am richtigen Platz zu stehen.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Nein. Ich missbillige nur die Bequemlichkeit, Dummköpfe unentschieden bleiben zu lassen.“","\n","^„In Hohenreith könnte diese Abneigung kostspielig werden.“","\n","^Wenn der Graf Fügsamkeit wollte, hätte er jemand Günstigeren einladen können.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","^„Feinde sind nur Menschen, die ehrlich genug sind, am richtigen Platz zu stehen.“","\n","^„Sie sprechen, als sei Streit eine Art Haushaltsführung.“","\n","^Streit war immer eine Form von Haushaltsführung; man entdeckt, was wohin gehört.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-1"},null]}],{"#f":5}]}],"g-1":["^Die Räder nehmen eine Kurve. Das Abteil neigt sich. Für einen Augenblick hält euch dieselbe schmale Schräglage.","\n","^Viktor gibt dir endlich das Memorandum. ","#","^gloss[Memorandum](Amtliche Denkschrift. Lang genug, um Zuständigkeit zu behaupten, kurz genug, um die gefährlichen Dinge nicht beim Namen nennen zu müssen.)","/#","\n","^Das Schriftstück ist nicht lang. Das ist Teil seiner Bedrohlichkeit. Lange Schriftstücke laden zum Widerspruch ein; kurze tragen Autorität.","\n","^Ein gräflicher Haushalt. Ein Jagdhaus in der Obersteiermark, nicht der Hauptsitz der Familie. Berichte über Störungen unter Dienerschaft und Dorfbewohnern. Kein Einschreiten der Polizei erbeten. Keine öffentliche kirchliche Untersuchung erwünscht. Keine Presse. Keine Korrespondenz außerhalb genehmigter Kanäle. Deine Anwesenheit ist als diskrete Konsultation auf Wunsch der Familie zu erklären. Herr Nowak dient zur Unterstützung praktischer Angelegenheiten. ","#","^gloss[Jagdhaus](Adeliger Landsitz für Jagden und kurze Aufenthalte. Weniger Hauptsitz als Bühne für Gäste, Förster, Gewehre und Geheimnisse.) ","/#","#","^gloss[Obersteiermark](Der gebirgige Norden der Steiermark. Wälder, Eisen, enge Täler und ein Wetter, das sich nicht für Wiener Empfindlichkeiten interessiert.) ","/#","#","^gloss[Dienerschaft](Die Bediensteten eines Hauses. Offiziell Teil der Ordnung, praktisch ihr Gedächtnis.) ","/#","#","^gloss[kirchliche Untersuchung](Prüfung durch geistliche Stellen. Sie ist besonders beruhigend, solange man sicher ist, dass der Schrecken der richtigen Art angehört.) ","/#","#","^gloss[Korrespondenz](Briefwechsel. Die vornehme Kunst, Absichten so lange zu falten, bis sie in ein Kuvert passen.)","/#","\n","^Niemand hat das Wort Geist geschrieben.","\n","^Niemand hat das Wort Betrug geschrieben.","\n","^Niemand hat das Wort Tochter geschrieben.","\n","^Doch die Auslassungen ordnen sich auf der Seite an wie Möbel um eine Leiche.","\n","ev","str","^__Antworte__: „Es gibt noch eine weitere Weisung.“","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Antworte__: „Ihre Fassung ist kürzer als Ihr Schweigen. Das bedeutet, es gibt noch eine weitere Weisung.“","/str","/ev",{"*":".^.c-9","flg":20},"ev","str","^__Spotte__: „Wie rührend. Wien vertraut uns beiden so wenig, dass es das Misstrauen aufteilen musste.“","/str","/ev",{"*":".^.c-10","flg":20},{"c-8":["^ ","#","^action:conversation","/#","\n","^„Es gibt noch eine weitere Weisung.“ ","#","^gloss[Weisung](Ein Befehl, dem man die Uniform ausgezogen hat. Sehr nützlich, wenn Gehorsam erwartet wird, aber niemand persönlich Verantwortung tragen möchte.)","/#","\n","^Viktor fragt nicht, woher du es weißt.","\n","^„Es gibt immer noch eine weitere Weisung“, sagt er. ","#","^gloss[Weisung](Ein Befehl, dem man die Uniform ausgezogen hat. Sehr nützlich, wenn Gehorsam erwartet wird, aber niemand persönlich Verantwortung tragen möchte.)","/#","\n",["ev","str","^__Antworte__: „Für Sie.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Über mich.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Für Sie.“","\n","^„Ja.“","\n",["ev","str","^__Antworte__: „Über mich.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Über mich.“","\n","^„Teilweise.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","\n","^„Teilweise“, sagt er, und diesmal hat die Ehrlichkeit eine Schneide.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","^„Über mich.“","\n","^„Teilweise.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","\n","^„Teilweise“, sagt er, und diesmal hat die Ehrlichkeit eine Schneide.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-2"},null]}],{"#f":5}],"c-9":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Ihre Fassung ist kürzer als Ihr Schweigen. Das bedeutet, es gibt noch eine weitere Weisung.“ ","#","^gloss[Weisung](Ein Befehl, dem man die Uniform ausgezogen hat. Sehr nützlich, wenn Gehorsam erwartet wird, aber niemand persönlich Verantwortung tragen möchte.)","/#","\n","^Viktor fragt nicht, woher du es weißt.","\n","^„Es gibt immer noch eine weitere Weisung“, sagt er.","\n",["ev","str","^__Antworte__: „Für Sie.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Über mich.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Für Sie.“","\n","^„Ja.“","\n",["ev","str","^__Antworte__: „Über mich.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Über mich.“","\n","^„Teilweise.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","\n","^„Teilweise“, sagt er, und diesmal hat die Ehrlichkeit eine Schneide.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","^„Über mich.“","\n","^„Teilweise.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","\n","^„Teilweise“, sagt er, und diesmal hat die Ehrlichkeit eine Schneide.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-2"},null]}],{"#f":5}],"c-10":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Wie rührend. Wien vertraut uns beiden so wenig, dass es das Misstrauen aufteilen musste.“","\n","^Viktor fragt nicht, woher du es weißt.","\n","^„Es gibt immer noch eine weitere Weisung“, sagt er.","\n",["ev","str","^__Antworte__: „Für Sie.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Über mich.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Für Sie.“","\n","^„Ja.“","\n",["ev","str","^__Antworte__: „Über mich.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Über mich.“","\n","^„Teilweise.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","\n","^„Teilweise“, sagt er, und diesmal hat die Ehrlichkeit eine Schneide.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","^„Über mich.“","\n","^„Teilweise.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Darüber, ob ich Betrügerin, Närrin oder nützliches Tier bin.“","\n","^„Teilweise“, sagt er, und diesmal hat die Ehrlichkeit eine Schneide.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.^.g-2"},null]}],{"#f":5}]}],"g-2":["^Der Zug beginnt langsamer zu werden. Der Rhythmus verändert sich zuerst im Boden, dann im Fenster, dann im Körper. Häuser sammeln sich neben der Strecke. Ein Stationsdach erscheint zwischen treibendem Rauch und den dunklen Kämmen bewaldeter Hänge. ","#","^sfx[steam-whistle.ogg]","/#","\n","ev","str","^__Antworte__: „Dann werde ich versuchen, der Tinte wert zu sein.“","/str","/ev",{"*":".^.c-11","flg":20},"ev","str","^__Antworte__: „Dann werde ich die Weisung so kunstvoll enttäuschen, wie es die Umstände erlauben.“","/str","/ev",{"*":".^.c-12","flg":20},"ev","str","^__Antworte__: „Dann behalten Sie Ihre zweite Weisung, Herr Nowak. Ich bevorzuge Quellen erster Hand.“","/str","/ev",{"*":".^.c-13","flg":20},{"c-11":["^ ","#","^action:conversation","/#","\n","^„Dann werde ich versuchen, der Tinte wert zu sein.“","\n","^„Das hoffe ich aufrichtig.“","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-12":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Dann werde ich die Weisung so kunstvoll enttäuschen, wie es die Umstände erlauben.“ ","#","^gloss[Weisung](Ein Befehl, dem man die Uniform ausgezogen hat. Sehr nützlich, wenn Gehorsam erwartet wird, aber niemand persönlich Verantwortung tragen möchte.)","/#","\n","^„Ich hoffe aufrichtig, dass Sie es nicht tun.“","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-13":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^„Dann behalten Sie Ihre zweite Weisung, Herr Nowak. Ich bevorzuge Quellen erster Hand.“ ","#","^gloss[Weisung](Ein Befehl, dem man die Uniform ausgezogen hat. Sehr nützlich, wenn Gehorsam erwartet wird, aber niemand persönlich Verantwortung tragen möchte.)","/#","\n","^„Eine Vorliebe, die im kaiserlichen Dienst nicht immer gewährt wird.“","\n",{"->":".^.^.^.g-3"},{"#f":5}]}],"g-3":["^Du kannst nicht entscheiden, ob seine Antwort eine Beleidigung, ein Gebet oder sein erster ehrlicher Satz ist.","\n",{"->":"railway_station"},null]}],null],"railway_station":["^Die Station ist klein genug, dass der Zug kurz verlegen wirkt, als er dort hält. ","#","^chapter[Der Bahnhof] ","/#","#","^image[muerzzuschlag.png](portrait)","/#","\n","^Ein Gepäckträger mit einer zu großen Kappe eilt über den Bahnsteig. Eine Frau mit Korb tritt vor dem Dampf zurück wie vor einem Tier. Irgendwo jenseits des Stationsgebäudes stampft ein Kutschpferd im gefrorenen Schlamm. Das Schild gibt dem Ort einen Namen, den du im Fahrplan gesehen hast und an den du dich nicht mit Zuneigung erinnern wirst.","\n",{"->":"station_platform_options"},null],"station_platform_options":[["ev",{"VAR?":"tut_optional_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Manche Wahlen sind Erkundungen. Sie öffnen Beobachtungen, Stimmungen oder Hinweise, ohne dich meist sofort auf einen unwiderruflichen Schritt festzulegen.]","/#","ev",true,"/ev",{"VAR=":"tut_optional_intro","re":true},{"->":".^.^.^.5"},null]}],"nop","\n","ev","str","^__Schaue__: Auf das Stationsschild.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre__: Auf den Bahnsteig.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Untersuche__: Die Wartenden.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Überblicke__: Dein Gepäck.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["^ ","#","^action:orientation ","/#","#","^optional ","/#","#","^key:l","/#","\n","^Der Ortsname auf dem Schild ist mit schwarzer Farbe auf hellem Grund gemalt, zweckmäßig, kaiserlich, ohne jede Rücksicht auf den Eindruck, den er auf Ankommende macht. Die Buchstaben sehen aus, als hätten sie nie vorgehabt, in einem Salon ausgesprochen zu werden.","\n",{"->":".^.^.^"},{"#f":5}],"c-1":["^ ","#","^action:orientation ","/#","#","^optional","/#","\n","^Unter dem Zischen der Lokomotive liegen kleinere Geräusche: ein Koffer, der auf Holz abgesetzt wird; das kurze Räuspern eines Beamten; Pferdehufe im gefrorenen Schlamm; eine Frau, die ein Gebet beginnt und beim zweiten Wort wieder verschluckt.","\n",{"->":".^.^.^"},{"#f":5}],"c-2":["^ ","#","^action:orientation ","/#","#","^optional","/#","\n","^Niemand starrt offen. Das wäre grob. Stattdessen entstehen kleine Leerstellen in den Bewegungen der Leute: ein Blick, der zu spät weiterwandert; ein Schritt, der seine Richtung ändert; ein Gespräch, das plötzlich nur noch aus Endungen besteht.","\n",{"->":".^.^.^"},{"#f":5}],"c-3":["^ ","#","^action:object","/#","\n",{"->":"station_baggage"},{"#f":5}]}],null],"station_baggage":[["^Dein Gepäck wird in Etappen ausgeladen.","\n","ev","str","^__Überblicke__: Eine disziplinierte amtliche Zusammenstellung.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Überblicke__: Das Gepäck einer eleganten Dame.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Überblicke__: Das Gepäck einer Darstellerin.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Überblicke__: Eine praktische Auswahl, die zu viel Vorbereitung verrät.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Überblicke__: Ein übertriebener Haufen, der jede Tarnung erschwert.","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["^ ","#","^action:object","/#","\n","ev","str","^official","/str","/ev",{"VAR=":"baggage_style","re":true},"ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^Zuerst kommt ein nüchterner Reisekoffer mit vom Gebrauch stumpfen Messingecken, dann eine Aktenmappe, dann eine Hutschachtel, dann der schmale schwarze Kasten, dessen Inhalt sowohl einen Priester als auch einen Taschenspieler in Verlegenheit bringen würde, falls einer von beiden ihn ohne Phantasie durchsuchte.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:object","/#","\n","ev","str","^elegant","/str","/ev",{"VAR=":"baggage_style","re":true},"ev",{"VAR?":"class_confidence"},1,"+",{"VAR=":"class_confidence","re":true},"/ev","^Zuerst kommt ein großer Koffer aus dunklem Leder, dann ein kleinerer für Wäsche, dann eine runde Hutschachtel, ein Reise-Necessaire und ein Ridikül, das du zu nahe bei der Hand behältst, als dass ein Gepäckträger seine Bedeutung missverstehen dürfte.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:object","/#","\n","ev","str","^performer","/str","/ev",{"VAR=":"baggage_style","re":true},"ev",{"VAR?":"medium_reputation"},1,"+",{"VAR=":"medium_reputation","re":true},"/ev","^Zuerst kommt ein respektabler Koffer, dann eine Hutschachtel, dann ein Reisekasten mit Handschuhen, Schleiern, Bändern, Visitenkarten und kleinen Gegenständen, mit denen man ein Zimmer überreden kann, an Kräfte zu glauben, die längst anwesend sind.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:object","/#","\n","ev","str","^practical","/str","/ev",{"VAR=":"baggage_style","re":true},"ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^Zuerst kommt ein abgenützter, an den Ecken verstärkter Koffer, dann eine Ledertasche mit Notizheften, Bleistiften, gefalteten Karten, Ersatzhandschuhen, einer Handlampe und genug kleinen Notwendigkeiten, um jeden zu beleidigen, der Frauen lieber dekorativ hat.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:object","/#","\n","ev","str","^excessive","/str","/ev",{"VAR=":"baggage_style","re":true},"ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","^Zuerst kommt ein Koffer, dann ein zweiter, dann eine Hutschachtel, dann eine Reisedecke, dann ein Toilettenkasten, dann der schmale schwarze Kasten, dann ein kleineres Paket, von dem du vergessen hattest, dass es das Packen überlebt hat. Am Ende sieht selbst Viktor einen Augenblick lang zahlenmäßig unterlegen aus.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["^Viktor überwacht die Umladung mit knapper Höflichkeit. Er trägt nicht wie ein Diener. Er weist an wie ein Mann, der vorgibt, nicht zu befehlen.","\n","^Die kleine Szene vor dem Waggon ist harmlos genug, um gefährlich zu sein. Ein Gepäckträger wartet mit geneigtem Kopf. Der Kutscher steht einige Schritte entfernt. Viktor ist nah genug, um dir beim Aussteigen die Hand zu reichen, aber nicht so nah, dass er es ohne dein stilles Einverständnis täte. Drei Männer, drei Stände, drei verschiedene Arten von Nützlichkeit.","\n","^Was hier geschieht, wird niemand in einem Bericht erwähnen. Gerade deshalb wird es behalten.","\n",["ev",{"VAR?":"baggage_style"},"str","^practical","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Weil dein Gepäck nach Vorbereitung aussieht, wirkt die nüchterne Anweisung an einen Gepäckträger weniger wie Anmaßung und mehr wie Gewohnheit.","\n",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"baggage_style"},"str","^excessive","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Weil dein Gepäck zu zahlreich ist, wird schon vor dem ersten Wort sichtbar, dass jemand in deiner Nähe arbeiten muss.","\n",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"baggage_style"},"str","^performer","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Der schmale schwarze Kasten zieht Viktors Blick eine Spur länger auf sich als die übrigen Stücke.","\n",{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","^Das Gepäck gibt den Männern genug zu tun, um ihnen ihre Rollen zu erklären.","\n",{"->":".^.^.^.10"},null]}],"nop","\n","ev",{"VAR?":"tut_manners_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[In Gesellschaft entscheidet oft nicht nur, was du tust, sondern wann und vor wem. Höflichkeit, Rang und Timing können ebenso viel verraten wie ein Geständnis.]","/#","ev",true,"/ev",{"VAR=":"tut_manners_intro","re":true},{"->":".^.^.^.17"},null]}],"nop","\n","ev",{"VAR?":"tut_gated_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",["ev",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","#","^alert[Manche Möglichkeiten erkennst du nur, weil deine Herkunft, dein Glaube oder deine bisherigen Entscheidungen sie dir öffnen. Der hervorgehobene Hinweis nach dem Mittelpunkt zeigt, wodurch sie möglich wurde.]","/#","ev",true,"/ev",{"VAR=":"tut_gated_intro","re":true},{"->":".^.^.^.3"},null]}],["ev",{"VAR?":"birth_class"},"str","^working","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","#","^alert[Manche Möglichkeiten erkennst du nur, weil deine Herkunft, dein Glaube oder deine bisherigen Entscheidungen sie dir öffnen. Der hervorgehobene Hinweis nach dem Mittelpunkt zeigt, wodurch sie möglich wurde.]","/#","ev",true,"/ev",{"VAR=":"tut_gated_intro","re":true},{"->":".^.^.^.3"},null]}],"nop","\n",{"->":".^.^.^.24"},null]}],"nop","\n","ev","str","^__Warte__ · **Adel**: Bis Viktor seine Hand anbietet.","/str",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",{"*":".^.c-5","flg":21},"ev","str","^__Nicke__: Viktor zu und überlasse dem Gepäckträger das Gepäck.","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Bitte den Gepäckträger__: „Zuerst den kleineren Kasten, wenn ich bitten darf.“","/str","/ev",{"*":".^.c-7","flg":20},"ev","str","^__Warte__: Einen Augenblick zu lange, bevor du Viktors Hand nimmst.","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Greife__: Selbst nach einem Koffer.","/str","/ev",{"*":".^.c-9","flg":20},"ev","str","^__Nimm__ · **Unterschicht**: Dem Gepäckträger beinahe den Koffer ab.","/str",{"VAR?":"birth_class"},"str","^working","/str","==","/ev",{"*":".^.c-10","flg":21},{"c-5":["^ ","#","^action:social ","/#","#","^gated:noble ","/#","#","^key:z","/#","\n","#","^manners:excellent","/#","ev",{"VAR?":"class_confidence"},2,"+",{"VAR=":"class_confidence","re":true},"/ev","ev",{"VAR?":"court_loyalty"},1,"+",{"VAR=":"court_loyalty","re":true},"/ev","^Du wartest einen Atemzug, bis Viktor seine Hand anbietet, und nimmst sie dann, als wäre dies keine Hilfe, sondern die Ordnung der Welt.","\n","^Du gibst ihm nicht dein Gewicht. Nur deine Hand. Genau genug, dass er dienen darf, ohne Diener zu werden. Der Gepäckträger senkt den Blick ein wenig tiefer. Der Kutscher sieht, was er sehen muss: eine Dame, die ihren Rang nicht beweist, weil Beweise für Leute ohne Rang sind.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-6":["^ ","#","^action:social","/#","\n","#","^manners:good","/#","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^Du nimmst Viktors angebotene Hand knapp und sicher, dankst ihm mit einem Nicken und lässt den Gepäckträger das Gepäck nehmen.","\n","^Es ist gutes Benehmen ohne Prunk: nicht zu vertraut gegenüber Viktor, nicht zu freundlich gegenüber dem Gepäckträger, nicht so kalt, dass es nach Unsicherheit riecht. Mittelstand könnte dies lernen. Adel könnte es billigen. Dienstboten würden erkennen, dass du ihre Arbeit nicht mit Herablassung verwechselst.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-7":["^ ","#","^action:social","/#","\n","#","^route:detective","/#","#","^manners:practical","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^Du steigst selbst aus, bevor Viktor sich entscheiden kann, und bittest den Gepäckträger sachlich, zuerst den kleineren Kasten zu nehmen.","\n","^Das ist nicht ganz falsch, aber auch nicht ganz richtig. Viktor bemerkt die kleine Missachtung der erwarteten Form. Der Gepäckträger gehorcht erleichtert, weil klare Anweisungen leichter zu tragen sind als feine Ungewissheit. Der Kutscher ordnet dich eher der Nützlichkeit als dem Rang zu.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-8":["^ ","#","^action:social","/#","\n","#","^route:lover","/#","#","^manners:provocative","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^Du lässt Viktor zu lange mit ausgestreckter Hand warten und lächelst erst dann, als hättest du ihn absichtlich geprüft.","\n","^Es ist fast ein Fauxpas, gerettet durch Anmut und die Tatsache, dass Männer Demütigungen leichter verzeihen, wenn sie sich wie Aufmerksamkeit anfühlen. Viktor hilft dir hinunter. Seine Hand bleibt vollkommen korrekt. Sein Blick nicht ganz.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-9":["^ ","#","^action:object","/#","\n","#","^route:careless","/#","#","^manners:awkward","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","^Du entschuldigst dich beim Gepäckträger dafür, dass deine Sachen Mühe machen, und greifst selbst nach einem Koffer.","\n","^Der Gepäckträger erstarrt, als hättest du ihm eine philosophische Frage gestellt. Viktor tritt sofort dazwischen, höflich genug, um die Rettung wie Zufall aussehen zu lassen. Du hast gegen keine Moral verstoßen, nur gegen die unsichtbare Arbeitsteilung, auf der diese kleine Welt ruht.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-10":["^ ","#","^action:object ","/#","#","^gated:working ","/#","#","^key:t","/#","\n","#","^manners:fauxpas","/#","ev",{"VAR?":"class_confidence"},1,"-",{"VAR=":"class_confidence","re":true},"/ev","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","^Du springst hinunter, bevor jemand dir helfen kann, und nimmst dem Gepäckträger beinahe den Koffer aus der Hand.","\n","^Für eine Sekunde bist du schneller als deine Verkleidung. Der Gepäckträger hält fest, Viktor greift nach deinem Ellbogen, der Kutscher sieht weg, weil Wegsehen manchmal die höflichste Form von Zeugenschaft ist. Es ist kein Unglück. Nur ein Riss, klein genug, um ihn mit Haltung zu schließen.","\n",{"->":".^.^.^.g-1"},{"#f":5}]}],"g-1":["^Die Kutsche aus Hohenreith wartet jenseits des Stationshofes: dunkelgrüner Lack, schwarze Räder, das gräfliche Wappen dezent auf der Tür, zwei Pferde bereits unruhig im Geschirr. Der Kutscher nimmt den Hut ab, als er dich sieht. Nicht zu tief. Tief genug für Rang, nicht tief genug für Ehrfurcht. ","#","^sfx[horse-neigh.ogg]","/#","\n","^„Gnädiges Fräulein? Herr Sekretär?“","\n","ev",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^Man hat ihm genug gesagt, um dich einzuordnen. Das ist eine Höflichkeit. Es ist auch eine Warnung.","\n",{"->":".^.^.^.16"},null]}],[{"->":".^.b"},{"b":["\n","^Er zögert bei dir um das kleinste Maß. Das Zögern ist keine Unhöflichkeit. Es ist Berechnung. Erste Klasse, Hofschreiben, kein Titel außer Fräulein, und ein Mann neben dir, der aussieht, als hätte er Menschen für weniger verhaften lassen als Starren.","\n",{"->":".^.^.^.16"},null]}],"nop","\n","^Viktor antwortet, bevor du es kannst.","\n","^„Vom Jagdhaus Hohenreith?“","\n","^„Jawohl, Herr Sekretär. Der Weg ist befahrbar. Wenn der Nebel nicht dichter wird, sollten wir Eibenreith vor Einbruch der Dunkelheit erreichen.“","\n","^Das Wort tritt ohne Zeremonie in die Luft.","\n","^Eibenreith.","\n","^Nicht Hohenreith, der Name, der in sauberer Hand auf der Einladung steht. Eibenreith: das Dorf darunter. Ein kleinerer Name. Älter im Mund. Ein Name mit Wurzeln statt Briefpapier.","\n",{"->":"coach_journey"},null]}],null],"coach_journey":["^Die Kutsche lässt die Station hinter sich und damit das letzte leicht erkennbare Zeichen der Monarchie. ","#","^chapter[Der Graben] ","/#","#","^music[Kaiserpunk Jodler.mp3](crossfade, loop, lead=4)","/#","\n","^Zuerst folgt der Weg einem Tal, in dem Telegraphendraht ihm noch Gesellschaft leistet und der Fluss in einem hellen, steinigen Bett läuft. Sägewerke, umzäunte Wiesen und Bauernhäuser erscheinen und verschwinden hinter Fichtenbeständen. Die Berge steigen nicht auf einmal. Sie rücken zuständigkeitsweise vor. Ein bewaldeter Hang beansprucht den linken Himmel, dann schließt eine graue Wand aus Kalk den Norden, dann sammelt sich im Osten ein weiterer Rücken, bis selbst die Wolken in Dienst getreten scheinen.","\n","^Der Kutscher nennt Orte, wenn Viktor fragt, doch die Namen sind örtlich und praktisch, gedacht für Männer, die wissen, welche Brücke bei Hochwasser nachgibt und welcher Hof störrische Pferde hält. Irgendwo hinter den sichtbaren Rücken, sagt er, liegt der große weiße Rücken des Hochschwab. Nach Osten, jenseits von Wald und Pass, hält die Hohe Veitsch ihr eigenes Wetter. Er sagt das nicht wie ein Führer, sondern wie ein Mann, der Nachbarn erklärt, die vielleicht guter Laune sind und vielleicht nicht.","\n","^Das Haupttal verengt sich.","\n","^Der Weg biegt davon in einen Seitengraben, und die Veränderung ist augenblicklich. Der Klang ändert sich. Die Räder klingen nicht mehr gegen offene Entfernung, sondern mahlen zwischen Böschungen, Wurzeln und nassem Stein. Die Luft riecht nach Lauberde, Harz und kaltem Wasser. Eiben erscheinen zwischen den Fichten in dunkler, unwahrscheinlicher Geduld, ihre Nadeln zu schwarz für den Nachmittag.","\n","^„Eibenreither Graben“, sagt der Kutscher und bekreuzigt sich so rasch, dass die Geste auch einem Schlagloch gegolten haben könnte.","\n","^Viktor bemerkt es. Natürlich bemerkt er es.","\n","^„Schlechter Weg?“, fragt er.","\n","^„Alter Weg“, sagt der Kutscher.","\n","^Eine Weile spricht niemand.","\n",{"->":"coach_road_options"},null],"coach_road_options":[["ev","str","^__Berühre__: Das kalte Kutschenfenster.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre__: Auf die Räder im Graben.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Untersuche__: Viktors Reaktion.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Warte__: In der schaukelnden Kutsche.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["^ ","#","^action:object ","/#","#","^optional","/#","\n","^Das Glas ist kälter, als es im Inneren der Kutsche sein dürfte. Feuchtigkeit sammelt sich an deinem Handschuh und verschwindet sofort wieder, als hätte sie es sich anders überlegt. Draußen streifen Zweige so nah vorbei, dass sie die Scheibe beinahe mit Nägeln prüfen.","\n",{"->":".^.^.^"},{"#f":5}],"c-1":["^ ","#","^action:orientation ","/#","#","^optional","/#","\n","^Das Geräusch der Räder hat sich verändert. Auf der offenen Straße war es ein Rhythmus; hier ist es ein Mahlen, ein Zählen, ein wiederholtes Bestehen gegen Stein und Wurzel. Der Weg klingt nicht befahren. Er klingt benutzt.","\n",{"->":".^.^.^"},{"#f":5}],"c-2":["^ ","#","^action:orientation ","/#","#","^optional","/#","\n","^Viktor betrachtet nicht die Landschaft. Er betrachtet ihre Möglichkeiten: Engstellen, Böschungen, tote Winkel, die Entfernung bis zum Kutscher, die Frage, wie rasch man aus einer Kutsche steigt, wenn die Straße selbst dagegen ist.","\n",{"->":".^.^.^"},{"#f":5}],"c-3":["^ ","#","^action:social ","/#","#","^key:z","/#","\n",{"->":"coach_after_road_options"},{"#f":5}]}],null],"coach_after_road_options":[["^Du beobachtest die Bäume.","\n","^Es gibt Wälder, die zu Geschichten einladen, weil sie hübsch sind, und Wälder, die Geschichten zurückweisen, weil das, was dort geschah, keine Zeugen brauchte. Dieser gehört zur zweiten Art. Seine Stämme stehen eng, nicht wild, sondern mit der Haltung einer Menge, die Platz macht für etwas, das vor langer Zeit durch sie getragen wurde. Der Schnee in den Mulden ist nicht rein. Er hat Nadeln gesammelt, Rinde und einen gelblichen Fleck dort, wo Wasser von unten aufgestiegen ist.","\n","^An einem Hang oberhalb des Weges, halb vom Unterholz verschluckt, erblickst du Stein.","\n","^Ein Wegheiligtum vielleicht. Ein Grenzzeichen. Eine Figur. Die Kutsche rollt schon vorbei, bevor deine Augen sich auf ihre Form einigen können. Für einen Augenblick bleibt der Eindruck eines Frauenkopfes zurück, geneigt nicht im Gebet, sondern im Lauschen. ","#","^image[statue.png](square)","/#","\n",["ev",{"VAR?":"supernatural_senses"},"str","^genuine","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Dein Nacken zieht sich zusammen.","\n","^Nicht Furcht. Wiedererkennen wäre schlimmer.","\n",{"->":".^.^.^.15"},null]}],["ev",{"VAR?":"supernatural_senses"},"str","^ambiguous","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Dein Nacken zieht sich zusammen.","\n","^Nicht Furcht. Wiedererkennen wäre schlimmer.","\n",{"->":".^.^.^.15"},null]}],["ev",{"VAR?":"supernatural_senses"},"str","^repressed","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Dein Nacken zieht sich zusammen.","\n","^Nicht Furcht. Wiedererkennen wäre schlimmer.","\n",{"->":".^.^.^.15"},null]}],[{"->":".^.b"},{"b":["\n","^Du sagst dir, dass alter Stein, durch bewegte Zweige gesehen, zu allem wird, wozu der Geist feig genug ist.","\n",{"->":".^.^.^.15"},null]}],"nop","\n","^Viktor wendet sich leicht demselben Hang zu.","\n","^„Haben Sie etwas gesehen?“","\n","ev","str","^__Antworte__: „Vielleicht eine Frau im Wald. Oder ein Stein, der eine sein wollte.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Ein Grenz- oder Wegzeichen. Ich wüsste gern, wohin dieser Pfad führt.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Antworte__: „Nur Bäume. Die Art, bei der man für Herren mit Revolvern dankbar wird.“","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Frage Viktor__: „Würden Sie mir glauben, wenn ich sagte, ich hätte etwas gesehen?“","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Antworte__: „Nein.“","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","#","^hint:statue","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Vielleicht eine Frau im Wald. Oder ein Stein, der eine sein wollte.“","\n","^Er betrachtet die vorbeiziehenden Bäume.","\n","^„Ein Wegheiligtum?“","\n",["ev","str","^__Antworte__: „Wenn es ein Heiligtum ist, so ist es seit langem nicht mehr geliebt worden.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Nein. Heiligtümer wenden sich den Gläubigen zu. Dieses Ding lauschte seitwärts.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Wenn es ein Heiligtum ist, so ist es seit langem nicht mehr geliebt worden.“","\n","^„Sie sprechen, als bemerkten Steine Vernachlässigung.“","\n","^Soldaten bemerken Vernachlässigung ebenfalls. Sein Schweigen gesteht genug zu.","\n","^Er antwortet nicht.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","ev",{"VAR?":"supernatural_exposure"},1,"+",{"VAR=":"supernatural_exposure","re":true},"/ev","^„Nein. Heiligtümer wenden sich den Gläubigen zu. Dieses Ding lauschte seitwärts.“","\n","^Viktors Hand ruht am Halteriemen der Kutsche, still und bereit.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","#","^hint:statue","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Ein Grenz- oder Wegzeichen. Ich wüsste gern, wohin dieser Pfad führt.“","\n","^„Sie haben einen Pfad gesehen?“","\n",["ev","str","^__Antworte__: „Nicht deutlich. Genug, um später danach zu fragen.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Nur die Andeutung eines Pfades. Wenn er existiert, erhält jemand seine Abwesenheit aufrecht.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Nicht deutlich. Genug, um später danach zu fragen.“","\n","^Viktor blickt durch das kleine rückwärtige Fenster. Die Biegung hat den Hang bereits ausgelöscht.","\n","^„Fragen Sie vorsichtig. Orte, die man nicht erwähnt, sind oft aufschlussreicher als jene, die man empfiehlt.“","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^„Nur die Andeutung eines Pfades. Wenn er existiert, erhält jemand seine Abwesenheit aufrecht.“","\n","^„Sie lassen Abwesenheiten kostspielig klingen.“","\n","^Das sind sie meistens; Abwesenheit ist teuer, wenn jemand sie pflegt.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-2":["^ ","#","^action:conversation","/#","\n","#","^route:careless","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","ev","str","^dependence","/str","/ev",{"VAR=":"viktor_relation","re":true},"^„Nur Bäume. Die Art, bei der man für Herren mit Revolvern dankbar wird.“","\n","^Sein Ausdruck verdunkelt sich um einen amtlichen Grad.","\n","^„Ein Revolver ist ein schlechtes Werkzeug gegen Bäume.“","\n",["ev","str","^__Antworte__: „Dann werde ich mich darauf verlassen, dass Ihre Unterhaltung sie einschüchtert.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Wie bedauerlich. Sie wirkten so berufsmäßig beruhigend.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Dann werde ich mich darauf verlassen, dass Ihre Unterhaltung sie einschüchtert.“","\n","^Der Kutscher tut, als höre er nichts. Seine Schultern jedoch hören alles.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Wie bedauerlich. Sie wirkten so berufsmäßig beruhigend.“","\n","^„Ich bevorzuge Feinde, die sich zu erkennen geben.“","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-3":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","ev",{"VAR?":"viktor_suspicion"},1,"+",{"VAR=":"viktor_suspicion","re":true},"/ev","^„Würden Sie mir glauben, wenn ich sagte, ich hätte etwas gesehen?“","\n","^„Das hinge davon ab, welchen Vorteil Sie sich von der Antwort versprechen.“","\n",["ev","str","^__Antworte__: „Herr Nowak. Sie verletzen mich.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Weise Viktor an__: „Beobachten Sie den Hang, nicht meine Absichten. Eines von beidem könnte nützlich sein.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Herr Nowak. Sie verletzen mich.“","\n","^„Noch nicht.“","\n","^Es ist das Erste, was er an diesem Tag gesagt hat, das beinahe wie ein Flirt klingt, wenn auch vielleicht nur deshalb, weil Gefahr ein Talent dafür hat, wärmere Kleider zu borgen.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:social","/#","\n","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^„Dann beobachten Sie den Hang, nicht meine Absichten. Eines von beidem könnte nützlich sein.“","\n","^Er gehorcht, ohne zuzugeben, dass er es getan hat.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"c-4":["^ ","#","^action:conversation","/#","\n","#","^route:sapphic","/#","ev",{"VAR?":"sapphic"},1,"+",{"VAR=":"sapphic","re":true},"/ev","^„Nein.“","\n","^Die Verneinung kommt zu rasch, und ihr hört es beide.","\n","^Du denkst nicht mehr an den Stein. Du denkst an die junge Frau, die irgendwo vor euch wartet: die Tochter des Grafen, der Grund, der sorgsam nicht im Memorandum steht, die Fremde, deren Haushalt dich unter einem Titel herbeigerufen hat, der zugleich lächerlich und nützlich ist.","\n",["ev","str","^__Antworte__: „Es war nur Schatten.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Antworte__: „Oder, falls ich etwas sah, ziehe ich es vor, es mir nicht erklären zu lassen, bevor ich verstehe, warum es von Bedeutung ist.“","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["^ ","#","^action:conversation","/#","\n","^„Es war nur Schatten.“","\n","^Wenn dieser Ort Frauen in Stein hält, denkst du, was tut er dann mit ihnen in den Häusern?","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^„Oder, falls ich etwas sah, ziehe ich es vor, es mir nicht erklären zu lassen, bevor ich verstehe, warum es von Bedeutung ist.“","\n","^Wenn dieser Ort Frauen in Stein hält, denkst du, was tut er dann mit ihnen in den Häusern?","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":[{"->":".^.^.^.^.g-0"},null]}],{"#f":5}],"g-0":["^Der Graben öffnet sich widerwillig.","\n",{"->":"village_arrival_options"},null]}],null],"village_arrival_options":[["^Zuerst kommt der Geruch von Rauch. Dann ein Dach, niedrig und dunkel vom Wetter. Dann ein zweites. Dann ein Kirchturm, nicht hoch, nicht anmutig, sondern breitschultrig und blass vor dem Hang dahinter. Seine Mauern wirken älter als das Dorf um sie her und weniger sicher ihres Sieges. Die Fenster sind klein. Die Kirchhofmauer hält die Straße auf Abstand, als bräuchten die Toten Schutz vor den Lebenden oder die Lebenden vor etwas anderem. ","#","^chapter[Eibenreith] ","/#","#","^sfx[church-bells.ogg](max=8, fade) ","/#","#","^image[eibenreith.png](landscape)","/#","\n","^Eibenreith erscheint nicht, wie ein Dorf auf einem Bild erscheint, auf einmal und zur Bewunderung geordnet, sondern in Bruchstücken.","\n","^Eine Frau mit einem dunklen Kopftuch hält mit einem Eimer in der Hand inne. Ein Bub hört auf, Gänse zu treiben, und lässt sie um seine Stiefel klagen. Zwei Männer vor einem Schuppen beenden im selben Augenblick ihr Gespräch, ohne einander anzusehen. Vorhänge rühren sich an Fenstern, hinter denen niemand zugibt zu stehen. Ein Schmiedeschild bewegt sich leicht in Luft, die du nicht fühlen kannst. Wasser läuft irgendwo unter Brettern, unter Stein, unter der Straße selbst, schnell, kalt und verborgen.","\n","^Die Häuser sind nicht arm, nicht eigentlich. Viele sind fest, weißgekalkt, geschindelt, erhalten mit der störrischen Anständigkeit von Menschen, die reparieren, was sie nicht ersetzen können. Und doch stört etwas in ihrer Anordnung das Auge. Sie wenden sich der Kirche zu, aber nicht ganz. Sie halten die Straße, aber lehnen sich von ihr weg. Sie lassen zwischen Hof, Zaun und Holzstoß schmale Durchgänge, in denen sich Schatten zu früh sammelt.","\n","^Die Kutsche wird langsamer.","\n","^Niemand läuft herbei, um sie zu begrüßen.","\n","^Niemand muss das. Die Nachricht ist bereits ins Dorf eingetreten, auf Wegen schneller als Bahn, Telegraph oder kaiserliches Siegel.","\n","^Du sitzt sehr gerade, während Eibenreith dich zum ersten Mal betrachtet.","\n",["ev","str","^__Schaue__: In die Gesichter am Straßenrand.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre__: Auf das Wasser unter der Straße.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Untersuche__: Die Kirche.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Warte__: Bis die Kutsche hält.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["^ ","#","^action:orientation ","/#","#","^optional ","/#","#","^key:l","/#","\n","^Die Gesichter verschwinden nicht, wenn du hinsiehst. Sie verändern nur ihre Begründung: Eine Frau prüft plötzlich ihren Eimer. Ein Bub entdeckt die Gänse neu. Ein Mann tut, als habe er schon immer zum Kirchtor gesehen. Das Dorf besitzt keine Bühne, aber jeder hier kennt seinen Auftritt.","\n",{"->":".^.^"},{"#f":5}],"c-1":["^ ","#","^action:orientation ","/#","#","^optional","/#","\n","^Unter den Rädern, unter Brettern und Steinen, unter der höflichen Behauptung einer Dorfstraße läuft Wasser. Es klingt nicht tief, aber schnell. Als hätte der Ort einen zweiten Atem, einen kalten, verborgenen, der nicht durch menschliche Münder geht.","\n",{"->":".^.^"},{"#f":5}],"c-2":["^ ","#","^action:orientation ","/#","#","^optional","/#","\n","^Der Turm ist nicht schlank genug, um in den Himmel zu zeigen. Er steht da wie eine Faust. Die kleinen Fenster geben wenig preis, und die Mauer des Kirchhofs wirkt weniger wie Einfriedung als wie eine alte Gewohnheit, sich gegen etwas zu stemmen.","\n",["ev",{"VAR?":"religion_stance"},"str","^devout_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Gerade das stört dich: nicht der Mangel an Schönheit, sondern der Mangel an Frieden.","\n",{"->":".^.^.^.13"},null]}],["ev",{"VAR?":"religion_stance"},"str","^josephinian_sceptic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Du siehst weniger Andacht als Institution: Stein, Besitz, Grenze, Verwaltung der Furcht.","\n",{"->":".^.^.^.13"},null]}],[{"->":".^.b"},{"b":["\n","^Die Kirche sieht nicht aus, als habe sie den älteren Dingen im Tal widersprochen. Eher, als habe sie gelernt, über ihnen zu stehen.","\n",{"->":".^.^.^.13"},null]}],"nop","\n",{"->":".^.^"},{"#f":5}],"c-3":["^ ","#","^action:social ","/#","#","^key:z","/#","\n",{"->":"village_exit_puzzle"},{"#f":5}],"#n":"dorfbeobachtung"}],null],null],"village_exit_puzzle":[["^Der Kutscher hält vor dem Wirtshaus oder vielleicht nur vor dem Gebäude, das in einem besseren Dorf eines gewesen wäre. Ein Knecht aus dem Dorf tritt aus dem Schatten des Tors. Viktor öffnet die Kutschentür von innen nicht sofort; der Kutscher steigt ab, um den Schlag zu öffnen. Der Knecht sieht auf dein Gepäck, dann auf deine Handschuhe, dann auf Viktor.","\n","^Wieder stellt die Welt eine Frage, ohne sie auszusprechen: Wer darf dir helfen, wer muss dir helfen, und wem erlaubst du, dabei wichtig zu wirken?","\n","ev","str","^__Warte__ · **Adel**: Bis der Kutscher den Schlag öffnet und Viktor zuerst aussteigt.","/str",{"VAR?":"birth_class"},"str","^noble","/str","==","/ev",{"*":".^.c-0","flg":21},"ev","str","^__Nicke__: Dem Kutscher knapp zu, nachdem Viktor dir geholfen hat.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Weise den Knecht an__: „Zuerst den kleineren Kasten.“","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Lächle__: Dem Kutscher zu freundlich zu.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Steige aus__: Zu früh, ehe alle Rollen verteilt sind.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Steige aus__ · **Unterschicht**: Allein, bevor jemand dir helfen kann.","/str",{"VAR?":"birth_class"},"str","^working","/str","==","/ev",{"*":".^.c-5","flg":21},{"c-0":["^ ","#","^action:social ","/#","#","^gated:noble ","/#","#","^key:z","/#","\n","#","^manners:excellent","/#","ev",{"VAR?":"class_confidence"},2,"+",{"VAR=":"class_confidence","re":true},"/ev","^Du wartest, bis der Kutscher den Schlag öffnet und Viktor zuerst aussteigt; erst dann reichst du Viktor die behandschuhte Hand.","\n","^Es geschieht langsam genug, dass alle Beteiligten ihre Rolle finden. Der Kutscher ist Dienst, Viktor ist Begleitung, der Knecht ist noch nicht wichtig genug, um dich zu berühren. Dein Fuß erreicht den Boden, als hätte die Straße sich dafür bereitgehalten.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["^ ","#","^action:social","/#","\n","#","^manners:good","/#","ev",{"VAR?":"viktor_trust"},1,"+",{"VAR=":"viktor_trust","re":true},"/ev","^Du lässt Viktor aussteigen, nimmst seine Hand beim Abtreten und dankst dem Kutscher erst danach mit einem knappen Blick.","\n","^Der Ablauf ist korrekt genug, um keine Geschichte zu erzeugen. In einem Dorf, das von Geschichten lebt, ist das ein kleiner Sieg.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["^ ","#","^action:social","/#","\n","#","^route:detective","/#","#","^manners:practical","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^Du gibst dem Knecht eine klare Anweisung, welches Gepäck zuerst abgeladen werden soll, bevor er danach fragen kann.","\n","^Er gehorcht sofort. Viktor registriert die Zweckmäßigkeit. Der Kutscher registriert die Ungewöhnlichkeit. Eine Dame, die Gepäckreihenfolgen kennt, ist entweder sehr erfahren, sehr nervös oder beides.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-3":["^ ","#","^action:social","/#","\n","#","^route:lover","/#","#","^manners:too_warm","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^Du bietest dem Kutscher ein sichtbares Lächeln und ein zu freundliches „Danke“ an.","\n","^Der Mann senkt den Blick, verwirrt und geschmeichelt. Viktor wird stiller. Freundlichkeit über Standesgrenzen hinweg kann Güte sein, Taktik oder Unachtsamkeit. Auf dem Dorf wird niemand lange brauchen, eine vierte Möglichkeit zu erfinden.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-4":["^ ","#","^action:movement","/#","\n","#","^route:careless","/#","#","^manners:awkward","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","ev","str","^dependence","/str","/ev",{"VAR=":"viktor_relation","re":true},"^Du steigst zu früh aus, trittst beinahe in den Straßenschlamm und fängst dich an Viktors Arm.","\n","^Er hält dich ohne sichtbare Anstrengung fest. Für einen Augenblick sieht das Dorf genau das, was es am liebsten sieht: eine Dame, gerettet durch einen Mann. Es ist lächerlich nützlich und nützlich lächerlich.","\n",{"->":".^.^.g-0"},{"#f":5}],"c-5":["^ ","#","^action:movement ","/#","#","^gated:working","/#","\n","#","^manners:fauxpas","/#","ev",{"VAR?":"class_confidence"},1,"-",{"VAR=":"class_confidence","re":true},"/ev","^Du steigst allein aus, nimmst deinen Rock hoch genug, um den Schlamm zu sehen, und sagst dem Knecht, er solle mit dem schweren Koffer vorsichtig sein.","\n","^Es ist praktisch, schnell und völlig falsch. Nicht, weil du unrecht hast, sondern weil du recht hast wie jemand, der selbst schon getragen hat. Der Knecht erkennt es. Viktor auch.","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["^Neben dir senkt Viktor die Stimme.","\n","^„Vergessen Sie nicht: In Hohenreith wird jede Höflichkeit etwas bedeuten. Hier wird es jedes Schweigen tun.“","\n","ev","str","^__Antworte__: „Dann werden wir bereits empfangen.“","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Antworte__: „Sie lassen es klingen, als stünde das Dorf über dem Grafen.“","/str","/ev",{"*":".^.c-7","flg":20},"ev","str","^__Antworte__: „Wie glücklich, dass ich mehrere Arten des Schweigens eingepackt habe.“","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Antworte__: „Ich mag es nicht, von Leuten beobachtet zu werden, die sich nicht vorstellen.“","/str","/ev",{"*":".^.c-9","flg":20},"ev","str","^__Antworte__: „Wenn Amalia ihr ganzes Leben unter diesem Blick gelebt hat, beginne ich zu verstehen, weshalb man nach Geistern sandte.“","/str","/ev",{"*":".^.c-10","flg":20},{"c-6":["^ ","#","^action:conversation","/#","\n","#","^route:detective","/#","ev",{"VAR?":"detective"},1,"+",{"VAR=":"detective","re":true},"/ev","^„Dann werden wir bereits empfangen.“","\n","^„Ja“, sagt er. „Und geprüft.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-7":["^ ","#","^action:conversation","/#","\n","#","^route:eccentric","/#","ev",{"VAR?":"eccentric"},1,"+",{"VAR=":"eccentric","re":true},"/ev","^„Sie lassen es klingen, als stünde das Dorf über dem Grafen.“","\n","^„Nein“, sagt Viktor. „Nur, als hätte es vielleicht mehr als einen überlebt.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-8":["^ ","#","^action:conversation","/#","\n","#","^route:lover","/#","ev",{"VAR?":"lover"},1,"+",{"VAR=":"lover","re":true},"/ev","^„Wie glücklich, dass ich mehrere Arten des Schweigens eingepackt habe.“","\n","^Sein Mund bewegt sich beinahe. „Verwenden Sie zuerst das schlichteste.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-9":["^ ","#","^action:conversation","/#","\n","#","^route:careless","/#","ev",{"VAR?":"careless"},1,"+",{"VAR=":"careless","re":true},"/ev","^„Ich mag es nicht, von Leuten beobachtet zu werden, die sich nicht vorstellen.“","\n","^„Das“, sagt er, „wird sich heute kaum bessern.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-10":["^ ","#","^action:conversation","/#","\n","#","^route:sapphic","/#","ev",{"VAR?":"sapphic"},1,"+",{"VAR=":"sapphic","re":true},"/ev","^„Wenn Amalia ihr ganzes Leben unter diesem Blick gelebt hat, beginne ich zu verstehen, weshalb man nach Geistern sandte.“","\n","^Viktor sieht dich an, doch welche Antwort er auch erwägt, er behält sie hinter den Zähnen.","\n",{"->":".^.^.^.g-1"},{"#f":5}]}],"g-1":["^Die Pferde ziehen die Kutsche an der Kirchhofmauer vorbei. Darüber, auf dem alten Putz neben dem Tor, blickt eine verblasste gemalte Frau unter einem abblätternden blauen Mantel herab. Ihre Hände sind zum Gebet gefaltet. Ihre Augen, vom Wetter beschädigt, zeigen nicht mehr in dieselbe Richtung.","\n",["ev",{"VAR?":"religion_stance"},"str","^devout_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Für einen Atemzug stört dich nicht, dass das Bild alt ist. Es stört dich, dass es nicht mehr ganz heilig wirkt.","\n",{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"religion_stance"},"str","^josephinian_sceptic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Für einen Atemzug wirkt das Bild weniger wie Andacht als wie Verwaltung: ein aufgemaltes Siegel über etwas, das man nicht fortschaffen konnte.","\n",{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"religion_stance"},"str","^wounded_catholic","/str","==","/ev",{"->":".^.b","c":true},{"b":["\n","^Für einen Atemzug trifft dich das gemalte Gesicht an einer Stelle, die du lieber Schuld als Erinnerung nennen würdest.","\n",{"->":".^.^.^.6"},null]}],[{"->":".^.b"},{"b":["\n","^Für einen Atemzug, als die Räder über ein verborgenes Wasserrinnsal fahren, wirkt das gemalte Gesicht weniger wie die Heilige Mutter als wie eine Maske, die etwas aufgesetzt wurde, das länger gewartet hatte.","\n",{"->":".^.^.^.6"},null]}],"nop","\n","^Dann fährt die Kutsche in das eigentliche Dorf hinein, und die Straße biegt zu der unsichtbaren Höhe, auf der Jagdhaus Hohenreith über Eibenreith unter seinem neueren Namen steht.","\n","#","^score[Du hast Eibenreith erreicht.]","/#","end",null]}],null],"global decl":["ev","str","^unset","/str",{"VAR=":"birth_class"},"str","^","/str",{"VAR=":"title_part"},"str","^","/str",{"VAR=":"given_names"},"str","^","/str",{"VAR=":"common_name"},"str","^","/str",{"VAR=":"surname"},"str","^unset","/str",{"VAR=":"religion_stance"},"str","^unset","/str",{"VAR=":"supernatural_belief"},"str","^unset","/str",{"VAR=":"supernatural_senses"},"str","^unset","/str",{"VAR=":"body_detail"},"str","^unset","/str",{"VAR=":"hair_colour"},"str","^unset","/str",{"VAR=":"hairstyle"},"str","^unset","/str",{"VAR=":"complexion_detail"},"str","^unset","/str",{"VAR=":"face_detail"},"str","^unset","/str",{"VAR=":"outfit_detail"},"str","^unset","/str",{"VAR=":"baggage_style"},"str","^unset","/str",{"VAR=":"viktor_relation"},false,{"VAR=":"tut_choice_intro"},false,{"VAR=":"tut_optional_intro"},false,{"VAR=":"tut_character_intro"},false,{"VAR=":"tut_dialog_intro"},false,{"VAR=":"tut_manners_intro"},false,{"VAR=":"tut_gated_intro"},0,{"VAR=":"lover"},0,{"VAR=":"sapphic"},0,{"VAR=":"detective"},0,{"VAR=":"careless"},0,{"VAR=":"eccentric"},0,{"VAR=":"class_confidence"},0,{"VAR=":"medium_reputation"},0,{"VAR=":"court_loyalty"},0,{"VAR=":"viktor_trust"},0,{"VAR=":"viktor_suspicion"},0,{"VAR=":"supernatural_exposure"},"/ev","end",null]}],"listDefs":{}}
\ No newline at end of file
+{"inkVersion":21,"root":[["\n","\n","\n","\n","\n","\n","\n","\n",{"->":"start_game"},["done",{"#n":"g-0"}],null],"done",{"route":[{"temp=":"value"},"ev",{"VAR?":"value"},"/ev","~ret",null],"route_inc":[{"temp=":"value"},"ev",{"VAR?":"value"},1,"+",{"temp=":"value","re":true},"/ev",null],"route_inc_by":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"+",{"temp=":"value","re":true},"/ev",null],"route_dec":[{"temp=":"value"},"ev",{"VAR?":"value"},1,"-",{"temp=":"value","re":true},"/ev",null],"route_dec_by":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"-",{"temp=":"value","re":true},"/ev",null],"route_move_to":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"amount"},"/ev",{"temp=":"value","re":true},null],"route_clear":[{"temp=":"value"},"ev",0,"/ev",{"temp=":"value","re":true},null],"route_is":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"==","/ev","~ret",null],"route_before":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"<=","/ev","~ret",null],"route_reached":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},">=","/ev","~ret",null],"route_between":[{"temp=":"max"},{"temp=":"min"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"min"},">=",{"VAR?":"value"},{"VAR?":"max"},"<=","&&","/ev","~ret",null],"route_min":[{"temp=":"b"},{"temp=":"a"},["ev",{"VAR?":"a"},{"VAR?":"b"},"<=","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"a"},"/ev","~ret",{"->":".^.^.^.4"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"b"},"/ev","~ret",{"->":".^.^.^.4"},null]}],"nop","\n",null],"route_max":[{"temp=":"b"},{"temp=":"a"},["ev",{"VAR?":"a"},{"VAR?":"b"},">=","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"a"},"/ev","~ret",{"->":".^.^.^.4"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"b"},"/ev","~ret",{"->":".^.^.^.4"},null]}],"nop","\n",null],"route_diff":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-","/ev","~ret",null],"route_diff_reached":[{"temp=":"threshold"},{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-",{"VAR?":"threshold"},">=","/ev","~ret",null],"route_diff_before":[{"temp=":"threshold"},{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-",{"VAR?":"threshold"},"<=","/ev","~ret",null],"route_diff_between":[{"temp=":"max"},{"temp=":"min"},{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-","/ev",{"temp=":"d"},"ev",{"VAR?":"d"},{"VAR?":"min"},">=",{"VAR?":"d"},{"VAR?":"max"},"<=","&&","/ev","~ret",null],"route_total":["ev",{"VAR?":"route_composure"},{"VAR?":"route_detective"},"+",{"VAR?":"route_lover"},"+",{"VAR?":"route_sapphic"},"+",{"VAR?":"route_careless"},"+",{"VAR?":"route_eccentric"},"+","/ev","~ret",null],"route_share_reached":[{"temp=":"denominator"},{"temp=":"numerator"},{"temp=":"value"},"ev",{"f()":"route_total"},"/ev",{"temp=":"total"},"\n","ev",{"VAR?":"total"},0,">",{"VAR?":"value"},{"VAR?":"denominator"},"*",{"VAR?":"total"},{"VAR?":"numerator"},"*",">=","&&","/ev","~ret",null],"route_share_before":[{"temp=":"denominator"},{"temp=":"numerator"},{"temp=":"value"},"ev",{"f()":"route_total"},"/ev",{"temp=":"total"},"\n","ev",{"VAR?":"total"},0,">",{"VAR?":"value"},{"VAR?":"denominator"},"*",{"VAR?":"total"},{"VAR?":"numerator"},"*","<","&&","/ev","~ret",null],"route_high":[{"temp=":"value"},"ev",{"VAR?":"value"},9,10,{"f()":"route_share_reached"},"/ev","~ret","\n",null],"route_up":[{"temp=":"value"},"ev",{"VAR?":"value"},7,10,{"f()":"route_share_reached"},"/ev","~ret","\n",null],"route_down":[{"temp=":"value"},"ev",{"VAR?":"value"},3,10,{"f()":"route_share_before"},"/ev","~ret","\n",null],"route_low":[{"temp=":"value"},"ev",{"VAR?":"value"},1,10,{"f()":"route_share_before"},"/ev","~ret","\n",null],"matrix_total":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"+","/ev","~ret",null],"matrix_share_reached":[{"temp=":"denominator"},{"temp=":"numerator"},{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},{"f()":"matrix_total"},"/ev",{"temp=":"total"},"\n","ev",{"VAR?":"total"},0,">",{"VAR?":"positive"},{"VAR?":"denominator"},"*",{"VAR?":"total"},{"VAR?":"numerator"},"*",">=","&&","/ev","~ret",null],"matrix_high":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},9,10,{"f()":"matrix_share_reached"},"/ev","~ret","\n",null],"matrix_up":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},7,10,{"f()":"matrix_share_reached"},"/ev","~ret","\n",null],"matrix_down":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"negative"},{"VAR?":"positive"},7,10,{"f()":"matrix_share_reached"},"/ev","~ret","\n",null],"matrix_low":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"negative"},{"VAR?":"positive"},9,10,{"f()":"matrix_share_reached"},"/ev","~ret","\n",null],"axis_positive":[{"temp=":"axis"},["ev",{"VAR?":"axis"},{"VAR?":"order_axis"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"route_composure"},"/ev","~ret",{"->":".^.^.^.5"},null]}],["ev",{"VAR?":"axis"},{"VAR?":"inquiry_axis"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"route_detective"},"/ev","~ret",{"->":".^.^.^.5"},null]}],["ev",{"VAR?":"axis"},{"VAR?":"allure_axis"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"route_lover"},{"VAR?":"route_sapphic"},"+","/ev","~ret",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","ev",0,"/ev","~ret",{"->":".^.^.^.5"},null]}],"nop","\n",null],"axis_negative":[{"temp=":"axis"},["ev",{"VAR?":"axis"},{"VAR?":"order_axis"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"route_eccentric"},"/ev","~ret",{"->":".^.^.^.5"},null]}],["ev",{"VAR?":"axis"},{"VAR?":"inquiry_axis"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"route_careless"},"/ev","~ret",{"->":".^.^.^.5"},null]}],["ev",{"VAR?":"axis"},{"VAR?":"allure_axis"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"route_composure"},"/ev","~ret",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","ev",0,"/ev","~ret",{"->":".^.^.^.5"},null]}],"nop","\n",null],"axis_high":[{"temp=":"axis"},"ev",{"VAR?":"axis"},{"f()":"axis_positive"},{"VAR?":"axis"},{"f()":"axis_negative"},{"f()":"matrix_high"},"/ev","~ret","\n",null],"axis_up":[{"temp=":"axis"},"ev",{"VAR?":"axis"},{"f()":"axis_positive"},{"VAR?":"axis"},{"f()":"axis_negative"},{"f()":"matrix_up"},"/ev","~ret","\n",null],"axis_down":[{"temp=":"axis"},"ev",{"VAR?":"axis"},{"f()":"axis_positive"},{"VAR?":"axis"},{"f()":"axis_negative"},{"f()":"matrix_down"},"/ev","~ret","\n",null],"axis_low":[{"temp=":"axis"},"ev",{"VAR?":"axis"},{"f()":"axis_positive"},{"VAR?":"axis"},{"f()":"axis_negative"},{"f()":"matrix_low"},"/ev","~ret","\n",null],"day":[{"temp=":"value"},"ev",{"VAR?":"current_day"},{"VAR?":"value"},"==","/ev","~ret",null],"day_move_to":[{"temp=":"value"},"ev",{"VAR?":"value"},"/ev",{"VAR=":"current_day","re":true},null],"day_inc":["ev",{"VAR?":"current_day"},1,"+",{"VAR=":"current_day","re":true},"/ev",null],"time":[{"temp=":"slot"},"ev",{"VAR?":"current_slot"},{"VAR?":"slot"},"==","/ev","~ret",null],"time_move_to":[{"temp=":"slot"},"ev",{"VAR?":"slot"},"/ev",{"VAR=":"current_slot","re":true},null],"time_is":[{"temp=":"slot"},"ev",{"VAR?":"current_slot"},{"VAR?":"slot"},"==","/ev","~ret",null],"time_before":[{"temp=":"slot"},"ev",{"VAR?":"current_slot"},{"VAR?":"slot"},"<","/ev","~ret",null],"time_reached":[{"temp=":"slot"},"ev",{"VAR?":"current_slot"},{"VAR?":"slot"},">=","/ev","~ret",null],"time_between":[{"temp=":"last"},{"temp=":"first"},"ev",{"VAR?":"current_slot"},{"VAR?":"first"},">=",{"VAR?":"current_slot"},{"VAR?":"last"},"<=","&&","/ev","~ret",null],"start_game":["ev",{"VAR?":"mid_morning"},"/ev",{"->":"run_slot"},null],"run_slot":[{"temp=":"slot"},["ev",{"VAR?":"slot"},{"VAR?":"mid_morning"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_mid_morning_episode"},"/ev",{"->":"run_episode"},{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"noon"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_noon_episode"},"/ev",{"->":"run_episode"},{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"afternoon"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_afternoon_episode"},"/ev",{"->":"run_episode"},{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"evening"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_evening_episode"},"/ev",{"->":"run_episode"},{"->":".^.^.^.6"},null]}],[{"->":".^.b"},{"b":["\n","end",{"->":".^.^.^.6"},null]}],"nop","\n",null],"slot_episode":[{"temp=":"episode_to_run"},{"temp=":"slot"},["ev",{"VAR?":"slot"},{"VAR?":"early_morning"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_early_morning_episode"},{"VAR?":"episode_to_run"},"==","/ev","~ret",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"mid_morning"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_mid_morning_episode"},{"VAR?":"episode_to_run"},"==","/ev","~ret",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"noon"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_noon_episode"},{"VAR?":"episode_to_run"},"==","/ev","~ret",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"afternoon"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_afternoon_episode"},{"VAR?":"episode_to_run"},"==","/ev","~ret",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"evening"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_evening_episode"},{"VAR?":"episode_to_run"},"==","/ev","~ret",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"early_night"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_early_night_episode"},{"VAR?":"episode_to_run"},"==","/ev","~ret",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"late_night"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"slot_late_night_episode"},{"VAR?":"episode_to_run"},"==","/ev","~ret",{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","ev",false,"/ev","~ret",{"->":".^.^.^.10"},null]}],"nop","\n",null],"slot_schedule":[{"temp=":"episode_to_run"},{"temp=":"slot"},["ev",{"VAR?":"slot"},{"VAR?":"early_morning"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_to_run"},"/ev",{"VAR=":"slot_early_morning_episode","re":true},{"->":".^.^.^.9"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"mid_morning"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_to_run"},"/ev",{"VAR=":"slot_mid_morning_episode","re":true},{"->":".^.^.^.9"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"noon"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_to_run"},"/ev",{"VAR=":"slot_noon_episode","re":true},{"->":".^.^.^.9"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"afternoon"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_to_run"},"/ev",{"VAR=":"slot_afternoon_episode","re":true},{"->":".^.^.^.9"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"evening"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_to_run"},"/ev",{"VAR=":"slot_evening_episode","re":true},{"->":".^.^.^.9"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"early_night"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_to_run"},"/ev",{"VAR=":"slot_early_night_episode","re":true},{"->":".^.^.^.9"},null]}],["ev",{"VAR?":"slot"},{"VAR?":"late_night"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_to_run"},"/ev",{"VAR=":"slot_late_night_episode","re":true},{"->":".^.^.^.9"},null]}],"nop","\n",null],"run_episode":[{"temp=":"episode_to_run"},["ev",{"VAR?":"episode_to_run"},{"VAR?":"episode_train_intro"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_train_intro"},{"VAR?":"mid_morning"},{"^->":"train_intro_start"},{"^->":"train_intro_end"},{"^->":"train_intro_episode_bucket"},"/ev",{"->t->":"enter_episode"},{"->":"train_intro_start"},{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"episode_to_run"},{"VAR?":"episode_station_midday"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_station_midday"},{"VAR?":"noon"},{"^->":"station_midday"},{"^->":"station_midday_end"},{"^->":"station_midday_episode_bucket"},"/ev",{"->t->":"enter_episode"},{"->":"station_midday"},{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"episode_to_run"},{"VAR?":"episode_carriage_ride"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"episode_carriage_ride"},{"VAR?":"afternoon"},{"^->":"carriage_ride"},{"^->":"carriage_ride_end"},{"^->":"carriage_ride_episode_bucket"},"/ev",{"->t->":"enter_episode"},{"->":"carriage_ride"},{"->":".^.^.^.6"},null]}],["ev",{"VAR?":"episode_to_run"},{"VAR?":"episode_first_dinner"},"==","/ev",{"->":".^.b","c":true},{"b":["\n",{"->":"pre_dinner_transition"},{"->":".^.^.^.6"},null]}],[{"->":".^.b"},{"b":["\n","end",{"->":".^.^.^.6"},null]}],"nop","\n",null],"advance_to_slot":[{"temp=":"slot"},"ev",{"VAR?":"slot"},"/ev",{"VAR=":"current_slot","re":true},"ev",{"VAR?":"slot"},"/ev",{"->":"run_slot"},null],"episode":[{"temp=":"value"},"ev",{"VAR?":"active_episode"},{"VAR?":"value"},"==","/ev","~ret",null],"episode_start":[{"temp=":"slot"},{"temp=":"value"},"ev",{"VAR?":"value"},"/ev",{"VAR=":"active_episode","re":true},"ev",{"VAR?":"slot"},"/ev",{"VAR=":"current_slot","re":true},"ev","str","^normal","/str","/ev",{"VAR=":"last_slot_outcome","re":true},null],"episode_move_to":[{"temp=":"value"},"ev",{"VAR?":"value"},"/ev",{"VAR=":"active_episode","re":true},null],"episode_end":[{"temp=":"outcome"},"ev",{"VAR?":"no_episode"},"/ev",{"VAR=":"active_episode","re":true},"ev",{"^->":"empty_bucket"},"/ev",{"VAR=":"current_episode_bucket","re":true},"ev",{"^->":"empty_bucket"},"/ev",{"VAR=":"current_episode_start","re":true},"ev",{"^->":"empty_bucket"},"/ev",{"VAR=":"current_episode_end","re":true},"ev",{"VAR?":"outcome"},"/ev",{"VAR=":"last_slot_outcome","re":true},null],"episode_active":[{"temp=":"value"},"ev",{"VAR?":"active_episode"},{"VAR?":"value"},"==","/ev","~ret",null],"outcome_is":[{"temp=":"value"},"ev",{"VAR?":"last_slot_outcome"},{"VAR?":"value"},"==","/ev","~ret",null],"outcome_move_to":[{"temp=":"value"},"ev",{"VAR?":"value"},"/ev",{"VAR=":"last_slot_outcome","re":true},null],"meal":[{"temp=":"value"},"ev",{"VAR?":"meal_plan"},{"VAR?":"value"},"==","/ev","~ret",null],"meal_choose":[{"temp=":"value"},"ev",{"VAR?":"value"},"/ev",{"VAR=":"meal_plan","re":true},null],"meal_is":[{"temp=":"value"},"ev",{"VAR?":"meal_plan"},{"VAR?":"value"},"==","/ev","~ret",null],"meal_clear":["ev",{"VAR?":"meal_unset"},"/ev",{"VAR=":"meal_plan","re":true},null],"loc":[{"temp=":"value"},"ev",{"VAR?":"current_location"},{"VAR?":"value"},"==","/ev","~ret",null],"loc_move_to":[{"temp=":"value"},"ev",{"VAR?":"value"},"/ev",{"VAR=":"current_location","re":true},"ev",{"VAR?":"value"},{"f()":"move_companions_to"},"pop","/ev","\n",null],"loc_is":[{"temp=":"value"},"ev",{"VAR?":"current_location"},{"VAR?":"value"},"==","/ev","~ret",null],"accompanied_by":[{"temp=":"character"},"ev",{"VAR?":"companions"},{"VAR?":"character"},"?","/ev","~ret",null],"companion_join":[{"temp=":"character"},"ev",{"VAR?":"companions"},{"VAR?":"character"},"+",{"VAR=":"companions","re":true},"/ev",null],"companion_leave":[{"temp=":"character"},"ev",{"VAR?":"companions"},{"VAR?":"character"},"-",{"VAR=":"companions","re":true},"/ev",null],"present":[{"temp=":"character"},["ev",{"VAR?":"character"},{"VAR?":"viktor"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"viktor_location"},{"VAR?":"current_location"},"==","/ev","~ret",{"->":".^.^.^.3"},null]}],[{"->":".^.b"},{"b":["\n","ev",false,"/ev","~ret",{"->":".^.^.^.3"},null]}],"nop","\n",null],"character_move_to":[{"temp=":"location"},{"temp=":"character"},["ev",{"VAR?":"character"},{"VAR?":"viktor"},"==","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"location"},"/ev",{"VAR=":"viktor_location","re":true},{"->":".^.^.^.3"},null]}],"nop","\n",null],"move_companions_to":[{"temp=":"location"},["ev",{"VAR?":"viktor"},{"f()":"accompanied_by"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"location"},"/ev",{"VAR=":"viktor_location","re":true},{"->":".^.^.^.2"},null]}],"nop","\n",null],"enter_episode":[{"temp=":"episode_bucket"},{"temp=":"end_bucket"},{"temp=":"start_bucket"},{"temp=":"slot"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"slot"},{"f()":"episode_start"},"pop","/ev","\n","ev",{"VAR?":"start_bucket"},"/ev",{"VAR=":"current_episode_start","re":true},"ev",{"VAR?":"end_bucket"},"/ev",{"VAR=":"current_episode_end","re":true},"ev",{"VAR?":"episode_bucket"},"/ev",{"VAR=":"current_episode_bucket","re":true},"ev","void","/ev","->->",null],"enter_room":[{"temp=":"moment_bucket"},{"temp=":"exit_bucket"},{"temp=":"look_bucket"},{"temp=":"entry_bucket"},{"temp=":"location"},"ev",{"VAR?":"location"},{"f()":"loc_move_to"},"pop","/ev","\n","ev",{"VAR?":"entry_bucket"},"/ev",{"VAR=":"current_room_entry_bucket","re":true},"ev",{"VAR?":"moment_bucket"},"/ev",{"VAR=":"current_moment_bucket","re":true},"ev",{"VAR?":"look_bucket"},"/ev",{"VAR=":"current_room_look_bucket","re":true},"ev",{"VAR?":"exit_bucket"},"/ev",{"VAR=":"current_room_exit_bucket","re":true},"ev","void","/ev","->->",null],"room_seen_on_enter":["ev",{"VAR?":"current_room_entry_bucket"},"turns",0,">=","/ev","~ret","\n",null],"state_pop":[{"temp=":"list"},"ev",{"VAR?":"list"},"LIST_MIN","/ev",{"temp=":"x"},"\n","ev",{"VAR?":"list"},{"VAR?":"x"},"-",{"temp=":"list","re":true},"/ev","ev",{"VAR?":"x"},"/ev","~ret",null],"state_reached":[{"temp=":"state"},"ev",{"VAR?":"story_state"},{"VAR?":"state"},"L^","LIST_COUNT",0,">","/ev","~ret","\n",null],"state_before":[{"temp=":"state"},"ev",{"VAR?":"state"},{"f()":"state_reached"},"!","/ev","~ret","\n",null],"state_between":[{"temp=":"upper_state"},{"temp=":"lower_state"},"ev",{"VAR?":"lower_state"},{"f()":"state_reached"},{"VAR?":"upper_state"},{"f()":"state_reached"},"!","&&","/ev","~ret","\n",null],"state_is":[{"temp=":"state"},"ev",{"VAR?":"state"},"LIST_ALL","/ev",{"temp=":"chain"},"\n","ev",{"VAR?":"story_state"},{"VAR?":"chain"},"L^","/ev",{"temp=":"reached_in_chain"},["ev",{"VAR?":"reached_in_chain"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"reached_in_chain"},"LIST_MAX",{"VAR?":"state"},"==","/ev","~ret","\n",{"->":".^.^.^.15"},null]}],[{"->":".^.b"},{"b":["\n","ev",false,"/ev","~ret",{"->":".^.^.^.15"},null]}],"nop","\n",null],"state_current":[{"temp=":"state"},"ev",{"VAR?":"state"},"LIST_ALL","/ev",{"temp=":"chain"},"\n","ev",{"VAR?":"story_state"},{"VAR?":"chain"},"L^","/ev",{"temp=":"reached_in_chain"},["ev",{"VAR?":"reached_in_chain"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"reached_in_chain"},"LIST_MAX","/ev","~ret","\n",{"->":".^.^.^.15"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"list":{}},"/ev","~ret",{"->":".^.^.^.15"},null]}],"nop","\n",null],"state_reach":[{"temp=":"states_to_set"},"ev",{"^var":"states_to_set","ci":-1},{"f()":"state_pop"},"/ev",{"temp=":"x"},"\n",["ev",{"VAR?":"x"},"!","/ev",{"->":".^.b","c":true},{"b":["\n","ev",false,"/ev","~ret",{"->":".^.^.^.10"},null]}],["ev",{"VAR?":"x"},{"f()":"state_reached"},"!","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"x"},"LIST_ALL","/ev",{"temp=":"chain"},"\n","ev",{"VAR?":"chain"},{"VAR?":"chain"},"LIST_MIN",{"VAR?":"x"},"range","/ev",{"temp=":"states_gained"},"\n","ev",{"VAR?":"story_state"},{"VAR?":"states_gained"},"+",{"VAR=":"story_state","re":true},"/ev","ev",{"VAR?":"states_to_set"},{"f()":".^.^.^"},"pop","/ev","\n","ev",true,"/ev","~ret",{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","ev",false,{"VAR?":"states_to_set"},{"f()":".^.^.^"},"||","/ev","~ret","\n",{"->":".^.^.^.10"},null]}],"nop","\n",null],"has":[{"temp=":"facts"},"ev",{"VAR?":"story_state"},{"VAR?":"facts"},"?","/ev","~ret",null],"lacks":[{"temp=":"facts"},"ev",{"VAR?":"facts"},{"f()":"has"},"!","/ev","~ret","\n",null],"mark":[{"temp=":"facts_to_set"},"ev",{"VAR?":"story_state"},{"VAR?":"facts_to_set"},"+",{"VAR=":"story_state","re":true},"/ev","ev",true,"/ev","~ret",null],"state_move_to":[{"temp=":"state"},"ev",{"VAR?":"state"},{"f()":"state_reach"},"pop","/ev","\n",null],"state_clear":[{"temp=":"state"},"ev",{"VAR?":"story_state"},{"VAR?":"state"},"LIST_ALL","-",{"VAR=":"story_state","re":true},"/ev","\n",null],"state_clear_all":["ev",{"list":{}},"/ev",{"VAR=":"story_state","re":true},null],"rel":[{"temp=":"value"},"ev",{"VAR?":"value"},"/ev","~ret",null],"rel_inc":[{"temp=":"value"},"ev",{"VAR?":"value"},1,"+",{"temp=":"value","re":true},"/ev",null],"rel_inc_by":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"+",{"temp=":"value","re":true},"/ev",null],"rel_dec":[{"temp=":"value"},"ev",{"VAR?":"value"},1,"-",{"temp=":"value","re":true},"/ev",null],"rel_dec_by":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"-",{"temp=":"value","re":true},"/ev",null],"rel_move_to":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"amount"},"/ev",{"temp=":"value","re":true},null],"rel_clear":[{"temp=":"value"},"ev",0,"/ev",{"temp=":"value","re":true},null],"rel_is":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"==","/ev","~ret",null],"rel_before":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},"<=","/ev","~ret",null],"rel_reached":[{"temp=":"amount"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"amount"},">=","/ev","~ret",null],"rel_between":[{"temp=":"max"},{"temp=":"min"},{"temp=":"value"},"ev",{"VAR?":"value"},{"VAR?":"min"},">=",{"VAR?":"value"},{"VAR?":"max"},"<=","&&","/ev","~ret",null],"rel_min":[{"temp=":"b"},{"temp=":"a"},["ev",{"VAR?":"a"},{"VAR?":"b"},"<=","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"a"},"/ev","~ret",{"->":".^.^.^.4"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"b"},"/ev","~ret",{"->":".^.^.^.4"},null]}],"nop","\n",null],"rel_max":[{"temp=":"b"},{"temp=":"a"},["ev",{"VAR?":"a"},{"VAR?":"b"},">=","/ev",{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"a"},"/ev","~ret",{"->":".^.^.^.4"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"b"},"/ev","~ret",{"->":".^.^.^.4"},null]}],"nop","\n",null],"rel_diff":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-","/ev","~ret",null],"rel_diff_reached":[{"temp=":"threshold"},{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-",{"VAR?":"threshold"},">=","/ev","~ret",null],"rel_diff_before":[{"temp=":"threshold"},{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-",{"VAR?":"threshold"},"<=","/ev","~ret",null],"rel_diff_between":[{"temp=":"max"},{"temp=":"min"},{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},"-","/ev",{"temp=":"d"},"ev",{"VAR?":"d"},{"VAR?":"min"},">=",{"VAR?":"d"},{"VAR?":"max"},"<=","&&","/ev","~ret",null],"rel_share_reached":[{"temp=":"denominator"},{"temp=":"numerator"},{"temp=":"total"},{"temp=":"value"},"ev",{"VAR?":"total"},0,">",{"VAR?":"value"},{"VAR?":"denominator"},"*",{"VAR?":"total"},{"VAR?":"numerator"},"*",">=","&&","/ev","~ret",null],"rel_high":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},{"f()":"matrix_high"},"/ev","~ret","\n",null],"rel_up":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},{"f()":"matrix_up"},"/ev","~ret","\n",null],"rel_down":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},{"f()":"matrix_down"},"/ev","~ret","\n",null],"rel_low":[{"temp=":"negative"},{"temp=":"positive"},"ev",{"VAR?":"positive"},{"VAR?":"negative"},{"f()":"matrix_low"},"/ev","~ret","\n",null],"provide_choices":[["ev",{"f()":"room_seen_on_enter"},"/ev",{"->":".^.b","c":true},{"b":["\n","thread",{"->":"current_moment_bucket","var":true},"thread",{"->":"current_room_look_bucket","var":true},{"->":".^.^.^.2"},null]}],[{"->":".^.b"},{"b":["\n","thread",{"->":"current_room_entry_bucket","var":true},"thread",{"->":"current_moment_bucket","var":true},{"->":".^.^.^.2"},null]}],"nop","\n","thread",{"->":"current_room_exit_bucket","var":true},"thread",{"->":"current_episode_bucket","var":true},"thread",{"->":"current_game_bucket","var":true},"done",null],"empty_bucket":["done",{"#f":3}],"game_bucket":["done",{"#f":3}],"train_intro_start":["ev",{"VAR?":"loc_train_compartment"},{"f()":"loc_move_to"},"pop","/ev","\n","ev",{"VAR?":"viktor"},{"VAR?":"loc_train_compartment"},{"f()":"character_move_to"},"pop","/ev","\n","ev",{"VAR?":"viktor"},{"f()":"companion_join"},"pop","/ev","\n","^Der Zug hat Wien hinter sich gelassen, doch du hast Wien noch nicht hinter dir gelassen. ","#","^chapter[Das Abteil] ","/#","#","^music[Kaiserpunk Waltz.mp3](crossfade, loop, lead=8)","/#","\n","^Es sitzt dir im Nacken, wie die Anspannung, die dein Auftrag mit sich bringt. Es klebt dir auf der Haut, wie der Kohlerauch des Bahnhofs, von dem aus du es verlassen hast. Es begleitet dich in den Schriftstücken, die aus der geöffneten Ledertasche am Fenstertischchen des Coupés ragen. ","#","^gloss[Coupé](Abgeschlossenes Abteil der ersten Klasse. Polster, Gepäcknetz und das stille Versprechen, dass die Mitreisenden planmäßig ausgewählt wurden.) Und es sitzt dir gegenüber, in der Form von Rittmeister Viktor Alois Nowak, der dich seit der Abreise noch kein einziges Mal direkt angesehen hat. ","/#","#","^gloss[Rittmeister](Kavalleriedienstgrad der k.u.k. Armee, etwa einem Hauptmann entsprechend.) Du spürst seine urteilenden Blicke trotzdem auf dir ruhen.","/#","\n","^Für alle Fremden ist er nun dein Sekretär. Er öffnet Türen, trägt Gepäck, ordnet Papiere und sorgt dafür, dass eine Frau deines Standes nicht allein reist. Zivil gekleidet, korrekt genug, um nicht aufzufallen. Laut der Kabinettskanzlei Seiner Majestät ist er dafür verantwortlich, für deine Sicherheit während des Auftrages zu sorgen. ","#","^gloss[Kabinettskanzlei](Die Kanzlei für Angelegenheiten, die im Namen des Kaisers erledigt werden. Je offizieller das Schreiben, desto sorgfältiger meidet es den Namen des Verfassers.) Als er dir heute Morgen zugeteilt wurde, wirkte er nicht besonders erfreut über seine neuen Befehle.","/#","\n",{"->":"train_compartment"},{"#f":3}],"train_intro_episode_bucket":[["ev","str","^__Frage__: Ob ein Auftrag erst am Ziel beginnt.","/str",{"VAR?":"viktor"},{"f()":"present"},{"VAR?":"loc_train_dining_car"},{"f()":"loc"},"&&","/ev",{"*":".^.c-0","flg":21},"ev","str","^__Bemerke__: Wie rasch ein Tisch die Welt sortiert.","/str",{"VAR?":"viktor"},{"f()":"present"},{"VAR?":"loc_train_dining_car"},{"f()":"loc"},"&&","/ev",{"*":".^.c-1","flg":21},"ev","str","^__Weiter__: Den Umstieg kommen lassen.","/str",{"list":{"Def.name_def":2,"Def.relig_def":3,"Def.body_def":4,"Def.face_def":5,"Def.belief_def":6}},{"f()":"has"},{"VAR?":"CourtMission.hidden_instruction_revealed"},{"f()":"state_reached"},"&&","/ev",{"*":".^.c-2","flg":21},{"c-0":["\n",{"->":".^.^.episode_begin_question"},{"->":".^.^.episode_begin_question"},{"#f":5}],"c-1":["\n","^Der Speisewagen braucht keinen Wappenrock, um Rang herzustellen: Der eine bestellt, der andere wartet ab; der Kellner lächelt, weil es Arbeit ist; Viktor beobachtet, weil es Dienst ist. Hohenreith wird dieselbe Kunst beherrschen, nur mit älteren Möbeln.","\n",{"->":"provide_choices"},{"->":".^.^.episode_begin_question"},{"#f":5}],"c-2":["\n",{"->":"train_intro_end"},"done",{"->":".^.^.episode_begin_question"},{"#f":5}],"episode_begin_question":["^„Beginnt ein Auftrag erst dort, wo man aussteigt, Herr Nowak?“","\n","^„Nur im Bericht“, sagt Viktor. „Menschen beginnen früher. Beim Packen. Beim Schweigen. Beim Entschluss, welche Frage man höflich nicht stellt.“","\n","ev","str","^__Prüfe__: „Dann begann meiner schon in Wien.“","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Wahre Form__: „Dann achten wir auf die fehlenden Fragen.“","/str","/ev",{"*":".^.c-4","flg":20},{"c-3":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Wahrscheinlich davor“, sagt er. „Wien bemerkt seine eigenen Anfänge selten.“","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Eine Gewohnheit, die in fremden Häusern selten schadet.“","\n",{"->":".^.^.^.g-0"},{"#f":5}]}],"g-0":[{"->":"provide_choices"},null]}],{"#f":3}],"train_compartment":["ev",{"VAR?":"loc_train_compartment"},{"^->":"train_compartment_entry"},{"^->":"train_compartment_look"},{"^->":"train_compartment_exits"},{"^->":"train_compartment_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"train_compartment_bucket":[[["ev",{"VAR?":"tut_choice_intro"},"!","/ev",{"->":".^.b","c":true},{"b":["\n","#","^alert[Links erscheinen Entscheidungen. Du kannst sie mit der Maus wählen oder mit der angezeigten Taste auslösen. Das hervorgehobene Wort beschreibt, was Valerie versucht; Kürzel wie L für Schaue oder X für Untersuche folgen Textadventure-Gewohnheiten.]","/#","ev",true,"/ev",{"VAR=":"tut_choice_intro","re":true},{"->":".^.^.^.1"},null]}],"nop","\n","ev","str","^__Sprich__: Viktor auf die Reise an.","/str",{"VAR?":"class"},"!","/ev",{"*":".^.c-0","flg":21},"ev","str","^__Untersuche__: Viktors Mappe. ","#","^key:x ","/#","#","^optional","/#","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Schaue__: Aus dem Fenster. ","#","^key:f ","/#","#","^optional","/#","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Betrachte__: Viktor. ","#","^key:v ","/#","#","^optional","/#","/str",{"VAR?":"viktor"},{"f()":"present"},"/ev",{"*":".^.c-3","flg":21},"ev","str","^__Verlange__: Zu sehen, weshalb du gerufen wurdest.","/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"belief_def"},{"f()":"lacks"},"&&","/ev",{"*":".^.c-4","flg":21},{"c-0":["\n","^„Wie lange bis zum Umstieg?“","\n","^Viktor zieht den Fahrplan aus der Mappe, obwohl er die Antwort vermutlich auswendig kennt. „Lang genug, um eine Sache zu erledigen, die sonst bei der Ankunft ungeschickt würde.“","\n","^Sein Blick fällt auf ein vorgedrucktes Blatt zwischen den Schriftstücken.","\n",{"->t->":"identity_papers_tunnel"},{"->":"provide_choices"},{"->":".^.^.g-0"},{"#f":5}],"c-1":["\n","ev",{"VAR?":"class"},{"VAR?":"tut_optional_intro"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Optionale Entscheidungen vertiefen Szene, Welt oder Haltung. Sie können wichtig sein, ohne allein den Weg zu versperren.]","/#","ev",true,"/ev",{"VAR=":"tut_optional_intro","re":true},{"->":".^.^.^.8"},null]}],"nop","\n","^Die Ledermappe enthält genau die Sorte Ordnung, die vorgibt, nur Ordnung zu sein. Fahrplan. Billets. Ein vorgedrucktes Personalblatt. Ein Kuvert mit Viktors Namen, ungeöffnet für dich. Und darunter die Abschrift des Schreibens aus Hohenreith, deren Rand Viktor mit zwei Fingern festhält, als gehöre selbst Papier zur Eskorte.","\n","ev",{"VAR?":"class"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->t->":"identity_papers_tunnel"},{"->":".^.^.^.17"},null]}],"nop","\n",{"->":"provide_choices"},{"->":".^.^.g-0"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"class"},{"VAR?":"tut_optional_intro"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Optionale Entscheidungen vertiefen Szene, Welt oder Haltung. Sie können wichtig sein, ohne allein den Weg zu versperren.]","/#","ev",true,"/ev",{"VAR=":"tut_optional_intro","re":true},{"->":".^.^.^.8"},null]}],"nop","\n","^Draußen löst sich Wien nicht auf einmal, sondern ungern: Vorstädte, Gärten, Fabrikmauern, dann Felder, deren Braun noch nicht weiß, ob es Winter oder Frühling dienen soll. Telegraphenstangen gleiten vorbei, gleichmäßig und unerbittlich. Jede trägt eine Nachricht, die schneller reisen darf als eine Frau im Korsett. ","#","^gloss[Telegraphenstangen](Holzstangen der elektrischen Nachrichten. Die Monarchie liebt Drähte, weil sie Gerüchte schneller machen und zugleich wie Ordnung aussehen.)","/#","\n","ev",{"VAR?":"class"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->t->":"identity_papers_tunnel"},{"->":".^.^.^.20"},null]}],"nop","\n",{"->":"provide_choices"},{"->":".^.^.g-0"},{"#f":5}],"c-3":["\n","ev",{"VAR?":"class"},{"VAR?":"tut_optional_intro"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Optionale Entscheidungen vertiefen Szene, Welt oder Haltung. Sie können wichtig sein, ohne allein den Weg zu versperren.]","/#","ev",true,"/ev",{"VAR=":"tut_optional_intro","re":true},{"->":".^.^.^.8"},null]}],"nop","\n","^Viktor trägt Zivil, aber nicht Entspannung: dunkler Gehrock, nüchterne Weste, tadelloser Kragen, dazu die Haltung eines Mannes, der selbst im Sitzen nie ganz außer Dienst ist. Kein Schneider der Monarchie kann Disziplin verbergen. Er kann sie nur angemessener aussehen lassen. ","#","^gloss[Gehrock](Langer Herrenrock für korrekte Tageskleidung. Ein Kleidungsstück, das Männern erlaubt, bürgerlich, amtlich und moralisch zugleich auszusehen.)","/#","\n","^Seine Augen prüfen Tür, Fenster, Gepäcknetz, Korridor, dein Gesicht und wieder die Tür. Nicht gierig. Nicht unhöflich. Nur vollständig.","\n","ev",{"VAR?":"class"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->t->":"identity_papers_tunnel"},{"->":".^.^.^.22"},null]}],"nop","\n",{"->":"provide_choices"},{"->":".^.^.g-0"},{"#f":5}],"c-4":["\n","ev",{"VAR?":"CourtMission.sealed_letter_known"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"CourtMission.official_cover_understood"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"CourtMission.household_affair_named"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"CourtMission.supernatural_pretext_named"},{"f()":"state_reach"},"pop","/ev","\n","^Viktor lässt den Vordruck trocknen, dann nimmt er ein zweites Blatt aus der Mappe. Nicht das Memorandum mit seinen knappen Amtswörtern, sondern eine Abschrift auf besserem Papier. Die Schrift wirkt, als habe jemand sehr ordentlich in Eile geschrieben.","\n","^„Die Bitte aus Hohenreith“, sagt er. „Nicht alles daran ist für eine Eisenbahnfahrt gedacht. Aber genug.“","\n","^> An die zuständigen Stellen wird in äußerster Diskretion das Ersuchen gerichtet, eine geeignete Person nach Jagdhaus Hohenreith zu entsenden. Im Haushalt und in dessen näherem Umfeld sind wiederholt Störungen vorgefallen, deren öffentliche Behandlung gegenwärtig weder ratsam noch erwünscht erscheint.","\n","^>","\n","^> Die Anwesenheit einer Dame von Bildung, Verschwiegenheit und bekannter Sensibilität für ungewöhnliche seelische oder spiritistische Erscheinungen wäre der Familie willkommen, sofern sie ohne Aufsehen, Polizei, Presse oder kirchliche Untersuchung erfolgen kann. ","#","^gloss[spiritistische Erscheinungen](Erscheinungen im Umkreis des Spiritismus. Sehr brauchbar, wenn Unheimliches behandelt werden soll, ohne zuzugeben, dass ein Amt an Geister glaubt.) ","/#","#","^gloss[kirchliche Untersuchung](Prüfung durch geistliche Stellen. Besonders beruhigend, solange man sicher ist, dass der Schrecken der richtigen Art angehört.)","/#","\n","^Niemand hat das Wort Geist geschrieben. Niemand hat das Wort Betrug geschrieben. Niemand hat das Wort Tochter geschrieben. Gerade deshalb treten die Auslassungen hervor, wie Möbel um einen Fleck, den niemand ansehen will.","\n","^Nun bleibt die Frage, was du selbst für möglich hältst.","\n",["ev","str","^__Glaube__: Dass die Toten seltener schweigen, als Lebende behaupten.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: Ob eine Erscheinung zuerst einen Nutzen hat.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Täusche__: Mit jener Sensibilität, die andere von dir brauchen.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Zögere__: Das Unsichtbare noch nicht zu sortieren.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev",{"VAR?":"believer"},"/ev",{"VAR=":"belief","re":true},"ev",{"^var":"route_sapphic","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Du hältst den Unglauben gebildeter Leute für eine besonders eitle Form der Provinzialität. Es gibt Druck in Zimmern, in denen Kummer gewesen ist. Es gibt Worte, die Menschen sprechen, bevor sie wissen, dass sie gesprochen haben.","\n",{"->":".^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev",{"VAR?":"sceptic"},"/ev",{"VAR=":"belief","re":true},"ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Das Wort Geist verdeckt zu viel und erklärt zu wenig. Falls Hohenreith Gespenster hat, erwartest du von ihnen Fußspuren, Gelegenheiten und einen Nutznießer.","\n",{"->":".^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"performer"},"/ev",{"VAR=":"belief","re":true},"ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Du hast gelernt, dass Männer, die dem Verstand einer Frau misstrauen, manchmal ihre Nerven verehren. Eine Schlussfolgerung macht sie unruhig. Eine Vision macht sie aufmerksam.","\n",{"->":".^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev",{"VAR?":"unsure"},"/ev",{"VAR=":"belief","re":true},"ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Es gibt Dinge, die du erklären kannst, Dinge, die du noch nicht erklären kannst, und Dinge, denen Erklärung schadet, wenn man sie zu früh verlangt. Vorläufigkeit ist manchmal die sauberste Methode.","\n",{"->":".^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"g-0":["ev",{"VAR?":"belief_def"},{"f()":"mark"},"pop","/ev","\n",{"->":"train_compartment"},"ev","str","^__Frage__: Viktor, weshalb er wirklich mitreist.","/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"route_language_def"},{"f()":"lacks"},"&&","/ev",{"*":".^.c-5","flg":5},{"c-5":["\n","ev",{"VAR?":"ViktorRelationFrame.escort_present"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"ViktorRelationFrame.secretary_cover_understood"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"tut_dialog_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Steht eine Entscheidung in Anführungszeichen, spricht Valerie diese Zeile aus. Das hervorgehobene Verb benennt die soziale Bewegung der Antwort.]","/#","ev",true,"/ev",{"VAR=":"tut_dialog_intro","re":true},{"->":".^.^.^.18"},null]}],"nop","\n","^Viktor legt den Vordruck zurück in die Mappe. Du lässt ihm einen Augenblick, den Riemen zu schließen, und nimmst ihm dann die Bequemlichkeit, nur Sekretär zu sein.","\n",["ev","str","^__Wahre Form__: „Welche Zeile betrifft Sie, Herr Nowak?“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: „Wer hat angeordnet, dass ich nicht allein reise?“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Entwaffne__: „Soll ich Sie Sekretär nennen, damit wir beide uns wohler fühlen?“","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Schütze dich__: „Wessen Sicherheit meinen Sie, wenn Sie von meiner Begleitung sprechen?“","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Verplappere dich__: „Ich weiß nicht, ob ich einen Sekretär, einen Wächter oder einen Zeugen vor mir habe.“","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Benenne__: „Sie reisen mit, damit Wien später sagen kann, es habe aufgepasst.“","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["\n","^„Welche Zeile betrifft Sie, Herr Nowak?“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_closed","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Er sieht dich an, als habe er gehofft, du würdest höflicher ausweichen. „Auf dem Papier: Sekretär. In der Praxis: Begleitung.“","\n",{"->":".^.^.^.^.^.g-1"},{"#f":5}],"c-1":["\n","^„Wer hat angeordnet, dass ich nicht allein reise?“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_bold","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Die Stelle, die vermeiden möchte, dass diese Reise nach einer Anordnung aussieht.“","\n",{"->":".^.^.^.^.^.g-1"},{"#f":5}],"c-2":["\n","^„Soll ich Sie Sekretär nennen, damit wir beide uns wohler fühlen?“","\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_unreliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Mich macht das Wort nicht wohler“, sagt er. „Aber es macht andere Leute weniger aufmerksam.“","\n",{"->":".^.^.^.^.^.g-1"},{"#f":5}],"c-3":["\n","^„Wessen Sicherheit meinen Sie, wenn Sie von meiner Begleitung sprechen?“","\n","ev",{"^var":"route_sapphic","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_closed","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Er antwortet nicht sofort. „Ihre. Die der Gastgeber. Und, falls die Berichte stimmen, die der Menschen, die nicht gefragt wurden.“","\n",{"->":".^.^.^.^.^.g-1"},{"#f":5}],"c-4":["\n","^„Ich weiß nicht, ob ich einen Sekretär, einen Wächter oder einen Zeugen vor mir habe.“","\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_passive","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Etwas an seiner Aufmerksamkeit wird vorsichtiger. „Das ist immerhin näher an der Wahrheit als Sekretär.“","\n",{"->":".^.^.^.^.^.g-1"},{"#f":5}],"c-5":["\n","^„Sie reisen mit, damit Wien später sagen kann, es habe aufgepasst.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_bold","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Wien sagt vieles später“, sagt Viktor. „Meistens mit saubereren Händen als vorher.“","\n",{"->":".^.^.^.^.^.g-1"},{"#f":5}]}],null]}],"g-1":["ev",{"VAR?":"route_language_def"},{"f()":"mark"},"pop","/ev","\n","ev",{"VAR?":"ValerieWorkingMask.social_strategy_established"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.briefing"},["ev",{"VAR?":"ViktorRelationFrame.handler_role_understood"},{"f()":"state_reach"},"pop","/ev","\n","^Viktor öffnet die Mappe und nimmt ein Memorandum heraus. Diesmal behält er es nicht bei sich, sondern legt es so vor dich, dass du lesen kannst. ","#","^gloss[Memorandum](Amtliche Denkschrift. Lang genug, um Zuständigkeit zu behaupten, kurz genug, um gefährliche Dinge nicht beim Namen nennen zu müssen.)","/#","\n","^„Beim Umstieg erwartet uns eine Kutsche aus Hohenreith“, sagt er. „Ihren Gastgebern wurde mitgeteilt, ich sei Ihnen bei Korrespondenz, Reiseangelegenheiten und praktischen Vorkehrungen behilflich. Mehr müssen sie vorerst nicht wissen.“ ","#","^gloss[Korrespondenz](Briefwechsel. Die vornehme Kunst, Absichten so lange zu falten, bis sie in ein Kuvert passen.)","/#","\n",["ev","str","^__Präzisiere__: „Was wissen sie, was vermuten sie, und was soll ich prüfen dürfen?“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Spotte__: „Wie fürsorglich. Der Staat erspart ihnen die Wörter.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Wahre Form__: „Die Familie bekommt eine Dame. Die Akten bekommen eine Konsultation. Sie bekommen Spielraum.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^„Was wissen sie, was vermuten sie, und was soll ich prüfen dürfen?“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Sie wissen, dass Sie empfohlen kommen. Sie vermuten, dass Sie Störungen ohne Polizei, Priester oder Presse beilegen könnten. Ihnen ist gestattet, Betrug, Zwang, Gefährdung der öffentlichen Ordnung oder glaubwürdige, derzeit nicht einzuordnende Erscheinungen zu prüfen.“","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-1":["\n","^„Wie fürsorglich. Der Staat erspart ihnen die Wörter.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Der Staat erspart Unruhe, wenn er kann“, sagt Viktor. „Oder verteilt sie wenigstens an die richtigen Personen.“","\n",{"->":".^.^.^.g-2"},{"#f":5}],"c-2":["\n","^„Die Familie bekommt eine Dame. Die Akten bekommen eine Konsultation. Sie bekommen Spielraum.“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Eine Zusammenfassung, die ich nicht unterschreiben würde. Aber ich würde ihr nicht widersprechen.“","\n",{"->":".^.^.^.g-2"},{"#f":5}]}],["ev",{"VAR?":"CourtMission.household_affair_named"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"CourtMission.supernatural_pretext_named"},{"f()":"state_reach"},"pop","/ev","\n","^Das Memorandum ist nicht lang. Es nennt nur, was für die Reise nötig ist.","\n","^Ein gräflicher Haushalt. Ein Jagdhaus in der Obersteiermark, nicht der Hauptsitz der Familie. Berichte über Störungen unter Dienerschaft und Dorfbewohnern. Kein Einschreiten der Polizei erbeten. Keine öffentliche kirchliche Untersuchung erwünscht. Keine Presse. Deine Anwesenheit ist als diskrete Konsultation auf Wunsch der Familie zu erklären. Herr Nowak dient zur Unterstützung praktischer Angelegenheiten. ","#","^gloss[Jagdhaus](Adeliger Landsitz für Jagden und kurze Aufenthalte. Weniger Hauptsitz als Bühne für Gäste, Förster, Gewehre und Geheimnisse.) ","/#","#","^gloss[Obersteiermark](Der gebirgige Norden der Steiermark. Wälder, Eisen, enge Täler und ein Wetter, das sich nicht für Wiener Empfindlichkeiten interessiert.) ","/#","#","^gloss[Dienerschaft](Die Bediensteten eines Hauses. Offiziell Teil der Ordnung, praktisch ihr Gedächtnis.)","/#","\n",["ev","str","^__Entlarve__: „Das ist nicht die ganze Weisung.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Benenne__: „Wien vertraut uns beiden so wenig, dass es Misstrauen aufteilen musste.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Zügle dich__: „Dann behalten Sie sie. Ich werde merken, wann sie zwischen uns steht.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^„Das ist nicht die ganze Weisung.“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Viktor fragt nicht, woher du es weißt. „Es gibt immer noch eine weitere Weisung.“","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-1":["\n","^„Wien vertraut uns beiden so wenig, dass es Misstrauen aufteilen musste.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Viktor fragt nicht, woher du es weißt. „Es gibt immer noch eine weitere Weisung.“","\n",{"->":".^.^.^.g-3"},{"#f":5}],"c-2":["\n","^„Dann behalten Sie sie. Ich werde merken, wann sie zwischen uns steht.“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Das halte ich für wahrscheinlich.“","\n",{"->":".^.^.^.g-3"},{"#f":5}]}],["ev",{"VAR?":"CourtMission.hidden_instruction_revealed"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"ViktorRelationFrame.skepticism_registered"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"train_compartment"},"ev","str","^__Schlage vor__: Die Mittagsfrage zu klären.","/str",{"VAR?":"dining_car_known_def"},{"f()":"has"},{"VAR?":"meal_unset"},{"f()":"meal"},"&&","/ev",{"*":".^.c-6","flg":5},{"c-6":["\n","^„Beim Umstieg“, sagt Viktor, „wird Zeit sein, wenn wir sie nicht verlieren. Speisewagen, Bahnhofsrestauration oder nur etwas Kleines im Abteil. Alles spart etwas und kostet etwas.“ ","#","^gloss[Bahnhofsrestauration](Gastwirtschaft am Bahnhof. Reisezeit wird dort zu Suppe, Kaffee, Gedränge und sehr genauer Beobachtung von Gepäck und Stand.)","/#","\n",["ev","str","^__Wähle__: Jetzt mit Viktor in den Speisewagen zu gehen.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Wähle__: Am Bahnhof zu essen.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Wähle__: Nur Tee, Gebäck und Ruhe zu verlangen.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"VAR?":"dining_car"},{"f()":"meal_choose"},"pop","/ev","\n","ev",{"VAR?":"viktor"},{"f()":"companion_join"},"pop","/ev","\n","^Der Speisewagen ist kontrollierter als ein Bahnhof und öffentlicher als dieses Abteil. Man schaut dort mit Besteck in der Hand; das macht den Blick nicht freundlicher, nur gesellschaftsfähiger.","\n","^Viktor schließt die Mappe, steht auf und reicht dir nicht den Arm, sondern die Gelegenheit, ihn anzunehmen. Gemeinsam geht ihr in Fahrtrichtung durch die Wagen, bis der schmale Luxus des Speisewagens euch aufnimmt.","\n",{"->":"train_dining_car"},{"->":".^.^.^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev",{"VAR?":"station_restaurant"},{"f()":"meal_choose"},"pop","/ev","\n","^Der Bahnhof ist lauter, unsauberer, ehrlicher. Man erfährt selten mehr über eine Ordnung, als wenn sie Suppe bestellt, Trinkgeld gibt und auf die Uhr sieht.","\n",{"->":".^.^.^.^.^.^.^.^.g-4"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"light_refreshment"},{"f()":"meal_choose"},"pop","/ev","\n","^Du sparst Zeit, nicht Erschöpfung. Der Körper führt über solche Rechnungen eigene Bücher, und er ist selten nachsichtig.","\n",{"->":".^.^.^.^.^.^.^.^.g-4"},{"#f":5}]}],null],"#n":"g-3"}],{"#n":"g-2"}],{"#n":"briefing"}],null],"g-4":[{"->":"train_compartment"},"done",null]}],{"#f":3}],"train_compartment_entry":["^Erste Klasse bedeutet: grüne Polster, Messinggriffe und genug Platz, um die Enge für Behaglichkeit auszugeben. Im Gepäcknetz über euren Köpfen verbringen deine Gepäckstücke und Viktors einzelner Koffer die Reise in aufgezwungener Nachbarschaft. Der Zug trägt euch mit einem Rhythmus, den man nach einer Weile aufhört zu hören und nur noch unter den Sohlen spürt. ","#","^gloss[Gepäcknetz](Ablage über den Sitzen des Eisenbahnabteils. Dort reisen Hüte, Schachteln und alles, was zu leicht für den Koffer und zu wichtig für den Gepäckwagen ist.) ","/#","#","^gloss[erste Klasse](Der teuerste Eisenbahnraum. Nicht unbedingt stiller, aber besser gepolstert gegen Zufall, Gedränge und fremde Körper.)","/#","\n","^Das Fenstertischchen zieht den Blick auf sich. Viktors Ledertasche liegt dort, noch geöffnet, die Schriftstücke halb heraus.","\n","^Hinter dem Fenster zieht Österreich vorbei.","\n","done",{"#f":3}],"train_compartment_look":[["ev","str","^__Schaue__: Im Abteil umher. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Das Abteil hat sich nicht verändert, nur dein Verhältnis dazu: der Griff zur Tür, Viktors Mappe, das Fenster, der Platz neben dem Gepäcknetz, an dem ein Blick hängen bleiben kann, ohne als Unruhe zu gelten. Es ist ein kleiner Raum, der vorgibt, ein gesellschaftlicher Zustand zu sein.","\n","ev",{"VAR?":"class"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->t->":"identity_papers_tunnel"},{"->":".^.^.^.8"},null]}],"nop","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"train_compartment_exits":[["ev","str","^__Verlasse__: Das Abteil. ","#","^key:e","/#","/str",{"VAR?":"intro_def"},{"f()":"lacks"},"/ev",{"*":".^.c-0","flg":5},{"c-0":["\n",{"->":"train_depart_compartment"},"done",null]}],{"#f":3}],"identity_papers_tunnel":[["ev",{"VAR?":"tut_character_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Manche Entscheidungen legen dauerhafte Tatsachen über Valerie fest. Sie verändern nicht nur diese Szene, sondern wie spätere Figuren sie lesen, ansprechen und unterschätzen.]","/#","ev",true,"/ev",{"VAR=":"tut_character_intro","re":true},{"->":".^.^.^.5"},null]}],"nop","\n","^Es klopft.","\n","^Viktor hat die Billets bereits in der Hand, als die Tür aufgeht. Der Schaffner prüft sie, knipst, nickt und gibt sie zurück. Keine Frage nach Namen, Stand oder Auftrag. Nur die kurze Amtsbewegung eines Mannes, der Menschen nach Fahrscheinen ordnet und nicht nach Geheimnissen. ","#","^gloss[Schaffner](Bahnbediensteter für Fahrkarten, Ordnung und Auskünfte. In einem Zug liest er Menschen fast so berufsmäßig wie Billets.)","/#","\n","^Als die Tür wieder geschlossen ist, betrachtet Viktor die beiden Billets einen Moment zu lange.","\n","^„Das erinnert mich“, sagt er und zieht das vorgedruckte Blatt aus der Mappe. „Personalblatt der Kabinettskanzlei. Für die Akte, für die Ankündigung in Hohenreith und für jene Leute, die am liebsten so tun, als habe eine Reise erst begonnen, wenn sie korrekt vermerkt wurde.“","\n","^Er legt Tinte und Reisefeder daneben. „Das meiste ist Routine.“","\n","^Das erste Feld verlangt dein Geschlecht. Viktor sagt nichts dazu. Du schreibst weiblich, weil das Formular für diese Frage weniger Fantasie besitzt als jeder Mensch, der daraus Befehle ableitet.","\n","^Darunter steht: Höchste abgeschlossene Ausbildung.","\n","ev","str","^__Notiere__: Privater Unterricht durch eine Gouvernante.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Notiere__: Mädchenlyzeum.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Notiere__: Volksschule.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"VAR?":"noble"},"/ev",{"VAR=":"class","re":true},"ev",{"VAR?":"class_def"},{"f()":"mark"},"pop","/ev","\n","^Du trägst ein: Privater Unterricht durch eine Gouvernante. Was eine Tochter deines Standes eben erhält: Bildung ohne Zeugnis, Sprachen ohne Amt, Geschichte ohne Prüfung. Nicht abgeschlossen, weil niemand es Abschluss nennt, wenn es als Voraussetzung gilt.","\n",{"->":".^.^.noble_names"},{"->":".^.^.noble_names"},{"#f":5}],"c-1":["\n","ev",{"VAR?":"middle"},"/ev",{"VAR=":"class","re":true},"ev",{"VAR?":"class_def"},{"f()":"mark"},"pop","/ev","\n","^Du trägst ein: Mädchenlyzeum. Die Schule gab dir Formen, Sprachen, Bücher, Handschrift und jene Art von Bildung, die einer Frau erlaubt ist, solange sie nicht zu sichtbar Anspruch daraus ableitet. Wenn du als Mann geboren wärst, stünde hier vielleicht ein akademischer Grad. So stehen hier Umwege.","\n",{"->":".^.^.g-1.middle_names"},{"->":".^.^.noble_names"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"working"},"/ev",{"VAR=":"class","re":true},"ev",{"VAR?":"class_def"},{"f()":"mark"},"pop","/ev","\n","^Du trägst ein: Volksschule. Pflichtunterricht, dann Arbeit, Beobachtung und die Art Unterricht, für die niemand Zeugnisse ausstellt. Du hast lesen gelernt, bevor man dir zutraute, etwas Wichtiges zu lesen. Den Rest hast du dir genommen.","\n",{"->":".^.^.g-3.working_names"},{"->":".^.^.noble_names"},{"#f":5}],"noble_names":["^Das Feld Titel füllt sich beinahe von selbst. Freiin. Der Adelstitel steht da, nicht weil er dich erklärt, sondern weil viele Menschen zufrieden sind, sobald ein Titel erklärt hat, wie tief sie sich verbeugen müssen. ","#","^gloss[Freiin](Unverheiratete Dame freiherrlichen Ranges. Hoch genug, um angekündigt zu werden, niedrig genug, um von höheren Häusern übersehen werden zu dürfen.)","/#","\n","ev","str","^Freiin von","/str","/ev",{"VAR=":"title_part","re":true},"^Für Vornamen ist reichlich Platz. Das war bei deiner Taufe offenbar auch so.","\n","ev","str","^__Heiße__: Valerie Eleonore Josepha.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Heiße__: Helene Cäcilie Franziska.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Heiße__: Clara Theresia Leopoldine.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Heiße__: Sophie Eleonore Auguste.","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Heiße__: Mathilde Josepha Henriette.","/str","/ev",{"*":".^.c-7","flg":20},"ev","str","^__Heiße__: Therese Valerie Franziska.","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Heiße__: Ilona Theresia Eleonore.","/str","/ev",{"*":".^.c-9","flg":20},"ev","str","^__Heiße__: Zdenka Eleonore Josepha.","/str","/ev",{"*":".^.c-10","flg":20},"ev","str","^__Heiße__: Beatrix Maria Leopoldine.","/str","/ev",{"*":".^.c-11","flg":20},"ev","str","^__Heiße__: Leopoldine Amalie Theresia.","/str","/ev",{"*":".^.c-12","flg":20},{"c-3":["\n","ev","str","^Valerie Eleonore Josepha","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Valerie Eleonore Josepha. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Valerie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Vally.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Eleonore.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Nora.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Lenchen.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Josepha.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Höre auf__: Pepi.","/str","/ev",{"*":".^.c-6","flg":20},{"c-0":["\n","ev","str","^Valerie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Vally","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Eleonore","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Nora","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Lenchen","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Josepha","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-6":["\n","ev","str","^Pepi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-4":["\n","ev","str","^Helene Cäcilie Franziska","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Helene Cäcilie Franziska. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Helene.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Leni.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Cäcilie.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Cilli.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Franziska.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Fanni.","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["\n","ev","str","^Helene","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Leni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Cäcilie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Cilli","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Franziska","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Fanni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-5":["\n","ev","str","^Clara Theresia Leopoldine","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Clara Theresia Leopoldine. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Clara.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Clari.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Theresia.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Resi.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Leopoldine.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Poldi.","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["\n","ev","str","^Clara","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Clari","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Theresia","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Resi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Leopoldine","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Poldi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-6":["\n","ev","str","^Sophie Eleonore Auguste","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Sophie Eleonore Auguste. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Sophie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Sopherl.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Eleonore.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Nora.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Lenchen.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Auguste.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Höre auf__: Gusti.","/str","/ev",{"*":".^.c-6","flg":20},{"c-0":["\n","ev","str","^Sophie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Sopherl","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Eleonore","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Nora","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Lenchen","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Auguste","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-6":["\n","ev","str","^Gusti","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-7":["\n","ev","str","^Mathilde Josepha Henriette","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Mathilde Josepha Henriette. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Mathilde.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Tilli.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Josepha.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Pepi.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Henriette.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Jetti.","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["\n","ev","str","^Mathilde","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Tilli","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Josepha","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Pepi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Henriette","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Jetti","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-8":["\n","ev","str","^Therese Valerie Franziska","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Therese Valerie Franziska. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Therese.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Resi.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Valerie.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Vally.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Franziska.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Fanni.","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["\n","ev","str","^Therese","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Resi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Valerie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Vally","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Franziska","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Fanni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-9":["\n","ev","str","^Ilona Theresia Eleonore","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Ilona Theresia Eleonore. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Ilona.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Ilonka.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Theresia.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Resi.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Eleonore.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Nora.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Höre auf__: Lenchen.","/str","/ev",{"*":".^.c-6","flg":20},{"c-0":["\n","ev","str","^Ilona","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Ilonka","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Theresia","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Resi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Eleonore","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Nora","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-6":["\n","ev","str","^Lenchen","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-10":["\n","ev","str","^Zdenka Eleonore Josepha","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Zdenka Eleonore Josepha. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Zdenka.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Eleonore.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Nora.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Lenchen.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Josepha.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Pepi.","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["\n","ev","str","^Zdenka","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Eleonore","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Nora","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Lenchen","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Josepha","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Pepi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-11":["\n","ev","str","^Beatrix Maria Leopoldine","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Beatrix Maria Leopoldine. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Beatrix.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Maria.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Mitzi.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Leopoldine.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Poldi.","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["\n","ev","str","^Beatrix","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Maria","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Mitzi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Leopoldine","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Poldi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}],"c-12":["\n","ev","str","^Leopoldine Amalie Theresia","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Leopoldine Amalie Theresia. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Leopoldine.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Poldi.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Amalie.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Mali.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Theresia.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Höre auf__: Resi.","/str","/ev",{"*":".^.c-5","flg":20},{"c-0":["\n","ev","str","^Leopoldine","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-1":["\n","ev","str","^Poldi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-2":["\n","ev","str","^Amalie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-3":["\n","ev","str","^Mali","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-4":["\n","ev","str","^Theresia","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev","str","^Resi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.g-0"},{"#f":5}]}],{"#f":5}]}],"g-0":["ev",{"VAR?":"common_name"},"out","/ev","^ ist der Name, auf den du innerlich zuerst reagierst. Die übrigen bleiben auf dem Papier, ordnungsgemäß und etwas weiter entfernt.","\n",{"->":".^.noble_surnames"},["^Ein freiherrlicher Name muss nicht groß sein. Er muss nur alt genug wirken, dass niemand nachfragt, wer ihn zuletzt bezahlt hat.","\n","ev","str","^__Führe den Namen__: von Rauhenfels.","/str","/ev",{"*":".^.c-13","flg":20},"ev","str","^__Führe den Namen__: von Traunegg.","/str","/ev",{"*":".^.c-14","flg":20},"ev","str","^__Führe den Namen__: von Ebenwald.","/str","/ev",{"*":".^.c-15","flg":20},"ev","str","^__Führe den Namen__: von Arnsberg.","/str","/ev",{"*":".^.c-16","flg":20},"ev","str","^__Führe den Namen__: von Reichenau.","/str","/ev",{"*":".^.c-17","flg":20},"ev","str","^__Führe den Namen__: von Waldstätten.","/str","/ev",{"*":".^.c-18","flg":20},"ev","str","^__Führe den Namen__: von Greiffenstein.","/str","/ev",{"*":".^.c-19","flg":20},"ev","str","^__Führe den Namen__: von Lichtenau.","/str","/ev",{"*":".^.c-20","flg":20},"ev","str","^__Führe den Namen__: von Altenried.","/str","/ev",{"*":".^.c-21","flg":20},"ev","str","^__Führe den Namen__: von Hartenfels.","/str","/ev",{"*":".^.c-22","flg":20},{"c-13":["\n","ev","str","^Rauhenfels","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Rauhenfels.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-14":["\n","ev","str","^Traunegg","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Traunegg.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-15":["\n","ev","str","^Ebenwald","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Ebenwald.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-16":["\n","ev","str","^Arnsberg","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Arnsberg.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-17":["\n","ev","str","^Reichenau","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Reichenau.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-18":["\n","ev","str","^Waldstätten","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Waldstätten.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-19":["\n","ev","str","^Greiffenstein","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Greiffenstein.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-20":["\n","ev","str","^Lichtenau","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Lichtenau.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-21":["\n","ev","str","^Altenried","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Altenried.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"c-22":["\n","ev","str","^Hartenfels","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: von Hartenfels.","\n",{"->":".^.^.^.^.g-1"},{"#f":5}],"#n":"noble_surnames"}],null],"g-1":[{"->":".^.^.g-5.birthplace_choices"},["^Das Feld Titel bleibt schmal. Fräulein. Wenn man Frauen anders gelassen hätte, stünde hier vielleicht mehr. Nicht notwendigerweise ein Doktorgrad, nicht so früh, nicht so leicht. Aber irgendein amtliches Zeichen dafür, dass Verstand nicht nur bei Männern als Laufbahn gilt.","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"^Zwei Namen. Genug für Festtage, Schulzeugnisse und Familienbriefe.","\n","ev","str","^__Heiße__: Clara Eleonore.","/str","/ev",{"*":".^.c-23","flg":20},"ev","str","^__Heiße__: Anna Katharina.","/str","/ev",{"*":".^.c-24","flg":20},"ev","str","^__Heiße__: Helene Theresia.","/str","/ev",{"*":".^.c-25","flg":20},"ev","str","^__Heiße__: Rosa Franziska.","/str","/ev",{"*":".^.c-26","flg":20},"ev","str","^__Heiße__: Johanna Elise.","/str","/ev",{"*":".^.c-27","flg":20},"ev","str","^__Heiße__: Katharina Sophie.","/str","/ev",{"*":".^.c-28","flg":20},"ev","str","^__Heiße__: Therese Leopoldine.","/str","/ev",{"*":".^.c-29","flg":20},"ev","str","^__Heiße__: Magdalena Cäcilie.","/str","/ev",{"*":".^.c-30","flg":20},"ev","str","^__Heiße__: Marie Karoline.","/str","/ev",{"*":".^.c-31","flg":20},"ev","str","^__Heiße__: Paula Viktoria.","/str","/ev",{"*":".^.c-32","flg":20},{"c-23":["\n","ev","str","^Clara Eleonore","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Clara Eleonore. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Clara.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Clari.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Eleonore.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Nora.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Höre auf__: Lenchen.","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["\n","ev","str","^Clara","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Clari","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Eleonore","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Nora","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-4":["\n","ev","str","^Lenchen","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-24":["\n","ev","str","^Anna Katharina","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Anna Katharina. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Anna.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Anni.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Katharina.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Käthe.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Anna","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Anni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Katharina","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Käthe","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-25":["\n","ev","str","^Helene Theresia","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Helene Theresia. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Helene.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Leni.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Theresia.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Resi.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Helene","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Leni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Theresia","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Resi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-26":["\n","ev","str","^Rosa Franziska","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Rosa Franziska. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Rosa.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Rosi.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Franziska.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Fanni.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Rosa","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Rosi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Franziska","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Fanni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-27":["\n","ev","str","^Johanna Elise","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Johanna Elise. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Johanna.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Hanni.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Elise.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Liesl.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Johanna","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Hanni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Elise","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Liesl","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-28":["\n","ev","str","^Katharina Sophie","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Katharina Sophie. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Katharina.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Käthe.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Sophie.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Sopherl.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Katharina","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Käthe","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Sophie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Sopherl","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-29":["\n","ev","str","^Therese Leopoldine","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Therese Leopoldine. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Therese.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Resi.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Leopoldine.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Poldi.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Therese","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Resi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Leopoldine","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Poldi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-30":["\n","ev","str","^Magdalena Cäcilie","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Magdalena Cäcilie. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Magdalena.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Leni.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Cäcilie.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Cilli.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Magdalena","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Leni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Cäcilie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Cilli","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-31":["\n","ev","str","^Marie Karoline","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Marie Karoline. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Marie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Mizzi.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Mitzi.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Karoline.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Marie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Mizzi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Mitzi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Karoline","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"c-32":["\n","ev","str","^Paula Viktoria","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst die Vornamen aus: Paula Viktoria. Auf Papier wirken sie vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Paula.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Pauli.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Viktoria.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Vicki.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Paula","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-1":["\n","ev","str","^Pauli","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-2":["\n","ev","str","^Viktoria","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}],"c-3":["\n","ev","str","^Vicki","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-2"},{"#f":5}]}],{"#f":5}],"#n":"middle_names"}],null],"g-2":["ev",{"VAR?":"common_name"},"out","/ev","^ ist der Name, auf den du innerlich zuerst reagierst. Die übrigen bleiben auf dem Papier, ordnungsgemäß und etwas weiter entfernt.","\n",{"->":".^.middle_surnames"},["^Dein Familienname trägt kein kleines `von` vor sich her. Er muss allein aufrecht stehen.","\n","ev","str","^__Führe den Namen__: Leitner.","/str","/ev",{"*":".^.c-33","flg":20},"ev","str","^__Führe den Namen__: Wagner.","/str","/ev",{"*":".^.c-34","flg":20},"ev","str","^__Führe den Namen__: Kellner.","/str","/ev",{"*":".^.c-35","flg":20},"ev","str","^__Führe den Namen__: Baumgartner.","/str","/ev",{"*":".^.c-36","flg":20},"ev","str","^__Führe den Namen__: Fischer.","/str","/ev",{"*":".^.c-37","flg":20},"ev","str","^__Führe den Namen__: Schmid.","/str","/ev",{"*":".^.c-38","flg":20},"ev","str","^__Führe den Namen__: Pichler.","/str","/ev",{"*":".^.c-39","flg":20},"ev","str","^__Führe den Namen__: Rosenfeld.","/str","/ev",{"*":".^.c-40","flg":20},"ev","str","^__Führe den Namen__: Adler.","/str","/ev",{"*":".^.c-41","flg":20},"ev","str","^__Führe den Namen__: Berger.","/str","/ev",{"*":".^.c-42","flg":20},{"c-33":["\n","ev","str","^Leitner","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Leitner.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-34":["\n","ev","str","^Wagner","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Wagner.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-35":["\n","ev","str","^Kellner","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Kellner.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-36":["\n","ev","str","^Baumgartner","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Baumgartner.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-37":["\n","ev","str","^Fischer","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Fischer.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-38":["\n","ev","str","^Schmid","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Schmid.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-39":["\n","ev","str","^Pichler","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Pichler.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-40":["\n","ev","str","^Rosenfeld","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Rosenfeld.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-41":["\n","ev","str","^Adler","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Adler.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"c-42":["\n","ev","str","^Berger","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Berger.","\n",{"->":".^.^.^.^.g-3"},{"#f":5}],"#n":"middle_surnames"}],null],"g-3":[{"->":".^.^.g-5.birthplace_choices"},["^Das Feld Titel gibt dir dasselbe Wort wie vielen anderen und nicht denselben Schutz. Fräulein. Ein höfliches Dach über sehr verschiedenen Leben.","\n","ev","str","^Fräulein","/str","/ev",{"VAR=":"title_part","re":true},"^Ein Name. Der, den man dir gab, ehe jemand daran dachte, dass er einmal an Türen gemeldet werden würde.","\n","ev","str","^__Heiße__: Anna.","/str","/ev",{"*":".^.c-43","flg":20},"ev","str","^__Heiße__: Klara.","/str","/ev",{"*":".^.c-44","flg":20},"ev","str","^__Heiße__: Agnes.","/str","/ev",{"*":".^.c-45","flg":20},"ev","str","^__Heiße__: Leni.","/str","/ev",{"*":".^.c-46","flg":20},"ev","str","^__Heiße__: Rosa.","/str","/ev",{"*":".^.c-47","flg":20},"ev","str","^__Heiße__: Gertrud.","/str","/ev",{"*":".^.c-48","flg":20},"ev","str","^__Heiße__: Elisabeth.","/str","/ev",{"*":".^.c-49","flg":20},"ev","str","^__Heiße__: Franziska.","/str","/ev",{"*":".^.c-50","flg":20},"ev","str","^__Heiße__: Marie.","/str","/ev",{"*":".^.c-51","flg":20},"ev","str","^__Heiße__: Josefa.","/str","/ev",{"*":".^.c-52","flg":20},{"c-43":["\n","ev","str","^Anna","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Anna. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Anna.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Anni.","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["\n","ev","str","^Anna","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Anni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"c-44":["\n","ev","str","^Klara","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Klara. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Klara.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Klärchen.","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["\n","ev","str","^Klara","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Klärchen","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"c-45":["\n","ev","str","^Agnes","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Agnes. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","ev","str","^Agnes","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.g-4"},{"#f":5}],"c-46":["\n","ev","str","^Leni","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Leni. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","ev","str","^Leni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.g-4"},{"#f":5}],"c-47":["\n","ev","str","^Rosa","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Rosa. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Rosa.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Rosi.","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["\n","ev","str","^Rosa","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Rosi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"c-48":["\n","ev","str","^Gertrud","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Gertrud. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Gertrud.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Trude.","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["\n","ev","str","^Gertrud","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Trude","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"c-49":["\n","ev","str","^Elisabeth","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Elisabeth. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Elisabeth.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Sisi.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Liesl.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Höre auf__: Else.","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev","str","^Elisabeth","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Sisi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-2":["\n","ev","str","^Liesl","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-3":["\n","ev","str","^Else","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"c-50":["\n","ev","str","^Franziska","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Franziska. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Franziska.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Fanni.","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["\n","ev","str","^Franziska","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Fanni","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"c-51":["\n","ev","str","^Marie","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Marie. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Marie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Mizzi.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Höre auf__: Mitzi.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev","str","^Marie","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Mizzi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-2":["\n","ev","str","^Mitzi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"c-52":["\n","ev","str","^Josefa","/str","/ev",{"VAR=":"given_names","re":true},"^Du schreibst den Vornamen aus: Josefa. Auf Papier wirkt er vollständiger als in einem Mund, der dich kennt.","\n","^So steht es nun in den Papieren. Doch Papier ruft niemanden beim Frühstück, im Streit oder hinter einer halb geschlossenen Tür.","\n",["ev","str","^__Höre auf__: Josefa.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre auf__: Pepi.","/str","/ev",{"*":".^.c-1","flg":20},{"c-0":["\n","ev","str","^Josefa","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}],"c-1":["\n","ev","str","^Pepi","/str","/ev",{"VAR=":"common_name","re":true},{"->":".^.^.^.^.^.^.g-4"},{"#f":5}]}],{"#f":5}],"#n":"working_names"}],null],"g-4":["ev",{"VAR?":"common_name"},"out","/ev","^ ist der Name, auf den du innerlich zuerst reagierst.","\n",{"->":".^.working_surnames"},["^Ein einfacher Familienname ist in Wien kein Mangel an Buchstaben, sondern an Schutz. Er sagt den Leuten, wie wenig Achtung sie vorgeben müssen, ehe du gesprochen hast.","\n","ev","str","^__Führe den Namen__: Pichler.","/str","/ev",{"*":".^.c-53","flg":20},"ev","str","^__Führe den Namen__: Huber.","/str","/ev",{"*":".^.c-54","flg":20},"ev","str","^__Führe den Namen__: Maier.","/str","/ev",{"*":".^.c-55","flg":20},"ev","str","^__Führe den Namen__: Gruber.","/str","/ev",{"*":".^.c-56","flg":20},"ev","str","^__Führe den Namen__: Schuster.","/str","/ev",{"*":".^.c-57","flg":20},"ev","str","^__Führe den Namen__: Krenn.","/str","/ev",{"*":".^.c-58","flg":20},"ev","str","^__Führe den Namen__: Wolf.","/str","/ev",{"*":".^.c-59","flg":20},"ev","str","^__Führe den Namen__: Moser.","/str","/ev",{"*":".^.c-60","flg":20},"ev","str","^__Führe den Namen__: Bauer.","/str","/ev",{"*":".^.c-61","flg":20},"ev","str","^__Führe den Namen__: Hofer.","/str","/ev",{"*":".^.c-62","flg":20},{"c-53":["\n","ev","str","^Pichler","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Pichler.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-54":["\n","ev","str","^Huber","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Huber.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-55":["\n","ev","str","^Maier","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Maier.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-56":["\n","ev","str","^Gruber","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Gruber.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-57":["\n","ev","str","^Schuster","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Schuster.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-58":["\n","ev","str","^Krenn","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Krenn.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-59":["\n","ev","str","^Wolf","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Wolf.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-60":["\n","ev","str","^Moser","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Moser.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-61":["\n","ev","str","^Bauer","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Bauer.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"c-62":["\n","ev","str","^Hofer","/str","/ev",{"VAR=":"surname","re":true},"^Der Familienname steht nun dort, wo das Formular ihn erwartet: Hofer.","\n",{"->":".^.^.^.^.g-5"},{"#f":5}],"#n":"working_surnames"}],null],"g-5":[{"->":".^.birthplace_choices"},["^Wohnort: Wien. Natürlich. Als gäbe es für jemanden in deiner Lage eine andere Antwort, sobald die Kabinettskanzlei einmal ihre Finger im Papier hat.","\n","^Geburtsort. Die Liste ist nicht vollständig; sie beschränkt sich auf Städte, die während deines ganzen Lebens offiziell zur Habsburgermonarchie gehörten und in Wien eine Vorstellung auslösen, noch bevor jemand die Karte aufschlägt.","\n","ev","str","^__Schreibe__: Wien.","/str","/ev",{"*":".^.c-63","flg":20},"ev","str","^__Schreibe__: Prag.","/str","/ev",{"*":".^.c-64","flg":20},"ev","str","^__Schreibe__: Budapest.","/str","/ev",{"*":".^.c-65","flg":20},"ev","str","^__Schreibe__: Graz.","/str","/ev",{"*":".^.c-66","flg":20},"ev","str","^__Schreibe__: Linz.","/str","/ev",{"*":".^.c-67","flg":20},"ev","str","^__Schreibe__: Salzburg.","/str","/ev",{"*":".^.c-68","flg":20},"ev","str","^__Schreibe__: Innsbruck.","/str","/ev",{"*":".^.c-69","flg":20},"ev","str","^__Schreibe__: Triest.","/str","/ev",{"*":".^.c-70","flg":20},"ev","str","^__Schreibe__: Brünn.","/str","/ev",{"*":".^.c-71","flg":20},"ev","str","^__Schreibe__: Krakau.","/str","/ev",{"*":".^.c-72","flg":20},"ev","str","^__Schreibe__: Lemberg.","/str","/ev",{"*":".^.c-73","flg":20},"ev","str","^__Schreibe__: Czernowitz.","/str","/ev",{"*":".^.c-74","flg":20},"ev","str","^__Schreibe__: Laibach.","/str","/ev",{"*":".^.c-75","flg":20},"ev","str","^__Schreibe__: Agram.","/str","/ev",{"*":".^.c-76","flg":20},{"c-63":["\n","ev","str","^Wien","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Wien ein.","\n","^In Wien geboren, wo alles entschieden wird und man trotzdem ständig behauptet, von nichts gewusst zu haben.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-64":["\n","ev","str","^Prag","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Prag ein.","\n","^Die zweite Hauptstadt, was Wien niemals so nennen würde. Hundert Türme, mehr Sprachen und genug Stolz, um Wiener Urteile zu überleben.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-65":["\n","ev","str","^Budapest","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Budapest ein.","\n","^Jenseits der Leitha, wo Wien gern Temperament vermutet, wenn es eigentlich politische Selbstachtung meint.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-66":["\n","ev","str","^Graz","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Graz ein.","\n","^Ein Ort, den Wien für angenehm hält, solange er nicht zu eigenständig denkt. Steirische Ruhe, sagt man, und meint oft nur Entfernung.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-67":["\n","ev","str","^Linz","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Linz ein.","\n","^Solide, deutsch, ordentlich, etwas beleidigt, wenn Wien es übergeht, und gerade deshalb sehr leicht von Wien zu übergehen.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-68":["\n","ev","str","^Salzburg","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Salzburg ein.","\n","^Musik, Fürsterzbischöfe und eine Schönheit, die sich von Wien bewundern lässt, ohne ihm ganz zu gehören.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-69":["\n","ev","str","^Innsbruck","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Innsbruck ein.","\n","^Berge, Kaiserjäger, katholische Härte und die bequeme Wiener Vorstellung, dort beginne schon das Heroische.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-70":["\n","ev","str","^Triest","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Triest ein.","\n","^Das Meer der Monarchie. Wien besitzt es auf Papier und versteht es bei jedem Hafenwind ein wenig weniger.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-71":["\n","ev","str","^Brünn","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Brünn ein.","\n","^Fabriken, Tuch, mährische Nüchternheit. Ein Ort, den Wien für praktisch hält, wenn es nicht bemerken will, wie modern er ist.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-72":["\n","ev","str","^Krakau","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Krakau ein.","\n","^Polnische Würde, alte Universitäten und eine Trauer, die Wien gern pittoresk nennt, wenn sie nicht politisch werden soll.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-73":["\n","ev","str","^Lemberg","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Lemberg ein.","\n","^So weit östlich, dass Wien dort schon den Orient vermutet. Falsch, natürlich, aber aufschlussreich über Wien.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-74":["\n","ev","str","^Czernowitz","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Czernowitz ein.","\n","^Das kleine Wien des Ostens, sagen manche. Ein Kompliment, das mehr über Wien verrät als über Czernowitz.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-75":["\n","ev","str","^Laibach","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Laibach ein.","\n","^Südlich genug, dass Wien Landschaft daraus macht, und slawisch genug, dass dieselben Leute plötzlich Verwaltung brauchen.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"c-76":["\n","ev","str","^Agram","/str","/ev",{"VAR=":"birthplace","re":true},"^Du trägst Agram ein.","\n","^Kroatisch, städtisch, eigensinnig. Wien hört den Namen und denkt sofort an Zuständigkeit.","\n",{"->":".^.^.^.^.g-6"},{"#f":5}],"#n":"birthplace_choices"}],null],"g-6":[{"->":".^.birthdate_choices"},["^Geburtsdatum. Das Feld verlangt nur einen Tag und einen Monat. Keine Erklärung, keine Deutung, nur eine Stelle im Kalender.","\n","ev","str","^__Wähle__: 21. März 1879.","/str","/ev",{"*":".^.c-77","flg":20},"ev","str","^__Wähle__: 24. April 1878.","/str","/ev",{"*":".^.c-78","flg":20},"ev","str","^__Wähle__: 2. Juni 1877.","/str","/ev",{"*":".^.c-79","flg":20},"ev","str","^__Wähle__: 9. Juli 1879.","/str","/ev",{"*":".^.c-80","flg":20},"ev","str","^__Wähle__: 15. August 1878.","/str","/ev",{"*":".^.c-81","flg":20},"ev","str","^__Wähle__: 6. September 1877.","/str","/ev",{"*":".^.c-82","flg":20},"ev","str","^__Wähle__: 3. Oktober 1878.","/str","/ev",{"*":".^.c-83","flg":20},"ev","str","^__Wähle__: 7. November 1877.","/str","/ev",{"*":".^.c-84","flg":20},"ev","str","^__Wähle__: 11. Dezember 1878.","/str","/ev",{"*":".^.c-85","flg":20},"ev","str","^__Wähle__: 14. Januar 1879.","/str","/ev",{"*":".^.c-86","flg":20},"ev","str","^__Wähle__: 5. Februar 1878.","/str","/ev",{"*":".^.c-87","flg":20},"ev","str","^__Wähle__: 12. März 1877.","/str","/ev",{"*":".^.c-88","flg":20},{"c-77":["\n","ev","str","^21. März 1879","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Widder","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 21. März 1879 ein.","\n","^Neunzehn Jahre. Jung genug, dass manche dich für eine Laune halten möchten, alt genug, um bereits zu wissen, wie nützlich dieser Irrtum sein kann.","\n","^Der Widder stößt vorwärts, auch wenn andere noch die Tür suchen. Für einen Auftrag mit verschlossenen Zimmern ist das nicht das schlechteste Zeichen.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-78":["\n","ev","str","^24. April 1878","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Stier","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 24. April 1878 ein.","\n","^Zwanzig Jahre. Ein Alter, in dem man von dir schon Haltung erwartet und dir dennoch Erfahrung abspricht, sobald sie unbequem wird.","\n","^Der Stier gilt als standhaft, sinnlich, schwer zu bewegen. Nützlich, wenn ein Haus erwartet, dass man sich von seinem ersten Blick einschüchtern lässt.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-79":["\n","ev","str","^2. Juni 1877","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Zwillinge","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 2. Juni 1877 ein.","\n","^Einundzwanzig Jahre. Volljährig genug für Verantwortung, jung genug, dass ältere Herren sie dir nur leihweise zugestehen.","\n","^Die Zwillinge sprechen mit zwei Stimmen und hören mit dreien. Man kann das flatterhaft nennen oder beruflich brauchbar.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-80":["\n","ev","str","^9. Juli 1879","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Krebs","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 9. Juli 1879 ein.","\n","^Neunzehn Jahre. Die Zahl wirkt harmlos auf Papier; in Wahrheit ist sie alt genug für Ehrgeiz und jung genug für Zumutungen.","\n","^Der Krebs schützt, erinnert, zieht sich zurück und kommt seitwärts doch ans Ziel. Ein unterschätztes Talent.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-81":["\n","ev","str","^15. August 1878","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Löwe","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 15. August 1878 ein.","\n","^Zwanzig Jahre. Nicht mehr ganz Debütantin, noch nicht Frau von gesetzter Erwartung. Ein nützlicher Zwischenraum.","\n","^Der Löwe will gesehen werden. Das ist gefährlich, aber auch nützlich, wenn alle anderen glauben, sie seien die Beobachter.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-82":["\n","ev","str","^6. September 1877","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Jungfrau","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 6. September 1877 ein.","\n","^Einundzwanzig Jahre. Ein Alter, das man dir anrechnen müsste, wenn man Frauenalter nicht so gern gegen Frauen verwendete.","\n","^Die Jungfrau ordnet, prüft und findet Fehler dort, wo andere Erhabenheit sehen wollen. Ein sehr unromantisches, sehr wirksames Zeichen.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-83":["\n","ev","str","^3. Oktober 1878","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Waage","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 3. Oktober 1878 ein.","\n","^Zwanzig Jahre. Alt genug, um Takt zu beherrschen, jung genug, dass man ihn dir noch als Gehorsam auslegen möchte.","\n","^Die Waage sucht Ausgleich. In Häusern wie Hohenreith kann das heißen, die Lüge zu finden, auf der alle noch stehen können.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-84":["\n","ev","str","^7. November 1877","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Skorpion","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 7. November 1877 ein.","\n","^Einundzwanzig Jahre. Das Papier nennt die Zahl und verschweigt, wie viel Übung schon nötig war, um hier zu sitzen.","\n","^Der Skorpion bewahrt Geheimnisse, bis er entscheiden kann, ob sie Waffe oder Wahrheit sind.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-85":["\n","ev","str","^11. Dezember 1878","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Schütze","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 11. Dezember 1878 ein.","\n","^Zwanzig Jahre. Ein Alter zwischen Erlaubnis und Aufbruch, falls man entschlossen genug ist, beides zu erzwingen.","\n","^Der Schütze zielt auf die Ferne. Das passt zu einer Reise, die nicht nur aus Schienen besteht.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-86":["\n","ev","str","^14. Januar 1879","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Steinbock","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 14. Januar 1879 ein.","\n","^Neunzehn Jahre. Jung, ja, aber nicht weich. Manche Menschen verwechseln beides nur, weil es ihnen nützt.","\n","^Der Steinbock steigt langsam und merkt sich jeden sicheren Tritt. Für fremde Häuser ist das eine brauchbare Tugend.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-87":["\n","ev","str","^5. Februar 1878","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Wassermann","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 5. Februar 1878 ein.","\n","^Zwanzig Jahre. Alt genug, um Konventionen zu kennen, und jung genug, um sie noch nicht für Naturgesetze zu halten.","\n","^Der Wassermann gilt als eigenwillig und hellsichtig. Das eine ist leichter zu beweisen als das andere.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"c-88":["\n","ev","str","^12. März 1877","/str","/ev",{"VAR=":"birthdate","re":true},"ev","str","^Fische","/str","/ev",{"VAR=":"zodiac","re":true},"^Du trägst den 12. März 1877 ein.","\n","^Einundzwanzig Jahre. Erwachsen nach Gesetz und Papier; beides ist hilfreich und keines davon genügt.","\n","^Die Fische sollen durchlässig sein für das, was andere nicht spüren. Schmeichelhaft und unbeweisbar. Beides kann einem Medium nützen.","\n",{"->":".^.^.^.^.g-7"},{"#f":5}],"#n":"birthdate_choices"}],null],"g-7":["ev",{"VAR?":"name_def"},{"f()":"mark"},"pop","/ev","\n","ev",{"VAR?":"ValerieWorkingMask.name_claimed"},{"f()":"state_reach"},"pop","/ev","\n","^Du legst die Feder ab.","\n","ev",{"VAR?":"title_part"},"out","/ev","^ ","ev",{"VAR?":"given_names"},"out","/ev","^ ","ev",{"VAR?":"surname"},"out","/ev","^. Geboren am ","ev",{"VAR?":"birthdate"},"out","/ev","^ in ","ev",{"VAR?":"birthplace"},"out","/ev","^, wohnhaft in Wien.","\n","^Viktor wartet, bis die Tinte nicht mehr glänzt. Dann nimmt er das Blatt, prüft es mit der Genauigkeit eines Mannes, der auch Schweigen ablegen könnte, und schiebt es zurück in die Mappe.","\n","ev","void","/ev","->->",null]}],null],"train_depart_compartment":[["ev",{"VAR?":"class"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->t->":"identity_papers_tunnel"},{"->":".^.^.^.5"},null]}],"nop","\n","ev",{"VAR?":"tut_traversal_intro"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","#","^alert[Der Zug ist begehbar. Raum-Entscheidungen bewegen Valerie zwischen erreichbaren Bereichen; Moment-Entscheidungen untersuchen Dinge, sprechen Personen an oder lassen Ereignisse sichtbar werden.]","/#","ev",true,"/ev",{"VAR=":"tut_traversal_intro","re":true},{"->":".^.^.^.12"},null]}],"nop","\n","^Viktor sitzt noch immer dort, wo die Form ihn hingestellt hat: nah genug, um nützlich zu sein, zu nah, um vergessen zu werden. Draußen schwankt der Gang. Drinnen schwankt nur, was nicht ausgesprochen wird.","\n","ev","str","^__Wahre Form__: „Ich werde mich einen Augenblick frisch machen.“","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^__Prüfe__: „Ich möchte wissen, wie weit dieser Wagen reicht.“","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^__Entwaffne__: „Verzeihen Sie. Ich traue mir einen Spiegel ohne amtliche Hilfe zu.“","/str","/ev",{"*":".^.c-2","flg":4},"ev","str","^__Schütze dich__: „Ich brauche einen Augenblick ohne Aufsicht.“","/str","/ev",{"*":".^.c-3","flg":4},"ev","str","^__Verplappere dich__: „Mir ist zu warm. Oder zu eng. Ich weiß nicht genau.“","/str","/ev",{"*":".^.c-4","flg":4},"ev","str","^__Benenne__: Aufstehen, ohne um Erlaubnis zu bitten.","/str","/ev",{"*":".^.c-5","flg":4},{"c-0":["\n","^„Ich werde mich einen Augenblick frisch machen.“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_closed","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Viktor neigt den Kopf. „Natürlich. Nehmen Sie sich den Augenblick.“","\n",{"->":".^.^.to_corridor"},{"->":".^.^.silent_challenge"},null],"c-1":["\n","^„Ich möchte wissen, wie weit dieser Wagen reicht.“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_bold","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Ein Zug reicht selten nur räumlich“, sagt Viktor. Er hält dich nicht auf.","\n",{"->":".^.^.to_corridor"},{"->":".^.^.silent_challenge"},null],"c-2":["\n","^„Verzeihen Sie. Ich traue mir einen Spiegel ohne amtliche Hilfe zu.“","\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_personal_involvement","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Etwas an seinem Mundwinkel bewegt sich. „Ich werde die Monarchie nicht beunruhigen.“","\n",{"->":".^.^.to_corridor"},{"->":".^.^.silent_challenge"},null],"c-3":["\n","^„Ich brauche einen Augenblick ohne Aufsicht.“","\n","ev",{"^var":"route_sapphic","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_closed","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Viktor sieht zur Tür, nicht zu dir. „Dann nehmen Sie ihn. Aber verlieren Sie ihn nicht.“","\n",{"->":".^.^.to_corridor"},{"->":".^.^.silent_challenge"},null],"c-4":["\n","^„Mir ist zu warm. Oder zu eng. Ich weiß nicht genau.“","\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_unreliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Langsam“, sagt Viktor, sofort und nicht scharf. „Der Gang schwankt.“","\n",{"->":".^.^.to_corridor"},{"->":".^.^.silent_challenge"},null],"c-5":["\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_loss_of_control","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du stehst auf. Nicht hastig, nicht trotzig; nur so, als sei dein Körper keine Akte, die Viktor gegenzeichnen muss.","\n","^Viktor erhebt sich halb. „Fräulein.“ Das Wort ist kein Gruß. „Wohin?“","\n",{"->":".^.^.silent_challenge"},{"->":".^.^.silent_challenge"},null],"silent_challenge":["ev","str","^__Wahre Form__: „Zum Waschraum, Herr Nowak. Nicht aus der Monarchie.“","/str","/ev",{"*":".^.c-6","flg":4},"ev","str","^__Trotze__: „Dorthin, wo Ihre Augen nicht zuerst ankommen.“","/str","/ev",{"*":".^.c-7","flg":4},{"c-6":["\n","^„Zum Waschraum, Herr Nowak. Nicht aus der Monarchie.“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Er setzt sich wieder. „Dann will ich die Monarchie beruhigt wissen.“","\n",{"->":".^.^.^.to_corridor"},{"->":".^.^.^.to_corridor"},null],"c-7":["\n","^„Dorthin, wo Ihre Augen nicht zuerst ankommen.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_alarm","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Für einen Augenblick wird er sehr still. Dann macht er den Weg frei.","\n",{"->":".^.^.^.to_corridor"},{"->":".^.^.^.to_corridor"},null]}],"to_corridor":["^Du öffnest die Abteiltür. Der Griff ist kühler, als Messing sein sollte. Dahinter schwankt der schmale Gang des ersten Wagens in Fahrtrichtung.","\n","ev",{"VAR?":"viktor"},{"f()":"companion_leave"},"pop","/ev","\n",{"->":"train_home_corridor"},"done",null]}],null],"train_home_corridor":["ev",{"VAR?":"loc_train_home_corridor"},{"^->":"train_home_corridor_entry"},{"^->":"train_home_corridor_look"},{"^->":"train_home_corridor_exits"},{"^->":"train_home_corridor_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"train_home_corridor_bucket":["done",{"#f":3}],"train_home_corridor_entry":["^Der Gang des ersten Wagens ist schmaler, als er durch die Scheibe wirkte. Links die Abteiltüren, rechts die Fenster, dazwischen Messinggriffe für Würde in Bewegung. Hinter einer Tür wartet Viktor; hinter den anderen reisen Husten, Parfüm, Papier und das beleidigte Schweigen von Menschen, die sich einander teuer vom Leib halten.","\n","done",{"#f":3}],"train_home_corridor_look":[["ev","str","^__Schaue__: Den Gang des ersten Wagens entlang. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Der Gang ist nicht länger neu, aber seine Enge arbeitet weiter. Gegen die Fahrtrichtung liegt eine Tür, die nicht zu deiner Fahrt gehört; in Fahrtrichtung wartet der Übergang zum nächsten Wagen. Dein Abteil ist die einzige seitliche Tür, die jetzt wirklich dein Ort ist.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"train_home_corridor_exits":[["ev","str","^__Betrete__: Dein Abteil. ","#","^key:w","/#","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^__Gehe__: In Fahrtrichtung zum nächsten Wagen. ","#","^key:s","/#","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^__Prüfe__: Die Tür gegen die Fahrtrichtung. ","#","^key:n","/#","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^Du öffnest die seitliche Tür und trittst zurück in den kleinen Raum aus Polster, Papier und Viktors Aufmerksamkeit.","\n",{"->":"train_compartment_return"},null],"c-1":["\n","^Du gehst in Fahrtrichtung bis zur Übergangstür. Für einen Atemzug greifen Lärm, Kälte und Kohlenrauch nach Rock und Hut; dann nimmt dich der nächste Wagen auf.","\n",{"->":"train_clergy_corridor"},null],"c-2":["\n",{"->":"train_second_class_door"},"done",{"#f":5}]}],{"#f":3}],"train_second_class_door":["^Die Tür ist nicht verschlossen wie ein Tresor. Sie ist verschlossen wie eine soziale Gewissheit. Durch die Scheibe erkennst du nicht viel: engeres Holz, mehr Körper, andere Hüte, eine Luft, die weniger Abstand zwischen Menschen erlaubt. Du legst die Hand an den Griff und lässt sie wieder sinken. Neugier ist kein ausreichender Anlass, ohne Einladung durch fremde Klassen zu gehen.","\n",{"->":"provide_choices"},null],"train_clergy_corridor":["ev",{"VAR?":"loc_train_clergy_corridor"},{"^->":"train_clergy_corridor_entry"},{"^->":"train_clergy_corridor_look"},{"^->":"train_clergy_corridor_exits"},{"^->":"train_clergy_corridor_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"train_clergy_corridor_bucket":["thread",{"->":"train_clergy_faith_choices"},"thread",{"->":"train_corridor_tunnel_choices"},"done",{"#f":3}],"train_clergy_corridor_entry":["^Im nächsten Wagen riecht der Gang stärker nach Kohle, feuchter Wolle und kalter Luft, die bei jedem Übergang hereingebeten wird. Hinter den Abteiltüren liegen Stimmen, Gepäck, Müdigkeit und das geübte Schweigen von Reisenden, die einander höflich nicht zur Kenntnis nehmen.","\n","done",{"#f":3}],"train_clergy_corridor_look":[["ev","str","^__Schaue__: Den zweiten Gang entlang. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Der Wagen wirkt gewöhnlicher als der erste, aber nicht freier. Gegen die Fahrtrichtung liegt dein eigener Wagen. In Fahrtrichtung wird der Zug praktischer: härterer Boden, weniger Polster, ein Schild zum Waschraum.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"train_clergy_corridor_exits":[["ev","str","^__Gehe__: Gegen die Fahrtrichtung zurück. ","#","^key:n","/#","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^__Gehe__: In Fahrtrichtung weiter. ","#","^key:s","/#","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Du trittst über die unruhige Verbindung zurück. Lärm und Kälte schließen sich hinter dir; der erste Korridor empfängt dich wieder mit Messinggriffen, Polstergeräuschen und der Nähe deines Abteils.","\n",{"->":"train_home_corridor"},null],"c-1":["\n","^Du gehst in Fahrtrichtung weiter. Der Gang wird enger, sachlicher; vorn hängt ein Schild zum Waschraum.","\n",{"->":"train_washroom_corridor"},"done",null]}],{"#f":3}],"train_washroom_corridor":["ev",{"VAR?":"loc_train_washroom_corridor"},{"^->":"train_washroom_corridor_entry"},{"^->":"train_washroom_corridor_look"},{"^->":"train_washroom_corridor_exits"},{"^->":"train_washroom_corridor_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"train_washroom_corridor_bucket":["thread",{"->":"train_corridor_tunnel_choices"},"done",{"#f":3}],"train_washroom_corridor_entry":["^Der dritte Wagen ist praktischer gebaut. Türen stehen enger, der Boden antwortet härter auf jeden Ruck, und ein Schild weist zum Waschraum. Hier gibt der Zug weniger vor, ein Salon zu sein. Er wird Apparat.","\n","done",{"#f":3}],"train_washroom_corridor_look":[["ev","str","^__Schaue__: Den praktischen Wagen entlang. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Gegen die Fahrtrichtung liegen der zweite Wagen, der erste Wagen und Viktor. Seitlich wartet der Waschraum mit seinem kleinen Spiegelversprechen. In Fahrtrichtung schließt eine Tür den nächsten Wagen ab; durch ihr Glas blitzt Weiß von Tischtüchern.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"train_washroom_corridor_exits":[["ev","str","^__Gehe__: Gegen die Fahrtrichtung zurück. ","#","^key:n","/#","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^__Betrete__: Den Waschraum. ","#","^key:e","/#","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^__Sieh nach__: Was hinter der Tür in Fahrtrichtung liegt. ","#","^key:s","/#","/str",{"VAR?":"dining_car_known_def"},{"f()":"lacks"},"/ev",{"*":".^.c-2","flg":5},{"c-0":["\n","^Du lässt das Schild zum Waschraum hinter dir und gehst gegen die Fahrtrichtung zurück in den zweiten Wagen.","\n",{"->":"train_clergy_corridor"},null],"c-1":["\n","^Du öffnest die schmale Tür zur Seite. Der Gang bleibt hinter dir zurück; vor dir wartet ein Raum, der kaum mehr als Spiegel, Wasser und Verriegelung ist.","\n",{"->":"train_washroom"},null],"c-2":["\n","ev",{"VAR?":"dining_car_known_def"},{"f()":"mark"},"pop","/ev","\n","^Du öffnest die Tür in Fahrtrichtung nur weit genug, um hineinzusehen. Dahinter liegt der Speisewagen: weiße Tücher, Glas, Besteck, Kellner mit ruhigen Händen. Allein weiterzugehen wäre auffällig; mit Viktor wäre es eine Mahlzeit.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"train_dining_car":["ev",{"VAR?":"loc_train_dining_car"},{"^->":"train_dining_car_entry"},{"^->":"train_dining_car_look"},{"^->":"train_dining_car_exits"},{"^->":"train_dining_car_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"train_dining_car_bucket":["thread",{"->":"train_dining_car_viktor_choices"},"thread",{"->":"train_dining_car_episode_choices"},"done",{"#f":3}],"train_dining_car_entry":["^Der Speisewagen ist schmaler Luxus in Bewegung: Tische mit zu weißen Tüchern, Metall, Glas, das helle Klirren von Geschirr und Kellner, die Balance nicht als Kunst, sondern als Beruf gelernt haben. Viktor zieht einen Stuhl für dich zurück. Für alle anderen sieht es nach Begleitung aus. Für dich fühlt es sich an wie ein anderer Tisch, an dem dieselben Fragen Platz nehmen. ","#","^gloss[Speisewagen](Eisenbahnwagen mit Bewirtung. Ein Ort, an dem Reisezeit in Mahlzeit verwandelt wird und Standesunterschiede trotzdem mit am Tisch sitzen.)","/#","\n","done",{"#f":3}],"train_dining_car_look":[["ev","str","^__Schaue__: Durch den Speisewagen. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Die weißen Tücher sind weniger Verheißung als Arbeitsfläche. Besteck, Gläser, Kellner, fremde Reisende, Viktor gegenüber: Der Raum hält Gesellschaft und Mechanik auf einem schmalen Gleis zusammen. Jeder Bissen hat Zeugen.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"train_dining_car_viktor_choices":[["ev","str","^__Frage__: Wen Viktor hier beobachtet. ","#","^key:x","/#","/str",{"VAR?":"viktor"},{"f()":"present"},"/ev",{"*":".^.c-0","flg":5},{"c-0":["\n",{"->":".^.^.viktor_observes_dining_car"},"done",{"->":".^.^.viktor_observes_dining_car"},null],"viktor_observes_dining_car":["^„Wer sieht uns an?“, fragst du, während der Kellner die Suppe abstellt.","\n","^Viktor nimmt das Messer auf, als sei auch Besteck eine Gelegenheit zur Tarnung. „Der Kellner, weil er muss. Der Herr am zweiten Tisch, weil Sie nicht hierher passen wollen. Die ältere Dame am Fenster, weil sie hofft, dass Sie es doch tun.“","\n","ev","str","^__Prüfe__: „Und Sie?“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Entwaffne__: „Wie schade. Ich hoffte, Sie hätten wenigstens Hunger.“","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Wahre Form__: „Dann essen wir, bevor die Beobachtung auffällt.“","/str","/ev",{"*":".^.c-3","flg":20},{"c-1":["\n","^„Und Sie?“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Ich sehe nach Ausgängen“, sagt er. „Das ist weniger poetisch, aber zuverlässiger.“","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-2":["\n","^„Wie schade. Ich hoffte, Sie hätten wenigstens Hunger.“","\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Er sieht auf den Teller. „Hunger lässt sich besser verbergen als Sorge.“","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-3":["\n","^„Dann essen wir, bevor die Beobachtung auffällt.“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Eine zivile Taktik“, sagt er. „Ich billige sie.“","\n",{"->":".^.^.^.g-0"},{"#f":5}]}],"g-0":[{"->":"provide_choices"},"done",null]}],null],"train_dining_car_episode_choices":[["ev","str","^__Sprich__: Über Hohenreith, solange Geschirr klirrt.","/str",{"VAR?":"viktor"},{"f()":"present"},{"VAR?":"CourtMission.supernatural_pretext_named"},{"f()":"state_reached"},"&&","/ev",{"*":".^.c-0","flg":5},{"c-0":["\n",{"->":".^.^.dining_car_mission_talk"},"done",{"->":".^.^.dining_car_mission_talk"},null],"dining_car_mission_talk":["^Das Essen gibt dem Gespräch Deckung. Eine Frage kann unter Porzellan verschwinden, eine Antwort unter dem Ruck der Kupplung.","\n","ev","str","^__Präzisiere__: „Warum keine Polizei?“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Benenne__: „Eine Familie, die Geister bestellt, fürchtet Lebende.“","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Schütze dich__: „Und wenn man dort vor allem mich prüfen will?“","/str","/ev",{"*":".^.c-3","flg":20},{"c-1":["\n","^„Warum keine Polizei?“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Weil Polizei Öffentlichkeit erzeugt. Und weil manche Familien lieber gefährdet sind als lächerlich.“","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-2":["\n","^„Eine Familie, die Geister bestellt, fürchtet Lebende.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Viktor hebt den Blick. „Oder sie hat gelernt, dass Lebende sich besser hinter Geistern verstecken.“","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-3":["\n","^„Und wenn man dort vor allem mich prüfen will?“","\n","ev",{"^var":"route_sapphic","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Dann prüfen Sie zurück“, sagt er. „Höflich, wenn möglich. Schnell, wenn nötig.“","\n",{"->":".^.^.^.g-0"},{"#f":5}]}],"g-0":[{"->":"provide_choices"},"done",null]}],null],"train_dining_car_exits":[["ev","str","^__Beende__: Das Essen und kehre mit Viktor ins Abteil zurück. ","#","^key:n","/#","/str",{"VAR?":"viktor"},{"f()":"present"},"/ev",{"*":".^.c-0","flg":5},{"c-0":["\n","^Der Speisewagen entlässt euch mit Glasgeräusch und Kohlenrauch. Ihr geht gegen die Fahrtrichtung zurück, durch den praktischen Wagen, den zweiten Wagen und den ersten Korridor, bis Viktor die Tür zu eurem Abteil öffnet.","\n","ev",{"VAR?":"viktor"},{"VAR?":"loc_train_compartment"},{"f()":"character_move_to"},"pop","/ev","\n","ev",{"VAR?":"viktor"},{"f()":"companion_leave"},"pop","/ev","\n",{"->":"train_compartment"},"done",null]}],{"#f":3}],"train_clergy_faith_choices":[[["ev",{"^->":"train_clergy_faith_choices.0.0.$r1"},{"temp=":"$r"},"str",{"->":".^.s"},[{"#n":"$r1"}],"/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"relig_def"},{"f()":"lacks"},"&&","/ev",{"*":".^.^.c-0","flg":19},{"s":["#","^auto","/#",{"->":"$r","var":true},null]}],{"c-0":["ev",{"^->":"train_clergy_faith_choices.0.c-0.$r2"},"/ev",{"temp=":"$r"},{"->":".^.^.0.s"},[{"#n":"$r2"}],"\n",{"->":".^.^.priest_encounter"},"done",{"->":".^.^.priest_encounter"},{"#f":5}],"priest_encounter":["^Eine Abteiltür öffnet sich, bevor du sie erreicht hast. Ein Priester tritt heraus, eine Mappe unter dem Arm, das Gesicht noch bei den Menschen im Abteil. Er will an dir vorbei und bleibt doch einen halben Schritt zu lange stehen. Hinter ihm hebt eine Nonne den Blick, senkt ihn wieder und sieht gerade dadurch genug. ","#","^gloss[Nonne](Ordensfrau. Von der Welt getrennt zu sein bedeutet nicht, sie nicht lesen zu können.)","/#","\n",{"->":".^.faith_choices"},["ev","str","^__Bekenne__: Dich bekreuzigen und ehrerbietig grüßen.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Ordne ein__: Höflich nicken, wie man es gelernt hat.","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Misstraue__: Den Blick halten, aber keinen Schritt zu viel weichen.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Verbinde__: Im Segen auch die Toten hören.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Erinnere dich__: Dass der Glaube dich formte, bevor du dich wehren konntest.","/str","/ev",{"*":".^.c-5","flg":20},{"c-1":["\n","ev",{"VAR?":"catholic"},"/ev",{"VAR=":"relig","re":true},"^Gott ist kein Gesprächsthema für Abteile. Du glaubst nicht kindlich, aber tief: an Sünde, Gnade, Sakrament, Versuchung und an die gefährliche Nähe der unsichtbaren Welt. ","#","^gloss[Sakrament](Heilige Handlung der katholischen Kirche. In einer katholischen Gesellschaft ist es zugleich Gnade, Ordnung und öffentliche Form.)","/#","\n",{"->":".^.^.^.^.faith_defined"},{"->":".^.^.^.^.faith_defined"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"social"},"/ev",{"VAR=":"relig","re":true},"^Du nickst mit der richtigen Mischung aus Achtung und Distanz. Du kennst Feiertage, Beichten, Prozessionen und die Macht eines Pfarrers über Menschen, die behaupten, ihn nicht zu fürchten.","\n",{"->":".^.^.^.^.faith_defined"},{"->":".^.^.^.^.faith_defined"},{"#f":5}],"c-3":["\n","ev",{"VAR?":"reform"},"/ev",{"VAR=":"relig","re":true},"^Du weichst höflich genug aus, aber nicht demütig. Priester erklären zu oft, was sie zuerst besitzen möchten: Schuld, Frauen, Armut und Angst.","\n",{"->":".^.^.^.^.faith_defined"},{"->":".^.^.^.^.faith_defined"},{"#f":5}],"c-4":["\n","ev",{"VAR?":"spiritist"},"/ev",{"VAR=":"relig","re":true},"^Heiligenbilder, Totenmessen, Séancen, Träume: Die sauberen Grenzen dazwischen scheinen dir eher von Männern gezogen als von der Ewigkeit selbst. ","#","^gloss[Séancen](Geistersitzungen mit Tisch, gedämpftem Licht und sehr viel Erwartung. Je dunkler der Raum, desto leichter glauben die Anwesenden, sie sähen klar.)","/#","\n",{"->":".^.^.^.^.faith_defined"},{"->":".^.^.^.^.faith_defined"},{"#f":5}],"c-5":["\n","ev",{"VAR?":"wounded"},"/ev",{"VAR=":"relig","re":true},"^Du kennst die Gebete zu gut, um sie einfach abzulegen, und die Schuld zu gut, um sie fromm zu nennen. Katholische Bilder sind für dich keine Dekoration. Sie greifen nach Stellen, die du lieber versiegelt hieltest.","\n",{"->":".^.^.^.^.faith_defined"},{"->":".^.^.^.^.faith_defined"},{"#f":5}],"#n":"faith_choices"}],null],"faith_defined":["ev",{"VAR?":"relig_def"},{"f()":"mark"},"pop","/ev","\n","^Der Priester neigt den Kopf, als habe er genau so viel erfahren, wie Höflichkeit erlaubt. Dann tritt er in sein Abteil zurück. Die Tür schließt sich; der Gang gehört wieder dir.","\n",{"->":"train_clergy_corridor"},"done",null]}],null],"train_corridor_tunnel_choices":[[["ev",{"^->":"train_corridor_tunnel_choices.0.0.$r1"},{"temp=":"$r"},"str",{"->":".^.s"},[{"#n":"$r1"}],"/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"body_def"},{"f()":"lacks"},"&&",{"VAR?":"loc_train_clergy_corridor"},{"f()":"loc"},{"VAR?":"relig_def"},{"f()":"lacks"},"&&","!","&&","/ev",{"*":".^.^.c-0","flg":19},{"s":["#","^auto(3)","/#",{"->":"$r","var":true},null]}],{"c-0":["ev",{"^->":"train_corridor_tunnel_choices.0.c-0.$r2"},"/ev",{"temp=":"$r"},{"->":".^.^.0.s"},[{"#n":"$r2"}],"\n",{"->":".^.^.tunnel_event"},"done",{"->":".^.^.tunnel_event"},{"#f":5}],"tunnel_event":["^Der Zug stößt in einen Tunnel.","\n","^Das Land draußen erlischt. Die Scheiben verlieren Felder, Himmel und die hellen Fetzen von Ortschaften; übrig bleiben Messinggriffe, dunkles Holz und der bleiche Umriss deines Körpers.","\n","^Ausgerechnet jetzt wird das Glas nützlich. Es zeigt die Frau, die in Eibenreith aussteigen wird.","\n","ev","str","^__Erkenne__: Eine kleine, schmale Gestalt.","/str",{"VAR?":"body_def"},{"f()":"lacks"},"/ev",{"*":".^.c-1","flg":21},"ev","str","^__Erkenne__: Eine mittelgroße Gestalt mit ruhiger Gegenwart.","/str",{"VAR?":"body_def"},{"f()":"lacks"},"/ev",{"*":".^.c-2","flg":21},"ev","str","^__Erkenne__: Eine hochgewachsene, schlanke Gestalt.","/str",{"VAR?":"body_def"},{"f()":"lacks"},"/ev",{"*":".^.c-3","flg":21},"ev","str","^__Erkenne__: Eine kompakte, kräftigere Gestalt.","/str",{"VAR?":"body_def"},{"f()":"lacks"},"/ev",{"*":".^.c-4","flg":21},{"c-1":["\n","ev",{"VAR?":"small_slender"},"/ev",{"VAR=":"body","re":true},"^Unter Mantel, Rock und Haltung bleibt etwas Knappes, Schnelles an dir: schmale Schultern, feine Handgelenke, ein Körper, den Räume leicht übersehen und Gespräche zu spät bemerken.","\n",{"->":".^.^.^.outfit_choice"},{"->":".^.^.^.outfit_choice"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"medium_soft"},"/ev",{"VAR=":"body","re":true},"^Du wirkst nicht zerbrechlich. Die Taille ist geformt, nicht mädchenhaft; die Schultern sind ruhig, die Anwesenheit fester, als manche Männer an einer jungen Frau bequem finden.","\n",{"->":".^.^.^.outfit_choice"},{"->":".^.^.^.outfit_choice"},{"#f":5}],"c-3":["\n","ev",{"VAR?":"tall_slender"},"/ev",{"VAR=":"body","re":true},"^Aufrecht stehend nimmst du mehr Raum ein, als deine Rolle verspricht: lange Linien, schmale Hände, eine Haltung, die Disziplin beinahe wie Herkunft aussehen lässt.","\n",{"->":".^.^.^.outfit_choice"},{"->":".^.^.^.outfit_choice"},{"#f":5}],"c-4":["\n","ev",{"VAR?":"compact_strong"},"/ev",{"VAR=":"body","re":true},"^Reisekleidung und Korsett ordnen dich, aber sie verleugnen nicht alles. In Nacken, Unterarmen und Gleichgewicht liegt mehr Kraft, als man einer Dame höflich zutraut.","\n",{"->":".^.^.^.outfit_choice"},{"->":".^.^.^.outfit_choice"},{"#f":5}]}],"outfit_choice":["^Die Spiegelung spricht auch durch Stoff: was verborgen werden soll, was gezeigt werden darf, was nur eine andere Frau sofort versteht.","\n","ev","str","^__Trage__: Ein dunkel anthrazitfarbenes Reisekostüm mit pflaumenfarbenem Samtkragen.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Trage__: Ein schwarzbraunes Wollkostüm mit elfenbeinfarbener Bluse und schmaler Spitze.","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Trage__: Ein graublaues Kostüm mit kurzem Mantel und praktischen Knöpfen.","/str","/ev",{"*":".^.c-7","flg":20},"ev","str","^__Trage__: Ein dunkelgrünes Kostüm mit schwarzem Besatz und passendem Hut.","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Trage__: Ein schwarzes Reisekleid mit Schleier, zu ernst für bloße Mode.","/str","/ev",{"*":".^.c-9","flg":20},{"c-5":["\n","ev",{"VAR?":"charcoal_plum_velvet"},"/ev",{"VAR=":"outfit","re":true},"^Anthrazitfarbene Wolle, pflaumenfarbener Samt an Kragen und Manschetten: gedämpft genug für den Tag, teuer genug für Menschen mit Augen. ","#","^gloss[Reisekostüm](Damenkleidung für die Reise. Fest genug für Bahnhofsschmutz, korrekt genug für fremde Blicke, und unbequem genug, damit niemand vergisst, dass auch Zweckmäßigkeit weiblich auszusehen hat.)","/#","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-6":["\n","ev",{"VAR?":"black_brown_ivory_lace"},"/ev",{"VAR=":"outfit","re":true},"^Der Rock ist dunkel und schwer genug für die Reise, die Jacke streng, die elfenbeinfarbene Bluse am Hals hochgeschlossen. Die Spitze ist schmal, sauber und gefährlich nahe an Frömmigkeit.","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-7":["\n","ev",{"VAR?":"blue_grey_practical"},"/ev",{"VAR=":"outfit","re":true},"^Graublaue Wolle, ein kurzer Mantel, ein Rock, der beim Aussteigen nicht sofort Verrat übt, und Knöpfe, die mehr nach Zweck als nach Schmuck aussehen.","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-8":["\n","ev",{"VAR?":"dark_green_black_trim"},"/ev",{"VAR=":"outfit","re":true},"^Das Grün ist so dunkel, dass es erst im Licht der Fenster sichtbar wird. Schwarzer Besatz, passende Handschuhe, ein Hut mit kleiner Feder: nicht laut, aber schwer zu vergessen.","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-9":["\n","ev",{"VAR?":"black_veil_severe"},"/ev",{"VAR=":"outfit","re":true},"^Das Schwarz ist nicht Trauer, jedenfalls nicht offiziell. Ein schmaler Schleier, dunkle Handschuhe, glatter Rock. Kleidung, in der skeptische Männer leichter an Ahnungen glauben.","\n",{"->":".^.^.^.g-0"},{"#f":5}]}],"g-0":["ev",{"VAR?":"body_def"},{"f()":"mark"},"pop","/ev","\n",{"->":"provide_choices"},null]}],null],"train_washroom":["ev",{"VAR?":"loc_train_washroom"},{"^->":"train_washroom_entry"},{"^->":"train_washroom_look"},{"^->":"train_washroom_exits"},{"^->":"train_washroom_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"train_washroom_bucket":["thread",{"->":"train_washroom_face_choices"},"done",{"#f":3}],"train_washroom_entry":["^Der Waschraum ist eng, metallisch und beleidigend praktisch. Wasser, Spiegel, Haken, Becken, ein Riegel, der zu dünn wirkt, um die Welt draußen aufzuhalten. Endlich ist Viktor nicht im Raum. Dafür bist du es.","\n","^Du ziehst die Handschuhe aus. Die Hände darunter sind feucht und gerötet. Eine Dame macht sich nicht nur frisch. Sie stellt die Oberfläche wieder her, an der andere ihre Urteile befestigen.","\n","done",{"#f":3}],"train_washroom_look":[["ev","str","^__Schaue__: Im Waschraum umher. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Der Raum ist noch immer zu klein für die Menge Welt, die er draußen halten soll. Wasser, Haken, Becken, Spiegel. Vor allem der Spiegel bleibt nützlich und unverschämt.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"train_washroom_face_choices":[["ev","str","^__Erkenne__: Dunkelbraunes Haar unter dem Reisehut.","/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"face_def"},{"f()":"lacks"},"&&","/ev",{"*":".^.c-0","flg":21},"ev","str","^__Erkenne__: Kastanienbraunes Haar, das Licht sammelt.","/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"face_def"},{"f()":"lacks"},"&&","/ev",{"*":".^.c-1","flg":21},"ev","str","^__Erkenne__: Aschblondes Haar, das sich zurücknimmt.","/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"face_def"},{"f()":"lacks"},"&&","/ev",{"*":".^.c-2","flg":21},"ev","str","^__Erkenne__: Rotbraunes Haar, sorgfältig gebändigt.","/str",{"VAR?":"name_def"},{"f()":"has"},{"VAR?":"face_def"},{"f()":"lacks"},"&&","/ev",{"*":".^.c-3","flg":21},{"c-0":["\n","ev",{"VAR?":"dark_brown"},"/ev",{"VAR=":"hair","re":true},"^Dunkelbraunes Haar rahmt Stirn und Schläfen. Im schwachen Lampenlicht wird es wärmer, als es im Wiener Morgen wirkte.","\n",{"->":".^.^.hair_style_choice"},{"->":".^.^.hair_style_choice"},{"#f":5}],"c-1":["\n","ev",{"VAR?":"chestnut"},"/ev",{"VAR=":"hair","re":true},"^Kastanienbraunes Haar fängt jedes bisschen Licht und macht dein Gesicht weicher, als dein Blick es erlaubt.","\n",{"->":".^.^.hair_style_choice"},{"->":".^.^.hair_style_choice"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"dark_blond_ash"},"/ev",{"VAR=":"hair","re":true},"^Dunkelblondes, aschbraun wirkendes Haar gibt dir etwas Zurückhaltendes, besonders unter dem dunklen Reisehut.","\n",{"->":".^.^.hair_style_choice"},{"->":".^.^.hair_style_choice"},{"#f":5}],"c-3":["\n","ev",{"VAR?":"auburn"},"/ev",{"VAR=":"hair","re":true},"^Rotbraunes Haar ist nie ganz unauffällig, auch wenn Nadeln, Hut und Sitte es zur Ordnung zwingen.","\n",{"->":".^.^.hair_style_choice"},"done",{"->":".^.^.hair_style_choice"},{"#f":5}],"hair_style_choice":["^Die Frisur ist nicht bloß Geschmack. Eine Frau trägt auch ihre Beherrschung auf dem Kopf.","\n","ev","str","^__Ordne__: Einen glatten Mittelscheitel und einen tiefen Knoten.","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Ordne__: Weiche Stirnwellen und einen sorgfältigen Chignon.","/str","/ev",{"*":".^.c-5","flg":20},"ev","str","^__Ordne__: Geflochtene Partien und einen schweren Knoten.","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Ordne__: Eine modisch gehobene Stirnpartie.","/str","/ev",{"*":".^.c-7","flg":20},{"c-4":["\n","ev",{"VAR?":"centre_part_low_bun"},"/ev",{"VAR=":"style","re":true},"^Der Mittelscheitel ist sauber, der Knoten tief und fest. Keine Locke bittet um Nachsicht.","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-5":["\n","ev",{"VAR?":"soft_waves_chignon"},"/ev",{"VAR=":"style","re":true},"^Die Stirnwellen sind weich gelegt, der Chignon sitzt sauber unter dem Hut. Zugänglicher, aber nicht weniger berechnet.","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-6":["\n","ev",{"VAR?":"braided_low_knot"},"/ev",{"VAR=":"style","re":true},"^Geflochtene Partien führen das Haar zur Ordnung zurück. Der Knoten im Nacken ist schwerer, ländlicher vielleicht, aber unter städtischer Hand gezähmt.","\n",{"->":".^.^.^.g-0"},{"#f":5}],"c-7":["\n","ev",{"VAR?":"raised_front_modern"},"/ev",{"VAR=":"style","re":true},"^Das Haar hebt sich über der Stirn mit jener neuen Fülle, die ältere Damen für Eitelkeit und jüngere für Freiheit halten. Unter dem Reisehut bleibt es gerade noch anständig.","\n",{"->":".^.^.^.g-0"},{"#f":5}]}],"g-0":["^Das Gesicht im Spiegel ist deutlich genug, um nicht mehr auszuweichen.","\n","ev","str","^__Erkenne__: Helle Haut, kühle Augen und scharfe Brauen.","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Erkenne__: Rosigen Teint, weichen Mund und wachen Blick.","/str","/ev",{"*":".^.c-9","flg":20},"ev","str","^__Erkenne__: Warmen Teint, dunklere Augen und ruhige Miene.","/str","/ev",{"*":".^.c-10","flg":20},"ev","str","^__Erkenne__: Blasse Haut, feine Züge und ein kontrolliertes Gesicht.","/str","/ev",{"*":".^.c-11","flg":20},"ev","str","^__Erkenne__: Ein markanteres Gesicht mit gerader Nase und festem Kinn.","/str","/ev",{"*":".^.c-12","flg":20},{"c-8":["\n","ev",{"VAR?":"cool_sharp"},"/ev",{"VAR=":"face","re":true},"^Dein Teint ist hell und kühl, die Brauen geben dem Gesicht mehr Bestimmtheit, als ein flüchtiger Blick erwartet.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-9":["\n","ev",{"VAR?":"soft_alert"},"/ev",{"VAR=":"face","re":true},"^Der Mund wirkt weicher als der Blick; zusammen macht dich das zugänglicher, aber nicht einfacher.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-10":["\n","ev",{"VAR?":"calm_dark_eyes"},"/ev",{"VAR=":"face","re":true},"^Der Teint ist wärmer, die Augen dunkler, die Miene ruhiger. Du wirkst weniger ätherisch als gegenwärtig: eine Frau aus Fleisch, Gedächtnis und Absicht.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-11":["\n","ev",{"VAR?":"fine_controlled"},"/ev",{"VAR=":"face","re":true},"^Die Züge sind fein, fast zerbrechlich, doch die Kontrolle darin ist zu sichtbar, um harmlos zu wirken. Wer dich für schwach hält, möchte es zu gern.","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-12":["\n","ev",{"VAR?":"marked_jaw"},"/ev",{"VAR=":"face","re":true},"^Die Linien sind weniger gefällig, als ein Porträtmaler sie gern hätte. Das Gesicht verrät eher Willen als Sanftmut.","\n",{"->":".^.^.^.g-1"},{"#f":5}]}],"g-1":["ev",{"VAR?":"face_def"},{"f()":"mark"},"pop","/ev","\n","^Du befestigst Hut und Nadeln, ziehst die Handschuhe wieder an und öffnest den Riegel. Das Gesicht, das nach Hohenreith reisen wird, ist wieder gesellschaftsfähig.","\n",{"->":"train_washroom"},null]}],null],"train_washroom_exits":[["ev","str","^__Verlasse__: Den Waschraum. ","#","^key:w","/#","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^__Gehe__: Gegen die Fahrtrichtung zurück ins Abteil. ","#","^key:n","/#","/str",{"VAR?":"face_def"},{"f()":"has"},"/ev",{"*":".^.c-1","flg":5},{"c-0":["\n","^Du ziehst den Riegel zurück und trittst seitlich wieder hinaus in den praktischen Wagen mit seinem harten Boden und dem Schild, das nun hinter dir liegt.","\n",{"->":"train_washroom_corridor"},null],"c-1":["\n","^Du gehst den Weg zurück: aus dem Waschraum, gegen die Fahrtrichtung durch den praktischen Wagen, den zweiten Wagen und den ersten Korridor bis zur Tür deines eigenen Abteils.","\n",{"->":"train_compartment_return"},"done",null]}],{"#f":3}],"train_compartment_return":["^Viktor hebt den Blick, als du wieder eintrittst. Er fragt nicht, ob alles in Ordnung sei. Er ist zu gut erzogen oder zu gut ausgebildet.","\n",{"->":"train_compartment"},null],"train_intro_end":["ev",{"VAR?":"intro_def"},{"f()":"mark"},"pop","/ev","\n","ev","str","^normal","/str",{"f()":"episode_end"},"pop","/ev","\n","^Der Zug beginnt langsamer zu werden. Der Rhythmus verändert sich zuerst im Boden, dann im Fenster, dann im Körper. Häuser sammeln sich neben der Strecke; ein Stationsdach erscheint zwischen Rauch und den dunklen Kämmen bewaldeter Hänge. ","#","^sfx[steam-whistle.ogg]","/#","\n","^Viktor legt das Memorandum zurück in die Mappe. „Ab jetzt“, sagt er, „reisen Blicke schneller als wir.“","\n","^Du richtest die Handschuhe.","\n","ev",{"VAR?":"noon"},"/ev",{"->":"advance_to_slot"},{"#f":3}],"railway_station":[{"->":"station_midday"},null],"station_midday":["ev",{"VAR?":"meal_plan_chosen"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"viktor"},{"VAR?":"loc_station_platform"},{"f()":"character_move_to"},"pop","/ev","\n","ev",{"VAR?":"viktor"},{"f()":"companion_join"},"pop","/ev","\n","^Die Station ist klein genug, dass der Zug kurz verlegen wirkt, als er dort hält. ","#","^chapter[Der Bahnhof] ","/#","#","^image[muerzzuschlag.png](portrait)","/#","\n","^Dampf hängt unter dem Stationsdach. Ein Gepäckträger mit zu großer Kappe eilt über den Bahnsteig. Jenseits des Gebäudes stampft ein Kutschpferd im gefrorenen Schlamm. Der Ortsname steht auf einem Schild, sachlich und kaiserlich, als hätte er nie vorgehabt, in einem Salon ausgesprochen zu werden. ","#","^gloss[Gepäckträger](Bahnhofsdienstmann für Koffer, Schachteln und jene kleine Demütigung, dass auch Besitz getragen werden muss.) ","/#","#","^gloss[Stationsdach](Überdachung des Bahnsteigs. Sie schützt Reisende vor Wetter, nicht vor Blicken.)","/#","\n","ev",{"VAR?":"MealPlan.dining_car"},{"f()":"meal"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev",{"VAR?":"meal_taken_in_train"},{"f()":"state_reach"},"pop","/ev","\n","^Der Speisewagen hat dir ein kontrolliertes Mittagessen gegeben. Tischtuch, Besteck, gedämpfte Stimmen, Suppe unter Bewegung. Jetzt bleibt am Bahnhof vor allem der Umstieg.","\n",{"->":".^.^.^.41"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"MealPlan.station_restaurant"},{"f()":"meal"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Die Bahnhofsrestauration wartet mit Kaffee, Suppe, Zeitungen und dem Trost, dass jede Reiseklasse am Tisch wieder neu sortiert werden kann. ","#","^gloss[Bahnhofsrestauration](Gastwirtschaft am Bahnhof. Praktisch, laut und gesellschaftlich nützlich, weil Menschen dort essen, während sie so tun, als seien sie nur unterwegs.)","/#","\n",{"->":".^.^.^.7"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"MealPlan.light_refreshment"},{"f()":"meal"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Tee, Gebäck und ein wenig Ruhe haben deinen Hunger nicht beseitigt, nur vertagt. Der Körper nimmt solche Höflichkeiten nicht immer dankbar an.","\n",{"->":".^.^.^.7"},null]}],[{"->":".^.b"},{"b":["\n","^Du hast die Frage des Mittagessens noch nicht entschieden. Das ist kein Skandal, aber der Bahnhof wird aus kleinen Unterlassungen rasch praktische Schwierigkeiten machen.","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":".^.^.^.41"},null]}],"nop","\n",{"->":"station_platform"},{"#f":3}],"station_midday_episode_bucket":["thread",{"->":"station_episode_viktor_current_room"},"thread",{"->":"station_episode_viktor_public_arrival"},"done",{"#f":3}],"station_midday_end":["done",{"#f":3}],"station_platform":["ev",{"VAR?":"loc_station_platform"},{"^->":"station_platform_entry"},{"^->":"station_platform_look"},{"^->":"station_platform_exits"},{"^->":"station_platform_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"station_platform_entry":["ev",{"VAR?":"noticed_as_official_arrival"},{"f()":"state_reach"},"pop","/ev","\n","^Der Zug atmet aus. Menschen bewegen sich nicht chaotisch, sondern nach unsichtbaren Ranglinien. Wer zuerst aussteigt, wer wartet, wer trägt, wer nicht trägt, wer so tut, als habe er nichts gesehen. Viktor steht neben dir, korrekt genug, um als Sekretär durchzugehen, und zu aufmerksam, um einer zu sein.","\n","done",{"#f":3}],"station_platform_look":[["ev","str","^__Schaue__: Über den Bahnsteig. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Unter dem Stationsdach stehen Reisende, Kisten, Körbe und jene kleinen Gruppen, die nur auf Bahnhöfen entstehen. Niemand starrt offen. Stattdessen entstehen Leerstellen in den Bewegungen der Leute. Ein Blick wandert zu spät weiter. Ein Schritt ändert seine Richtung. Ein Gespräch besteht plötzlich nur noch aus Endungen.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"station_platform_exits":[["ev","str","^__Gehe__: Zur Kutsche. ","#","^key:s","/#","/str",{"VAR?":"baggage_handed_over"},{"f()":"state_reached"},"/ev",{"*":".^.c-0","flg":5},{"c-0":["\n",{"->":"station_baggage_and_carriage"},"done",null]}],{"#f":3}],"station_platform_bucket":["thread",{"->":"station_platform_sign"},"thread",{"->":"station_platform_listen"},"thread",{"->":"station_platform_waiting_people"},"thread",{"->":"station_late_meal_choice"},"thread",{"->":"station_restaurant_offer"},"thread",{"->":"station_baggage"},"done",{"#f":3}],"station_platform_sign":[["ev","str","^__Lies__: Das Schild am Bahnsteig. ","#","^key:x","/#","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Der Ortsname ist mit schwarzer Farbe auf hellem Grund gemalt, zweckmäßig, kaiserlich, ohne jede Rücksicht auf den Eindruck, den er auf Ankommende macht. Die Buchstaben sehen aus, als hätten sie nur deshalb Haltung, weil man sie angeschraubt hat.","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"station_platform_listen":[["ev","str","^__Höre__: Auf den Bahnhof.","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Unter dem Zischen der Lokomotive liegen kleinere Geräusche. Ein Koffer wird auf Holz abgesetzt. Ein Beamter räuspert sich. Pferdehufe schlagen im gefrorenen Schlamm. Eine Frau beginnt ein Gebet und verschluckt das zweite Wort.","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"station_platform_waiting_people":[["ev","str","^__Untersuche__: Die Wartenden.","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Niemand scheint nur zu warten. Die einen zählen Gepäckstücke, die anderen Rangzeichen, wieder andere mögliche Fehler. Der Bahnhof ist kein Ort, an dem man unbemerkt ankommt. Er ist nur höflich genug, diese Tatsache nicht auszusprechen.","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"station_restaurant_offer":[["ev","str","^__Speise__: In der Bahnhofsrestauration.","/str",{"VAR?":"MealPlan.station_restaurant"},{"f()":"meal"},{"VAR?":"meal_taken_at_station"},{"f()":"state_before"},"&&","/ev",{"*":".^.c-0","flg":5},{"c-0":["\n",{"->":"station_restaurant_room"},"done",null]}],null],"station_late_meal_choice":[["ev","str","^__Speise__: In der Bahnhofsrestauration, auch wenn es eilt.","/str",{"VAR?":"MealPlan.meal_unset"},{"f()":"meal"},{"VAR?":"meal_skipped_or_light"},{"f()":"state_before"},"&&","/ev",{"*":".^.c-0","flg":5},"ev","str","^__Nimm__: Nur Tee und etwas Gebäck.","/str",{"VAR?":"MealPlan.meal_unset"},{"f()":"meal"},{"VAR?":"meal_skipped_or_light"},{"f()":"state_before"},"&&","/ev",{"*":".^.c-1","flg":5},"ev","str","^__Verzichte__: Auf eine eigentliche Mahlzeit.","/str",{"VAR?":"MealPlan.meal_unset"},{"f()":"meal"},{"VAR?":"meal_skipped_or_light"},{"f()":"state_before"},"&&","/ev",{"*":".^.c-2","flg":5},{"c-0":["\n","^Viktor sieht auf die Bahnhofsuhr. \"Für ein ordentliches Essen ist wenig Zeit. Für eine schlechte Entscheidung immer genug.\"","\n","ev",{"VAR?":"MealPlan.station_restaurant"},{"f()":"meal_choose"},"pop","/ev","\n","^Eine warme Suppe ist kein Luxus, wenn ein fremdes Haus den restlichen Tag besitzen wird.","\n",{"->":"station_restaurant_room"},null],"c-1":["\n","^Viktor sieht auf die Bahnhofsuhr. \"Für ein ordentliches Essen ist wenig Zeit. Für eine schlechte Entscheidung immer genug.\"","\n","ev",{"VAR?":"MealPlan.light_refreshment"},{"f()":"meal_choose"},"pop","/ev","\n","ev",{"VAR?":"meal_skipped_or_light"},{"f()":"state_reach"},"pop","/ev","\n","^Tee, Gebäck, ein paar Minuten Sitzen. Nicht genug, aber genug, um später nicht von Schwäche überrascht zu werden.","\n",{"->":"provide_choices"},null],"c-2":["\n","^Viktor sieht auf die Bahnhofsuhr. \"Für ein ordentliches Essen ist wenig Zeit. Für eine schlechte Entscheidung immer genug.\"","\n","ev",{"VAR?":"MealPlan.skipped"},{"f()":"meal_choose"},"pop","/ev","\n","ev",{"VAR?":"meal_skipped_or_light"},{"f()":"state_reach"},"pop","/ev","\n","^Du behältst Zeit und verlierst Wärme. Der Körper wird sich die Rechnung merken.","\n",{"->":"provide_choices"},"done",null]}],null],"station_baggage":[["ev","str","^__Überblicke__: Eine disziplinierte amtliche Zusammenstellung.","/str",{"VAR?":"baggage_handed_over"},{"f()":"state_before"},"/ev",{"*":".^.c-0","flg":5},"ev","str","^__Überblicke__: Das Gepäck einer eleganten Dame.","/str",{"VAR?":"baggage_handed_over"},{"f()":"state_before"},"/ev",{"*":".^.c-1","flg":5},"ev","str","^__Überblicke__: Das Gepäck einer Darstellerin.","/str",{"VAR?":"baggage_handed_over"},{"f()":"state_before"},"/ev",{"*":".^.c-2","flg":5},"ev","str","^__Überblicke__: Eine praktische Auswahl, die zu viel Vorbereitung verrät.","/str",{"VAR?":"baggage_handed_over"},{"f()":"state_before"},"/ev",{"*":".^.c-3","flg":5},"ev","str","^__Überblicke__: Ein übertriebener Haufen, der jede Tarnung erschwert.","/str",{"VAR?":"baggage_handed_over"},{"f()":"state_before"},"/ev",{"*":".^.c-4","flg":5},{"c-0":["\n","^Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Zuerst kommt ein nüchterner Reisekoffer mit vom Gebrauch stumpfen Messingecken, dann eine Aktenmappe, dann eine Hutschachtel, dann der schmale schwarze Kasten, dessen Inhalt sowohl einen Priester als auch einen Taschenspieler in Verlegenheit bringen würde, falls einer von beiden ihn ohne Phantasie durchsuchte.","\n",{"->":"station_baggage_after_choice"},null],"c-1":["\n","^Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Zuerst kommt ein großer Koffer aus dunklem Leder, dann ein kleinerer für Wäsche, dann eine runde Hutschachtel, ein Reise-Necessaire und das Ridikül, das du zu nahe bei der Hand behältst, als dass ein Gepäckträger seine Bedeutung missverstehen dürfte. ","#","^gloss[Reise-Necessaire](Kasten oder Tasche für Waschzeug, Fläschchen, Bürsten und jene Ausrüstung, mit der eine Dame nach einer Reise wieder wie eine Dame auszusehen hat.)","/#","\n",{"->":"station_baggage_after_choice"},null],"c-2":["\n","^Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.","\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Zuerst kommt ein respektabler Koffer, dann eine Hutschachtel, dann ein Reisekasten mit Handschuhen, Schleiern, Bändern, Visitenkarten und kleinen Gegenständen, mit denen man ein Zimmer überreden kann, an Kräfte zu glauben, die längst anwesend sind.","\n",{"->":"station_baggage_after_choice"},null],"c-3":["\n","^Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Zuerst kommt ein abgenützter, an den Ecken verstärkter Koffer, dann eine Ledertasche mit Notizheften, Bleistiften, gefalteten Karten, Ersatzhandschuhen, einer kleinen Lampe und genug Notwendigkeiten, um jeden zu beleidigen, der Frauen lieber dekorativ hat.","\n",{"->":"station_baggage_after_choice"},null],"c-4":["\n","^Dein Gepäck wird in Etappen ausgeladen. Was zuerst sichtbar wird, ist nie ganz zufällig. Gepäck ist die kleine Autobiographie, die Bedienstete lesen dürfen.","\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","^Zuerst kommt ein Koffer, dann ein zweiter, dann eine Hutschachtel, dann eine Reisedecke, dann ein Toilettenkasten, dann der schmale schwarze Kasten, dann ein kleineres Paket, von dem du vergessen hattest, dass es das Packen überlebt hat. Am Ende sieht selbst Viktor einen Augenblick lang zahlenmäßig unterlegen aus.","\n",{"->":"station_baggage_after_choice"},"done",null]}],null],"station_baggage_after_choice":["^Viktor überwacht die Umladung mit knapper Höflichkeit. Er trägt nicht wie ein Diener. Er weist an wie ein Mann, der vorgibt, nicht zu befehlen.","\n","^Die kleine Szene vor dem Waggon ist harmlos genug, um gefährlich zu sein. Ein Gepäckträger wartet mit geneigtem Kopf. Der Kutscher steht einige Schritte entfernt. Viktor ist nah genug, um dir beim Aussteigen die Hand zu reichen, aber nicht so nah, dass er es ohne dein stilles Einverständnis täte. Drei Männer, drei Stände, drei verschiedene Arten von Nützlichkeit.","\n","^Was hier geschieht, wird niemand in einem Bericht erwähnen. Gerade deshalb wird es behalten.","\n",{"->":"station_manners_puzzle"},null],"station_manners_puzzle":[["ev","str","^__Warte__: Bis Viktor seine Hand anbietet. ","#","^key:z","/#","/str",{"VAR?":"class"},{"VAR?":"noble"},"?","/ev",{"*":".^.c-0","flg":21},"ev","str","^__Gewähre__: Viktor die Hand und dem Gepäckträger das Gepäck.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Dirigiere__: \"Zuerst den kleineren Kasten, wenn ich bitten darf.\"","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Reize__: Viktor einen Augenblick zu lang mit ausgestreckter Hand warten lassen.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Verplappere dich__: \"Ach, das macht doch zu viel Mühe.\"","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Greife zu__: Dem Gepäckträger beinahe den Koffer abnehmen. ","#","^key:t","/#","/str",{"VAR?":"class"},{"VAR?":"working"},"?","/ev",{"*":".^.c-5","flg":21},{"c-0":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du wartest einen Atemzug, bis Viktor seine Hand anbietet, und nimmst sie dann, als wäre dies keine Hilfe, sondern die Ordnung der Welt.","\n","^Du gibst ihm nicht dein Gewicht. Nur deine Hand. Genau genug, dass er dienen darf, ohne Diener zu werden. Der Gepäckträger senkt den Blick ein wenig tiefer. Der Kutscher sieht, was er sehen muss. Eine Dame, die ihren Rang nicht beweist, weil Beweise für Leute ohne Rang sind.","\n","ev",{"VAR?":"public_mask_established"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du nimmst Viktors angebotene Hand knapp und sicher, dankst ihm mit einem Nicken und lässt den Gepäckträger das Gepäck nehmen.","\n","^Es ist gutes Benehmen ohne Prunk. Nicht zu vertraut gegenüber Viktor, nicht zu freundlich gegenüber dem Gepäckträger, nicht so kalt, dass es nach Unsicherheit riecht. Mittelstand könnte dies lernen. Adel könnte es billigen. Dienstboten würden erkennen, dass du ihre Arbeit nicht mit Herablassung verwechselst.","\n","ev",{"VAR?":"public_mask_established"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du steigst selbst aus, bevor Viktor sich entscheiden kann, und bittest den Gepäckträger sachlich, zuerst den kleineren Kasten zu nehmen.","\n","^Das ist nicht ganz falsch, aber auch nicht ganz richtig. Viktor bemerkt die kleine Missachtung der erwarteten Form. Der Gepäckträger gehorcht erleichtert, weil klare Anweisungen leichter zu tragen sind als feine Ungewissheit. Der Kutscher ordnet dich eher der Nützlichkeit als dem Rang zu.","\n","ev",{"VAR?":"public_mask_strained"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"staff_as_witnesses_noticed"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-3":["\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_unreliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du lässt Viktor zu lange mit ausgestreckter Hand warten und lächelst erst dann, als hättest du ihn absichtlich geprüft.","\n","^Es ist fast ein Fauxpas, gerettet durch Anmut und die Tatsache, dass Männer Demütigungen leichter verzeihen, wenn sie sich wie Aufmerksamkeit fühlen. Viktor hilft dir hinunter. Seine Hand bleibt vollkommen korrekt. Sein Blick nicht ganz.","\n","ev",{"VAR?":"public_mask_strained"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-4":["\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du entschuldigst dich beim Gepäckträger dafür, dass deine Sachen Mühe machen, und greifst selbst nach einem Koffer.","\n","^Der Gepäckträger erstarrt, als hättest du ihm eine philosophische Frage gestellt. Viktor tritt sofort dazwischen, höflich genug, um die Rettung wie Zufall aussehen zu lassen. Du hast gegen keine Moral verstoßen, nur gegen die unsichtbare Arbeitsteilung, auf der diese kleine Welt ruht.","\n","ev",{"VAR?":"public_mask_strained"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"staff_as_witnesses_noticed"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-5":["\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_control","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du springst hinunter, bevor jemand dir helfen kann, und nimmst dem Gepäckträger beinahe den Koffer aus der Hand.","\n","^Für eine Sekunde bist du schneller als deine Verkleidung. Der Gepäckträger hält fest, Viktor greift nach deinem Ellbogen, der Kutscher sieht weg, weil Wegsehen manchmal die höflichste Form von Zeugenschaft ist. Es ist kein Unglück. Nur ein Riss, klein genug, um ihn mit Haltung zu schließen.","\n","ev",{"VAR?":"public_mask_strained"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"staff_as_witnesses_noticed"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["ev",{"VAR?":"baggage_handed_over"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"provide_choices"},null]}],null],"station_restaurant_room":["ev",{"VAR?":"loc_station_restaurant"},{"^->":"station_restaurant_entry"},{"^->":"station_restaurant_look"},{"^->":"station_restaurant_exits"},{"^->":"station_restaurant_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"station_restaurant_entry":["ev",{"VAR?":"meal_taken_at_station"},{"f()":"state_reach"},"pop","/ev","\n","^Die Bahnhofsrestauration ist wärmer als der Bahnsteig und weniger privat als das Abteil. Ein Kellner wischt einen Tisch, als könne er Reise, Klasse und Hunger mit demselben Tuch ordnen. An der Wand hängt eine Uhr, unter ihr ein Fahrplan, daneben ein Bild des Kaisers, das in diesem Licht mehr Geduld als Macht zeigt. ","#","^gloss[Fahrplan](Gedruckte Zusicherung, dass selbst Entfernung eine Bürokratie besitzt.)","/#","\n","^Viktor wählt einen Tisch, von dem aus er Tür und Fenster sehen kann. Du wählst, ob du das bemerkst.","\n","done",{"#f":3}],"station_restaurant_look":[["ev","str","^__Schaue__: Durch den Gastraum. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Der Raum ist zu klein für Geheimnisse und groß genug für Gerüchte. Reisende essen mit der Ungeduld von Menschen, die weiter müssen. Der Kellner sieht alles, ohne etwas gesehen zu haben.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"station_restaurant_exits":[["ev","str","^__Verlasse__: Die Bahnhofsrestauration. ","#","^key:n","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Der Bahnsteig empfängt dich mit kalter Luft, Dampf und dem Gefühl, wieder öffentlich zu sein.","\n",{"->":"station_platform"},"done",null]}],{"#f":3}],"station_restaurant_bucket":["thread",{"->":"station_restaurant_viktor_table"},"done",{"#f":3}],"station_restaurant_viktor_table":[["ev","str","^__Wahre Form__: \"Ein Tisch, der Ihnen Ausblick erlaubt. Wie aufmerksam.\"","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: \"Sie setzen sich nie mit dem Rücken zur Tür.\"","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Entschärfe__: \"Ich verspreche, weder durch das Fenster noch durch die Küche zu entkommen.\"","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^\"Ein Tisch, der Ihnen Ausblick erlaubt. Wie aufmerksam.\"","\n","^Viktor zieht den Stuhl nicht zu rasch zurück. \"Gewohnheit, gnädiges Fräulein.\"","\n",{"->":"station_restaurant_lunch_end"},{"#f":5}],"c-1":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^\"Sie setzen sich nie mit dem Rücken zur Tür.\"","\n","^\"Nicht, solange ich dafür bezahlt werde, es nicht zu tun.\"","\n",{"->":"station_restaurant_lunch_end"},{"#f":5}],"c-2":["\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^\"Ich verspreche, weder durch das Fenster noch durch die Küche zu entkommen.\"","\n","^\"Nehmen Sie mir nicht alle beruflichen Hoffnungen.\"","\n",{"->":"station_restaurant_lunch_end"},{"#f":5}]}],null],"station_restaurant_lunch_end":["^Das Essen ist einfach. Suppe, Brot, Kaffee, vielleicht ein Stück kaltes Fleisch. Es erfüllt keinen Traum, aber einen Zweck. Als du wieder aufstehst, hat der Bahnhof dich nicht weniger fremd gemacht, nur etwas belastbarer.","\n",{"->":"station_platform"},null],"station_episode_viktor_current_room":[["ev","str","^__Frage__: Viktor, was er vom Bahnhof hält.","/str",{"VAR?":"viktor"},{"f()":"present"},{"VAR?":"loc_station_platform"},{"f()":"loc"},"&&","/ev",{"*":".^.c-0","flg":21},{"c-0":["\n","^\"Ein Bahnhof ist selten nur ein Bahnhof\", sagt Viktor. \"Er zeigt, wer erwartet wird, wer abgefertigt wird und wer glaubt, ungesehen warten zu können.\"","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"station_episode_viktor_public_arrival":[["ev","str","^__Frage__: Viktor, ob die Leute dich ansehen.","/str",{"VAR?":"viktor"},{"f()":"present"},{"VAR?":"noticed_as_official_arrival"},{"VAR?":"public_mask_established"},{"f()":"state_between"},"&&","/ev",{"*":".^.c-0","flg":21},{"c-0":["\n","^\"Ja\", sagt er. \"Aber noch nicht gefährlich. Neugier ist leichter zu lenken als Misstrauen.\"","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"station_baggage_and_carriage":["ev",{"VAR?":"carriage_arranged"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"road_departure_ready"},{"f()":"state_reach"},"pop","/ev","\n","^Die Kutsche aus Hohenreith wartet jenseits des Stationshofes. Dunkelgrüner Lack, schwarze Räder, das gräfliche Wappen dezent auf der Tür, zwei Pferde bereits unruhig im Geschirr. Der Kutscher nimmt den Hut ab, als er dich sieht. Nicht zu tief. Tief genug für Rang, nicht tief genug für Ehrfurcht. ","#","^sfx[horse-neigh.ogg]","/#","\n","^\"Gnädiges Fräulein? Herr Sekretär?\"","\n","ev",{"VAR?":"class"},{"VAR?":"noble"},"?","/ev",[{"->":".^.b","c":true},{"b":["\n","^Man hat ihm genug gesagt, um dich einzuordnen. Das ist eine Höflichkeit. Es ist auch eine Warnung.","\n",{"->":".^.^.^.26"},null]}],[{"->":".^.b"},{"b":["\n","^Er zögert bei dir um das kleinste Maß. Das Zögern ist keine Unhöflichkeit. Es ist Berechnung. Erste Klasse, Hofschreiben, kein Titel außer Fräulein, und ein Mann neben dir, der aussieht, als hätte er Menschen für weniger verhaften lassen als Starren.","\n",{"->":".^.^.^.26"},null]}],"nop","\n","^Viktor antwortet, bevor du es kannst.","\n","^\"Vom Jagdhaus Hohenreith?\"","\n","^\"Jawohl, Herr Sekretär. Der Weg ist befahrbar. Wenn der Nebel nicht dichter wird, sollten wir Eibenreith vor Einbruch der Dunkelheit erreichen.\"","\n","^Das Wort tritt ohne Zeremonie in die Luft.","\n","^Eibenreith.","\n","^Nicht Hohenreith, der Name, der in sauberer Hand auf der Einladung steht. Eibenreith. Das Dorf darunter. Ein kleinerer Name. Älter im Mund. Ein Name mit Wurzeln statt Briefpapier.","\n","ev","str","^normal","/str",{"f()":"episode_end"},"pop","/ev","\n","ev",{"VAR?":"afternoon"},{"f()":"time_move_to"},"pop","/ev","\n","ev",{"VAR?":"loc_carriage"},{"f()":"loc_move_to"},"pop","/ev","\n",{"->":"carriage_ride"},null],"coach_journey":[{"->":"carriage_ride"},null],"carriage_ride":["ev",{"VAR?":"viktor"},{"VAR?":"loc_carriage"},{"f()":"character_move_to"},"pop","/ev","\n","ev",{"VAR?":"viktor"},{"f()":"companion_join"},"pop","/ev","\n","^Die Kutsche lässt die Station hinter sich und damit das letzte leicht erkennbare Zeichen der Monarchie. ","#","^chapter[Die Kutschenfahrt] ","/#","#","^music[Kaiserpunk Jodler.mp3](crossfade, loop, lead=4)","/#","\n","^Zuerst folgt der Weg einem Tal, in dem Telegraphendraht ihm noch Gesellschaft leistet und der Fluss in einem hellen, steinigen Bett läuft. Sägewerke, umzäunte Wiesen und Bauernhäuser erscheinen und verschwinden hinter Fichtenbeständen. Die Berge steigen nicht auf einmal. Sie rücken zuständigkeitsweise vor: ein bewaldeter Hang links, eine graue Wand aus Kalk im Norden, ein weiterer Rücken im Osten, bis selbst die Wolken in Dienst getreten scheinen. ","#","^gloss[Telegraphendraht](Drahtleitung für elektrische Nachrichten. Sehr modern, solange man nicht fragt, welche Dinge Menschen dadurch nur schneller missverstehen.) ","/#","#","^gloss[Sägewerk](Ort, an dem Wald in Bretter, Lohn und Sägemehl übersetzt wird.)","/#","\n","^Der Kutscher nennt Orte, wenn Viktor fragt, doch die Namen sind örtlich und praktisch, gedacht für Männer, die wissen, welche Brücke bei Hochwasser nachgibt und welcher Hof störrische Pferde hält. Irgendwo hinter den sichtbaren Rücken, sagt er, liegt der große weiße Rücken des Hochschwab. Nach Osten, jenseits von Wald und Pass, hält die Hohe Veitsch ihr eigenes Wetter. Er sagt das nicht wie ein Führer, sondern wie ein Mann, der Nachbarn erklärt, die vielleicht guter Laune sind und vielleicht nicht. ","#","^gloss[Hochschwab](Gebirgsstock der Obersteiermark. Für Wiener eine Landschaft, für Einheimische Wetter, Wasser, Wege und Verschüttungen.)","/#","\n",{"->":"carriage_room"},{"#f":3}],"carriage_ride_episode_bucket":["thread",{"->":"carriage_episode_viktor_road"},"thread",{"->":"carriage_episode_coachman_places"},"done",{"#f":3}],"carriage_ride_end":["done",{"#f":3}],"carriage_room":["ev",{"VAR?":"loc_carriage"},{"^->":"carriage_entry"},{"^->":"carriage_look"},{"^->":"carriage_exits"},{"^->":"carriage_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"carriage_entry":["^Die Kutsche schaukelt nicht wie ein Salon. Sie widerspricht dem Körper bei jeder Rinne. Nach der Bahn wirkt die Straße nicht langsamer, sondern persönlicher: Sie gibt jede Unebenheit mit eigener Handschrift weiter.","\n","done",{"#f":3}],"carriage_look":[["ev","str","^__Schaue__: Durch das Kutschenfenster. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Draußen läuft das Tal neben euch her, erst offen genug für Telegraphendraht und Flussbett, dann enger, dunkler, nasser. Die Straße gehört noch zur Karte, aber immer weniger zu Wien.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"carriage_exits":[["ev","str","^__Warte__: Während das Tal enger wird. ","#","^key:z","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"carriage_graben_entry"},"done",null]}],{"#f":3}],"carriage_bucket":["thread",{"->":"carriage_touch_window"},"thread",{"->":"carriage_listen_wheels"},"thread",{"->":"carriage_observe_viktor"},"thread",{"->":"carriage_observe_coachman"},"done",{"#f":3}],"carriage_touch_window":[["ev","str","^__Berühre__: Das kalte Kutschenfenster.","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Das Glas ist kälter, als es im Inneren der Kutsche sein dürfte. Feuchtigkeit sammelt sich an deinem Handschuh und verschwindet sofort wieder, als hätte sie es sich anders überlegt. Draußen streifen Zweige so nah vorbei, dass sie die Scheibe beinahe mit Nägeln prüfen.","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"carriage_listen_wheels":[["ev","str","^__Höre__: Auf die Räder im Tal.","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Auf der offenen Straße ist das Geräusch der Räder noch Rhythmus: Holz, Eisen, Stein, Wiederholung. Es lässt sich fast zählen. Vielleicht beruhigt deshalb jede moderne Ordnung so gern: Sie gibt dem Ungewissen Takt.","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"carriage_observe_viktor":[["ev","str","^__Untersuche__: Viktors Reaktion. ","#","^key:x","/#","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Viktor betrachtet nicht die Landschaft. Er betrachtet ihre Möglichkeiten: Engstellen, Böschungen, tote Winkel, die Entfernung bis zum Kutscher, die Frage, wie rasch man aus einer Kutsche steigt, wenn die Straße selbst dagegen ist.","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"carriage_observe_coachman":[["ev","str","^__Bemerke__: Wie der Kutscher spricht.","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Der Kutscher erklärt nichts, wenn Viktor nicht fragt. Das ist keine Stumpfheit. Es ist Ortskenntnis. Wer hier lebt, weiß, welche Dinge fremd genug sind, dass man sie zeigen muss, und welche Dinge zu nah sind, um sie zu benennen.","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"carriage_graben_entry":["ev",{"VAR?":"managed_landscape_seen"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"city_order_receding"},{"f()":"state_reach"},"pop","/ev","\n","^Das Haupttal verengt sich.","\n","^Der Weg biegt davon in einen Seitengraben, und die Veränderung ist augenblicklich. Der Klang ändert sich. Die Räder klingen nicht mehr gegen offene Entfernung, sondern mahlen zwischen Böschungen, Wurzeln und nassem Stein. Die Luft riecht nach Lauberde, Harz und kaltem Wasser. Eiben erscheinen zwischen den Fichten in dunkler, unwahrscheinlicher Geduld, ihre Nadeln zu schwarz für den Nachmittag. ","#","^gloss[Seitengraben](Ein kleineres Tal, das von einem Haupttal abzweigt. Auf der Karte eine Linie, in der Kutsche ein Eintritt.) ","/#","#","^gloss[Eiben](Dunkle, langsam wachsende Nadelbäume. Giftig, langlebig und daher für Menschen mit Aberglauben oder Bildung gleichermaßen verdächtig.)","/#","\n","^\"Eibenreither Graben\", sagt der Kutscher und bekreuzigt sich so rasch, dass die Geste auch einem Schlagloch gegolten haben könnte.","\n","^Viktor bemerkt es. Natürlich bemerkt er es.","\n","^\"Schlechter Weg?\", fragt er.","\n","^\"Alter Weg\", sagt der Kutscher.","\n","^Eine Weile spricht niemand.","\n","ev",{"VAR?":"valley_order_emerging"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"local_rules_beginning"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"old_boundary_felt"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"roadside_statue_room"},null],"roadside_statue_room":["ev",{"VAR?":"loc_roadside_statue"},{"^->":"roadside_statue_entry"},{"^->":"roadside_statue_look"},{"^->":"roadside_statue_exits"},{"^->":"roadside_statue_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"roadside_statue_entry":["ev",{"VAR?":"religious_markers_seen"},{"f()":"state_reach"},"pop","/ev","\n","^Du beobachtest die Bäume.","\n","^Es gibt Wälder, die zu Geschichten einladen, weil sie hübsch sind, und Wälder, die Geschichten zurückweisen, weil das, was dort geschah, keine Zeugen brauchte. Dieser gehört zur zweiten Art. Seine Stämme stehen eng, nicht wild, sondern mit der Haltung einer Menge, die Platz macht für etwas, das vor langer Zeit durch sie getragen wurde.","\n","^An einem Hang oberhalb des Weges, halb vom Unterholz verschluckt, erblickst du Stein.","\n","^Ein Wegheiligtum vielleicht. Ein Grenzzeichen. Eine Figur. Die Kutsche rollt schon vorbei, bevor deine Augen sich auf ihre Form einigen können. Für einen Augenblick bleibt der Eindruck eines Frauenkopfes zurück, geneigt nicht im Gebet, sondern im Lauschen. ","#","^image[statue.png](square) ","/#","#","^gloss[Wegheiligtum](Religiöses Zeichen an Straße oder Weg: Kreuz, Bildstock, Heiligenfigur. Es erklärt, dass der Weg nicht nur Richtung, sondern auch Aufsicht besitzt.) ","/#","#","^gloss[Grenzzeichen](Markierung einer Grenze. Manche Grenzen trennen Besitz, andere Gewohnheit, und die älteren geben sich selten Mühe, lesbar zu bleiben.)","/#","\n","^Der Eindruck bleibt im Nacken sitzen.","\n","done",{"#f":3}],"roadside_statue_look":[["ev","str","^__Schaue__: Zu dem Hang zurück. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Die Kutsche ist bereits weiter. Der Hang, der Stein, der mögliche Frauenkopf: alles ist wieder Wald geworden. Das macht es nicht weniger wirklich. Nur weniger zitierfähig.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"roadside_statue_exits":[["ev","str","^__Warte__: Bis der Graben sich öffnet. ","#","^key:z","/#","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},"/ev",{"*":".^.c-0","flg":5},{"c-0":["\n","^Der Graben öffnet sich widerwillig.","\n",{"->":"afternoon_approach_choice"},"done",null]}],{"#f":3}],"roadside_statue_bucket":["thread",{"->":"supernatural_faculty_choice"},"thread",{"->":"roadside_viktor_response"},"done",{"#f":3}],"supernatural_faculty_choice":[["ev","str","^__Leugne__: Nichts. Nur altes Gestein und bewegte Zweige.","/str",{"VAR?":"faculty_committed"},{"f()":"state_before"},"/ev",{"*":".^.c-0","flg":5},"ev","str","^__Spüre__: Eine körperliche Warnung, ehe der Gedanke folgt.","/str",{"VAR?":"faculty_committed"},{"f()":"state_before"},"/ev",{"*":".^.c-1","flg":5},"ev","str","^__Deute__: Ein Muster, das andere übersehen würden.","/str",{"VAR?":"faculty_committed"},{"f()":"state_before"},"/ev",{"*":".^.c-2","flg":5},"ev","str","^__Nutze__: Den Eindruck, weil andere ihn von dir erwarten.","/str",{"VAR?":"faculty_committed"},{"f()":"state_before"},"/ev",{"*":".^.c-3","flg":5},{"c-0":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"VAR?":"no_claim_made"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"faculty_committed"},{"f()":"state_reach"},"pop","/ev","\n","^Du hältst dich an das, was ein Bericht tragen kann. Stein. Hang. Unterholz. Bewegung. Alles andere ist Ermüdung, Erwartung oder die Unverschämtheit eines Waldes, der zu gut komponiert ist.","\n",{"->":"provide_choices"},null],"c-1":["\n","ev",{"^var":"route_sapphic","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"VAR?":"sensory_anomaly_framed"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"faculty_committed"},{"f()":"state_reach"},"pop","/ev","\n","^Der Nacken zieht sich zusammen, bevor du einen Grund dafür hast. Nicht Furcht. Wiedererkennen wäre schlimmer. Dein Körper ist manchmal schneller als deine gebildeten Ausreden.","\n",{"->":"provide_choices"},null],"c-2":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"VAR?":"intuition_framed"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"faculty_committed"},{"f()":"state_reach"},"pop","/ev","\n","^Du glaubst nicht an zufällige Blickführung. Der Hang, der Stein, der alte Weg, das Kreuzzeichen des Kutschers: Es ist noch kein Beweis. Aber es ist eine Anordnung.","\n",{"->":"provide_choices"},null],"c-3":["\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"VAR?":"performance_framed"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"faculty_committed"},{"f()":"state_reach"},"pop","/ev","\n","^Vielleicht ist dort nichts. Vielleicht ist dort etwas. Für den Moment genügt, dass alle Beteiligten glauben, du könntest mehr gesehen haben als sie. Ein Ruf ist manchmal ein Instrument, ehe er eine Lüge wird.","\n",{"->":"provide_choices"},"done",null]}],null],"roadside_viktor_response":[["ev","str","^__Wahre Form__: \"Ein Zeichen am Weg. Ich möchte es nicht voreilig benennen.\"","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},{"^->":"roadside_viktor_response_done"},"turns",0,"<","&&","/ev",{"*":".^.c-0","flg":21},"ev","str","^__Prüfe__: \"Ein Grenz- oder Wegzeichen. Ich wüsste gern, wohin dieser Pfad führt.\"","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},{"^->":"roadside_viktor_response_done"},"turns",0,"<","&&","/ev",{"*":".^.c-1","flg":21},"ev","str","^__Benenne__: \"Vielleicht eine Frau im Wald. Oder ein Stein, der eine sein wollte.\"","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},{"^->":"roadside_viktor_response_done"},"turns",0,"<","&&","/ev",{"*":".^.c-2","flg":21},"ev","str","^__Entschärfe__: \"Nur Bäume. Die Art, bei der man für Herren mit Revolvern dankbar wird.\"","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},{"^->":"roadside_viktor_response_done"},"turns",0,"<","&&","/ev",{"*":".^.c-3","flg":21},"ev","str","^__Locke__: \"Würden Sie mir glauben, wenn ich sagte, ich hätte etwas gesehen?\"","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},{"^->":"roadside_viktor_response_done"},"turns",0,"<","&&","/ev",{"*":".^.c-4","flg":21},"ev","str","^__Verberge__: \"Nein.\"","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},{"^->":"roadside_viktor_response_done"},"turns",0,"<","&&","/ev",{"*":".^.c-5","flg":21},"ev","str","^__Halte__: Die Kutsche anhalten und zurückgehen.","/str",{"VAR?":"faculty_committed"},{"f()":"state_reached"},{"^->":"roadside_viktor_response_done"},"turns",0,"<","&&","/ev",{"*":".^.c-6","flg":21},{"c-0":["\n","^\"Ein Zeichen am Weg. Ich möchte es nicht voreilig benennen.\"","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^\"Vorsicht ist in fremden Gegenden selten ein Fehler.\"","\n",{"->":"roadside_viktor_response_done"},{"#f":5}],"c-1":["\n","^\"Ein Grenz- oder Wegzeichen. Ich wüsste gern, wohin dieser Pfad führt.\"","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^\"Sie haben einen Pfad gesehen?\"","\n","^\"Nicht deutlich. Genug, um später danach zu fragen.\"","\n","^Viktor blickt durch das kleine rückwärtige Fenster. Die Biegung hat den Hang bereits ausgelöscht. \"Fragen Sie vorsichtig. Orte, die man nicht erwähnt, sind oft aufschlussreicher als jene, die man empfiehlt.\"","\n",{"->":"roadside_viktor_response_done"},{"#f":5}],"c-2":["\n","^\"Vielleicht eine Frau im Wald. Oder ein Stein, der eine sein wollte.\"","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_bold","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Er betrachtet die vorbeiziehenden Bäume. \"Ein Wegheiligtum?\"","\n","^\"Wenn es ein Heiligtum ist, wurde es seit langem nicht mehr geliebt.\"","\n","^\"Sie sprechen, als bemerkten Steine Vernachlässigung.\"","\n",{"->":"roadside_viktor_response_done"},{"#f":5}],"c-3":["\n","^\"Nur Bäume. Die Art, bei der man für Herren mit Revolvern dankbar wird.\"","\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Sein Ausdruck verdunkelt sich um einen amtlichen Grad. \"Ein Revolver ist ein schlechtes Werkzeug gegen Bäume.\"","\n","^\"Dann werde ich mich darauf verlassen, dass Ihre Unterhaltung sie einschüchtert.\"","\n","^Der Kutscher tut, als höre er nichts. Seine Schultern jedoch hören alles.","\n",{"->":"roadside_viktor_response_done"},{"#f":5}],"c-4":["\n","^\"Würden Sie mir glauben, wenn ich sagte, ich hätte etwas gesehen?\"","\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_unreliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^\"Das hinge davon ab, welchen Vorteil Sie sich von der Antwort versprechen.\"","\n","^\"Herr Nowak. Sie verletzen mich.\"","\n","^\"Noch nicht.\"","\n","^Es ist das Erste, was er an diesem Tag gesagt hat, das beinahe wie ein Flirt klingt, wenn auch vielleicht nur deshalb, weil Gefahr ein Talent dafür hat, wärmere Kleider zu borgen.","\n",{"->":"roadside_viktor_response_done"},{"#f":5}],"c-5":["\n","^\"Nein.\"","\n","ev",{"^var":"route_sapphic","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_closed","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Die Verneinung kommt zu rasch, und ihr hört es beide.","\n","^Du denkst nicht mehr an den Stein. Du denkst an die junge Frau, die irgendwo vor euch wartet: die Tochter des Grafen, der Grund, der sorgsam nicht im Memorandum steht, die Fremde, deren Haushalt dich unter einem Titel herbeigerufen hat, der zugleich lächerlich und nützlich ist.","\n",{"->":"roadside_viktor_response_done"},{"#f":5}],"c-6":["\n","^\"Halten Sie an\", sagst du.","\n","^Der Kutscher hört zuerst die Stimme, dann die Unmöglichkeit des Befehls. Die Pferde gehen noch ein paar Längen weiter, ehe der Wagen schwer in den Schlamm sinkt und steht.","\n","^Viktor sieht zur Biegung zurück, hinter der der Hang mit dem Stein verschwunden ist.","\n","^\"Wegen eines undeutlichen Wegzeichens?\"","\n","^\"Wegen der Frage, weshalb es undeutlich bleiben soll.\"","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n",{"->":"carriage_halt_room"},"done",{"#f":5}]}],null],"roadside_viktor_response_done":[{"->":"provide_choices"},{"#f":2}],"carriage_halt_room":["ev",{"VAR?":"loc_carriage_halt"},{"^->":"carriage_halt_entry"},{"^->":"carriage_halt_look"},{"^->":"carriage_halt_exits"},{"^->":"carriage_halt_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"carriage_halt_entry":["^Die Kutsche hält eine Biegung weiter, dort, wo der Weg breiter wird und trotzdem nicht einladender. Der Kutscher bleibt auf dem Bock sitzen, als habe er beschlossen, für diese Entscheidung nicht verantwortlich zu sein. Hinter euch liegt die Stelle mit dem Stein. Vor euch wartet der Nachmittag, verstimmt durch eure Verzögerung.","\n","done",{"#f":3}],"carriage_halt_look":[["ev","str","^__Schaue__: Zurück zur Biegung. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Von hier aus sieht man den Hang nicht mehr. Nur die dunkle Stelle, an der der Weg die Bäume wieder freigibt. Es ist erstaunlich, wie rasch ein Ort so tun kann, als sei dort nichts gewesen.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"carriage_halt_exits":[["ev","str","^__Bitte__: Viktor soll auf die Höflichkeiten verzichten.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^__Bestehe__: Viktor soll dich wie eine Dame aussteigen lassen.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^\"Lassen Sie die Hand und den Schlag. Hier ist niemand, der daraus eine Etikette machen müsste.\"","\n","ev",{"VAR?":"class"},{"VAR?":"noble"},"?","/ev",[{"->":".^.b","c":true},{"b":["\n","^Viktor öffnet die Tür trotzdem selbst, aber sein Blick ist nicht bei der Geste. \"Gnädiges Fräulein, der Umstand, dass niemand zusieht, macht den Wald nicht weniger ungeeignet für Einfälle.\"","\n",{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","^Viktor lässt die Hand einen Augenblick sichtbar unangeboten. \"Warum sollte ich Sie wie eine Dame behandeln, wenn Sie sich so undamenhaft benehmen, mitten auf der Straße eine Untersuchung zu beginnen?\"","\n","^Es ist zu trocken gesagt, um ganz ein Vorwurf zu sein.","\n",{"->":".^.^.^.10"},null]}],"nop","\n",{"->":"crossroad_statue_room"},null],"c-1":["\n","^\"Herr Nowak. Wenn ich schon im Wald aussteige, dann wenigstens nicht wie ein Paket.\"","\n","ev",{"VAR?":"class"},{"VAR?":"noble"},"?","/ev",[{"->":".^.b","c":true},{"b":["\n","^Er reicht dir die Hand mit tadelloser Korrektheit und schlecht verborgener Gereiztheit. \"Sie wählen einen bemerkenswerten Ort, um auf Form zu bestehen.\"","\n",{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","^Er reicht dir die Hand mit der Miene eines Mannes, der eine Herausforderung angenommen hat. \"Warum sollte ich Sie wie eine Dame behandeln, wenn Sie sich so un-damenhaft benehmen, mitten auf der Straße anzuhalten?\"","\n","^\"Weil Sie soeben bewiesen haben, dass Sie es können.\"","\n",{"->":".^.^.^.10"},null]}],"nop","\n",{"->":"crossroad_statue_room"},"done",null]}],{"#f":3}],"carriage_halt_bucket":["thread",{"->":"carriage_halt_coachman"},"done",{"#f":3}],"carriage_halt_coachman":[["ev","str","^__Frage__: Den Kutscher, ob hier jemand anhält.","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^\"Hier?\", sagt der Kutscher.","\n","^Er blickt nicht zurück. Das genügt als Antwort beinahe.","\n","^\"Nur wenn was am Rad ist.\"","\n","ev",{"VAR?":"old_name_heard"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"crossroad_statue_room":["ev",{"VAR?":"loc_crossroad_statue"},{"^->":"crossroad_statue_entry"},{"^->":"crossroad_statue_look"},{"^->":"crossroad_statue_exits"},{"^->":"crossroad_statue_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"crossroad_statue_entry":["^Der Weg zurück ist kurz genug, um vernünftig zu wirken, und lang genug, um dem Entschluss Gewicht zu geben. Ohne Kutsche klingt der Graben anders. Wasser unter Stein. Ein Vogel, der aufhört. Viktors Schritte hinter dir, nicht weit genug entfernt, um zufällig zu sein.","\n","^An der Biegung zeigt sich der Hang wieder. Diesmal siehst du, dass der Stein nicht am Weg steht. Er steht dahinter, jenseits eines schmalen Durchlasses zwischen Eiben, als hätte jemand den Zugang nicht versteckt, nur nicht erklärt. ","#","^gloss[Eiben](Dunkle, langsam wachsende Nadelbäume. Giftig, langlebig und daher für Menschen mit Aberglauben oder Bildung gleichermaßen verdächtig.)","/#","\n","done",{"#f":3}],"crossroad_statue_look":[["ev","str","^__Schaue__: Den Hang hinauf. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Das Unterholz hat die Formen zurückgenommen, aber nicht vollständig. Zwischen den Zweigen liegt ein heller Fleck Stein. Kein Kreuz. Keine klare Nische. Eher eine Schulter, ein geneigter Kopf, eine Linie, die nicht zu einem Wegheiligtum passen will.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"crossroad_statue_exits":[["ev","str","^__Gehe__: Durch die Eiben zur Lichtung. ","#","^key:n","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"forest_clearing_room"},"done",null]}],{"#f":3}],"crossroad_statue_bucket":["thread",{"->":"crossroad_old_path"},"done",{"#f":3}],"crossroad_old_path":[["ev","str","^__Untersuche__: Den schmalen Durchlass.","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","^Der Boden ist nicht oft begangen, aber auch nicht unberührt. Unter Laub und Nadeln liegt eine ältere Linie, fester als Zufall. Ein Weg, der nicht mehr Weg heißen möchte.","\n","ev",{"VAR?":"prechristian_underlayer_suspected"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"forest_clearing_room":["ev",{"VAR?":"loc_forest_clearing"},{"^->":"forest_clearing_entry"},{"^->":"forest_clearing_look"},{"^->":"forest_clearing_exits"},{"^->":"forest_clearing_bucket"},"/ev",{"->t->":"enter_room"},{"->":"provide_choices"},null],"forest_clearing_entry":["^Die Eiben geben eine kleine Lichtung frei. Nicht groß genug für Versammlung, nicht offen genug für Zufall. In ihrer Mitte steht die überwachsene Steinfigur, halb von Moos, Brombeerranken und altem Laub gehalten.","\n","^Auf den ersten Blick könnte sie die Jungfrau Maria sein. Eine Frauengestalt, ein geneigter Kopf, etwas Mantelartiges über den Schultern. Doch der Stein kennt keine rechte Demut. Die Haltung ist nicht Fürbitte. Sie ist Wachen. Oder Lauschen. Oder etwas Älteres, dem später ein christlicher Name übergestülpt wurde. ","#","^gloss[Jungfrau Maria](Mutter Jesu und zentrale Heiligenfigur der katholischen Verehrung. Ihre Bilder können Orte heiligen, aber manchmal auch ältere Orte überdecken.)","/#","\n","^Viktor bleibt am Rand der Lichtung stehen.","\n","^\"Das ist kein gewöhnlicher Bildstock\", sagt er.","\n","done",{"#f":3}],"forest_clearing_look":[["ev","str","^__Schaue__: Die Lichtung an. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n","^Die Bäume stehen zu gleichmäßig, um ganz natürlich zu wirken, und zu alt, um einer jüngeren Absicht zu gehorchen. Der Boden ist weich, aber darunter liegt Stein. Irgendwo sammelt Wasser sich, ohne sichtbar zu werden.","\n",{"->":"provide_choices"},"done",null]}],{"#f":3}],"forest_clearing_exits":[["ev","str","^__Kehre__: Zur Kutsche zurück. ","#","^key:s","/#","/str",{"^->":"forest_clearing_statue_done"},"turns",0,">=","/ev",{"*":".^.c-0","flg":5},{"c-0":["\n",{"->":"return_to_carriage_with_tear"},"done",null]}],{"#f":3}],"forest_clearing_bucket":["thread",{"->":"forest_clearing_statue"},"done",{"#f":3}],"forest_clearing_statue":[["ev","str","^__Untersuche__: Die überwachsene Frauengestalt. ","#","^key:x","/#","/str",{"^->":"forest_clearing_statue_done"},"turns",0,"<","/ev",{"*":".^.c-0","flg":21},{"c-0":["\n","^Aus der Nähe verliert die Figur ihre bequeme Erklärung. Der Mantel ist kein Mantel. Die Hände sind nicht gefaltet, sondern liegen am Körper, als hielten sie etwas, das abgeschlagen oder nie fertig gemeißelt wurde. Unter dem Moos erkennst du Reste einer Linie, die weder Rosenkranz noch Faltenwurf ist.","\n","^\"Römisch?\", fragt Viktor.","\n","^\"Vielleicht\", sagst du. \"Oder keltisch. Oder etwas, das beide schon falsch benannt hätten.\"","\n","^Das Wort heidnisch liegt kurz in der Luft und wird von niemandem ausgesprochen. ","#","^gloss[heidnisch](Christliche Sammelbezeichnung für vor- oder außerchristliche Kulte. Nützlich, wenn man vieles auf einmal verurteilen will, ohne es genau zu kennen.) ","/#","#","^gloss[keltisch](Bezeichnung für vor- und frühgeschichtliche Kulturen und Sprachen in Europa. Im 19. Jahrhundert oft halb Wissenschaft, halb romantische Projektionsfläche.)","/#","\n","ev",{"VAR?":"prechristian_underlayer_suspected"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"old_site_has_claim"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"forest_clearing_statue_done"},"done",{"#f":5}]}],null],"forest_clearing_statue_done":[{"->":"provide_choices"},{"#f":2}],"return_to_carriage_with_tear":["^Der Rückweg ist enger, als er beim Hineingehen war. Oder du bist unvorsichtiger. Eine Brombeerranke fängt den Saum deines Reisekleids, hält ihn einen Atemzug lang fest und gibt ihn mit einem kleinen, beleidigend klaren Reißen wieder frei.","\n","^Viktor hört es.","\n","^Natürlich hört er es.","\n","^\"Verletzt?\"","\n","^\"Nur beleidigt.\"","\n","^Der Riss ist klein. Sichtbar genug, um später nicht mehr ganz zu verschwinden.","\n",{"->":"afternoon_approach_choice"},null],"carriage_episode_viktor_road":[["ev","str","^__Frage__: Viktor nach dem Weg.","/str",{"VAR?":"viktor"},{"f()":"present"},{"VAR?":"loc_carriage"},{"f()":"loc"},"&&","/ev",{"*":".^.c-0","flg":21},{"c-0":["\n","^\"Was erwarten Sie dort oben?\", fragst du.","\n","^\"Ein Haus, das Ordnung zeigen möchte\", sagt Viktor. \"Das genügt fast immer, um Unordnung zu verbergen.\"","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"carriage_episode_coachman_places":[["ev","str","^__Frage__: Den Kutscher nach den Namen am Weg.","/str",{"VAR?":"loc_carriage"},{"f()":"loc"},"/ev",{"*":".^.c-0","flg":21},{"c-0":["\n","^Der Kutscher nennt die Höfe, Gräben und Stege ohne die kleinste Absicht, poetisch zu sein. Gerade deshalb wirken die Namen älter als die Karten.","\n","ev",{"VAR?":"old_name_heard"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"provide_choices"},"done",{"#f":5}]}],null],"afternoon_approach_choice":[["^Der Kutscher zeigt mit der Peitsche nicht auf etwas, sondern in eine Richtung.","\n","^\"Dort unten liegt Eibenreith. Wenn gnädiges Fräulein wünscht, kann ich im Dorf halten. Das Jagdhaus liegt höher, hinterm Wald. Wenn wir gleich weiterfahren, kommen wir ordentlich vor dem Abend an.\"","\n","^Viktor sieht dich nicht an, was bei ihm die strengere Form von Erwartung ist.","\n","^Nun zum ersten Mal gehört der Nachmittag dir.","\n","ev","str","^__Fahre__: Direkt nach Hohenreith.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^__Halte__: In Eibenreith, aber lass die Kutsche warten.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^__Verfüge__: In Eibenreith aussteigen und die Kutsche voraus schicken.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"VAR?":"punctual_arrival_preserved"},{"f()":"mark"},"pop","/ev","\n","^Du entscheidest dich für die Form. Wer eingeladen wurde, erscheint nicht verspätet, nur weil ein Dorf Fragen verspricht. Fragen laufen nicht davon. Ein erster Eindruck manchmal schon.","\n",{"->":"direct_to_hohenreith"},null],"c-1":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"VAR?":"village_knowledge_prioritised"},{"f()":"mark"},"pop","/ev","\n","^Ein Haus erklärt sich selten selbst. Ein Dorf tut es ebenfalls nicht, aber es verrät manchmal, wo die Erklärungen begraben liegen.","\n",{"->":"depart_for_village_detour"},null],"c-2":["\n","^\"Die Kutsche fährt voraus\", sagst du. \"Mit dem Gepäck. Und mit einer Nachricht, dass wir nachkommen.\"","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_loss_of_control","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_irritation","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"VAR?":"village_knowledge_prioritised"},{"f()":"mark"},"pop","/ev","\n","ev",{"VAR?":"arrival_form_compromised"},{"f()":"mark"},"pop","/ev","\n","^Viktor sieht dich an, als hättest du nicht einen Weg, sondern eine Dienstvorschrift verlassen.","\n",{"->":"depart_for_village_on_foot"},null]}],null],"direct_to_hohenreith":["ev",{"VAR?":"viktor"},{"f()":"companion_join"},"pop","/ev","\n","ev",{"VAR?":"loc_hohenreith_arrival"},{"f()":"loc_move_to"},"pop","/ev","\n","^Die Kutsche fährt am Dorf vorbei, nicht schnell genug, um ungesehen zu bleiben. Häuser, Kirche, ein Brunnen, ein paar Gesichter im Fenster: Eibenreith wird zur Randnotiz eines höflichen Entschlusses. Doch Randnotizen haben die schlechte Gewohnheit, später den Sinn eines Schreibens zu verändern.","\n",{"->":"direct_hohenreith_arrival"},null],"depart_for_village_detour":["ev",{"VAR?":"viktor"},{"f()":"companion_join"},"pop","/ev","\n","ev",{"VAR?":"loc_eibenreith_village"},{"f()":"loc_move_to"},"pop","/ev","\n","^Die Kutsche hält im Dorf. Sofort verändert sich das Verhältnis der Dinge: Das Jagdhaus ist nicht mehr Ziel, sondern Verspätung; Viktor nicht mehr nur Begleiter, sondern Zeuge; Eibenreith nicht mehr Kulisse, sondern erster Gesprächspartner.","\n",{"->":"village_detour_start"},null],"depart_for_village_on_foot":["ev",{"VAR?":"viktor"},{"f()":"companion_join"},"pop","/ev","\n","ev",{"VAR?":"loc_eibenreith_village"},{"f()":"loc_move_to"},"pop","/ev","\n","^Die Kutsche hält im Dorf. Das Jagdhaus ist nicht mehr Ziel, sondern eine Adresse, an die Gepäck und Nachricht vorausgeschickt werden können. Viktor ist nicht mehr nur Begleiter, sondern Zeuge einer Eigenmächtigkeit. Eibenreith wird nicht Kulisse, sondern Boden unter deinen Schuhen.","\n",{"->":"village_send_carriage_ahead"},null],"direct_hohenreith_arrival":[["ev",{"VAR?":"loc_hohenreith_arrival"},{"f()":"loc_move_to"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.punctual_official_guest"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.household_form_preserved"},{"f()":"state_reach"},"pop","/ev","\n","^Die Kutsche lässt Eibenreith unterhalb der Straße zurück. ","#","^chapter[Hohenreith]","/#","\n","^Das Dorf bleibt nicht ungesehen, nur unbetreten: ein Kirchturm, niedrige Dächer, Rauch, ein paar Gesichter in Fenstern. Dann nimmt der Wald es wieder an sich. Der Weg steigt, und mit jedem Ruck der Kutsche wird der Nachmittag förmlicher. Du fährst nicht mehr irgendwohin. Du wirst erwartet.","\n","^Jagdhaus Hohenreith erscheint zwischen Fichten und kahlen Obstbäumen nicht wie ein Schloss, sondern wie ein sehr entschlossener Irrtum: zu neu im oberen Bau, zu alt in den Fundamenten, zu höflich in der Fassade für die Kälte, die darunter aus dem Hang steigt. Dunkle Holzgalerien, helle Mauern, ein vorspringender Mittelteil, Geweihe über dem Portal und Fenster, die das Tal betrachten, als hätten sie es gekauft. ","#","^gloss[Jagdhaus](Adeliger Landsitz für Jagden und kurze Aufenthalte. Weniger Hauptsitz als Bühne für Gäste, Förster, Gewehre und Geheimnisse.) ","/#","#","^gloss[Portal](Haupteingang eines repräsentativen Gebäudes. Eine Tür, die gelernt hat, Menschen schon vor dem Eintreten zu beurteilen.)","/#","\n","^Viktor steigt zuerst aus. Der Kutscher öffnet den Schlag. Ein Diener steht bereits vor der Tür, als wäre er aus dem Haus gesandt worden, noch ehe die Kutsche um die letzte Biegung kam.","\n","^Du kommst pünktlich an. Das ist keine Kleinigkeit. In Häusern wie diesem ist Pünktlichkeit die erste Lüge, die alle Beteiligten gemeinsam schützen.","\n","ev","str","^__Wahre Form__: Den ersten Blick des Hauses annehmen.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: Die Fassade, bevor du dich ihr überlässt.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Entschärfe__: „Es sieht fast so aus, als wolle es uns gefallen.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.expected_guest"},{"f()":"state_reach"},"pop","/ev","\n","^Du steigst aus, nimmst Viktor nur so weit in Anspruch, wie die Form verlangt, und lässt Mantel, Hut und Handschuhe sprechen, bevor du selbst etwas sagst.","\n","^Der Diener verneigt sich. Nicht tief. Richtig. Das Haus hat entschieden, dich zunächst als Dame zu behandeln.","\n",{"->":"hohenreith_direct_butler_welcome"},{"#f":5}],"c-1":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.expected_guest"},{"f()":"state_reach"},"pop","/ev","\n","^Dein Blick folgt den Linien des Hauses: neue Fenster über älterem Mauerwerk, ein sauberer Eingang über feuchtem Stein, Försterordnung über etwas, das nicht nach Jagd aussieht.","\n","^Viktor bemerkt deinen Blick. Er sagt nichts. Das ist klug von ihm.","\n",{"->":"pre_dinner_transition"},{"#f":5}],"c-2":["\n","^„Es sieht fast so aus, als wolle es uns gefallen.“","\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Häuser wollen nichts“, sagt Viktor.","\n","^„Dann ist dieses besonders schlecht darin.“","\n",{"->":"pre_dinner_transition"},{"#f":5}]}],null],"village_detour_start":["ev",{"VAR?":"loc_eibenreith_village"},{"f()":"loc_move_to"},"pop","/ev","\n","ev",{"VAR?":"AfternoonOutcome.village_knowledge_prioritised"},{"f()":"mark"},"pop","/ev","\n","ev",{"VAR?":"EibenreithPublicFace.curious"},{"f()":"state_reach"},"pop","/ev","\n","^Zuerst kommt der Geruch von Rauch. Dann ein Dach, niedrig und dunkel vom Wetter. Dann ein zweites. Dann ein Kirchturm, nicht hoch, nicht anmutig, sondern breitschultrig und blass vor dem Hang dahinter. Seine Mauern wirken älter als das Dorf um sie her und weniger sicher ihres Sieges. Die Fenster sind klein. Die Kirchhofmauer hält die Straße auf Abstand, als bräuchten die Toten Schutz vor den Lebenden oder die Lebenden vor etwas anderem. ","#","^chapter[Eibenreith] ","/#","#","^sfx[church-bells.ogg](max=8, fade) ","/#","#","^image[eibenreith.png](landscape)","/#","\n","^Eibenreith erscheint nicht, wie ein Dorf auf einem Bild erscheint, auf einmal und zur Bewunderung geordnet, sondern in Bruchstücken.","\n","^Eine Frau mit einem dunklen Kopftuch hält mit einem Eimer in der Hand inne. Ein Bub hört auf, Gänse zu treiben, und lässt sie um seine Stiefel klagen. Zwei Männer vor einem Schuppen beenden im selben Augenblick ihr Gespräch, ohne einander anzusehen. Vorhänge rühren sich an Fenstern, hinter denen niemand zugibt zu stehen. Ein Schmiedeschild bewegt sich leicht in Luft, die du nicht fühlen kannst. Wasser läuft irgendwo unter Brettern, unter Stein, unter der Straße selbst, schnell, kalt und verborgen. ","#","^gloss[Schmiedeschild](Schild einer Schmiede. In einem Dorf oft weniger Werbung als Zusicherung, dass Eisen, Pferde und Männer noch in Ordnung gebracht werden können.)","/#","\n","^Die Häuser sind nicht arm, nicht eigentlich. Viele sind fest, weißgekalkt, geschindelt, erhalten mit der störrischen Anständigkeit von Menschen, die reparieren, was sie nicht ersetzen können. Und doch stört etwas in ihrer Anordnung das Auge. Sie wenden sich der Kirche zu, aber nicht ganz. Sie halten die Straße, aber lehnen sich von ihr weg. Sie lassen zwischen Hof, Zaun und Holzstoß schmale Durchgänge, in denen sich Schatten zu früh sammelt.","\n","^Die Kutsche hält.","\n","^Niemand läuft herbei, um dich zu begrüßen. Niemand muss das. Die Nachricht ist bereits ins Dorf eingetreten, auf Wegen schneller als Bahn, Telegraph oder kaiserliches Siegel.","\n","^Du sitzt sehr gerade, während Eibenreith dich zum ersten Mal betrachtet.","\n",{"->":"village_detour_surface"},null],"village_detour_surface":[["^Die Dorfstraße ist kein Salon und gerade deshalb nicht weniger gesellschaftlich. Jeder Blick hat hier weniger Politur, aber mehr Gedächtnis.","\n","ev","str","^__Schaue__: In die Gesichter am Straßenrand. ","#","^key:l","/#","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Höre__: Auf das Wasser unter der Straße.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Untersuche__: Die Kirche. ","#","^key:x","/#","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Betrachte__: Das Bild neben dem Kirchhofstor.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Warte__: Bis die Kutsche wieder bereit ist. ","#","^required ","/#","#","^key:z","/#","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["\n","^Die Gesichter verschwinden nicht, wenn du hinsiehst. Sie verändern nur ihre Begründung: Eine Frau prüft plötzlich ihren Eimer. Ein Bub entdeckt die Gänse neu. Ein Mann tut, als habe er schon immer zum Kirchtor gesehen. Das Dorf besitzt keine Bühne, aber jeder hier kennt seinen Auftritt.","\n",{"->":".^.^.^"},{"#f":5}],"c-1":["\n","^Unter den Rädern, unter Brettern und Steinen, unter der höflichen Behauptung einer Dorfstraße läuft Wasser. Es klingt nicht tief, aber schnell. Als hätte der Ort einen zweiten Atem, einen kalten, verborgenen, der nicht durch menschliche Münder geht.","\n",{"->":".^.^.^"},{"#f":5}],"c-2":["\n","ev",{"VAR?":"VillageReligiousTension.church_as_center_seen"},{"f()":"state_reach"},"pop","/ev","\n","^Der Turm ist nicht schlank genug, um in den Himmel zu zeigen. Er steht da wie eine Faust. Die kleinen Fenster geben wenig preis, und die Mauer des Kirchhofs wirkt weniger wie Einfriedung als wie eine alte Gewohnheit, sich gegen etwas zu stemmen.","\n",["ev",{"VAR?":"relig"},{"VAR?":"catholic"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","^Gerade das stört dich: nicht der Mangel an Schönheit, sondern der Mangel an Frieden.","\n",{"->":".^.^.^.12"},null]}],["ev",{"VAR?":"relig"},{"VAR?":"reform"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","^Du siehst weniger Andacht als Institution: Stein, Besitz, Grenze, Verwaltung der Furcht.","\n",{"->":".^.^.^.12"},null]}],[{"->":".^.b"},{"b":["\n","^Die Kirche sieht nicht aus, als habe sie den älteren Dingen im Tal widersprochen. Eher, als habe sie gelernt, über ihnen zu stehen.","\n",{"->":".^.^.^.12"},null]}],"nop","\n",{"->":".^.^.^"},{"#f":5}],"c-3":["\n",{"->":"religious_image_reaction"},{"#f":5}],"c-4":["\n",{"->":"village_exit_puzzle"},{"#f":5}]}],null],"religious_image_reaction":["ev",{"VAR?":"VillageReligiousTension.christian_surface_noted"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"VillageReligiousTension.older_presence_hint"},{"f()":"state_reach"},"pop","/ev","\n","^Über dem alten Putz neben dem Kirchtor blickt eine verblasste gemalte Frau unter einem abblätternden blauen Mantel herab. Ihre Hände sind zum Gebet gefaltet. Ihre Augen, vom Wetter beschädigt, zeigen nicht mehr in dieselbe Richtung.","\n",["ev",{"VAR?":"relig"},{"VAR?":"catholic"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","^Für einen Atemzug stört dich nicht, dass das Bild alt ist. Es stört dich, dass es nicht mehr ganz heilig wirkt.","\n",{"->":".^.^.^.18"},null]}],["ev",{"VAR?":"relig"},{"VAR?":"reform"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","^Für einen Atemzug wirkt das Bild weniger wie Andacht als wie Verwaltung: ein aufgemaltes Siegel über etwas, das man nicht fortschaffen konnte.","\n",{"->":".^.^.^.18"},null]}],["ev",{"VAR?":"relig"},{"VAR?":"social"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","^Für einen Atemzug erkennst du die vertraute Geste und misstraust trotzdem dem Ort, an dem sie gemalt wurde.","\n",{"->":".^.^.^.18"},null]}],[{"->":".^.b"},{"b":["\n","^Für einen Atemzug, als die Räder über ein verborgenes Wasserrinnsal fahren, wirkt das gemalte Gesicht weniger wie die Heilige Mutter als wie eine Maske, die etwas aufgesetzt wurde, das länger gewartet hatte.","\n",{"->":".^.^.^.18"},null]}],"nop","\n",{"->":"village_detour_surface"},null],"village_exit_puzzle":[["ev",{"VAR?":"EibenreithPublicFace.cautious"},{"f()":"state_reach"},"pop","/ev","\n","^Der Kutscher hält vor dem Wirtshaus oder vielleicht nur vor dem Gebäude, das in einem besseren Dorf eines gewesen wäre. Ein Knecht aus dem Dorf tritt aus dem Schatten des Tors. Viktor öffnet die Kutschentür von innen nicht sofort; der Kutscher steigt ab, um den Schlag zu öffnen. Der Knecht sieht auf dein Gepäck, dann auf deine Handschuhe, dann auf Viktor.","\n","^Wieder stellt die Welt eine Frage, ohne sie auszusprechen: Wer darf dir helfen, wer muss dir helfen, und wem erlaubst du, dabei wichtig zu wirken?","\n","ev","str","^__Warte__ · **Adel**: Bis der Kutscher den Schlag öffnet und Viktor zuerst aussteigt. ","#","^key:z","/#","/str",{"VAR?":"class"},{"VAR?":"noble"},"?","/ev",{"*":".^.c-0","flg":21},"ev","str","^__Gewähre__: Viktor die Hand und dem Kutscher den Dank.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Dirigiere__: „Zuerst den kleineren Kasten.“","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^__Reize__: Den Kutscher mit zu warmer Freundlichkeit.","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^__Verplappere dich__: „Ach, das macht doch zu viel Mühe.“","/str","/ev",{"*":".^.c-4","flg":20},"ev","str","^__Rutsche aus__ · **Unterschicht**: Allein, bevor jemand dir helfen kann.","/str",{"VAR?":"class"},{"VAR?":"working"},"?","/ev",{"*":".^.c-5","flg":21},{"c-0":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du wartest, bis der Kutscher den Schlag öffnet und Viktor zuerst aussteigt; erst dann reichst du Viktor die behandschuhte Hand.","\n","^Es geschieht langsam genug, dass alle Beteiligten ihre Rolle finden. Der Kutscher ist Dienst, Viktor ist Begleitung, der Knecht ist noch nicht wichtig genug, um dich zu berühren. Dein Fuß erreicht den Boden, als hätte die Straße sich dafür bereitgehalten.","\n","ev",{"VAR?":"EibenreithPublicFace.cautious"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-1":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du lässt Viktor aussteigen, nimmst seine Hand beim Abtreten und dankst dem Kutscher erst danach mit einem knappen Blick.","\n","^Der Ablauf ist korrekt genug, um keine Geschichte zu erzeugen. In einem Dorf, das von Geschichten lebt, ist das ein kleiner Sieg.","\n","ev",{"VAR?":"EibenreithPublicFace.cautious"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-2":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du gibst dem Knecht eine klare Anweisung, welches Gepäck zuerst abgeladen werden soll, bevor er danach fragen kann.","\n","^Er gehorcht sofort. Viktor registriert die Zweckmäßigkeit. Der Kutscher registriert die Ungewöhnlichkeit. Eine Dame, die Gepäckreihenfolgen kennt, ist entweder sehr erfahren, sehr nervös oder beides.","\n","ev",{"VAR?":"EibenreithPublicFace.suspicious"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"ServiceWorld.staff_as_witnesses_noticed"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-3":["\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_unreliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du bietest dem Kutscher ein sichtbares Lächeln und ein zu freundliches „Danke“ an.","\n","^Der Mann senkt den Blick, verwirrt und geschmeichelt. Viktor wird stiller. Freundlichkeit über Standesgrenzen hinweg kann Güte sein, Taktik oder Unachtsamkeit. Auf dem Dorf wird niemand lange brauchen, eine vierte Möglichkeit zu erfinden.","\n","ev",{"VAR?":"EibenreithPublicFace.suspicious"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-4":["\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du entschuldigst dich beim Knecht dafür, dass deine Sachen Mühe machen, und greifst selbst nach einem Koffer.","\n","^Der Knecht erstarrt, als hättest du ihm eine philosophische Frage gestellt. Viktor tritt sofort dazwischen, höflich genug, um die Rettung wie Zufall aussehen zu lassen. Du hast gegen keine Moral verstoßen, nur gegen die unsichtbare Arbeitsteilung, auf der diese kleine Welt ruht.","\n","ev",{"VAR?":"EibenreithPublicFace.unsettled"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"ServiceWorld.staff_as_witnesses_noticed"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"c-5":["\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_control","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du steigst allein aus, nimmst deinen Rock hoch genug, um den Schlamm zu sehen, und sagst dem Knecht, er solle mit dem schweren Koffer vorsichtig sein.","\n","^Es ist praktisch, schnell und völlig falsch. Nicht, weil du unrecht hast, sondern weil du recht hast wie jemand, der selbst schon getragen hat. Der Knecht erkennt es. Viktor auch.","\n","ev",{"VAR?":"EibenreithPublicFace.unsettled"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"ServiceWorld.staff_as_witnesses_noticed"},{"f()":"state_reach"},"pop","/ev","\n",{"->":".^.^.g-0"},{"#f":5}],"g-0":["^Neben dir senkt Viktor die Stimme.","\n","^„Vergessen Sie nicht: In Hohenreith wird jede Höflichkeit etwas bedeuten. Hier wird es jedes Schweigen tun.“","\n","ev","str","^__Prüfe__: „Dann werden wir bereits empfangen.“","/str","/ev",{"*":".^.c-6","flg":20},"ev","str","^__Benenne__: „Sie lassen es klingen, als stünde das Dorf über dem Grafen.“","/str","/ev",{"*":".^.c-7","flg":20},"ev","str","^__Entwaffne__: „Wie glücklich, dass ich mehrere Arten des Schweigens eingepackt habe.“","/str","/ev",{"*":".^.c-8","flg":20},"ev","str","^__Verplappere dich__: „Ich mag es nicht, von Leuten beobachtet zu werden, die sich nicht vorstellen.“","/str","/ev",{"*":".^.c-9","flg":20},"ev","str","^__Schone sie__: „Wenn Amalia ihr ganzes Leben unter diesem Blick gelebt hat, beginne ich zu verstehen, weshalb man nach Geistern sandte.“","/str","/ev",{"*":".^.c-10","flg":20},{"c-6":["\n","^„Dann werden wir bereits empfangen.“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Ja“, sagt er. „Und geprüft.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-7":["\n","^„Sie lassen es klingen, als stünde das Dorf über dem Grafen.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Nein“, sagt Viktor. „Nur, als hätte es vielleicht mehr als einen überlebt.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-8":["\n","^„Wie glücklich, dass ich mehrere Arten des Schweigens eingepackt habe.“","\n","ev",{"^var":"route_lover","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Sein Mund bewegt sich beinahe. „Verwenden Sie zuerst das schlichteste.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-9":["\n","^„Ich mag es nicht, von Leuten beobachtet zu werden, die sich nicht vorstellen.“","\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Das“, sagt er, „wird sich heute kaum bessern.“","\n",{"->":".^.^.^.g-1"},{"#f":5}],"c-10":["\n","^„Wenn Amalia ihr ganzes Leben unter diesem Blick gelebt hat, beginne ich zu verstehen, weshalb man nach Geistern sandte.“","\n","ev",{"^var":"route_sapphic","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Viktor sieht dich an, doch welche Antwort er auch erwägt, er behält sie hinter den Zähnen.","\n",{"->":".^.^.^.g-1"},{"#f":5}]}],"g-1":["ev",{"VAR?":"EibenreithPublicFace.openly_watching_valerie"},{"f()":"state_reach"},"pop","/ev","\n",{"->":"village_departure_choice"},null]}],null],"hohenreith_direct_butler_welcome":["^Ein Butler tritt an die unterste Stufe. Nicht der Diener von vorhin, sondern ein Mann, der dem Haus seine Stimme geliehen hat: schwarz gekleidet, glatt rasiert, mit dem leeren Gesichtsausdruck vollendeter Haushaltskenntnis. Er verneigt sich zuerst vor dir, dann vor Viktor.","\n","^„Willkommen in Hohenreith.“","\n","^Die Worte sind vollkommen richtig. Genau deshalb ist unklar, ob sie Gruß, Urteil oder Besitzanzeige sind.","\n",{"->":"pre_dinner_transition"},null],"village_departure_choice":[["^Die Kutsche wartet. Das Dorf wartet nicht; es sieht nur so aus. Zwischen den Häusern haben sich die Blicke anders verteilt. Ein paar Menschen sind verschwunden, aber die Fenster haben mehr Augen bekommen.","\n","^Viktor hält die Kutschentür offen. „Wenn wir jetzt fahren, lässt sich die Verspätung noch als Wegverhältnis erklären.“","\n","^Der Kutscher sieht zu dir. Er hat verstanden, dass nicht er entscheidet, wann die Reise weitergeht.","\n","ev","str","^__Wahre Form__: Wieder einsteigen und nach Hohenreith weiterfahren.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: Das Dorf gesehen haben; jetzt das Haus sehen.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Verfüge__: Die Kutsche mit Gepäck und Nachricht vorausschicken.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.delayed_after_village_detour"},{"f()":"state_reach"},"pop","/ev","\n","^Du steigst wieder ein. Die Entscheidung rettet nicht die Pünktlichkeit, aber die Form: Verspätung durch Aufenthalt, nicht durch Auflehnung.","\n",{"->":"delayed_hohenreith_arrival"},{"#f":5}],"c-1":["\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.delayed_after_village_detour"},{"f()":"state_reach"},"pop","/ev","\n","^Du steigst ein, bevor das Dorf den Aufenthalt in eine zweite Szene verwandeln kann. Du hast nicht genug gesehen. Aber genug, um zu wissen, welche Fragen im Haus falsch beantwortet werden könnten.","\n",{"->":"delayed_hohenreith_arrival"},{"#f":5}],"c-2":["\n","^„Die Kutsche fährt voraus“, sagst du. „Mit dem Gepäck. Und mit einer Nachricht, dass wir nachkommen.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_loss_of_control","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_irritation","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"^var":"viktor_concern","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.household_form_disturbed"},{"f()":"state_reach"},"pop","/ev","\n","^Viktor sieht dich an, als hättest du nicht einen Weg, sondern eine Dienstvorschrift verlassen.","\n",{"->":"village_send_carriage_ahead"},{"#f":5}]}],null],"village_send_carriage_ahead":[["^Der Kutscher nimmt die Nachricht entgegen, als sei Papier unter bestimmten Umständen gefährlicher als Glatteis. Viktor prüft jedes Wort, das du ihm diktierst, ohne offen zu widersprechen. Das Gepäck wird wieder aufgeladen. Der Kutscher fährt an, langsam genug, dass das Dorf den Vorgang vollständig verstehen kann.","\n","^Zurück bleiben du, Viktor, die Straße nach Hohenreith und ein Schweigen, das nicht mehr in die Kutsche passt.","\n","ev","str","^__Wahre Form__: Eine knappe, korrekte Nachricht schicken.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: Die Nachricht sachlich halten.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Benenne__: Die Nachricht als Warnung formulieren.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^„Teilen Sie mit, dass wir dem Jagdhaus zu Fuß folgen und vor dem Abend eintreffen.“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Die Nachricht klingt wie Absicht. Das ist das Mindeste, was man einer Unordnung schuldig ist.","\n",{"->":"footpath_to_hohenreith"},{"#f":5}],"c-1":["\n","^„Wir kommen zu Fuß nach. Das Gepäck soll bereits aufgenommen werden. Man möge unseren verspäteten Eintritt erwarten.“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Keine Entschuldigung, keine Erklärung. Eine Erklärung vor der Beobachtung wäre Verschwendung.","\n",{"->":"footpath_to_hohenreith"},{"#f":5}],"c-2":["\n","^„Sagen Sie, wir wollten Eibenreith nicht durchqueren wie ein Möbelstück im Besitz des Hauses.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Viktor schließt kurz die Augen. „Das werde ich nicht diktieren.“","\n","^„Dann schreiben Sie: Wir kommen zu Fuß.“","\n",{"->":"footpath_to_hohenreith"},{"#f":5}]}],null],"footpath_to_hohenreith":[["ev",{"VAR?":"loc_eibenreith_village"},{"f()":"loc_move_to"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.delayed_after_village_detour"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.household_form_disturbed"},{"f()":"state_reach"},"pop","/ev","\n","^Der Weg nach Hohenreith steigt nicht steil genug an, um dramatisch zu sein, aber stetig genug, um deine Schuhe, deinen Saum und deine Atmung an die Wirklichkeit zu erinnern. Hinter dir bleibt Eibenreith. Vor dir liegt das Jagdhaus. Dazwischen ist kein Salon, keine Kutsche, keine Polsterung der Verhältnisse.","\n","^Viktor geht neben dir, nicht vor dir und nicht hinter dir. Das ist vielleicht Takt. Vielleicht Aufsicht. Vielleicht die einzige Form von Zustimmung, die er sich im Freien leisten kann.","\n","ev","str","^__Entschärfe__: „Sie dürfen jetzt sagen, dass Sie mir davon abgeraten hätten.“","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: „Wer uns jetzt sieht, sieht uns ohne Hausordnung.“","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Trotze__: „Manchmal muss man einem Haus den ersten Schritt verweigern.“","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^„Sie dürfen jetzt sagen, dass Sie mir davon abgeraten hätten.“","\n","ev",{"^var":"route_careless","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_open","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Ich hätte Ihnen davon abgeraten.“","\n","^„Das kam überzeugender, als ich gehofft hatte.“","\n",{"->":"foot_hohenreith_arrival"},{"#f":5}],"c-1":["\n","^„Wer uns jetzt sieht, sieht uns ohne Hausordnung.“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Und wer uns erwartet, wird entscheiden, ob das Absicht oder Mangel an Disziplin war.“","\n",{"->":"foot_hohenreith_arrival"},{"#f":5}],"c-2":["\n","^„Manchmal muss man einem Haus den ersten Schritt verweigern.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Häuser erinnern sich nicht.“","\n","^„Familien tun es.“","\n",{"->":"foot_hohenreith_arrival"},{"#f":5}]}],null],"foot_hohenreith_arrival":["ev",{"VAR?":"loc_hohenreith_arrival"},{"f()":"loc_move_to"},"pop","/ev","\n","^Als ihr das Tor erreicht, steht die Kutsche bereits im Hof. Das Gepäck ist fortgetragen. Eure Ankunft dagegen hat niemand forttragen können. Zwei Diener wissen, dass ihr zu Fuß kamt. Ein Kutscher weiß, dass du es angeordnet hast. Ein Fenster im ersten Stock weiß es ebenfalls.","\n","^Der Butler wartet am Portal. Wenn ihn eure Ankunft überrascht, hat er die Überraschung vor vielen Jahren abgeschafft. Er verneigt sich mit einer Genauigkeit, die nicht wärmer wird, nur weil du Atem in der Brust hast und Wegschmutz am Saum.","\n","^„Willkommen in Hohenreith.“","\n","^Der Satz nimmt euch auf. Er verzeiht nichts.","\n",{"->":"pre_dinner_transition"},null],"delayed_hohenreith_arrival":[["ev",{"VAR?":"loc_hohenreith_arrival"},{"f()":"loc_move_to"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.delayed_after_village_detour"},{"f()":"state_reach"},"pop","/ev","\n","ev",{"VAR?":"HohenreithArrivalFrame.household_form_disturbed"},{"f()":"state_reach"},"pop","/ev","\n","^Die Pferde ziehen die Kutsche an der Kirchhofmauer vorbei und aus dem Dorf hinaus. Die Straße biegt zur unsichtbaren Höhe, auf der Jagdhaus Hohenreith über Eibenreith unter seinem neueren Namen steht.","\n","^Als das Jagdhaus erscheint, ist der Nachmittag bereits weiter fortgeschritten, als die Einladung vorsah. Das Haus empfängt dich nicht unhöflich. Das wäre zu ehrlich. Es empfängt dich mit jener gesteigerten Korrektheit, mit der bessere Häuser kleine Verstöße festhalten, ohne sie beim Namen zu nennen.","\n","^Ein Diener steht vor dem Portal. Hinter einem Fenster im ersten Stock bewegt sich ein Vorhang zu spät zurück.","\n","^Viktor sagt leise: „Jetzt weiß man, dass Sie eigene Umwege nehmen.“","\n","^Der Kutscher bringt die Pferde zum Stehen. Noch einmal wird der Schlag geöffnet. Wer verspätet mit der Kutsche ankommt, erhält die Form ein zweites Mal; nur ist sie nun nicht mehr unschuldig.","\n","ev","str","^__Wahre Form__: Aussteigen, als sei die Verspätung Teil des Plans.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^__Prüfe__: Beim Aussteigen das Fenster beachten.","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^__Benenne__: Die Verspätung nicht entschuldigen.","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^„Dann wollen wir dafür sorgen, dass der Umweg Absicht war.“","\n","ev",{"^var":"route_composure","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_reliable","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du wartest, bis Viktor aussteigt, und nimmst seine Hand gerade lange genug. Die Geste schützt euch beide vor der gröberen Wahrheit: dass du im Dorf getan hast, was eine eingeladene Dame nicht tun muss und vielleicht nicht tun sollte.","\n",{"->":"hohenreith_delayed_butler_welcome"},{"#f":5}],"c-1":["\n","^„Wer am Fenster stand, wusste es schon vor dem Diener.“","\n","ev",{"^var":"route_detective","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_insightful","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^Du steigst aus und siehst nicht zum Fenster. Nicht sofort. Das ist die einzige Höflichkeit, die Beobachtung manchmal braucht.","\n",{"->":"hohenreith_delayed_butler_welcome"},{"#f":5}],"c-2":["\n","^„Ein Haus, das Verspätung kränkt, hat Angst vor eigener Zeit.“","\n","ev",{"^var":"route_eccentric","ci":-1},{"f()":"route_inc"},"pop","/ev","\n","ev",{"^var":"viktor_adversarial","ci":-1},{"f()":"rel_inc"},"pop","/ev","\n","^„Bitte sagen Sie das nicht beim Abendessen.“","\n","^„Ich sagte es Ihnen. Das ist beinahe dasselbe wie Zurückhaltung.“","\n",{"->":"hohenreith_delayed_butler_welcome"},{"#f":5}]}],null],"hohenreith_delayed_butler_welcome":["^Der Butler tritt an die unterste Stufe. Seine Verneigung ist nicht kürzer als sie bei pünktlicher Ankunft gewesen wäre. Das ist die Härte daran.","\n","^„Willkommen in Hohenreith.“","\n","^Die Worte lassen keinen Vorwurf hören. Sie brauchen keinen.","\n",{"->":"pre_dinner_transition"},null],"village_arrival_options":[{"->":"village_detour_start"},null],"pre_dinner_transition":["ev","str","^normal","/str",{"f()":"episode_end"},"pop","/ev","\n","ev",{"VAR?":"TimeSlot.evening"},{"f()":"time_move_to"},"pop","/ev","\n","ev",{"VAR?":"loc_hohenreith_dining_room"},{"f()":"loc_move_to"},"pop","/ev","\n","ev",{"VAR?":"EpisodeId.episode_first_dinner"},{"VAR?":"TimeSlot.evening"},{"f()":"episode_start"},"pop","/ev","\n","^Das Portal schließt sich hinter dir nicht laut. Es muss nicht. Das Haus nimmt Mantel, Hut, Namen, Ruf und Verspätung entgegen und verteilt alles unsichtbar auf Diener, Treppe, Salon, Küche und künftige Tischgespräche.","\n","^Noch bevor du die Familie siehst, ist aus der Reise eine Person geworden, die man erklären kann.","\n",{"->":"intro_score"},null],"intro_score":["ev","str","^","/str","/ev",{"temp=":"score_origin"},"ev","str","^","/str","/ev",{"temp=":"score_body"},"ev","str","^","/str","/ev",{"temp=":"score_outfit"},"ev","str","^","/str","/ev",{"temp=":"score_hair"},"ev","str","^","/str","/ev",{"temp=":"score_hairstyle"},"ev","str","^","/str","/ev",{"temp=":"score_face"},"ev","str","^","/str","/ev",{"temp=":"score_religion"},"ev","str","^","/str","/ev",{"temp=":"score_belief"},"ev","str","^","/str","/ev",{"temp=":"score_approach"},"ev","str","^","/str","/ev",{"temp=":"score_route"},["ev",{"VAR?":"class"},{"VAR?":"noble"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Glückwunsch. Du hast ","ev",{"VAR?":"given_names"},"out","/ev","^ ","ev",{"VAR?":"title_part"},"out","/ev","^ ","ev",{"VAR?":"surname"},"out","/ev","^ erschaffen: eine junge Dame aus niederem Adel, hofnah genug, um eingeladen zu werden, aber nicht hoch genug, um unantastbar zu sein.","/str","/ev",{"temp=":"score_origin","re":true},{"->":".^.^.^.63"},null]}],["ev",{"VAR?":"class"},{"VAR?":"middle"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Glückwunsch. Du hast ","ev",{"VAR?":"title_part"},"out","/ev","^ ","ev",{"VAR?":"given_names"},"out","/ev","^ ","ev",{"VAR?":"surname"},"out","/ev","^ erschaffen: eine bürgerlich geborene Frau, die gelernt hat, Bildung, Ehrgeiz und gesellschaftliche Lesbarkeit als Aufstiegsmittel zu führen.","/str","/ev",{"temp=":"score_origin","re":true},{"->":".^.^.^.63"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Glückwunsch. Du hast ","ev",{"VAR?":"title_part"},"out","/ev","^ ","ev",{"VAR?":"given_names"},"out","/ev","^ ","ev",{"VAR?":"surname"},"out","/ev","^ erschaffen: eine Frau aus niedrigerer Herkunft, die sich so weit in die feinen Räume Wiens gearbeitet hat, dass nun jedes falsche Wort doppelt zählt.","/str","/ev",{"temp=":"score_origin","re":true},{"->":".^.^.^.63"},null]}],"nop","\n",["ev",{"VAR?":"body"},{"VAR?":"small_slender"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie ist klein und schmal gebaut; ein Körper, den die Welt leicht unterschätzt, gerade weil er schnell aus ihrem Blick geraten kann.","/str","/ev",{"temp=":"score_body","re":true},{"->":".^.^.^.70"},null]}],["ev",{"VAR?":"body"},{"VAR?":"medium_soft"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie ist mittelgroß, geformt und gegenwärtig; nicht zerbrechlich, nicht schwerfällig, sondern körperlich präsenter, als manche an einer jungen Dame bequem finden.","/str","/ev",{"temp=":"score_body","re":true},{"->":".^.^.^.70"},null]}],["ev",{"VAR?":"body"},{"VAR?":"tall_slender"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie ist hochgewachsen und schlank; eine Gestalt, die mehr Raum beansprucht, als ihre Rolle ihr zugestehen möchte.","/str","/ev",{"temp=":"score_body","re":true},{"->":".^.^.^.70"},null]}],["ev",{"VAR?":"body"},{"VAR?":"compact_strong"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie ist kompakt und kräftiger gebaut; unter Reisekleid und Korsett bleibt eine praktische Stärke sichtbar, die nicht recht zur Erwartung einer Dame passt.","/str","/ev",{"temp=":"score_body","re":true},{"->":".^.^.^.70"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihr Körper ist noch nicht vollständig beschrieben.","/str","/ev",{"temp=":"score_body","re":true},{"->":".^.^.^.70"},null]}],"nop","\n",["ev",{"VAR?":"outfit"},{"VAR?":"charcoal_plum_velvet"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr Reisekostüm aus anthrazitfarbener Wolle mit pflaumenfarbenem Samt wirkt gedämpft, teuer und kontrolliert.","/str","/ev",{"temp=":"score_outfit","re":true},{"->":".^.^.^.78"},null]}],["ev",{"VAR?":"outfit"},{"VAR?":"black_brown_ivory_lace"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr schwarzbraunes Wollkostüm mit elfenbeinfarbener Bluse wirkt streng, korrekt und beinahe fromm.","/str","/ev",{"temp=":"score_outfit","re":true},{"->":".^.^.^.78"},null]}],["ev",{"VAR?":"outfit"},{"VAR?":"blue_grey_practical"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr graublaues Reisekostüm wirkt praktischer, beweglicher und weniger dekorativ, ohne die gesellschaftliche Form aufzugeben.","/str","/ev",{"temp=":"score_outfit","re":true},{"->":".^.^.^.78"},null]}],["ev",{"VAR?":"outfit"},{"VAR?":"dark_green_black_trim"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr dunkelgrünes Kostüm mit schwarzem Besatz bleibt diskret und doch schwer zu vergessen.","/str","/ev",{"temp=":"score_outfit","re":true},{"->":".^.^.^.78"},null]}],["ev",{"VAR?":"outfit"},{"VAR?":"black_veil_severe"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr schwarzes Reisekleid mit Schleier gibt ihr eine Strenge, die nicht offiziell Trauer ist, aber sehr gut mit ihrem Ruf zusammenarbeitet.","/str","/ev",{"temp=":"score_outfit","re":true},{"->":".^.^.^.78"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihr Reisekostüm ist noch nicht vollständig beschrieben.","/str","/ev",{"temp=":"score_outfit","re":true},{"->":".^.^.^.78"},null]}],"nop","\n",["ev",{"VAR?":"hair"},{"VAR?":"dark_brown"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie hat dunkelbraunes Haar.","/str","/ev",{"temp=":"score_hair","re":true},{"->":".^.^.^.85"},null]}],["ev",{"VAR?":"hair"},{"VAR?":"chestnut"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie hat kastanienbraunes Haar mit warmem Glanz.","/str","/ev",{"temp=":"score_hair","re":true},{"->":".^.^.^.85"},null]}],["ev",{"VAR?":"hair"},{"VAR?":"dark_blond_ash"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie hat dunkelblondes bis aschbraunes Haar.","/str","/ev",{"temp=":"score_hair","re":true},{"->":".^.^.^.85"},null]}],["ev",{"VAR?":"hair"},{"VAR?":"auburn"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie hat rotbraunes Haar, das selbst unter Hut und Nadeln nicht ganz unauffällig wird.","/str","/ev",{"temp=":"score_hair","re":true},{"->":".^.^.^.85"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihre Haarfarbe ist noch nicht vollständig beschrieben.","/str","/ev",{"temp=":"score_hair","re":true},{"->":".^.^.^.85"},null]}],"nop","\n",["ev",{"VAR?":"style"},{"VAR?":"centre_part_low_bun"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie trägt einen glatten Mittelscheitel und einen tiefen Knoten: streng, sauber, ohne überflüssige Bitte um Nachsicht.","/str","/ev",{"temp=":"score_hairstyle","re":true},{"->":".^.^.^.92"},null]}],["ev",{"VAR?":"style"},{"VAR?":"soft_waves_chignon"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie trägt weiche Stirnwellen und einen sorgfältigen Chignon: zugänglicher in der Wirkung, aber nicht weniger berechnet.","/str","/ev",{"temp=":"score_hairstyle","re":true},{"->":".^.^.^.92"},null]}],["ev",{"VAR?":"style"},{"VAR?":"braided_low_knot"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie trägt geflochtene Partien und einen schweren Knoten im Nacken: praktisch, geordnet und etwas erdiger als die glatte Wiener Form.","/str","/ev",{"temp=":"score_hairstyle","re":true},{"->":".^.^.^.92"},null]}],["ev",{"VAR?":"style"},{"VAR?":"raised_front_modern"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie trägt eine modisch gehobene Stirnpartie: gerade noch anständig, aber nicht ganz bereit, älteren Damen zu gefallen.","/str","/ev",{"temp=":"score_hairstyle","re":true},{"->":".^.^.^.92"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihre Frisur ist noch nicht vollständig beschrieben.","/str","/ev",{"temp=":"score_hairstyle","re":true},{"->":".^.^.^.92"},null]}],"nop","\n",["ev",{"VAR?":"face"},{"VAR?":"cool_sharp"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr helles, kühles Gesicht mit bestimmten Brauen wirkt wacher und schärfer, als ihr Alter erwarten lässt.","/str","/ev",{"temp=":"score_face","re":true},{"->":".^.^.^.100"},null]}],["ev",{"VAR?":"face"},{"VAR?":"soft_alert"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr Gesicht verbindet weicheren Mund und wachen Blick; sie wirkt zugänglich, aber nicht einfach.","/str","/ev",{"temp=":"score_face","re":true},{"->":".^.^.^.100"},null]}],["ev",{"VAR?":"face"},{"VAR?":"calm_dark_eyes"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr wärmerer Teint und die dunkleren Augen geben ihr eine ruhige Gegenwart, weniger ätherisch als wach.","/str","/ev",{"temp=":"score_face","re":true},{"->":".^.^.^.100"},null]}],["ev",{"VAR?":"face"},{"VAR?":"fine_controlled"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihre feinen, blassen Züge wirken zerbrechlich, bis man die sichtbare Kontrolle darin bemerkt.","/str","/ev",{"temp=":"score_face","re":true},{"->":".^.^.^.100"},null]}],["ev",{"VAR?":"face"},{"VAR?":"marked_jaw"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr markanteres Gesicht mit gerader Nase und festem Kinn verrät eher Willen als Gefälligkeit.","/str","/ev",{"temp=":"score_face","re":true},{"->":".^.^.^.100"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihr Gesicht ist noch nicht vollständig beschrieben.","/str","/ev",{"temp=":"score_face","re":true},{"->":".^.^.^.100"},null]}],"nop","\n",["ev",{"VAR?":"relig"},{"VAR?":"catholic"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr Glaube ist ernsthaft katholisch; sie weiß, dass Sünde, Gnade und unsichtbare Mächte keine bloßen Salonwörter sind.","/str","/ev",{"temp=":"score_religion","re":true},{"->":".^.^.^.108"},null]}],["ev",{"VAR?":"relig"},{"VAR?":"social"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihr Katholizismus ist Erziehung, Gewohnheit und gesellschaftliche Grammatik; vertraut genug, um zu wirken, aber nicht immer tief genug, um zu tragen.","/str","/ev",{"temp=":"score_religion","re":true},{"->":".^.^.^.108"},null]}],["ev",{"VAR?":"relig"},{"VAR?":"reform"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie begegnet Kirche und Frömmigkeit mit reformerischer Nüchternheit: nützlich, wenn sie ordnen; verdächtig, wenn sie Angst verwalten.","/str","/ev",{"temp=":"score_religion","re":true},{"->":".^.^.^.108"},null]}],["ev",{"VAR?":"relig"},{"VAR?":"spiritist"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie verbindet katholische Bilder, Totenmessen, Séancen und Ahnungen leichter, als es einem Katechismus lieb wäre.","/str","/ev",{"temp=":"score_religion","re":true},{"->":".^.^.^.108"},null]}],["ev",{"VAR?":"relig"},{"VAR?":"wounded"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Der Glaube hat sie geformt und verwundet; sie kennt Gebet und Schuld zu genau, um beides harmlos zu nennen.","/str","/ev",{"temp=":"score_religion","re":true},{"->":".^.^.^.108"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihr Verhältnis zur Religion ist noch nicht vollständig beschrieben.","/str","/ev",{"temp=":"score_religion","re":true},{"->":".^.^.^.108"},null]}],"nop","\n",["ev",{"VAR?":"belief"},{"VAR?":"believer"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie hält das Unsichtbare für möglich und manchmal für näher, als die Gebildeten zugeben möchten.","/str","/ev",{"temp=":"score_belief","re":true},{"->":".^.^.^.115"},null]}],["ev",{"VAR?":"belief"},{"VAR?":"sceptic"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie sucht zuerst irdische Ursachen: Nutzen, Spuren, Gewohnheiten, Lügen und Menschen, die vom Glauben anderer profitieren.","/str","/ev",{"temp=":"score_belief","re":true},{"->":".^.^.^.115"},null]}],["ev",{"VAR?":"belief"},{"VAR?":"performer"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie weiß, dass ihr mystischer Ruf auch Bühne, Werkzeug und Schutzkleidung ist. Ob Wahrheit oder Trick: Wirkung ist bereits Macht.","/str","/ev",{"temp=":"score_belief","re":true},{"->":".^.^.^.115"},null]}],["ev",{"VAR?":"belief"},{"VAR?":"unsure"},"?","/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Sie hält ihr Urteil zurück; nicht aus Schwäche, sondern weil vorschnelle Gewissheit oft nur eine elegantere Form der Dummheit ist.","/str","/ev",{"temp=":"score_belief","re":true},{"->":".^.^.^.115"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihr Glaube an das Übernatürliche ist noch nicht vollständig beschrieben.","/str","/ev",{"temp=":"score_belief","re":true},{"->":".^.^.^.115"},null]}],"nop","\n",["ev",{"VAR?":"arrival_form_compromised"},{"f()":"has"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Am Nachmittag ließ sie die Kutsche mit Gepäck und Nachricht vorausfahren und kam zu Fuß in Hohenreith an: eigenmächtig, beobachtet und schwerer zu erklären.","/str","/ev",{"temp=":"score_approach","re":true},{"->":".^.^.^.120"},null]}],["ev",{"VAR?":"village_knowledge_prioritised"},{"f()":"has"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Am Nachmittag wählte sie den Umweg durch Eibenreith und fuhr anschließend verspätet weiter: weniger korrekt, aber reicher an Blicken, Stimmen und Ortswissen.","/str","/ev",{"temp=":"score_approach","re":true},{"->":".^.^.^.120"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Am Nachmittag bewahrte sie die Form und fuhr direkt nach Hohenreith: pünktlich, kontrolliert und standesgemäß.","/str","/ev",{"temp=":"score_approach","re":true},{"->":".^.^.^.120"},null]}],"nop","\n",["ev",{"VAR?":"order_axis"},{"f()":"axis_up"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihre bisher stärkste Maske ist Fassung: Form, Abstand und Selbstbeherrschung als Waffe.","/str","/ev",{"temp=":"score_route","re":true},{"->":".^.^.^.129"},null]}],["ev",{"VAR?":"inquiry_axis"},{"f()":"axis_up"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihre bisher stärkste Methode ist Untersuchung: Sie ordnet, prüft und entlarvt, bevor sie sich rühren lässt.","/str","/ev",{"temp=":"score_route","re":true},{"->":".^.^.^.129"},null]}],["ev",{"VAR?":"route_lover"},{"f()":"route_up"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihre bisher stärkste Methode ist Wirkung: Charme, Blick und soziale Wärme werden zu Werkzeugen.","/str","/ev",{"temp=":"score_route","re":true},{"->":".^.^.^.129"},null]}],["ev",{"VAR?":"route_sapphic"},{"f()":"route_up"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihre bisher stärkste Bewegung ist Resonanz: Sie erkennt besonders dort Gefangenschaft, wo Frauen gelernt haben, sie schön zu nennen.","/str","/ev",{"temp=":"score_route","re":true},{"->":".^.^.^.129"},null]}],["ev",{"VAR?":"route_careless"},{"f()":"route_up"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihre bisher stärkste Bewegung ist entwaffnende Unsicherheit: kleine Kontrollverluste, die andere näher heranlassen.","/str","/ev",{"temp=":"score_route","re":true},{"->":".^.^.^.129"},null]}],["ev",{"VAR?":"order_axis"},{"f()":"axis_down"},"/ev",{"->":".^.b","c":true},{"b":["\n","ev","str","^Ihre bisher stärkste Bewegung ist Regelbruch: Sie benennt, was höfliche Menschen nur umstellen.","/str","/ev",{"temp=":"score_route","re":true},{"->":".^.^.^.129"},null]}],[{"->":".^.b"},{"b":["\n","ev","str","^Ihre Persönlichkeit ist noch nicht auf eine einzige Maske festgelegt. Sie trägt mehrere Möglichkeiten nach Hohenreith hinein.","/str","/ev",{"temp=":"score_route","re":true},{"->":".^.^.^.129"},null]}],"nop","\n","#","^score[","ev",{"VAR?":"score_origin"},"out","/ev","^ ","ev",{"VAR?":"score_body"},"out","/ev","^ ","ev",{"VAR?":"score_outfit"},"out","/ev","^ ","ev",{"VAR?":"score_hair"},"out","/ev","^ ","ev",{"VAR?":"score_hairstyle"},"out","/ev","^ ","ev",{"VAR?":"score_face"},"out","/ev","^ ","ev",{"VAR?":"score_religion"},"out","/ev","^ ","ev",{"VAR?":"score_belief"},"out","/ev","^ ","ev",{"VAR?":"score_approach"},"out","/ev","^ ","ev",{"VAR?":"score_route"},"out","/ev","^ Charaktererschaffung abgeschlossen. Willkommen in Hohenreith.]","/#","end",null],"global decl":["ev",{"list":{},"origins":["TimeSlot"]},{"VAR=":"TimeSlot"},{"list":{},"origins":["EpisodeId"]},{"VAR=":"EpisodeId"},{"list":{},"origins":["MealPlan"]},{"VAR=":"MealPlan"},{"list":{},"origins":["Location"]},{"VAR=":"Location"},{"list":{},"origins":["Character"]},{"VAR=":"Character"},{"list":{},"origins":["Class"]},{"VAR=":"Class"},{"list":{},"origins":["Relig"]},{"VAR=":"Relig"},{"list":{},"origins":["Belief"]},{"VAR=":"Belief"},{"list":{},"origins":["Body"]},{"VAR=":"Body"},{"list":{},"origins":["Outfit"]},{"VAR=":"Outfit"},{"list":{},"origins":["Hair"]},{"VAR=":"Hair"},{"list":{},"origins":["Style"]},{"VAR=":"Style"},{"list":{},"origins":["Face"]},{"VAR=":"Face"},{"list":{},"origins":["Def"]},{"VAR=":"Def"},{"list":{},"origins":["RouteAxis"]},{"VAR=":"RouteAxis"},1,{"VAR=":"current_day"},{"VAR?":"mid_morning"},{"VAR=":"current_slot"},{"VAR?":"episode_train_intro"},{"VAR=":"active_episode"},"str","^normal","/str",{"VAR=":"last_slot_outcome"},{"VAR?":"meal_unset"},{"VAR=":"meal_plan"},{"VAR?":"loc_train_compartment"},{"VAR=":"current_location"},{"list":{}},{"VAR=":"companions"},{"^->":"empty_bucket"},{"VAR=":"current_room_entry_bucket"},{"^->":"empty_bucket"},{"VAR=":"current_moment_bucket"},{"^->":"empty_bucket"},{"VAR=":"current_room_look_bucket"},{"^->":"empty_bucket"},{"VAR=":"current_room_exit_bucket"},{"^->":"empty_bucket"},{"VAR=":"current_episode_bucket"},{"^->":"empty_bucket"},{"VAR=":"current_episode_start"},{"^->":"empty_bucket"},{"VAR=":"current_episode_end"},{"^->":"game_bucket"},{"VAR=":"current_game_bucket"},{"VAR?":"no_episode"},{"VAR=":"slot_early_morning_episode"},{"VAR?":"episode_train_intro"},{"VAR=":"slot_mid_morning_episode"},{"VAR?":"episode_station_midday"},{"VAR=":"slot_noon_episode"},{"VAR?":"episode_carriage_ride"},{"VAR=":"slot_afternoon_episode"},{"VAR?":"episode_first_dinner"},{"VAR=":"slot_evening_episode"},{"VAR?":"no_episode"},{"VAR=":"slot_early_night_episode"},{"VAR?":"no_episode"},{"VAR=":"slot_late_night_episode"},false,{"VAR=":"tut_choice_intro"},false,{"VAR=":"tut_traversal_intro"},false,{"VAR=":"tut_character_intro"},false,{"VAR=":"tut_dialog_intro"},false,{"VAR=":"tut_optional_intro"},{"list":{}},{"VAR=":"class"},"str","^","/str",{"VAR=":"title_part"},"str","^","/str",{"VAR=":"given_names"},"str","^","/str",{"VAR=":"common_name"},"str","^","/str",{"VAR=":"surname"},"str","^","/str",{"VAR=":"birthplace"},"str","^","/str",{"VAR=":"birthdate"},"str","^","/str",{"VAR=":"zodiac"},{"list":{}},{"VAR=":"relig"},{"list":{}},{"VAR=":"belief"},{"list":{}},{"VAR=":"body"},{"list":{}},{"VAR=":"outfit"},{"list":{}},{"VAR=":"hair"},{"list":{}},{"VAR=":"style"},{"list":{}},{"VAR=":"face"},0,{"VAR=":"route_composure"},0,{"VAR=":"route_detective"},0,{"VAR=":"route_lover"},0,{"VAR=":"route_sapphic"},0,{"VAR=":"route_careless"},0,{"VAR=":"route_eccentric"},0,{"VAR=":"amalia_agreeable"},0,{"VAR=":"amalia_adversarial"},0,{"VAR=":"amalia_open"},0,{"VAR=":"amalia_closed"},0,{"VAR=":"amalia_bold"},0,{"VAR=":"amalia_passive"},0,{"VAR=":"amalia_reliable"},0,{"VAR=":"amalia_unreliable"},0,{"VAR=":"amalia_insightful"},0,{"VAR=":"amalia_dull"},0,{"VAR=":"amalia_desire"},0,{"VAR=":"amalia_shame"},0,{"VAR=":"amalia_alarm"},0,{"VAR=":"amalia_fascination"},0,{"VAR=":"amalia_empowerment"},0,{"VAR=":"amalia_containment"},{"VAR?":"loc_train_compartment"},{"VAR=":"viktor_location"},0,{"VAR=":"viktor_agreeable"},0,{"VAR=":"viktor_adversarial"},0,{"VAR=":"viktor_open"},1,{"VAR=":"viktor_closed"},0,{"VAR=":"viktor_bold"},0,{"VAR=":"viktor_passive"},0,{"VAR=":"viktor_reliable"},0,{"VAR=":"viktor_unreliable"},0,{"VAR=":"viktor_insightful"},0,{"VAR=":"viktor_dull"},0,{"VAR=":"viktor_concern"},0,{"VAR=":"viktor_irritation"},0,{"VAR=":"viktor_alarm"},1,{"VAR=":"viktor_control"},0,{"VAR=":"viktor_loss_of_control"},2,{"VAR=":"viktor_professional_distance"},0,{"VAR=":"viktor_personal_involvement"},{"list":{},"origins":["CourtMission"]},{"VAR=":"CourtMission"},{"list":{},"origins":["ViktorRelationFrame"]},{"VAR=":"ViktorRelationFrame"},{"list":{},"origins":["ValerieWorkingMask"]},{"VAR=":"ValerieWorkingMask"},{"list":{},"origins":["PublicPersona"]},{"VAR=":"PublicPersona"},{"list":{},"origins":["ServiceWorld"]},{"VAR=":"ServiceWorld"},{"list":{},"origins":["ArrivalLogistics"]},{"VAR=":"ArrivalLogistics"},{"list":{},"origins":["OldSiteKnowledge"]},{"VAR=":"OldSiteKnowledge"},{"list":{},"origins":["ThresholdCrossing"]},{"VAR=":"ThresholdCrossing"},{"list":{},"origins":["SupernaturalFaculty"]},{"VAR=":"SupernaturalFaculty"},{"list":{},"origins":["AfternoonOutcome"]},{"VAR=":"AfternoonOutcome"},{"list":{},"origins":["EibenreithPublicFace"]},{"VAR=":"EibenreithPublicFace"},{"list":{},"origins":["VillageReligiousTension"]},{"VAR=":"VillageReligiousTension"},{"list":{},"origins":["HohenreithArrivalFrame"]},{"VAR=":"HohenreithArrivalFrame"},{"list":{},"origins":["FirstDinner"]},{"VAR=":"FirstDinner"},{"list":{}},{"VAR=":"story_state"},"/ev","end",null]}],"listDefs":{"TimeSlot":{"early_morning":1,"mid_morning":2,"noon":3,"afternoon":4,"evening":5,"early_night":6,"late_night":7},"EpisodeId":{"no_episode":1,"episode_train_intro":2,"episode_station_midday":3,"episode_carriage_ride":4,"episode_first_dinner":5},"MealPlan":{"meal_unset":1,"dining_car":2,"station_restaurant":3,"light_refreshment":4,"skipped":5},"Location":{"loc_train_compartment":1,"loc_train_home_corridor":2,"loc_train_clergy_corridor":3,"loc_train_washroom_corridor":4,"loc_train_washroom":5,"loc_train_dining_car":6,"loc_train_rear_lookout":7,"loc_train_second_class_door":8,"loc_station_platform":9,"loc_station_restaurant":10,"loc_carriage":11,"loc_carriage_halt":12,"loc_crossroad_statue":13,"loc_forest_clearing":14,"loc_roadside_statue":15,"loc_eibenreith_village":16,"loc_hohenreith_arrival":17,"loc_hohenreith_dining_room":18},"Character":{"viktor":1},"Class":{"noble":1,"middle":2,"working":3},"Relig":{"catholic":1,"social":2,"reform":3,"spiritist":4,"wounded":5},"Belief":{"believer":1,"sceptic":2,"performer":3,"unsure":4},"Body":{"small_slender":1,"medium_soft":2,"tall_slender":3,"compact_strong":4},"Outfit":{"charcoal_plum_velvet":1,"black_brown_ivory_lace":2,"blue_grey_practical":3,"dark_green_black_trim":4,"black_veil_severe":5},"Hair":{"dark_brown":1,"chestnut":2,"dark_blond_ash":3,"auburn":4},"Style":{"centre_part_low_bun":1,"soft_waves_chignon":2,"braided_low_knot":3,"raised_front_modern":4},"Face":{"cool_sharp":1,"soft_alert":2,"calm_dark_eyes":3,"fine_controlled":4,"marked_jaw":5},"Def":{"class_def":1,"name_def":2,"relig_def":3,"body_def":4,"face_def":5,"belief_def":6,"route_language_def":7,"dining_car_known_def":8,"intro_def":9},"RouteAxis":{"order_axis":1,"inquiry_axis":2,"allure_axis":3},"CourtMission":{"court_mission_unknown":1,"sealed_letter_known":2,"official_cover_understood":3,"household_affair_named":4,"supernatural_pretext_named":5,"hidden_instruction_revealed":6,"mission_contradictions_suspected":7},"ViktorRelationFrame":{"viktor_frame_unknown":1,"escort_present":2,"secretary_cover_understood":3,"handler_role_understood":4,"skepticism_registered":5,"methods_negotiated":6,"mutual_risk_recognized":7},"ValerieWorkingMask":{"valerie_mask_unformed":1,"courtly_woman_presented":2,"name_claimed":3,"medium_reputation_invoked":4,"method_as_mask_understood":5,"social_strategy_established":6},"PublicPersona":{"public_unseen":1,"noticed_as_lady":2,"noticed_as_official_arrival":3,"station_audience_tested":4,"public_mask_established":5,"public_mask_strained":6},"ServiceWorld":{"service_unseen":1,"staff_as_function_noticed":2,"staff_as_witnesses_noticed":3,"staff_as_network_suspected":4,"staff_as_power_source_understood":5},"ArrivalLogistics":{"arrival_logistics_unknown":1,"meal_plan_chosen":2,"meal_taken_in_train":3,"meal_taken_at_station":4,"meal_skipped_or_light":5,"carriage_arranged":6,"baggage_handed_over":7,"road_departure_ready":8},"OldSiteKnowledge":{"old_site_unknown":1,"managed_landscape_seen":2,"religious_markers_seen":3,"old_boundary_felt":4,"old_name_heard":5,"prechristian_underlayer_suspected":6,"old_site_has_claim":7},"ThresholdCrossing":{"ordinary_travel":1,"city_order_receding":2,"valley_order_emerging":3,"local_rules_beginning":4,"return_feels_less_simple":5},"SupernaturalFaculty":{"faculty_unframed":1,"no_claim_made":2,"intuition_framed":3,"sensory_anomaly_framed":4,"performance_framed":5,"faculty_committed":6},"AfternoonOutcome":{"punctual_arrival_preserved":1,"village_knowledge_prioritised":2,"arrival_form_compromised":3},"EibenreithPublicFace":{"eibenreith_face_unknown":1,"curious":2,"cautious":3,"suspicious":4,"unsettled":5,"openly_watching_valerie":6},"VillageReligiousTension":{"village_religion_unknown":1,"church_as_center_seen":2,"christian_surface_noted":3,"older_presence_hint":4,"two_orders_in_conflict":5,"village_fear_has_form":6},"HohenreithArrivalFrame":{"hohenreith_arrival_unknown":1,"expected_guest":2,"punctual_official_guest":3,"delayed_after_village_detour":4,"household_form_preserved":5,"household_form_disturbed":6,"amalia_seen_before_dinner":7},"FirstDinner":{"dinner_not_started":1,"household_assembled":2,"seating_order_read":3,"amalia_seen_as_spoken_for":4,"valerie_tested_at_table":5,"dinner_completed":6}}}
\ No newline at end of file
diff --git a/dist/engine/ink-engine.js b/dist/engine/ink-engine.js
index 3eb3922..f9e0640 100644
--- a/dist/engine/ink-engine.js
+++ b/dist/engine/ink-engine.js
@@ -58,7 +58,7 @@ class InkEngine {
this.story = null;
this.nextTurnId = 1;
this.storyJson = null;
- this.choicePreviewTagKeys = new Set(['action', 'key', 'letter', 'optional', 'gated', 'sort']);
+ this.choicePreviewTagKeys = new Set(['action', 'key', 'letter', 'optional', 'gated', 'sort', 'auto']);
}
isRunning() {
if (!this.story)
diff --git a/dist/engine/ink-engine.js.map b/dist/engine/ink-engine.js.map
index b373a63..2b11efb 100644
--- a/dist/engine/ink-engine.js.map
+++ b/dist/engine/ink-engine.js.map
@@ -1 +1 @@
-{"version":3,"file":"ink-engine.js","sourceRoot":"","sources":["../../src/engine/ink-engine.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"ink-engine.js","sourceRoot":"","sources":["../../src/engine/ink-engine.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/server-yaml.js b/dist/server-yaml.js
index 4077279..30fc10e 100644
--- a/dist/server-yaml.js
+++ b/dist/server-yaml.js
@@ -204,11 +204,12 @@ io.on('connection', (socket) => {
return;
}
const command = String(data?.command || '').trim();
+ const requestId = Number(data?.requestId || 0);
// During typography and animation work, mirror the command back through
// the real socket path so the UI pipeline can be tested end to end.
- socket.emit('narrativeResponse', createTextTurn(socket.id, command, {
+ socket.emit('narrativeResponse', withClientRequestId(createTextTurn(socket.id, command, {
currentRoomId: gameRunner.getGameState().currentRoomId
- }, gameRunner.getSuggestions()));
+ }, gameRunner.getSuggestions()), Number.isInteger(requestId) && requestId > 0 ? requestId : undefined));
}
catch (error) {
console.error('Error processing command:', error);
diff --git a/dist/server-yaml.js.map b/dist/server-yaml.js.map
index e6a2137..5da08cb 100644
--- a/dist/server-yaml.js.map
+++ b/dist/server-yaml.js.map
@@ -1 +1 @@
-{"version":3,"file":"server-yaml.js","sourceRoot":"","sources":["../src/server-yaml.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"server-yaml.js","sourceRoot":"","sources":["../src/server-yaml.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/server-zcode.js b/dist/server-zcode.js
index 938e92c..ebc47c4 100644
--- a/dist/server-zcode.js
+++ b/dist/server-zcode.js
@@ -261,6 +261,7 @@ io.on('connection', (socket) => {
return;
}
const input = String(data?.command ?? '').trim();
+ const requestId = Number(data?.requestId || 0);
if (!input)
return;
debugLog(`playerCommand from ${socket.id}: ${input}`);
@@ -271,7 +272,7 @@ io.on('connection', (socket) => {
paragraphs: turn.paragraphs.length,
statusLine: turn.gameState?.statusLine,
});
- socket.emit('narrativeResponse', toClientTurn(turn));
+ socket.emit('narrativeResponse', withClientRequestId(toClientTurn(turn), Number.isInteger(requestId) && requestId > 0 ? requestId : undefined));
}
catch (error) {
console.error('[zcode] playerCommand error:', error);
diff --git a/dist/server-zcode.js.map b/dist/server-zcode.js.map
index 86935a0..f85baca 100644
--- a/dist/server-zcode.js.map
+++ b/dist/server-zcode.js.map
@@ -1 +1 @@
-{"version":3,"file":"server-zcode.js","sourceRoot":"","sources":["../src/server-zcode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"server-zcode.js","sourceRoot":"","sources":["../src/server-zcode.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,gDAAwB;AACxB,gDAAwB;AACxB,sDAA8B;AAC9B,yCAAqD;AACrD,+CAAiC;AACjC,2BAAyD;AACzD,gEAA4E;AAC5E,sDAK8B;AAE9B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;AACtB,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,MAAM,EAAE,GAAG,IAAI,kBAAc,CAAC,MAAM,CAAC,CAAC;AAEtC,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC9E,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AAC/E,MAAM,YAAY,GAAG,IAAA,4BAAc,EACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,6BAA6B,EAC9D,OAAO,CACR,CAAC;AAEF,SAAS,QAAQ,CAAC,OAAe,EAAE,OAAiB;IAClD,IAAI,CAAC,aAAa;QAAE,OAAO;IAC3B,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,kCAAkC;AAClC,GAAG,CAAC,GAAG,CACL,iBAAO,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;IAChD,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;QAClB,GAAG,CAAC,SAAS,CACX,eAAe,EACf,uDAAuD,CACxD,CAAC;QACF,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CACH,CAAC;AAEF,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACxC,GAAG,CAAC,IAAI,CAAC,IAAA,8BAAgB,EAAC,YAAY,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,2CAA2C;AAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;AACnD,kEAAkE;AAClE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;AAEzD,SAAS,YAAY,CAAC,IAAqB;IACzC,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE;YACT,GAAG,IAAI,CAAC,SAAS;YACjB,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU;YACzC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU;SACvC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAa;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,iCAAc,CAAC;YAC1B,SAAS,EAAE,IAAA,yBAAW,EAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;YACvF,SAAS,EAAE,IAAA,yBAAW,EAAC,YAAY,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC;SAC7E,CAAC,CAAC;QACH,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB;IAChC,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAmB,IAAO,EAAE,SAAkB;IACxE,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;QACnC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAEC,EACD,MAAc,EACd,IAAe,EACf,SAAkB;IAElB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,QAAQ,CAAC,wBAAwB,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YACrF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC;aACxB,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAClE,CAAC;YACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YACrF,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;YAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9D,CAAC;QAED,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;gBACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/C,CAAC;QAED,KAAK,aAAa,CAAC;QACnB,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1D,CAAC;QAED,KAAK,cAAc,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACvD,CAAC;QAEJ,KAAK,eAAe,CAAC;QACrB,KAAK,iBAAiB;YACpB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,KAAK;aACtD,CAAC;QAEJ;YACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,MAAM,EAAE,EAAE,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,SAAS,GAAG,IAAA,yBAAW,EAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,IAAA,yBAAW,EAAC,YAAY,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG;QAClB,0BAA0B;QAC1B,mBAAmB;QACnB,wBAAwB;QACxB,sBAAsB;KACvB,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW;SAC/B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SACzC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,uBAAuB,EAAE;QAChC,SAAS;QACT,SAAS;QACT,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAClD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;IAC7B,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAA,8BAAgB,EAAC,YAAY,CAAC,CAAC,CAAC;IAE1D,MAAM,CAAC,EAAE,CACP,SAAS,EACT,KAAK,EACH,OAAkE,EAClE,OAAiC,EACjC,EAAE;QACF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,MAA6C,EAC7C,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,EAC7B,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAChD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC;gBAC5E,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;gBAC5B,CAAC,CAAC,SAAS,CACd,CAAC;YACF,QAAQ,CAAC,uBAAuB,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,OAAO,OAAO,KAAK,UAAU;gBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,CAAC;oBACN,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,EAAE,CACP,eAAe,EACf,KAAK,EAAE,IAA8C,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBACnB,OAAO,EAAE,6CAA6C;aACvD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,QAAQ,CAAC,sBAAsB,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAoB,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/D,QAAQ,CAAC,wBAAwB,MAAM,CAAC,EAAE,EAAE,EAAE;gBAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAClC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU;aACvC,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAC9G,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBACnB,OAAO,EACL,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG;QACX,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACjC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QACpC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QACrC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACxC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACvC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACxC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACvC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACtC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC;KAC9C,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC;YAAE,IAAA,cAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAA,8CAAgC,EAAC,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;IAC9D,IAAI,IAAA,eAAU,EAAC,GAAG,CAAC,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC;QAAE,IAAA,iBAAY,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,KAAa;IAC3D,iBAAiB,EAAE,CAAC;IACpB,IAAI,CAAC;QAAC,cAAc,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IAClD,yBAAyB,EAAE,CAAC;IAE5B,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,OAAO,IAAI,GAAG,WAAW,GAAG,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACnC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;oBAC5B,OAAO,CAAC,GAAG,CACT,8DAA8D,IAAI,EAAE,CACrE,CAAC;oBACF,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;oBAClD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,iBAAiB,GAAG,CAAC,IAAI,aAAa,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC7E,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,CAAC;oBACX,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,IAAI,IAAI,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,mCAAmC,WAAW,IAAI,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,CAC5E,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
\ No newline at end of file
diff --git a/public/js/browser-tts-module.js b/public/js/browser-tts-module.js
index f0d2361..079c2f0 100644
--- a/public/js/browser-tts-module.js
+++ b/public/js/browser-tts-module.js
@@ -517,17 +517,20 @@ export class BrowserTTSModule extends TTSHandlerModule {
}
/**
- * Speak preloaded speech
- * Not applicable for the browser TTS (always returns false)
- * @param {Object} preloadData - Preloaded speech data
- * @param {Function} callback - Callback for when speech completes
- * @returns {boolean} - Success status (always false)
+ * Speak preloaded speech metadata.
+ * Browser TTS cannot preload audio bytes, so its preload result carries the
+ * text and duration estimate and playback still happens through speak().
*/
speakPreloaded(preloadData, callback = null) {
- if (typeof callback === 'function') {
- callback({ success: false, reason: 'not_supported' });
+ const text = String(preloadData?.text || '').trim();
+ if (!text) {
+ if (typeof callback === 'function') {
+ callback({ success: false, reason: 'empty_preloaded_text' });
+ }
+ return false;
}
- return false;
+
+ return this.speak(text, callback);
}
}
diff --git a/public/js/choice-display-module.js b/public/js/choice-display-module.js
index fa38659..e871783 100644
--- a/public/js/choice-display-module.js
+++ b/public/js/choice-display-module.js
@@ -15,6 +15,9 @@ class ChoiceDisplayModule extends BaseModule {
this.choices = [];
this.inputMode = 'none';
this.processState = document.documentElement.dataset.processState || 'loading';
+ this.currentTurnId = 0;
+ this.autoTurnCounter = 0;
+ this.lastAutoTurn = new Map();
this.template = {
cells: {
default: {
@@ -39,8 +42,15 @@ class ChoiceDisplayModule extends BaseModule {
'shuffleChoices',
'randomInt',
'assignLetters',
+ 'selectAutoChoice',
+ 'isAutoChoiceReady',
+ 'getAutoChoiceConfig',
+ 'getAutoChoiceKey',
+ 'getAutoChoiceDelay',
+ 'markAutoChoiceTriggered',
'selectChoice',
'getTagValue',
+ 'getTag',
'getTemplateCell',
'renderChoiceText'
]);
@@ -60,10 +70,23 @@ class ChoiceDisplayModule extends BaseModule {
this.addEventListener(document, 'story:process-state', (event) => {
this.handleProcessState(event.detail?.state || 'ready');
});
- this.addEventListener(document, 'story:turn-start', () => {
+ this.addEventListener(document, 'story:turn-start', (event) => {
+ const turnId = Number(event.detail?.turnId);
+ if (turnId === 1) {
+ this.currentTurnId = 0;
+ this.autoTurnCounter = 0;
+ this.lastAutoTurn.clear();
+ }
this.processState = 'waiting-generating';
this.render();
});
+ this.addEventListener(document, 'story:turn-complete', (event) => {
+ const turnId = Number(event.detail?.turnId);
+ if (Number.isInteger(turnId) && turnId !== this.currentTurnId) {
+ this.currentTurnId = turnId;
+ this.autoTurnCounter += 1;
+ }
+ });
this.addEventListener(document, 'story:history-restoring', (event) => {
document.documentElement.dataset.historyRestoring = event.detail?.active ? 'true' : 'false';
this.render();
@@ -130,7 +153,7 @@ class ChoiceDisplayModule extends BaseModule {
}
const letter = event.key.toUpperCase();
- const choice = this.choices.find((item) => item.letter === letter);
+ const choice = this.choices.find((item) => !item.auto && item.letter === letter);
if (!choice) {
return;
}
@@ -151,11 +174,20 @@ class ChoiceDisplayModule extends BaseModule {
sourceOrder: order,
optional: this.hasTag(tags, 'optional'),
letter: '',
- templateCell: this.getTemplateCell({ ...choice, tags, category })
+ templateCell: this.getTemplateCell({ ...choice, tags, category }),
+ auto: this.hasTag(tags, 'auto')
};
});
- return this.assignLetters(this.orderChoicesForPresentation(normalized));
+ const autoChoices = normalized
+ .filter((choice) => choice.auto)
+ .sort((a, b) => a.sourceOrder - b.sourceOrder);
+ const visibleChoices = normalized.filter((choice) => !choice.auto);
+
+ return [
+ ...autoChoices,
+ ...this.assignLetters(this.orderChoicesForPresentation(visibleChoices))
+ ];
}
orderChoicesForPresentation(choices) {
@@ -254,11 +286,17 @@ class ChoiceDisplayModule extends BaseModule {
}
getTagValue(tags, key) {
- const normalizedKey = String(key).toLowerCase();
- const tag = tags.find((item) => String(item?.key || '').toLowerCase() === normalizedKey);
+ const tag = this.getTag(tags, key);
return tag?.value;
}
+ getTag(tags, key) {
+ const normalizedKey = String(key).toLowerCase();
+ return Array.isArray(tags)
+ ? tags.find((item) => String(item?.key || '').toLowerCase() === normalizedKey)
+ : undefined;
+ }
+
hasTag(tags, key) {
const normalizedKey = String(key).toLowerCase();
return Array.isArray(tags) && tags.some((item) => String(item?.key || '').toLowerCase() === normalizedKey);
@@ -276,8 +314,15 @@ class ChoiceDisplayModule extends BaseModule {
this.inputMode === 'choice' &&
this.choices.length > 0 &&
this.processState === 'ready';
- this.container.hidden = !readyForChoices;
- this.container.dataset.choiceReady = readyForChoices ? 'true' : 'false';
+
+ if (readyForChoices && this.selectAutoChoice()) {
+ return;
+ }
+
+ const visibleChoices = this.choices.filter((choice) => !choice.auto);
+ const hasVisibleChoices = visibleChoices.length > 0;
+ this.container.hidden = !readyForChoices || !hasVisibleChoices;
+ this.container.dataset.choiceReady = readyForChoices && hasVisibleChoices ? 'true' : 'false';
if (this.container.hidden) {
return;
}
@@ -285,7 +330,7 @@ class ChoiceDisplayModule extends BaseModule {
const list = document.createElement('ol');
list.className = 'choice-list choice-template-default';
- this.choices.forEach((choice) => {
+ visibleChoices.forEach((choice) => {
const item = document.createElement('li');
item.className = 'choice-list-item';
item.classList.toggle('choice-optional', Boolean(choice.optional));
@@ -307,6 +352,75 @@ class ChoiceDisplayModule extends BaseModule {
this.container.appendChild(list);
}
+ selectAutoChoice() {
+ const autoChoice = this.choices.find((choice) => choice.auto && this.isAutoChoiceReady(choice));
+ if (!autoChoice) {
+ return false;
+ }
+
+ this.markAutoChoiceTriggered(autoChoice);
+ this.selectChoice(autoChoice.index);
+ return true;
+ }
+
+ isAutoChoiceReady(choice) {
+ const config = this.getAutoChoiceConfig(choice);
+ if (!config) {
+ return false;
+ }
+ if (config.delay <= 0) {
+ return true;
+ }
+
+ const lastTurn = this.lastAutoTurn.get(config.key);
+ if (!Number.isFinite(lastTurn)) {
+ return true;
+ }
+
+ return (this.autoTurnCounter - lastTurn) >= config.delay;
+ }
+
+ getAutoChoiceConfig(choice) {
+ const autoTag = this.getTag(choice.tags, 'auto');
+ if (!autoTag) {
+ return null;
+ }
+
+ return {
+ key: this.getAutoChoiceKey(autoTag),
+ delay: this.getAutoChoiceDelay(autoTag)
+ };
+ }
+
+ getAutoChoiceKey(autoTag) {
+ const value = String(autoTag?.value || '').trim();
+ return value || '__global';
+ }
+
+ getAutoChoiceDelay(autoTag) {
+ const candidates = [autoTag?.param, autoTag?.value];
+ for (const candidate of candidates) {
+ const text = String(candidate || '').trim();
+ if (!text) continue;
+
+ const namedMatch = text.match(/(?:turns?|delay|cooldown)\s*=\s*(\d+)/i);
+ const plainMatch = text.match(/^\d+$/);
+ const value = namedMatch ? Number(namedMatch[1]) : plainMatch ? Number(text) : NaN;
+ if (Number.isFinite(value)) {
+ return Math.max(0, Math.floor(value));
+ }
+ }
+ return 0;
+ }
+
+ markAutoChoiceTriggered(choice) {
+ const config = this.getAutoChoiceConfig(choice);
+ if (!config) {
+ return;
+ }
+ this.lastAutoTurn.set(config.key, this.autoTurnCounter);
+ }
+
async selectChoice(index) {
if (!this.socketClient) {
this.socketClient = this.getModule('socket-client');
diff --git a/public/js/game-loop-module.js b/public/js/game-loop-module.js
index 3158a71..7ebaca7 100644
--- a/public/js/game-loop-module.js
+++ b/public/js/game-loop-module.js
@@ -33,6 +33,8 @@ class GameLoopModule extends BaseModule {
this.clientResetGeneration = 0;
this.restoreGeneration = 0;
this.pendingHistoryRestoreCleanup = null;
+ this.gameOperationGeneration = 0;
+ this.autoSaveGeneration = 0;
// Bind methods using parent's bindMethods utility
this.bindMethods([
@@ -212,6 +214,8 @@ class GameLoopModule extends BaseModule {
async resumeAutosaveIfAvailable() {
if (this.resumeAttempted) return false;
this.resumeAttempted = true;
+ const operationGeneration = ++this.gameOperationGeneration;
+ const isCurrentOperation = () => operationGeneration === this.gameOperationGeneration;
const storyHistory = this.getModule('story-history');
const socketClient = this.getModule('socket-client');
@@ -220,11 +224,13 @@ class GameLoopModule extends BaseModule {
}
const browserSave = await storyHistory.loadSlot(this.autoSaveSlot);
+ if (!isCurrentOperation()) return false;
if (!browserSave?.inkState || browserSave.running === false) {
return false;
}
await this.resetClientPlaybackAndDisplay();
+ if (!isCurrentOperation()) return false;
this.currentChoices = [];
this.currentInputMode = 'none';
document.dispatchEvent(new CustomEvent('story:choices', { detail: [] }));
@@ -234,6 +240,7 @@ class GameLoopModule extends BaseModule {
}));
const response = await socketClient.resumeGame(browserSave.inkState);
+ if (!isCurrentOperation()) return false;
if (!response?.success) {
console.warn('GameLoop: autosave resume failed', response);
document.dispatchEvent(new CustomEvent('story:history-restoring', {
@@ -249,6 +256,7 @@ class GameLoopModule extends BaseModule {
this.gameState.canLoad = true;
this.updateUIState();
await this.restoreBrowserSave(browserSave, 'autosave-resume', { resetDisplay: false });
+ if (!isCurrentOperation()) return false;
this.restoreInputStateFromSave(browserSave, 'autosave-resume');
return true;
}
@@ -297,6 +305,8 @@ class GameLoopModule extends BaseModule {
async requestStartGame() {
const socketClient = this.getModule('socket-client');
if (!socketClient) return;
+ const operationGeneration = ++this.gameOperationGeneration;
+ const isCurrentOperation = () => operationGeneration === this.gameOperationGeneration;
this.gameState.started = true;
this.gameState.startedOnce = true;
@@ -304,9 +314,11 @@ class GameLoopModule extends BaseModule {
this.gameState.canSave = true;
this.updateUIState();
await this.resetClientPlaybackAndDisplay();
+ if (!isCurrentOperation()) return;
const storyHistory = this.getModule('story-history');
if (storyHistory && typeof storyHistory.startNewGame === 'function') {
await storyHistory.startNewGame();
+ if (!isCurrentOperation()) return;
if (typeof storyHistory.saveSlot === 'function') {
await storyHistory.saveSlot(this.autoSaveSlot, {
inkState: null,
@@ -317,6 +329,7 @@ class GameLoopModule extends BaseModule {
}
}
const response = await socketClient.newGame();
+ if (!isCurrentOperation()) return;
if (!response?.success) {
console.error('GameLoop: newGame failed', response);
this.gameState.started = false;
@@ -331,6 +344,7 @@ class GameLoopModule extends BaseModule {
this.gameState.canLoad = Boolean(response.canLoad);
this.updateUIState();
if (response.savedState && storyHistory && typeof storyHistory.saveSlot === 'function') {
+ if (!isCurrentOperation()) return;
await storyHistory.saveSlot(this.autoSaveSlot, {
inkState: response.savedState,
choices: [],
@@ -375,12 +389,16 @@ class GameLoopModule extends BaseModule {
async requestLoadGame() {
const socketClient = this.getModule('socket-client');
if (!socketClient) return;
+ const operationGeneration = ++this.gameOperationGeneration;
+ const isCurrentOperation = () => operationGeneration === this.gameOperationGeneration;
const storyHistory = this.getModule('story-history');
const browserSave = storyHistory && typeof storyHistory.loadSlot === 'function'
? await storyHistory.loadSlot(1)
: null;
+ if (!isCurrentOperation()) return;
const hasSave = browserSave ? { result: true } : await socketClient.hasSaveGame(1);
+ if (!isCurrentOperation()) return;
if (!hasSave?.result) {
this.gameState.canLoad = false;
this.updateUIState();
@@ -394,7 +412,9 @@ class GameLoopModule extends BaseModule {
this.gameState.canLoad = true;
this.updateUIState();
await this.restoreBrowserSave(browserSave, 'load-game', { resetDisplay: true });
+ if (!isCurrentOperation()) return;
const response = await socketClient.loadGame(1, browserSave?.inkState || null);
+ if (!isCurrentOperation()) return;
if (response?.success && browserSave && Array.isArray(browserSave.choices)) {
this.currentChoices = browserSave.choices;
this.currentInputMode = browserSave.inputMode || this.currentInputMode;
@@ -523,11 +543,16 @@ class GameLoopModule extends BaseModule {
return;
}
+ const autoSaveGeneration = this.autoSaveGeneration;
+ const gameId = storyHistory.currentGameId || null;
this.autoSaveInProgress = true;
try {
const response = this.gameState.started && typeof socketClient.exportGameState === 'function'
? await socketClient.exportGameState()
: null;
+ if (autoSaveGeneration !== this.autoSaveGeneration || storyHistory.currentGameId !== gameId) {
+ return;
+ }
if (!response?.success || !response.savedState) {
return;
}
@@ -535,6 +560,7 @@ class GameLoopModule extends BaseModule {
const audioManager = this.getModule('audio-manager');
await storyHistory.saveSlot(this.autoSaveSlot, {
+ gameId,
inkState: response.savedState,
latestRenderedBlockId: storyHistory.latestRenderedBlockId || 0,
renderedLineCount: storyHistory.renderedLineCount || 0,
@@ -545,9 +571,11 @@ class GameLoopModule extends BaseModule {
});
} finally {
this.autoSaveInProgress = false;
- if (this.autoSaveQueued) {
+ if (autoSaveGeneration === this.autoSaveGeneration && this.autoSaveQueued) {
this.autoSaveQueued = false;
this.autoSaveCurrentSession();
+ } else {
+ this.autoSaveQueued = false;
}
}
}
@@ -568,6 +596,7 @@ class GameLoopModule extends BaseModule {
async resetClientPlaybackAndDisplay() {
this.clientResetGeneration += 1;
this.restoreGeneration += 1;
+ this.autoSaveGeneration += 1;
this.clearPendingHistoryRestore('client-reset');
const playbackCoordinator = this.getModule('playback-coordinator');
diff --git a/public/js/sentence-queue-module.js b/public/js/sentence-queue-module.js
index dc2db8d..32ea79a 100644
--- a/public/js/sentence-queue-module.js
+++ b/public/js/sentence-queue-module.js
@@ -30,6 +30,7 @@ class SentenceQueueModule extends BaseModule {
this.assetPreloadTimeoutMs = ASSET_PRELOAD_TIMEOUT_MS;
this.generationRequests = new Map();
this.assetPreloadRequests = new Map();
+ this.queueGeneration = 0;
// Bind methods
this.bindMethods([
@@ -64,6 +65,7 @@ class SentenceQueueModule extends BaseModule {
'getDropCapText',
'extractDropCapText',
'calculateAnimationTiming',
+ 'isCurrentQueueItem',
'clear'
]);
}
@@ -170,12 +172,14 @@ class SentenceQueueModule extends BaseModule {
this.isProcessing = true;
const item = this.sentenceQueue[0];
+ const queueGeneration = this.queueGeneration;
try {
if (this.pauseBeforeNextReason) {
const reason = this.pauseBeforeNextReason;
this.pauseBeforeNextReason = null;
await this.waitForManualContinue(reason);
+ if (!this.isCurrentQueueItem(item, queueGeneration)) return;
}
document.dispatchEvent(new CustomEvent('story:process-state', {
@@ -189,10 +193,12 @@ class SentenceQueueModule extends BaseModule {
}));
const sentence = await this.getPreparedSentence(item);
+ if (!this.isCurrentQueueItem(item, queueGeneration)) return;
// Prefetch far enough ahead that media pauses do not block TTS
// generation for the next spoken paragraph.
- this.prefetchAhead();
+ this.prefetchAhead(4, queueGeneration);
+ if (!this.isCurrentQueueItem(item, queueGeneration)) return;
// Notify display handler with complete sentence
if (this.onSentenceReadyCallback) {
@@ -201,22 +207,28 @@ class SentenceQueueModule extends BaseModule {
sentence.playbackStartedAt = performance.now();
this.onSentenceReadyCallback(sentence, resolve);
});
+ if (!this.isCurrentQueueItem(item, queueGeneration)) return;
}
const mediaPauseSeconds = this.getMediaPauseSeconds(sentence);
if (mediaPauseSeconds > 0) {
await this.waitForSkippableMediaPause(mediaPauseSeconds, sentence.kind, sentence.id);
+ if (!this.isCurrentQueueItem(item, queueGeneration)) return;
}
if (this.shouldPauseAfterSentence(sentence)) {
await this.waitForManualContinue(sentence.id);
+ if (!this.isCurrentQueueItem(item, queueGeneration)) return;
}
// Remove from queue and continue
- this.sentenceQueue.shift();
+ if (this.sentenceQueue[0] === item) {
+ this.sentenceQueue.shift();
+ }
if (item.callback) item.callback({ success: true });
} catch (error) {
+ if (!this.isCurrentQueueItem(item, queueGeneration)) return;
console.error("SentenceQueue: Error processing sentence:", error);
const failedItem = this.sentenceQueue.shift();
console.warn('SentenceQueue: Dropped failed queue item so playback can continue', {
@@ -843,7 +855,11 @@ class SentenceQueueModule extends BaseModule {
return this.prepareSentence(item);
}
- prefetchAhead(maxLookahead = 4) {
+ isCurrentQueueItem(item, queueGeneration = this.queueGeneration) {
+ return queueGeneration === this.queueGeneration && this.sentenceQueue[0] === item;
+ }
+
+ prefetchAhead(maxLookahead = 4, queueGeneration = this.queueGeneration) {
if (this.sentenceQueue.length <= 1) {
document.dispatchEvent(new CustomEvent('story:process-state', {
detail: { state: 'playing-ready', reason: 'no-prefetch-needed', sentenceId: this.sentenceQueue[0]?.id }
@@ -871,11 +887,13 @@ class SentenceQueueModule extends BaseModule {
console.log(`Process state: ${state}`, { reason: 'prefetch-start', sentenceId: nextItem.id, queueIndex: index });
const promise = (async () => {
+ if (queueGeneration !== this.queueGeneration) return null;
await this.preloadAssetsForItem(nextItem, {
sentenceId: nextItem.id,
blocking: false,
prefetch: true
});
+ if (queueGeneration !== this.queueGeneration) return null;
if (!this.isSpeechItem(nextItem)) {
return null;
@@ -892,6 +910,7 @@ class SentenceQueueModule extends BaseModule {
});
})()
.then(() => {
+ if (queueGeneration !== this.queueGeneration) return false;
console.log('SentenceQueue: Prefetched queued speech/media', { sentenceId: nextItem.id, queueIndex: index });
document.dispatchEvent(new CustomEvent('story:process-state', {
detail: { state: 'playing-ready', reason: 'prefetch-complete', sentenceId: nextItem.id, queueIndex: index }
@@ -1316,10 +1335,13 @@ class SentenceQueueModule extends BaseModule {
}
clear() {
+ this.queueGeneration += 1;
this.sentenceQueue = [];
this.isProcessing = false;
this.cancelGenerationRequests('sentence-queue-cleared');
+ this.cancelAssetPreloads('sentence-queue-cleared');
this.prefetchingSpeech.clear();
+ this.pauseBeforeNextReason = null;
document.dispatchEvent(new CustomEvent('tts:queue-empty', {
detail: { reason: 'sentence-queue-cleared' }
}));
diff --git a/public/js/socket-client-module.js b/public/js/socket-client-module.js
index 11e9372..5dc19bb 100644
--- a/public/js/socket-client-module.js
+++ b/public/js/socket-client-module.js
@@ -798,7 +798,9 @@ class SocketClientModule extends BaseModule {
try {
this.clearPendingCommand('new-command');
- this.socket.emit('playerCommand', { command });
+ const requestId = ++this.gameApiRequestId;
+ this.latestNarrativeRequestId = requestId;
+ this.socket.emit('playerCommand', { command, requestId });
this.pendingCommand = command;
this.pendingCommandTimer = setTimeout(() => {
const timedOutCommand = this.pendingCommand;
diff --git a/public/js/tts-factory-module.js b/public/js/tts-factory-module.js
index 2e6c231..f91ad24 100644
--- a/public/js/tts-factory-module.js
+++ b/public/js/tts-factory-module.js
@@ -813,7 +813,7 @@ class TTSFactoryModule extends BaseModule {
if (typeof handler.preloadSpeech === 'function') {
console.log(`TTS Factory: Generating and caching speech for hash ${hash}`);
const preloadData = await handler.preloadSpeech(text, options);
- if (preloadData && preloadData.success) {
+ if (preloadData && preloadData.success && preloadData.audioData) {
// Cache the speech
await this.cacheSpeech(hash, preloadData.audioData, preloadData.duration);
diff --git a/public/js/ui-display-handler-module.js b/public/js/ui-display-handler-module.js
index 09fd912..20f039d 100644
--- a/public/js/ui-display-handler-module.js
+++ b/public/js/ui-display-handler-module.js
@@ -38,6 +38,7 @@ class UIDisplayHandlerModule extends BaseModule {
this.scrollTargetLine = null;
this.scrollRequestId = 0;
this.renderWindowToken = 0;
+ this.displayGeneration = 0;
this.wheelLineAccumulator = 0;
this.viewportLineCount = 1;
this.lineHeightPx = 24;
@@ -124,6 +125,7 @@ class UIDisplayHandlerModule extends BaseModule {
'rerenderStory',
'clear',
'scheduleRerender',
+ 'isDisplayGenerationCurrent',
'measureText',
'loadCSS',
'showChoices',
@@ -955,15 +957,35 @@ class UIDisplayHandlerModule extends BaseModule {
return null;
}
+ const generation = this.displayGeneration;
+ const sentenceGameId = sentence.gameId || null;
+ const isCurrent = () => this.isDisplayGenerationCurrent(generation, sentenceGameId);
+
try {
await this.ensureLiveTailWindow();
+ if (!isCurrent()) return null;
await this.scrollTo(this.getLiveEndLine(), { mode: 'enter-live-tail', smooth: false });
+ if (!isCurrent()) return null;
this.rebuildLayoutExclusions(this.renderedItems);
this.layoutFlowLine = this.getFlowLineFromItems(this.renderedItems);
- const element = await this.renderStoryBlock(sentence, { animate: true, playback: true, placement: 'append' });
+ const element = await this.renderStoryBlock(sentence, {
+ animate: true,
+ playback: true,
+ placement: 'append',
+ token: this.renderWindowToken,
+ generation
+ });
if (!element) return null;
+ if (!isCurrent()) {
+ element.remove();
+ return null;
+ }
sentence.element = element;
await this.scrollTo(this.getLiveEndLine(), { mode: 'append-live' });
+ if (!isCurrent()) {
+ element.remove();
+ return null;
+ }
if (sentence.kind === 'image') {
this.revealImageBlock(element);
@@ -972,6 +994,7 @@ class UIDisplayHandlerModule extends BaseModule {
} else if (sentence.kind === 'music') {
console.log('UIDisplayHandler: Music block started', sentence.metadata || {});
}
+ if (!isCurrent()) return null;
this.dispatchDeferredTagsForBlock(sentence);
@@ -990,34 +1013,51 @@ class UIDisplayHandlerModule extends BaseModule {
async rerenderStory() {
if (!this.paragraphContainer || this.renderedItems.length === 0) return;
console.log('UIDisplayHandler: Re-typesetting story after page resize');
+ const generation = this.displayGeneration;
const activeLine = this.getCurrentScrollLine();
- await this.renderHistoryWindow([...this.renderedItems]);
+ await this.renderHistoryWindow([...this.renderedItems], { generation });
+ if (!this.isDisplayGenerationCurrent(generation)) return;
await this.scrollTo(activeLine, { mode: 'rerender-preserve', smooth: false });
}
+ isDisplayGenerationCurrent(generation = this.displayGeneration, gameId = null) {
+ if (generation !== this.displayGeneration) return false;
+ if (gameId && this.storyHistory?.currentGameId && this.storyHistory.currentGameId !== gameId) {
+ return false;
+ }
+ return true;
+ }
+
async restoreFromHistory(saveRecord = {}) {
if (!this.paragraphContainer || !this.storyHistory || !saveRecord?.gameId) return;
+ const generation = this.displayGeneration;
const latestRenderedBlockId = Math.max(0, Number(saveRecord.latestRenderedBlockId || 0));
if (!this.storyHistory.renderedLineCount) {
await this.storyHistory.getRenderedLineCount(saveRecord.gameId, latestRenderedBlockId);
+ if (!this.isDisplayGenerationCurrent(generation, saveRecord.gameId)) return;
}
const targetLine = Math.max(0, latestRenderedBlockId > 0 ? this.storyHistory.renderedLineCount - 1 : 0);
if (latestRenderedBlockId > 0) {
const targetBlock = await this.storyHistory.findBlockForLine(saveRecord.gameId, targetLine, latestRenderedBlockId);
+ if (!this.isDisplayGenerationCurrent(generation, saveRecord.gameId)) return;
const targetBlockId = Math.max(1, Number(targetBlock?.blockId || latestRenderedBlockId));
await this.renderWindowForBounds({
start: Math.max(1, targetBlockId - this.historyBufferBlocks),
end: Math.min(latestRenderedBlockId, targetBlockId + this.historyBufferBlocks),
targetBlockId,
- windowOriginLine: this.getTopLineForActiveLine(targetLine)
+ windowOriginLine: this.getTopLineForActiveLine(targetLine),
+ gameId: saveRecord.gameId,
+ generation
});
} else {
- await this.renderHistoryWindow([], { windowOriginLine: 0 });
+ await this.renderHistoryWindow([], { windowOriginLine: 0, generation });
}
+ if (!this.isDisplayGenerationCurrent(generation, saveRecord.gameId)) return;
await this.scrollTo(targetLine, {
mode: 'restore-bottom',
smooth: false
});
+ if (!this.isDisplayGenerationCurrent(generation, saveRecord.gameId)) return;
this.updateStoryScrollbar({ latestBlockId: saveRecord.latestBlockId || latestRenderedBlockId || 1 });
}
@@ -1038,10 +1078,12 @@ class UIDisplayHandlerModule extends BaseModule {
targetContainer = this.paragraphContainer,
renderedItemsTarget = this.renderedItems,
token = null,
- recordMetrics = true
+ recordMetrics = true,
+ generation = this.displayGeneration
} = options;
if (!item || !this.paragraphContainer) return null;
const renderable = await this.prepareRenderableBlock(item);
+ if (!this.isDisplayGenerationCurrent(generation, item.gameId || null)) return null;
if (token != null && token !== this.renderWindowToken) return null;
if (!renderable) return null;
@@ -1110,6 +1152,10 @@ class UIDisplayHandlerModule extends BaseModule {
if (recordMetrics && item.blockId != null) {
const updated = await this.recordRenderedMetrics(item.blockId, element, renderable.lineCount, renderable.lineStart);
+ if (!this.isDisplayGenerationCurrent(generation, item.gameId || null)) {
+ element?.remove();
+ return null;
+ }
if (token != null && token !== this.renderWindowToken) {
element?.remove();
return null;
@@ -1130,6 +1176,8 @@ class UIDisplayHandlerModule extends BaseModule {
async renderHistoryWindow(blocks = [], options = {}) {
if (!this.paragraphContainer) return;
+ const generation = options.generation ?? this.displayGeneration;
+ if (!this.isDisplayGenerationCurrent(generation, options.gameId || blocks[0]?.gameId || null)) return;
const token = ++this.renderWindowToken;
const orderedBlocks = Array.isArray(blocks)
? [...blocks].sort((left, right) => Number(left?.blockId || 0) - Number(right?.blockId || 0))
@@ -1152,12 +1200,15 @@ class UIDisplayHandlerModule extends BaseModule {
placement: 'append',
targetContainer: fragment,
renderedItemsTarget: nextRenderedItems,
- token
+ token,
+ generation
});
if (token !== this.renderWindowToken) return;
+ if (!this.isDisplayGenerationCurrent(generation, item.gameId || options.gameId || null)) return;
}
if (token !== this.renderWindowToken) return;
+ if (!this.isDisplayGenerationCurrent(generation, options.gameId || orderedBlocks[0]?.gameId || null)) return;
this.paragraphContainer.replaceChildren(fragment);
this.renderedItems = nextRenderedItems;
this.historyWindowStartId = orderedBlocks[0]?.blockId || 1;
@@ -1263,9 +1314,11 @@ class UIDisplayHandlerModule extends BaseModule {
async reflowTextBlocksForActiveExclusions(token = this.renderWindowToken) {
if (!this.layoutExclusions.length || !this.paragraphContainer) return;
+ const generation = this.displayGeneration;
const candidates = this.renderedItems.filter(item => this.blockIntersectsExclusions(item));
for (const item of candidates) {
if (token !== this.renderWindowToken) return;
+ if (!this.isDisplayGenerationCurrent(generation, item.gameId || null)) return;
const oldElement = this.paragraphContainer.querySelector(`[data-story-block-id="${CSS.escape(String(item.blockId))}"]`);
if (!oldElement) continue;
const previousFlowLine = this.layoutFlowLine;
@@ -1274,6 +1327,7 @@ class UIDisplayHandlerModule extends BaseModule {
this.layoutFlowLine = previousFlowLine;
this.layoutExclusions = previousExclusions;
if (token !== this.renderWindowToken) return;
+ if (!this.isDisplayGenerationCurrent(generation, item.gameId || null)) return;
renderable.layout.lineCount = Math.max(1, Number(item.lineCount ?? item.metadata?.lineCount ?? renderable.lineCount));
renderable.lineCount = renderable.layout.lineCount;
const replacement = this.layoutRenderer.renderParagraph(renderable.layout, { id: renderable.id });
@@ -1294,6 +1348,9 @@ class UIDisplayHandlerModule extends BaseModule {
async renderIncrementalWindow(bounds = {}, requestId = null) {
if (!this.storyHistory || !this.paragraphContainer) return;
+ const generation = bounds.generation ?? this.displayGeneration;
+ const gameId = bounds.gameId || this.storyHistory.currentGameId;
+ if (!this.isDisplayGenerationCurrent(generation, gameId)) return;
if (!this.renderedItems.length) {
await this.renderWindowForBounds(bounds, requestId);
return;
@@ -1310,15 +1367,17 @@ class UIDisplayHandlerModule extends BaseModule {
const missingBeforeEnd = Math.min(end, (this.historyWindowStartId || start) - 1);
const missingAfterStart = Math.max(start, (this.historyWindowEndId || 0) + 1);
const missingBeforeBlocks = start <= missingBeforeEnd
- ? await this.storyHistory.getBlocksRange(this.storyHistory.currentGameId, start, missingBeforeEnd)
+ ? await this.storyHistory.getBlocksRange(gameId, start, missingBeforeEnd)
: [];
if (requestId != null && requestId !== this.scrollRequestId) return;
if (token !== this.renderWindowToken) return;
+ if (!this.isDisplayGenerationCurrent(generation, gameId)) return;
const missingAfterBlocks = missingAfterStart <= end
- ? await this.storyHistory.getBlocksRange(this.storyHistory.currentGameId, missingAfterStart, end)
+ ? await this.storyHistory.getBlocksRange(gameId, missingAfterStart, end)
: [];
if (requestId != null && requestId !== this.scrollRequestId) return;
if (token !== this.renderWindowToken) return;
+ if (!this.isDisplayGenerationCurrent(generation, gameId)) return;
const uniqueBeforeBlocks = missingBeforeBlocks.filter(block => {
const id = Number(block?.blockId || 0);
@@ -1355,6 +1414,7 @@ class UIDisplayHandlerModule extends BaseModule {
targetContainer: beforeFragment,
renderedItemsTarget: beforeItems,
token,
+ generation,
recordMetrics: false
});
if (token !== this.renderWindowToken || (requestId != null && requestId !== this.scrollRequestId)) {
@@ -1378,6 +1438,7 @@ class UIDisplayHandlerModule extends BaseModule {
targetContainer: afterFragment,
renderedItemsTarget: afterItems,
token,
+ generation,
recordMetrics: false
});
if (token !== this.renderWindowToken || (requestId != null && requestId !== this.scrollRequestId)) {
@@ -1402,6 +1463,7 @@ class UIDisplayHandlerModule extends BaseModule {
this.rebuildLayoutExclusions(this.renderedItems);
await this.reflowTextBlocksForActiveExclusions(token);
if (token !== this.renderWindowToken) return;
+ if (!this.isDisplayGenerationCurrent(generation, gameId)) return;
this.setVirtualPadding();
this.updateStoryScrollbar();
}
@@ -2033,6 +2095,8 @@ class UIDisplayHandlerModule extends BaseModule {
async ensureLiveTailWindow() {
if (!this.storyHistory || !this.paragraphContainer) return;
+ const generation = this.displayGeneration;
+ const gameId = this.storyHistory.currentGameId;
const latestRendered = Math.max(0, Number(this.storyHistory.latestRenderedBlockId || 0));
if (latestRendered > 0) {
const start = Math.max(1, latestRendered - (this.visibleBlockLimit - 2));
@@ -2043,8 +2107,11 @@ class UIDisplayHandlerModule extends BaseModule {
start,
end,
targetBlockId: latestRendered,
- windowOriginLine: this.getTopLineForActiveLine(liveEndLine)
+ windowOriginLine: this.getTopLineForActiveLine(liveEndLine),
+ gameId,
+ generation
});
+ if (!this.isDisplayGenerationCurrent(generation, gameId)) return;
}
} else if (this.renderedItems.length) {
this.paragraphContainer.innerHTML = '';
@@ -2104,11 +2171,20 @@ class UIDisplayHandlerModule extends BaseModule {
}
async renderWindowForBounds(bounds = {}, requestId = null) {
+ if (!this.storyHistory) return;
+ const generation = bounds.generation ?? this.displayGeneration;
+ const gameId = bounds.gameId || this.storyHistory.currentGameId;
+ if (!this.isDisplayGenerationCurrent(generation, gameId)) return;
const start = Math.max(1, Number(bounds.start || 1));
const end = Math.max(start, Number(bounds.end || start));
- const blocks = await this.storyHistory.getBlocksRange(this.storyHistory.currentGameId, start, end);
+ const blocks = await this.storyHistory.getBlocksRange(gameId, start, end);
if (requestId != null && requestId !== this.scrollRequestId) return;
- await this.renderHistoryWindow(blocks, { windowOriginLine: bounds.windowOriginLine });
+ if (!this.isDisplayGenerationCurrent(generation, gameId)) return;
+ await this.renderHistoryWindow(blocks, {
+ windowOriginLine: bounds.windowOriginLine,
+ gameId,
+ generation
+ });
}
focusTurn(turnId) {
@@ -2335,6 +2411,7 @@ class UIDisplayHandlerModule extends BaseModule {
}
clear() {
+ this.displayGeneration += 1;
this.renderWindowToken += 1;
this.scrollRequestId += 1;
if (this.scrollAnimationFrameId != null) {
@@ -2370,6 +2447,10 @@ class UIDisplayHandlerModule extends BaseModule {
this.historyWindowStartId = 1;
this.historyWindowEndId = 0;
this.storyTopLine = 0;
+ this.scrollTargetLine = null;
+ this.wheelLineAccumulator = 0;
+ this.draggingStoryScrollbar = false;
+ this.scrollbarPreviewLine = null;
this.activeCenterBlockId = null;
this.layoutFlowLine = 0;
this.layoutExclusions = [];
diff --git a/src/engine/ink-engine.ts b/src/engine/ink-engine.ts
index ea7f196..8137117 100644
--- a/src/engine/ink-engine.ts
+++ b/src/engine/ink-engine.ts
@@ -78,7 +78,7 @@ export class InkEngine {
private story: Story | null = null;
private nextTurnId = 1;
private storyJson: any = null;
- private readonly choicePreviewTagKeys = new Set(['action', 'key', 'letter', 'optional', 'gated', 'sort']);
+ private readonly choicePreviewTagKeys = new Set(['action', 'key', 'letter', 'optional', 'gated', 'sort', 'auto']);
constructor(private readonly storyPath: string) {}
diff --git a/src/server-yaml.ts b/src/server-yaml.ts
index 319f98f..9c146b2 100644
--- a/src/server-yaml.ts
+++ b/src/server-yaml.ts
@@ -210,12 +210,13 @@ io.on('connection', (socket) => {
}
const command = String(data?.command || '').trim();
+ const requestId = Number(data?.requestId || 0);
// During typography and animation work, mirror the command back through
// the real socket path so the UI pipeline can be tested end to end.
- socket.emit('narrativeResponse', createTextTurn(socket.id, command, {
+ socket.emit('narrativeResponse', withClientRequestId(createTextTurn(socket.id, command, {
currentRoomId: gameRunner.getGameState().currentRoomId
- }, gameRunner.getSuggestions()));
+ }, gameRunner.getSuggestions()), Number.isInteger(requestId) && requestId > 0 ? requestId : undefined));
} catch (error) {
console.error('Error processing command:', error);
diff --git a/src/server-zcode.ts b/src/server-zcode.ts
index cc16c54..21e7095 100644
--- a/src/server-zcode.ts
+++ b/src/server-zcode.ts
@@ -272,7 +272,7 @@ io.on('connection', (socket) => {
socket.on(
'playerCommand',
- async (data: { command?: string }) => {
+ async (data: { command?: string; requestId?: number }) => {
const engine = sessions.get(socket.id);
if (!engine?.isRunning()) {
socket.emit('error', {
@@ -282,6 +282,7 @@ io.on('connection', (socket) => {
}
const input = String(data?.command ?? '').trim();
+ const requestId = Number(data?.requestId || 0);
if (!input) return;
debugLog(`playerCommand from ${socket.id}: ${input}`);
@@ -292,7 +293,10 @@ io.on('connection', (socket) => {
paragraphs: turn.paragraphs.length,
statusLine: turn.gameState?.statusLine,
});
- socket.emit('narrativeResponse', toClientTurn(turn));
+ socket.emit(
+ 'narrativeResponse',
+ withClientRequestId(toClientTurn(turn), Number.isInteger(requestId) && requestId > 0 ? requestId : undefined),
+ );
} catch (error) {
console.error('[zcode] playerCommand error:', error);
socket.emit('error', {