Le défi de l'écriture interactive : Concevoir un RPG non linéaire comme Esoteric Ebb

CHRISTOFFER BODEGÅRD / SUDDEN SNAILGame Developer and Writer
Mar 17, 2026|7 Min
Art clé d'Esoteric Ebb par Christoffer Bodegård | Made with Unity. Un aventurier en tunique bleue agite une épée brisée devant un guerrier squelettique dont le dos est tourné vers la caméra. Un gobelin vêtu de rose, flanqué d'un drake rouge, regarde avec détresse. Le titre du jeu ESOTERIC EBB est sur le côté gauche.
Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.

Esoteric Ebb fait sensation sur Steam – mais comment un CRPG à narration ramifiée comme celui-ci se construit-il ? Dans ce blog invité, Christoffer Bodegård décompose des décisions de conception narrative complexes et son parcours de huit ans pour apprendre à gérer la création d'une histoire véritablement non linéaire, basée sur le dialogue.

Depuis le premier test public de Esoteric Ebb en 2023, on m'a posé une simple question encore et encore : “Comment gardez-vous une trace de tout cela ?” C'est une bonne question – une question difficile. Il est probable que j'y ai répondu de plusieurs manières différentes au fil des ans, mais jamais de manière vraiment satisfaisante.… Alors essayons.

(Mais d'abord, un peu de contexte sur Esoteric Ebb)

Esoteric Ebb est un CRPG massif, axé sur la narration et non linéaire. Pas de combat traditionnel, presque entièrement basé sur le dialogue, une durée de jeu allant de 45 minutes à 50 heures, et tant de choix… Des choix réels, ceux qui changent activement votre expérience de manière fondamentale jusqu'aux crédits. Oui, c'est un de ces jeux. Et cela a pris du temps à réaliser : environ huit ans du début à la fin, dont la moitié a été consacrée à ne rien faire, assis seul dans une pièce, apprenant à faire de l'écriture interactive.

Les trois contraintes de l'écriture interactive

Je définis l'écriture interactive selon trois contraintes/objectifs quelque peu arbitraires. Celles-ci étant :

  • Un ratio choix/texte élevé
  • >50 % du contenu étant dynamique
  • Un design ouvert

Prenez-les ou laissez-les comme vous le souhaitez, mais si vous atteignez ces trois critères, alors vous avez une recette pour une intense (potentielle) autonomie positive du joueur. Mais en regardant cela, vous pourriez immédiatement rencontrer quelques milliers de problèmes.

Passons en revue ces éléments.

The pale man holds incredible power, if he is able to bypass the esoteric limitation. #int #DC10
"However, I suggest you speak with Lady Sageleaf about this, if you require answers. I am simply a middle-man in this." #Visken
-(riverHub)

	+.Snell==1-"Snell." \(Look at him.\)
		The goblin gives you a conflicted expression. #Snell
		"I... didn't know, Cleric. I really didn't." #Snell
		"He did not." #Visken
		"Lady Sageleaf instructed me to not inform anyone. Even her own agents." #Visken
		"No need to be paranoid." #Visken
		
			++"How can I not be paranoid? Everyone's lying to me!"
				"Correction: I was lying to you. Lady Sageleaf, potentially as well." #Visken
				
			++"True. It's just some esoteric bullshit."
				"...Indeed." #Visken
		--
		Snell scratches his chin. #Snell
		"I'm not entirely sure how to feel about this." #Snell
		"The Old Lady isn't one to spend money on resurrecting a city cleric." #Snell
		"But I'm guessing she didn't want to wait for another one to appear?" #Snell
		"Hm. We should go speak with her. But... remember that she paid for your resurrection, Cleric." #Snell
		
			++"That is true. She seemed nice enough."
				"...I wouldn't use 'nice'. But she's at least very, very competent." #Snell
			
			++"I'll refrain from commenting until I hear her side of it."
				"Smart." #Snell
				
			++"I'm not sure I believe you."
				"That's okay." #Snell
				"But really, I'm not sure what I would gain by lying about this." #Snell
		--
		The goblin is telling the truth. You can read it in his eyes. #wis #DC14
		It was a LIE. But it was a LIE for <b>expediency</b>... #con #DC9

	+"What spell did you use to revive me?"
		He is quiet for several seconds. #Visken
		Considering if he should share this knowledge. #wis #DC13
		A modification, then. #int #DC12
		A <i>personal</i> resurrection spell. #reply #int
		"<i>Raise Dead</i>." #Visken
		"With changes. It is not the original spell, as I'm sure you understand." #Visken
		<i>Visken's Raise Dead</i>. #int #DC12
		"My spell requires a higher cost, while lowering the spell's complexity in return." #Visken
		
			++"A higher cost? Like... a blood-cost?"
				"No, Cleric." #Visken
				
			++"What do I owe you?"
				"Nothing. Lady Sageleaf offered to pay it in full." #Visken
				
			++"A higher crown cost?"
				"Yes, Cleric." #Visken
		--
		"The new cost is doubled. One thousand crowns." #Visken
		"Which is not too bad." #Visken
		
			++"My life is worth much more than that, yes."
			++"Eh. Could be better."
			++"Waste of money."
		--
		The pale man stares at you. #Visken
		
	+"Is this why I lost my ability to cast higher level spells?"
		"Potentially." #Visken
		"Whatever issues your body and soul appeared to have had with my spell, it was not permanent." #Visken
		
			++"Yeah, I've rebounded quickly."
				"Yes indeed." #Visken
				
			++"I'm just that awesome of a wizard, I guess." #.WIZARD+=1
				"Of course." #Visken
				
			++"My soul <i>and</i> body?"
				"It's more common than you might think." #Visken
	
	+"I felt really weird when I woke up. Like... different. Is that your dark magic also?"
		"That can happen, yes." #Visken
		"As it can with any resurrection magic when a soul is given sufficient time spent away from its body." #Visken
		
			++"So my soul is ruined?"
				"No." #Visken
			++"I like this new me."
				"Wonderful to hear." #Visken
			++"I don't think the difference was that big, honestly."
				"Good." #Visken
			++"Can I go back to my old self?"
				"No." #Visken
		--
		His cold voice shows no interest in your personal business. #wis #DC10
		Eh. Whatever changed, it was probably for the best. #dex #DC16
		Still got your wits about you. That's what matters. #reply #dex
		At least you are still highly intelligent. #int #FC8
		That is all that matters. #reply #int
		Soul magic is complicated. Not even the greatest Arcanists were able to unlock all of the secrets of the <i>inner light</i>. #int #DC15
		Perhaps one day, you will. #reply #int
	
	+"Right. I'll... go speak with Lady Sageleaf."
		"Good idea." #Visken
		The pale man was simply an instrument. #int #DC11
		But it is good to understand this game you've been entangled within. #reply #int
		->questions

-
->riverHub

Optimiser l'engagement des joueurs grâce au ratio choix-texte

Pourquoi un ratio choix-texte élevé est important

Un ratio choix-texte élevé semble agréable. C'est un excellent outil pour garder le joueur éveillé et engagé, pour commencer. Si vous les forcez à lire trop de blocs de texte, alors les yeux du joueur moyen se mettront à se voiler. Mais si vous continuez à les piquer et à les pousser – en les forçant à répondre à des questions intéressantes, en les poussant à prendre des décisions difficiles, ou simplement en les forçant à répondre à des accusations désagréables – alors c'est comme injecter une boisson énergisante dans leurs veines. Ils se réveilleront d'un coup et s'engageront réellement avec le texte. Du moins, statistiquement, ils seront plus susceptibles de le faire.

Le problème ici est simple, cependant : Vous devriez être insensé pour vouloir ajouter ce niveau de ramification à votre dialogue. Cela demande beaucoup de travail, et je pense plus spécifiquement, cela nécessite un ensemble d'outils très spécifique. (Des compétences aussi, bien sûr, mais l'outil doit être flexible et rapide pour que le processus de ramification ne se transforme pas en un test d'endurance).

Capture d'écran d'Esoteric Ebb par Christoffer Bodegård | Fait avec Unity.
Esoteric Ebb | Christoffer Bodegård

Choisir le bon outil

L'outil que j'utilise est le magnifique et incroyablement merveilleux ink script créé par le studio Inkle. En rendant cet outil open-source – qui fonctionne parfaitement dans Unity, d'ailleurs – ils ont littéralement fait ma carrière. Je leur dois beaucoup. Et l'encre est un outil qui, en plus de toutes les autres choses intéressantes qu'elle fait, est extrêmement bien adaptée pour des branches rapides et agiles.

Lorsque j'écris un dialogue en encre, j'écris avec la même rapidité qu'avec un contenu linéaire. Tant qu'il y a un plan de conception lâche préparé, je peux simplement me lancer. Ajouter des expressions de joueur, gérer les visuels ou gérer les vérifications de dés – tout cela prend quelques secondes, puisque tout est géré par des balises de base (principalement personnalisées pour s'adapter à-Ebb) et du code personnalisé, aux côtés des fonctions d'encre régulières (et bien conçues).

"Beyond that, I also focus a lot on my own unverified theories..." #Snurre
He slaps his knees and grins. #Snurre
"<b>The Folk Spirit</b>. Have you heard of it?" #Snurre
It's something he made up. Doesn't mean it's not correct though. #int #DC18
Sounds like a collective folk view on morality. #wis #DC13

	+"No. I have not."
		--(spiritNo)
		"Understandable. It's not yet published." #Snurre
	+DC13 wis-"Is that some kind of unified moral or ethical code of a people or culture?"
		"No, it's-" #Snurre
		He leans back and squints. #Snurre
		"That's not actually that far off. You've got a head on you, Cleric." #Snurre
	+"Yes."
		"Oh!" #Snurre
		"Then tell me, what is it?" #Snurre
		
			++"I lied. I have no idea what you're talking about."
				->spiritNo
			
			++ROLL18 int-Figure it out.
				+++S
					Ah... #int
					Just look at this halfling. #int
					He's clearly walking in the footsteps of the study of unconscious mind melding. #int
					Your best guess would then be... #int
					
						++++"The Folk Spirit... is that based on the idea of universal folk myths?"
							His bushy eyebrows reach for the ceiling. #Snurre
							"Why, yes! Very good guess, Cleric." #Snurre
					
				+++F
					You stare at the halfling for about thirty seconds. #int
					"You're a quiet one, Cleric." #Snurre
					An idea pops into your empty, empty skull. #int
					
						++++"The Folk Spirit is a communal ghost that haunts us every autumn."
						++++"The Folk Spirit is a great Fordnippian wine."
						++++"The Folk Spirit? That's a music genre."
					----
					"...Not a terrible guess, but no." #Snurre
						
						++++"Yeah, I have no idea."
							->spiritNo
	
-
"The Folk Spirit is the working title for my new thesis." #Snurre
"Most of it is, if you excuse my anuran, <i>fucking bullshit</i>." #Snurre #XPGain #Minor
"But in short, it is about how each folk share a number of core communal archetypes, or myths. I have traveled around the Coast to collect as many tales, writing down thousands of stories previously only passed down orally." #Snurre
"All to see how well my theory holds up, in the minds of so, so many folk." #Snurre
He clears his throat and leans back into his chair. #Snurre
"Apologies. I am ranting here, let us put a stop to it. What do <i>you</i> want, Cleric?" #Snurre
->hub

Planification de la variabilité : Contenu dynamique et conception ouverte

Mais qu'en est-il du numéro deux de notre liste de contraintes (">50 % du contenu étant dynamique") ? Le contenu dynamique et les conceptions ouvertes (ou non linéaires) découlent tous deux d'un objectif similaire : créer de la variabilité en fonction des choix des joueurs.

Laissez-les faire ce qu'ils veulent ! Amusez-vous ! Ayez un monde ouvert, où vous pouvez aller dans n'importe quelle direction ! Eh bien, c'est une façon de le faire. Mais la distinction importante ici est que l'écriture interactive se concentre toujours sur une conception guidée par l'intention de l'auteur. En d'autres termes, tout est contrôlé par l'écrivain.

Vous pouvez toujours faire une conception systématique, et il y a un grand chevauchement, mais l'art pratique de l'écriture interactive est spécifiquement lorsque vous ne laissez pas la narration émergente faire son chemin.

Ce que je veux dire par là est : Vous devez avoir des variables. Et vous devez les suivre. Pour chaque choix que le joueur fait, que ce soit des statistiques choisies lors de la création du personnage, ou à quel point il a été méchant contre ce chef gobelin – tout cela nécessite un type de retour d'information afin d'invoquer le phénomène d'agence. Que cela implique une réplique dynamique vers la fin du jeu, ou un scénario entier avec des embranchements, ces moments de retour d'information sont tout aussi importants que les choix eux-mêmes, sinon plus.

Capture d'écran d'Esoteric Ebb par Christoffer Bodegård | Fait avec Unity.
Esoteric Ebb | Christoffer Bodegård

Suivre les variables

Ma méthode de suivi des variables est simple et flexible : Je l'appelle le système de Variable d'Histoire (SV). En utilisant le système de balises, chaque fois que ces balises commencent par une ponctuation, cela indique l'utilisation d'une variable. Si cette variable n'a jamais été rencontrée auparavant, le SV est créé dans une grande liste. Sinon, il accède simplement au SV déjà existant, et le définit ou le vérifie selon les instructions.


++DC20 wis-\(Look for the source of the breeze.\)
	Your eyes glance upwards. #wis
	The wall. The wall is not a wall. #wis #.TE_SecretDoorRevealed=1 #UpdateEntities
	Look at the wall. #wis
		+++E-Oh?
			->END

Une chaîne et un int – généralement utilisé comme un booléen, mais lorsqu'il est nécessaire, il s'étend pour augmenter ou diminuer selon les besoins. Les commandes que j'ai mises en œuvre pour Ebb étaient “==”, “=”, “>=”, “<=”, “+=”, et “-=”.

La question devient alors celle de l'organisation. Je me suis amélioré à ce sujet au fur et à mesure, mais chaque SV utilise un préfixe basé sur l'emplacement ou la quête. “TE” dans ce cas fait référence à la zone du Salon de Thé. Un SV avec le préfixe “Q” fait référence à une quête, et un “QP” fait référence à un Point de Quête – c'est-à-dire, une entrée de journal dans l'Arbre des Quêtes, votre journal de quêtes.

Yes. #wis
A symbol. #wis #XPGain #Minor
A symbol of a sun. Definitely. #OBJ
If this is what Akzel wanted you to find, you've found it. #wis #.QP3_Mine=1 #.Q_Mine=2

	+Huh. So what do I do now?
-
Get back to your dwarf buddy, of course! #dex

Gains en design narratif

C'est un système rudimentaire, avec un gain de productivité majeur : Vous pouvez simplement continuer à écrire. Besoin d'une nouvelle variable pour un choix de dialogue dynamique ? Ajoutez-le simplement, puis copiez-collez-le dans le fichier où il doit être défini. Vérifiez facilement l'utilisation de n'importe quelle variable via un CTRL+F dans tout le projet, ou gérez des changements importants via une gestion de texte basique. Il n'y a pas de base de données à gérer. La liste elle-même est simplement chronologique. Vous avez oublié le nom d'une variable ? Il suffit de rechercher la zone pertinente ou les préfixes de quête, et de parcourir la liste.

Je ne m'attendais pas à ce que cela fonctionne au début. Une partie moyenne peut se terminer avec plus de 3 000 variables d'histoire dans cette liste à la fin du jeu. Mais – comme avec la plupart des choses que j'ai faites sur Esoteric Ebb – Unity a simplement fonctionné avec ça. Et l'intégration d'Unity dans ink ne m'a jamais fait défaut, pas une seule fois, même après l'avoir utilisé pendant presque une décennie maintenant. Une recompilation des fichiers ink prend quelques secondes. Personnaliser les fonctionnalités selon les préférences de Esoteric Ebb a toujours été extrêmement efficace. Et aussi étrange que cela puisse paraître, je suis encore surpris toutes ces années plus tard que cela coule simplement. Si je le peux, je veux continuer à développer ce pipeline pendant des années à venir.

Au-delà de cela, j'utilise Notepad++ pour tous mes écrits sur Esoteric Ebb. Bien que vous puissiez évidemment utiliser n'importe quel éditeur de texte de votre choix, le garder léger et réactif rend l'expérience beaucoup plus fluide. Rechercher à travers un million de mots en une fraction de seconde est exactement ce qui m'a permis d'écrire (et de corriger des bugs !) un jeu aussi massif.

The croco-beast rushes forward and grabs you by the neck. #Kraaid #HPLoss #1d4
		
	++\(Struggle to breathe.\) "I'm actually..."
		He tightens the grip as you mutter out a faint response. #Kraaid
			+++"...a rogue." #.ROGUE+=1
			+++"...a wizard." #.WIZARD+=1
			+++"...no, no okay, I'm a cleric. I'm <b>The Cleric</b>, even." #.CLERIC+=1
			+++.BARD==1-"...I think I'm a Bard? You know what that is?" #.BARD_Choice+=1
			+++.DRUID==1-"...a Druid. I guess?" #.DRUID_Choice+=1
			+++DC17 con-"...<i>I'm Agrarian</i>...! No wait, shit. That's politics. I mean, uh..." #.AGRARIAN+=1
			+++"...I'm whatever you want me to be. <i>Please don't kill me</i>."
				"Whatever <wiggle>Kraaid</wiggle> wants?" #Kraaid
					++++"Yes...! I'll even be apolitical!" #.APOLITICAL+=1
					++++"Yes! I'm... I'm a rabbit!"
	
	++"No! I am! I'm Cleric! That's me!"

Dernières réflexions : Correction de bugs et apprentissage à embrasser la branche

Mais c'est aussi le plus grand inconvénient de ce système : la correction des bugs. J'aurais dû investir plus de temps dans des solutions techniques pour la logique et la syntaxe défectueuses, mais en réalité, j'ai fini par forcer toute l'affaire par le biais de tests de jeu.

Alors que Esoteric Ebb reçoit son patch 1.1, j'ai réussi à corriger environ 704 'erreurs de texte' – qu'elles soient liées à l'orthographe ou au code – en moins de quatre jours de travail (des jours très tranquilles, aussi). C'est, encore une fois, parce que le système est extrêmement agile. Même ainsi, ces bugs étaient présents lorsque nous avons lancé Esoteric Ebb à cause de la configuration ici aussi. C'est une quantité folle de texte, avec une quantité ridicule de ramifications. Mais je suis également certain que je n'aurais pas été capable d'écrire même un quart du nombre final de mots si je n'avais pas été béni avec de l'encre.

Capture d'écran d'Esoteric Ebb par Christoffer Bodegård | Fait avec Unity.
Esoteric Ebb | Christoffer Bodegård

Postface : Plus d'outils recommandés pour les concepteurs narratifs

ink rend l'art pratique de l'écriture interactive rapide, pour moi. J'ai toujours eu des problèmes avec le scripting visuel, mais je sais que de nombreux écrivains ont exactement le problème inverse. Donc, je recommande toujours d'explorer d'autres solutions également pour trouver celle qui vous convient le mieux, à vous et à votre équipe, avec quelques exemples étant articy:draft, Arcweave, et Yarn Spinner.

Esoteric Ebb est maintenant disponible sur Steam. Explorez plus de jeux Made with Unity sur notre page de Curateur Steam, et découvrez plus d'histoires de développeurs Unity sur le Blog Unity et le hub de ressources.