Trouble with "doing something other than..." syntax

Greetings once again, fellow Informians.

There is something else that I have been trying to figure out, but I have been stymied at every turn. So, let’s say I have the following line:

After doing something other than kissing Marie or giving the rose to Marie when Marie is visible:

For some reason, when I try to compile, I get this problem message:

There are a number of things that puzzle me here. Firstly, why is this referencing the Standard Rules? I suspect this means that I am doing something horribly wrong, thus threatening to tear apart the fabric of the universe, but for the life of me I cannot figure out what it is. “doing something other than kissing Marie when Marie is visible” or “doing something other than giving the rose to Marie when Marie is visible” are both fine, but putting them together somehow borks things. And I am confused by the text of the problem message itself. Why is it interpreting “doing something other than kissing Marie” as a separate action, apart from “giving the rose to Marie”? It should be "doing something other than (kissing Marie || giving the rose to Marie). I’m guessing that’s what the problem is here, but I have no idea how to fix it.

To make matters worse, I’ve seen syntax like this before. In Example 47 in the Inform manual (coincidentally, found in Section 4.7), there is this line:

Instead of doing something other than looking or sleeping when the player is awake:

I’m trying to figure out how this is any different from what I’m trying to do. The only difference I can see is that my actions require an object (Marie). But I can’t see why that would matter, since both actions work here singly. This must be something else I do not yet understand about I7.

For reference, the entirety of the code that I pulled the above line from is as follows:

[code]An attitude is a kind of value. The attitudes are expectant, bored, and impatient.

The Garden is a room. In the Garden is a supporter called the table. On the table is a rose.

Marie is a woman. The description of Marie is “Stunning as ever.” Marie has an attitude. Marie is expectant.

When play begins:
Marie enters in one turn from now.

At the time when Marie enters:
now Marie is in the Garden;
say “Your girlfriend Marie walks out of the house and into the garden. She looks at you expectantly.”

Instead of kissing Marie:
say “You kiss Marie lightly on the cheek. She smiles, and her eyes glow in that way that has always made you weak in the knees.”;
end the story saying “You have made Marie happy.”

Instead of giving the rose to Marie:
say “You hand the rose to Marie, suddenly feeling bashful for some reason. She takes it with a smile and then draws closer to kiss you.”;
end the story saying “You have made Marie happy.”

After doing something other than kissing Marie or giving the rose to Marie when Marie is visible:
if Marie is expectant:
now Marie is bored;
say “Marie frowns ever so slightly and casts you a sidelong glance before turning away.”;
stop the action;
if Marie is bored:
now Marie is impatient;
say “Marie looks over her shoulder at you and sighs loudly.”;
stop the action;
if Marie is impatient:
say “Marie gives you one last look before shaking her head and walking back into the house.”;
end the story saying “You have disappointed Marie.”
[/code]

This is just a little test case I put together to test the syntax (and to clear my head a bit), and to see if maybe I couldn’t isolate the problem. I am aware that, in this example, I could simply replace the problematic line with “After doing something when Marie is visible:” and this would act as a catchall to catch the two actions I have not specified, but the point of this was to figure out why syntax that seems like it should work is not working.

Anyway, this is the other thing that has been bugging me lately, in addition to the door problem. If anyone could shed some light on the matter, I would be grateful.

Inform is fussy about what it allows in “other than” conditions. Basically only one object is allowed (and must be common to all the verbs).
So “Instead of doing something other than kissing or examining Marie” would be permissible.

But “Kissing or giving the rose to Marie” is not allowed, because in “giving the rose to Marie” the noun is the rose. (Marie is the second noun.)

You can create a kind of action:

Kissing Marie is romance. Giving the rose to Marie is romance.
Instead of doing something other than romance when Marie is visible:

The first part of the error message is certainly unhelpful—it seems to be referring to the definition of “visible” in the Standard Rules, which isn’t the problem here. But I suppose the second half of it gives some sort of clue what the problem is.

Ah, I see. Yes, that makes sense now that you explain it, and in fact I think I now recall reading something to this effect in the manual. Apparently the journey from my subconscious to my conscious mind was too arduous for this little tidbit to make.

Thank you once again for the insight! My understanding of I7 is gradually improving thanks to the help of the good folks here.

Reported the bug.

As I say there, there was basically the same issue in a previous build with a different combination of actions–the error message said that it looked like you were trying to list actions and then said each individual one was OK. My guess is that what’s happening is that Graham has to add lots of different cases to the compiler to catch the various unallowable combinations of actions and give the right error message, and you found a new combination he hadn’t thought of yet (one-noun action + two-noun action with the second noun being the noun from the previous action). Also somehow the use of “visible” in the rule sent Inform off looking at the line in which the Standard Rules defined “visible.” But the fabric of the universe is unthreatened, it’s just that the little person inside the compiler who prints the error messages is confused.

Thanks, Matt! I was actually wondering where one might go to report bugs like this–as it did seem that the error message was a bug of sorts–but I see you’ve taken care of that. But it’s good to know this information.

I was thinking about this, and I realized that I have run into this problem before, but with an “Instead of (doing a verb) to someone or (doing a verb with a noun) to someone” rule. In that instance, the error message tells you exactly what the problem is. It’s just the “something other than” verbiage that seems to have not been covered yet. I think that’s what was lodged in my subconscious but failed to burble up to my conscious mind.

That is indeed a relief to know. :smiley:

I always assumed that Graham was the little person inside the compiler. He certainly sounds like Graham.

I guess, in a way, he is.

Maybe my lack of inform 7 experience limits my perception of the obvious to you, but what was the solution? I hit the exact same problem, but swapping the noun in `After giving the invitation to the woman in blue…’ to the below, does not seem to solve it.

After giving the woman in blue the invitation when the player has the invitation: say "[a]Welcome. Let me give you the run down on the activities.[r][paragraph break]"; say "She coaxes you out of the doorway and into the room proper as she points out various areas.[paragraph break]"; wait for any key;

Edit: (to answer my own question)
It seems like my use of woman', which already had a definition, was confusing. Using a name instead ofwoman in blue’ seems to solve this issue.

The problem was the way you were referring to the giving it to action. When you refer to that action in source code, it has to be “giving [something] to [someone]” rather than the other way around. So if you wrote “After giving the invitation to the woman in blue…” it would work. This compiles:

[code]Lab is a room. The woman in blue is a woman in Lab. The player carries an invitation.

After giving the invitation to the woman in blue when the player has the invitation:
say “Welcome. Let me give you the run down on the activities.[paragraph break]”;
say “She coaxes you out of the doorway and into the room proper as she points out various areas.[paragraph break].”[/code]

(I stripped out the other stuff like [r] and [a] and “wait for any key” just so I could get a little stub that would compile.)