Inform Library 6/12 and Inform 6.33.1 for Unix go beta

If an Object has container and open and there is inside an Object with concealed or scenery, maybe he should display: You can see a box (which is open) here." instead of “You can see a box here.”

Include "parser.h"; Include "verblib.h";

Object room "room" with description "Room" has light;

Object -> box "box" with name 'box', has container openable open;
Object -> -> apple1 "apple1"  with name 'apple1', has edible concealed;
Object -> -> apple2 "apple2"  with name 'apple2', has edible scenery;

Object -> box1 "box1" with name 'box1', has container openable ~open;
Object -> box2 "box2" with name 'box2', has container openable open;

Object -> box3 "box3" with name 'box3', has container openable open;
Object -> -> apple  "apple" with name 'apple', has edible;

[ Initialise; location = room; ];
Include "grammar.h";
Release 1 / Serial number 140823 / Inform v6.33 Library 6/12-beta1 S

room
Room

You can see a box, a box1 (which is closed), a box2 (which is empty) and a box3 (in which
is an apple) here.

>open box
The box is already open.

>

In english.h: LanguageLM: Open: 4

Open: switch (n) {
		[...]
		4:  CSubjectVerb(actor,false,false,"open",0,"opens","opened"); print " ", (the) x1;
			Tense(", revealing ", " and revealed ");
			if (WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT) == 0) "nothing.";
			".";
		5:  CSubjectVerb(actor,false,false,"open",0,"opens","opened"); " ", (the) x1, ".";
    }

How target LanguageLM: Open: 4 to display “nothing.” I try and i can not display the message: “, revealing nothing.”
It seems as if Object container is empty, the message displayed is: L__M(##Open, 5, noun) else L__M(##Open, 4, noun). How WriteListFrom() can be equal to 0 in LanguageLM: Open: 4?
Not sure I’m clear!?

Isn’t keep_silent meant to silence a single action?

I don’t think so? In DM4:

The examples in the DM4 suggest that not.

Sorry, you have to remove them! I can use instead LanguageIsVerb(). It seems made ​​for that, but before i can use and test it, see the next message…

Try this:

Include "parser.h"; Include "verblib.h";

Object room "Room" with description "Room test" has light;
Object -> apple  "apple"  with name 'apple'  has edible;
Object -> apple1 "apple1" with name 'apple1' has edible;
Object -> george "George" with name 'george' has animate male proper;

[ Initialise; location = room;];
Include "grammar.h";
Release 1 / Serial number 140823 / Inform v6.33 Library 6/12-beta1 S

Room
Room test

You can see an apple, an apple1 and George here.

>george,

>george,xyz

>george,eat xyz

>george, eat
What do you want to eat?

>xyz

>

All is Wrong.

This is because there is no george.orders property. If you declared George like this:

Object -> george "George" 
        with name 'george', 
        orders [;
                "Hello!";
        ],
        has animate male proper;

George would then reply to anything you tell him with “Hello!”.

I think you’re reading it wrong. The Library clears keep_silent when the silenced action has finished.

Even so, shouldn’t the game say “There is no reply.”?

You’re right. I’ll take care of that.

It looks like there was a longstanding problem with order of operations in OpenSub() and with WriteListFrom() not checking things properly.

Okay, I think that’s it for the latest batch of bugs, Auraes. What’s next?

I think not, in library 6/11:

Release 1 / Serial number 140824 / Inform v6.33 Library 6/11 S

room
Room

You can see a box (which is closed) and a box1 (which is closed) here.

>open box

>open box1

>close box

>close box1

> 

Otherwise, what is the interest of keep_silent? Look at the examples in the dm4. Before , they always save the value of keep_silent.ks = keep_silent; keep_silent = true; <Close self>; keep_silent = ks;

LanguageLM: Examine: 1 “Darkness, noun. An absence of light to see by.”; => two spaces between noun & An?
LanguageLM: Enter: 2 " can " => Tense(" can ", " could “)?
LanguageLM: Go: 6 “nowhere.” => " nowhere.”?
LanguageLM: Insert: 10 SupportObj(x2,“on”,“in”), (the) x2, “.”; => SupportObj(x2,"on ",“in “)
LanguageLM: Lock: 1 (theActor) actor, " can lock.”; => Tense(” can ", " could ")?

Sorry, but the Object box is open but not empty. Object box isn’t equal to Object box2. There’s an Object ‘concealed’ and un Object ‘scenery’ in it:

OK… keep_silent = true: i’ll shut up.

Okay. Bug filed.

I was always taught when typing to put two spaces after a period, question mark, or exclaimation mark. Whether one does so or not these days is subject to much debate. There’s a compile-time option to contract these to one space after periods only or all three of these marks. I can safely leave these as-is.

Tense() call added.

Leading space added.

Trailing space added. It appears that the Library does not actually call L__M(##Insert, 10). That one is clearly intended for complaining that the bowling ball is too large to put into the pill bottle (for instance). Can you think of a way to cleanly and generally implement this or are we better off removing that response?

I thought that if a container contains a concealed or scenery object, that container should be reported as “empty” because such objects do not appear in room descriptions. If you have a box that’s just reported as open and another reported as empty, the player is given a clue that probably should not be given. Or am I misunderstanding this?

LanguageLM: Enter: 2 " can " => Tense(" can “, " could “)? You correct but you forgot space after can & could.
LanguageLM: Lock: 1 (theActor) actor, " can lock.”; => Tense(” can ", " could ")?

I don’t know. It’s not in library 6/11. My English is too bad to argue about this kind of question.

Just a quick message to tell you to keep up the good work, guys! Thanks for this deep testing and for the quick bugfixes, can’t wait to use the new version! :slight_smile: