VNLEWIKICrea historias. Conecta mundos.
Español
Manual de VNLE

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 files

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

Consultar todos los campos

Referencia completa de campos · JSON Schema · story.json