L’écriture de scénarios assistée, avec Pychronia Tools

Publié le mardi 14 mai 2019 dans Articles

Par

Tags:

--

Problématique

Tout écrivain vous le confirmera : ce n’est pas chose facile de rester cohérent lorsque l’on travaille, plusieurs mois durant, sur une longue histoire. Ça l’est encore moins lorsque l’histoire en question est vécue par des dizaines de personnages, qui ont chacun leur vision partielle de la vérité. Et le jeu de rôle grandeur-nature est en première ligne face à ce problème.

Le danger ne se tapit pas dans le premier jet d’écriture : s’il a toutes ses idées bien en place, l’auteur ne risque pas grand-chose, hormis quelques typos et interversions de noms. C’est lors des modifications ultérieures (changement de la chronologie des faits, ajouts de rebondissements…) que les informations – disséminées et dupliquées dans les documents des différents participants – vont peu à peu devenir caduques et incohérentes. À terme, même les feuilles de personnage d’une banale “soirée meurtre&mystère” finiront truffées d’invraisemblances spatiales, temporelles, lexicales, structurelles, si elles ne sont pas rigoureusement vérifiées et comparées après chaque évolution du scénario.

Que faire pour empêcher cela, sans passer sa vie à effectuer des relectures comparatives ? D’abord, sans doute, dédupliquer les textes communs à plusieurs joueurs, qui entraînent de fastidieux copier-coller (multipliant les erreurs et enflant artificiellement la masse du texte). Ensuite, permettre à l’auteur de passer en revue les ensembles de modifications interdépendantes qu’il a successivement appliquées à son scénario. Enfin, lui donner des résumés d’informations-clés, plus faciles à passer en revue que de verbeux textes littéraires. Et tout cela de façon aussi automatisée que possible, car le nombre de documents à gérer peut rendre la moindre opération très coûteuse en temps (et en risque d’étourderies).

 

Les apports de la machinerie Pychronia Tools

Pour bénéficier de ces précieuses facilités d’écriture lors de la création de la soirée mystère Chrysalis:Mindstorm, j’ai mis en place un processus d’écriture spécifique, impliquant de simples fichiers de texte (qui contiennent le scénario), divers outils logiciels existants, ainsi qu’un module “Pychronia Tools” développé pour l’occasion.

Une fois cette machinerie en place, il n’y a plus qu’à la mettre en route et – magie – une centaine de fichiers PDF apparaissent l’un après l’autre dans le dossier de sortie : manuel du maître de jeu, fiches de personnages complètes puis résumées pour les joueurs, documents à imprimer sur de beaux parchemins pour servir d’indices en jeu, fiches de synthèse pour les figurants…

Cet outillage est bien plus qu’un simple générateur de documents : il intègre une vérification automatique de la cohérence du scénario. Désormais, si un indice est évoqué à un endroit mais non fourni à un autre, ou si un même symbole a différentes valeurs d’un fichier à l’autre, l’erreur est rapportée.

 

Extrait d’erreurs de cohérence retournées par le programme :

!!! ERROR IN hints registry for key golden_box_with_blood : [‘needed’] requires a provided hint

!!! ERROR IN symbols registry for key murder_date : [‘3 janvier 2018′, ’15 mars 2018’]

Et grâce aux tableaux récapitulatifs automatiquement générés, on peut vérifier d’un coup d’œil que chaque joueur est bien informé des faits qui le concernent, que la répartition des informations-clés est à peu près équilibrée, et que les événements majeurs sont correctement reportés dans des fiches synthétiques.

Extrait du récapitulatif automatique des “faits” du scénario :

Les nom de personnages sont en italique quand ils ont le “fait” en question uniquement dans leur fiche de personnage complète, pas dans leur fiche synthétique.

Résultat, le maître de jeu peut se fier tranquillement à ses propres documents (autogénérés), pour mettre en place et suivre le jeu : scénario détaillé, planning de la soirée, checklist des matériels et écrits à disposer dans les lieux, résumé automatique des missions et compétences spéciales de chaque joueur…

Cerise sur le gâteau, cette machinerie peut aussi envoyer ses documents de jeu, par email, à chaque joueur (ex. fiche de personnage et documents initialement possédés). On évite ainsi le drame qui guette chaque organisateur : spoiler un participant en lui envoyant les mauvais documents.

Ce système ajoute évidemment une certaine complexité au projet, par rapport à quelques banals fichiers Word/LibreOffice. Mais il apporte une aide inestimable en termes d’évolutivité et de robustesse du scénario, en détectant les incohérences et en automatisant les tâches rébarbatives. Personnellement, il m’a sauvé la mise plus d’une fois, lorsque j’avais interverti les noms de certains personnages dans des fiches, ou oublié d’avertir quelques joueurs des nouveaux méfaits qu’ils étaient censés avoir commis par le passé.

 

Comment mettre en place un tel processus ?

Étape 1 : Délaisser les fichiers bureautiques riches (docx, odt, pdf…) au profit d’un format en texte brut, facilement manipulable, où la mise en forme est explicitement signalée par des caractères spéciaux. Les documents en jeu ayant de forts besoins en graphisme et typographie (affiches, parchemins, journaux…) peuvent être laissés de côté, dans des fichiers bureautiques plus habituels : Word, LibreOffice, InDesign…

Exemple de texte brut (format restructuredtext) :

Manuel du Maître de Jeu
############################

.. contents:: Table des Matières
  :depth: 2

Concept de la soirée mystère
================================

**Chrysalis:Mindstorm** est un huis clos entre `enquête <https://fr.wikipedia.org/wiki/Enqu%C3%AAte>`_ criminelle et conflit géopolitique, où des agents secrets et des civils de divers pays se retrouvent face à un *redoutable* inspecteur de police, qui va les pousser dans leurs derniers retranchements.

Rendu de ce texte une fois converti en PDF :

Étape 2 : Utiliser un gestionnaire de versions pour les fichiers de scénario. Cela permet de revenir à tout moment en arrière dans le temps, d’éviter les horripilantes modifications accidentelles de fichiers, et de vérifier la cohérence de chacune des évolutions apportées (renommage d’un lieu, ajout d’une information pour un groupe de joueurs…).

Visualisation d’une modification apportée aux règles du jeu :

Étape 3 : Ajouter un petit moteur de traitement, pour enrichir le texte avec des fonctionnalités simples et pratiques : permettre à un fichier d’en inclure un autre, de définir des blocs de texte réutilisables, d’insérer des variables (ex. la date d’un événement crucial, différente pour chaque session de la soirée mystère), d’afficher différentes informations suivant l’équipe à laquelle appartient le joueur ciblé…

Étape 4 : Automatiser les vérifications de cohérence. J’ai pour cela créé des balises spécifiques dans le moteur de traitement, que j’ai ensuite insérées au fil de mes écrits :

  • La balise {% fact %} permet d’annoncer un fait (ex. “untel a tenté de cambrioler Loyd Georges”), et d’indiquer si le joueur en est l’auteur ou juste un témoin.
  • La balise {% hint %} permet de requérir l’existence d’un indice physique (lettre, objet…) à donner au joueur.
  • La balise {% symbol %} permet d’assurer l’unicité d’une valeur dans tous les fichiers de scénario (par exemple l’heure exacte d’un crime), tout en évitant de recourir aux “variables” qui obscurcissent le texte.

Exemple d’utilisation des balises spéciales pour enrichir un texte de scénario :

À l’attention de {{ agent_gamma_fake_name }} : le pays de {% symbol “Balberith” for “first_country_at_war” %} est entré en guerre, suite au complot mené par l’agent Epsilon {% fact “agent_epsilon_triggered_war” as author %}. Vous possédez un témoignage signé de sa main en attestant. {% hint “epsilon_signed_testimony_for_agent_gamma” is needed %}.

On le voit, ces balises ont chacune leur syntaxe propre, et peuvent faire appel à d’autres fonctionnalités du moteur de traitement, comme les variables (dont on a un exemple avec {{ agent_gamma_fake_name }}).

Étape 5 : Lier tout cela avec des scripts, qui vont automatiser les différentes étapes de la création des documents de jeu : rassemblement des données utiles (dont les photos des joueurs), répartition des pages de scénario destinées à chaque participant (contexte global, contexte personnel, règles du jeu…), transformation en format PDF, et génération des fiches de synthèse destinées au maître de jeu.

 

Une partie des documents PDF générés, à côté de leurs sources en texte brut :

Le futur

Tout cela est bien beau, mais qu’en est-il du reste de la communauté rôliste ? Peut-elle profiter, plus largement, des fonctionnalités offertes par ce système d’aide à l’écriture de scénarios ?

La réponse est oui. Cependant, comme on le voit dans les étapes ci-dessus, cet outillage nécessite une certaine affinité avec des procédés qui sont habituellement réservés au développement informatique ; affinité que beaucoup d’auteurs de GN n’ont pas.

Je suis donc à l’écoute d’auteurs tentés par l’expérience, afin de voir avec eux comment ils travaillent, quels formats et outils ils sont à même d’utiliser, et comment ce système  pourrait être généralisé pour convenir à leur utilisation. Je pourrais alors voir à extraire ce code (qui est actuellement fortement lié à la structure des fichiers du jeu Chrysalis), pour le rendre davantage autonome et plus facilement déployable.

Notons que des logiciels comme Twine permettent déjà de créer des scénarios de façon assez simple, avec un mini-langage pour définir des variables et utiliser des opérations logiques. La machinerie Pychronia Tools n’a donc de sens que pour l’intégration très poussée qu’elle offre, avec ses vérifications de cohérence automatisées et ses scripts de génération bout-en-bout.

Intéressé par ce système d’aide à l’écriture de scénario ? N’hésitez pas à me contacter à partir des informations exposées sur le Site de Chrysalis.

Annexe : Détails complémentaires pour les initiés à l’informatique

Ma machinerie est basée sur le langage Python et son écosystème de manipulation/création de documents.

En ce qui concerne le format “texte brut” du scénario, beaucoup de “langages de balisage” peuvent être utilisés pour cela : restructuredtext, markdown, textile, latex, voire html… J’ai, de mon côté, choisi restructuredtext pour sa clarté, sa polyvalence, et son intégration poussée au langage Python. Pour éditer ces fichiers texte, naturellement, Pycharm, Notepad++, Geany, ou un simple bloc-notes peuvent faire l’affaire.

Pour le gestionnaire de versions (ou “VCS”), j’ai choisi Git et son excellente interface graphique TortoiseGit (disponible sous Windows uniquement hélas). Mercurial, Bazaar, DARCS, ou d’autres sont tout aussi pertinents. A minima, on peut utiliser la sauvegarde versionnée de fichiers proposée par Dropbox et consorts, même si elle n’offre que peu de fonctionnalités pour visualiser les différentiels entre plusieurs étapes de l’écriture..

Visualisation, via GIT, des jeux de modifications apportées au scénario :

En ce qui concerne le moteur de gabarit (ou “template engine”) utilisé pour le traitement des fichiers de texte (et pour les balises spécifiques), enfin, j’ai intégré le puissant Jinja2, qui permet de créer des variables et des macros directement dans les gabarits. Les données manipulées par ce moteur proviennent, dans mon cas, d’une arborescence de fichiers Yaml, mais de nombreuses autres sources (fichier python, csv, xml…) sont très facilement intégrables.

The following two tabs change content below.
Passionné de créations ludiques, d'informatique, de divagations philosophiques et quelques autres trucs

Derniers articles parPakal de Bonchamp (voir tous)

2 réactions à L’écriture de scénarios assistée, avec Pychronia Tools

  1. Les sources et la documentation de ces scripts “Pychronia Tools” sont désormais en open-source, sur le dépôt du jeu Chrysalis : https://github.com/ChrysalisTeam/chrysalis

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.