Threaded Conversation for Dialog

This release fleshes out queuing of quips for NPCs, does a better job of suggesting in-thread quips and dealing with changes of subject, and fixes a few latent bugs.

Feedback is urgently desired!

3 Likes

Thanks for writing this library. After testing it a bit I thought it missed some features but after rereading the documentation (and not only concentrating on the examples) I found all stuff I was looking for in this library.
The only complaints I still have is that some names weren’t that obvious for me to understand right away. like

(off limits $)

Since it seems to be just the negated version of

(available $)

I would mention that predicate too in the readme. Or is there a reason to not use it directly?

I’d be happy to explore better names; originally I was trying to keep names close to the Inform7 version, but things have strayed. Yes, you have the option to make a quip conditionally available or conditionally off-limits.

I’m very happy to hear that you are finding TC useful!

I haven’t come up with better names, but after looking a bit into the Inform7 version the current names make more sense.

I’m still playing around with this library without really knowing if something playable will ever come out of it, and I found some small things that could be improved:

The “(nag $Quip)” being displayed before the reaction of what the player does seems odd to me.

> dance
“Can you please answer my question,” shouts the old man angrily.

You practise your moves.

You could ignore the old man or request him to repeat his question

Imo the reaction to the input should come first and then the npc should remind the player that there’s still a quip open. I turned the “(instead of [$verb | $])”-predicate into an after-predicate to get the output I wanted. Not sure if that’s the best way to solve this.

Another problem with “(nag $Quip)” that I had was that the quip was displayed even after I “(reset conversation partner)” during a conversation. The suggestions stopped showing up after the reset. Maybe this isn’t a library problem and I just did something wrong.

Currently, it would take a change to the standard library to fix the order correctly. This has been discussed, adding (on every tick early) and (on every tick late) so that the nag could go there.

Though, as I’m thinking about this, it might be possible to move the nag to the next tick rather than the current tick. I’ll look into it.

Changes in v0.3:

  • Added (reset conversation partner) predicate to clean up the current conversation

  • Dubious quips are now very unlikely, not simply unlikely

  • Added (prevent talking heads for $Quip)

  • Added the change subject command

  • Updated for Dialog 0j/02, including interface declarations

  • Moved around the logic for nags so that they follow the description of the non-conversational action, and precede the “You could …” text; this is a more natural flow

4 Likes

Very nice extension. I am tracking for future use.

Thank you, Jeff

1 Like

Changes in 0.3.2:

  • Updated to work with Dialog 0k/05
2 Likes

Changes in v0.4.0:

  • Added (after $NPC has replied with $Quip) notification
3 Likes

This is a fairly substantial and non-backwards compatible update (it is still alpha).
The key traits identifying quips have been renamed to be shorter and more sensible. The entire library now builds on top of the standard library’s ask/tell/talk to verbs.

2 Likes

Threaded Conversation v0.6

This is mostly a change in how the library is organized; the debug-time support is broken out into a separate file and extended.

  • Broke the debugging code into a companion library, lib/tcdebug.dg.
  • Added the convinfo debugging command, which display the conversation status.
  • Added the roominfo debugging command, which displays information about the current room and the objects within – like @tree but for a single room, and more detailed.
2 Likes

Threaded Conversation v0.7

  • The suggestions are now triggered from (late on every tick)

  • convinfo and roominfo command no longer output using (log)

  • The [perform quip $Quip] action is now properly described

  • Removed (avoid talking heads for $Quip), just use (beat $Quip)

1 Like