Conversation systems: overviews, recommendations?

I’m starting a serious effort on an Inform 7 game, and want a non-trivial conversation system.

Initial thoughts:

  1. I’d rather not have just a choice based / menu based system, since the player just walks through every choice/hint, and it seems to reduce the illusion of player freedom (?), and of the player having to discover topics to ask.

  2. I’d like a system that can fairly cleanly let you set up different responses to the same topic based on a variety of conditions – NPC mood, their approval rating of you (that goes up and down based on what you say and do in the game), what you already know about the topic or related topics, what you may have already accomplished or obtained, etc.

  3. It would be nice to have a system where dialog is started with a particular NPC with one command (or the NPC initiates it), and while that dialog is in effect, there shouldn’t be a need to keep typing “ask biggles about foo”. Until the conversation ends (either the NPC can break off the conversation, or something in the game ends it, or the player ends it with a command), the player should be able to simply type “foo” to ASK/TELL the current NPC about it.

Is there an overview written up anywhere on some of the conversation system extensions, possibly with recommendations about when a particular extension would fit best?

4 Likes

I think this post by Emily Short summarizes the available options pretty well.

As for extensions, that’s a bit harder and I’ll defer to others, as I’ve never used one that I didn’t make. I can say that:

-at least two IFComp winners of the last decade have used the extension Hybrid Choices by AW Freyr for conversation (I know, not what you’re looking for)
-Alias the Magpie, another IFComp winner, lists the following extensions when using VERSION:

Conversation Package version 3/150410 by Eric Eve

Conversation Nodes version 7 by Eric Eve

Conversation Suggestions version 7/150610 by Eric Eve

Conversation Responses version 6 by Eric Eve

Conversational Defaults version 2 by Eric Eve

Conversation Framework version 12 by Eric Eve

As far as I can tell, the main idea is that it lists topics that you can bring up that you use ASK ABOUT for.
-Threaded Conversations is one that comes up a ton. It’s used by Counterfeit Monkey. In the way she implemented it, it lists suggested topics at the bottom, allows you to use single-word references (I typed just RIGGED to bring up a topic about a game being rigged), and adapts as you say more stuff.
-TADS actually has some pretty great conversation stuff, mostly similar to the Eric Eve extensions mentioned above. You might want to change languages!
-Quip-based conversation by Michael Martin uses menus. You can see it used in Vampire, Ltd.
-I have my own conversation system (Clues and Conversation extension) where topics are modelled as objects in an inventory which can be examined and spoken. I often modify it so I can use topics with one-word commands or combine two topics into one. It’s pretty hard to make it work without heavily customizing it, though. You can see it in The Magpie Takes the Train.

No matter which method you pick there will likely be a lot of work integrating it in.

It sounds to me like Eric Eve’s extensions or Threaded Conversations are your best bet. Both can be found here:

It may be worth picking one of those two and seeing how hard it is to work with.

Hopefully people who have tried using them will chime in!

7 Likes

Although not Inform 7 specific, there was a discussion of this just recently. I think it was this one.

2 Likes

Eric Eve’s extensions make the whole process of ask / tell conversation much easier for both the author and the player. Each conversation response can be coded as follows:

Response of Mrs Miggins when asked about pies:
    say "[if we have eaten the pie]'Oh my, you does like a bit of gristle, doesn't you dear?' says Mrs Miggins approvingly[otherwise]'Go on dear, have some gristle pie - you know you wants it!' says Mrs Miggins[end if]."

They designate a “current interlocutor” and allow abbreviations (such as “a” for ask) so that when in conversation with a particular character you can type > A PIE instead of > ASK MIGGINS ABOUT PIE. The interlocutor is assumed because we’ve previously greeted them or asked them about something else. The current interlocutor changes as soon as you talk to a different character.

Conversation Nodes allows you to build a thread by stringing together “nodes” and, as you say, gives you the option to list topics for further conversation that you can ASK ABOUT next turn.

Conversation Package includes all of Eric’s conversation extensions and integrates them together. Alias ‘The Magpie’ is a very conversation-heavy game, so I used the full package for that one. My current WIP is less conversation intensive so I’ve use only Conversation Defaults and Conversation Responses. It doesn’t require the more sophisticated features. Some of my games have only a TALK TO command and forgo ASK/TELL altogether.

I would consider using Hybrid Choices or similar in future, but personally I find the switch between parser-input and choice-based menus a bit jarring. I understand that a new integrated system is being developed by Graham Nelson for Inform 10 and I’m really looking forward to seeing what it’s like. From what I’ve read, it looks a lot like Ink.

3 Likes

I’ve tried both styles and prefer menus to ask/tell. They play more quickly and the conversations seem more natural and less like a puzzle to me. I also feel it allows me as an author better control over the dramatic flow of the dialogue. Preventing lawnmowering of the options is actually easier than with ask/tell (where it’s the first thing every player attempts once they meet an NPC).

I’ve used the extensions by Michael Martin, but had to alter them slightly to make them work with then current Inform when I last used them for the 2020 comp.

3 Likes

For my only conversation-heavy parser game I used a simple keyword based approach, via the following tweaks to the I7 built-in system:

  • Defined a default TALK TO action applied to an NPC with no keyword.
  • Rewired tell, ask and answer to work identically.
  • Defined grammar rules for the pseudo-action talking about, mapped to tell/ask/answer.
  • Defined topic-reply tables, using a special default topic as the response to the TALK TO action.

This way when players run into an NPC, vanilla TALK TO will produce a default response, which can introduce other topics the NPC might know about.

What I like about this system is that the basic TALK TO action can point the players to the bits of conversation that are essential to move the story forward, but tables also include hidden topics that reward experimentation.

This seems to be the general consensus. I’m definitely an outlier these days in using ask/tell.

Here’s a link to Graham Nelson and Emily Short’s Inform Dialogue Sections, which is apparently implemented but not yet released. I will probably wait until it is released before writing another diaglogue-heavy Inform game. Possibly it will spur me to begin work on a new adventure for the Magpie.

https://github.com/ganelson/inform-evolution/blob/main/proposals/0009-dialogue-sections.md

3 Likes

If you don’t want to do cutscene conversations or choice menus, I’d say the simplest solution is to use Eric Eve’s Conversation Responses. Essentially it cleans up player input-methods for ask/tell conversation, including greeting/leavetaking like hello and goodbye, incorporates other implicit non-verbal conversational gambits like “response of Bob when given or shown” and allows rules to be written so the text can vary based on conditions as usual without a lot of fuss:

Conversation Responses allows response rules for various conversational commands to be written in the following forms:

Response of Bob when asked about Bob:  
Response of Bob when asked about "life":            
Response of Bob when told about "[money]":
Response of Bob when asked about a container:
Response of Bob when asked about something fixed in place:
Response of Bob when told about Jim:
Response of Bob when shown the wallet:
Response of Bob when given the wallet:
Response of Bob when asked for the wallet:
Response of Bob when asked for "sympathy":
Response of Bob when anwered that "probably":
Response of Bob when saying yes:
Response of Bob when saying no:
Response of Bob when saying sorry:

Response of Bob when asked-or-told about "life":
Response of Bob when asked-or-told about the wallet:
Response of Bob when given-or-shown the gold coin:

So you can do things like:

response of Bob when asked about Bob:
    if bob is sick:
        say "'I feel terrible!' he says. 'Nasty flu going around!'";
    otherwise:
        say "'Oh, I'm fine.' Bob responds. 'Haven't caught that flu that's going around yet.'";
2 Likes

Wow, the unreleased dialogue language feature looks great.
But… I don’t see news about when it might get released, even though the code (but not all the documentation?) is done.

If it’s something to be released in a month or three, I’d wait. If it’s gonna be another year or more, I’ll go forward with Eric Eve’s extensions.

1 Like

Completely unknown I’m afraid. Hopefully less than the eight or so years leading up to Inform 10, but whether it’s weeks or months or a year is uncertain.

@Nels_P_Olsen - For the 2nd version of my first Inform 7 game I wanted to make the Ask/Tell conversations a bit easier for the player without giving everything away.

I did some research into what was available and went with Eric Eve’s conversation extensions, specifically the Conversation Package extension, which included his Epistemology, Conversation Framework, Conversation Suggestions, and Conversation Defaults extensions).

Here is a little diagram I created when I was trying to understand the Eric Eve conversation extension dependencies.

In my Inform 7 source code I ended up structuring individual character conversation code using the Book|Part|Chapter|Section headings that Inform 7 provides.

You see that it is possible to have conversation dialog that is specific to just a single location, a single scene, or multiple scenes.

In the game I was able to use Jon Ingold’s Flexible Windows extension to provide display areas for characters you could talk to by saying “Hello” to them (the command to start a conversation with a character would be >say hello to humboldt but you could also just start by asking or telling them something).

Once you did that topics you could ask or tell them about would appear. Note: Not all topics you can Ask/Tell about have to appear in the Topics list.

And when you asked a character about a topic, it could be made to disappear from the list (the command that made “Wells” disappear from the topic list was >ask humboldt about wells).

The source code for v2.0 alpha is currently up in a GitHub repository if you want to take a look at any specific implementation details (currently I’m getting things ready for a v2.0 beta in September-October and hope to do a final release by the end of 2023). To find the character conversation section search for “Volume - Characters”.

I feel that I’ve only scratched the surface of the Eric Eve extensions and will probably continue to use them in future projects until something better comes along.

5 Likes

@Nels_P_Olsen - I didn’t know if you could eliminate the character you were talking to when using the Conversation Package extension.

But I just tried it and it looks like the extension supports that type of command.

Didn’t even think to try this until I read this post :wink:

As I mentioned in my post, you can also abbreviate ASK to A, so once you’re in conversation with Dr Humboldt you can simply type A TIME TRAVEL to ask him about it.

I’m rather in awe of how well organised your code is by the way.

I tend to type out things in full so I always forget about the parser abbreviations that are available.

Thank you. I have to admit that the code didn’t start out organized that way but evolved over time so I could find things easily and know where to slot in new stuff without too much effort.

There’s another post here where I explained the overall structure using Inform 7’s Volume|Book|Part|Section|Chapter settings for anyone who’s interested.

One thing I wish the Inform 7 IDE let you do was create and save boilerplate code that you could enter with one menu click (if I ever get the time, I might fork the repository and submit a pull request and see if it’s accepted).

Inky has this feature.

3 Likes

Oooh oooh! Don’t know if this will work exactly, but it seems you could create a dummy extension, and then use the Inform’s documentation function - you know how there’s that click box to move examples to the left and paste it into source text to experiment with it? I assume you could do that with your boilerplate code.

Look at 27:11 and 27:12:

Extension documentation can provide “paste” buttons, much like the examples in this book. For example:

Here is a sample -

---- DOCUMENTATION ----

    *: "Coriander"

    Include Herbs by Charlotte Quirke.

    The Herb Marketing Centre is a room.

If we want to add some content -

    *: The coriander is a herb. Understand "cilantro" as the coriander.

Note that the paste button, denoted *: pastes in the text following it, but only as far as the next paragraph of unindented documentation - here, the one beginning “If we…”. (But of course, an extension can have multiple paste buttons if desired.)

I believe to make this work it has to be in the “documentation” denoted section of an extension:

3 Likes