inform 7:why won't my calling action work

[code]Calling is an action applying to one thing.

Understand “call [anything]” as calling.
Check calling:
If the noun is the goose: say "[if the player is the goose]you can’t call yourself."instead;
If the noun is the goose: say “[if the player is human]the goose comes happily waddling in.”; move the goose to the location.;instead;
If the noun is human: say "[when the player is human]your already here."instead;
If the noun is human: “[if the player is the goose] say You hiss and shriek so your human will come. Human comes running into the room clearly concerned for your well being.”; move the human to the location.;instead;
If the noun is star: say "[if star is in light blue liquid]The horse’s body twitches."instead.
Report calling:
say “The [noun] does’nt come when you call.”

Instead of calling the goose when the goose is in the cage: say “Even if the goose wanted to come to you, it is in a cage and can’t get out.”[/code]

Are you trying to call something which is in a different room than the player? If so, I think you need to place it in scope; otherwise, the parse doesn’t recognize it. Also, I think you need to define the action so that it applies to a visible thing, rather than a thing; otherwise, it would require that the object of the action be not only visible but reachable.

Robert Rothman

Edit: One other point: you may want to change the parts of your code which actually move things (i.e., where the calling is successful and the goose, or whatever, is moved to the location) so that they operate as part of a carry out rule rather than a check rule.

To make actions apply to things that are not normally in scope you both have to

  1. define the action as applying to a “visible” thing (which oddly enough means that the action applies even to things that are NOT visible …)
    and
  2. define the commands for the action using the understand token “[any thing]” as TWO words ("[anything]" as a single word will NOT do).
    Thus:

[code]Calling is an action applying to one visible thing.

Understand “call [any thing]” as calling.[/code]

Is condition 1) up there, with “visible” seemingly meaning “visible or invisible”, a bug? Or does it make sense in some obscure way?

“Visible” means “in scope”. It’s the opposite of “touchable” which requires that the player can touch the object for the action to work. It makes more sense when the scope is limited to the current room where it means what it says, but if you widen the scope to every object in the game its meaning becomes a bit less intuitive.

There’s a suggestion that the wording should be changed: inform7.uservoice.com/forums/573 … e-in-appli

I was stuck on this same problem today. Thanks for the explanation!

In any case, it’s kind of against the intended purpose of “check” rules to actually move things around inside them. If I were writing this, I’d rather break your rule into several pieces, something like:

Calling is an action applying to one visible thing. [Here, "visible" means "not necessarily touchable".]
Understand "call [any thing]" as calling.

First check calling the player: instead say "You're already here."
Check calling when the noun is in the location: instead say "[The noun] is already here."
Check calling when the noun is in a closed cage: instead say "Even if [the noun] wanted to come to you, it is in a cage and can't get out."
Check calling star when star is in light blue liquid and star is visible: instead say "The horse's body twitches."
Check calling: if the noun is not the human and the noun is not the goose, instead say "[The noun] doesn't come when you call."

Carry out calling: move the noun to the location.

Report calling the goose: instead say "The goose comes happily waddling in."
Report calling the human: instead say "You hiss and shriek so your human will come. Human comes running into the room clearly concerned for your well being."
Report calling (this is the default report calling rule): say "[The noun] arrives."

You could, of course, combine the various check rules together, and the report rules as well – in fact, that would be a good idea if you want full control on the order in which the various checks are made. But I’d still recommend maintaining the check / carry out / report distinction.