Please Fix My Terrible Dialogue System & Quest Machine Combined Setup
Posted: Mon Mar 29, 2021 12:46 pm
Premise: I really like Quest Machine & Dialogue System but they do not bring me joy (yet).
Plea: Sorry I definitely do not want that to come across as an attack! What I would like is if you could please help me understand some of what I'm doing wrong and make me find joy in these systems again!
Basically this is born entirely out of my own frustration with trying to get these things to work the way I need them to. I find that for a couple plugins with so many resources it's still incredibly frustrating that I can't wrangle them without me crying myself to sleep. Ok melodrama out of the way, you obviously know the system inside & out (and are EXTREMELY helpful on the forums I should add) but for the life of me it just doesn't click.
I'm going to post a basic picture of our setup, along with some pain points, and if you can jump in and offer some wise words, or even a WTF are you doing, it would be very much appreciated.
(diagram attached)
Apologies if none of that makes sense, please do ask away about any specific point!
Pain points:
1. UI
I want a text message style format so the textline example is perfect. I also want I want specific dialogues to go to specific UI elements. I also want to have many conversations with the same actor and keep all specific actor conversations in that same place. I tried so many different ways to get conversations routing to different UI areas the only thing that ever yielded results was the combination of StartConversation with an actor transform that has an OverrideDialogueUI script on it. It's awful, I hate it, please laugh/cry/help.
I also had the worst time with StartConversation immediately putting text in those (textline) UI objects, as it's part of our UI to bring them up when you're ready to read them. If the elements were active at the time StartConversation occurs then it's all good the text goes in the right place, if not then it automatically creates a new UI object to dump the text in and that is not at all what I want. So my hideous workaround is to keep all the actor textline ui elements active but not on the screen, and then moving them into place when the player wants to read them. It's awful, I hate it, please... well you know.
2. Quest Event
Why do I track quests in our own tracker? Because I couldn't figure out how to stick a bunch of quest specific data into quests. I saw that there was something about getting it all in there via a json string, but ultimately I want to be able to use the editor to set a bunch of values, and if it's all there in a json string then it's not very designer friendly. I'm sure I'm completely off base here and I would love for it to be wholly encompassed within QM but actually I'm at peace with this bit, this is just the reasoning why I track my own quests.
What I hated was trying to read the status of a quest. There's a litany of different methods throughout the forums / documentation and the only one that ever worked for me was QuestLog.GetQuestStatus. I could just check this on a timer and be done with it, but I'd rather know specifically when the quest is updated. Again I struggled to find anything that I could hook into, so instead I've got an OnExecute event at a specific conversation node to tell my quest tracker "go and query QM for the new quest status". Ditto to it being awful.
3. Read Quest Data
I have no idea why I find it so difficult to read data out of QM.
It seems to me that there are so many avenues to getting quests up and running that it's so confusing as to what's going on.
Does it go in the quest journal, do I read data from the quest journal, is quest journal just a ui thing or is it necessary for the quest to be activated from the dialogue system, do I need a quest giver, can I just run this all via scripts instead, why do some methods seemingly update the quest scriptable object and some the runtime instance of the quest scriptable object. At this point I'm so overwhelmed with the terminology it's kinda lost all meaning and I'm struggling to even explain the setup to the team.
My gut feeling is that so much of it is focused on making simple to use UI components and simple flow to them for users to play with quickly that it somehow is not simple at all to get to the meat of it underneath.
Again QuestLog.GetQuestStatus is the only thing I could get working in the end, and even then it's just a status, so everything else is up to my tracker. In that dream world I'd love for QM to handle everything. Big I hate it ditto, sorry for the rant
Misc Things
- We're obviously using both Quest Machine AND Dialogue System, and to be completely honest I find that there's not enough specific information on how those two work together. Having "Quests" available in Dialogue System makes searching for the right answer even more frustrating as there's terminology overlap.
- Textline dialogue UI
- I do not want it to clear the conversation UI, I want to retain it on screen as an permanent log between the player and that actor.
- How do I get it to not erase what's already been output to the UI component?
- OR how do I retrieve the data in what's already been put there so I can rebuild it on demand?
- Once I've got all the dialogue flowing into UI object, how do I determine what conversation each bit of dialogue comes from? Ie I want to put a conversation spacer in the UI, think gmail email history flowing from top to bottom, or even just a simple line element separating the different conversations.
- All our quest machine dialogue comes from the dialogue system. How do I go about presenting the player with multiple choices for a reward (for example, I'm mostly just talking about defining buttons for custom actions etc) when it's got this bridged plugin setup? If it was just using QM then you'd do multiple reward buttons and that would go through to the quest journal, but when it's coming from DS I have no idea. Ugh I hope that makes sense!
- I fully realise what a sh*tstorm of a post this is, so if it's helpful I can totally strip out our QM & DM setup to a separate scene showing off all the nonsense. Just let me know.
- Finally, thank you! You're a star and I wish I knew your system as intimately as you do, then of course I wouldn't be writing this and would be working on world peace instead.
(I've probably some stuff... let's start with this )
Cheers,
Simon
Plea: Sorry I definitely do not want that to come across as an attack! What I would like is if you could please help me understand some of what I'm doing wrong and make me find joy in these systems again!
Basically this is born entirely out of my own frustration with trying to get these things to work the way I need them to. I find that for a couple plugins with so many resources it's still incredibly frustrating that I can't wrangle them without me crying myself to sleep. Ok melodrama out of the way, you obviously know the system inside & out (and are EXTREMELY helpful on the forums I should add) but for the life of me it just doesn't click.
I'm going to post a basic picture of our setup, along with some pain points, and if you can jump in and offer some wise words, or even a WTF are you doing, it would be very much appreciated.
(diagram attached)
Apologies if none of that makes sense, please do ask away about any specific point!
Pain points:
1. UI
I want a text message style format so the textline example is perfect. I also want I want specific dialogues to go to specific UI elements. I also want to have many conversations with the same actor and keep all specific actor conversations in that same place. I tried so many different ways to get conversations routing to different UI areas the only thing that ever yielded results was the combination of StartConversation with an actor transform that has an OverrideDialogueUI script on it. It's awful, I hate it, please laugh/cry/help.
I also had the worst time with StartConversation immediately putting text in those (textline) UI objects, as it's part of our UI to bring them up when you're ready to read them. If the elements were active at the time StartConversation occurs then it's all good the text goes in the right place, if not then it automatically creates a new UI object to dump the text in and that is not at all what I want. So my hideous workaround is to keep all the actor textline ui elements active but not on the screen, and then moving them into place when the player wants to read them. It's awful, I hate it, please... well you know.
2. Quest Event
Why do I track quests in our own tracker? Because I couldn't figure out how to stick a bunch of quest specific data into quests. I saw that there was something about getting it all in there via a json string, but ultimately I want to be able to use the editor to set a bunch of values, and if it's all there in a json string then it's not very designer friendly. I'm sure I'm completely off base here and I would love for it to be wholly encompassed within QM but actually I'm at peace with this bit, this is just the reasoning why I track my own quests.
What I hated was trying to read the status of a quest. There's a litany of different methods throughout the forums / documentation and the only one that ever worked for me was QuestLog.GetQuestStatus. I could just check this on a timer and be done with it, but I'd rather know specifically when the quest is updated. Again I struggled to find anything that I could hook into, so instead I've got an OnExecute event at a specific conversation node to tell my quest tracker "go and query QM for the new quest status". Ditto to it being awful.
3. Read Quest Data
I have no idea why I find it so difficult to read data out of QM.
It seems to me that there are so many avenues to getting quests up and running that it's so confusing as to what's going on.
Does it go in the quest journal, do I read data from the quest journal, is quest journal just a ui thing or is it necessary for the quest to be activated from the dialogue system, do I need a quest giver, can I just run this all via scripts instead, why do some methods seemingly update the quest scriptable object and some the runtime instance of the quest scriptable object. At this point I'm so overwhelmed with the terminology it's kinda lost all meaning and I'm struggling to even explain the setup to the team.
My gut feeling is that so much of it is focused on making simple to use UI components and simple flow to them for users to play with quickly that it somehow is not simple at all to get to the meat of it underneath.
Again QuestLog.GetQuestStatus is the only thing I could get working in the end, and even then it's just a status, so everything else is up to my tracker. In that dream world I'd love for QM to handle everything. Big I hate it ditto, sorry for the rant
Misc Things
- We're obviously using both Quest Machine AND Dialogue System, and to be completely honest I find that there's not enough specific information on how those two work together. Having "Quests" available in Dialogue System makes searching for the right answer even more frustrating as there's terminology overlap.
- Textline dialogue UI
- I do not want it to clear the conversation UI, I want to retain it on screen as an permanent log between the player and that actor.
- How do I get it to not erase what's already been output to the UI component?
- OR how do I retrieve the data in what's already been put there so I can rebuild it on demand?
- Once I've got all the dialogue flowing into UI object, how do I determine what conversation each bit of dialogue comes from? Ie I want to put a conversation spacer in the UI, think gmail email history flowing from top to bottom, or even just a simple line element separating the different conversations.
- All our quest machine dialogue comes from the dialogue system. How do I go about presenting the player with multiple choices for a reward (for example, I'm mostly just talking about defining buttons for custom actions etc) when it's got this bridged plugin setup? If it was just using QM then you'd do multiple reward buttons and that would go through to the quest journal, but when it's coming from DS I have no idea. Ugh I hope that makes sense!
- I fully realise what a sh*tstorm of a post this is, so if it's helpful I can totally strip out our QM & DM setup to a separate scene showing off all the nonsense. Just let me know.
- Finally, thank you! You're a star and I wish I knew your system as intimately as you do, then of course I wouldn't be writing this and would be working on world peace instead.
(I've probably some stuff... let's start with this )
Cheers,
Simon