VNLEWIKIGeschichten entwickeln. Welten verbinden.English
VNLE Handbuch

Dateien und JSON verstehen

Das bearbeitbare Projekt und der Spiel-Export haben unterschiedliche Aufgaben. Ändere Inhalte in VNLE und exportiere sie anschließend neu. Die folgenden Ausschnitte stammen aus dem mitgelieferten Projekt.

Ordner im Export

story.json                  Game data: flow + text + catalogs
assets/files/…png           Images used by the game
story-index.json            Entry points for starting conversations
export-info.json            Export result
project/
  project.vnle.json          Project name, languages, catalog references
  chapters/                 Chapter structure
  flows/                    Scene nodes and entry points
  layout/                   Node positions in the editor
  characters/               Characters and portrait references
  variables/                Variable definitions and initial values
  commands/                 Game actions, inputs and outcomes
  items/, quests/, locations/ Resources
  localization/             Source texts and translations
  assets/                   Asset catalog and image files

Im Lernbeispiel ergänzt guide-map.json die IDs mit lesbaren Namen. Sie gehört zum Beispiel und wird nicht automatisch für jedes Projekt erzeugt. Im normalen Export findest du Startpunkte in story-index.json und die Kataloge in story.json.

Ein Gespräch starten

Ein Startpunkt besteht aus flowRef und entryRef. Beide sind IDs, keine Anzeigenamen. Übergib dieses Objekt an start. Die tatsächlich verwendeten IDs des Beispiels lauten:

{
  "flowRef": "1f69a7b6-1bdc-4dff-b8ee-9b2819b35168",
  "entryRef": "5e6b2e12-1ac1-4c46-8221-1a051e87370a"
}

Einen Dialog lesen

{
  "continuation": {
    "kind": "node",
    "nodeRef": "85b3aadf-2b95-4150-bc44-c0c796337874"
  },
  "flowRef": "1f69a7b6-1bdc-4dff-b8ee-9b2819b35168",
  "id": "ffa7141b-97ed-44c1-a346-8bba7e26d94f",
  "kind": "dialogue",
  "speakerRef": "807b2957-7bab-4a28-83a4-1f3d1589bbc2",
  "text": {
    "bindings": {},
    "textRef": "fd7b61a3-8233-4ba7-8f77-b88b119a91bf"
  }
}

kind bestimmt die Knotenart. speakerRef verweist auf eine Figur in content.characters. text.textRef verweist auf content.texts. continuation beschreibt, wohin Weiter führt.

Text und Sprache auflösen

{
  "id": "fd7b61a3-8233-4ba7-8f77-b88b119a91bf",
  "category": "dialogue",
  "sourceMessage": {
    "kind": "segments",
    "segments": [
      {
        "kind": "text",
        "text": "Welcome to the harbour. I am Mira."
      }
    ]
  },
  "placeholders": {},
  "externalUse": false
}

Nutze content.translations[Sprache][Text-ID].message, wenn vorhanden. Ansonsten nutze sourceMessage. Textsegmente liefern den sichtbaren Text; Platzhaltersegmente erhalten ihre Werte aus den Bindungen des Knotens. Die Sprache gehört zu den Spieleinstellungen: Ein Wechsel ändert nicht den Fortschritt.

Name und Bild anzeigen

{
  "id": "807b2957-7bab-4a28-83a4-1f3d1589bbc2",
  "name": "Mira",
  "key": "character_2fbfc3b256cb4ecf94a89965ef8e4549",
  "nameTextRef": "ff2cf3d4-08d3-47d8-b41a-86f1a801e1b7",
  "color": "#82d5e6",
  "defaultPortraitRef": "eacb484c-0663-4ffd-876d-401664b980db",
  "emotions": {}
}

Löse nameTextRef wie jeden anderen Text auf. Für das Bild verwende das Porträt der gewählten Emotion oder defaultPortraitRef. Die zugehörige Datei steht unter content.assets[Porträt-ID].relativePath. Kopiere assets zusammen mit story.json.

Alle Felder nachschlagen

Vollständige Feldreferenz · JSON Schema · story.json