How can I prevent Inform printing "time passes" when the player waits?

I have written location-specific responses to the command “wait”. They all work fine behind check statements, and as expected, the phrase “Time passes” comes up after the randomized canned response.

I feel like I could make this an instead statement with the “increment the turn count” as part of it but I’m reluctant to mess around with the time as I have a couple of counts going on in the game.

Am I on the right track or playing with fire?

the kitchen is a room.

instead of waiting:
	say "The longer you stay in here the hungrier you'll get.";
	increment the turn count.

“Time passes” displays as part of a report-stage rule, which run after check rules (you can see this for yourself by typing RULES, then WAIT, then seeing what rule fires right before the output), so that’s what’s going on. The good news is that time passing in terms of the game engine has nothing to do with whether or not that line gets displayed – you don’t need to muck about with manually increasing the turn count or running the scene-changing machinery or anything.

If you have a comprehensive set of check rules, you don’t need that report rule at all, so you can just knock it out with “the standard report waiting rule does nothing” (or “does nothing when the player is in REGION” or whatever if you need to cabin it).

1 Like

Thanks @DeusIrae that’s a succinct, and comprehensive answer.

I appreciate you taking the time to write it.

2 Likes

Check rules are best for things asking: should this action be allowed to occur? and printing an appropriate error if it shouldn’t. If the thing you want to vary is the output, options include:

After waiting [ when condition X applies, as appropriate ]: say "zzzzz...."

After rules automatically stop the action unless they’re written to explicitly continue the action so the report rules are never reached.

Or it could be done in a Report rule.

Report waiting [ when condition X applies, as appropriate]: say "zzzz...."; stop the action.

Or you could replace the standard message:

The standard report waiting rule response (A) is "zzzzz...".

Simple conditionals could be built into that, e.g., "[if the location is the echo chamber]ZZZZZ[else]zzzz[end if]..."

or it’d be possible to override it in the issuing the response text activity, which I mention for completeness, but that’d be somewhat gratuitously complicated instead of using Report or After rules.

for issuing the response text of the standard report waiting rule response (A) : say "zzzzz...";

Those could have conditions, and there could be any number of them, but sort of like After rules, the only the first matched “for” rule of an activity will run unless that rule has continue the activity.

3 Likes

Thanks @Zed, I hadn’t thought to look at it that way before. it makes perfect sense.