Wish for demoscene on how to structure multiple quests
Wish for demoscene on how to structure multiple quests
I cannot quantify how much time you have already saved me with this asset. Thank you from the bottom of my heart!
Now, I've studied the documentation and demoscenes quite a bit, but I haven't found much about how to structure multiple quests from the same person. Am I right that I'm supposed to set the currently active conversation/quest manually (OnConversationEnd or OnSubtitleEnd or whatever trigger) in order to change which quest/conversation is going to be the next one? I was hoping I could control which quests were available with conditions, and then it just picked the first quest you are eligible for when you talk to the Actor. No? Yes?
What if the Actor has more than one quest to give at the same time and I want to be able to choose which one to take first or to take both? Is there some built-in menu for selecting between available quests or handing in active quests, perhaps through a dialogue? Even cancelling quests (that would require resetting state through an event, though)?
Now, I've studied the documentation and demoscenes quite a bit, but I haven't found much about how to structure multiple quests from the same person. Am I right that I'm supposed to set the currently active conversation/quest manually (OnConversationEnd or OnSubtitleEnd or whatever trigger) in order to change which quest/conversation is going to be the next one? I was hoping I could control which quests were available with conditions, and then it just picked the first quest you are eligible for when you talk to the Actor. No? Yes?
What if the Actor has more than one quest to give at the same time and I want to be able to choose which one to take first or to take both? Is there some built-in menu for selecting between available quests or handing in active quests, perhaps through a dialogue? Even cancelling quests (that would require resetting state through an event, though)?
Re: Wish for demoscene on how to structure multiple quests
The Dialogue System, being a dialogue-first asset, assumes you'll primarily offer quests through dialogue. Use dialogue entry nodes' Conditions to determine which branches to follow and/or which response options to show.
(Very tangential side note: Quest Machine, on the other hand, being a quest-first asset, provides a menu of available quests but doesn't provide branching dialogue. Its dialogue window works more like World of Warcraft, with simple Accept/Decline buttons. It does have Dialogue System integration, which allows you to add branching dialogue.)
In the Dialogue System, you can structure your conversation(s) to check the states of multiple quests. Here's a simplified example:
When the conversation starts, the NPC will ask, "What do you want?"
The player can choose "Let's talk about stuff.", "Have any quests?", or "Bye.".
If the player chooses "Have any quests?", the conversation will check the <Any Quests?> group node. This node checks if any quests are in states worth talking about. If so, it's true, and the NPC says "What quest do you want [to talk about]?" It then potentially offers response buttons for "Kill 5 rats" and "Gather 3 apples" if the corresponding quest is in an appropriate state.
If the <Any Quests?> group's Conditions are false (that is, no quests are in states worth talking about), the NPC says "Nope."
In addition to group nodes, you can also link across different conversations. So you can divide this conversation tree into smaller conversations, such as one per quest, which might make it easier to organize and edit.
You can also group conversations into submenus using forward slashes. For example, you could title the conversations something like:
BTW, if you mark a quest as abandonable, the player can abandon (cancel) it in the quest log window.
(Very tangential side note: Quest Machine, on the other hand, being a quest-first asset, provides a menu of available quests but doesn't provide branching dialogue. Its dialogue window works more like World of Warcraft, with simple Accept/Decline buttons. It does have Dialogue System integration, which allows you to add branching dialogue.)
In the Dialogue System, you can structure your conversation(s) to check the states of multiple quests. Here's a simplified example:
When the conversation starts, the NPC will ask, "What do you want?"
The player can choose "Let's talk about stuff.", "Have any quests?", or "Bye.".
If the player chooses "Have any quests?", the conversation will check the <Any Quests?> group node. This node checks if any quests are in states worth talking about. If so, it's true, and the NPC says "What quest do you want [to talk about]?" It then potentially offers response buttons for "Kill 5 rats" and "Gather 3 apples" if the corresponding quest is in an appropriate state.
If the <Any Quests?> group's Conditions are false (that is, no quests are in states worth talking about), the NPC says "Nope."
In addition to group nodes, you can also link across different conversations. So you can divide this conversation tree into smaller conversations, such as one per quest, which might make it easier to organize and edit.
You can also group conversations into submenus using forward slashes. For example, you could title the conversations something like:
- Mayor/Start
- Mayor/Quests
- Mayor/Rat Quest
- Mayor/Apple Quest
- Mayor/General Talk
BTW, if you mark a quest as abandonable, the player can abandon (cancel) it in the quest log window.
Re: Wish for demoscene on how to structure multiple quests
Thank you so much for your very detailed and helpful answer!Tony Li wrote: ↑Wed Sep 23, 2020 9:10 pm Very tangential side note: Quest Machine, on the other hand, being a quest-first asset, provides a menu of available quests but doesn't provide branching dialogue. Its dialogue window works more like World of Warcraft, with simple Accept/Decline buttons. It does have Dialogue System integration, which allows you to add branching dialogue.)
I am already contemplating whether we need Quest Machine for our project, but I don't think I can justify the extra maintenance for the little extra stuff we need. It's just little tweaks on what you have already. I can code well enough. I just find it helps tremendously to know what the intended use-cases and workflows are of a system, before I start customizing it. Your information is gold. I understand the intentions much better now. I can leverage the scripts on ResponseMenuPanel, MenuPanel and SubtitlePanel to do custom things, but I can handle most of it just by setting up nodes, like a "Quests" node, and then I have to link that to all my quest-conversations for this NPC, each of which have conditions on their nodes determining whether they should be shown. Do I then put those conditions on the START-node of my quest conversation, if I opt to make a separate conversation for each quest?
EDIT: Oh wait. I'd make condition-only-nodes under my "Quests" conversation, each of which then link to their respective quests. Right?
Re: Wish for demoscene on how to structure multiple quests
Exactly. To link to another conversation, inspect the origin node. In the Inspector's "Links To:" section, select "(Another Conversation)".
BTW, when I mentioned Quest Machine, I wasn't trying to push it on you. I was just giving context for the conceptual approach each takes to presenting quest dialogue. Quest Machine has nice features, but it's also yet another asset to incorporate, learn, and keep track of. If you don't need it for this project, no sense adding the extra burden.
Re: Wish for demoscene on how to structure multiple quests
I know It was a valuable comparison.Tony Li wrote: ↑Thu Sep 24, 2020 8:13 am BTW, when I mentioned Quest Machine, I wasn't trying to push it on you. I was just giving context for the conceptual approach each takes to presenting quest dialogue. Quest Machine has nice features, but it's also yet another asset to incorporate, learn, and keep track of. If you don't need it for this project, no sense adding the extra burden.
It seems that no matter how I set up links to other conversations, they always appear as an empty plate of text during the conversation. Like it doesn't respect my None(). It stops at the node that has the link (it is highlighted green in the Conversations-tab, and showing an empty dialogue) and waits for me to press "Continue".
Example:
I'm still just prototyping this to see how it works, so don't mind the structure. I'll design a structure when I know how the system works
First quest-conversation:
The START-node has a None() sequence and has a link to the first dialogue-node in the first quest, which has an "unassigned"-condition for the quest. If that branch is blocked, it links to the START-node of second quest-conversation. It is this START-node which is highlighted in green and apparently prompts an empty dialogue, to which I have to press "Continue" before it progresses to the START-node of the second quest-conversation.
Second quest-conversation:
The START-node has a None() sequence, and has two links. The first is a None() sequence which asks if the first quest is "active", and if so, it sets it as "success", and goes to the other dialogue which is just the next quest, which has a condition of "success" of the first quest. You can probably see that I'm trying to set up as much complexity and different use-cases as I can with a small set of quests
Re: Wish for demoscene on how to structure multiple quests
Hi,
Since you're using a continue button mode that requires the player to click the continue button to advance, please change "None()" to "Continue()" in your sequences.
Continue() simulates a continue button click, advancing the conversation past the requirement to click the continue button.
None() does nothing, resulting in a sequence that ends immediately. But it doesn't simulate a continue button click, so the conversation still waits for the player to click continue.
Since you're using a continue button mode that requires the player to click the continue button to advance, please change "None()" to "Continue()" in your sequences.
Continue() simulates a continue button click, advancing the conversation past the requirement to click the continue button.
None() does nothing, resulting in a sequence that ends immediately. But it doesn't simulate a continue button click, so the conversation still waits for the player to click continue.
Re: Wish for demoscene on how to structure multiple quests
Aaaah. I knew it had to make sense somehow. More flexibility. I like it!
Re: Wish for demoscene on how to structure multiple quests
I replaced all my None()'s with Continue()'s and it still does it. I have Continue Button behaviour set to "Optional". That's probably not right.
EDIT: When I turn off "Always Force Response Menu" it stops doing it. There are no player-actor-nodes in my conversations yet, so no response menus, just NPC dialogue, so why does this bool have an effect on this?
If I turn off "Always Force Response Menu", and the dialogue tree runs through my nodes and finds none viable, then it doesn't fire OnConversationEnd(), despite firing OnConversationStart() and fading the dialogue panel in and out twice with no dialogue in it.
I do have "SkipIfNoValidEntries" == true on my NPC's OnUse DialogueSystemTrigger.
EDIT: When I turn off "Always Force Response Menu" it stops doing it. There are no player-actor-nodes in my conversations yet, so no response menus, just NPC dialogue, so why does this bool have an effect on this?
If I turn off "Always Force Response Menu", and the dialogue tree runs through my nodes and finds none viable, then it doesn't fire OnConversationEnd(), despite firing OnConversationStart() and fading the dialogue panel in and out twice with no dialogue in it.
I do have "SkipIfNoValidEntries" == true on my NPC's OnUse DialogueSystemTrigger.
Re: Wish for demoscene on how to structure multiple quests
Try linking to the first conversation node after the <START> node.
By default, the <START> node's Sequence value is None(), and it's assigned to the player. (It's misleading because instead of being blue it's orange to indicate that it's the start.) If you're linking to the <START> node, the conversation will think that it's a response node and try to show a menu for it. If you link to the first node after <START>, it should work exactly the way you want.
By default, the <START> node's Sequence value is None(), and it's assigned to the player. (It's misleading because instead of being blue it's orange to indicate that it's the start.) If you're linking to the <START> node, the conversation will think that it's a response node and try to show a menu for it. If you link to the first node after <START>, it should work exactly the way you want.
Re: Wish for demoscene on how to structure multiple quests
Changed both my START-nodes to use None() instead of Continue(), and now it properly calls OnConversationEnd().
I've changed my setup so I now have branching nodes in both quests, instead of splitting at the START-nodes, and my branching node in the first quest links to the branching node in the second quest.
It still fades the menu in and out when it doesn't find any valid entries. Is that default behaviour? I'd like it to not show at all when there are no valid conversations. I must still be doing something wrong. Flipping "Always Show Response Menu" doesn't seem to make any difference now, though, so that's good.
Conversation / Quest 1:
Conversation / Quest 2:
Dialogue System Controller:
Actor Dialogue System Trigger:
I've changed my setup so I now have branching nodes in both quests, instead of splitting at the START-nodes, and my branching node in the first quest links to the branching node in the second quest.
It still fades the menu in and out when it doesn't find any valid entries. Is that default behaviour? I'd like it to not show at all when there are no valid conversations. I must still be doing something wrong. Flipping "Always Show Response Menu" doesn't seem to make any difference now, though, so that's good.
Conversation / Quest 1:
Spoiler
Conversation / Quest 2:
Spoiler
Dialogue System Controller:
Spoiler
Actor Dialogue System Trigger: