Entiende los archivos y JSON
¿Qué es JSON?
JSON es un archivo de texto con datos estructurados. Las llaves contienen propiedades con nombre; los corchetes, una lista ordenada. Las cadenas de texto usan comillas dobles; los números y true/false no. Los identificadores conectan los registros. Puedes abrir el archivo en un editor de texto para examinarlo; lo habitual es modificar la historia en VNLE y volver a exportarla.
Introducción a JSON · Guía de aprendizaje: integra el contenido en tu juego
El proyecto editable y la exportación para el juego tienen finalidades distintas. Modifica el contenido en VNLE y vuelve a exportar. Los siguientes fragmentos proceden del proyecto incluido.
Carpetas de exportación
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 filesEl ejemplo didáctico añade guide-map.json para asociar los identificadores con nombres legibles. Este archivo pertenece al ejemplo y no se genera en cada proyecto. En una exportación normal, busca los puntos de entrada en story-index.json y los catálogos en story.json.
Iniciar una conversación
Un punto de entrada consta de flowRef y entryRef. Ambos son identificadores, no nombres visibles. Resuelve execution.entries[entryRef].nodeRef: ahí empieza la ejecución. Estos son los identificadores reales del ejemplo:
{
"flowRef": "1f69a7b6-1bdc-4dff-b8ee-9b2819b35168",
"entryRef": "5e6b2e12-1ac1-4c46-8221-1a051e87370a"
}Leer un diálogo
{
"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 identifica el tipo de nodo. speakerRef hace referencia a un personaje de content.characters. text.textRef apunta a content.texts. continuation describe lo que hace Continue.
Resolver el texto y el idioma
{
"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
}Usa content.translations[language][text ID].message si existe; de lo contrario, usa sourceMessage. Los segmentos de texto contienen las palabras visibles; los marcadores de posición reciben valores de las asociaciones del nodo. El idioma se elige en los ajustes del juego: cambiarlo no modifica el progreso.
Mostrar nombre y retrato
{
"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": {}
}Resuelve nameTextRef como cualquier otro texto. Para la imagen, usa el retrato de la emoción elegida o defaultPortraitRef. Busca el archivo en content.assets[portrait ID].relativePath. Copia assets junto a story.json.