In getting newconverse working, I had to make some small changes to both the roodylib and newconverse versions of SpeakTo. One thing I noticed was that in the regular library, variations of the command >HELLO (CHARACTER) do not take up a turn (I changed this for roodylib).
Whether or not a verb routine returns true determines whether a turn passes (if a turn passes, the turn counter increases, PrintStatusLine is run again, and event code is executed). It seems like the philosophy behind turns is that ineffectual commands shouldn't take up any game time, but important commands should. Like, the entirety of verbstub, I believe, returns false, as Hugo makes the assumption that >YELL-ing or >SLEEP-ing will just provide some snide answer and that is that. >HELLO (CHARACTER) does have a pretty meaningless default response, but the command does still set the speaking global, which seems pretty important.
This system presents several points of confusion, including:
- Any time you have to stop an action with a before rule, the "can't do" message will take up a turn while the regular action doesn't. Consistency cries! (maybe these are instances where verb routines should be replaced completely with something that always returns true)
- What's the best way to distinguish between an ineffectual command and a useful one? From the player's perspective, it can be pretty unclear.
Still, what is turn-worthy is one of those things I imagine Hugo inherited from Inform. Now that I'm much more comfortable with the idea of suggesting improvements for the library, it's worth nothing that, hey, if we think we can design a more consistent system, there's nothing stopping us. In the meantime, we can continue to tune the responses one verb routine at a time.