Stacked Conversation extension [beta]

I wrote this hefty (19,000+ words) conversation extension for my WIP, because nothing else did quite what I wanted, and I like writing my own tools. It’s kind of the two-ton sledgehammer of ASK/TELL systems; it implements a ton of tools for dealing with character interactions at different levels of granularity, plus a large-scale flow-tracking system that’s basically a more mechanistic, flexible implementation of some of the theory behind Chris Conley and Emily Short’s Threaded Conversation.

The WIP is still in progress, but the extension is pretty complete, so I thought I’d post a beta version for anyone interested in this sort of thing.

Comments? Bugs? Feature suggestions?

EDIT: Newest version in this post.
Stacked Conversation.i7x (124 KB)

If I may take this liberty, I’ll quote here what you say yourself, in the documentation, that your extension does, because it’s most interesting and the sort of specific information people will want to see first.

It seems a very interesting piece of work.

I’m definitely interested in this! No time at the moment, but wanted to let you know it’s in queue.

Ooh shiny.

This could be very interesting.

Hmmm, can I now get the Grand Vizier to explain why the player needs to journey across the sea, without having one long speech…

And, what was the reason again? I’ve got lost of in mechanics, should’ve written it down. Doh.

I like this extension a lot, even though I’m still a bit bewildered about using it.

Some spelling issues in the example “disdain” and “grimaces”.

Good catch. That’s embarrassing…

Question/clarification: if Bob’s legal topic list is empty, he can discuss any topic?

Is there a global legal topic list, or does one run through all the characters to truncate?

Would there be use for individual or global “illegal topic” lists? (Nobody can discuss the murder or peripheral quips about the knife having blood on it till the murder happens) or does this overlap with knowing facts?

Yes, that’s correct.

Generally speaking, the “legal topics” mechanism is intended for situations where you need to temporarily restrict conversation (you’re in a business meeting where other topics would be out of place, etc.). For the murder example, you’d use deliverability restrictions instead, e.g.: Definition: quip-knife is deliverable if flag-murdered is true. So presently there’s no “illegal topics” list because illegal quips are handled by deliverability; and there’s no “global legal topics” list because personal lists are more flexible, and (IMHO) having both could make usage messy and bug-prone. (Fortunately, emulating it just requires adding an extra line to loop through all the NPCs.)

Deliverability restrictions are annoying to type, though. I’m experimenting with a relations-based shorthand syntax that lets you say things like:quip-body is a quip. It requires the scene murder. quip-wound is a quip. It requires the quip quip-body. quip-diary is a quip. It requires the fact fact-diary.

OK, got that working. I was a little concerned about performance, but the resulting I6 seems pretty well optimized. (I’d like to allow “It requires the flag (whatever)” for truth states, too, but there doesn’t seem to be a way to relate “an object” to “a truth state that varies”.)

Also new: the “Use verbless parsing.” option. When you’re in a conversation, this takes any unhandled commands and retries them as > ASK ABOUT (command). Combined with keyword matching, this allows some remarkable interactions - from the example: Test extreme with "nice weather we're having / how is your health? / don't worry about the draft / how about i marry your son / spill drink / passionately implore louis to make me his wife / yes". …although, to be fair, the example would also guess that > DID YOUR FATHER LITERALLY MARRY A VAMPIRE? was a proposal of marriage, so maybe it’s a good thing that verbless parsing is optional. :stuck_out_tongue:
Stacked Conversation.i7x (129 KB)