Refine Eibenreith Ink bucket architecture

This commit is contained in:
2026-05-24 11:21:57 +02:00
parent d42540f29d
commit 01c8b1aff6
14 changed files with 1522 additions and 1400 deletions
File diff suppressed because it is too large Load Diff
+23 -65
View File
@@ -1,4 +1,4 @@
// ============================================================================
// ============================================================================
// EIBENREITH 02 BAHNHOF
// ============================================================================
// Kapitel 02: Mittag / Bahnhof und Umstieg.
@@ -46,8 +46,13 @@ Dampf hängt unter dem Stationsdach. Ein Gepäckträger mit zu großer Kappe eil
=== station_midday_episode_bucket ===
<- station_episode_viktor_current_room
<- station_episode_viktor_public_arrival
* {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."
-> TURN
* {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."
-> TURN
-> DONE
@@ -60,7 +65,7 @@ Dampf hängt unter dem Stationsdach. Ein Gepäckträger mit zu großer Kappe eil
// ============================================================================
=== station_platform ===
-> enter_room(loc_station_platform, -> station_platform_entry, -> station_platform_look, -> station_platform_exits, -> station_platform_bucket) -> provide_choices
-> enter_room(loc_station_platform, -> station_platform_entry, -> station_platform_look, -> station_platform_exits, -> station_platform_bucket) -> TURN
=== station_platform_entry ===
@@ -74,7 +79,7 @@ Der Zug atmet aus. Menschen bewegen sich nicht chaotisch, sondern nach unsichtba
=== 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
-> TURN
-> DONE
@@ -85,43 +90,21 @@ Der Zug atmet aus. Menschen bewegen sich nicht chaotisch, sondern nach unsichtba
=== 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
-> TURN
=== 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
-> TURN
=== 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
-> TURN
=== 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."
@@ -135,7 +118,7 @@ Der Zug atmet aus. Menschen bewegen sich nicht chaotisch, sondern nach unsichtba
~ 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
-> TURN
+ {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."
@@ -143,11 +126,8 @@ Der Zug atmet aus. Menschen bewegen sich nicht chaotisch, sondern nach unsichtba
~ 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
-> TURN
=== 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.
@@ -232,7 +212,7 @@ Was hier geschieht, wird niemand in einem Bericht erwähnen. Gerade deshalb wird
* [__Verplappere dich__: "Ach, das macht doch zu viel Mühe."]
~ route_inc(route_careless)
~ rel_inc(viktor_concern)
~ rel_inc(viktor_unreliable)
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.
@@ -241,8 +221,8 @@ Was hier geschieht, wird niemand in einem Bericht erwähnen. Gerade deshalb wird
* {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)
~ rel_inc(viktor_unreliable)
~ rel_inc(viktor_closed)
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.
@@ -251,7 +231,7 @@ Was hier geschieht, wird niemand in einem Bericht erwähnen. Gerade deshalb wird
-
~ state_reach(baggage_handed_over)
-> provide_choices
-> TURN
// ============================================================================
@@ -259,7 +239,7 @@ Was hier geschieht, wird niemand in einem Bericht erwähnen. Gerade deshalb wird
// ============================================================================
=== station_restaurant_room ===
-> enter_room(loc_station_restaurant, -> station_restaurant_entry, -> station_restaurant_look, -> station_restaurant_exits, -> station_restaurant_bucket) -> provide_choices
-> enter_room(loc_station_restaurant, -> station_restaurant_entry, -> station_restaurant_look, -> station_restaurant_exits, -> station_restaurant_bucket) -> TURN
=== station_restaurant_entry ===
@@ -275,7 +255,7 @@ Viktor wählt einen Tisch, von dem aus er Tür und Fenster sehen kann. Du wähls
=== 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
-> TURN
-> DONE
@@ -287,11 +267,6 @@ Viktor wählt einen Tisch, von dem aus er Tür und Fenster sehen kann. Du wähls
=== 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)
@@ -311,11 +286,12 @@ Viktor wählt einen Tisch, von dem aus er Tür und Fenster sehen kann. Du wähls
* [__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)
~ rel_inc(viktor_unreliable)
"Ich verspreche, weder durch das Fenster noch durch die Küche zu entkommen."
"Nehmen Sie mir nicht alle beruflichen Hoffnungen."
-> station_restaurant_lunch_end
-> DONE
=== station_restaurant_lunch_end ===
@@ -324,24 +300,6 @@ Das Essen ist einfach. Suppe, Brot, Kaffee, vielleicht ein Stück kaltes Fleisch
-> 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
// ============================================================================
@@ -177,7 +177,7 @@ Wieder stellt die Welt eine Frage, ohne sie auszusprechen: Wer darf dir helfen,
* [__Verplappere dich__: „Ach, das macht doch zu viel Mühe.“]
~ route_inc(route_careless)
~ rel_inc(viktor_concern)
~ rel_inc(viktor_unreliable)
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.
@@ -186,8 +186,8 @@ Wieder stellt die Welt eine Frage, ohne sie auszusprechen: Wer darf dir helfen,
* {class ? working} [__Rutsche aus__ · **Unterschicht**: Allein, bevor jemand dir helfen kann.]
~ route_inc(route_careless)
~ rel_inc(viktor_concern)
~ rel_inc(viktor_control)
~ rel_inc(viktor_unreliable)
~ rel_inc(viktor_closed)
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.
@@ -221,7 +221,7 @@ Neben dir senkt Viktor die Stimme.
* [__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)
~ rel_inc(viktor_unreliable)
„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.“]
@@ -279,9 +279,9 @@ Der Kutscher sieht zu dir. Er hat verstanden, dass nicht er entscheidet, wann di
* [__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)
~ rel_inc(viktor_bold)
~ rel_inc(viktor_adversarial)
~ rel_inc(viktor_unreliable)
~ 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
+59 -114
View File
@@ -1,4 +1,4 @@
// ============================================================================
// ============================================================================
// EIBENREITH 03 KUTSCHENFAHRT
// ============================================================================
// Kapitel 03: Nachmittag / Kutschenfahrt.
@@ -36,8 +36,17 @@ Der Kutscher nennt Orte, wenn Viktor fragt, doch die Namen sind örtlich und pra
=== carriage_ride_episode_bucket ===
<- carriage_episode_viktor_road
<- carriage_episode_coachman_places
* {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."
-> TURN
* {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)
-> TURN
-> DONE
@@ -50,7 +59,7 @@ Der Kutscher nennt Orte, wenn Viktor fragt, doch die Namen sind örtlich und pra
// ============================================================================
=== carriage_room ===
-> enter_room(loc_carriage, -> carriage_entry, -> carriage_look, -> carriage_exits, -> carriage_bucket) -> provide_choices
-> enter_room(loc_carriage, -> carriage_entry, -> carriage_look, -> carriage_exits, -> carriage_bucket) -> TURN
=== carriage_entry ===
@@ -62,7 +71,7 @@ Die Kutsche schaukelt nicht wie ein Salon. Sie widerspricht dem Körper bei jede
=== 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
-> TURN
-> DONE
@@ -73,38 +82,21 @@ Die Kutsche schaukelt nicht wie ein Salon. Sie widerspricht dem Körper bei jede
=== 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
-> TURN
=== 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
-> TURN
=== 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
-> TURN
=== 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
-> TURN
-> DONE
@@ -138,7 +130,7 @@ Eine Weile spricht niemand.
// ============================================================================
=== roadside_statue_room ===
-> enter_room(loc_roadside_statue, -> roadside_statue_entry, -> roadside_statue_look, -> roadside_statue_exits, -> roadside_statue_bucket) -> provide_choices
-> enter_room(loc_roadside_statue, -> roadside_statue_entry, -> roadside_statue_look, -> roadside_statue_exits, -> roadside_statue_bucket) -> TURN
=== roadside_statue_entry ===
@@ -160,7 +152,7 @@ Der Eindruck bleibt im Nacken sitzen.
=== 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
-> TURN
-> DONE
@@ -172,51 +164,43 @@ Der Eindruck bleibt im Nacken sitzen.
=== 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
-> TURN
+ {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
-> TURN
+ {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
-> TURN
+ {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
-> TURN
=== 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."]
* {state_reached(faculty_committed)} {state_before(methods_negotiated)} [__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_reach(methods_negotiated)
-> TURN
* {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."]
* {state_reached(faculty_committed)} {state_before(methods_negotiated)} [__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)
@@ -225,9 +209,10 @@ Der Eindruck bleibt im Nacken sitzen.
"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_reach(methods_negotiated)
-> TURN
* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Benenne__: "Vielleicht eine Frau im Wald. Oder ein Stein, der eine sein wollte."]
* {state_reached(faculty_committed)} {state_before(methods_negotiated)} [__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)
@@ -237,20 +222,22 @@ Der Eindruck bleibt im Nacken sitzen.
"Wenn es ein Heiligtum ist, wurde es seit langem nicht mehr geliebt."
"Sie sprechen, als bemerkten Steine Vernachlässigung."
-> roadside_viktor_response_done
~ state_reach(methods_negotiated)
-> TURN
* {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."]
* {state_reached(faculty_committed)} {state_before(methods_negotiated)} [__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)
~ rel_inc(viktor_unreliable)
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_reach(methods_negotiated)
-> TURN
* {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?"]
* {state_reached(faculty_committed)} {state_before(methods_negotiated)} [__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)
@@ -261,9 +248,10 @@ Der Eindruck bleibt im Nacken sitzen.
"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_reach(methods_negotiated)
-> TURN
* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Verberge__: "Nein."]
* {state_reached(faculty_committed)} {state_before(methods_negotiated)} [__Verberge__: "Nein."]
"Nein."
~ route_inc(route_sapphic)
~ rel_inc(viktor_closed)
@@ -271,9 +259,10 @@ Der Eindruck bleibt im Nacken sitzen.
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_reach(methods_negotiated)
-> TURN
* {state_reached(faculty_committed)} {TURNS_SINCE(-> roadside_viktor_response_done) < 0} [__Halte__: Die Kutsche anhalten und zurückgehen.]
* {state_reached(faculty_committed)} {state_before(methods_negotiated)} [__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.
@@ -286,20 +275,17 @@ Der Eindruck bleibt im Nacken sitzen.
~ route_inc(route_detective)
~ rel_inc(viktor_insightful)
~ state_reach(methods_negotiated)
-> 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
-> enter_room(loc_carriage_halt, -> carriage_halt_entry, -> carriage_halt_look, -> carriage_halt_exits, -> carriage_halt_bucket) -> TURN
=== carriage_halt_entry ===
@@ -311,7 +297,7 @@ Die Kutsche hält eine Biegung weiter, dort, wo der Weg breiter wird und trotzde
=== 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
-> TURN
-> DONE
@@ -345,11 +331,6 @@ Die Kutsche hält eine Biegung weiter, dort, wo der Weg breiter wird und trotzde
=== carriage_halt_bucket ===
<- carriage_halt_coachman
-> DONE
=== carriage_halt_coachman ===
* [__Frage__: Den Kutscher, ob hier jemand anhält.]
"Hier?", sagt der Kutscher.
@@ -358,7 +339,7 @@ Die Kutsche hält eine Biegung weiter, dort, wo der Weg breiter wird und trotzde
"Nur wenn was am Rad ist."
~ state_reach(old_name_heard)
-> provide_choices
-> TURN
-> DONE
@@ -367,7 +348,7 @@ Die Kutsche hält eine Biegung weiter, dort, wo der Weg breiter wird und trotzde
// ============================================================================
=== crossroad_statue_room ===
-> enter_room(loc_crossroad_statue, -> crossroad_statue_entry, -> crossroad_statue_look, -> crossroad_statue_exits, -> crossroad_statue_bucket) -> provide_choices
-> enter_room(loc_crossroad_statue, -> crossroad_statue_entry, -> crossroad_statue_look, -> crossroad_statue_exits, -> crossroad_statue_bucket) -> TURN
=== crossroad_statue_entry ===
@@ -381,7 +362,7 @@ An der Biegung zeigt sich der Hang wieder. Diesmal siehst du, dass der Stein nic
=== 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
-> TURN
-> DONE
@@ -392,16 +373,11 @@ An der Biegung zeigt sich der Hang wieder. Diesmal siehst du, dass der Stein nic
=== 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
-> TURN
-> DONE
@@ -410,7 +386,7 @@ An der Biegung zeigt sich der Hang wieder. Diesmal siehst du, dass der Stein nic
// ============================================================================
=== forest_clearing_room ===
-> enter_room(loc_forest_clearing, -> forest_clearing_entry, -> forest_clearing_look, -> forest_clearing_exits, -> forest_clearing_bucket) -> provide_choices
-> enter_room(loc_forest_clearing, -> forest_clearing_entry, -> forest_clearing_look, -> forest_clearing_exits, -> forest_clearing_bucket) -> TURN
=== forest_clearing_entry ===
@@ -428,23 +404,18 @@ Viktor bleibt am Rand der Lichtung stehen.
=== 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
-> TURN
-> DONE
=== forest_clearing_exits ===
+ {TURNS_SINCE(-> forest_clearing_statue_done) >= 0} [__Kehre__: Zur Kutsche zurück. #key:s]
+ {state_reached(old_site_has_claim)} [__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]
* {state_before(old_site_has_claim)} [__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.
@@ -455,14 +426,10 @@ Viktor bleibt am Rand der Lichtung stehen.
~ state_reach(prechristian_underlayer_suspected)
~ state_reach(old_site_has_claim)
-> forest_clearing_statue_done
-> TURN
-> 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.
@@ -479,28 +446,6 @@ 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
// ============================================================================
@@ -531,9 +476,9 @@ Nun zum ersten Mal gehört der Nachmittag dir.
+ [__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)
~ rel_inc(viktor_bold)
~ rel_inc(viktor_adversarial)
~ rel_inc(viktor_unreliable)
~ mark(village_knowledge_prioritised)
~ mark(arrival_form_compromised)
Viktor sieht dich an, als hättest du nicht einen Weg, sondern eine Dienstvorschrift verlassen.
+7 -15
View File
@@ -1,4 +1,4 @@
// ============================================================================
// ============================================================================
// EIBENREITH 04 ABEND-PAUSE / ANKUNFT HOHENREITH
// ============================================================================
// Abend-Pause / Übergang nach Hohenreith.
@@ -9,14 +9,6 @@
// ============================================================================
// ============================================================================
// COMPATIBILITY ALIAS
// ============================================================================
=== village_arrival_options ===
-> village_detour_start
// ============================================================================
// PRE-DINNER TRANSITION
// ============================================================================
@@ -163,17 +155,17 @@ Noch bevor du die Familie siehst, ist aus der Reise eine Person geworden, die ma
}
{
- axis_up(order_axis):
- route_composure >= route_detective && route_composure >= route_lover && route_composure >= route_sapphic && route_composure >= route_careless && route_composure >= route_eccentric && route_composure > 0:
~ score_route = "Ihre bisher stärkste Maske ist Fassung: Form, Abstand und Selbstbeherrschung als Waffe."
- axis_up(inquiry_axis):
- route_detective >= route_composure && route_detective >= route_lover && route_detective >= route_sapphic && route_detective >= route_careless && route_detective >= route_eccentric && route_detective > 0:
~ 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):
- route_lover >= route_composure && route_lover >= route_detective && route_lover >= route_sapphic && route_lover >= route_careless && route_lover >= route_eccentric && route_lover > 0:
~ score_route = "Ihre bisher stärkste Methode ist Wirkung: Charme, Blick und soziale Wärme werden zu Werkzeugen."
- route_up(route_sapphic):
- route_sapphic >= route_composure && route_sapphic >= route_detective && route_sapphic >= route_lover && route_sapphic >= route_careless && route_sapphic >= route_eccentric && route_sapphic > 0:
~ 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):
- route_careless >= route_composure && route_careless >= route_detective && route_careless >= route_lover && route_careless >= route_sapphic && route_careless >= route_eccentric && route_careless > 0:
~ score_route = "Ihre bisher stärkste Bewegung ist entwaffnende Unsicherheit: kleine Kontrollverluste, die andere näher heranlassen."
- axis_down(order_axis):
- route_eccentric >= route_composure && route_eccentric >= route_detective && route_eccentric >= route_lover && route_eccentric >= route_sapphic && route_eccentric >= route_careless && route_eccentric > 0:
~ 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."
+8 -24
View File
@@ -1,31 +1,15 @@
// ============================================================================
// EIBENREITH BUCKET SURFACE
// EIBENREITH GAME BUCKET
// ============================================================================
// 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.
// The active choice-surface dispatch lives in helpers.ink because it directly
// uses the global bucket variables and room helper functions.
//
// This file contains the game-wide bucket. It is currently empty, but important:
// game-level lore, philosophy, global relationship material, climax/progress
// content, and other cross-episode choices belong here when they are not tied
// to a specific moment, room, or episode.
// ============================================================================
=== 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
@@ -0,0 +1,775 @@
// ============================================================================
// EIBENREITH CHARACTER GENERATOR
// ============================================================================
// Enthält Charaktergenerator-Weaves, die aus konkreten Spielsituationen
// aufgerufen werden. Das Personalblatt ist eine begründete Ausnahme von der
// Bucket-Regel, weil es als zusammenhängender Tunnel aus mehreren Startaktionen
// des Abteils heraus eingeschoben wird.
// ============================================================================
=== identity_papers_tunnel ===
{tutorial(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.]
}
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.
->->
// ============================================================================
// WASHROOM MIRROR CHARACTER GENERATOR
// ============================================================================
=== washroom_mirror_character_generator ===
* {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
* {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
* {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
* {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 und ziehst die Handschuhe wieder an. Das Gesicht, das nach Hohenreith reisen wird, ist wieder gesellschaftsfähig.
~ mark(washroom_freshened_up)
-> TURN
+2 -23
View File
@@ -23,8 +23,8 @@
// 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.
// Do not add per-character custom dimensions. If a value cannot be expressed
// through these axes, model it as an encounter/state LIST or in prose.
// ============================================================================
@@ -48,16 +48,6 @@ 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
// ============================================================================
@@ -80,16 +70,6 @@ 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
@@ -134,4 +114,3 @@ VAR viktor_personal_involvement = 0
// mayor_...
// forester_...
// ============================================================================
@@ -216,7 +216,7 @@ Gesetzt:
- 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`,
- Startwerte: `viktor_closed = 1`,
- mögliche Entwicklung zu Respekt, Sorge, Irritation, Kontrollverlust, Verbündetenrolle.
Noch auszubauen:
@@ -1672,7 +1672,7 @@ Der sichtbare Choice-Text muss daher die soziale Absicht mitführen. Das geschie
Standardform:
```ink
* [__Absichtsverb__: „Gesprochene Zeile.“ #id:... #route:...]
* [__Absichtsverb__: „Gesprochene Zeile.“ #key:... #action:...]
```
Beispiele:
@@ -1931,7 +1931,7 @@ Mögliche Updates:
~ route_inc(route_sapphic)
~ rel_inc(amalia_open)
~ rel_inc(amalia_reliable)
~ rel_inc(amalia_fascination)
~ rel_inc(amalia_open)
```
### 5.4.5 Careless / route_careless
@@ -1968,7 +1968,7 @@ Mögliche Updates:
```ink
~ route_inc(route_careless)
~ rel_inc(viktor_concern)
~ rel_inc(viktor_unreliable)
~ rel_inc(viktor_passive)
```
@@ -2147,21 +2147,21 @@ Er erkennt möglicherweise Valeries Schutzimpuls gegenüber Amalia, aber er vers
### Viktor und Careless
Er wird besorgter und kontrollierender. Careless kann ihn menschlicher machen, aber auch seinen Aufsichtsmodus aktivieren.
Er wird besorgter und kontrollierender. Da es keine per-character Sonderwerte gibt, wird das als Eindruck auf den Standardachsen modelliert: Valerie wirkt riskanter, weniger verlässlich oder stärker beaufsichtigungsbedürftig.
```ink
~ rel_inc(viktor_concern)
~ rel_inc(viktor_control)
~ rel_inc(viktor_unreliable)
~ rel_inc(viktor_closed)
```
### Viktor und Eccentric
Er erlebt Regelbruch als Risiko. Manchmal respektiert er Mut; oft registriert er Kontrollverlust.
Er erlebt Regelbruch als Risiko. Manchmal respektiert er Mut; oft registriert er Widerspruch oder Gefahr.
```ink
~ rel_inc(viktor_adversarial)
~ rel_inc(viktor_loss_of_control)
~ rel_inc(viktor_irritation)
~ rel_inc(viktor_bold)
~ rel_inc(viktor_unreliable)
```
## 5.10 Dialog mit Amalia
@@ -2185,7 +2185,7 @@ Amalia kann sich ernst genommen fühlen, wenn Valerie genau zuhört. Sie kann si
```ink
~ rel_inc(amalia_insightful)
~ rel_inc(amalia_alarm)
~ rel_inc(amalia_closed)
```
### Amalia und Lover
@@ -2193,8 +2193,8 @@ Amalia kann sich ernst genommen fühlen, wenn Valerie genau zuhört. Sie kann si
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)
~ rel_inc(amalia_open)
~ rel_inc(amalia_reliable)
```
### Amalia und Sapphic
@@ -2204,7 +2204,7 @@ Kernroute für echte Nähe. Valerie erkennt Amalia als Subjekt und nicht als fam
```ink
~ rel_inc(amalia_open)
~ rel_inc(amalia_reliable)
~ rel_inc(amalia_empowerment)
~ rel_inc(amalia_bold)
```
### Amalia und Careless
@@ -2213,7 +2213,7 @@ Valeries Kontrollverlust kann Amalia zeigen, dass Valerie nicht nur Rolle ist. D
```ink
~ rel_inc(amalia_open)
~ rel_inc(amalia_fascination)
~ rel_inc(amalia_open)
```
### Amalia und Eccentric
@@ -2222,7 +2222,7 @@ Valeries Regelbruch kann Amalia beeindrucken, aber auch erschrecken. Besonders g
```ink
~ rel_inc(amalia_bold)
~ rel_inc(amalia_alarm)
~ rel_inc(amalia_closed)
```
## 5.11 Dialog mit Dorf und Dienerschaft
@@ -2303,24 +2303,32 @@ Nicht jede Choice braucht ein Tastenkürzel. Pflicht- und Standardhandlungen pro
## 5.15 Choice-Metadaten
Für Engine-Filterung sollen Choices Tags erhalten:
Aktiv verwendete Choice-Tags:
```ink
#id:stable_unique_id
#bucket:moment|room|episode|game|travel|exit
#priority:0-100
#route:...
#required
#repeat:once_offered|once_chosen|sticky
#key:x
#letter[x]
#optional
#action:name
#auto
#auto(2)
#auto[keyword]
#auto[keyword](2)
```
Das `#id` bleibt stabil, auch wenn sichtbarer Text überarbeitet wird.
Ältere oder geplante Metadaten wie `#id`, `#bucket`, `#priority`, `#route`, `#required`, `#repeat`, `#weight`, `#slot`, `#episode`, `#group` und `#location` sind derzeit keine verbindliche aktive UI-/Engine-Filterlogik. Sie dürfen nicht als funktionierend vorausgesetzt werden, bis Parser, Server und UI sie nachweislich unterstützen.
`#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]`.
`#auto` markiert eine normale Ink-Choice, die von der UI automatisch gewählt werden darf. **Auch Auto-Choices brauchen einen Choice-Text in eckigen Klammern**, damit die Datei in Inky testbar bleibt. Dieser Text richtet sich an Entwickler, nicht an Spieler, und ist kurz, sprechend und ohne normales Choice-Verb. Die UI zeigt ihn im Spiel nicht an.
Beispiel:
```ink
* {lacks(body_def)} [AUTO: Tunnelspiegelung] #auto(3)
...
-> TURN
```
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
@@ -2578,7 +2586,7 @@ Mögliche Updates:
```ink
~ route_inc(route_detective)
~ rel_inc(amalia_insightful)
~ rel_inc(amalia_alarm)
~ rel_inc(amalia_closed)
```
### Wirkung auf Haus und Dorf
@@ -2684,8 +2692,8 @@ Mögliche Updates:
```ink
~ route_inc(route_lover)
~ rel_inc(amalia_fascination)
~ rel_inc(amalia_desire)
~ rel_inc(amalia_open)
~ rel_inc(amalia_reliable)
```
### Wirkung auf Haus und Dorf
@@ -2794,8 +2802,8 @@ Mögliche Updates:
~ route_inc(route_sapphic)
~ rel_inc(amalia_open)
~ rel_inc(amalia_reliable)
~ rel_inc(amalia_fascination)
~ rel_inc(amalia_empowerment)
~ rel_inc(amalia_open)
~ rel_inc(amalia_bold)
```
### Wirkung auf Haus und Dorf
@@ -2884,14 +2892,14 @@ Careless wirkt besonders in:
### 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.
Viktor reagiert auf Careless häufig mit Sorge und Kontrolle. Er kann menschlicher werden, aber auch stärker in seine Aufsichtsrolle fallen. Mechanisch wird das über die Standardachsen ausgedrückt.
Mögliche Updates:
```ink
~ route_inc(route_careless)
~ rel_inc(viktor_concern)
~ rel_inc(viktor_control)
~ rel_inc(viktor_unreliable)
~ rel_inc(viktor_closed)
```
### Wirkung auf Amalia
@@ -2903,7 +2911,7 @@ Mögliche Updates:
```ink
~ route_inc(route_careless)
~ rel_inc(amalia_open)
~ rel_inc(amalia_fascination)
~ rel_inc(amalia_open)
```
### Wirkung auf Haus und Dorf
@@ -2995,8 +3003,8 @@ Mögliche Updates:
```ink
~ route_inc(route_eccentric)
~ rel_inc(viktor_adversarial)
~ rel_inc(viktor_loss_of_control)
~ rel_inc(viktor_irritation)
~ rel_inc(viktor_bold)
~ rel_inc(viktor_adversarial)
```
### Wirkung auf Amalia
@@ -3008,8 +3016,8 @@ Mögliche Updates:
```ink
~ route_inc(route_eccentric)
~ rel_inc(amalia_bold)
~ rel_inc(amalia_alarm)
~ rel_inc(amalia_fascination)
~ rel_inc(amalia_closed)
~ rel_inc(amalia_open)
```
### Wirkung auf Haus und Dorf
@@ -3261,11 +3269,9 @@ 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.
Das bedeutet: Er ist reserviert, kontrollierend und professionell distanziert, aber nicht feindselig. Kontrolle und berufliche Distanz sind keine eigenen Relationship-Dimensionen. Wenn sie mechanisch relevant werden, gehören sie in Encounter-State-Listen wie `ViktorRelationFrame`, nicht in per-character Sonderwerte.
## 7.4 Die Hohenreith-Familie
@@ -3368,32 +3374,31 @@ Die Beziehungsmatrix bleibt Ink-intern, weil die wichtigen Figuren endlich und a
Ink-Lösung:
- 10 Standardvariablen pro wichtiger Figur,
- projektbezogene Zusatzvariablen nach Bedarf,
- universelle `rel_*`-Hilfsfunktionen mit `ref`.
- keine benannte Achsen-Liste für die fünf Relationship-Paare.
Die Ingold-Funktionen `high(tension)`, `up(tension)`, `down(tension)` und `low(tension)` setzen voraus, dass ein Stat als benannte Blackbox übergeben werden kann. In unserem Ink-Modell ist das nicht die einfachste Form, weil Ink keine echten Objekt-/Dictionary-Referenzen für `viktor.openness` oder `amalia.trust` anbietet. Die authoring-freundlichere Fassung ist deshalb direkt:
```ink
{rel_up(viktor_open, viktor_closed)}
{rel_high(amalia_reliable, amalia_unreliable)}
```
Das benennt keine abstrakten Achsen, sondern nutzt die beiden konkreten Zähler, die der Autor ohnehin im Blick hat. Eine zusätzliche `RelationshipAxis`-Liste wäre erst sinnvoll, wenn wir später bewusst eine stärker black-boxed API wie `rel_up(viktor, openness)` bauen. Dafür müsste Ink aber pro Figur und Achse explizit mappen, was mehr Boilerplate erzeugt als es derzeit spart.
## 8.3 Zusatzwerte
Zusatzwerte sind erlaubt, wenn sie spezifisch erzählerisch gebraucht werden.
Per-character Zusatzdimensionen sind verworfen. Sie sind zu schwer wartbar und unterlaufen die gemeinsame Relationship-Heuristik. Wenn ein Eindruck nicht über `agreeable/adversarial`, `open/closed`, `bold/passive`, `reliable/unreliable` oder `insightful/dull` ausdrückbar ist, gibt es zwei Möglichkeiten:
Amalia:
- Es ist keine persistente Mechanik, sondern Prosa.
- Es ist ein konkreter Fortschritt in einem Encounter und gehört in eine semantische `LIST`.
- desire,
- shame,
- alarm,
- fascination,
- empowerment,
- containment.
Beispiele:
Viktor:
- concern,
- irritation,
- control,
- loss_of_control,
- professional_distance,
- personal_involvement.
Nicht jede Figur braucht Zusatzwerte. Keine Variablen auf Vorrat für unwichtige NPCs.
- Viktors Sorge um Valerie wird meist als `viktor_unreliable`, `viktor_closed` oder in einer passenden Encounter-State-List modelliert.
- Viktors wachsende Nähe wird als `viktor_open` modelliert.
- Kontrollverlust wird nicht als `viktor_bold` gezählt, sondern als `viktor_bold`, `viktor_adversarial` oder als Fortschritt in `ViktorRelationFrame`, wenn es um seine Rolle als Aufsicht geht.
- Amalias Begehren, Scham oder Faszination werden nicht als Sonderzähler geführt. Wenn sie Beziehungseindruck sind, werden sie über Standardachsen ausgedrückt; wenn sie Plotfortschritt sind, gehören sie in Amalia-spezifische Encounter-States.
## 8.4 Anwendung
@@ -3490,7 +3495,9 @@ Aus *Heavens Vault* wird das Bucket-Prinzip übernommen:
- 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 ist atomisch. Jede Handlung, Beobachtung oder Dialogzeile ist ein vollständiges, lokal lesbares Weave, das direkt in einem passenden Bucket steht und nur über Preconditions entscheidet, ob es 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.
Diese Bucket-Architektur ist eine **Vorschrift**, kein Vorschlag. Ein Bucket enthält die vollständigen konditionierten Weaves, die er anbietet. Es ist nicht zulässig, Bucket-Content routinemäßig in einzeilige Mini-Knots, `_choices`-Knoten oder namenlose Durchreichen auszulagern. Ein separates Knot ist nur erlaubt, wenn es wirklich von mehreren Orten wiederverwendet wird oder eine begründete Ausnahme darstellt. Die Ausnahme muss im Dateikommentar oder an der Stelle erkennbar sein. Beispiel einer gültigen Ausnahme ist der `identity_papers_tunnel` in `character_generator.ink`, weil er ein langer, zusammenhängender Charaktergenerator-Tunnel ist, der aus mehreren Startaktionen eingeschoben werden kann.
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.
@@ -3505,6 +3512,18 @@ Jede niedrigere Ebene füllt nur den Raum, den die höhere Ebene lässt. Wenn wi
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.
Episode-Buckets sind der richtige Ort für Ereignisse, die nicht aus einem einzelnen Raum entstehen, aber nur in bestimmten Räumen der Episode plausibel sichtbar werden. Die Ortsliste wird als sichtbare Precondition direkt über dem Weave geschrieben. Beispiel: Der Tunnel-Moment der Zugfahrt ist ein Ereignis der Episode, nicht eines bestimmten Korridors, darf aber nur in Korridoren mit Fenstern und Spiegelung auftauchen.
```ink
=== train_intro_episode_bucket ===
* {lacks(body_def)}
{loc(loc_train_clergy_corridor) || loc(loc_train_washroom_corridor)}
{not (loc(loc_train_clergy_corridor) && lacks(relig_def))} [AUTO: Tunnelspiegelung] #auto(3)
...
-> TURN
-> DONE
```
Trennung:
- Ink entscheidet, was gültig ist.
@@ -3550,17 +3569,22 @@ Choice-Tags müssen vor Auswahl lesbar sein und daher in der Choice-Klammer steh
Beispiel:
```ink
* [__Prüfe__: „...“ #id:amalia_open_followup_01 #bucket:episode #priority:70 #repeat:once_offered #route:detective]
* [__Prüfe__: „...“ #key:x #action:investigation]
```
Minimal:
Aktiv:
- `#key`,
- `#letter`,
- `#optional`,
- `#action`,
- `#auto`.
Nicht als funktionierend voraussetzen:
- `#id`,
- `#bucket`,
- `#priority`.
Optional:
- `#priority`,
- `#required`,
- `#repeat`,
- `#weight`,
@@ -3568,7 +3592,6 @@ Optional:
- `#slot`,
- `#episode`,
- `#group`,
- `#action`,
- `#location`.
## 10.5 Side Effects vermeiden
@@ -3588,6 +3611,34 @@ Richtig:
```ink
* [Choice]
~ rel_inc(amalia_open)
-> TURN
```
## 10.6 Authoring-Endmarker
`-> TURN` ist der verbindliche Endmarker für gewählte atomare Inhalte. Er bedeutet: Diese Spielerhandlung ist abgeschlossen, die aktuelle Choice-Oberfläche wird neu aufgebaut.
`-> DONE` beendet dagegen einen Bucket, einen Entry-/Look-/Exit-Provider oder einen technischen Knoten, der nur Choices bereitstellt.
Regel:
- Jede gewählte atomare Weave endet mit `-> TURN`, wenn danach weiter am aktuellen Ort gespielt werden soll.
- Bucket-Container enden mit `-> DONE`.
- `-> provide_choices` ist nur noch interne Helper-Implementierung in `helpers.ink` und soll in Kapiteldateien nicht mehr verwendet werden.
Standardmuster:
```ink
=== room_bucket ===
* {precondition} [__Untersuche__: Das Objekt. #key:x]
Text der Handlung.
~ state_reach(something_seen)
-> TURN
+ [__Schaue__: Im Raum umher. #key:l]
Wiederholbare Raumwahrnehmung.
-> TURN
-> DONE
```
---
@@ -3684,7 +3735,11 @@ Enthält:
- Location-Helfer,
- Traversal-Helfer,
- State-Helfer,
- Relationship-Helfer.
- Relationship-Helfer,
- `TURN`,
- `provide_choices`,
- `empty_bucket`,
- die aktive Choice-Surface-Logik.
### eibenreith_00_character_relationships.ink
@@ -3696,6 +3751,20 @@ Nur:
Keine Funktionen.
### character_generator.ink
Enthält den `identity_papers_tunnel` und vergleichbare Charaktergenerator-Strukturen.
Diese Datei ist eine begründete Ausnahme von der normalen Bucket-Regel, weil das Personalblatt ein zusammenhängender Tunnel ist, der aus mehreren natürlich surfacenden Startaktionen des Abteils eingeschoben wird. Neue Charakterdefinitionen sollen trotzdem möglichst als Moment-, Room- oder Episode-Weaves in Buckets entstehen. Weitere Ausnahmen brauchen eine klare Begründung im Kommentar.
### buckets.ink
Enthält den Game-Bucket.
Der `game_bucket` ist aktuell leer, aber strukturell wichtig. Spielweite Lore, philosophische oder persönliche Gespräche, globale Progression, Endspiel- und Climax-Content gehören hierher, wenn sie nicht an einen Moment, Raum oder eine Episode gebunden sind.
Die Choice-Surface-Engine (`TURN`, `provide_choices`, `empty_bucket`) liegt in `helpers.ink`, weil sie direkt mit den globalen Bucket-Variablen und Raumhelfern arbeitet. `provide_choices` ist interne Implementierung und wird in Kapiteldateien nicht direkt verwendet.
### Kapiteldateien
Kapiteldateien enthalten:
@@ -3706,6 +3775,14 @@ Kapiteldateien enthalten:
- lokale Struktur,
- State-/Route-/Relationship-Updates.
Kapiteldateien müssen die Bucket-Regel einhalten:
- Raumdefinitionen bestehen aus `entry`, `look`, `exits`, `bucket`.
- Die aktive Oberfläche sammelt in der Reihenfolge Moment, Room, Exits, Episode, Game.
- Buckets enthalten vollständige konditionierte Weaves direkt im Bucket.
- Einzeilige `_choices`-Knoten, Pass-through-Knots und benannte Gathers als Ersatz für lokale Weave-Struktur sind verboten.
- Wiederverwendbare Weaves sind erlaubt, wenn sie wirklich von mehreren Orten aufgerufen werden. Episode-weite Ereignisse mit Raum-Preconditions gehören in den Episode-Bucket.
## 12.2 LIST-Regeln
`LIST`s sind für:
@@ -3822,13 +3899,32 @@ Beispiel:
Verwendete Tagarten:
- `#chapter[...]`
- `#section`
- `#textblock`
- `#music[...]`
- `#image[...]`
- `#sfx[...]`
- `#tts[...]`
- `#tts(...)`
- `#tts[provider](...)`
- `#tts-openai[...]`
- `#alert[...]`
- `#achievement[...]`
- `#error[...]`
- `#score[...]`
- `#gloss[...](...)`
- Choice-Metadaten wie `#id`, `#bucket`, `#priority`, `#route`, `#required`.
- Choice-Metadaten wie `#key`, `#letter`, `#optional`, `#action` und `#auto`.
Aktuell nicht als verbindliche UI-Mechanik verwenden:
- `#bucket`
- `#priority`
- `#route`
- `#required`
- `#gated`
- `#sort`
Diese Tags sind ältere oder zukünftige Authoring-Ideen. Sie dürfen nicht als aktive Filterlogik vorausgesetzt werden, solange Parser, Server und UI sie nicht nachweislich implementieren.
## 13.3 Asset-Tags
+171 -119
View File
@@ -8,6 +8,7 @@
// - global non-character variables
// - route counters and route helper functions
// - time-slot, meal-plan, episode, location, and traversal helpers
// - active choice-surface knots and bucket dispatch
// - global story-state storage and LIST/state-tree helpers
// - relationship helper functions
//
@@ -52,17 +53,56 @@ VAR slot_early_night_episode = no_episode
VAR slot_late_night_episode = no_episode
// ============================================================================
// ACTIVE CHOICE SURFACE / BUCKET DISPATCH
// ============================================================================
// Author-facing rule:
// - End a chosen atomic weave with "-> TURN" when play should continue at the
// current room/episode choice surface.
// - Do not call provide_choices directly from chapter files. It is the internal
// implementation behind TURN.
// - Bucket provider knots end with "-> DONE". They only offer choices; they do
// not themselves count as chosen player turns.
//
// Dispatch order:
// - On first room entry: entry, moment, exits, episode, game.
// - On later room entries: moment, look, exits, episode, game.
//
// This keeps room descriptions one-shot through Ink's own visit tracking while
// preserving the design priority Moment > Room > Episode > Game.
// The actual game_bucket remains in buckets.ink because it is content, not
// helper logic.
=== TURN ===
-> provide_choices
=== 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
// ============================================================================
// 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 tutorial_state = ()
VAR class = ()
VAR title_part = ""
@@ -103,6 +143,23 @@ VAR route_eccentric = 0
// Therefore:
// - route_inc(route) increases by 1
// - route_inc_by(route, amount) increases by amount
//
// Author-facing helpers:
// - route(value): returns the current counter value for interpolation/debugging.
// - route_inc(ref route): add 1 to a route counter.
// - route_inc_by(ref route, amount): add an explicit amount.
// - route_dec(ref route): subtract 1.
// - route_dec_by(ref route, amount): subtract an explicit amount.
// - route_move_to(ref route, amount): set an exact route counter value.
// - route_clear(ref route): reset a route counter to 0.
// - route_is(route, amount): true when the counter equals amount.
// - route_before(route, amount): true when the counter is <= amount.
// - route_reached(route, amount): true when the counter is >= amount.
// - route_between(route, min, max): true when the counter is within the
// inclusive range min..max.
//
// Route counters are simple totals, not Ingold-style two-value axes. Do not use
// them with relationship matrix helpers.
=== function route(value) ===
~ return value
@@ -137,119 +194,18 @@ VAR route_eccentric = 0
=== 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.
//
// Author-facing helpers:
// - day(value), day_move_to(value), day_inc()
// - time(slot), time_is(slot), time_move_to(slot)
// - time_before(slot), time_reached(slot), time_between(first, last)
//
// time_before/reached/between rely on TimeSlot LIST order in main.ink.
=== function day(value) ===
~ return current_day == value
@@ -284,6 +240,17 @@ VAR route_eccentric = 0
// ============================================================================
// Content files define episode entry knots and buckets. Timetable control lives
// here so authored episode files do not choose themselves.
//
// Author-facing helpers:
// - slot_episode(slot, episode): query what episode is assigned to a timetable
// slot.
// - slot_schedule(slot, episode): assign an episode to a timetable slot.
// - advance_to_slot(slot): move time forward and run the slot's episode.
//
// Internal knots:
// - start_game, run_slot(slot), and run_episode(episode) are dispatch knots used
// by the root entry point and timetable. Chapter files should normally not
// bypass them.
=== start_game ===
-> run_slot(mid_morning)
@@ -364,6 +331,18 @@ VAR route_eccentric = 0
// ============================================================================
// EpisodeId is a LIST declared in Eibenreith.ink.
// active_episode is the coarse structural episode currently being played.
//
// Author-facing helpers:
// - episode(value), episode_active(value): true when the given episode is active.
// - episode_move_to(value): manually change active_episode.
// - episode_end(outcome): close the active episode and clear episode buckets.
// - outcome_is(value), outcome_move_to(value): query/set the last slot outcome.
//
// Structural helper:
// - enter_episode(value, slot, start_bucket, end_bucket, episode_bucket) is a
// tunnel used by run_episode. It installs the episode's start/end/bucket
// targets and resets the slot outcome. It should be called from timetable
// dispatch, not from random room content.
=== function episode(value) ===
~ return active_episode == value
@@ -398,6 +377,11 @@ VAR route_eccentric = 0
// ============================================================================
// MealPlan is a LIST declared in Eibenreith.ink.
// The arrival day uses this to remember how lunch is handled.
//
// Author-facing helpers:
// - meal(value), meal_is(value): true when the selected plan equals value.
// - meal_choose(value): set the plan.
// - meal_clear(): reset to meal_unset.
=== function meal(value) ===
~ return meal_plan == value
@@ -418,6 +402,24 @@ VAR route_eccentric = 0
// 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.
//
// Author-facing helpers:
// - loc(value), loc_is(value): true when Valerie is at location.
// - loc_move_to(value): move Valerie and all current companions to location.
// - accompanied_by(character): true when character is in the companion list.
// - companion_join(character), companion_leave(character): update companions.
// - present(character): true when a character's location equals current_location.
// - character_move_to(character, location): move a known NPC independently.
//
// Structural helper:
// - enter_room(location, entry_bucket, look_bucket, exit_bucket, moment_bucket)
// moves Valerie, updates companions, and installs the active room buckets.
// Room knots should normally do nothing except call enter_room and then TURN.
//
// Internal helper:
// - move_companions_to(location) is used by loc_move_to().
// - room_seen_on_enter() is used by provide_choices() to decide whether to show
// the one-shot entry text or the repeat look action.
=== function loc(value) ===
~ return current_location == value
@@ -493,6 +495,26 @@ VAR story_state = ()
// ============================================================================
// STATE HELPERS
// ============================================================================
// There are two kinds of story state:
// - Ordered encounter/progress states use state_reach/state_reached. Reaching a
// later value automatically counts all earlier values in the same LIST.
// - Independent checklist facts use mark/has/lacks. They do not imply their
// neighbours in the LIST.
//
// Author-facing helpers:
// - state_reach(state_or_states): advance one or more ordered LIST states.
// - state_move_to(state): readable alias for state_reach(state).
// - state_reached(state), state_before(state), state_between(a, b),
// state_is(state), state_current(state): query ordered progress.
// - mark(fact_or_facts), has(fact_or_facts), lacks(fact_or_facts): manage exact
// checklist facts.
// - tutorial(tutorial_fact): returns true once and marks the tutorial as shown.
// - state_clear(state), state_clear_all(): reset helpers for rare debug/dream
// logic, not normal authoring.
//
// Internal helper:
// - state_pop(ref list) exists only so state_reach can process multi-value
// lists. Do not use it in chapter prose.
// Remove and return the lowest item from a list.
// Internal helper for state_reach().
@@ -605,6 +627,17 @@ VAR story_state = ()
~ return true
// Return true once for a tutorial prompt, and mark it as seen immediately.
=== function tutorial(tutorial_to_show) ===
{
- tutorial_state ? tutorial_to_show:
~ return false
- else:
~ tutorial_state += tutorial_to_show
~ 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) ===
@@ -633,6 +666,24 @@ VAR story_state = ()
// Therefore:
// - rel_inc(rel) increases by 1
// - rel_inc_by(rel, amount) increases by amount
//
// Author-facing helpers:
// - rel(value): returns the current counter value for interpolation/debugging.
// - rel_inc/ref, rel_inc_by/ref, rel_dec/ref, rel_dec_by/ref: change a counter.
// - rel_move_to(ref value, amount), rel_clear(ref value): set/reset a counter.
// - rel_is(value, amount), rel_before(value, amount),
// rel_reached(value, amount), rel_between(value, min, max): numeric queries.
// - rel_diff(positive, negative) and rel_diff_* compare a two-value axis by
// subtraction.
// - rel_share_reached(positive, negative, numerator, denominator) and
// rel_high/up/down/low implement Ingold-style percentage queries for a pair.
//
// Use relationship helpers with the five standard relationship pairs, e.g.:
// {rel_up(viktor_open, viktor_closed)}
// {rel_high(amalia_reliable, amalia_unreliable)}
//
// Do not create per-character custom dimensions. If a concept does not fit the
// standard pairs, express it in prose or in a semantic encounter LIST.
=== function rel(value) ===
~ return value
@@ -696,17 +747,18 @@ VAR story_state = ()
~ 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_share_reached(positive, negative, numerator, denominator) ===
~ temp total = positive + negative
~ return total > 0 && positive * denominator >= total * numerator
=== function rel_high(positive, negative) ===
~ return matrix_high(positive, negative)
~ return rel_share_reached(positive, negative, 9, 10)
=== function rel_up(positive, negative) ===
~ return matrix_up(positive, negative)
~ return rel_share_reached(positive, negative, 7, 10)
=== function rel_down(positive, negative) ===
~ return matrix_down(positive, negative)
~ return rel_share_reached(negative, positive, 7, 10)
=== function rel_low(positive, negative) ===
~ return matrix_low(positive, negative)
~ return rel_share_reached(negative, positive, 9, 10)
+3 -1
View File
@@ -23,7 +23,8 @@ 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
LIST WashroomMission = washroom_claim_freshen_up, washroom_claim_explore_train, washroom_claim_mirror, washroom_claim_privacy, washroom_claim_unwell, washroom_claim_silent, washroom_entered, washroom_toilet_used, washroom_freshened_up, washroom_return_acknowledged
LIST Tutorial = tut_choice_intro, tut_traversal_intro, tut_character_intro, tut_dialog_intro, tut_optional_intro
// ============================================================================
// SYSTEM INCLUDES
@@ -31,6 +32,7 @@ LIST RouteAxis = order_axis, inquiry_axis, allure_axis
INCLUDE helpers.ink
INCLUDE buckets.ink
INCLUDE characters.ink
INCLUDE character_generator.ink
// ============================================================================
// CHAPTER 01 STATE LISTS
File diff suppressed because one or more lines are too long