Basic Concepts
Verstehen Sie die Grundlagen interaktiven Storytellings
Wichtige Konzepte
Warum das wichtig ist
🔢 Variables & Query DSL
TellsTree verwendet eine eigene Domain-Specific Language (DSL) für den Zugriff auf Daten in Ihrer Geschichte. Mit dieser Query-Syntax können Sie auf Nodes, Edges, Project-Informationen und Variables zugreifen.
💡 Wichtig: Die DSL ermöglicht dynamische Inhalte, bedingte Verzweigungen und variable Dialoge. Sie ist das Herzstück der interaktiven Funktionen in TellsTree.
📝 Query Syntax
Grundformat:
- entity — Der Entitätstyp:
node,edge,self,project - selector — ID oder
self(optional) - field — Das Datenfeld:
content,variables,label,type, etc. - key — Array-Schlüssel für verschachtelte Daten (optional)
✅ Gültige Queries:
💡 Erläuterungen:
node[21]— Zugriff auf Node mit ID 21self— Aktueller Node oder Edge im Kontextcontent[name]— Feld "name" aus content-Objektvariables[level]— Variable "level"project.title— Projekttitel (ohne Selektor)
🎯 Verfügbare Entities
🔵 node
Zugriff auf Story-Knoten (Charaktere, Dialoge, Szenen, etc.)
content— Content-Daten (Array)variables— Gespeicherte Variablenmedia— Media-URLslabel— Anzeigenametype— Node-Typnode_id/id— Eindeutige ID
🔗 edge
Zugriff auf Verbindungen zwischen Nodes
condition— Bedingungsdaten (Array)type— Edge-Typ (flow/contains/link)edge_id/id— Eindeutige IDfrom_node_id— Start-Nodeto_node_id— Ziel-Node
⭐ self
Referenz auf die aktuelle Entity im Kontext (Node oder Edge)
- Zugriff auf eigene Daten
- Relative Referenzen
- Kontext-abhängige Queries
📁 project
Zugriff auf Projekt-Metadaten
project_id/id— Projekt-IDtitle— Projekttiteldescription— Beschreibungis_public— Öffentlich?
🎨 Template Resolution
Queries können in Templates mit doppelten geschweiften Klammern eingebettet werden.
Syntax:
→ Wird zu: Hello, Alice! (wenn node 15 name="Alice" hat)
🔄 Verschachtelte Queries:
TellsTree unterstützt verschachtelte Query-Resolution. Innerste Queries werden zuerst aufgelöst.
1. {{self.content[speaker]}} → 15
2. node[15].content[name] → Alice
Beispiele:
→ Your level: 5
→ Hello, John
Anwendungsfälle:
- ✓ Dynamische Dialog-Texte
- ✓ Variable Edge-Labels
- ✓ Bedingte Anzeige-Texte
- ✓ Player-spezifische Inhalte
- ✓ Kontext-abhängige UI
⚖️ Bedingungen (Conditions)
Queries können in Bedingungen verwendet werden, um Edges oder UI-Elemente konditional anzuzeigen.
Struktur:
{
"query": "self.variables[level]",
"operator": ">=",
"value": 5
}
→ Bedingung ist wahr wenn level ≥ 5
Verfügbare Operatoren:
== / equals=== / strict_equals!= / not_equals> / greater_than>= / greater_or_equal< / less_than<= / less_or_equalcontainsinBeispiel-Bedingungen:
🎯 Verwendung in Edges:
Flow-Edges können Bedingungen haben. Nur Edges mit erfüllter Bedingung werden im Gameplay aktiviert. Dies ermöglicht branching narratives basierend auf Spieler-Entscheidungen und Status.
🔒 Sicherheit & Permissions
Automatische Permission-Checks:
- ✓ Alle Queries werden gegen Projekt-Zugriff validiert
- ✓ Nur Nodes/Edges im aktuellen Projekt sind zugreifbar
- ✓ User-Permissions werden automatisch geprüft
- ✓ Öffentliche Projekte sind für alle lesbar
- ✓ Private Projekte nur für Besitzer/Mitglieder
💡 Hinweis: Ungültige Queries (z.B. fehlende Permissions, nicht existierende IDs)
geben null zurück und werden geloggt. Das System ist fail-safe designed.
💎 Best Practices
✅ Do:
- • Verwende
selffür relative Referenzen - • Nutze sprechende Variablen-Namen
- • Teste Bedingungen vor Production
- • Verwende Templates für dynamische Inhalte
- • Halte Queries einfach und lesbar
❌ Don't:
- • Vermeide zu tief verschachtelte Queries
- • Keine Queries auf nicht-existierende IDs
- • Keine zirkulären Referenzen
- • Keine sensiblen Daten in Variables
- • Nicht mehr als 10 Verschachtelungs-Level
🔗 Edge Types
In TellsTree unterscheiden wir drei grundlegende Edge-Typen, die jeweils unterschiedliche semantische Bedeutungen haben und sich in ihrer Darstellung und Validierung unterscheiden.
💡 Wichtig: Die richtige Wahl des Edge-Typs ist entscheidend für die
Validierung und Darstellung Ihrer interaktiven Geschichten. Nur flow-Edges
können getestet werden und bilden den logischen Ablauf.
📦 1️⃣ contains — Strukturelle Zugehörigkeit
Beschreibt hierarchische Beziehungen und Besitz. Dieser Edge-Typ definiert, dass ein Element Teil eines anderen ist.
Eigenschaften:
- Beschreibt Besitz, Teilmenge, Einbettung
- Keine zeitliche Komponente
- Keine Richtung im Sinne von Ablauf
- Keine Bedingungen möglich
- Nicht test-relevant
Semantische Aliase:
Beispiele:
Chapter
→
Scene
Scene
→
Story-Segment
Dialog
→
Dialog-Entry
Inventory
→
Item
Character
→
Trait
Stage
→
Gameplay-Segment
Alle diese Beziehungen bedeuten: "A gehört zu B"
➡️ UI-Darstellung:
- ✗ Kein Pfeil
- ✓ Sidelane / Grouping / Umrandung
- ✓ Rein organisatorisch
🌊 2️⃣ flow — Gerichtete, bedingte Abfolge
Dies ist der einzige Edge-Typ, der zeitlich, testbar und logisch relevant ist. Flow-Edges definieren den tatsächlichen Ablauf Ihrer Geschichte.
Eigenschaften:
- Immer gerichtet
- Optional: Bedingungen (conditions)
- Optional: Effekte / Events
- Relevant für Validierung
- Kann "offene Enden" erzeugen
Semantische Varianten:
✅ Kritische Regel:
Alle flow-Verbindungen müssen von Start bis Ende gehen. Nur flow-Edges bilden Graphen, die man testen kann.
Beispiel-Ablauf:
Start
→
Scene 1
Scene 1
→
Choice A
Scene 1
→
Choice B
Choice A
→
End
➡️ UI-Darstellung:
- ✓ Gerichteter Pfeil
- ✓ Bedingungen anzeigen
- ✓ Highlighting bei Validierung
- ✓ "Offene Enden" rot markieren
🔗 3️⃣ link — Lose, nicht-sequenzielle Verbindung
Ein Edge-Typ, den viele Systeme nicht sauber trennen. Links sind rein referenziell und haben keine logische oder zeitliche Bedeutung.
Eigenschaften:
- Keine zeitliche Komponente
- Keine Reihenfolge
- Keine Validierungslogik
- Rein semantisch / referenziell
- Optional ein-/ausblendbar
Semantische Varianten:
Beispiele:
Character A
⋯→
Character B
mentions (in dialogue)
Location A
⋯→
Location B
connects_to (map reference)
Scene 5
⋯→
Scene 12
references (callback)
⚠️ Wichtig:
Link-Edges sind niemals testrelevant. Sie dienen nur der Dokumentation und semantischen Verbindung, nicht dem logischen Ablauf.
➡️ UI-Darstellung:
- ✓ Gestrichelte Linie oder Pfeil
- ✓ Label / Beschreibung anzeigen
- ✓ Optional ein-/ausblendbar
- ✗ Niemals in Validierung einbeziehen
📊 Vergleichstabelle
| Eigenschaft | contains | flow | link |
|---|---|---|---|
| Zeitlich | ❌ | ✅ | ❌ |
| Gerichtet | ❌ | ✅ | ➖ (optional) |
| Bedingungen möglich | ❌ | ✅ | ❌ |
| Testrelevant | ❌ | ✅ | ❌ |
| UI-Darstellung | Grouping | Pfeil → | Gestrichelt ⋯→ |
| Validierung | Organisatorisch | Vollständig | Keine |
📦 Nodes
Coming soon...
🕸️ Graph Structure
Coming soon...