I’ve really enjoyed IFcomp this year, but even so, I’ve found the need to resist posting questions about Dialog during this period a real strain on my garrulous nature. So I put such questions and comments as I had aside into a text file, which is why this question is rather long. I hope it doesn’t come over as a wall of whine.
Would you consider renaming (story noun) to (story subtitle) ? I think this would describe its purpose more clearly.
Looking through stdlib, I noticed that the “wait/z” command only prints a message, and doesn’t advance the game clock. Have I understood that correctly? If so, I’d like to suggest that it should, as that’s pretty much what the player’s asking the game to do, and (e.g.) waiting in one place to observe the patterns of patrolling NPCs is a reasonable problem-solving strategy that players would expect to be able to try.
If, on the other hand, you’d rather that waiting didn’t advance the clock/turn counter, then it seems only fair to change the message to make clear that time in the game world is not advancing, especially as the turn counter is not displayed by default.
I don’t know much about the z-machine, only that its resources are limited, so perhaps what I’m suggesting is too expensive, but would you consider making all actions call out to a (narrate #action) message?
This would offer a consistent way of changing the default library responses, a powerful means of changing the feel of a game without needing to tamper with the actual engine. I always liked the way Inform’s library_messages object facilitated this, and Dialog authors could essentially replicate the library_messages system by having a section at the end of their source code, e.g:
%% Default Responses (narrate #save) Your achievements have been noted, ensign. (narrate #drop) You carefully place (the $obj) on the clingpad. %% (because objects floating around in microgravity environments are a hazard.)
I also noticed that for those actions which only print a message, Dialog doesn’t distinguish between refusal and performance. Again, subject to the conservation of resources, should it?
A refusal, e.g. “You consider attacking (the $obj) but decide against it.” arguably represents a momentary impulse on the part of the PC, and can therefore be represented as taking no noticeable amount of time. Yet despite e.g. “You jump around for a while.” specificially saying that time has passed, it doesn’t do so.
If, despite being futile (at least, in terms of progressing towards a solution) perform jump did call (tick), then, say The Mother Superior, animated using (on every tick) would naturally respond to one of her novices jumping around – even if only with a default response – rather than remaining (buggily?) indifferent.
So Jump would become
(narrate [jump]) You jump around for a while. (perform [jump]) (narrate jump) (tick) (stop)
So (tick) would consistently be in the (perform [whatever]) part of an action.
I’m looking forward to seeing the source code for your comp entry with great interest.