Making everything unmentioned; Otranto example

I was going through example 228 (“Otranto”) and the way to pull an object that has a rope tied to it seems a bit convoluted. But I’m not sure. Specifically the code has this:

After reading a command: now every thing is unmentioned.

I’m not sure I see why that has to be done and, further, this says “every thing” so in a large game it seems that this kind of looping and resetting would be problematic. So I’m guessing I’m seeing a bit of an Inform idiom here that I don’t understand.

Can anyone shed light on this?

There’s some discussion of this at . (Which is marked “resolved”, but no change seems to have made it into 6M62.)

As I note there, the implementation uses “mentioned” as a proxy flag for “already pulled by the chain of stuck-together things”. This works in the test case but can be fragile when debugging options are on.

However, my suggested fix is just to create a new property and use that. The flag must still be turned off for every possible item before an action is evaluated. For a small game, “now every thing is…” works adequately.

If I were using this sort of code in a large game, I would write a phrase that turned off the flag for every object that might be pulled on. This might be a kind-of-thing restriction, or I might just have a hand-edited list of statements.

EDIT-ADD: To answer the direct question: there’s no special idiom here. That line does exactly what you think it does.

For what it’s worth, I’m pretty sure that this line:

After reading a command: now every thing is unmentioned.

isn’t doing anything, since everything is going to be get set to unmentioned anyway when the declare everything initially unmentioned rule runs at the beginning of the turn sequence rulebook. At least, if I’m using the Skein right, commenting that line out has no effect on the results of the test case.

If you adopted zarf’s suggestion and created a new property, as he said, you would have to turn it off before an action is evaluated; it would be best to do that somewhere in the turn sequence rule (a First Before rule might be adequate, even) rather than After reading a command, because with a chained command like “n. pull rope” the After reading a command rules only run at the beginning of the chain, but you want the flag to reset before “pull rope” is evaluated.

That sounds right.

Not sure if I’m doing it right, but I tried this:

The first before rule:
	now every thing is not pull-processed.

And that leads to an infinite loop. Am I doing a “first before” rule correctly there? My search-fu in the manual for examples of this failed me.

Hmm. Does the infinite loop happen right away or when you try to pull something? If the latter, can you type “rules” and “actions” and then trigger the infinite loop?