[I7] "Before moving to Room"

Tout d’abord, bonjour ! Ceci est mon premier message sur le forum (je n’ai pas remarqué de section pour se présenter, désolé donc si cela est dû à mon manque d’observation !). Après avoir lu le très bon tutoriel I7 par Zero ainsi qu’exploré le site IFiction, je me suis mis à la création d’une première IF, et, comme je m’y attendais, j’ai très vite rencontré des problèmes auxquels j’étais incapable de trouver une solution, car je suis à la fois débutant en programmation et assez mauvais en anglais.

Voici donc le premier d’entre eux. Tout d’abord, j’ai réussi à créer une introduction comme je le souhaitais grâce au code suivant :

[code]Include Basic Screen Effects by Emily Short.

When play begins :
say « blabla 1 »;
wait for any key;
say « blabla 2 ».
[/code]

Et en jeu, cette introduction est comme normalement suivie de :

Néanmoins, je cherche à afficher une deuxième introduction plus petite juste avant que Room 1 ne s’affiche, mais après que le titre de l’IF apparaisse. Pour cela, j’ai essayé plusieurs codes.

Le premier est accepté par I7, mais il est sans effet. Cela doit être parce que la première fois que l’on entre dans une pièce, il est considéré que l’on y est depuis toujours (et donc que l’on n’y entre pas). Ou alors, peut-être est-ce parce que le verbe « enter » est censé être utilisable uniquement sur des objets, et non sur des lieux ; je l’ignore.

Before entering Room 1 for the first time : ["entering in" a le même effet.] say "blabla 1"; wait for any key ; say "blabla 2" continue the action.

Le deuxième n’est même pas accepté par I7.

Before moving to Room 1 for the first time : ["moving player to" a le même effet.] say "blabla 1"; wait for any key ; say "blabla 2"; continue the action.

Voici le message d’erreur que me donne I7 pour ce deuxième code :

J’ai aussi pensé à, via du code entre crochets dans la description de Room 1, modifier cette description (et y insérer mon intro) lorsqu’elle est affichée pour la première fois (étant donné qu’elle est censée s’afficher automatiquement au début du jeu, sans avoir à « examiner »), mais je ne sais pas comment faire cela… Toutefois, dans cette optique, j’ai tenté la tricherie suivante, qui a résulté en le même message d’erreur que ci-dessus :

Instead of describe Room 1 for the first time : ["describing" a le même effet.] say "blabla 1"; wait for any key ; say "blabla 2"; continue the action.
Note : sur la première ligne, « Instead of saying « [description of Room 1] » for the first time » a également le même effet.

Apparemment, « describe », « describing », « saying » et « moving » sont donc considérés comme des actions du joueur plutôt que du programme… c’est gênant. Comment demander à I7 d’afficher une description ?

Ces deux solutions ne sont de toute façon pas idéales pour ce que je veux faire, car dans mon scenario il serait plus logique que Room 1 ne s’affiche qu’après la seconde intro ; mais connaître le moyen de faire cela me serait utile à d’autres occasions, et s’il n’y a pas d’autre moyen, je peux m’en contenter, aussi je veux bien que vous m’expliquiez également ce que j’aurais dû faire ici, si ce n’est pas abuser ^^

Est-ce que quelqu’un peut m’éclairer ? Peut-être que je ne m’y prends pas de la bonne façon, ou peut-être que le mot utilisé pour « entrer dans une pièce » n’est pas le bon. Quoi qu’il en soit, vous avez compris ce que je souhaite faire… :confused:

Mon second problème demandera de moins longues explications. Comment faire pour ouvrir dans I7 une IF que je n’ai pas créée ? Je demande cela pour voir les engrenages de fictions réussies, afin de trouver moi-même les solutions à mes problèmes plus facilement. Un bon exemple est souvent le meilleur moyen de comprendre le fonctionnement de quelque chose. Je n’ai pour l’instant rien essayé, mais je doute qu’ouvrir le fichier de jeu avec I7 fonctionne, vu que c’est un ficher .z5 ou .z8 et qu’il faudrait un fichier .inform…

Salut Grelot-de-Bois, et bienvenue chez nous :slight_smile:

Quel nom original, tu pourras nous en dire plus ici, dans le fil pour les présentations :
https://forum.fiction-interactive.fr/t/presentations-et-vous-etes-qui/29/1 (et j’en ai profité pour renommer cette section, car comme tu l’as remarqué, ou plutôt comme tu ne l’as pas remarqué, cela n’était pas assez visible)

J’ai bien compris ton problème pour l’affichage de la seconde intro après la bannière (contenant le titre et les infos générales). En fait la réponse est toute simple, il suffit de taper :

After printing the banner text, say "[line break]Seconde intro blabla bla."

Néanmoins ton idée était bonne, seulement je ne crois pas qu’Inform 7 considère que le joueur vient d’ « entrer » dans la pièce où on commence. Il me semble qu’ « entering » est correct à la fois pour un objet et une pièce (je pense que c’est le cas car je l’ai utilisé dans un de mes jeux, mais peut-être est-ce une erreur…), mais il faut généralement faire attention lorsqu’on utilise ce genre de chose, car cela ne réagira pas forcément lorsque le joueur utilise les directions cardinales.
Par exemple dans le même ordre d’idée, on peut écrire :

Before going inside from room1, say « Petit texte[line break] ».

Ceci fonctionnera uniquement lorsque le joueur tapera « entrer » en étant dans la room1 (c’est à dire en la quittant car « inside from » = sortir), mais s’il tape « nord » en voulant sortir, le message ne s’affichera pas.

Par contre, même si le code « After printing the banner text » n’existait pas, on aurait pu simuler cette seconde intro avec ça (le code pourra servir dans d’autres contextes…) :

Before looking when the location is room 1 for the first time, say « petite intro[line break] ».

Pour lire, comparer, s’inspirer de code existant, tu peux voir ceci:
inform7.com/learn/complete-examples/
Le manuel d’Inform fourmille également d’exemples intéressant.

Au niveau des exemples de jeux français, il y a cela :

ifiction.free.fr/concours2006/sarvegne/site/
ifiction.free.fr/concours2007/he … vent/site/
ifiction.free.fr/concours2008/le … lees/site/
ifiction.free.fr/speedif/otto_so … lcon/site/
ifiction.free.fr/speedif/otto_sc … katana.txt
ifiction.free.fr/jeux/lupercalia/source.txt

Et pour répondre à ta question, il est possible de désassembler des jeux existants, mais cela ne sera pas utile car il ne sera pas possible de retrouver le code source originel à partir de cela (comme avec n’importe quel langage), car cela sera dans une sorte de code machine.

D’accord ! Merci beaucoup, en effet c’est assez simple. Et merci aussi pour le temps de réponse très court :wink:

Sinon j’ai en effet trouvé le sujet de présentation, pendant que tu étais en train de me répondre. J’ai plus l’habitude d’un sous-forum complet dédié que d’un sujet pour tout le monde, c’est la raison pour laquelle je ne l’ai pas trouvé tout de suite, mais je pense que la plupart des gens ne devraient pas commettre mon erreur !

Bon, j’ai déjà un nouveau problème… ^^’ Il est d’ailleurs tellement ridicule que je n’ose pas créer un nouveau sujet sur lui, le voici-donc à la suite !

Malgré tous mes efforts, je n’arrive pas à faire fonctionner x/examine/examiner. J’ai invariablement indiqué « Vous ne voyez rien de tel, à moins que cela ne soit sans grande importance. » à la place de la description du lieu après l’utilisation du verbe en question… Voici les codes que j’ai essayés :

Clairiere perdue is a room. The printed name of Clairiere perdue is "Clairière perdue". The description of Clairiere perdue is "blabla". Understand "Clairiere" or "Clairière" or "Clairière perdue" as Clairiere perdue. Before examining Clairiere perdue, say "[description of Clairiere perdue]".

Clairiere perdue is a room. The printed name of Clairiere perdue is "Clairière perdue". The description of Clairiere perdue is "blabla". Understand "Clairiere" or "Clairière" or "Clairière perdue" as Clairiere perdue. Before examining Clairiere perdue, say "blabla". [Ce qui est beaucoup plus contraignant, car il se trouve que cette description est très longue, et rend donc le code peu lisible...]
J’ai aussi essayé d’utiliser Instead of à la place de Before.

Aucun de ces quatre codes ne fonctionne. Lorsque j’entre dans Clairière perdue, j’ai sa description qui s’affiche correctement, mais lorsque j’essaie de l’examiner, tout se passe comme si elle n’existait pas. Pourtant je ne vois pas où est mon erreur :confused:

EDIT : Bon, bien que ne comprenant toujours pas mon erreur, j’ai trouvé une solution (contraignante) :

Clairiere perdue is a room. The printed name of Clairiere perdue is "Clairière perdue". The description of Clairiere perdue is "blabla". Understand "x Clairière perdue", "x Clairière", "x Clairiere perdue", "x Clairiere", "regarder Clairière perdue", "regarder Clairière", "regarder Clairiere perdue", "regarder Clairiere", "x la Clairière perdue", "x la Clairière", "x la Clairiere perdue", "x la Clairiere", "regarder la Clairière perdue", "regarder la Clairière", "regarder la Clairiere perdue", "regarder la Clairiere" as a mistake ("[description of Clairiere perdue]").
x a l’air de marcher aussi pour examine et examiner, mais pas pour regarder (pourtant ces deux verbes sont censés donner le même résultat).

J’ai donc un moyen de contourner le problème, mais il demeure qu’apparemment ma Clairière n’existe pas aux yeux du programme :cry: Si quelqu’un a une meilleure solution, je suis preneur !

Salut,

tu viens de toucher du doigt un petit problème dans Inform, en fait c’est rare de regarder explicitement dans la pièce où on se trouve, mais un joueur qui le fait s’y cassera les dents, sauf si l’auteur a fait des aménagements nécessaires.

Ton idée n’était pas mauvaise, mais comme tu l’as remarqué, c’est fastidieux. Un meilleur moyen est de créer un objet « bidon » (que j’appelle _fake) qui captera les commandes du joueur. On peut faire cela ainsi (il n’est pas nécessaire de rajouter les accents pour les synonymes, en fait il ne vaut mieux pas, car les accents sont automatique retirés par l’interpréteur) :

[code]Clairiere perdue is a room. The printed name of Clairiere perdue is « Clairière perdue ». The description of Clairiere perdue is « blabla. ».

clairiere_fake is scenery in clairiere perdue.
Understand « Clairiere » or « Clairiere perdue » as Clairiere_fake. The printed name of clairiere_fake is « Clairiere perdue ».

Instead of examining Clairiere_fake, say « [description of Clairiere perdue][line break] ».[/code]

Là aussi, on verra ce que la nouvelle version d’Inform 7 apportera… car cela devrait être géré automatiquement pour que cela soit plus pratique.

Aaaaah, excellente idée :smiley: Merci, j’y aurais pas pensé :smiley:

et d’ailleurs on peut utiliser le même truc pour pouvoir entrer dans un lieu (par exemple une maison) qui est décrit dans un autre lieu.

(genre « instead of entering maison_fake, try going north » (selon la disposition des lieux, ou encore « try going inside » etc)

Un nouveau problème, dans la continuation de celui-ci, et beaucoup plus important cette fois (du moins dans le cadre de mon IF) : comment réaliser un « Understand [expression] as [verbe] » ? Je détaille :

Pour progresser à un moment donné du scenario, il est nécessaire de placer sa main dans une empreinte de forme adaptée. Pour simplifier la vie du joueur, j’ai autorisé à ce que l’effet se déclenche sur un simple « toucher l’empreinte », mais mon premier réflexe dans une telle situation serait d’envoyer « placer sa main sur l’empreinte » ou « placer la main dans l’empreinte ».

D’habitude, je contourne le problème à l’aide d’un « Understand as a mistake », mais ici je ne peux pas faire ça, car il ne me suffit pas d’envoyer un message donné au joueur : je veux aussi l’envoyer dans une autre pièce, commencer une nouvelle scène, etc…

Le problème est donc multiple :

  1. le verbe « placer » n’existe pas ;
  2. « placer la main » est un groupe de mots, pas un mot unique, ce qui complexifie tout ;
  3. j’ai une dizaine d’expressions à coder comme ça, ce qui m’empêche de contourner le problème en créant intégralement un nouveau verbe…

En somme, je souhaite que le programme réponde à une dizaine d’expressions données comme si elles étaient à la place « toucher l’empreinte ». Je maudis l’absence de commande pour déterminer « si le joueur envoie [message], alors… » ><

Evidemment, la fonction Understand as ne fonctionne pas, ou alors je ne sais pas comment faire. J’ai essayé d’autres genres de trucs, mais c’était toujours fastidieux, long, pas propre, et en l’occurrence non-fonctionnel.

Des idées ?

Essaye ça, chez moi cela fonctionne:

[code]Instead of touching empreinte, say « Vous entendez un mécanisme. » [ou toute autre action(s) en rapport…]

Understand « poser la main sur [empreinte] » or « poser la main dans [empreinte] » as touching.
[/code]

Ahhh, merci ! Le truc était d’écrire [empreinte] entre crochets, parfait, merci beaucoup !

je pense que cela fonctionne aussi si tu écris « poser la main sur [something] », juste que cela sera valable pour tous les objets, ce qui peut être plus logique d’ailleurs. Le « empreinte » entre crochet permet de dire que cela est valable pour tous les synonymes ou références à cet objet.

J’avais déjà essayé « poser la main sur [something] », mais cela ne fonctionnait pas : le programme reconnaissait le verbe, mais ne comprenait pas le phrase, quel que soit l’objet que j’indique à la place de something

c’est bizarre car je viens de réessayer, et pourtant cela fait pareil qu’avec [empreinte], il faut bien mettre le [something] entre crochet d’ailleurs. (et on peut mettre someone ou held etc si on veut restreindre à un type d’objet particulier)