Différence entre scène et lieu dans Inform?

Bonjour, ça pourrait paraitre absurbe comme question mais j’ai du mal à comprendre comment insérer un lieu dans une scène sur Inform.

Est-ce nécessaire de le faire manuellement déjà?

Par exemple j’écris pour l’instant une histoire dont le joueur démarre dans un véhicule. J’aimerai donner l’illusion que la voiture avance donc j’ai déjà créé plusieurs scène qui sont des genre d’étapes avant la fin de parcours mais j’ai du mal à fait passer la voiture d’une scène à l’autre aussi je ne sais pas si je dois par exemple recréer plusieurs fois la room route par exemple suivant l’avancement.

Départ
route is a room
Jeep is a vehicle on route

Milieu is a scene
Route2 is a room

when Milieu begins:
move Jeep to Route2.

Arrivée is a scene.
Fin is a room.
when Fin begins:
move Jeep to Fin.

Je n’arrive pas par exemple à associer route avec la scène Départ et Route2 avec Milieu et je ne sais pas si c’est vraiment utile en me disant qu’Inform pourrait le faire automatiquement suite aux déclaration de scène dans l’ordre chronologique des déclaration des pièces.
Et ici je recrée une Route à trois reprise (Route, Route2, Fin) pour donner une illusion d’avancement est ce la bonne technique?

Les scènes permettent de découper le temps en plusieurs séquences (qui peuvent ou non se dérouler en même temps). Mais la chose importante, c’est qu’elles commencent et se terminent automatiquement selon les conditions données. (Ces conditions peuvent être n’importe quoi, comme un personnage qui est dans un endroit, un objet qui est sur un support, ou des choses bien plus compliquées). Mais tu ne peux pas ordonner à une scène de commencer ou de se terminer (dans le genre « maintenant Milieu commence » dans une règle : c’est impossible).

Et tout ça est indépendant des endroits, ce sont deux concepts totalement différents. Et il se peut tout à fait que les scènes ne conviennent pas à ton jeu, et que tu préfères gérer le temps qui passe avec une simple variable que tu incrémentes quand tu en as besoin, par exemple.

Dans ton exemple, tu as bien créé des scènes, mais tu n’as pas dit sous quelles conditions elles commençaient ou se terminaient, donc elle ne font rien pour le moment.

La question que tu dois te poser, c’est comment est-ce que tu veux « donner l’illusion que la voiture avance » ? Quelle est le rôle de cette section du jeu, qu’est-ce que le joueur va faire, comment le temps va se dérouler, etc. Est-ce qu’il y a un autre passager et le joueur peut simplement regarder et discuter, ou bien est-ce qu’il peut contrôler la Jeep en donnant des directions ?

Disons que c’est c’est un genre de cinématique où le jouer ne peut que regarder et discuter, et qu’on ne verra pas la Jeep dans le reste du jeu. Dans ce cas, tu peux modéliser la Jeep comme un endroit directement, et simplement faire varier sa description et ajouter des messages à chaque tour pour donner le temps qui passe. (Un véhicule, c’est plutôt pour un contenant dans lequel le joueur peut entrer et qu’il peut contrôler quand il est dedans.)

[code]La Jeep is a room. « [one of]Le paysage est comme d’habitude[or]Vous voyer une antilope traverser la route plus loin[or]Un nuage masque le soleil un instant[at random]. ».
[On fait varier la description, mais ce n’est pas forcément une bonne idée : le joueur ne va vraisemblablement la lire qu’une seule fois, quand il vient d’arriver dans la Jeep. Et ça peu être confus parce qu’un même endroit aura toujours une description différente. Tu pourrais mettre une description générique, et te contenter des messages aléatoires plus bas.]

[On va utiliser une variable, mais on pourrait aussi utiliser une scène qui se termine dans 3 tours si on veut, et un dire avec un « [one of] ».]
Progression-voyage is initially 0.

[On simule la progression, et on montre quelques messages pour faire semblant qu’on avance.]
Every turn when la location is la Jeep:
if progression-voyage is 0:
dire « Votre voyage commence. »;
else if progression-voyage is 1:
dire « Une secouse se fait sentir. »;
else if progression-voyage is 2:
dire « Vous arrivez à destination[_]: la villa de votre oncle. »;
now le player is in la villa;
increment progression-voyage;

La villa est un endroit.

[Et il resterait à implanter l’autre passager, d’éventuels objets dans la Jeep, le décor, et aussi donner un message particulier si le joueur essaie de sortir, etc.][/code]

Ce n’est qu’un exemple : tout dépend de ce que tu souhaites faire exactement, et de tes préférences en matière de structure et de code. Le plus important, c’est que le joueur ait la sensation qu’il avance ; il n’est pas au courant de la façon dont ton jeu est codé, si tu utilises des scènes ou pas, et ainsi de suite. Si ça t’arrange, tu peux effectivement faire plusieurs endroits plutôt qu’utiliser la variable « progression-voyage » :

Every turn when la location is not la villa: if la location is la route1: dire "Votre voyage commence."; now la location is la route2; else if la location is la route2: dire "Une secouse se fait sentir."; now la location is la route3; else if la location is la route3: dire "Vous arrivez à destination: la villa de votre oncle."; now the player is in la villa;

(Mais ça devient un peu lourd à écrire s’il y a beaucoup d’étapes.)

Les scènes, c’est plutôt utile quand il y a plusieurs choses complexes qui arrivent dans ton jeu, mais que tu veux que quelque chose se passe obligatoirement dès que certaines conditions sont réunies.

Enfin, une petite remarque qui n’a rien à voir avec la question : quand tu crées des objets, il faut mettre le déterminant : ça permet à Inform de comprendre qu’il ne s’agit pas d’un nom propre, et d’assigner le bon genre grammatical. Il faut donc écrire « La Jeep is a vehicle in route ». Sinon ça affichera des choses comme « Vous pouvez voir Jeep ici » (sans le déterminant).

Aussi, il faut dire « in route » et pas « on route », parce que « route » est un endroit/room, et qu’on est dans un endroit. (Ça a plus de sens en français d’être sur une route, mais Inform ne comprend pas le français ; pour lui, la route est un endroit comme un autre.)

Merci beaucoup pour ces éclaircissement, je vais sans doute me tourner vers le système de variable car effectivement ma façon de procédée est assez lourde à gérer en recréant un lieu pour chaque étape, je suis parvenu a quelque chose mais ça me semble assez le foutoir à gérer. Aussi le soucis qui se posait à moi c’est que je ne gérais pas bien l’ouverture et la fermeture des scènes j’ai l’impression. J’y suis finalement parvenu mais je vais étudier votre code pour une meilleur refonte, je dois apprendre à utiliser et incrémenter une variable via Inform. Je m’y étais attaqué mais j’ai eu du mal pour créer une condition avec donc j’ai mis ça de côté mais ça pourrait bien m’aider au final. C’est une intro avec quelque observation possible donc rien ne change beaucoups exepté le paysage et un autre véhicule qui passe mais c’est assez passif (on ne peut pas sortir du véhicule ni tourner le volant…) Ca introduit l’histoire sans réelle interaction.

Bonjour,

J’ai utilisé votre système de variable pour faire une refonte de mon jeu plus claire mais j’ai un soucis, je n’arrive pas à y incruster des actions comme je le voudrai du type Instead of examining…

[code]Progression-voyage is initially 0.

Every turn when la location is la Jeep:
if progression-voyage is 0:
dire « Votre voyage commence. »;
else if progression-voyage is 1:
dire « Une secouse se fait sentir. »;
Instead of examining fenetre:
dire « Une voiture me rentre dedans sur le flan. »;
else if progression-voyage is 2:
now le player is in la villa;
increment progression-voyage;

La villa est un endroit.[/code]

J’ai essayé plusieurs tournures pour incrusté le Instead of et la seule façon que j’ai trouvé c’est de reprendre une seconde fois la condition avec progress-voyage is 1 dans ce cas.

[code]…
retroviseur est un objet.

Instead of examining retroviseur:
if progression-voyage is 1:
dire « Une voiture me rentre dedans sur le flan. »;

Every turn when la location is la Jeep:
if progression-voyage is 0:
dire « Votre voyage commence. »;
else if progression-voyage is 1:
dire « Une secouse se fait sentir. »;
else if progression-voyage is 2:
now le player is in la villa;
increment progression-voyage;

La villa est un endroit.[/code]

Donc j’ai deux fois la même(sensiblement) condition dans le code est ce que c’est possible d’optimiser le code dans ce cas de figure? Merci


Je suis arrivé à une solution alternative en utilisant

Now la description de retroviseur is "....." dans les différents stades de progression. C’est super ça donne vraiment vie au background.

Oui, il y a moyen de changer la description manuellement. Tu peux aussi mettre la condition dans le texte de la description :

La description est "[if progression-voyage is 0]...[else if progression voyage is 1]...[end if]."

Mais ça ne résout pas le problème de la duplication de la condition.

Si chaque variation n’a pas à exactement correspondre à une étape précise, alors on peut utiliser « [one of][or][at random] ». Les variation changeront à chaque fois qu’on examine l’objet, mais une progression donnée ne produira pas toujours la même description. Ça n’est pas forcément grave si tous les petits événements sont uniquement cosmétiques et n’ont pas d’impact sur le jeu, parce qu’en général un joueur ne va pas examiner plusieurs fois un même objet.à

Sinon, je n’ai pas d’autres idées pour le moment. La seule autre façon que je vois pour ne pas dupliquer la condition est de tout mettre dans un méga-tableau contenant toutes variations de toutes les descriptions de ce qui est dans la voiture (ou bien un tableau par objet, mais ça ne change pas grand chose), mais c’est très lourd et pas pratique. Je vais y réfléchir un peu plus voir si je ne trouve rien d’autre.