HyperEnum | [Previous] [Main]

Overview
HyperEnum provides two new forms of user interface with TADS 3 conversational commands; both change the way in which topic inventories (lists of SuggestedTopics) are displayed.
The hyperlink option simply hyperlinks each item in the list of topics displayed. The player can then simply click the hyperlink to select the topic (the hyperlinked option is executed at the command prompt).
The enumeration option attaches a number to each suggestion displayed (e.g. "You could [1] ask him about the antenna or [2] tell him to go to hell"); the topic may then be selected simply by entering the number at the command prompt.
The two options are compatible: topic suggestions can be hyperlinked and enumerated at the same time. Neither option prevents players from entering ordinary conversational commands in the normal way.
The extension allows game designers to set the initial status of these options (i.e. whether or not they are enabled at the start of the game), and also provides verbs to allow players to enable or disable these options. You can, of course, disable these verbs by overriding their VerbRules to something unmatchable if you want to keep control of if and when they are available.
WARNING: Although these two options undoubtedly make for a quicker and easier user interface, they do not necessarily make for better game play, and you may want to consider carefully whether your game will benefit from them before including them. See the discussions under each item below for further discussion.

Hyperlink Option
The hyperlink option is straightforward. It is enabled by setting gameMain.hyperlinkSuggestedTopics = true, and is disabled by setting it back to nil. When it is set to true, instead of a topic inventory appearing like:
(You could ask him how he is, if he likes working here, or how long he's worked here, say that you've been to the beach, or that this is your first visit here, or ask him about the antenna.)
It will appear like:
(You could ask him how he is, if he likes working here, or how long he's worked here, say that you've been to the beach, or that this is your first visit here, or ask him about the antenna.)
The player can then click on a hyperlink to select the topic.
BUT, although this undoubtedly aids ease of use, it does not necessarily enhance the playing experience and may detract from it. For one thing, it becomes much easier for players simply to click links on autopilot rather than thinking about what they want to say to an NPC. For another, the very ease of use of this interface may discourage players from trying to find topics on their own through trying commands typed at the command line. And for another, the player may end up interacting with this interface rather than with the NPC. This interface will inevitably call attention to itself because it's unlike the interface used to enter the majority of non-conversational commands, not least in employing the mouse rather than the keyboard.
In the example shown above, the advantages might still outweigh the disadvantages, since the majority of conversational commands shown have a non-standard syntax that players could hardly guess for themselves; they are therefore obliged to use the topic inventory system to see that these topics are available, and are at some risk of mistyping or mis-phrasing these non-standard commands and so becoming frustrated with the standard command-line interface. In this kind of situation (which might typically arise in ConvNodes making use of SpecialTopics, as well with heavy use of SayTopics and QueryTopics), this hyperlinking interface could well be worthwhile. On the other hand, in a conversation dominated by the standard ASK/TELL paradigm (ASK BOB ABOUT LIGHTOUSE, TELL HIM ABOUT YOURSELF), typing the commands may well make for a better player experience (though this could be a matter of taste). Typing at the command line prompt at least helps preserve the illusion of infinite freedom, and not detracting from this illusion may be important in sustaining the willing suspension of disbelief in the reality of the NPC. Moreover, forcing players to type conversational commands forces them to think about what they are typing, and so may be more involving than clicking hyperlinks, which may not necessitate much thought. Typing basic ASK and TELL commands at the command prompt and following one's own ideas about which topics are worth pursuing may well create a better illusion of an interactive conversation than relying heavily on the topic inventory and clicking links (especially if the DefaultTopics are well implemented).
One possibility might be to use hyperlinking (or enumeration) only inside ConvNodes with SpecialTopics where the player is in any case forced to choose between a limited set of topics which may have non-standard syntax (which some players seem to find confusing). If you want to use hyperlinks in this restricted way, set gameMain.hyperlinkOrEnumerateConvNodes to true, and your ConvNodes will take care of this automatically. In this case if the player's interpeter is not capable of dealing with hyperlinks, the options will be enumerated instead.

Enumeration Option
The enumeration is principally designed as an alternative to hyperlinking that can be used on non-HTML interpreters, although it works perfectly well on HTML interpreters as well, and may have a place there. Basically, it allows players to select a conversational topic merely by typing its number, a little like a conversation menu interface. So, for example, instead of:
>talk to bob
"Hello, Bob," you greet him.
"Hi there!" he replies.
(You could ask him how he is, if he likes working here, or how long he's worked here, say that you've been to the beach, or that this is your first visit here, or ask him about the antenna.)
>ask him how he is
"How are you, Bob?" you ask.
"Fine, just fine," he assures you.
>say that you've been to the beach
"I've just been to the beach." you say.
"Then you'll have seen the lighthouse," he sighs, "I hope you didn't go in!"
One might have:
>enum on
Enumeration of suggested conversation topics is now ON.
>talk to bob
"Hello, Bob," you greet him.
"Hi there!" he replies.
(You could ask him [1] how he is, [2] if he likes working here, or [3] how long he's worked here, say that [4] you've been to the beach, or that [5] this is your first visit here, or [6] ask him about the antenna.)
>1
(ask him how he is)
"How are you, Bob?" you ask.
"Fine, just fine," he assures you.
(You could ask him [1] if he likes working here, or [2] how long he's worked here, say that [3] you've been to the beach, or that [4] this is your first visit here, or [5] ask him about the antenna.)
>3
(say that you've been to the beach)
"I've just been to the beach." you say.
"Then you'll have seen the lighthouse," he sighs, "I hope you didn't go in!"
(You could ask him [1] if he likes working here, [2] how long he's worked here, or [3] when the lighthouse was abandoned, say that [4] this is your first visit here, or that [5] you did go into the lighthouse, or ask him about [6] the lighthouse, or [7] the antenna.)
Note that in this case we automatically display the topic inventory on each turn while the enumeration option is on; this is because, as here, the available options might change as the conversation progresses, and in any case the enumerated list of options will soon scroll off the top of the screen, which might tempt the player to continue the conversation by typing in random numbers - a fatally easy but ultimately unsatisfying way to play. If you really don't like this behaviour you can turn it off by setting suggestionEnumerationPreParser.menuMode to nil. The player who wants to see the topic inventory on the next turn can then do so by adding a 't' after the number of the conversational option (e.g. in the above transcript the player could type 1t and then 3t).
This seems to be a fairly easy interface to use, BUT it suffers from all the potential pitfalls of the hyperlinking option noted above with the added danger that it may be even easier to type numbers on autopilot than to click hyperlinks on autopilot, making for an even less satisfactory playing experience. The answer may be to restrict this interface to the same kind of situations where hyperlinks are most likely to be useful. A game that relies mostly on the standard ASK/TELL paradigm is probably better off not allowing players to use this interface (except perhaps in Conversation Nodes). Conversely, this interface may work well in a game where conversation requires a large amount of non-standard conversational syntax so that the player is in any case forced to rely on a menu of available topics. Indeed, the enumeration option may prove workable as one means of building a conversation menu interface on top of the standard adv3 conversation system, but in that case it will probably work best if it is used consistently as such throughout the game, and not as part of a hybrid ASK/TELL/MENU system.