Inform : directions : this looks like a contradiction

bonjour,

Je viens tout juste de télécharger inform 7 pour mac, et quelque chose ne va pas concernant le placement des portes (ou alors c’est moi).

j’ai essayé d’exécuter le code suivant, extrait de la documentation :

The Undertomb is east of the Orchard. The heavy iron grating is east of the Orchard and west of the Undertomb. The grating is a door.

avec comme réponse de la part du compilateur

par contre, si je transforme le code en…

…le jeu se lance

:question:

edit: comme je sens que c’est la gamelle ce genre de question, je vais préciser comment j’interpete le premier bout de code.
Je crois que « is east of » se traduit par « est à l’est de »

The Undertomb is east of the Orchard.
i…(Undertomb)[/i]
The heavy iron grating is east of the Orchard
i |…(Undertomb)[/i]
and west of the Undertomb
i |…|(Undertomb)[/i]
The grating is a door
i |<–>|(Undertomb)[/i]

Salut et bienvenue GorgeRonde !

Concernant ta question, issue du chapitre 3.12 du manuel d’Inform 7, la documention précise justement que cette phrase est une contradiction et ne compile pas : "then Inform would say that this is a contradiction: we said the Undertomb was east of the Orchard, but then we said that the grating was east of the Orchard. "

Je pense que ton dessin est correct, la porte s’intercale bien entre les 2 espaces, et dans inform, « is east of » signifie bien « est immédiatement à l’est de » (ce n’est pas un placement général, c’est ce qui est tout de suite à côté)

J’utilise ce topic et ce n’est surement pas adapté. Je cherchais un moyen simple de se déplacer d’un lieu adjacent à un autre sans forcement passer par les directions : Aller parc, aller jardin…

[code]Include « Parser »;
Include « VerbLib »;

[ IdObj w obj nb i;
objectloop( obj provides name ){
nb = obj.#name / WORDSIZE;
for( i = 0 : i < nb : i++ )
if( obj.&name–>i == w ) return obj;
}
rfalse;
];

[ ParserError error_type;
switch (error_type) {
!SCENERY_PE: if(verb_word == ‹ aller ›) « Mais vous y êtes déjà ! »;
SCENERY_PE: if(action_to_be == ##Enter) « Mais vous y êtes déjà ! »;
}
rfalse;
];

Class Room has light;
Class Item;

Room potager « Dans le potager »
with
name ‹ potager ›,
description « Vous êtes dans le potager qui est proche du jardin. »,
s_to jardin,
;
Room jardin « jardin »
with
name ‹ jardin ›,
description « Vous êtes dans le jardin qui est devant la maison. Il y a un puits et un potager. »,
n_to potager,
e_to parc,
d_to puits
;
Room parc « parc »
with
name ‹ parc ›,
description « Vous êtes dans le parc à proximité du jardin. »,
w_to jardin,
;
Room puits « Au fond du puits »
with
name ‹ puits ›,
description « Du fond du puits, vous apercevez le jardin. »,
u_to jardin
;

Item boussole compass
with
parse_name [ w i d;
!if (verb_word == ‹ aller ›){
if (action_to_be == ##Enter){
w = NextWord();
d = IdObj(w);
for (i = n_to : i <= out_to : i++){
if( location provides i && location.i == d ){
self.door_dir = i;
return 3;
}
}
}
self.door_dir = 0; !?
return 0;
],
door_dir 0
;

[ Initialise;
lookmode = 2;
location = jardin;
];

Include « Grammar »;[/code]

C’est tout chaud… il y a surement des bogues, mais bon… ça à l’air de fonctionner.

Ca a l’air intéressant. Tu as regardé le code des extensions qui le font déjà ? (Par exemple « GoTo » par Toni Arnold, ou « GoNeighbour » par Alan Trewartha ? cf ici)

Tu devrais essayer de faire une extension avec ton code dedans, qu’on puisse juste faire Include « GoToAuraes » dans nos jeux ! Et je veux bien essayer de tester cette extension quand j’aurais le temps :wink:

Non, je n’ai pas regardé. C’est compliqué de se plonger dans le code des autres.
C’était juste pour essayer, ça n’a pas vocation à être une extension. Je l’ai juste testé avec ‹ aller › et avec mes librairies et les librairies anglaises. D’ailleurs, si cela fonctionne, il serait bien d’en restreindre l’usage à un seul verbe, au risque de conflits avec les autres verbes et possibilités de déplacement.
Si le joueur sait qu’il peut utiliser ‹ > Aller Lieu › (seulement ‹ aller ›, même pas ses synonymes) pour un lieu adjacent et nommé dans la description, cela doit être gérable.
Pour ça, il faut remplacer les deux | action_to_be == ##Enter | par | verb_word == ‹ aller › |.