Two new extensions for player happiness

This was really interesting to read. Some of your ideas might be really hard to implement, but I like your perspective on what the new player’s experience ought to be like.

I think Aaron’s main reason for choosing glulx is memory. These extensions take up a really big amount of memory, and they don’t add anything at all to the game world, so the idea is to leave the author with enough room to still make an interesting game. The z-machine has absolute memory limits - once you go past z8 format, you’re plumb out of space.

A few times you mentioned messages that are too general for your taste. I think the idea of spelling out “interactive fiction” is a good one, but to avoid talking about how “most” interactive fictions behave, it’s necessary for the author of each work to write something more specific. Off the top of my head, I can’t remember how easy it is to change Aaron’s messages, but it might not be too hard. So if I were to make a suggestion to Aaron based on your comments, I would request making the messages easier to customize (perhaps all that’s needed is documentation) rather than actually changing their text.

This is one of the points where it would be really great if the parser could handle it, but I’m not sure if it can. The problem is that the parser doesn’t know what objects have been mentioned unless a significant portion of the command was already parsed successfully. You can see how this leads to a catch-22.

I bet that one is fixable.

(…Skipping what looks like bug reports, which I’m not qualified to handle at this point…)

I’m not exactly sure what’s going on here, but there are two different ways to parse “NPC, text.” One is as a command, but the other is parsed as answering it that (i.e. “NPC, unrecognized text” parses as “say unrecognized text to NPC”) Probably the word ‘come’ was recognized as a word, but not as a valid command.

Anyway, once you get to “answering it that,” the parser is assuming that you want the PC to speak the words you typed - which is not all that unreasonable even in the case of giving a command. In this particular case I agree with you that “there is no reply” makes more sense as a response, but if I remember the earlier discussions correctly, Aaron was trying to make a distinction between actions that the PC refuses or fails to take, and actions that the PC takes with no result in the game world. “There is no reply” is a bit vague on the matter of what the PC actually did. Unfortunately, “You speak” isn’t very helpful either. Do you have any other suggestions?

I have a suggestion for your particular case, though. It sounds like you never intend to handle the “answering it that” action at all, so you might as well just tell the player something like “The statement that you intended to make to Atari was not recognized. Either it wasn’t a command that I can understand, or it was some other sort of conversation, which is not necessary in this game.”

I never liked that message either. Your suggestion seems better to me.

That’s a tricky one, but I agree with what you said elsewhere, that the message should tell you what exactly isn’t available. I think there is a response along the lines of ‘I don’t know the word “foo,”’ but it seems silly not to have the same thing for nouns that were recognized but are out of scope. Unfortunately, here again we run into some parser quirks. You might have a look at my “Lost Items” extension, though, which attempts to provide that kind of information. I have a feeling that “Lost Items” might not work for rooms, though. Hmm…

I’m not sure what situation this message was written for, but I bet it wasn’t this one. It’s possible this is a replacement for the horrible “That noun did not make sense in this context” error. Or not. Once again, you might have to delve into the inner workings of the parser to extract the necessary information. It’s possible you could write a Smarter Parser rule to handle this specific command, but I don’t know how general you could make it.

I think this is just one of the inevitable evils of spell checking. Maybe one day some heroic person will write a spellcheck extension that can do disambiguation:

>OPEN DOOR BAG Which do you mean, the door or the doggie bag?

You can fix the second part yourself. You don’t need to make the pit enterable, you just need to write an “instead of entering the pit” rule.

Well, I think that’s a good thing. In this particular example, the sentence “Most IF separates space into a series of locations, each containing a set of objects” is basically saying “This message might be wrong, but probably isn’t.” Well if the message isn’t wrong, you don’t need the first sentence, you can just go right into talking about how objects can be interacted with directly. If the message is wrong, the whole thing is useless and should be replaced by the author anyway. When it comes to developing a platform like this, I’m a big fan of going with sensible defaults that the end-developer can easily override. The sensible default in this case is to just state how most IF behaves, without putting in the unnecessary caveat that “Most IF behaves in this way.” This is basically a help system for new users, but e.g. you don’t go into the help in Diablo II and see something like “Most action RPG games have a quantity called health that goes down when monsters hit you.” You just see “This is your health.” Or you don’t see in the help for Microsoft Word “This is how most word processors behave.” You just see things specific to Word.

I do. Although I can certainly think of ways to handle this, if “go/walk to [something]” was understood as an action, which seems to be the case because I can write “walk to basement” to move into another room. So if the noun is an object in the location, the message could be made more specific. But that altogether depends on exactly how this stuff is actually handled, so I can understand if it is difficult.

Well I’m not sure about other suggestions, since I am just getting familiar with how to implement people in Inform at the moment. But “there is no reply” at least indicates a (non-)response from the IF world. I will probably handle “answering it that” at some point (my game is still a work in progress) although probably not for interactions with Atari, the dog.

Yeah I think the message should have more of a “procedural” flavor to it, giving the player a series of instructions in order “type LOOK” then “EXAMINE a noun that you see” or something like that.

Oh I also just came across this:

[code]>look
Basement
You are in the basement of the shack. Shelves line the east and north walls, but they are mostly empty. A beautiful mirror stands against the south wall. A ladder pokes through the ceiling in the corner of the room.

On the shelves are a wand of weather-changing, journal page 3, journal page 4, journal page 5, a brass lantern and journal page 2.

read page 2
[Which do you mean, 1) journal page 4 or 2) journal page 2?]
[/code]
This happens sometimes, and I’m not sure exactly the conditions for causing it, because sometimes it will simply correctly take page 2 and read it, other times it will ask this message. It should be clear because page 2 was specified.

Also, the numbered list might be a bit confusing when the item names contain numbers, like in this example:

>read page [Which do you mean, 1) journal page 4, 2) journal page 2, 3) journal page 5 or 4) journal page 3?]
It’s a bit confusing because if I answer “4”, will I get the 4th item in the list or journal page 4? Maybe it’s better to just leave the numbers off. (I mean, I know what happens, because I’ve tried it. But it might be confusing to a new user, and in some circumstances it might be important that the player is clear on exactly what their response will end up doing.)

Another grammar issue:

>drop dog [You haven't got she.]

This issue comes up because I’ve rewritten the can’t take other people rule so that one can pick up small dogs. Obviously, “she” should be “her”.

Thanks very much for posting this. It is always great to get more data. :slight_smile: I’ve tweaked a few of the component extensions of Player Experience Upgrade and will upload them shortly, although the main extension itself will probably not be updated until after the next I7 release. Specifically, here are some completed fixes:

– the “unnecessary movement” rule text in Smarter Parser (for commands like >WALK TO MIRROR) has been cleaned up as per your suggestions (interactive fiction instead of IF, shortened for clarity, don’t mention directions if no exits from the room). Since the parser did not parse the command, you actually can’t tell if MIRROR refers to a visible object, but I added some regular expression hacking to make the “get object example” routine see if a word in the player’s command matches a word in the name of a visible object, and if so select it as the best example.

– In Extended Grammar, added “put x on ground” and variants as a new grammar line for drop. (References to ground/floor/ceiling etc that don’t match a grammar line are caught by Smarter Parser’s “generic surroundings” rule, which has also had its text clarified as suggested.)

– A lot of the other points raised seem easy to fix, but are actually quite difficult due to the way Inform’s parsing works. It’s often quite difficult to find out exactly why or where a command failed. Specifically, for instance, in the >THROW X AT Y case where Y is no longer visible, there’s not an easy way to tell whether it was X or Y that caused the command to fail to parse. (Although you can distinguish between it failing because Y was a known versus unknown word, and other variations-- see the “can’t see any such thing” section of the Neutral Library Messages documentation.) So some of the suggestions here are unfortunately things I’ve thought of before and tried but failed to address.

Some other general points:

Why Glulx: as was mentioned, many of these features are not possible with the archaic limited memory footprint of z-code (handfuls of kilobytes).

Changing messages: the component extensions are all designed for any text to be easily replaced by authors. This is explained in the documentation, although it could perhaps be a little clearer. (I’m holding off on reworking or rewriting any of this, though, since the way Inform handles default messages is soon to change for the better.)

On the frustratingly generic nature of some messages: the damnable thing about default messages is that they exist because a game’s author has not written something more specific, and there’s nothing I or anyone can do about that. Many of the suggestions given would make the message better in this particular case, but more misleading in other cases-- for instance, removing the “in some games” clause in the message about orders might imply that this works in every game, when in fact in the vast majority of modern IF this command syntax is not used. (But if it IS used, telling the player to avoid it could be equally misleading.)

The biggest catch-22 with default messages is that the extension can’t know if a command failed because a feature wasn’t supported, or if it failed because the player didn’t use the right syntax. Claiming the wrong thing in either case can be disastrous, so we have to be extremely careful with wording.

On Poor Man’s Mistype: It’s a terribly simple spell-checking algorithm, unfortunately, and I still really hope someone writes a better one someday.

I wonder if the final version of Custom Library Messages was used? The previous version had a few bugs in it of this nature.

Ron: yeah, the current P.E.U. (man, maybe I should have thought more about the acronym before naming it?) is based on an older version of CLM. I fixed this specific bug now, but when I do the next major revision I’ll probably do a more thorough comparison looking for other changes.