Managing complex bark scenarios

Announcements, support questions, and discussion for the Dialogue System.
Post Reply
grofit
Posts: 13
Joined: Sun Feb 07, 2016 2:47 pm

Managing complex bark scenarios

Post by grofit »

I apologize for asking a lot of "abstract" questions at the moment but I am just trying to get my head around the processes before I start down a path.

So in my scenario I have a player who frequently interacts with a handful of NPCs, and I want them to change their barks (passive descriptive text/outbursts) based upon actions the player has taken, so I am imagining I will end up with LOTS of variables all over the place defining meaningful interactions the player has had and I will have lots of barks which basically output certain stuff based upon those variables, also some of them should be one time only things, so vars to track if the player has already had one bark etc.

Anyway so I can foresee there being HUNDREDS of barks here as unlike most scenarios where its lots of minor/repeated interactions with lots of generic NPCs, this is very much major interactions with a few named NPCs.

So currently from what I can tell all barks are single nodes (or more) derived from a start node, which is fine for a few, but when you have a lot of them, is there any way to group them or tag them or anything to make it easy to differentiate which parts are in which scenes etc? I was thinking about maybe having multiple conversation container per character, so lets say 1 for the first scene barks, one for the next scene barks etc so that way its not just one huge conversation container full of all barks for that NPC.

So are there any pointers on trying to best manage this sort of thing?
User avatar
Tony Li
Posts: 22104
Joined: Thu Jul 18, 2013 1:27 pm

Re: Managing complex bark scenarios

Post by Tony Li »

Hi,

Personally, I like to control as much as possible within the dialogue database. So I'll get the other option out of the way first:

You could write several different bark conversations for your NPC:
  • Gandalf/Barks/The Shire
  • Gandalf/Barks/Moria
  • Gandalf/Barks/Edoras
  • Gandalf/Barks/etc...
And then control them using multiple Bark Triggers, with a different Condition on each Bark Trigger. The nice thing about this is that each bark conversation is fairly small and simple.


However -- and this is just personal preference on my part -- I think it's easier to set up a single Bark Trigger that pulls lines from a single conversation (e.g., "Gandalf Barks"). The Dialogue System has a couple features to make the job easier.

First, you can use group nodes. If you tick "Is Group" on a dialogue entry node, the Dialogue System will pass by the node and evaluate its children instead. For example, the Gandalf Barks conversation might have these groups:
  • START
    • {group} The Shire
      • "A wizard is never late."
      • "Nor is he early."
    • {group} Moria
      • "I have no memory of this place."
    • etc...
This can help you group related barks.

Also, you can add cross-conversation links. This is a link from a node in one conversation to a node in another. Since the destination is in a different conversation, you can't draw a link arrow on the canvas. Instead, you'll have to inspect the originating node. From the "Links to:" dropdown, select "Another conversation". This will add another dropdown where you can specify the destination conversation and dialogue entry node. You can link from the main bark conversation's START node to other conversations if that makes it easier to manage.

If you decide to use cross-conversation links, download the patch from the Pixel Crushers customer download site. It contains some important usability improvements to the cross-conversation link dropdowns. I'll also be submitting those improvements in version 1.6.0 early next week.

You can mix and match groups and cross-conversation links, too.
grofit
Posts: 13
Joined: Sun Feb 07, 2016 2:47 pm

Re: Managing complex bark scenarios

Post by grofit »

Thanks Tony, I think that group node approach would be great, I didnt know that functionality existed so I am glad I asked :)
Post Reply