Questions diverses sous GLULX et inform

si la ligne est trop longue cela peut poser problème, mais tu peux le faire en 2 lignes sans problèmes pour fractionner un peu :

print "blabla [...]"; print "[...] fin de blabla";

J’ai trouvé mon erreur… j’avais bêtement placé une majuscule sur mes instructions print… :blush: :blush: :blush:

Petites questions en passant :

Est-il possible de remplacer, totalement ou en partie (sous glulx I6 ou I7), la saisie des commandes au clavier par un simple raccourci ? Par exemple, remplacer « aller vers le nord » par un appui sur la touche « haut » du clavier ?

Et sous glulx encore, est-il possible de faire une transition entre deux images ? (genre fondu :slight_smile: )

Merci !

pour le fondu, je ne pense pas que cela soit possible directement, mais tu dois pouvoir créer une image intermédiaire avec le fondu (si la transition est prévisible), et lire les 3 images à la suite pour faire une sorte d’animation.

Pour le clavier, essaye de regarder cela :
onyxring.com/downloads/orlib … rimitive.h

mais cela me semble compliqué…

Avec gwindows il est possible aussi de faire une rose des vents cliquable :

justice.loyola.edu/~lraszews/if/ … indows.htm

Une petite incursion pour le fondu, c’est tout à fait possible.

Je te donne le principe de tête, y a plus qu’à coder (lol) :

Affiche image de départ dans le cadre d’image
x est egal à 100
toutes les 100 millisecondes pendant 3000 millisecondes :
Affiche image de départ dans le cadre d’image
Affiche image de fin dans le cadre d’image avec une transparence de x %
x est décrémenté de 3
fin de la boucle

Pour une petite idée, moins précise, dans les égouts de varsovie dans Ekphrasis, les yeux du héros peuvent s’habituer à l’obscurité, et à ce titre plusieurs couches d’un filtre opaques étaient plus ou moins superposées

JB

Merci pour toutes ces infos… Je testerai tout ça après le concours. :slight_smile:

Bon la programmation de mon jeu pour le concours se poursuit (je ne sais pas où en sont les autres). Mais là, j’ai vraiment un problème. Je souhaite ajouter un verbe dans le jeu, j’utilise une commande du genre :

Verb "monmot" * -> Monmot;

et la sub qui va avec :

[code]MonmotSub[;

];
[/code]

Ce que j’aimerai récupérer, c’est la chaine de mots qui suit ce que le joueur entre (monmot bonjour par ex.) Je crois qu’il faut rajouter qq chose après l’étoile dans la ligne « verb », genre " *multi " mais ça ne marche pas… la variable noun ne semble pas être remplie…

J’espère avoir été clair… merci d’avance.

Le manuel inform contient ton bonheur sur ce sujet.

Dans la grammaire du verbe c’est « topic » qu’il faut mettre.

Ensuite surtout ne pas utiliser noun mais la méthode décrite dans le manuel pour lire un texte libre, chercher un truc sur la consultation d’un livre ou la conversation avec l’action Answer par exemple.

Ok « topic » à l’air de marcher. Pour récupérer le nom, je cherche à utiliser la variable NextWord() mais le système ne semble pas gérer cela comme une chaîne de caractères. Un

	print (string) NextWord();

me donne une erreur … :angry:

Pourtant, un exemple dans le DM4 compare bien NextWord() à une chaîne…

before [ w1 w2 glyph; Consult: wn = consult_from; w1 = NextWord(); ! First word of subject w2 = NextWord(); ! Second word (if any) of subject if (consult_words==1 && w1~='glyph' or 'glyphs') glyph = w1;

Qu’ai-je fait de mal ?

Inform 6 et les manipulations de chaînes de caractères, c’est une vraie galère. Un comble pour un langage dédié aux fictions interactives !

Il faut différencier les chaînes de caractère des mots simples. C’est stocké sous forme de tableaux différents en inform. À chaque fois que j’ai des manipulations de chaîne à faire je suis obligé de repasser par la case manuel inform, chapitre sur les chaînes de caractère, et encore je ne trouve pas toujours facilement.

(string) doit être pour afficher une chaîne de caractère, reste à trouver le bon « () » pour afficher un mot, je ne me rappelle plus de ce que c’est. (word) ? (noun) ?

C’est bon, j’ai trouvé. J’avais juste oublié la ligne

wn = consult_from;

avant de récupérer les mots avec NextWord()… :slight_smile:

Je viens de trouver un truc super en Inform pour faire en sorte qu’un objet soit visible partout sauf dans un lieu particulier : (vous connaissier peut-être mais j’ai mis longtemps à trouver, problème avec le false)

found_in [; if (location ~= LieuA ) { return location ; } else {return false ;}; ],

Avec « LieuA » l’endroit où on ne souhaite pas voir l’objet.

Autre petite question tout de même : j’ai ajouté dans un jeu la constante « Constant AMUSING_PROVIDED; », qui indique (quand le joueur gagne ou perds) un petit texte à ajouter. Seulement, je n’ai pas trouvé la sub à utiliser pour mettre ce texte… Je pensais que c’était AmusingSub mais apparemment non :question:

Je n’ai jamais utilisé cette constante mais je te conseille de jeter un oeil au code des « Lettres volées », je crois qu’Otto avait utilisé cette constante dans son jeu pour le concours, précisant quelques détails sympathiques incitant à recommencer le jeu :wink:

EDIT: Je suis pas sûr que le code du jeu soit disponible facilement et c’est probablement de l’Inform 7 donc ce que je t’ai conseillé ne sert pas à grand chose ^^
J’ai regardé dans l’« InfoLib at your fingertips » de Roger Firth (très utile à garder sous la main si tu ne l’as pas), et AMUSING_PROVIDED renvoie à la routine Amusing(), donc si tu édites un [ Amusing; ]; plutôt qu’un [ AmusingSub; ]; ça marchera peut être.

Le code source de Lettres volées est à l’adresse ifiction.free.fr/concours2008/le … es_src.txt . Mais c’est bien de l’Inform 7 ! On dirait qu’en Inform 7, ça s’appelle « Rule for amusing a victorious player ».

Par contre, il y a aussi le code source de Souterraine, qui est lui en Inform 6. Je ne connais toujours pas Inform, mais une simple recherche de texte me donne ceci, outre la « Constant AMUSING_PROVIDED; » :

[Amusing; Borrarpantalla();eliminaventanagrafica(); ! Oops rtrue; ];

oui effectivement cela doit être cela.
C’est traité dans ce chapitre du DM4 : inform-fiction.org/manual/html/s22.html#p171

Pour les sources des jeux en I7, ils ont fait une amélioration qui permet de bien séparer les fichiers sources des fichiers à distribuer, je suis en train de travailler à ressortir mes jeux avec ça, mais il y a encore un bogue d’affichage (pour les accents). On a en attendant accès à la source ici également (avec affichage en html) : ifiction.free.fr/concours2008/le … ource.html

Non, [Amusing; ne marche pas… mais je pense avoir trouvé une cause possible du problème : dans quel ordre doit-on ajouter les librairies françaises ? D’après le site de JL, elles sont toutes placées en tête du programme, et d’après l’exemple fourni, toutes sont au départ, sauf « FrenchG » qui est ajoutée à la fin…

je viens de tester dans le jeu d’intro qu’on avait débuté. Cela fonctionne comme prévu uniquement si on modifie verblib.h en commentant la ligne concernant AMUSING_PROVIDED :

!Default AMUSING_PROVIDED 1;

sinon cela fait une erreur bizarre :

ce n’est pas logique parce que « Default » cela veut dire ici « si c’est défini », donc cela ne devrait pas être indiqué comme étant déjà défini à cause de cela.

(edit : je n’ai pas compris, j’ai rajouté le commentaire dans verblib.h , puis je l’ai retiré, et maintenant cela compile correctement, voir l’exemple ici svn.tuxfamily.org/viewvc.cgi/inf … nf?view=co . Il est très probable que j’ai modifié d’autres choses à d’autres endroits mais je ne vois pas quoi)

Petites questions pratiques, merci d’avance de votre aide :

-je cherche à lister les objets contenus par un container, par exemple lors de before[; examine :
(ex : Le panier contient un fromage et un petit pot de beurre.)

-peut-on tester si un objet est présent dans le scope ? Un test genre
if (machin in scope) mais ça n’a pas l’air de marcher…

-est-il possible de tester si une chaine de caractère est vide ou non ?
if chaine==«  » ou chaine == null ou chaine == default n’a pas l’air de fonctionner …

-et enfin, peut-on ajouter des synonymes à un verbe existant sans modifier la bibliothèque ? J’entends que ces modifications ne concerneraient que mon jeu… La commande Verb ne semble s’appliquer aux verbes rajoutés par le programmeur.

Merci ! :slight_smile:

Pour lister les objets dans un container, il me semble que c’est le comportement par défaut du container de lister son contenu quand on regarde à l’intérieur.

Pour le scope je ne saurais pas répondre, mais je pense que le ou les chapitres du DM4 sur le sujet devraient aider.

Pour modifier un verbe existant je ne sais plus mais là encore le DM4 est assez complet à ce sujet.

Sinon pour lister les objets d’un container, si ça ne se fait pas de lui-même dans l’interpréteur, tu dois pouvoir le faire avec un ObjectLoop - même si c’est beaucoup plus lourd…
Genre :

ObjectLoop( object in container;
     print object.name;
     move object to tampon;)
ObjectLoop( object in tampon;
     move object to container;)

(bon, mais je ne me souviens plus de la syntaxe pour ObjectLoop, regarde dans le DM4. Et pareil, je ne suis pas sûr pour object.name)

Et pour les verbes je ne comprends pas trop ton problème, j’avoue…
Plusieurs cas : si tu veux que ‹ subtiliser › soit synonyme de ‹ prendre › par exemple

Verb 'subtiliser'
* noun             -> Take;

Et si tu veux changer la réponse à un verbe qui existe déjà c’est :

[code] Extend ‹ verbe › replace

  • noun ->Verbenoun
  • topic ->Verbetopic;[/code]
    (Et y’a qu’un seul point-virgule, même si tu fais plusieurs sens.)