VNLEWIKITwórz historie. Łącz światy.
Polski
Podręcznik VNLE

Pliki i JSON

Co to jest JSON?

JSON to plik tekstowy z uporządkowanymi danymi. Nawiasy klamrowe zawierają nazwane właściwości, a kwadratowe — uporządkowaną listę. Teksty zapisuje się w podwójnych cudzysłowach; liczby oraz true/false — bez nich. Identyfikatory łączą wpisy. Plik możesz obejrzeć w edytorze tekstu, ale historię zwykle zmienia się w VNLE, a następnie eksportuje ponownie.

Wprowadzenie do JSON · Od treści do gry — ścieżka nauki

Edytowalny projekt i eksport gry służą różnym celom. Edytuj zawartość w VNLE, a następnie eksportuj ponownie. Następujące fragmenty pochodzą z dołączonego projektu.

Foldery eksportu

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

W przykładzie dydaktycznym plik guide-map.json łączy ID z czytelnymi nazwami. Należy tylko do tego przykładu i nie jest generowany dla każdego projektu. W zwykłym eksporcie punkty wejścia znajdziesz w story-index.json, a katalogi danych w story.json.

Rozpoczęcie rozmowy

Punkt wejścia składa się z flowRef i entryRef. To identyfikatory, a nie wyświetlane nazwy. Odczytaj execution.entries[entryRef].nodeRef — ten węzeł rozpoczyna wykonanie. Oto rzeczywiste ID używane w przykładzie:

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

Odczyt dialogu

{
  "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 określa typ węzła. speakerRef wskazuje postać w content.characters. text.textRef odwołuje się do content.texts. continuation określa działanie Continue.

Odczyt tekstu we właściwym języku

{
  "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
}

Użyj content.translations[language][text ID].message, jeśli istnieje. W przeciwnym razie użyj sourceMessage. Segmenty tekstowe zawierają wyświetlane słowa, a segmenty podstawianych wartości pobierają dane z powiązań węzła. Język jest ustawieniem gry: jego zmiana nie zmienia postępu.

Wyświetlanie imienia i portretu

{
  "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": {}
}

Odczytaj nameTextRef jak każdy inny tekst. Użyj portretu wybranej emocji lub defaultPortraitRef. Ścieżkę do pliku znajdziesz w content.assets[portrait ID].relativePath. Skopiuj folder assets obok story.json.

Sprawdź opis każdego pola

Pełny opis pól · JSON Schema · story.json