> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://documentation.celestory.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Une variable, c'est se souvenir

# 🧠 Une variable, c'est se souvenir

Au chapitre 1, votre lecteur a le choix : dire la vérité au garde, ou lui mentir. Il ment. Trois chapitres plus tard, le garde le recroise — et devrait s'en souvenir.

Sans mémoire, votre graphe ne peut rien faire de ce mensonge. Il lui faudrait **dupliquer toute la suite de l'histoire** : une version « il a menti » et une version « il a dit la vérité », en double, jusqu'à la fin. Ajoutez un deuxième choix mémorable et vous passez à quatre copies, un troisième à huit. 😱

Une variable, c'est exactement ce qui évite ça : **un endroit où votre histoire note quelque chose, pour le relire plus tard.** Un post-it que le projet garde en poche pendant toute la partie. 📝

🔺 Pas de maths là-dedans. Une variable Celestory n'est pas une inconnue à trouver : c'est une **étiquette avec une valeur écrite dessus**. `AMenti = vrai`. `Points = 12`. `PrenomJoueur = Camille`. Vous écrivez dessus quand vous voulez, vous relisez quand vous voulez.

---

${frame}[Vidéo : Une variable, c'est se souvenir](https://celestory-docs-videos.netlify.app/fr/construction-graphe/une-variable-c-est-se-souvenir.html)

## 🪟 La fenêtre Variables

Deux chemins pour l'ouvrir :

- le **menu de projet** (le bouton bleu en haut à gauche) → **Variables** ;
- le raccourci `Cmd+Maj+V` (`Ctrl+Maj+V` sous Windows).

La fenêtre s'intitule **« Variables du projet »**. Ce titre n'est pas un détail de vocabulaire — retenez-le, on y revient plus bas.

Elle se lit en deux colonnes : à gauche la liste de vos variables (avec un champ **« Rechercher une variable… »** au-dessus), à droite la fiche de celle que vous avez sélectionnée. Tant que vous n'en avez aucune, la colonne de droite affiche simplement *« Ajoutez votre première variable pour ajouter de l'intelligence à votre scénario »*.

### ➕ Créer une variable

Bouton **Ajouter variable** en bas de la colonne de gauche. Une petite fenêtre demande trois choses :

1. **Type de la variable (ne peut pas être changé)** — le menu déroulant du tableau ci-dessous. ⚠️ C'est définitif : pour changer de type, il faut supprimer et recréer.
1. **De (ne peut pas être changé)** — ce deuxième menu n'apparaît **que** si vous avez choisi *Liste* : il demande de quoi la liste est faite.
1. **Nom de la variable (peut être changé)** — celui-ci, oui, se renomme à tout moment.

Le bouton de validation refuse de s'activer et affiche **« Cette variable existe déjà »** si le nom est déjà pris. 👍

### 🎚️ La valeur initiale

Sur la fiche de droite, sous le nom, un champ **Valeur initiale**. C'est la valeur que la variable aura **au tout début de la partie**, avant que quoi que ce soit ne l'ait modifiée.

Pour sept types sur huit, Celestory crée cette valeur tout seul à la création, avec une valeur de départ neutre : `0` pour un Nombre, `faux` pour un Booléen, un texte vide (multiligne) pour un Texte. Vous n'avez qu'à la corriger si elle ne vous convient pas.

🔺 Seul le type **Image de fond** ne fabrique rien automatiquement : sa valeur initiale reste vide tant que vous ne la remplissez pas.

🔺 Une valeur initiale vide n'est pas une erreur, et ne produit aucun message : elle produit du vide, silencieusement, partout où vous lirez la variable. Prenez l'habitude de la remplir.

---

## 📋 Les types de variables disponibles

Huit types, dans l'ordre exact du menu déroulant :

| Type | Ce qu'il retient | Exemple d'usage |
|---|---|---|
| **Texte** | Une chaîne de caractères, sur une ou plusieurs lignes. | Le prénom du joueur, une réponse saisie, un long contexte pour l'IA. |
| **Booléen** | Vrai ou faux, rien d'autre. Valeur de départ : `faux`. | « A menti au garde », « a trouvé la clé », « a vu le tutoriel ». |
| **Nombre** | Une valeur chiffrée. Valeur de départ : `0`. | Points, vies, argent, compteur de tentatives. |
| **Image** | Un fichier image. | Le portrait choisi par le joueur. |
| **Liste** | Une collection ordonnée d'un même type, demandé à la création : Fichier, Texte, Image, Nombre, Objet, Booléen ou Image de fond. | L'inventaire, les indices déjà trouvés. |
| **Objet** | Un ensemble de paires clé/valeur, modifiable champ par champ ou en JSON brut. | Une fiche de personnage complète, une réponse d'API. |
| **Fichier** | Un fichier générique, tous formats. | Un document déposé par le joueur. |
| **Image de fond** | Une image combinée à une couleur, une position et une répétition. | Le décor courant, qui change selon l'avancée. |

🔺 Les types **Booléen**, **Fichier** et **Liste** n'offrent pas le bouton **Vider** : leur valeur ne peut pas être remise à « rien », seulement remplacée.

---

## 🎬 L'exemple filé : le garde se souvient du mensonge

Quatre étapes, du début à la fin.

### 1️⃣ Créer la variable

`Cmd+Maj+V` → **Ajouter variable** → type **Booléen** → nom `AMenti`. Sa valeur initiale s'affiche à `faux` : au démarrage, personne n'a menti. ✅

### 2️⃣ L'écrire au chapitre 1

Dans le graphe, juste après la branche « je mens » de votre bloc **Choix**, ajoutez un bloc **Assignation**. Il a trois entrées :

- `in` — le fil qui arrive du choix ;
- `variable` — **quelle** variable écrire ;
- `valeur` — **quoi** y écrire.

Sur l'entrée `variable`, ouvrez le sélecteur et choisissez `AMenti`. 🔎 L'entrée `valeur` **n'existe pas encore** : elle apparaît automatiquement dès que vous avez désigné la variable, et elle prend d'elle-même le bon type (ici une case à cocher, puisque `AMenti` est un Booléen). Cochez-la : `vrai`.

🔺 Refermez la fenêtre : si rien n'est relié à `variable` ni à `valeur`, le bloc se replie sur le graphe en une pastille **`AMenti = vrai`**, avec seulement `in` et `out`. La variable et la valeur ne se règlent plus alors que dans la fenêtre d'édition (double-clic).

Branchez la sortie `out` sur la suite de la scène. Voilà, le mensonge est noté. 🖊️

### 3️⃣ La relire au chapitre 4

Là où le garde le recroise, posez un bloc **Condition**. Il a une entrée `condition` qui attend un Booléen. Deux sorties : `vrai` et `faux`.

Pour y amener `AMenti`, deux façons **strictement équivalentes** :

- **Le bloc Variable** — un petit bloc qui ne porte que le nom de la variable et une seule sortie. Posez-le, tirez un fil de sa sortie vers l'entrée `condition`.
- **Directement sur le point** — ouvrez la fenêtre d'édition du bloc Condition et, sur le champ `condition`, utilisez l'option **Sélectionner une variable**. Pas de fil, pas de bloc en plus : le champ pointe sur la variable.

Dans les deux cas, la lecture est **vivante** : Celestory va chercher la valeur *au moment où le joueur passe*, pas celle d'origine.

Branchez `vrai` sur « Tiens, le menteur… » et `faux` sur « Bonsoir, honnête voyageur. » 🎭

🔺 Le bloc Condition a son propre article : **☑️ Mettre en place des conditions vrai/faux**. Il détaille les comparaisons, les combinaisons de tests et les branchements multiples. Une variable sans condition ne sert à rien, une condition sans variable non plus : les deux articles se lisent à la suite.

### 4️⃣ Vérifier que ça marche

Lancez le lecteur et ouvrez son panneau **Variables**. Vous y voyez la liste complète, avec la valeur **en direct**, qui change sous vos yeux quand le bloc Assignation passe. Vous pouvez même y forcer une valeur à la main pour tester la branche du chapitre 4 sans rejouer le chapitre 1. 🧪

---

## 🔎 ⚠️ Pourquoi vous ne trouverez jamais le bloc « Variable » dans la recherche

C'est le piège le plus déroutant de ce chapitre, et il mérite son encadré.

Ouvrez le menu d'ajout de bloc, tapez `variable` : **rien**. Le bloc Variable est délibérément exclu de la liste des blocs et de sa recherche. 🙈

Il se trouve ailleurs : **tout en bas du menu d'ajout**, sous un titre **« Variables »**, où Celestory liste **vos** variables par leur nom. Cliquer sur `AMenti` pose un bloc Variable déjà relié à `AMenti`. Le champ de recherche filtre bien cette section — mais par **nom de variable**, pas par nom de bloc : tapez `AMenti`, pas `variable`.

🔺 **Conséquence directe : tant que vous n'avez déclaré aucune variable, la section n'existe pas et le bloc est parfaitement introuvable.** Ce n'est pas un bug d'affichage : créez d'abord la variable dans la fenêtre Variables, le bloc apparaîtra ensuite.

🔺 Autre chemin, pratique une fois qu'on le connaît : tirez un fil depuis une entrée et lâchez-le dans le vide. Le menu d'auto-complétion qui s'ouvre propose, en plus des blocs, **toutes vos variables du bon type** — et pose le bloc déjà branché. ⚡

---

## 🌍 ⚠️ La portée : il n'y a qu'un seul sac, et il est commun

Point capital, et contre-intuitif : **une variable Celestory est globale au projet entier.**

Pas au module. Pas au graphe. Pas à la scène. Il n'existe **qu'une seule liste**, plate, partagée par tout le projet — c'est bien ce que dit le titre de la fenêtre, *« Variables du projet »*. Le `AMenti` que vous écrivez dans le module « Prologue » est exactement le même que celui que vous lisez dans le module « Épilogue ». Une variable créée depuis n'importe où est immédiatement visible partout.

C'est très pratique — c'est ce qui permet à une histoire de traverser ses modules sans rien perdre — mais ça a trois conséquences à connaître :

- 🔺 **Les noms se bousculent.** Deux collaborateurs qui créent chacun un `Compteur` dans « leur » partie travaillent en réalité sur la même case mémoire. Préfixez : `Ch1_Compteur`, `Combat_Compteur`.
- 🔺 **Supprimer une variable frappe tout le projet.** Celestory parcourt **tous** les graphes, supprime **tous** les blocs Variable qui y renvoient, et vide tous les champs qui la désignaient. C'est propre, c'est complet, et c'est irréversible d'un clic (l'annulation reste votre filet).
- 🔺 **Renommer en double échoue en silence.** Si vous tapez un nom déjà porté par une autre variable, le renommage est purement et simplement ignoré : aucun message, l'ancien nom reste. Vérifiez que le nouveau nom s'est bien affiché.

---

## 🎭 ⚠️ Le piège « Contexte » dans la barre latérale

Dépliez un module dans la barre latérale de gauche : sous chacun s'affiche une entrée **Contexte** (icône bulle de dialogue).

Le mot suggère fortement « les variables **de ce module** ». **Ce n'est pas le cas.** Ce raccourci ouvre la fenêtre Variables du projet, à l'identique, sans aucun filtre de module. Cliquez sur « Contexte » sous le module A ou sous le module B : vous obtenez rigoureusement la même liste.

🔺 **« Contexte » est un raccourci vers la fenêtre Variables, rien de plus.** Il est rangé sous chaque module par commodité d'accès, pas parce qu'il y aurait un contexte par module. Il n'en existe pas.

---

## 🗂️ Les groupes : des dossiers, et rien d'autre

La fenêtre Variables propose un bouton **Ajouter groupe**, et chaque groupe peut contenir des sous-groupes. On peut y glisser ses variables, plier et déplier l'arborescence.

🔺 Un groupe est **purement cosmétique**. Il range l'affichage, un point c'est tout. Il ne crée aucun cloisonnement : une variable rangée dans le dossier « Combat » reste lisible et modifiable depuis n'importe quel bloc du projet, exactement comme les autres. Rangez pour vous y retrouver, jamais pour isoler.

---

## ✍️ Les quatre blocs qui écrivent dans une variable

| Bloc | Ce qu'il fait | Types acceptés |
|---|---|---|
| **Assignation** | Écrit une valeur dans une variable, en remplaçant l'ancienne. | Nombre, Texte, Booléen, Image, Liste, Image de fond, Fichier, Objet. |
| **Assignation Multiple** | La même chose, pour plusieurs variables d'un coup. Une entrée `nombre` règle combien de couples variable/valeur le bloc affiche. | Les mêmes. |
| **Incrémentation** | **Ajoute** une quantité à la valeur actuelle (1 par défaut). | Nombre uniquement. |
| **Décrémentation** | **Retire** une quantité à la valeur actuelle (1 par défaut). | Nombre uniquement. |

🔺 Incrémentation et Décrémentation sont la bonne réponse à « ajouter un point » : elles lisent, calculent et réécrivent en un seul bloc. Faire la même chose avec une Assignation demanderait de lire la variable, de l'additionner ailleurs, puis de la réassigner. 🎯

🔺 Le bloc **Variable**, lui, ne fait que **lire**. Il n'a pas d'entrée, seulement une sortie. Il ne modifie jamais rien.

---

## 💬 Afficher une variable dans une phrase

Vous n'avez pas besoin d'un montage compliqué pour écrire *« Vous avez 12 points »*. Il suffit d'écrire, dans le champ de texte du bloc, `Vous avez {{Points}} points.` : la double accolade fait apparaître une entrée `Points` sur le bloc, que vous branchez à votre variable.

C'est un mécanisme à part entière, avec ses règles (pas d'accents entre les accolades, la casse compte, dix blocs concernés seulement) — tout est dans l'article **🧩 Injecter une variable dans un texte : les doubles accolades**. Ne repartez pas d'ici sans l'avoir lu si vous voulez du texte personnalisé.

---

## 💾 Ce qui survit d'une session de jeu à l'autre

Question naturelle : si le joueur ferme l'onglet et revient demain, `AMenti` est-il toujours à `vrai` ?

**Seulement si vous l'avez prévu.** Il existe bien une sauvegarde de partie, mais elle n'est **pas automatique** : elle repose sur deux blocs.

- Le bloc **Sauvegarde** enregistre, à l'instant où le joueur le traverse, **tout l'état de la partie** : la position dans le graphe, le module en cours, la pile d'appels… **et la valeur de toutes les variables**. Le tout est écrit dans le navigateur du joueur, une sauvegarde par projet.
- Le bloc **Charger sauvegarde** restaure cet état. Il possède une sortie `pas de sauvegarde trouvé` pour le cas — fréquent — où le joueur vient pour la première fois.

🔺 **Sans bloc Sauvegarde dans votre graphe, rien n'est conservé.** À la fermeture, toutes les variables repartent de leur valeur initiale.

🔺 La sauvegarde est **un instantané**, pas un enregistrement continu : ce qui s'est passé après le dernier passage dans un bloc Sauvegarde est perdu. Posez-en un à chaque fin de chapitre.

🔺 Elle vit **dans le navigateur du joueur**. Changer d'appareil, de navigateur, ou vider les données du site : la sauvegarde disparaît.

🔺 Côté menus, le **Bouton commencer** possède une option **Réinitialiser les variables**. Activée, elle remet tout à la valeur initiale en lançant le module ; désactivée, elle conserve l'état courant. C'est exactement la différence entre « Nouvelle partie » et « Reprendre ». 🎮

---

## 🩹 Deux détails qui surprennent

🔺 **Le bloc Variable garde l'ancien nom.** Son étiquette est copiée au moment où vous le posez, et n'est pas remise à jour si vous renommez la variable ensuite. Le lien reste correct — c'est bien la bonne variable qui est lue — mais le graphe affiche un nom périmé. Remplacez le bloc pour rafraîchir l'affichage.

🔺 **Une variable non branchée ne se plaint pas.** Que la valeur initiale soit vide, qu'un point `value` reste en l'air ou qu'une entrée attende un fil qui n'arrive jamais, Celestory ne dit rien : il utilise du vide et continue. Le panneau Variables du lecteur est votre seul témoin fiable. 🔦

---

→ Prochaine étape : votre histoire sait maintenant se souvenir — reste à le **vérifier de vos yeux**. Direction **Tester son projet et lire le débogueur**, pour lancer une partie et regarder vos variables changer en direct, valeur par valeur. C'est là que l'on découvre si le post-it a vraiment été écrit. 🔍