Neutral Library Messages: extension beta

I’m working on an extension to replace the least-liked library messages with better ones that a) don’t make dangerous assumptions, b) don’t contain inappropriate narrative tone, and c) do better at explaining what went wrong and how to fix it.

Ideas cribbed from hither and yon, although a special shout-out to Sara Morayati who nicely catalogued many of the offenders last year.

This requires the latest version of Default Messages by Ron Newcomb (which, note, is different than the old Default Messages by David Fisher). It’s very incomplete as far as documentation, support for other extensions, etc., but since parser messages can be such tricky beasts to write, I wanted to get some feedback. I would love to hear if any of these seem like they’re not going to work in certain contexts or will be otherwise problematic, or if you have examples of better wordings.

Meat of the extension pasted below; or download here.

Oh: I’d like to ultimately address the parser/narrator distinction by having “Undo is not supported” styled differently than “Bob goes east,” and so on, but doing so presents tricky challenges and so is not addressed in this version.

[The main complaints levied against the standard library messages are as follows:
 -- They sometimes imply a certain tone of wry amusement which descends from the Infocom/adventure era, and which is not always appropriate to modern works of IF.
-- There is not a clear distinction between messages narrating story world events and those giving parser refusals, leading to a muddying of the difference between the author's voice and the default system messages.
-- Error messages often do not contain information instructing players how to better restate their command.
-- They can sometimes contradict the story world, as in the assumption "That's plainly inedible," or mislead the player about a course of action, as in "This dangerous action would achieve little."
-- Inconsistencies in style, such as whether command examples are given in CAPS or 'quotes', or which messages are wrapped in square brackets and what that signifies.

Section - Better Instruction

[Some messages do not give the player enough information about why their command failed, or what the expected input form is.]

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
--	14	"Nothing to correct. 'Oops' or 'O' followed by a word corrects a single misunderstood word in the last command." ["Sorry, that can't be corrected."]
--	16	"Too many words. 'Oops' or 'O' corrects a single misunderstood word in the last command." ["'Oops' can only correct a single word."]
--	23	"In some stories, you can type CHARACTER, COMMAND to give someone else an order; but I couldn't understand what you said in that context." ["You seem to want to talk to someone, but I can't see whom."]
--	25	"In some stories, you can type CHARACTER, COMMAND to give someone else an order; but I couldn't understand some of what you said before the comma in that context." ["To talk to someone, try 'someone, hello' or some such."]
--	27	"I can't understand your command. Most commands are a verb followed by a noun." ["I didn't understand that sentence."]
--	28	"I can't understand your entire command, although the first part matched the action [ignore library line break]" ["I only understood you as far as wanting to [ignore library line break]"]
--	29	"I can't understand your entire command, although the first part matched an action I expected to include a number." ["I didn't understand that number."]
--	44	"That would exclude everything you could [the quoted verb]." ["There are none at all available!"]
--	67	"Part of your command is not a physical part of the story world, so you can't act on it in that way."  ["You must name something more substantial."]
Exiting action	1	"You're not inside something. To leave this location, try a direction or 'out'." ["But you aren't in anything at the moment."]
climbing action	1	"[That-Those noun] can't be climbed in that way. Sometimes a direction like 'up' or 'down' works instead." ["I don't think much is to be achieved by that." <-- This is to help address a common problem in poorly implemented works with something like a staircase and no support for CLIMBing it.]
taking action	10	"[That-those noun] [is-are] just scenery, and can't be taken." ["That's hardly portable."]
taking action	11	"[That-those noun] can't be taken in this story." ["That's fixed in place."]

Section - Generic action rejections

[Some actions, such as taking, directly interface with the world model and thus can fail with specific explanations as to why. But actions without a detailed world model supporting them can't know whether the player's request is categorically impossible (>DRINK SKY), plausible but not implemented (>DRINK STREAM), or simply not being tried with the correct grammar (>DRINK FROM STREAM).

Unfortunately, many of the default messages attempt to guess which of these situations has arisen, sometimes leading to messages that are counterfactual ("That's plainly inedible") or, more dangerously, misleading ("Violence isn't the answer to this one"). Ideally, these messages should refuse the command without implying anything about the possibility or desireability of the requested action. In addition, since we don't know anything about the author's usage of the verb in question, we can't recommend a better command to try.

Ideally, of course, an author implementing a non-standard verb will replace the default message with his own instructions, but we can't rely on that.

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
attacking action	1	"You can't attack [that-them noun], or can't do so in that way." ["Violence isn't the answer to this one."]
burning action	1	"You can't burn [that-them noun], or can't do so in that way." ["This dangerous act would achieve little."]
buying action	1	"You can't buy [that-them noun], or can't do so in that way." ["Nothing is on sale."]
Cutting action	1	"You can't cut [that-them noun], or can't do so in that way." ["Cutting that up would achieve little."]
Drinking action	1	"You can't consume [that-them noun], or can't do so in that way." ["There's nothing suitable to drink here."]
Eating action	1	"[if noun is a person]You can't normally consume other characters.[otherwise]You can't consume [that-them noun], or can't do so in that way." ["There's nothing suitable to drink here."]
rubbing action	1	"You can't rub [that-them noun], or can't do so in that way." ["You achieve nothing by this."]
setting it to action	1	"You can't set [that-them noun] to something, or can't do so in that way." ["No, you can't set that to anything."]
singing action	1	"You can't sing in this story, or can't do so in that way." ["Your singing is abominable."]
swinging action	1	"You can't swing [that-them noun], or can't do so in that way." ["There's nothing sensible to swing here."]
throwing it at action	2	"You can't throw [the noun] at [the second noun], or can't do so in that way." ["You lack the nerve when it comes to the crucial moment."]
Tying it to action	1	"You can't tie [that-them noun] to something, or can't do so in that way." ["You would achieve nothing by this."]

Section - NPC action rejections

[Using verbs on people is problematic, since player expectations are so much higher. For this reason the library blocks many actions that are allowed on other objects. Lacking a valid physical objection, these messages fall back on social ones, like "That would be less than courteous." But these messages make assumptions about the player character which may not be appropriate.]

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
[Most of these actions fail, so we must find a neutral way to decline to perform them.]
pulling action	4	"You can't normally pull other characters." ["That would be less than courteous."]
taking action	3	"You can't normally pick up other characters." ["I don't suppose Bob would care for that."]
Turning action	4	"You can't normally turn other characters." ["That would be less than courteous."]
showing it to action	2	"Showing [that-them noun] to [it-them of second noun] may not be the best approach; you might try to ASK or TELL [it-them of second noun] ABOUT [it-them of noun]."  ["Bob is unimpressed."]
giving it to action	3	"Giving [that-them noun] to [it-them of second noun] may not be the best approach; you might try to ASK or TELL [it-them of second noun] ABOUT [it-them of noun]." ["Bob doesn't seem interested."]
pushing action	4	"Try expressing your anger in another way." ["That would be less than courteous."]
touching action	1	"Try expressing your curiosity in another way." ["Keep your hands to yourself!"]
squeezing action	1	"Try expressing your affection in another way." ["Keep your hands to yourself."]
Kissing action	1	"Try expressing your affection in another way." ["Keep your mind on the game."]
Waking action	1	"You can't wake [the noun], or can't do so in that way." ["That seems unnecessary."]

Section - Generic action acceptance messages

[Some actions succeed by default. We want to take care to describe these successes in the vaguest possible terms, so as not to contradict any author-written text. Even the cautious default for some of these, "Nothing obvious happens," seems too suggestive that something non-obvious might be happening elsewhere. The default examining message has been very slightly softened, to reduce the incongruency of rare objects being called "nothing special," and to bring it in line with the other default sensory messages.

Conversation actions that succeed mean the parser must admit the action took place, without implying anything about the NPC's reaction: "The detective is unimpressed" can be particularly misleading if you've just shown him a bloody weapon. The solution adopted here is to narrate the player's action, not the NPC's response.]

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
squeezing action	2	"You squeeze [the noun]." ["You achieve nothing by this."]
pushing action	3	"You push [the noun]." ["Nothing obvious happens."]
pulling action	3	"You pull [the noun]." ["Nothing obvious happens."]
turning action	3	"You turn [the noun]." ["Nothing obvious happens."]
examining action	2	"You see nothing unexpected about [the noun]." ["You see nothing special about Bob."]
thinking action	1	"Time passes." ["What a good idea."]
asking it about action	1	"You learn nothing new."  ["There is no reply."]
telling it about action	2	"You learn nothing new." ["This provokes no reaction."]
asking it for action	1	"You aren't successful." ["There is no reply."]
answering it that action	1	"You speak." ["There is no reply."]

Section - You Can't See Any Such Thing 

 [This famous message has frustrated many. Part of the difficulty is the wide variety of circumstances it can appear under. From the player's perspective, this message appears when she tries to use a verb with
	a) something neither mentioned nor implemented (like the sky)
	b) something mentioned in descriptive text but not implemented
	c) something implemented but not given the specific word used as a synonym
	d) a misspelled word
	e) a word that mistakenly is understood as part of the direct object, rather than a word in the grammar line, as in >TAKE INVENTORY NOW which is matched as {take | inventory now}.
	f) something that exists but has never been seen and is not in scope
	g) something previously seen but no longer in scope, perhaps without the player realizing it's no longer available

In nearly all of these cases, the player believes the object they're referring to should exist, meaning the message is often frustrating. 

Distinguishing between these subtle cases can be difficult. For instance, short of capturing all text output and analyzing it, there is no way to distinguish A from B. Perhaps the easiest distinction to make is between commands containing dictionary words and those that don't, which seperates A-D from E-G. Some IF systems implement this by telling the player when she's used an invalid word. The classic argument against this, that sneaky players can use it to figure out the existence of yet-unseen objects, seems both a Zork-era concern and one vastly outweighed by the benefits of actually telling the player why her command didn't work. A more pressing objection is that messages of this sort can draw attention to the primitive nature of the parser ("I don't know the word 'love.'") I've tried to phrase the message below in the best light possible.

Several additional extensions can help break things down further. "Remembering" carves off G from E-F, while "Poor Man's Mistype" can sometimes address D. "Smarter Parser" can sometimes offer helpful messages for certain types of A command related to body parts and common environmental features like the sky. Eric Eve's Text Capture could be a tool in distinguishing A from B.

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
--	30	"[if position of non-dictionary word is 0]That's not something you can see now, or I misunderstood you.[otherwise]You don't need to type the word '[the misunderstood word]' in this story." ["You can't see any such thing."]

[Here are some things you can see: [the list of visible things which are not the player].]

Section - Personality-neutral parser

[Many parser messages are written in too strong of a narrative voice, which can clash with the author's prose. ]

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
--	9	"You can't see anything." ["It is now pitch dark in here!"]
--	10	"No command given." ["I beg your pardon?"]
--	11	"Can't 'undo' on the first turn." ["[You can't 'undo' what hasn't been done!]"]
--	12	"Your interpreter does not support multiple 'undo' commands in a row." ["Can't 'undo' twice in succession. Sorry!"]
--	15	"Nothing to correct. 'Oops' or 'O' followed by a word corrects a single misunderstood word in the last command." ["Think nothing of it."]
--	21	"There is not a command to repeat." ["You can hardly repeat that."]
--	70	"You can't 'undo' in this story." [The use of UNDO is forbidden in this game."]
Eating action	2	"You eat [the noun]." ["You eat [the noun]. Not bad."]
Entering action	1	"You're already [if noun is a supporter]on[otherwise]in[end if] [the noun]." [But you're already in the car.]
Examining action	1	"It's too dark to see." ["Darkness, noun. An absence of light to see by."]
Giving it to action	2	"You're already holding [it-them of noun]." ["You juggle [the noun] for a while, but don't achieve much."]
Jumping action	1	"You jump up and down." ["You jump on the spot, fruitlessly."]
Looking under action	1	"It's too dark to see." ["But it's dark."]
pushing it to action	3	"There is no exit in that direction." ["Not that way you can't."]
putting it on action	3	"[The second noun] doesn't need to hold anything in this story." ["Putting things on the car would achieve nothing."]
putting it on action	4	"[if we are dropping]You can't drop yourself.[else]You can't put anything on [the second noun] while you're holding [it-them of second noun]." ["You lack the dexterity." <-- Also runs in the "can't drop yourself" rule.]
removing it from action	1	"You can't, because [it-they of noun] [is-are] closed." [It is unfortunately closed.]
searching action	1	"It's too dark to see." ["But it's dark."]
sleeping action	1	"You can't sleep right now." ["You aren't feeling especially drowsy."]
taking action	2	"You can't take yourself." ["You are always self-possessed."]
telling it about action	1	"You can't tell yourself about something." ["You talk to yourself a while."]
throwing it at action	1	"You can't throw [that-them noun], or can't do so in that way." ["Futile." <-- for inanimate objects]
touching action	3	"As expected." ["If you think that'll help." <-- for TOUCH SELF]
Waking up action	1	"As far as you know, you're already awake." ["The dreadful truth is, this is not a dream."]
waving action	2	"You wave [the noun]." ["You look ridiculous waving [the noun]."]
waving hands action	1	"You wave." ["You wave, feeling foolish."]

Section - Performance

[This small set of verbs normally produce jokey or out-of-character responses. These may be read as something the player is directing his character to say, or something he's expressing himself. Here, we simply say that the action does nothing under the current circumstances. ]

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
saying yes action	1	"Saying yes here has no effect." ["That was a rhetorical question."]
saying no action	1	"Saying no here has no effect." ["That was a rhetorical question."]
saying sorry action	1	"Saying sorry here has no effect." ["Oh, don't apologise."]
swearing mildly action	1	"Swearing here has no effect." ["Quite."]
swearing obscenely action	1	"Swearing here has no effect." ["Real adventurers do not use such language."]

Section - Less Excited parser

[Some of the default messages end with exclamation points, which can make the parser seem breathless on occasion. Most of these messages are replaced elsewhere, but for the remainder:]

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
--	31	"You seem to have said too little." [This error may possibly be deprecated now, since I can't find where in the library the error type TOOLIT_PE is ever assigned.]
--	32	"You aren't holding that."
--	36	"You excepted something not included anyway."
--	43	"Nothing to do."
wearing action	1	"[if noun is a person]You can't normally wear other characters.[otherwise]You can't wear [that-those noun]."
wearing action	2	"You're not holding [that-those noun]."
wearing action	3	"You're already wearing [that-those noun]."

Section - Story, not Game

[Modern terminology prefers calling an IF a story, not a game. This has been adopted in the main I7 structures, but not yet these messages.]

Table of custom library messages (continued)
library-action	library-message-id	library-message-text
--	70	"The use of UNDO is forbidden in this story."
requesting the pronoun meanings action	4	"no pronouns are known to the story."
requesting the score action	1	"[if the story has ended]You scored [otherwise]You have so far scored [end if][score] out of a possible [the maximum score], in [turn count] turn[s][ignore library line break]"
Verifying the story file action	1	"The story file has verified as intact."
Verifying the story file action	2	"The story file did not verify as intact, and may be corrupt."

Section - Player Description

The description of the player is usually "As expected." [Note: the library still contains Miscellaneous 19 for examining the player, but this is apparently no longer used.]

Great – Many thanks!

Great job Aaron, thanks!

I’m not sure about your “jumping” message, though. You probably remember a comp game a couple of years ago where the PC starts out strapped to a table but is still able to “… jump on the spot, fruitlessly.” In this case, changing the message to “You jump up and down” isn’t much better. Also, since jumping is blocked in the check phase and therefore not technically successful, I don’t think it should be reported as such. Of course the other problem is that sometimes jumping – across a chasm, for example – is a valid idea, but jumping in place is useless. Obviously, both of these are errors of ommission on the part of the author, but as you said:

How about:

… and moving it to the “Generic action rejections” section? Maybe the word “unnecessary” rather than “unhelpful” would be better. Clearly the idea of “nuetral prose” is itself subjective. :slight_smile:

A great extension idea! Of course, I have many detailed criticisms. :wink:

While I love the removal of the atrocious “There are none at all available!”, with its exclamation mark, I don’t think the message replacing it is very useful.

How can ‘all’ exclude anything? “That includes nothing you could take.” would be better.

I must admit that I don’t really like message like these:

Why would you replace a message that describes my singing with a message that tells me I cannot sing? And what does it mean to claim that I cannot sing “in that way”? You probably mean that I cannot sing “using that command”, but this is not entirely clear. Furthermore, this default message will have to be changed by every author who wants “sing” to do something somewhere or somewhen in the story, which seems to defeat the purpose of the extension.

For actions that can be performed but do nothing, I would prefer neutral descriptive messages like “You sing for a while.”.
For actions that are impossible, I would prefer something like “That is impossible.”. This sounds a lot better than the following kind of exchange:

Just “That is impossible.” or “You cannot drink yourself.” would be great.

This looks very nice.

I concur with Victor, especially about the response to “take all”; here I think we want something a little wordier, like “There is nothing available, or nothing available that matches that description.” (Technically, on some conceptions of logic, that’s equivalent to your messages, since “all” does exclude everything you can take when there’s nothing you can take. But that’s frightfully misleading.)

I’m also not sure I like the messages “You push the noun” etc. It makes it seems like something is happening when it isn’t, and might even lead the player to expect a change in the world state. “You push the noun, but nothing obvious happens” might be better. This isn’t a problem for “You sing for a while,” because that doesn’t sound like it’d do anything.

I also think “in that way” might be better changed to something like “using those words.” Sometimes I can attack/burn/whatever something in exactly the way I’m trying, but I need to try a different command to do it. (For instance, I need to type KILL ORC WITH SWORD rather than CUT ORC WITH SWORD, or vice versa.)

Also, I think referring to the interpreter is probably a bad idea, and “quite” in response to “bother” is harmless – if someone types a swear, they’re expecting a silly response, aren’t they?

I see and even agree with most of Victor’s points.
With a few exceptions (or perhaps not—well, possibly):

Well, something like it is true however you choose to formulate a default message for this and all the other actions in the Standard Rules that are “only implemented in a minimal way”. They are not meant really to do anything, unless intercepted by instead rules (or implemented by individual authors).
However, “You sing for a while”, may still be preferable. Since “You can’t sing in this story” is really just a customized variety of “That’s not a verb I recognize”. Players/readers new to IF might well wonder why actions that are not implemented sometimes give rise to a “You can’t do that or can’t do so in that way” message, sometimes to a “That’s not a verb I recognize” message. Indeed, I fear it will give many the impression that they can successfully sing, buy, drink, swing, rub etc., if they only could guess in what way to do so. And that is an impression that might at worst make IF seem more plagued by guess the verb issues than it is.

Let’s just hope those swear words are taken out of Inform in one of the upcoming releases. Nothing Aaron can do with default messages will make this exchange any more desirable:

Just a joke, of course; but these commands are so superfluous. And is there anyone left in the world who swears by saying “bother” and plays interactive fiction?

Suppose I want to have something special happen when the PC sings in the church. All I need to do is write an “Instead of singing in the church” rule. That works fine when the default message, which will be shown in all other locations, is something like “You sing for a while.”. But if the default message is “You can’t sing in this story.”, the default message is suddenly made false by my new instead-rule, and I will have to change the default message. Otherwise, I will have exchanges like this:

This looks fantastic!

I also have doubts about the “or can’t do so in that way” messages, but it seems like most of them really need to be made specific for each story anyway. Just making the author aware of what they are may be enough to encourage further customization.

Would it be possible to have them all collapse to a single customizable message, “You can’t [verb] at this point in the story, or can’t do so in that way?” The author could choose to change that one message, and/or override specific actions that are relevant to the story.

It almost seems like this sort of extension would work better as a template for the author than as a usable piece of code.

I agree with Matt here:

Also – no disrespect intended – I’m tempted to write my own extension replacing all parser messages with:


Somehow I think that people who swear by saying “bother” would be more likely to play interactive fiction. But yeah, I hope these go away.

I didn’t say enough how much I like this idea – I remember getting annoyed at an author (actually I think I was beta-testing) at the default response to “think.” (I must have come straight from Galatea.)

Isn’t the issue with the default sing (and indeed jump) actions that they are actually, secretly blocked, whatever the default message might claim?

Maybe it’s me still thinking in TADS mode and wanting to implement verbs consistently where most Inform documentation seems to emphasise “instead” rules, but to my mind if I’m described as actually singing, I should be able to write a rule like:

After singing in the presence of Simon Cowell: say "Simon sighs. 'Probably... [italic type]the worst[roman type] performance we've heard all day.'"
But that isn’t the case.

Admitting that you can’t, in fact, sing by default may look ugly, but it’s the ugly truth.

All right, let’s make an extension that removes all the secret blocking rules and implements all the verbs in a normal way.

I think that’s hardly worth a standalone extension – it would just be a couple of …is not listed in the check… and …is listed in the report… assertions per unimplemented action. IIRC.

@Aaron: The new Plurality-like phrase [that-them noun] really should require the word “of” in there, like [that-them OF the noun]. This is because Plurality almost always requires the “of” due to this bug, and consistency makes learning & using said phrases easier. I’m currently updating Custom Library Messages which adheres to this (among fixing another few bugs) as well.

Thanks all for the comments. Keep them coming!

Oops-- overlooked that jumping is blocked, rather than allowed by default. I’ve pulled it in line with the other default rejection messages: “You can’t jump here, or can’t do so in that way.”

Yes, this is a good point: I wrote this while thinking of the other case in which this message appears, >TAKE ALL BUT APPLE or whatever. I’ve adopted Matt’s suggestion “There is nothing available, or nothing that matches that description.” to cover both scenarios.

As mentioned above, we shouldn’t narrate the action happening since it’s actually blocked by the library. You’re right that “in this story” was overstepping: I’ve changed it to “You decline to.” Which is essentially the same as the original message, but without any value judgements on the player’s vocal cords.

But we don’t know whether the action’s impossible-- just that the command the player typed didn’t work. As you point out, singing may well be possible if the player types, say, PERFORM ARIA, but we can’t know that here. This is what “or can’t do so in that way” is trying to get at. I share Felix’s concern that this might be dangerous in implying that there’s some other way to do what the player wants, but I think it’s equally dangerous to imply that there’s no way to do what the player wants. Very open to tweaking the wording of these messages to try to strike a balance.

Well, this is the reverse problem as above: technically, these things are happening since the actions succeed. I actually have no problem with actions that succeed but do nothing; if there’s no good reason to stop the player pushing or touching something, we’ll let him. We just don’t want to imply that there was a major change if there’s wasn’t, which is why I tried to make these as simple and declarative as possible.

I agree this is better in the case where there is actually a better grammar line for the player to try, but I feel like it’s more misleading if there isn’t, because it seems to imply a specific course of action (try typing different words) instead of a vaguer one (try something different). Hmm.

Why so?

Sure, but it sounds stuffy and British, which I’m trying to avoid. :slight_smile:

This is not a bad idea. One danger is that the player is going to see this aggregate message quite a lot, probably, so it may be better to instead go the other way and try to differentiate them more in a useful way. Food for thought…

Thanks for the explanation on this-- I’ll update the syntax accordingly.

For the “can’t do so in that way” messages: what do we think about something like:

This is less verbose and still hints that there might be another command to do the same job, although if there isn’t it could still mislead players into fruitless guess the syntax.

Well, that’s why I like “You push the noun, but nothing obvious happens”; it makes it clear that the pushing did happen but that nothing seems to have come of it.

Well, we could always go disjunctive; “You can’t (whatever), or at least not using those words.” I don’t know; it’s not very elegant.

I do feel that “in that way” somewhat falls between two stools; it suggests that you might be able to do it a different way. So if you can’t do it at all, it’s a little misleading, and if you can do it but need extra syntax, it’s also a little misleading. Of course default messages are by their nature compromises.

Too technical – imagine a new player who’s using some iPhone app or something that doesn’t support multiple undos. Reference to the “interpreter” will confuse them, I think. (For bonus points, imagine they’re playing Floatpoint. “If I have an interpreter, why isn’t he helping me talk to these people?”)

There’s also that very generic message telling you that an NPC failed to perform any action you asked him/her to perform: “[The actor] is unable to do that”.
Whatever the reason that action failed, whether the NPC can’t open a safe because it’s locked or he/she can’t sing or jump because those actions fail by default, the player is told simply that the NPC “is unable to do that”.

If you’re in the process of designing a new set of appropriately neutral library messages, is there still any reason not to use the same actor-based library messages for the player’s failed messages and the NPC’s?

Felix: that still has the problem of misleading players in a sequence like >JUMP (“You are unable to do that.”) when in fact >JUMP OVER CHASM is what they need to do next. The difficulty is the conflation of you the player (“You are unable to use that command.”) with you the player character (“Bob is unable to jump.”) Maybe it would be more accurate to invite the parser in and say something like “I am unable to direct your character to do that.” But that’s kind of a mouthful.

Matt: To me, “nothing obvious happens” always implied that something terribly interesting was going on somewhere else, if only I could figure out what this seemingly innocuous thing I pushed was connected to. Maybe that’s just me… good points about the interpreter, I’ll rephrase this.

It’s also not necessarily or even typically the case that the interpreter lacks support for the multiple undo feature. Older versions of the Inform library disabled it by default, until fairly recently. Try UNDO twice in Galatea or Bronze and then try it in Whom the Telling Changed.

I believe Zoom allows multiple undo commands even in games that do not support it, via a menu option, but this is not the norm and it is also outside the scope of this message - the game state is simply rolled back and the library has no opportunity to intercede or respond.