WHAT NOW? > Créer des jeux d'aventure avec JACL 2.8.0

Posté par . Modéré par Benoît Sibaud.
Tags :
14
23
août
2010
Jeu
JACL (JACL Adventure Creation Language) est un système de création de jeux d'aventure textuels, développé par Stuart Allen depuis 1996.

Il vient de sortir en version 2.8.0.

Ses principales caractéristiques sont qu'il est :
  • Francisé : vous pouvez créer des jeux d'aventure, ou autre, en langue française ;
  • Entièrement libre (gpl v2), contrairement aux ténors des systèmes équivalents (Inform, Tads) ;
  • Multiplateforme : Linux, Haiku, MSWindows, Nintendo DS, et il devrait être possible de le compiler sans trop de problème sous Mac OS X et BSD ;
  • Interprété : pas besoin de compilation, on peut même éditer son code et tester certaines modifications sans redémarrer le jeu ;
  • Jouable en ligne via un interpréteur utilisant Apache et FastCGI, ou bien le serveur web intégré, en transformant la machine en serveur de jeux, ce qui augmente encore les possibilités d'audience puisqu'il suffit d'un navigateur internet pour y accéder. En outre, l'interface web possède des facilites pour le joueur : rose des vents avec les sorties possibles, objets et personnages présents dans les lieux, raccourcis vers certains verbes courants ;
  • Livré avec un bon manuel bien complet.
En outre, il y a la prise en charge de JACL dans le multi-interpréteur de jeux gargoyle, et il est également possible d'y jouer en version console pour les adeptes de la ligne de commande (grâce à l'interface de programmation Glk qui permet d'unifier les appels d'entrées et sorties pour les systèmes de jeux textuels)

Le système de création reste assez simple, tout en se révélant puissant pour modéliser un monde avec de nombreux paramètres et détails. Par exemple, on peut définir des objets avec une masse, une contenance, et JACL permettra de gérer tout cela si on fait interagir ces objets ensemble par rapport à leur encombrement.

Le développeur principal est très réactif pour faire évoluer son langage, et il reste ouvert à toutes les suggestions. Il a ainsi réalisé de nombreux ajustements pour me permettre de porter les bibliothèques de jeu vers le français.

Une version multi-joueurs est en préparation (dans la branche multiplayer sur le SVN).

Pour l'anecdote, le "WHAT NOW?" du titre fait référence à l'invite de commande de certains des premiers jeux textuels, sortis dans les années 1980.
  • # l'exemple de jeu en français

    Posté par . Évalué à 4.

    Je n'ai pas précisé dans la dépêche, mais pour le jeu (au singulier d'ailleurs, puisqu'il n'y en a qu'un seul) en français, le but était avant tout de créer un exemple permettant de tester la plupart des actions réalisables avec ce système de jeu. Toutes les actions ne mènent pas forcément à une réponse prévue dans la petite histoire, mais le système sous-jacent, géré par les bibliothèques francophones, comprendra le verbe et sortira une réponse normalement cohérente.
    Le cheminement complet (la solution), se trouve ici, si vous voulez tester :

    http://code.google.com/p/jacl/source/browse/trunk/games/fihn(...)

    D'autre part, j'ai codé le même jeu, mais cette fois-ci en utilisant le système "concurrent" Inform 7, auquel vous pouvez également jouer en ligne ici :
    http://ifiction.free.fr/parchment/parchment.html?story=http:(...)

    Le rendu devrait être relativement proche d'une version à l'autre.

    Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

  • # Excellent

    Posté par . Évalué à 3.

    Carrément coolos ... J'ai un projet de moteur comme ça dans mes cartons depuis quelques années ...

    Mais là, il est carrément fini. Vais aller tester ça moi...
    • [^] # Re: Excellent

      Posté par . Évalué à 2.

      Oui, très bien! Ca va changer des formats classiques Inform et Tads! Y a-t-il une version pour Android?
      • [^] # Re: Excellent

        Posté par . Évalué à 2.

        pour Android, je ne crois pas, mais vu la vitesse (apparente) à laquelle ça a été porté sur DS, je pense que cela serait envisageable (il faudrait pouvoir utiliser le compilateur C comme il avait été fait pour scummvm). Après, peut-être qu'il est plus pratique de jouer sur android depuis l'interface web, mais ça nécessite une connexion permanente, et un (vrai) serveur (pas un simple hébergement mutualisé) de l'autre côté.

        Pour le commentaire au dessus, on trouve effectivement beaucoup de créateurs de jeux qui souhaitent créer leur propre moteur, mais c'est un travail énorme, d'ailleurs il faut voir que la plupart des systèmes, que cela soit Inform ou Jacl, mettent de longues années avant d'arriver à maturité. En lisant l'histoire de Jacl, on se rend compte à quel point c'est de l'investissement personnel, mais après il y a le plaisir du développment. Si c'est juste pour faire un jeu, autant prendre un système existant...

        Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

  • # Et comment est le langage de programmation ?

    Posté par . Évalué à 1.

    La dépêche est intéressante, mais si on s'intéresse à ces systèmes en tant que langages de programmation, on reste un peu sur sa faim.

    Ce système a-t-il des concepts ou des fonctionnalités spécifiques qui rendent plus faciles et agréables l'écriture des jeux ?
    Quelles sont les différences principales avec Inform ?
    • [^] # Re: Et comment est le langage de programmation ?

      Posté par . Évalué à 2.

      comme d'autres langages du même type, il permet de faire également d'autres choses, mais bien entendu c'est plus centré sur la manipulation d'un monde virtuellement manipulable, que pour créer un logiciel de calcul formel.

      Inform 6 est plus généraliste que JACL (d'après ce que j'ai pu voir), mais les 2 peuvent manipuler des boucles, gérer des exceptions, faire de l'arithmétique...

      Un objet avec jacl se construira de cette sorte :


      object armoire: armoire cupboard (et autres synonymes)
      has CONTAINER FEMALE LOCKED CLOSED CLOSABLE
      short une "armoire"
      definite l'
      long "Une armoire se trouve contre le mur opposé
      à l'entrée de la cuisine.^"
      quantity 1
      capacity 20
      mass 120


      et pour déverrouiller cette armoire :

      {unlock_with_clef
      write "Vous déverrouillez l'armoire avec votre clef.^"
      ensure armoire hasnt LOCKED
      }


      Déjà qu'Inform n'est pas très prisé par les programmeurs habitués à du C, d'après les remarques que j'ai pu lire, je pense que cela sera encore pire pour JACL. Mais en tant que système pour créer des jeux textuels, il me semble bien efficace. C'est plus facile de créer de nouveaux verbes rapidement, notamment, et il me semble de plus haut niveau qu'Inform6, et avec plus de fonctionnalités de base (gestion du poids dans l'inventaire par exemple)

      Et comme on peut l'interfacer à un serveur web, on peut même imaginer d'autres applications possibles. Bon, c'est pas du ruby on rail, mais par exemple si on veut afficher une page qui appelle des sites internet selon les objets qu'on manipule dans le jeu, on peut écrire ça :



      location nest

      {+intro
      write "You are in a confortable nest, with a big book in front of you, which you can consult about topics or simply randomly read.^You can also search for informations in the tiny screen under your right wing."
      }

      object book: book screen


      object i
      player

      grammar read random page >wikipedia_random
      grammar read book >wikipedia_random

      grammar search for $string >google
      grammar search $string >google

      grammar consult about $string >wikipedia
      grammar consult $string >wikipedia


      grammar tweet $string >tweet2

      {+wikipedia_random
      write "You open the book and read:^^<iframe src=~http://en.wikipedia.org/w/index.php?title=Special:Random&(...) width=~99%~ height=~300~>^^"
      }

      {+wikipedia
      write "You open the book and consult for " $string[0] ":^^<iframe src=~http://en.wikipedia.org/w/index.php?title=" $string[0] "&printable=yes~ width=~99%~ height=~300~>^^"
      }


      {+google
      write "You search for " $string[0] "^^<iframe src=~http://www.google.com/search?q="$string[0]"~ width=~99%~ height=~300~>^^"
      }


      constant title_image "bird.png"
      constant footer_image "none"
      constant header_colour "#535F38"
      constant linkbar_colour "#748768"
      constant maintext_colour "#D2DDD0"

      #include "verbs.library"



      Si vous téléchargez jacl sur le site plus haut, vous copiez ce code dans un fichier test.jacl, et démarrez le serveur avec cgijacl test.jacl et vous pouvez voir le résultat sur http://localhost:8080/

      Il y a aussi des comparaisons de code entre ce système et d'autres, en partant sur un jeu similaire, ici :
      http://www.firthworks.com/roger/cloak/jacl/index.html
      http://www.firthworks.com/roger/cloak/index.html

      Pour en revenir à Inform6, certains ont créé un tetris, un jeu d'échec, un jeu d'arcade dans ce langage :

      http://wurb.com/if/genre/43
      http://ifwiki.org/index.php/ZRacer

      (malheureusement on n'a pas le code source)

      Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

      • [^] # Re: Et comment est le langage de programmation ?

        Posté par . Évalué à 2.

        Ça ressemble quand même vachement à du code orienté objet, même si c'est plus spécifique.

        Y'a pas moyen d'utiliser Python pour ça ?

        Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

        • [^] # Re: Et comment est le langage de programmation ?

          Posté par . Évalué à 2.

          Si, c'est ce qui est fait par [PAWS], un des autres systèmes de la page qui les recense.

          [PAWS] http://www.firthworks.com/roger/cloak/paws/index.html

          J'ai regardé tous les systèmes principaux et secondaires, et Inform 7 est celui qui m'a le plus plu. Les autres ressemblent à des versions mal conçues de langages de programmation déjà existant, avec du sucre syntaxique déjà ajouté par dessus.

          Au contraire, Inform 7 a une approche vraiment orignale, basée sur un rapprochement entre le code du système et la langue naturel (ce qui est nettement plus osé que les autres où c'est le joueur qui utilise la langue naturelle, et pas le développeur). Ça a de nombreux défauts (« guess the syntax ») mais c'est une expérience intéressante.

          Je suis resté un peu sur ma faim après avoir regardé des descriptions d'Inform 7 (favardin > je l'ai d'ailleurs découvert dans ton tuto), mais il se trouve que mon site préféré au sujet des langages de programmation, Lambda The Ultimate, lui a dédié une [dépêche/discussion], que j'ai trouvé très intéressante.

          Inform 7: A relational DSL for interactive fiction with natural language syntax : http://lambda-the-ultimate.org/node/1554
          • [^] # Re: Et comment est le langage de programmation ?

            Posté par . Évalué à 2.

            Effectivement, j'avais un peu oublié PAWS. C'est en python, et cela pourrait satisfaire les programmeurs les plus aguerris, mais ça me semble un peu compliqué.

            Pour en revenir à JACL ou Inform, ils ont aussi l'avantage d'utiliser GLK, qui est une API permettant de simplifier la création d'interpréteurs tiers. Ainsi, une fois le programme codé, si une nouvelle interface GLK vient sur le marché avec beaucoup de fonctionnalités intéressantes, il suffit de l'appeler dans le système de jeu et cela sera normalement compatible. Ainsi il existe une implémentation glk supportant l'unicode (glktermw), une utilisant des fonctions avancées d'affichage de polices (garglk, développé initialement par quelqu'un de chez ghostscript), une très simple affichant juste le strict nécessaire dans une console (cheapglk). Ce qui permet de porter relativement facilement des interpréteurs et leur affichage sur n'importe quelle plateforme compilant du C.

            Pour le "guess the syntax" d'Inform 7, c'est un reproche que l'on entend souvent, mais ce n'est pas parce que c'est indiqué comme étant du "langage naturel", car ça se lit comme de l'anglais, que c'est censé comprendre tout le code qu'on lui tape : ce n'est pas un moteur de recherche google, ni un analyseur syntaxique qui va compiler en fonction des lubies du programmeur : bien qu'il existe quelques variantes possible, la syntaxe est relativement stricte. Ainsi si on veut créer un vase dans la cuisine, on ne tapera pas "create a vase in the kitchen", ni "I want a vase in the kitchen" et encore moins "will you put this fuc*** vase in the kitchen, dammit?!", mais "Kitchen is a room. Vase is in kitchen.".

            Un exemple tiré du manuel :

            "East of the Garden is the Gazebo. Above is the Treehouse. A billiards table is in the Gazebo. On it is a trophy cup. A starting pistol is in the cup."

            à partir de ça, Inform comprendra tout ceci :

            Garden, Gazebo, Treehouse = un endroit
            billiards table = un support
            cup = un contenant
            starting pistol = une chose
            East, up (implied by "above") = des directions

            C'est simple, élégant, et assimilable par des gens qui ne sont pas forcément à l'aise avec de la programmation impérative.

            Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

            • [^] # Re: Et comment est le langage de programmation ?

              Posté par . Évalué à 1.

              Pour résumer, ton argumentation est « Bien que la syntaxe acceptée soit un sous-ensemble du langage naturel, elle obéit à des règles strictes comme dans tous les autres langages. »

              C'est vrai, mais il y a deux "Mais".

              Mais, d'une part, une partie des réactions des gens vient visiblement du fait que la syntaxe stricte, sur certains points, est mal spécifiée et n'est pas rigoureusement décrite de façon exhaustive quelque part. On peut considérer que c'est indépendant de la question des langages naturels (d'ailleurs il y a d'autres langages de programmation mal spécifiés et définis), mais le risque c'est que l'aspect "naturel" justement laisse penser qu'il est facile de découvrir soi-même la syntaxe en s'exprimant naturellement, et qu'une spécification rigoureuse n'est donc pas forcément nécessaire.


              Mais, d'autre part, le fait d'utiliser un sous-ensemble de la langue naturelle encourage les gens à programmer dans ce langage comme ils parlent dans leur langue naturelle. Comme une langue naturelle est très tolérante (ou plutôt, les interlocuteurs sont très tolérants) à des petits changements qui préservent le sens global de la phrase, on s'attend à ce que ce langage fonctionne de la même façon. Du coup, le programmeur aura un peu plus tendance à se laisser aller, et sera donc plus souvent contrarié par des erreurs.

              Je peux présenter ça d'une autre manière : quand on met en avant le rapprochement de la langue naturelle et du langage utilisé pour les programme Inform, on se dit : « c'est chouette, maintenant mes programmes vont être en langue naturelle, donc avec un aspect plus littéraire, plus fluide et agréable à lire, et plus proche de l'interaction qu'ils auront avec l'utilisateur ». C'est le point de vue de la personne qui va lire le code. Maintenant, une personne qui écrit du code, il faut qu'elle continue à se dire « attention, c'est un langage avec une grammaire stricte, il faut que je sois précis et rigoureux, et que j'agence mes mots exactement comme il faut. ». Mais comme la plupart des gens lisent le programme en même temps qu'ils l'écrivent, et ont des boucles d'interaction lecture-écriture-lecture complexes où ce qui est (re)lu influence ce qui va être écrit, la superposition des deux états esprits ne marche pas forcément très bien, et donne lieu à des expériences frustrantes.
              • [^] # Re: Et comment est le langage de programmation ?

                Posté par . Évalué à 2.

                En fait il y a eu quelques articles sur inform 7 à sa sortie, qui ne sont plus forcément d'actualité maintenant. Au niveau de la syntaxe, il y a un document qui reprend de façon exhaustive celle-ci :

                http://inform7.com/learn/documents/I7_syntax.txt

                Ensuite, beaucoup de critiques de la syntaxe sont souvent par des gens qui n'ont jamais réellement codé un jeu complet avec, ou qui étaient en train de débuter, ou qui ont simplement des préjugés (genre c'est pas comme du python ou du C, donc c'est forcément pas aussi bien ou aussi logique). Pour l'avoir utilisé sur plusieurs projets, je peux affirmer (pour mon cas en tout cas), qu'une fois qu'on a bien assimilé la syntaxe, elle ressort facilement lorsqu'on en a besoin, et on ne se dit pas qu'il faut faire attention à tout moment. En plus l'IDE est bien fait, et arrive à détecter les erreurs de syntaxe et proposer la syntaxe correcte par rapport à des cas précis.

                Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.