Cette présentation du jeu TIS-100 appartient à une série consacrée aux jeux intégrant des éléments de programmation dans leur gameplay. Un précédent billet offre une introduction à ce sujet. Le traitement de TIS-100 est prévu en deux parties, la seconde devant paraître ultérieurement. [Update 3 ans 1/2 plus tard : il n’y aura pas de deuxième partie et le titre a été adapté.]
TIS-100 est un objet extrême : il s’agit d’une simulation de programmation sur une machine et un langage qui n’ont jamais existé. L’incorporation de nombreux mécanismes ludiques en font clairement un jeu. Cependant, son propos lui vaut de sembler difficile d’accès. Le site Metacritic n’a pas pu réunir assez de critiques pour lui fournir un score, Gamekult l’a recensé dans sa base sans lui consacrer de test, et Jeuxvideo.com ne s’est même pas donné la peine de remarquer son existence.
[En aparté.] J’ai écrit ce billet sans vouloir discriminer les personnes n’ayant aucune connaissance en programmation. L’article est destiné à toutes et tous, et le jeu est plus accessible qu’il n’y paraît. Si toutefois des passages sont obscurs, avertissez-moi : je les retravaillerai et les rendrai plus accessibles.
«Overwhelmingly positive»
Le jeu est pourtant développé par un studio, Zachtronics, qui a connu quelques succès, tels SpaceChem, Infinifactory ou Infiniminer, l’ancêtre de Minecraft. Un début d’explication se trouve sur Steam, la plateforme de vente et de téléchargement de jeux la plus populaire. Sur la base de 1197 critiques d’utilisateurs et utilisatrices, le jeu s’offre la mention (rare) «Overwhelmingly positive». D’après le site SteamSpy, TIS-100 appartiendrait au 2% de jeux recevant en proportion les meilleures critiques, parmi les milliers de jeux disponibles sur Steam.
En fouillant ces critiques, on détecte un pattern évident. Par exemple, après 36.7 heures de jeu, Daverball écrivait :
«When you’ve spent the entire day programming, this is the perfect game to kick back and relax with some more programming.»
Un peu plus loin dans la folie, 0x80, après 76.6 heures :
«I’m addicted to this game. It’s ruining my life. I resolved not to let myself finish any more puzzles until I optimized all the early puzzles in the V1 folder. I find myself working on this game in notebooks at work. Luckily it looks like I’m just working on something odd possibly related to work, and no one notices. I have the “ideas for tis-100” notebook open on my desk, next to paperwork while doing spreadsheets. I should be fired. If they fire me, I’ll be able to play this game all the time. This is a cry for help.»
Finalement, avec 59.5 heures de jeu, le mot de la fin va à contingent_humanoid :
«If I ever finish the second half of this game, it’s going on my resume.»
Le jeu a ses amateurs et ils sont nombreux. Simplement, ce n’est pas le grand public.
Assembleur 101
Même s’il ne requiert aucune connaissance préalable en programmation, l’austérité de son interface rend TIS-100 inaccessible au candy crusher moyen. Pour une vaste majorité de joueuses et joueurs, si déjà ils venaient à tomber dessus, le charisme de ce jeu leur paraitrait tout à fait nul. Probablement aussi qu’ils n’y verraient pas un jeu. C’est un choix fort de la part des auteurs, sur lequel nous reviendrons.
À ce stade, c’est un défi d’expliquer ce jeu, que je vais tenter de relever au risque de minor spoilers ou de diminuer le plaisir de jeu. Car faire face à cette interface vide pendant les premiers niveaux et aller consulter l’antique mode d’emploi font partie des épreuves à franchir pour déterminer si vous tiendrez plus de cinq minutes face à ces quelques symboles blanc et rouge sur fond noir.
TIS-100 est à mon avis un excellent jeu dont l’interface sobre – un modèle d’efficacité ! – fournit le cadre approprié pour une étude de cas sur le recours à du code dans un jeu. En effet, dans TIS-100, la tâche du joueur est de réaliser une opération, en apparence très simple (additionner, soustraire, comparer, trouver le minimum), à partir de douze processeurs disposés dans une grille de 3 lignes et 4 colonnes. Chacun de ces processeurs peut exécuter jusqu’à 15 opérations et échanger des informations avec ses voisins immédiats.
Pour tenter de situer cette machine dans un contexte plus réel : un utilisateur de Reddit a suggéré que les auteurs du jeu s’étaient inspiré des processeurs nommés transputers. Plus proche de nous, cette mise en réseau de processeurs sous la forme d’une grille me rappelle les logidules.
Le langage utilisé pour programmer les processeurs du jeu est un dérivé simplifié de langage assembleur ne comprenant qu’une quinzaine de fonctions, un langage assembleur étant par exemple le langage de programmation utilisé pour les cartes perforées. En théorie, ceci devrait permettre à une joueuse ou un joueur n’étant pas familier avec la programmation de rapidement commencer à jouer… une fois trouvé comment lancer le premier niveau.
Une fois lancé, le premier niveau décontenance. L’interface est exigeante comme l’était celle de la page de démarrage en noir et blanc, avec cette fois un peu de rouge. Puis, après un moment de concentration, on commence à saisir la logique du niveau. Pour les intéressé-e-s, essayez de résoudre le premier puzzle, présenté dans l’image ci-dessous, avant de passer au paragraphe suivant. Dans le jeu, le manuel est disponible à tout instant, mais il n’est a priori pas nécessaire ici.
En parcourant les premières pages du manuel, on apprend qu’à chaque nouveau tableau correspond un ensemble d’instructions à satisfaire, et qu’une série de fonctions sont à notre disposition pour les réaliser.
Dans le premier niveau du jeu, reproduit ci-dessus, les instructions sont inscrites dans le rectangle en haut à gauche. En dessous, les deux premières colonnes sont les nombres fournis en entrée de la machine. Les colonnes suivantes sont les nombres que l’on doit retrouver à la sortie. Les colonnes vides recevront et évalueront les nombres obtenus en sortie.
En bas, le premier bouton play permet d’avancer d’une instruction à la fois. Le second bouton play permet d’avancer rapidement tout en discernant les opérations de la machine. Ce mode est idéal pour débugger un problème apparaissant assez loin dans l’exécution du programme. Le troisième bouton fera fonctionner le processus en accéléré, tandis qu’à tout moment le premier bouton play peut également servir de bouton “pause”.
À droite de l’image, les douze processeurs, connectés et disposés en grille.
Dans ce premier niveau, des commandes sont déjà inscrites dans la partie gauche. C’est ainsi que se présente l’intégralité du tutoriel de TIS-100. En pressant sur le premier bouton play, le nombre qui apparaît en entrée en haut est transféré dans le processeur situé directement en-dessous par la commande MOV UP, DOWN
, qui signifie que le nombre arrivant en-dessus sera transféré en-dessous. Et ainsi de suite. On comprend bien qu’il va falloir faire de même dans la partie droite du problème. Sans surprise, la machine est capable d’interpréter LEFT
et RIGHT
pour représenter les entrées et sorties à gauche et à droite respectivement.
La figure suivante présente une solution du premier niveau.
Tout au long du jeu, le programmeur en herbe est guidé de manière subtile, la difficulté augmentant très progressivement. Il faut aussi rapidement s’habituer à consulter et comprendre le mode d’emploi. Sur quatorze pages, celui-ci contient la moitié de l’aspect narratif du jeu ainsi que la présentation des registres et fonctions disponibles dans le jeu. Probablement pour insister sur l’aspect DIY : quand on invoque le mode d’emploi, un simple pdf s’ouvre sur le bureau, ce qui ne manquera de décontenancer les joueuses et joueurs de AAA.
Il semble tout d’abord incompréhensible, puis s’avère laborieux à utiliser dans son format photocopie de photocopie sans reconnaissance de caractères (voir l’image ci-dessus). Difficile de ne pas ressentir un peu de nostalgie à la vision de ce document, quand on a connu l’âge d’or des modes d’emploi papier. Il s’agit même d’un argument de vente pour les auteurs, à voir leur site web :
«Print and explore the TIS-100 reference manual, which details the inner-workings of the TIS-100 while evoking the aesthetics of a 1980’s computer manual!»
À retrouver dans la seconde partie
Un peu emporté par mon sujet, je dois terminer ici cette première partie.
Dans la suite de ce billet, je commencerai par détailler les mécanismes du jeu : comment résoudre un puzzle, comment les éléments de gameplay sont peu à peu introduits, et comment fonctionne le système de scoring, qui invite à optimiser ses programmes.
Je passerai ensuite en revue la manière dont le code est intégré aux mécaniques de jeu et à la narration dans l’optique de comparer plus tard ce traitement avec celui d’autres jeux.
En bonus, pour patienter jusqu’au prochain billet, Pong programmé dans TIS-100 dans le gif ci-dessous (source).
L’image d’illustration est tirée du matériel promotionnel du jeu.
Dommage que le jeu ne soit pas disponible sur Android ! En tout cas merci pour cette revue, si j’ai un jour entre les mains un Ipad je testerai TIS-100 sans hésitation.
Merci pour votre commentaire.
Le jeu est aussi disponible pour Linux, Mac et Windows, et un ordinateur sera beaucoup plus agréable pour y jouer 🙂