To say X

Yeah, you want to be careful of modifying variables in a “to say” phrase because Inform will sometimes expand it to check if it’s empty or whatever, without actually saying it. So you can’t depend on it being run only once. IIRC you can use “if expanding text for comparison purposes” or something like that? Aha, yeah: Very odd bug -- mine or Inform's? - #4 by zarf or How to be sure of whether an action has taken place, and thus time should tick? - #5 by drpeterbatesuk or probably a bunch of other topics. Unfortunately that’s not in the documentation anywhere, I don’t think: you’d have to actually read the Standard Rules to find it.