Inform 6 est assez riche concernant le style est la couleur du texte affichable à l’écran. Avec une petite routine sur-mesure, il est aisé de formater son texte à son gré. Il est ainsi possible d’écrire dans son source :
print "Ceci est i<un bout de texte> en italique"
Le principe est d’encadrer la portion de texte concernée dans des balises ‹ < › ‹ > › et de faire précéder la première d’un style.
Les styles sont combinables :
print "Ceci est b<i<3<w<un bout de texte> en italique"
Cela affiche un texte gras en italique de couleur rouge sur fond bleu.
C’est testable ici : http://auraes.free.fr/parchment/?story=http%3A//auraes.free.fr/ldveh/Game/test.z5.js
Il est aussi possible, cela n’est pas implanté dans l’exemple, de définir un style sur un seul mot avec le symbole #.
print "Ceci est un #mot de texte en #gras"
Les mots précédés d’un #, s’affichent avec un style par défaut; ce qui permet de conserver un source très lisible.
Il y a une balise t<>pour temporiser le texte, mais il semble, comme avec le jeu Life On Mars? d’Hugo Labrande, que sous parchment la fonction KeyDelay(time) (waits time tenths of a second for a single key. If no key is pressed within that period it returns zero; otherwise it returns the character from 1-255.) soit boguée.
Quand tu dis « avec une routine sur-mesure », tu veux dire avec une routine que tu as fait ? En tout cas je n’en trouve pas trace ailleurs (et ça marche pas avec mes libs sous windows, mais c’est inform 6.32).
Ca m’intéresse beaucoup, parce que pour l’instant j’écris " style underline; print « mot »; style roman; print " la suite"; " et c’est embêtant
Ca me semble quelque chose de très pratique pour faire des jeux plus jolis - et j’ai des vélléités de gros jeux Glulx pour des projets futurs, alors ça m’intéresse
Justement, en I7 y’a des balises du genre « [italic type]ceci est en italique mais [roman type] pas cela ». C’est un peu le même concept, même si je préfère le concept « début balise - fin balise » - c’est plus clair et ça ressemble plus à d’autres systèmes, comme le HTML.
Question : pour le caractère #, c’est quelque chose que tu définis ailleurs dans le code source et ensuite ça s’applique sur tous les mots qui commencent par ça ? Et comment on fait si on veut afficher le caractère # dans un string, c’est prévu ?
Oui, pour I7, tout est intégré, et il y a des moyens pour raccourcir les notations si on n’aime pas taper « [italic type] » à chaque fois (pour par exemple mettre [ i ] [ /i ] comme Mule le préfère).
Pour les couleurs, il faut utiliser l’extension « Basic Screen Effects », et c’est tout aussi facile à utiliser : « [red letters] », par exemple.
Moi, ce qui me gêne, c’est les couleurs limitées avec glulx. Apparemment, on a le droit qu’à deux style personnalisés en plus de l’italique, le gras et la largeur fixe, et donc on peut utiliser deux couleurs seulement (à moins de modifier les styles précédents, si on n’en a pas besoin). L’avantage, c’est qu’on peut choisir n’importe quelle couleur existante.
Personne ne sait si glulx permet d’autres options de couleurs ?
Un exemple de code (perfectible !) :[code]!% -Cu
Constant MAX_BUFTXT 256;
Constant ROMAN 0;
Constant BOLD 2;
Constant BALISE ‹ # ›;
Array bufTxt buffer MAX_BUFTXT;
Include « Parser »;
Include « VerbLib »;
[ printf txt i c;
!On copie la chaîne dans le buffer : bufTxt, ce qui la décompacte(zcode uniquement) et la rend accessible
!La longeur de la chaine ne doit pas être supérieur à MAX_BUFTXT
PrintToBuffer(bufTxt, MAX_BUFTXT, txt);
!On parcourt le chaîne du buffer caractère par caractère
for (i = 0 : i < bufTxt-->0 : i++) {
c = bufTxt->(WORDSIZE + i);
!On traîte la balise éventuelle
if (c == BALISE) {
@set_text_style BOLD;
continue;
}
!on annule l'effet de la balise
if (c == ' ') !or '.' or ',' or ';'
@set_text_style ROMAN;
!On affiche le caractère à l'écran
print (char) c;
}
!On quitte avec les valeurs par défaut
@set_text_style ROMAN;
];
Object room « Balise Bold »
with
description [;
Printf(« Test d’une chaîne de #caractères avec une #balise définit par défaut en #bold.^ »);
],
has light;
[ Initialise;
location = room;
];
Include « Grammar »;
[/code]Pour utiliser des balises de type i ou [ i ]TEXTE[ /i ], le traitement des balises est plus complexe, mais le principe reste le même.
Si quelqu’un veut tester pour Glulx et éventuellement l’adapter. Glulx, que je trouve particulièrement indigeste (mieux vaut un langage C avec la librairie SDL2 !?)
Concernant les styles, il est préférable d’utiliser directement, dans le source, l’instruction @set_text_style plutôt que la classique : style roman/bold/underline/reverse/fixed. @set_text_style accepte en argument une variable ou une constante, ce qui permet de combiner les styles (si l’interpréteur le permet) avec un opérateur binaire :[code]Constant ROMAN 0;
Constant BOLD 2;
Constant UNDERLINE 4;
Constant REVERSE 1;
Constant FIXED 8;
Super, merci Auraes - je note cette routine dans un coin je connaissais pas @set_text_style (le nombre de trucs en I6 que je connais pas, pfff…) En tout cas c’est vrai que la routine n’est pas si compliquée quand on prend tout par le bon bout !
Pour afficher le code source de jeux sur un site web, comme le fait Hugo Labrande sur son site, il y a http://pygments.org/ qui permet notamment une conversion html d’un fichier source Inform6 (ou I7) avec coloration syntaxique. Il y a de nombreux styles disponibles. J’ ai essayé avec ma princesse adorée de Hugo : http://auraes.free.fr/tmp/princesse.html
Oooouh c’est cool ça Pygments ! Merci du tuyau ! Je ne vois pas Inform 6 dans la liste, par contre, quel langage tu as sélectionné ?
En tout cas je pense bien que je vais rajouter ça sur mon site !
Pour Parchment : Windows 7 + IE = ça bloque sur A, Windows 7 + Firefox pareil. (La flemme de rebooter sur Linux… )
Niveau téléphones (mais bon est-ce que Parchment c’est fait pour…), Android 4.4.4 + Chrome ça bloque aussi sur A, Android 4.4.4 + Opera Mini pareil, et iPhone 4 + Safari pareil !
J’ai pris la version en développement sur https://bitbucket.org/birkenfeld/pygments-main
Et pour convertir ton source Inform : http://pygments.org/docs/cmdline/python pygmentize -O full,style=emacs -o princesse.html princesse.inf
ou :
python pygmentize -O full,style=emacs -O encoding=utf-8 -o princesse.html -l inform6 princesse.inf Si tu ne spécifies pas le langage du fichier source, il le reconnaît automatiquement par l’extension .inf, sinon c’est l’option -l inform6 ou i6, inform7 ou i7.
Super, merci pour les infos.
Pour Parchment, c’est fait : Dannii a répondu « il n’y a pas de support du temps sur Parchment pour l’instant, et c’est pas très haut dans la liste des priorités, mais peut-être un jour ». Dommage, ça veut dire que personne peut jouer à « Life On Mars? » sur Parchment
O.K. Merci. Ton anglais semble très bon… c’est pas juste !
Méfies-toi de la temporisation avec PrintToBuffer() quand tu as des textes ou des fonds en couleurs : Gargoyle-frotz n’aime pas trop !
peut-être qu’il est possible de faire une version de « life on mars » avec des « press a key » au bon moment, plutôt qu’une temporisation ? Même sans parchment, j’avais eu du mal en ligne de commande (fizmo) et dans gargoyle donc il doit y avoir moyen d’optimiser la manière dont c’est affiché.
En fait, j’aime bien jouer avec la manière dont le texte est affiché Je m’en sers aussi dans Homeland Security (juste après la première scène), du coup ça veut dire que sur Parchment ça marche pas super non plus (mais c’est moins injouable que Life on Mars). Il faut que je réfléchisse à une option « désactiver l’affichage progressif » dans le menu d’aide, peut-être, ça devrait pas être très difficile. Mais je trouve ça un peu dommage - enfin, mieux vaut désactiver un effet que refroidir un joueur…
Je viens de mettre à jour mon site pour y inclure les versions pygmentées de mes codes source. Merci auraes !
A tout hasard, est-ce que tu saurais comment faire pour faire des retours à la ligne automatiques dans la page générée ? (ie qu’il n’y ait pas besoin de scroller horizontalement dans le navigateur) Je trouve ça plus lisible.
Non. Il y a sûrement une solution en CSS et/ou de bonnes habitudes à prendre dans le code source. La mauvaise indentation du code me semble plus gênante que l’absence de retour à la ligne du texte.
Pourquoi le source n’est pas en UTF-8 ?
En tout cas, cela permet de se rendre compte du travail colossale que semble être la conception et le codage d’un jeu en inform ! Quel courage…
(Dans Life on Mars, dans l’objet moimeme, il y a une erreur avec le random(6) qui retourne une valeur de 1 à 6 et non de 0 à 5.)
Oui c’est possible, il faut rajouter dans le code, à la partie sur « pre » ceci :
pre { line-height: 125%; white-space: pre-wrap }
et ça retournera automatiquement à la ligne lorsque c’est nécessaire (en fonction de la taille de la fenêtre) ce qui sera beaucoup plus lisible. Je ne comprends pas qu’ils n’aient pas mis cela par défaut.