Comprendre les fichiers et le JSON
Qu'est-ce que JSON ?
JSON est un format texte contenant des données structurées. Les accolades regroupent des propriétés nommées ; les crochets contiennent une liste ordonnée. Les chaînes de caractères sont entourées de guillemets doubles, contrairement aux nombres et aux valeurs true/false. Les identifiants relient les éléments. Vous pouvez consulter le fichier dans un éditeur de texte, mais modifiez normalement votre histoire dans VNLE, puis exportez à nouveau.
Présentation de JSON · Parcours d’apprentissage : intégrer le contenu à votre jeu
Le projet modifiable et l’export destiné au jeu ont des rôles différents. Modifiez le contenu dans VNLE, puis exportez à nouveau. Les extraits suivants proviennent du projet fourni.
Dossiers de l’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 filesL’exemple pédagogique ajoute guide-map.json pour associer les identifiants à des noms lisibles. Ce fichier lui est propre et n’est pas généré pour tous les projets. Dans un export habituel, les points d’entrée sont dans story-index.json et les catalogues dans story.json.
Démarrer une conversation
Un point d’entrée se compose de flowRef et entryRef. Ce sont des identifiants, pas des noms affichés. Lisez execution.entries[entryRef].nodeRef : il indique où commencer. Voici les véritables identifiants utilisés par l’exemple :
{
"flowRef": "1f69a7b6-1bdc-4dff-b8ee-9b2819b35168",
"entryRef": "5e6b2e12-1ac1-4c46-8221-1a051e87370a"
}Lire un dialogue
{
"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 indique le type de nœud. speakerRef désigne un personnage dans content.characters. text.textRef désigne un texte dans content.texts. continuation précise ce qui se passe après Continue.
Retrouver le texte dans la bonne langue
{
"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
}Utilisez content.translations[language][text ID].message s’il existe, sinon sourceMessage. Les segments de texte fournissent les mots affichés ; les paramètres de substitution reçoivent les valeurs associées dans le nœud. La langue relève des paramètres du jeu : la changer ne modifie pas la progression.
Afficher le nom et le portrait
{
"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": {}
}Résolvez nameTextRef comme tout autre texte. Pour l’image, utilisez le portrait de l’émotion choisie ou defaultPortraitRef. Le fichier est indiqué par content.assets[portrait ID].relativePath. Copiez assets à côté de story.json.