Quixe (et Lieux Communs)

Quixe 2.1.0 est sorti : on peut maintenant jouer à des jeux Glulx avec des images en ligne !! Par contre, les sons ne sont toujours pas supportés.

Je l’ai d’ores et déjà mis sur mon site pour faire joujou avec. (Otto, si tu as un peu de temps, tu pourrais remplacer le Quixe que tu as mis il y a quelques mois sur le site par celui-là ?)

Si le jeu a des grosses images il vaut mieux faire un prétraitement pour décompresser les images ; mais zarf a inclus un script qui le fait alors tout va bien. Donc la marche à suivre si vous avez un jeu avec des grosses images :

  • Téléchargez le tar.gz et décompressez-le dans un dossier vide sur votre serveur
  • Allez dans le répertoire et lancez le script Python
python tools/game2js.py --giload YOURGAME.ULX > stories/glulxercise.ulx.js 

en remplaçant YOURGAME.ULX par le nom de votre jeu

  • Ouvrez play.html pour jouer au jeu !

Et bien sûr, vous pouvez toujours jouer en remote, à base de « /répertoireQuixe/play-remote.html?story=URLDUFICHIER.ULX?enter=Play+it! ». (Sauf que si vous avez des images, ça ramera, ça plantera, ça fera des erreurs qu’il y a plus de place sur la pile, donc vaut mieux lancer le petit script!)

J’ai essayé pour Lieux Communs… et ça marche presque ^^ Il y a un problème parce qu’on a un bug dans la façon dont le jeu fait le son (le code est copié de chez JB, et Ekphrasis a le même problème - encore pire en fait, il se freeze après l’écran titre ^^)

    if (modesonore == 1) {
        if (gg_musicchan) {} 
        else {
        gg_musicchan = glk_schannel_create(0); }
        glk_schannel_play_ext(gg_musicchan, k, 1, 0); 
    } 

Le jeu ne teste pas si l’interpréteur supporte le son !! Du coup il demande à Quixe de jouer le son, Quixe dit error et freeze. (Si vous me demandez mon avis, le fait de devoir tester si le terp supporte le son à l’intérieur du code est une erreur monstre de conception ; vaudrait mieux des soft/silent fail chez les interpréteurs…)

Bref, le fix est tout con :

    if (glk_gestalt(gestalt_Sound, 0) && modesonore == 1) {
        if (gg_musicchan) {} 
        else {
        gg_musicchan = glk_schannel_create(0); }
        glk_schannel_play_ext(gg_musicchan, k, 1, 0); 
    } 

Sauf que : j’ai perdu mes identifiants SVN, et de toute façon je ne sais pas où sont les images et les sons correspondants (pas sur le dépôt…). Est-ce que quelqu’un sait ? Et est-ce que ce même quelqu’un pourrait nous rendre un fier service et rajouter ce « glk_gestalt » dans la routine « [ Joue k ; », puis recompiler et nous dire ?

Parce que si on change juste ce petit détail, on a une version de Lieux Communs qui est jouable dans un navigateur, on peut en faire la pub un peu partout en espérant ramener des lovecraftiens, etc. etc. Bref ça serait cool !
(Je dis pas qu’il faille bêta-tester/corriger Lieux Communs, mais pour 10 minutes de boulot on a un jeu qui en jette jouable en ligne :smiley: )

Et pour ceux qui me rétorquent qu’on peut jouer en ligne avec l’applet java, mon navigateur (et je pense pas être le seul) dit que la version de l’applet est trop vieille et qu’il lui fait pas confiance (parce que Java est bourré de bugs/failles de sécurité, donc pour éviter que des petits malins s’en servent pour hacker ils désactivent).

(Et je vais demander à JB si il se sent le courage de faire pareil ^^)

Re !

Bon, ça n’a pas pris 10 minutes… grmbl les subtilités du blorb, les incompatibilités d’outils, etc., etc.

La bonne nouvelle, c’est que Lieux Communs est désormais jouable dans un navigateur :smiley: :smiley: :smiley:

Attention par contre, il manque la musique dans le nouveau fichier .blb (mais pas grave pour Quixe) ; j’ai pas trouvé comment faire pour que les outils reconnaissent les fichiers .ogg… quelqu’un se souvient comment on fait ?

Si un jour vous vous posez la question de comment j’ai fait pour extraire les ressources puis tout recompiler, la recette de cuisine est en spoilers
[spoiler]Nécessite : les outils de L. Ross Raszewski (surtout bres), gblorb.ulx, le fichier glulxe du jeu, son code source.
Blorb c’est le format pour paqueter des images et du son avec un jeu Glulx : c’est du paquetage, pas de la compilation, alors les images et les sons sont récupérables sans souci. Par contre, si vous n’avez plus le code source, c’est perdu - la dé-compilation ne marche jamais à 100% donc vous n’arriverez jamais à retrouver le code d’origine à partir du fichier de jeu.

Tout d’abord, extraire les fichiers du Blorb avec la fonction « extract » de gblorb.ulx. (Laisser gblorb.ulx ouvert)

Ensuite, il faut ré-écrire le fichier .bli, dont le jeu a besoin pour compiler. Pour cela, écrire le fichier .res. Un fichier .res est de la forme
CODE foo.z5
PICTURE White_House C:\MyPic.png
SOUND Theme_Song C:\Music\theme.mod
SOUND Bang C:\Music\Bang.aif
PICTURE Plover_Egg C:\Pictures\Nature\plover.jpg

Donc il faut écrire des lignes du genre PICTURE . Pour Lieux Communs c’était genre « PICTURE res3 PIC3 ». Cette étape est super relou.

Ensuite, lancer bres, l’outil de L.R.R., en lui donnant le nom de votre fichier .res : si c’est monjeu.res, vous tapez en ligne de commande « bres monjeu ». Vous obtenez un .bli et un .blc.

Le .bli c’est celui dont vous avez besoin dans le code ! Modifiez l’include pour que ça marche. Puis lancez le compilo (en n’oubliant pas le -G et tout) et vous obtenez un fichier, genre cpb.ulx pour LieuxCommuns.

La dernière étape est super relou aussi : il faut réécrire le fichier SPEC que gblorb.ulx a craché lors du dépaquetage afin que les numéros des ressources correspondent aux numéros attribués par bres ; donc ouvrez le .bli et SPEC en parallèle et modifiez SPEC en conséquence.
Toute dernière étape : remplacez STORY0 par votre fichier .ulx que le compilo vous a donné (gardez le nom STORY0, c’est plus simple).

Puis lancez gblorb.ulx, faites « load » et donnez-lui SPEC, et ensuite « create » vous donne le bon fichier ![/spoiler]
Si quelqu’un trouve un moyen d’automatiser ça avec un script ou de faire plus simple, qu’il me le dise :slight_smile:

Je vais essayer de nettoyer tout ça et de faire un repo propre sur BitBucket, pour avoir au moins un repo qui compile Lieux Communs avec toutes les images et tout… On sait jamais x)

Ah oui et du coup, ça serait peut-être mieux de l’avoir sur le site (plutôt que sur le mien). Il suffit juste de télécharger ce fichier et de le décompresser dans un répertoire sur le site. Dites-moi si vous le faites, que j’en fasse la pub :slight_smile:

EDIT: merci Stormi pour le signalement d’un bug - il fallait aussi rajouter un test dans Musique (cpb.inf) et dans les verbes de musique (cpb_verbes.inf). Normalement, là, ça devrait marcher :smiley:

J’ai bataillé un peu plus pour mettre en place le jeu en mode « déblorbé », c’est à dire sans avoir besoin de télécharger les 14Mo d’un coup ; le jeu télécharge maintenant les images au fur et à mesure. (Ca prend genre une demi-seconde la première fois qu’on charge l’image, c’est tout - plutôt que de faire attendre le joueur quelques minutes au tout début…)

Le jeu est toujours là, et le .zip pour le mettre sur le site ici.

Bonne nouvelle aussi : j’ai réussi à faire tourner Ekphrasis :slight_smile:

J’avoue que ça rend plutôt bien !

On peut aussi avoir des instructions pour le mode déblorbé ? :slight_smile:

Même si j’avoue que je préfère le tourner en local (pas de latence, plus de contrôle sur la typographie).

Ah oui, pardon ! (Je les ai mises sur intfiction mais j’ai oublié de les mettre ici.)

  • télécharger blorbtool.py (site de zarf) et le jeu blorbé. On va dire que blorbtool.py est à la racine, et le jeu blorbé (yourgame.blb) dans ‹ stories ›
  • faire un répertoire vide (genre stories/yourgame/)
  • lancer la commande
python blorbtool.py stories/yourgame.blb giload stories/yourgame stories/yourgame/

ce qui aura pour effet de dépaqueter les images, générer un fichier .ulx.js (nécessaire pour play.html), et remplir le ficher « resourcemap.js » qui dit à Quixe où sont les images (et leur numéro et leur taille).

  • modifier play.html : remplacer
    <script type="text/javascript">
    game_options = {
      use_query_story: false,
      set_page_title: true
    };
    </script>

    <script src="stories/glulxercise.ulx.js" type="text/javascript"></script>

par

    <script src="stories/yourgame/resourcemap.js" type="text/javascript"></script>

    <script type="text/javascript">
    game_options = {
      image_info_map: 'StaticImageInfo',  // image data is here, not in blorb
      use_query_story: false,
      set_page_title: true
    };
    </script>

    <script src="stories/yourgame/game.ulx.js" type="text/javascript"></script>
  • y’a plus qu’à lancer play.html!

Que veux-tu dire par « en local », genre « play-remote.html?story=truc&enter=Play it! » ? Ou « python tools/game2js.py » ? Et comment tu modifies la typographie ?
C’est vrai qu’il n’y a aucune latence pour les images si tout est chargé dans le browser au début, mais si le fichier est gros ça marchera pas. Ekphrasis n’a jamais réussi à loader, et Lieux Communs prenait une vingtaine de secondes sur un ordi avec la fibre… (Je sais pas ce qui est préférable, avoir un petit delay de temps en temps ou faire attendre le joueur au début ?)

Pardon, quand je disais en local, je voulais dire : je télécharge le fichier .blb ou .gblorb, puis je le lance dans Zoom ou Gargoyle. Là je peux changer la police, la taille, etc.

Aaah, pardon ! ^^
Oui, je préfère moi aussi, j’avoue - mais qui sait, c’est user-friendly alors ça rameutera peut-être des nouveaux joueurs :slight_smile:

Oui c’est sûr. J’ai quelques gros projets de FI (peut-être qu’un jour je pourrai les commencer…), alors je garde un œil sur ça, parce que ça reste quand même plus facile pour l’utilisateur.

Manque plus que les sons (sinon pour Noir d’encre, c’est pas la peine) !

bravo, ça rend bien (sur grand écran). À l’époque j’avais (on avait ?) regardé pour faire une version de lieux communs avec les images qui se redimensionnent selon la taille d’écran, mais je ne me souviens plus si ça fonctionnait ou si c’était juste une vaine tentative.

Dommage pour les musiques (le compositeur va sans doute s’en offusquer :wink: ) mais ça viendra peut-être avec une prochaine version de quixe.

Pour le coup du plantage ça doit être parce que c’est du inform 6, avec Inform 7 ça indique juste qu’il y a de la musique à cet emplacement, mais ça a été prévu de base. Après, c’est vrai que ça aurait pu être amélioré.

J’ai mis quelques jeux de notre site avec quixe (au moins celui-ci : ifiction.free.fr/quixe/play-remo … er=Play+it! mais ça charge tout sans utiliser l’astuce qui va bien présentée plus haut)

Merci!
Oui, pour le redimensionnement des images, il me semble que la plupart du code est en commentaires (gwin_image_draw_auto et tout), alors je crois pas que c’était implanté. Dommage :confused: c’est à peine trop grand pour mon écran, mais pas de beaucoup.

Dommage en effet pour les musiques, ça mettait une ambiance :slight_smile: Mais je sais pas à quel point c’est une priorité pour Zarf (déjà, ça n’est pas lui qui a écrit le code pour les graphismes, alors pour les sons, dur à dire si ça viendra bientôt ou pas…) Ca serait bien, qu’on puisse avoir Lieux Communs, Les Heures du Vent, Ekphrasis, Noir d’Encre, et les autres, à 100% de leur contenu ! :slight_smile:

Cool, merci pour les jeux en Quixe sur notre site :slight_smile: (Pour Lieux Communs, voilà le zip avec tout bien fait et décompressé.)

http://eblong.com/zarf/glulx/quixe/quixe/play-remote-onecol.html?story=stories/Advent.ulx.js
On peut utiliser Quixe avec du code I6 !? Ça rend vraiment bien, ça semble plus intéressant que Parchment.

Bon, reste plus qu’à déchiffrer tout ça…

udpate
Ok, facile… ça fonctionne.

bien sûr, Quixe = interpréteur glulx, parchment = interpréteur zcode (je préfère parchment perso au niveau du rendu)

Je n’ai pas compris pourquoi il évoque Inform 7.

Sur une colonne, c’est plutôt sympathique ; et pour les jeux de Mule, il me semble que Quixe supporte les temporisations. J’aurais bien aimé obtenir le même rendu — sur une colonne avec Header, Footer (figé en bas de l’écran) et colonnes à droite et à gauche, avec Parchement mais je n’y suis pas arrivé.

Je crois que c’est parce que si tu écris « Release along with interpreter » pour un jeu I7, l’IDE te génère automatiquement ce qu’il faut pour avoir un .html avec Quixe qui lit ton jeu.

Oh tiens, je n’y avais pas pensé : je pourrais recompiler mes jeux avec le flag -G pour avoir des .ulx et les mettre dans Quixe, pour que les gens puissent y jouer sur mon site. Ah oui mais le problème alors c’est les équivalents de gras/italique/police non-proportionnelle, qui marchent assez mal sous Glulx… en tout cas mon extension EffetsDeTexte a des petits ratés, et Glulx est moins flexible que la Z-Machine pour ça. Mmmh… à réfléchir :slight_smile:

Je ne sais pas si cela peut répondre à tes besoins, mais concernant ta fonction Maj(c), il y a dans parserm.h des fonctions LowerCase() et UpperCase() :[code]#Ifdef TARGET_ZCODE;

[ LowerCase c; ! for ZSCII matching ISO 8859-1
switch (c) {
‹ A › to ‹ Z ›: c = c + 32;
202, 204, 212, 214, 221: c–;
217, 218: c = c - 2;
158 to 160, 167, 168, 208 to 210: c = c - 3;
186 to 190, 196 to 200: c = c - 5 ;
175 to 180: c = c - 6;
}
return c;
];

[ UpperCase c; ! for ZSCII matching ISO 8859-1
switch (c) {
‹ a › to ‹ z ›: c = c - 32;
201, 203, 211, 213, 220: c++;
215, 216: c = c + 2;
155 to 157, 164, 165, 205 to 207: c = c + 3;
181 to 185, 191 to 195: c = c + 5 ;
169 to 174: c = c + 6;
}
return c;
];

#Ifnot; ! TARGET_GLULX

[ LowerCase c; return glk($00A0, c); ];
[ UpperCase c; return glk($00A1, c); ];

#Endif; ! TARGET_
[/code]J’avais signalé un bogue à DavidG, donc celles-là, corrigées, sont extraites de la 6/12 (déplacées dans english.h).

Oh, je savais pas ! J’essaierai ça ce soir. Merci !

Rien à voir, mais pour ton bogue sur Mantis avec Abbreviate, sous Linux j’obtiens :Inform 6.33N (20th August 2014) *** stack smashing detected ***: ./inform6 terminated Abandon (core dumped)