Checkpoint before character generator cleanup
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
|
||||
**Encoding-Regel:** Alle Ink-Dateien und UI-Lokalisierungsdateien werden in UTF-8 gespeichert. Deutscher Text verwendet echte Umlaute, `ß` und typografische Sonderzeichen direkt, zum Beispiel `ä`, `ö`, `ü`, `Ä`, `Ö`, `Ü` und `„…“`. Keine Umschreibung als `ae`, `oe`, `ue` oder `ss` als Ersatz für korrekte Zeichen.
|
||||
|
||||
**Verbindliche Arbeitsregel für Codex/Textänderungen:** Keine Textänderungen per Regex, Massenersetzung oder Skript. Textänderungen erfolgen ausschließlich mit `apply_patch`. PowerShell-Befehle werden vor dem Lesen oder Anzeigen von Text immer auf UTF-8 gesetzt. Vor großen Textänderungen wird ein Git-Check-in erstellt. Einträge werden einzeln bearbeitet, nach jeder Änderung angeschaut und erst danach nacheinander fortgeführt. Keine Shortcuts.
|
||||
|
||||
Dieses Dokument ist ausführlich, weil *Eibenreith* kein rein mechanisches Choice-Spiel ist. Die literarische Stimme, die soziale Semantik, die historische Oberfläche, die Beziehungsheuristiken und die Ink-Architektur hängen direkt zusammen. Eine zu starke Kürzung würde Designentscheidungen zerstören. Die Kurzfassungen am Anfang jedes großen Abschnitts dienen nur der schnellen Orientierung; die Detailabschnitte sind die eigentliche Referenz.
|
||||
|
||||
**Regel zur Konfliktauflösung:** Neuere Entscheidungen überschreiben ältere. Entscheidungen des Autors überschreiben Vorschläge des Assistenten, sofern sie nicht später ausdrücklich verworfen wurden. Frühere Ideen werden nur erwähnt, wenn sie als Negativregel oder offene Frage für die weitere Arbeit relevant bleiben.
|
||||
@@ -2324,7 +2326,8 @@ Aktiv verwendete Choice-Tags:
|
||||
Beispiel:
|
||||
|
||||
```ink
|
||||
* {lacks(body_def)} [AUTO: Tunnelspiegelung] #auto(3)
|
||||
* {lacks(body_def)}
|
||||
[AUTO: Tunnelspiegelung] #auto(3)
|
||||
...
|
||||
-> TURN
|
||||
```
|
||||
@@ -3638,7 +3641,9 @@ Standardmuster:
|
||||
|
||||
```ink
|
||||
=== room_bucket ===
|
||||
* {precondition} [__Untersuche__: Das Objekt. #key:x]
|
||||
* {precondition}
|
||||
{second_precondition}
|
||||
[__Untersuche__: Das Objekt. #key:x]
|
||||
Text der Handlung.
|
||||
~ state_reach(something_seen)
|
||||
-> TURN
|
||||
@@ -3649,6 +3654,18 @@ Standardmuster:
|
||||
-> DONE
|
||||
```
|
||||
|
||||
Das kanonische Format für konditionierte atomare Bucket-Weaves ist damit:
|
||||
|
||||
```ink
|
||||
* {condition_one}
|
||||
{condition_two}
|
||||
[__Verb Charakter__: "..."]
|
||||
Text und verschachtelte Antworten.
|
||||
-> TURN
|
||||
```
|
||||
|
||||
Jede Precondition steht auf einer eigenen Header-Zeile direkt nach dem Choice-Marker. Der Choice-Text steht danach ebenfalls auf einer eigenen Header-Zeile. Nackte Condition-Zeilen vor einer Choice sind verboten, wenn sie die Choice sichtbar oder unsichtbar machen sollen. Sie kompilieren zwar, binden sich aber nicht als Choice-Preconditions an die folgende Choice. Sichtbarkeitsbedingungen gehören in den Choice-Header, nicht in den Branch-Inhalt.
|
||||
|
||||
---
|
||||
|
||||
# 11. Spielstruktur: Tage, Episoden, Traversal
|
||||
@@ -3894,7 +3911,9 @@ Nie zulässig:
|
||||
|
||||
Der Contact Manager in `helpers.ink` verwaltet, welche getrackten Figuren gerade anwesend sind, welche Valerie zum ersten Mal trifft, welche sie nach einer Trennung wieder sieht und welche gerade nicht mehr anwesend sind. Kapiteldateien dürfen dafür keine raumspezifischen Flags wie `viktor_returned_to_compartment` oder `seen_viktor_leave` anlegen.
|
||||
|
||||
`loc_move_to(location)` setzt Valeries Ort, bewegt alle Figuren in `companions` mit und aktualisiert danach den Kontaktzustand. `companion_join(character)` und `companion_leave(character)` steuern nur, ob eine Figur Valerie bei Traversal folgt. Sie sind keine Erinnerungsflags. Startpositionen von Figuren und die anfängliche Begleitung gehören in das Episode-Setup. Wenn ein Setup mehrere Figuren manuell platziert, wird danach `contact_sync()` verwendet, damit der Anfangszustand ohne künstliche Wiedersehens- oder Erstbegegnungsreaktion gesetzt ist.
|
||||
`loc_move_to(location)` setzt Valeries Ort, merkt sich den Traversal-Ursprung und das Traversal-Ziel, bewegt alle Figuren in `companions` mit und aktualisiert danach den Kontaktzustand. `companion_join(character)` und `companion_leave(character)` steuern nur, ob eine Figur Valerie bei Traversal folgt. Sie sind keine Erinnerungsflags. Startpositionen von Figuren und die anfängliche Begleitung gehören in das Episode-Setup. Wenn ein Setup mehrere Figuren manuell platziert, wird danach `contact_sync()` verwendet, damit der Anfangszustand ohne künstliche Wiedersehens- oder Erstbegegnungsreaktion gesetzt ist.
|
||||
|
||||
Begleiter-Erzählung bei Raumübergängen gehört nicht in einzelne Exit-Choices. Episoden können über `enter_episode(value, slot, start_bucket, end_bucket, episode_bucket, companion_transition_bucket)` einen Companion-Transition-Bucket installieren. `enter_room(...)` spielt diesen Bucket zentral nach der Bewegung und vor der Rauminstallation. Der Bucket beschreibt mit `accompanied_by(character)` und `traversal_between(origin, destination)`, wie Begleiter den konkreten Übergang mitvollziehen. Dadurch bleibt Traversal-Text lesbar und die Begleiter-Mechanik muss nicht pro Raum neu erfunden werden.
|
||||
|
||||
Für Dialoge, die nur ohne Zeugen, nur mit einer bestimmten Begleitfigur oder nur direkt nach einem Kontaktwechsel auftauchen sollen:
|
||||
|
||||
@@ -3910,13 +3929,20 @@ Für Dialoge, die nur ohne Zeugen, nur mit einer bestimmten Begleitfigur oder nu
|
||||
`present(character)` prüft, ob die Figur im aktuellen Raum ist. `first_meeting(character)`, `reunion(character)` und `parting(character)` gelten nur für die erste Choice-Oberfläche direkt nach dem Kontaktwechsel. Der nächste Turn löscht diese Transitionen automatisch in `provide_choices`. Kapitelinhalt darf Contact-Transitionen nur abfragen, niemals manuell löschen oder verbrauchen.
|
||||
|
||||
```ink
|
||||
+ {claim_choice_gate_if(return_auto, reunion(viktor) && state_reached(freshen_up_done))} [AUTO: Viktors Rückkehr nach Frischmachen] #auto
|
||||
+ {claim_choice_gate_if(return_auto, reunion(viktor) && state_reached(freshen_up_done))}
|
||||
[AUTO: Viktors Rückkehr nach Frischmachen] #auto
|
||||
...
|
||||
-> TURN
|
||||
```
|
||||
|
||||
`alone()` ist wahr, wenn keine getrackte Figur im Raum ist. `alone_with(character)` ist wahr, wenn genau diese Figur anwesend ist. Bei neuen getrackten Figuren muss die Helper-Implementierung an einer Stelle erweitert werden, damit Presence, Contact Transitions und Privacy Checks gemeinsam korrekt bleiben.
|
||||
|
||||
Die Look-Aktion eines Raums wird ebenfalls zentral in Ink verwaltet. Der Look-Bucket, der an `enter_room(...)` übergeben wird, wird nur angeboten, wenn Valerie einen bereits bekannten Raum verlassen und erneut betreten hat. Die Raum-Engine vergleicht den aktuellen Eintritts-Turn mit Inks Visit-Tracking des aktiven Look-Buckets. Wurde der Look-Bucket während dieses Aufenthalts bereits gewählt, verschwindet er bis zum nächsten Verlassen und Wiederbetreten. Kapitelinhalt darf hierfür keine eigenen Raumflags anlegen und keine Aufräumfunktion aufrufen. Look-Choices müssen die `#key:l`-Konvention beibehalten.
|
||||
|
||||
Für verzögerte Ereignisse, die während beliebiger dynamischer Bucket-Inhalte weiterlaufen sollen, gibt es benannte Turn-Timer. Timer-Namen sind Werte der globalen `Timer`-LIST. `timer_start(timer_id, turns)` entfernt denselben Timer zuerst aus allen Countdown-, Ready- und Claimed-Buckets und startet ihn dann neu. Dadurch wird der Timer eindeutig vom Content benannt, ohne interne Slots oder maximale Parallelzahl.
|
||||
|
||||
Nach Ablauf bleibt ein Timer in `timers_ready`, bis Inhalt ihn mit `timer_due(timer_id)` oder `timer_due_if(timer_id, available)` abholt. Beim Abholen wandert er nach `timers_claimed`; weitere Abfragen im selben Turn bleiben wahr. Der nächste `TURN` leert `claimed` zentral. Wenn ein gewählter Inhalt das verzögerte Ereignis vor Ablauf herbeiführt, verwendet er `timer_claim(timer_id)` als semantische Ereignisaktion, nicht als technisches Aufräumen.
|
||||
|
||||
## 12.6 Conditionals
|
||||
|
||||
Erweitertes Format:
|
||||
|
||||
Reference in New Issue
Block a user