[Inform 7] Limiting multiple commands

Is there a way to limit multiple commands? I would like to make the player wait in a room for 10 turns, and not just be able to type “z. z. z. z. z. z. z. z. z. z”

I don’t know the answer, but I can offer two comments.

First, it’s extremely unlikely the player will think to try anything of the sort, unless (a) you’ve just told him he’ll have to wait for ten turns, (b) he believes you, and © there’s nothing interesting to try while he waits. In most well-implemented rooms, there will be things to do even if he knows he can’t leave. But why would you tell him that? Even if he’s strapped in the dentist chair, why not leave it a bit vague how long it will be before the dentist returns with the pliers and the chisel?

Second, it’s often a bad idea to try to keep the player from doing the natural things that a player might normally expect to be able to do. There are certainly occasions when you may have a good reason to do this. (There’s a game floating around, I’m sure somebody will tell us the name, in which the ‘examine’ command is not implemented at all.) But in my personal opinion, trying to constrain the player’s actions too narrowly runs against the grain of interactive fiction. Also, I’m pretty sure some players will find it annoying. ‘Thou shalt not annoy the player’ is not a commandment graven on a stone tablet, but even so…

Them’s my 2 cents, anyway.

This isn’t even a matter of constraining the player’s actions, but the way they’re typed. People are now used to the fact that "z.z.z " is roughly the same as "z z z ". You wouldn’t be changing the intent by blocking off the former option. It’s not even any easier to type, really.

If you want to do this thing, and like Jim and zarf I advise against it, you might look at this thread. If you set a flag with an “after reading a command” rule, take it off at the end of the “every turn” rules, and check it in a special rule that executes before any of the action rules, you can (if I’ve done it right) check whether you’re executing the first command entered in a sequence or a later command.

(Warning: no one more competent than me ever did check that code, so there might be something funny going on; and I don’t know if it prevents time from advancing, which would be important.)