Nouvelle extension: EffetsDeTexte

J’ai enfin fini mon travail sur une extension I6, EffetsDeTexte, une bibliothèque pour réaliser des effets de texte divers et variés. Il existe déjà quelques extensions pour faire des effets de texte en I6, mais elles sont plutôt incomplètes (ou se recouvrent) ; je voulais une bibliothèque qui fasse tout correctement.

Les features :

  • Biplateforme Z-Code et Glulx
  • Grande variété d’effets : gras/italique/non-proportionnel/inversé et couleurs + toutes les combinaisons possibles pour ces réglages (pour tous ceux qui rêvent d’écrire en gras italique vert) ; affichage centré (approximatif) ; affichage progressif ; affichage ‹ touche par touche › (afficher une nouvelle lettre à chaque fois que le joueur appuie sur une touche - si vous voulez simuler une ligne de commande) ; affichage après attente ou appui sur une touche, et affichage après attente mais pas après appui sur une touche.
  • Teste si les effets recherchés sont pris en charge par l’interpréteur ; très important car Parchment ne prend pas en charge les effets temporels (c’est des ‹ appuyez sur une touche ›, à la place), ce qui m’embêtait pour Homeland Security mais surtout rendait Life On Mars absolument injouable. Du coup, vous avez l’assurance que tout le monde pourra jouer à votre jeu correctement, même si certains effets manqueront (à vous par contre d’afficher un message « votre terp ne prend pas les effets temporels en compte, ce qui peut nuire à votre expérience » - utilisez la fonction IsTimeSupported de l’extension pour le test).

Les bugs / trucs qui ne marchent pas et ne marcheront jamais :

  • Affichage centré : vu qu’on n’a pas accès à la police de caractères utilisée par l’interpréteur, l’affichage centré est condamné à être imparfait (pas moyen de savoir à quoi ressemblera le résultat). Par contre, si vous affichez un texte centré en police monospace/non-proportionnelle, ça sera parfait.
  • Couleurs sous Glulx : Glulx est en fait très mauvais pour l’affichage de couleurs, et pour les styles de texte en général : il n’y a que 11 styles (dont seulement 2 pour la customisation), et il faut les définir au tout début du jeu (avant même Initialise()). Donc impossible de faire quelque chose de dynamique (on aurait pu penser à faire un truc du genre « sauvegarder le style défini par l’auteur, changer en ce qu’on veut et l’utiliser pour afficher le truc, puis revenir au style qui était là avant » mais non, ça doit être défini avant Initialise), et il faut laisser les 2 autres styles pour l’auteur. Donc c’est une limitation fondamentale de Glulx (!) et ma bibliothèque ne permet pas d’y échapper.
  • Gras/italique sous Glulx : Glulx ne définit pas gras, italique ou souligné ou autre, mais « emphasized » (mise en avant) : à l’interpréteur de déterminer si ça sera du gras ou de l’italique. (Le raisonnement, de ce que j’ai pu voir, c’est « il faut laisser le choix aux gens, aux interpréteurs et aux joueurs » - inutile de dire que je suis totalement contre, parce que faire un système où l’auteur ne peut pas écrire ce qu’il veut parce qu’il faut laisser le choix aux gens de changer les italiques en gras…) Du coup, c’est implanté en trichant : les interpréteurs que j’ai pu voir utilisent le gras pour « emphasized » et l’italique pour « note », alors c’est ça qui est utilisé - donc, aucune garantie que ça sera vraiment de l’italique ou quoi, mais Glulx ne permet pas d’avoir ces garanties.
  • Karaoké : je voulais faire quelque chose qui permet d’afficher des paroles de chanson progressivement, selon un rythme/tempo, comme au karaoké, mais je n’ai pas eu le temps (en fait, la conception du truc pour qu’il soit simple à utiliser est compliquée - je pense faire quelque chose comme ‹ un symbole pour chaque temps dans le string, et un entier pour le tempo ›). Ca sera fait, je pense, vu que Homeland Security et Life On Mars simulent un effet similaire, donc j’ai tout intérêt à automatiser la chose ; mais je ne sais pas quand !

Je compte utiliser cette bibliothèque dans Homeland Security et Life On Mars, pour que les joueurs et joueuses puissent utiliser Parchment sans encombres. Tout test et rapport de bug ou feedback, ou demande d’effet à intégrer à l’extension, est plus que bienvenue ! Et n’hésitez pas à l’utiliser dans vos jeux !! :slight_smile:

(PS: les nouvelles extensions, on les met dans « outils de création » ou dans « annonces » ? :slight_smile: )

Je regrette presque de n’avoir pas appris à écrire en I6 quand je vois ce que tu développes (et ce que tu fais dans tes jeux : j’ai commencé Life on mars, c’est très chouette)

Tu sais Azathoth, c’est possible de faire tout ça avec Inform 7 en utilisant des extensions (qui elles-même utilisent I6). Par exemple, Life on Mars?… aurait très bien pu être écrite avec I7 (avec l’extension Menus d’Emily Short et Real Time Delays d’Erik Temple).

Cela dit, il faudrait peut-être que j’apprenne I6 un jour, pour être un peu plus indépendant des extensions, quand je veux faire un truc un peu exotique.

Concernant l’extension, j’ai deux remarques :
[]Il est écrit de t’envoyer un courriel pour les remarques, mais tu n’as pas indiqué d’adresse.[/][]Les caractères accentués et spéciaux sont mal affichés dans le fichier.[/]
Sinon, je peux pas juger l’extension en elle-même (puisque j’y connais presque rien en I6), mais ça à l’air complet. Ça m’étonne que personne n’est fait ça auparavant !

Enfin, je trouve aussi dommage que les styles soient limités avec glulx. 2 styles persos, c’est vraiment pas assez…

Merci Natrium, je vais tester ça :slight_smile:

Il y a peut-être quelques effets (notamment l’affichage progressif) qui ne sont pas dans des extensions I7, mais de toute façon je crois qu’il est facile de faire des extensions I7 à partir d’extensions I6 (je crois ?). Si vous me le demandez je peux essayer d’en faire une extension I7 !
Et merci de votre intérêt même si vous ne codez pas en I6, ça fait plaisir :slight_smile:

C’est vrai que j’ai oublié l’adresse mail, merci ! Par contre pour ce qui est des accents je ne sais pas trop à quoi c’est dû (sûrement l’encodage ? ISO-8859-15, c’est pas bien ? faudrait vraiment que je me renseigne un de ces quatre :slight_smile: )

Et oui, ça n’avait pas vraiment été fait avant ! Il y a plusieurs extensions qui permettent de faire le gras et la couleur (même si ils ne testent pas tous si la couleur est disponible sur l’interpréteur avant de le faire…), deux pour le texte centré (mais je sais pas si on peut y combiner des styles), et une extension (avec un code assez dégueu pour pas grand-chose, j’ai pas compris) pour l’affichage progressif du texte. Et aucune extension pour faire l’effet « fausse ligne de commande » (afficher une lettre quand le joueur tape sur une touche - cf la séquence de rêve dans Life On Mars, ou >etrangler jonas dans Filaments), mais c’est simple à coder. Bref, c’est un peu le bazar, y’a pas mal d’extensions incomplètes et qui se recouvrent avec relativement peu de code dedans (ou du code mal fait, et très souvent pas bi-plateforme), c’est pour ça que j’ai voulu faire un truc qui synthétise tout ça avec toutes les fonctionnalités dont on pourrait avoir besoin.

Pour Glulx, franchement ça m’a refroidi de savoir qu’il y avait des limitations aussi simples et bêtes. Et ça fait un moment qu’on le sait - une « feature request » a été ouverte y’a 4 ans, mais jamais faite. De toute façon ça dépend du bon vouloir de Zarf… même si on peut pas vraiment se plaindre si il préfère coder des interpréteurs qu’on puisse jouer à des jeux Glulx en ligne au lieu de rajouter des couleurs.
Mais quand on compare à TADS 3, qui a intégré les balises HTML (et peut-être même le javascript, si j’ai bien compris) dans le code pour modifier l’apparence du texte, ça fait une grosse différence. (TADS 3, qui n’est toujours pas traduit en français… mmmh…)

Et merci pour le compliment sur Life On Mars :slight_smile: N’hésite pas à en faire la pub si le jeu te plaît !

Je n’y manquerai pas.

Que vaut Frotz par rapport à Glulx ? (je digresse, oui)

Ta question parle de deux choses complètement différentes :slight_smile:
Frotz, c’est un interpréteur purement Z-Machine (fichiers .z5 et .z8). Il y a aussi Glulxe (avec un e à la fin), qui est un interpréteur purement Glulx. Bref, je pense que tu voulais plutôt parler des formats, Z-Machine vs Glulx?

Si oui, un peu d’histoire : la Z-Machine a été créée par Infocom pour la distribution de leurs jeux, à l’époque où le nombre de consoles différentes était très important : Commodore 64, Apple II, Atari ST, IBM-PC, et plus tard Amiga (pour ne citer que les machines sur lesquelles il y a eu du Infocom en France de ce que je me souviens). L’idée est simple (mais révolutionnaire pour l’époque quand on y pense) : au lieu de devoir tout recoder ou ne sortir le jeu que sur une seule plateforme, on crée une machine virtuelle, c’est à dire qu’on fait comme si on codait pour une machine qui n’existe pas (mais dont les spécifications sont bien connues), la Z-Machine ; il suffit alors de créer du code spécifique à chacune des consoles qui s’occupe de traduire le code destiné à la Z-machine en des opérandes correspondant à la console. Par exemple si tu écris « @print » en Z-machine, sur la disquette pour Commodore 64 y’aura un bout de code qui dira « quand tu vois @print, tu utilises <l’opérande qui correspond à l’affichage sur le Commodore 64> », et pour l’Apple II y’aura un autre qui dit « quand tu vois @print, tu utilises <celle de l’Apple II> ». Ce qui fait qu’on peut coder le jeu une seule fois, et ensuite pour le sortir sur différentes consoles il suffit de mettre le jeu en Z-machine + le code, générique (réutilisable), qui permet de faire la traduction en langage que la console peut comprendre.

Bref, tout ça pour dire, la Z-Machine a été conçue dans les années 80, alors y’a plein de trucs qu’elle ne peut pas gérer : le son, les images (enfin, un peu avec la V6 mais bon), la souris, etc. Et notamment, la taille du jeu ne peut pas dépasser 512kb, c’est embêtant pour Azthath :wink:
Ce qui se passait avant était que quand tu codais un jeu en Inform (langage créé dans les années 90 avec un compilateur qui transforme le code inform en code Z-machine) était que ta seule solution était de compiler le jeu en du Z-Code (mais bon, pas grave, pas d’ADSL à l’époque, alors 512kb ça semblait énorme). Ce qu’a fait Zarf, c’est qu’il a créé une machine virtuelle différente, qu’il a appelé Glulx, avec des spécifications différentes mais très similaires, de sorte que le compilateur Inform 6 → Glulx fait quasiment la même chose que le compîlateur Inform 6->Z-machine (c’est pour ça d’ailleurs que c’est dans le même programme). Du coup, si t’as du code I6, tu peux le compiler en Glulx sans effort ; il suffit ensuite d’insérer des commandes spéciales à Glulx (qui ont été rajoutées par Zarf) pour afficher son, image, etc.

Mais le problème, c’est que quand Glulx a été conçu, l’affichage de texte en couleur et autre a été mal foutu, et c’est l’un des seuls points où les choses ne sont pas compatibles : le style du texte et les couleurs sont gérés de façon différente, ce qui fait que ce qui était possible en Z-machine n’est plus possible en Glulx. D’où mes remarques sur « Glulx c’est mal foutu » :wink:

Non, je parlais bien d’interpréteurs, et je voulais dire Glulxe, oui. Je pensais que Frotz pouvait lire les jeux en glulx.

Mais merci pour le petit cours quand même ! :smiley: J’ignorais que c’était Zarf himself qui avait inventé Glulx

Par contre il semblerait que Real-time delay soit fait pour Glulx et pas la Z-machine.

Ah tiens oui, maintenant que tu le dis on dirait bien que toutes les extensions I7 relatives au temps sont faites pour Glulx!

En fait, j’avais pris pour acquis qu’on ne pouvait pas utiliser de temps réel sous z-machine (sans remarquer que Life on Mars était pourtant en .z8) !

Mais de toute façon, ça na plus trop d’importance maintenant : les jeux fait avec Inform 7 6L38 sont si gros qu’on est obligé de les compiler sur glulx.

(faudrait peut-être arrêter avec cette discussion maintenant, on dévie un peu du sujet :unamused: )