[I7] Ne pas lister le contenu dans le description

Bonjour,
J’ai un objet conteneur dont je souhaite décrire moi même le contenu, et j’aimerai désactiver la description automatique. Exemple :

A box is in Room. The box is a container. A key is in the box. The description of box is "A key is inside.".

J’aimerai éviter alors d’avoir la description du genre :

Il me semble qu’il faut ajouter l’attribut « concealed » à la boîte, ça devrait suffire. (Ou, si la boîte est tellement grosse qu’elle ne bougera pas, l’attribut « scenery », qui est « static » + « concealed ».)

En syntaxe Inform 7, je suis pas sûr, mais « The box is concealed. » ?

J’ai regardé dans la doc, et la règle correspondante est « Rule for deciding the concealed possessions of the box: yes. ».
D’après la doc, ça devrait fonctionner, mais en l’occurrence, pour une raison que je n’ai pas encore déterminé, ça ne change rien…

En I7, on dit « undescribed » pour concealed. Mais je ne te conseillerais pas de faire ça, on réserve plutôt cet adjectif pour des choses dont le joueur ne connaît pas l’existence. Si la key est undescribed et que tu écris « > search box » (c’est à dire « fouiller boite »), le jeu va te répondre que la boite est vide, parce que c’est comme si la clef était cachée (ce qui n’est pas ce que tu veux, apparemment).

J’avais aussi pensé aux concealed possessions, mais ça sert à empêcher le joueur d’interagir avec les possession de quelqu’un/quelque chose, pas à afficher du texte en conséquence. Ce n’est pas ça qui affiche la ligne après la description.

Pour l’enlever, c’est facile, mais ça dépend de quelle version d’Inform tu utilises.

Pour 6G60:

A procedural rule: if we are examining the box, ignore the examine containers rule.
Pour 6L02:

The examine containers rule does nothing if we are examining the box.

Les procedural rules (pour 6G60) ne sont pas recommandée et ralentissent le jeu, c’est pourquoi ça a été enlevé dans la version 6L02. Mais ça reste ok si tu n’en utilises pas beaucoup.

Il y a aussi la solution extrême:

The examine containers rule is not listed in the carry out examining rulebook.

Là, ça supprime carrément la règle, donc la petite ligne que tu veux enlever ne s’affichera plus jamais, pour aucun container. C’est moins flexible que les deux premières solutions.

Enfin, la petite astuce pour trouver le nom d’une règle : la commande « rules » permet d’afficher toutes les règles qui sont suivies au cours de la partie, ce qui permet de trouver quelle est la règle qui affiche telle ou telle ligne.

Et pour éviter d’utiliser une règle procédurale dans la version 6G60, il n’y aurait pas moyen de désactiver la règle de listing (ta 3e proposition) avant d’examiner avec un before, et de la réactiver juste après ?

Non, justement. On ne peut pas modifier les règles à la volée dans un jeu (pas à ce que je sache, en tout cas). On ne peut que les désactiver selon certaines conditions, comme dans mon post précédent.

Mais on peut contourner le problème, et remplacer l’ancienne règle par une nouvelle qui exécute l’ancienne si telle condition est remplie.

[code]The new examine containers rule is listed instead of the examine containers rule in the carry out examining rules.

This is the new examine containers rule:
if the noun is not the box, anonymously abide by the examine containers rule.[/code]
Mais ce n’est pas trop grave si tu utilises des règles procédurales, si tu n’en utilises que quelques unes il n’y aura pas de ralentissements.

Aussi, dans un vieux projet et que j’apprenais à utiliser Inform, j’avais utilisé un truc dans ce genre :

Check examining the box: ignore the examine containers rule.
Ça marche, mais dans la doc, il y a marqué

(c’est vraiment marqué en gras dans le texte original).

Mon ordinateur n’a pas explosé pour autant, alors je sais pas c’est quoi le risque d’utiliser ces instructions en dehors d’une règle procédurale.

Il y a encore plus simple :

[code]Une boîte is a container in Grand Hall de Fihnargaia.

Un sifflet is in boîte.
After printing the name of boîte: omit contents in listing.[/code]

Et à l’exécution, on aura cela :

Par contre attention lorsqu’on essaye de modifier le comportement en inscrivant des descriptions d’état « en dur » dans le code (de type The description of box is « A key is inside. ».), à un moment ou un autre, si la clef est retirée, la description continuera de dire « a key is inside »). Tu peux bien entendu, et c’est peut-être ce que tu avais prévu, écrire une condition dans la description : The description of box is « [if key is inside box]A key is inside[otherwise]A box[endif]. ».

Ça, c’est pour ne pas lister le contenu des objets dans la description du lieu. Ce que ciseur68 voulait, c’est enlever la phrase qui liste le contenu à la fin de la description de l’objet, quand on l’examine. Là, je pense que la solution que j’ai proposée est celle qu’il faut.

Mais c’est effectivement une bonne idée de préciser le « omit contents in listing », étant donné que c’est lié à son problème.

ah ok. Ça n’existe pas, mais il pourrait y avoir une commande « omit content in description » :slight_smile:

Bon, merci à vous pour vos solutions, qui malgré tout ne m’ont pas tout à fait satisfaites… M’enfin, on fait avec, ça ira quand même :slight_smile:

Moi j’utilise ça

Rule for printing the name of a container (called M) : say "[the printed name of M]" ; omit contents in listing.