ON POSTING: Looks like jrb came in with a better explanation of what’s going on with the touchability ceiling while I was typing! One thing that helps here is to type “actions” before typing the command that you’re testing–this shows the action that is actually getting processed.
The smelling action and listening actions are a bit of a weird special case. They take one noun so they aren’t really intransitive.* But the player can also type “smell” or “listen” by themselves, so those commands have to be understood too. The Standard Rules take care of this with a rule for supplying a missing noun:
[code]Rule for supplying a missing noun while an actor smelling (this is the ambient odour rule):
now the noun is the touchability ceiling of the player.
Rule for supplying a missing noun while an actor listening (this is the ambient sound rule):
now the noun is the touchability ceiling of the player.[/code]
So if you type “listen” or “smell” by itself, the action will be converted into an action on “the touchability ceiling of the player,” which is almost always the room the player is in. (If the player is in a closed container, that’s the touchability ceiling, I think.) That’s why the action is smelling the Writer’s Office. “Instead of smelling” doesn’t do anything different because it’s functionally the same as “Instead of smelling something”–the noun is still the Writer’s Office, so the reaching outside rules get checked for it.
The problem you’re having with specific and general rules concerns rule order, I think. If I try combining a rule for containers/supporters with a rule for the swivel chair, like this:
[code]A rule for reaching outside of a supporter:
if smelling:
allow access;
if listening:
allow access.
The swivel chair is a vehicle.
Rule for printing room description details of the swivel chair:
do nothing instead.
A rule for reaching outside of the swivel chair:
if the noun is John Diddling:
allow access;
if smelling:
allow access;
otherwise:
say “You’ll have to get off your lazy butt.”;
deny access.
The Writer’s Office is a room. The swivel chair is here. The player is here.
The bullpen is north of the Writer’s Office. “Nice place. Mr. Jones keeps it that way.”
John Diddling is a man in the Writer’s Office. “Stocky”.
Instead of smelling the Writer’s Office:
say “Stinks.”
Instead of smelling the bullpen:
say “Smells nice. Mr. Jones, the secretary, keeps it better than you keep your office.”[/code]
then, if I look up the reaching outside rules in the Rules tab of the index, it shows that the rule for reaching outside the swivel chair runs before the rule for reaching outside a supporter, because the swivel chair is more specific than “a supporter.” You can flip this around by changing your general rule:
A rule for reaching outside of a supporter when smelling or listening:
allow access.
This now shows up as more specific than the rule for reaching outside the swivel chair, because a rule with a “when” clause counts as more specific than a rule without one. So if you try sitting in the chair and smelling, you’ll get your message. (In cases where you want one rule to run first and you can’t tweak it like this, you can just write “First rule for reaching outside…” and that will make it run first.)
*Actually in the latest version of Inform both these actions are defined as “applying to nothing or one thing.” This appears to be something that only Graham Nelson understands.