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 filesIm 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.