NPCs and Conversations?

As I study Dialog and play the game Tethered, I notice that there is no mention of NPCs and conversation.

I assume that could be implemented through the library but I am a novice.

Any thoughts?

Thank you,

As I study further, I am finding what I need in Chapter 7 of the Library manual. “Communication” should do the trick.

More to study and learn…

This is mostly uncharted territory—which also means there’s an opportunity to influence how the system will end up.

NPCs that stay in a room are very similar to other kinds of fixtures. They can be animated in a narrative sense using (on every tick in $), like any object. Independently, if they have the (animate $) trait (defining them as male or female implies this) then the default responses already adapt to that.

For talking to an NPC, there are standard actions as you’ve found, but they don’t do much by default. They’re designed as an empty framework that authors can hang story-specific behaviour on. But perhaps more could be added to the library?

NPC movement is something that I’ve been meaning to add for some time, but I haven’t settled on a design yet. Presumably a helper predicate for moving an NPC, which can be queried from (on every tick). This in turn narrates the NPC entering or leaving, if the current room was involved in the operation, and the player can see it.

Comments? Ideas?

1 Like

That is some of the things I have in mind.

One of them is an object that can be carried by the PC that is interactive and has traits of animation. I would also like to have the object perform an action from time to time based upon a random number of ticks.

Thank you,

I almost wish that some sort of dialogue-tree system (numbered choices or clickable) was built into every parser system by default. ASK/TELL can be so frustrating, and it would seem to work much better for the player and the author to have a specialized conversation interface.

This seems to work best in Inform 7 using Hybrid Choices and directing any conversational verbs to choice menus. I’ve used that combo in Fair, and I know Steph Cherrywell has in Brain Guzzlers from Beyond and other games.


Thank you so much for the references. I will look them up and garner ideas.

I have been studying Inform 6/7. Working with Dialog is enjoyable since it is a developing system

Inform 7 is also in active development. I am anxiously waiting for the next release

I will offer my meek endorsement for a multiple-choice conversation system. But I have no idea what kind of compromises or overhead that means.

Biased as I am toward “things I am already familiar with” I would wish for something like we have in the Infinity Engine modding world, with a relatively easy way to include multiple speakers who may-or-may-not be present, able to speak, or meet other arbitrary tests and variable checks and so forth.

1 Like

I’m working on converting Chris Conley et. all’s Threaded Conversation to Dialog. Yes it’s an act of hubris, but it’s coming along. It’s quite daunting, but I’m learning a lot along the way.

The challenge is that there’s not exactly a specification or even a set of tests and I’m not sufficiently experienced in the Inform7 version to know exactly what’s correct or incorrect behavior.

Still having fun with it.


Good luck with your project @hlship – I’ll be watching this thread with interest.

I feel strongly that having a good conversation system is important, because although we (he says, hoisting himself aboard without any noticeable personal merit!) – I mean the IF community as a whole – have made good progress with the interactive part of Interactive Fiction, I think we’re still struggling with the “Fiction” part - because fiction means people, and they’re difficult to code (to put it mildly!)

Neither Ask/Tell nor Menu conversation systems are really adequate to simulate the feel of talking to someone: the best idea still seems to be the Hybrid Ask/Tell system originally suggested by Mike Roberts, designer of TADS. I think it would be a real pity if Dialog ended up offering only limited conversation support, as this would tend to limit the sort of stories it would natively enable telling, to the old-school “abandonville” style, rather than helping IF to grow and develop in new directions.

So, more power to your coding, and best wishes!

1 Like

Make it work. Make it right. Make it fast. Still barely into stage 1. When I have more, I’ll publish out the GitHub repo.

Well, the conversation system doesn’t have to be a perfect, complete whole first crack out of the box. Plus, I think that the I7 Threaded Conversation does quite a bit of computation under the hood, working out the relevance of topics. Dialog being “closer to the metal” I’d expect to have to hand-code things like that. It’s certainly possible: Galatea is I6, I’m pretty sure.

I’d appreciate an Implementation of basic Ask/Tell as a step forward from Talk To, (which I gained the impression was only intended as a placeholder system anyway.)

With a name like “Dialog”, you’d really hope that the Dialog would support, well, NPC dialog (aka conversation).

I’m finding Dialog fascinating in how it feels like it is punching above its weight w.r.t Inform7, because it radically reduces complexity by being data oriented. Some of that is there in I7 too, of course, but it’s buried behind the syntax.

1 Like

Yes, I’m impressed with the way Dialog, despite running on a VM with limited resources, is attempting to still offer players a modern IF experience; e.g. the parser does things like implied actions as a matter of course, and thought has already been put into addressing I6’s weakness in only having “dictionary words” rather than distinguishing between verbs and adjectives the way TADS has always done.

But yeah, Conversation, that’s a real challenge.


It’s still evolving quickly and limited, but what I have so far is looking promising.


Wow, this looks really good! Looks like it’s time for me to start adding NPCs to my story. : )

I’ll chime in and say that after a cursory look, this looks excellent! Keep up the good work, @hlship!

Thanks for the encouragement. I’ve been having fun translating Emily Short’s examples, and writing my own. It’s still early days.

A challenge I’m having is getting the right order on some (on every tick) rules. Some of the text in my examples happens out of ideal order. It’s the first time I’ve really missed Inform7’s layers and layers of rulebooks.

Perhaps that interface should be extended, for instance by adding (early on every tick) and (late on every tick). With all of the standard library defaults in the middle, in the plain (on every tick). Would that simplify extension development?

That’s something I was leading towards. Essentially, I would want to ensure that extension libraries can be reasonably combined together.

I have also through about something like:

(on every tick)
   (defer { Output happens just before command prompt. (line) })

Intent: split the logic into the guards, like (show-output-later) and other logic, and the actual output, which is triggered after the fact. I think this would just be collecting the closures in a list, and iterating over them just before prompting the user for the next input.

And on my wishlist might be something like

(on every tick)
  (debug { Output only when in the debugger })

I implemented this easily enough but it complicates output when (trace on) and has to be manually removed before building a final game. Having this, maybe with improved sugar, built-in would simplify that.

I can’t tell you how cool it is to have a live REPL to develop in. Just like with Clojure, even if everything else were equal, having a fully functional REPL gives Dialog a heft leg up.