Rétrospective de la Princesse spéculaire

Publié le

Cette année, j'ai participé au concours de Fiction-interactive.fr avec la Princesse spéculaire, un jeu à analyseur syntaxique créé avec Dialog. Ça faisait des années que je ne l'avais pas fait et je suis heureux d'avoir enfin réussi à rendre quelque chose.

Voici donc un (long) article, qui aurait pu s'intituler « Comment j'ai écrit une fiction interactive en 2 jours, et pris 6 mois pour rédiger le compte-rendu de mon expérience ».

(Autres possibilités de titre proposées par les gentils membres du Discord de Fiction-interactive.fr : « RETEX » pour RETour d'EXpérience, par smwhr ; « REX » pour faire plus canin, par Fabrice ; « Coup de rétroviseur » pour avoir un clin d'œil au thème, par Atozi ; et mon préféré, « Princesse rétrospéculaire », par CrocMiam. Merci à eux pour leur inestimable contribution !)

Le concept

Quand j'ai décidé de participer, plusieurs mois avant la date de rendu, et que j'ai réfléchi au thème « reflet », l'idée de base — un dirigeant magique qui serait à la fois un reflet littéral et métaphorique de son peuple — m'est venue assez rapidement. J'ai alors écrit le poème que l'on voit au tout début ; il a un peu été ma ligne directrice.

Même si je suis très satisfait de cette idée, et que la partie littérale du thème est bien présente dans le jeu (avec toute cette histoire de miroirs), la partie métaphorique est malheureusement un peu en retrait. Il devait y avoir une troisième partie où l'on discutait avec la Princesse pour connaître son histoire, et justifier pourquoi on la réveille (parce qu'a priori elle n'est pas libérée de sa malédiction qui la fait ressentir les besoins des autres), mais je n'ai pas eu le temps de l'écrire. (Davantage de détails plus loin.) Bon, cela ne m'a pas empêché de remporter le prix du thème, mais c'est quand même dommage.

Autre (petit) défaut, je me suis rendu compte bien après le concours que le message du poème n'est pas vraiment génial. Si les gens ont renversé un tyran, pourquoi auraient-ils besoin d'un nouveau monarque pour le remplacer et les guider ? Ils auraient pu instaurer une démocratie à la place ! Mais ça n'est pas excessivement grave non plus. (On va dire qu'ils ont établi une démocratie après que la Princesse s'est retirée de monde, comme ça ça résout le problème.)

Bref, une fois le concept trouvé, j'ai pensé à la forme que le jeu allait prendre. Je voulais faire une fiction interactive à analyseur syntaxique (parser), et Dialog m'intéressait depuis un moment déjà. Ma décision était prise : j'allais traduire la bibliothèque standard de Dialog en français, le temps d'étoffer mon idée et d'y réfléchir un peu plus.

Traduire Dialog

J'ai donc commencé à traduire Dialog peu après avoir eu l'idée de base (et après m'être un peu perdu en considérations techniques inutiles). J'étais conscient qu'il existait déjà une traduction faite par Éric Forgeot (l'ancien mainteneur de la traduction d'Inform 7), mais :

J'ai donc converti un de mes anciens projets Inform 7, le Temple nâga, vers Dialog, que j'ai traduit au fur et à mesure jusqu'à ce que je puisse jouer au Temple d'un bout à l'autre en français. Procéder de la sorte m'a permis d'apprendre Dialog, et de rester motivé car j'obtenais un résultat direct de ce que je faisais.

(J'aime beaucoup le Temple nâga pour ce genre de choses parce que c'est un jeu court qui utilise un large éventail des fonctionnalités d'Inform : pas mal d'actions différentes, des variables, de l'obscurité, des portes, du hasard, des scènes, du texte de différentes couleurs…)

Bien sûr, le jeu ne couvre pas toute la bibliothèque standard de Dialog, mais ça me donnait une bonne base et j'avais décidé de traduire le reste pendant l'écriture de ma participation.

Retour à l'écriture et première ébauche

Bah oui, même si j'adore coder des choses techniques comme la traduction, il fallait bien que j'avance sur ma participation en tant que tel. Quelles seraient l'histoire, les énigmes ?

En parallèle à la traduction, j'ai vaguement réfléchi au scénario. J'ai d'abord pensé à une carrière (de pierre) où la Princesse spéculaire se serait rendue pour se retirer du monde. Un archéologue, bien plus tard, la découvrirait. J'imaginais l'archéologue en PNJ un peu arrogant, et l'on incarnerait son assistant. Mais c'était quand même cliché et les PNJ sont difficiles à coder, alors peut-être que l'archéologue seul pouvait suffire ?

Il fallait aussi quelques énigmes. La carrière serait scellée magiquement, et on trouverait le moyen de l'ouvrir dans les ruines d'un village non loin. Pourquoi pas un miroir dans lequel le reflet de la miroitière nous aiderait (ou au contraire nous dissuaderait) ?

Enfin, une fois entré, l'archéologue se retrouverait dans l'obscurité. Avec une allumette, il découvrirait une statue qui semblerait le suivre des yeux : la Princesse, qu'il allait devoir réveiller.

Si nombre de ces éléments sont restés jusqu'au jeu final (une partie à l'extérieur et une partie sous terre, le miroir montrant la miroitière, la statue qu'on découvre…), cette ébauche dans son ensemble ne m'inspirait pas vraiment. Je trouvais que ça manquait de personnalité et j'avais du mal à concevoir une géographie et des énigmes concrètes.

J'ai donc tranquillement continué la traduction de Dialog, et le reste a stagné dans ma tête jusqu'à ce que je perde espoir de rendre quelque chose.

Décalage de la date de rendu inespérée et inspiration soudaine

La date limite approchait, et les auteurs et organisateurs se sont concertés pour la repousser de quatre semaines. C'était inespéré et j'ai recommencé à penser à mon scénario.

Et là j'ai eu une illumination : puisqu'il s'agit de la fin du règne d'une princesse, pourquoi pas un tombeau ? Et qui dit tombeau dit lieu saint, comme un temple ou une chapelle !

Comme toujours, la première chose que j'ai faite a été de me documenter sur Wikipédia. J'ai fini par tomber sur l'article concernant la chapelle de Languidou et je me suis aussitôt dit : « Voilà, c'est exactement ça. » Si vous lisez l'article, vous vous rendrez compte que je m'en suis pour ainsi dire « fortement inspiré ». La fontaine, le calvaire (qui a d'ailleurs son propre article), les stèles… tout y est.

J'ai juste simplifié la géographie (je n'avais pas besoin de chapelles latérales et autres), déplacé la fontaine devant la chapelle, ajouté une tombe sous le calvaire et mis le tout dans une forêt pour rendre le lieu moins accessible. Enfin, j'ai remplacé la pente sur laquelle la chapelle de Languidou est construite par un rocher au cœur duquel le tombeau pourrait être caché. La statue de la Princesse est au passage devenue un gisant : c'était plus logique, ça renforçait l'impact de sa découverte et ça correspondait mieux à l'ambiance voulue.

Donc si vous avez trouvé ma description de la chapelle réaliste et évocatrice, remerciez les passionnés qui contribuent à Wikipédia ! Et si jamais vous souhaitez effectuer un pèlerinage vers le lieu qui a tout inspiré, rendez-vous au Finistère ! (Il faudrait que je le fasse un jour en tout cas.)

Tout cela m'a beaucoup motivé. Sauf qu'il ne restait qu'une douzaine de jours.

Sprint

[Discord, le 2 février 2022] Il reste 11 jours ! […] Me concernant, si je me force et que je me fait un plan, il y a peut-être moyen que je termine quelque chose. (Quitte à utiliser la bonne vieille méthode du prologue, mais j'aimerais autant ne pas en arriver là.)

[…] Quand je dis qu'il y a moyen que j'arrive à terminer quelque chose, ça signifie que j'en suis à 50 mots et un vague plan dans ma tête. 😬

Je me suis dit que si j'y allais à fond, il y avait moyen que je réussisse. J'ai alors commencé à relater mon avancement sur le Discord de Fiction-interactive.fr pour me motiver, et aussi motiver les autres. (Les 50 mots mentionnés ci-dessus sont le poème écrit au tout début. Je n'avais toujours rien écrit d'autre !)

J'ai commencé par la géographie et les décors importants, sans écrire de descriptions. Je me suis dit que pouvoir me balader dans le jeu serait un début encourageant. (Et surtout, je n'avais toujours pas vraiment de scénario ni d'énigmes.)

[Discord, le 3 février 2022] J-10 : J'ai créé le début de la géographie de la 1re partie (sans descriptions pour le moment), et ai réfléchi à l'énigme de la deuxième partie. Clairement j'aurais pas fini à ce rythme-là ! Faudra que je me force un peu plus.

(Je prévois 3 parties, mais dans un petit nombre de lieux, pour un jeu assez facile. Enfin, on verra bien.)

Ça a effectivement été encourageant, mais finalement pas assez, et je n'arrivais toujours pas à créer d'énigmes intéressantes.

[Discord, le 4 février 2022] J-9 : J'ai ajouté quelques objets (toujours sans description) et ai un peu plus réfléchi aux énigmes. Il faut vraiment que je passe à la vitesse supérieure si je veux avoir une chance de terminer.

[Discord, le 6 février 2022] J-8 (c'était hier) : je n'ai pas eu de temps pour diverses raisons, donc je n'ai rien fait autre que réfléchir. C'est vraiment mal parti. 🥲

C'est alors que pour la seconde fois, je me suis dit que je n'aurais jamais le temps et j'ai abandonné. (Ce motif « j'ai une idée, j'abandonne car plus le temps, puis une autre idée, puis j'abandonne… » est récurrent chez moi.)

[Discord, le 9 février 2022] [J]e ne me fais plus trop d'illusions, au rythme où je vais, ça aurait passé si j'avais commencé quelques semaines/mois plus tôt.

Pourtant, je ne parvenais pas à m'en défaire et j'ai quand même continué à réfléchir. Je ne voulais pas me retrouver avec un énième projet non terminé sur les bras ! J'ai pensé aux éléments que j'avais. Une chapelle en ruines, des miroirs, une fontaine, un rocher… que pouvais-je en faire ? C'est en reliant tous ces points que je suis arrivé à un miroir à réparer, et au mercure dans la fontaine (on utilisait autrefois du mercure dans la fabrication des miroirs) et à la vanne sur le rocher.

Enfin, il me fallait un prétexte à toute cette aventure (l'archéologue était passé à la trappe depuis longtemps, souvenez-vous). J'aime les histoires mélancoliques, ce qui a mené aux contes qui n'en étaient pas vraiment, et à la protagoniste qui va en pèlerinage (et ça collait avec les ruines, la chapelle et le poème). Ah, et une forêt en automne après la pluie, pour mettre encore plus dans l'ambiance. (C'est un peu cliché, mais tant pis ! Et ça permet de glisser le mot « pétrichor ».)

Il ne restait que 2 jours et demi, mais je ne pouvais plus reculer.

[Discord, le 11 février 2022] J-2 : Après un soudain sursaut d'inspiration, de motivation et de volonté, et (un peu) de crunch, j'ai presque sous la main un prologue complet ! 😱

Encore un peu de crunch demain (même si je n'aurai pas beaucoup de temps pour diverses raisons), et je devrais avoir quelque chose de potable. Et dimanche matin je fignole la présentation et ça devrait le faire. 🤞

Ça sera sûrement pas un truc gagnant, mais ça n'est pas l'important.

C'était serré mais faisable, même si je n'aurais jamais pu faire ça sans toute l'expérience que j'ai accumulée à traduire Inform et à écrire des ébauches de jeu non terminées.

Il reste que j'ai dû couper du contenu, comme j'ai dit la veille de la date limite :

[Discord, le 11 février 2022] Moi je vais essayer d'innover. Ça ne sera non pas un prologue, mais un chapitre 1 et 2 sans épilogue !

(Cette histoire de prologue est une blague récurrente chez Fiction-interactive.fr depuis le concours de l'année précédente.)

[Discord, le 12 février 2022] J-1 (en fait c'est davantage J-0,75 😬) : J'ai manqué de temps et je n'ai pas trop avancé dans la deuxième partie. Comme l'élément important mentionné dans le titre n'apparaît que dans cette deuxième partie, je n'ai pas vraiment envie d'envoyer le jeu sans.

Je crois que je vais juste simplifier à fond la dernière énigme pour pouvoir terminer à temps. Ça sera un peu déséquilibré par rapport à la première partie, mais tant pis.

Car oui, à moins d'un jour avant la fin, le gisant de la Princesse n'était pas encore dans le jeu, alors qu'il s'agissait de l'élément clef ! J'avais pensé à une énigme compliquée à base de miroirs à orienter et de lumière à amplifier pour éclairer le tombeau, mais je n'avais pas le temps de la concevoir et de l'implanter.

[Discord, le 13 février 2022] H-3 : Je commence à coder la dernière énigme. Mon plan : terminer ça d'ici une heure, puis une autre heure pour tester et ajouter des détails optionnels (implanter des actions que le joueur pourrait essayer, implanter du décor…) et la dernière heure pour envoyer le jeu.

J'ai alors remplacé l'énigme par celle assez simpliste du vitrail, que j'ai ajoutée au jeu 3 heures avant la limite de rendu. Au final elle s'est avérée tout à fait correcte, avec le burin de la vision et l'éclat à retrouver au sommet, et elle restait dans le thème de la verrerie/miroiterie. Ça m'a pris plus de temps que prévu, cela dit. À partir de là tout est allé très vite, et j'ai sauté la relecture du texte et le polissage.

[Discord, le 13 février 2022] H-2 : Pas tout à fait finit l'énigme. Ça sera serré.

[…]

H-1 : J'ai grosso modo fini. (Mais j'aurai pas fait les trucs optionnels) Il me reste 2-3 trucs à régler et j'envoie !

[…]

H-0,5 : C'est envoyé ! 🎉 C'est absolument pas testé, mais je sais au moins qu'on peut finir le jeu d'un bout à l'autre. Et j'ai pas relu pour les fautes non plus, mais je me fais confiance, il ne devrait pas trop y en avoir. Hop, déjà 2 erreurs de trouver, corrigeons vite.

Et j'ai dû recompiler l'histoire 5 minutes avant la fin parce que j'avais laissé les commandes de débogage :

[Discord, le 13 février 2022] Flûte, j'ai laissé les commandes de débug

Mais je l'avais fait !

Le lendemain, après avoir pris un repos bien mérité, j'ai quand même émis quelques doutes (en blaguant à moitié) :

[Discord, le 14 février 2022] De toute façon, avec une participation au parser, dans un langage de prog inédit en français, avec une fin abrupte parce que rendu 30 min avant la limite, pas du tout bêta-testé, et sans gros efforts sur la présentation, je risque pas de me hisser bien haut. 🥲

Alors que je suis plutôt bien placé au final ! Clairement, il ne faut pas sous-estimer ses compétences.

2 jours après le rendu, j'ai trouvé un bug majeur : il était impossible d'interagir avec le gisant ! Pour l'objet le plus important de l'histoire, c'était ballot !

[Discord, le 16 février 2022] Je viens de découvrir un bug stupide dans mon jeu (à cause du faute de frappe ridicule). Pour ceux qui y ont déjà joué, c'est un certain objet hyper-important (heureusement que du décor, mais important quand même), qu'on ne peut pas examiner (ou toute autre action) dans la deuxième partie.

Une simple faute de frappe faisant échouer toute action le concernant… Le compilateur Dialog m'avait bien donné un avertissement, mais il s'était perdu dans tous les autres avertissements venant de ma traduction pas tout à fait terminée. J'ai rapidement corrigé, en plus de petites améliorations pour permettre d'accepter davantage de commandes dans certaines situations. J'en ai profité pour rendre le code source public et écrire une solution à destination des gens n'ayant pas l'habitude du parser.

J'ai décidé de ne plus rien corriger à moins que ça ne soit majeur, car j'avais besoin de penser à autre chose. Il est malheureusement resté un petit bug quand on met le miroir sur le pied (il revient dans l'inventaire au lieu de rester sur l'autel). Ça n'était pas hyper-gênant, mais apparemment ça en a bloqué certains.

La période de vote

Globalement, tout s'est bien passé. Il y a eu beaucoup d'activité sur le Discord avec des discussions intéressantes, et plusieurs streams sympas sur Twitch. L'ambiance était toujours bienveillante et rien que pour ça je recommande de participer au concours de fictions interactives !

J'ai simplement eu un petit doute quand deux anglophones ont écrit des critiques (celle de MathBrush et celle de Dhakajack). Elles n'étaient pas négatives, mais pas enthousiastes non plus. Mais ça restait super de voir que le concours suscitait de l'activité.

Et puis, j'ai joué aux autres participations vers la fin de la période, et c'est vrai que le niveau était très haut ! Finalement, mes doutes se sont révélés infondés : j'ai terminé 1er en thème, 3e en technique et en écriture, et 4e en général !

Notamment, la plupart des commentaires (dans le fichier Excel disponible à la fin du concours) disaient que l'écriture était très bien ! (Théorie : il est plus difficile pour un anglophone d'apprécier la qualité de l'écriture d'un texte en français, d'où le fait que les critiques susmentionnées ne disaient rien à ce propos.)

Une anecdote à propos des personnages

Et une dernière chose avant de passer au bilan. Il se trouve que tous les personnages du jeu sont des femmes. Bien qu'il n'y ait absolument pas à justifier cela, voici quelques raisons qui font peut-être une anecdote amusante ou intéressante. (Peut-être.)

Voilà.

Bilan !

Je suis particulièrement satisfait de ce projet. Cela faisait vraiment longtemps que je n'en avais pas mené à terme !

Si j'avais réussi à ne pas tout faire au dernier moment, j'aurais peut-être pu me hisser un peu plus haut dans le classement, mais franchement, ça n'est pas très grave. (Et la concurrence était rude, de toute façon.)

Voici les choses que j'ai apprises ou redécouvertes, qui seront importantes à retenir pour la prochaine fois, et qui pourraient aussi vous être utiles :

Et de manière plus personnelle, j'ai beaucoup aimé Dialog. Je crois que je le trouve même supérieur à Inform 7, malgré quelques petits trucs qui manquent. Il est même possible qu'avec Inform 7, je n'aurais pas été suffisamment productif pour terminer dans les temps ! J'utiliserai sûrement Dialog pour mes futurs projets. (Je ne suis pas sûr d'aimer la direction dans laquelle part Inform 7 et ça devient difficile de maintenir sa traduction en français, mais c'est une autre histoire…)

Je finis avec une astuce toute simple pour ajouter ce petit quelque chose à un jeu à parser : abuser des (select) … (or) … (stopping) (Dialog) ou "[one of]…[or]…[stopping] (Inform 7). Ça permet :

Et la suite ?

Corriger les fautes d'orthographe, les quelques bugs, mettre au propre la traduction de Dialog. Et peut-être écrire la partie manquante ? Mais je ne suis vraiment pas sûr, j'ai fini par m'habituer à la fin actuelle. On verra !

Et bien sûr, tenter de participer au concours 2023 ! Il faudra bien que j'arrive à gagner un jour, de surcroît avec un jeu à parser (ce qui n'a pas été le cas depuis plusieurs années). Et participez, vous aussi, c'est génial et ça vaut le coup, ne serait-ce que pour la super communauté !