Aujourd’hui, un sujet technique, mais qui devrait ravir les gens qui s’intéressent à l’abandonware. Je vais vous parler du format d’histoires utilisé par Inform, et pourquoi ça veut dire que vous (oui, vous !) pouvez créer en un clic des nouveaux jeux qui marchent aussi bien sur Android que sur l’Amiga, sur iOS ou sur Apple II !

La Z-machine

Je vous fait la version courte ; si vous voulez en savoir plus, je vous encourage à lire la page Wikipédia sur la Z-machine (que j’ai écrite, au passage…).

Dans les années 80, le marché du jeu vidéo était fragmenté en une dizaine de micro-ordinateurs, chacun avec ses spécificités, et incompatibles entre eux : les jeux disponibles pour Commodore 64 n’étaient pas disponibles pour Oric, ou Apple II, à moins que le développeur décide de recoder le jeu (plus ou moins) pour qu’il tourne sur ceux-ci. (Il y avait des facteurs qui aidaient : même processeur, écriture en BASIC, etc., mais pas tout le temps.)

De nos jours, on n’a pas ce problème : un créateur de jeux vidéo n’a pas besoin de faire une version pour les HP et une autre pour les Toshiba : le système d’exploitation, comme Windows ou Linux par exemple, unifie la façon dont les ordinateurs marchent. Mais il nous reste quand même un petit nombre de plateformes incompatibles entre elles (Windows, macOS, Linux, Android, iOS, etc.). De nos jours, les développeurs ont des outils pour produire des versions de leur jeu adaptées à chaque environnement, mais à l’époque, beaucoup moins.

Infocom, l’entreprise majeure dans le domaine de la fiction interactive, dont les jeux sont la référence pour les anglophones, est parvenue à sortir tous ses jeux pour plus d’une dizaine de micro-ordinateurs différents. Comment ont-ils fait ? Leur solution a été de créer une « fausse machine », une machine virtuelle, la fameuse « Z-machine », et de coder leurs jeux pour cet ordinateur virtuel. (La Z-Machine n’est donc pas un objet physique, juste un objet théorique !) Ensuite, il leur a suffit d’écrire un programme pour Apple II qui se comporte comme la Z-machine, puis un programme pour l’Atari ST qui se comporte comme la Z-machine, et ainsi de suite. Une fois ces programmes écrits, ils n’y touchaient plus ; ils créaient leur jeu en format Z-machine, puis sur les disquettes ils mettaient le jeu et le programme correspondant au micro-ordinateur visé !

Il y eut plusieurs versions de la Z-Machine, avec plus ou moins de fonctionnalités. De nos jours, les versions qui nous intéressent sont la version 3 (extension .z3, 128 ko max), la version 5 (fichiers .z5, 256 ko, quelques fonctionnalités en plus comme la gestion du temps réel), et la version 8 (.z8, 512 ko). La version 6.34 du compilateur Inform 6 peut sortir un jeu dans n’importe quel de ces formats !

Quelques années plus tard, lorsque Graham Nelson a créé le langage de programmation Inform (qui sert à créer des jeux similaires — même qu’on a plein de tutos sur notre site !), il s’est assuré que le format de sortie était bien la Z-machine : tout le monde pouvait écrire des jeux dans le même format que celui d’Infocom ! Une révolution à l’époque, qui a contribué au succès immédiat d’Inform.

Traducteur de machines

Le fait qu’Inform permette d’obtenir un fichier de jeu Z-machine veut dire qu’en théorie, un jeu que vous avez codé avec Inform peut tourner sur les mêmes micro-ordinateurs que ceux visés par Infocom. Il suffit de récupérer le programme pour ce micro-ordinateur qui se comporte comme une Z-machine : le mot technique est « interpréteur » (même si c’est une mauvaise traduction de l’anglais interpreter, qui veut dire « traducteur/interprète »). Par exemple, certaines personnes ont réussi à extraire l’interpréteur qu’Infocom avait écrit pour l’Apple II et à s’en servir pour faire des disquettes qui lancent leur propre jeu sur Apple II. Idem pour le Commodore 64 — et même, encore mieux, une équipe a codé leur propre interpréteur, Ozmoo, qui va plus vite et permet de lancer des jeux plus gros que celui d’Infocom, en plus de prendre en charge les accents français ! On peut également lancer les jeux sur Amiga, avec Frotz.

Et ça, c’est assez incroyable ! Ça veut dire que vous pouvez télécharger Inform 6 sur notre site, suivre nos tutos, faire un petit jeu, suivre les instructions ci-dessus, copier tout ça sur la bonne disquette, remonter au grenier de chez vos parents, trouver le vieil ordinateur poussiéreux des années 80, mettre votre disquette dedans, et votre jeu se lance ! Ensuite vous pouvez remonter dans le temps et vendre votre jeu (où le personnage a un iPhone et mange des kebabs) pour 300 FF sans problème. Blague à part, les FI sont à ma connaissance le seul type de jeu vidéo que l’on peut facilement créer nous-même et faire tourner sur tout un tas de machines anciennes !

Quel tas de machines anciennes ? Difficile d’avoir une liste exhaustive, mais il y a quelques ressources en ligne, comme par exemple ce tableau officiel d’Infocom, mais qui n’intègre pas les interpréteurs amateurs codés depuis ! Allez, je tente : Apple II, Commodore 64/128, Atari XL/SE, Atari ST, TI-99/4A, Amiga, TRS-80, Osborne, Amstrad CPC, IBM PC, DOS, MSX, ZX Spectrum Next, BBC Micro, Acorn, Commodore PET, Commodore Plus/4, et Oric ! Mais attention, tout n’est pas toujours 100% possible ou compatible ! J’en parle dans la section suivante.

Mais il y a mieux que les interpréteurs pour vieilles machines. Déjà, notons qu’il existe des interpréteurs pour nos systèmes actuels : vous pouvez jouer à la même fiction interactive sur Windows, Mac, et Linux avec Gargoyle, ou sur iOS (Frotz) et Android (Text Fiction) — et ce, sans que l’auteur ait eu besoin de faire quoi que ce soit. Vous pouvez même y jouer dans votre navigateur grâce à Parchment, l’interpréteur JavaScript qui nous permet d’avoir des boutons « Jouer au jeu en ligne » sur notre site. Et en fait, tant qu’un appareil permet d’afficher du texte, vous pouvez coder un interpréteur qui lance des FI sur cet appareil ! On peut ainsi jouer à vos jeux sur un Raspberry Pi, sur un Palm Pilot (mais si, les PDA), sur une Dreamcast, sur un stylo LiveScribe, ou même, grâce à mon collègue Natrium729, tous ensemble sur notre salon Discord !!

Les limites de la machine

Il y a quelques limitations à ce que je viens de vous dire. Commençons par celles qui peuvent se poser sur les ordinateurs rétro, auxquelles je faisais allusion plus haut. Il y a plusieurs problèmes qui peuvent se poser :

  • L’interpréteur disponible sur la plateforme (par exemple, celui qui a été gratté des images disque d’Infocom de l’époque) ne peut pas lire tous les types de fichiers ; typiquement, sur les vieux ordinateurs, il est possible de lire les fichiers .z3, mais pas les .z5 ou les .z8. Ça peut être parce que l’interpréteur est vieux et on pourrait aller plus loin en étant plus malins dans le codage (les interpréteurs Infocom n’étaient pas particulièrement optimisés), ou alors…
  • parce que la machine est physiquement incapable d’avoir une Z-machine, ou une Z-machine qui lit des fichiers plus gros que 128 ko ; par exemple, si la mémoire est insuffisante, ou si l’ordinateur ne peut pas adresser des espaces aussi grands que ça. (Je pense que c’est par exemple un problème sur les TI-99/4A.) Un autre souci est celui des cassettes : certaines machines, comme le ZX Spectrum, n’avaient pas de lecteurs de disquettes mais un lecteur de cassettes. Or, les cassettes, ça se lit en avançant (vous ne pouvez pas accéder à n’importe quel bout de données, au contraire des disquettes, qui ont cet « accès aléatoire »), et donc il faut que les données soient arrangées d’une certaine façon ; impossible pour les jeux Infocom, qui nécessiteraient de tout stocker en mémoire vive !
  • Enfin, il peut arriver qu’il n’y ait juste pas d’interpréteur écrit pour la plateforme. Infocom n’a par exemple jamais sorti ses jeux sur Oric ou sur ordinateurs Thomson (comme le TO-7) ; des passionnés ont ensuite fait des interpréteurs Oric, mais pour le Thomson, ça n’existe pas, ou pas encore devrais-je dire…

Il y a aussi une contrainte au niveau des formats de sortie. De nos jours, pour écrire un jeu Z-Machine, il faut utiliser Inform 6. En effet, Inform 7, qui se base sur une approche différente, génère beaucoup plus de code (et ça ne s’arrange pas avec les versions) ; en conséquence, il y a quelques années, l’équipe d’Inform 7 a annoncé abandonner la possibilité de créer des jeux pour la Z-Machine (utilisant un autre format, Glulx, à la place).

Enfin, une des limitations est malheureusement celle des accents… C’est celle qui m’embête le plus pour tout dire. La Z-machine (en tout cas, la version Inform — j’avoue que ça n’est pas très clair) est capable d’afficher les accents, mais la plupart des interpréteurs ne les prennent pas en charge… Mettez votre jeu dans un interpréteur pour vieux ordinateurs et il y a des chances que les accents soient illisibles, et votre jeu aussi ! C’est dommage, et c’est une combinaison de « les vieilles machines sont limitées » et « les anglophones s’en fichent »… Espérons qu’un jour ça soit résolu !

Car oui, il me semble qu’il y a clairement un côté « les anglophones s’en fichent », parfois… Par exemple, Frotz, un des interpréteurs de référence et démarré dans les années 90, ne pouvait pas afficher les accents et autres caractères Unicode jusqu’à novembre 2019 ! Bon, il n’y a qu’une seule personne en charge du développement et il ne savait pas trop comment faire ; mais quand même, le fait que cette feature ait attendu 20 ans est incroyable… (En plus, il y a un jeu Infocom qui utilise les accents – la traduction allemande de Zork !) Du coup, je vais réessayer de jouer à mes jeux avec RetroPi sur mon Raspberry Pi !

Un défi !

Je termine cet article par un rêve, et un défi pour vous. Les premiers ordinateurs n’avaient pas d’écran, et le résultat et le texte étaient imprimés sur du papier ; certains jouaient à Adventure comme ça dans les années 1970. Mon rêve serait d’avoir un système similaire, en couplant un Raspberry Pi avec une imprimante thermique (celles qui impriment les tickets de caisse) ; il y a un tutoriel pour faire quelque chose de similaire sur Internet. Je pense que l’on peut prendre un Raspberry Pi (modèle 3 avec WiFi par exemple), y faire tourner une Z-Machine qui donne le texte sur la sortie usuelle (avec les accents…), puis rerouter la sortie vers l’imprimante thermique pour que ça soit imprimé immédiatement. La façon de communiquer avec le Raspberry Pi est à préciser : par Bluetooth, par Twitter,  par une application spéciale, en envoyant un courriel, n’importe. J’annonce que je suis prêt à offrir un prix, disons de 50 € pour l’instant, à quiconque me fera un tutoriel avec les bons scripts qui font tout ! (En plus de ce prix, nous publierons le tuto ici, et en parlerons autour de nous — personnellement je pense que ce genre de dispositifs peut intéresser les bibliothécaires et les enseignants !)

À vous !