Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

[RELEASED] Dialogue System for Unity - easy conversations, quests, and more!

Discussion in 'Assets and Asset Store' started by TonyLi, Oct 12, 2013.

  1. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @takapi! Several of the older demos were built for the Unity web player. To play them, you'll need to use Internet Explorer or another browser that still supports the Unity web player. This weekend, I'll update several of the demos to use WebGL instead. (I've been busy updating the Dialogue System itself. :)) If you have the 2D Action RPG Starter Kit, the integration is included in the Dialogue System's Third Party Support folder. You can import it and run it on your own this way.
    Hi @Sigma266! That's the way Selector and Proximity Selector are designed. They only target GameObjects with Usable components. The Usable component is kind of like tagging your GameObject, except it includes additional targeting information, and it also doesn't actually use the GameObject's tag so you can use the tag for other purposes.
     
  2. takapi

    takapi

    Joined:
    Jun 8, 2013
    Posts:
    79
    Hi, TonyLi.
    I have the 2D Action RPG Starter Kit, and imported it.
    Therefore, the Demo has run.
    thanks, a lot!
     
    TonyLi likes this.
  3. celestialamber

    celestialamber

    Joined:
    Mar 29, 2017
    Posts:
    2
    Hello, TonyLi.
    I have a conversation where the converser increases the variable of two stats based on what the actor picks.
    However, I want to have a Dialogue variable for each stat set equal to the values in my C# scripts to have it check whether I can keep upgrading my stats or if I have hit the maximum. Is there any way to do this?
     
  4. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @thtRS - Sure! You can register your own C# with Lua so you can enter them in dialogue entry nodes' Script and Conditions fields.

    Here's an example script:
    Code (csharp):
    1. using UnityEngine;
    2. using PixelCrushers.DialogueSystem;
    3.  
    4. public class MyScript : MonoBehaviour {
    5.     public int strength;
    6.     public int intelligence;
    7.     public int dexterity;
    8.     public charisma;
    9.  
    10.     void OnEnable() {
    11.         Lua.RegisterFunction("GetStat", this, SymbolExtensions.GetMethodInfo(() => GetStat(string.Empty)));
    12.         Lua.RegisterFunction("SetStat", this, SymbolExtensions.GetMethodInfo(() => GetStat(string.Empty, (double)0)));
    13.      }
    14.  
    15.     void OnDisable() {
    16.         Lua.UnregisterFunction("GetStat");
    17.         Lua.UnregisterFunction("SetStat");
    18.     }
    19.  
    20.     public double GetStat(string name) {
    21.         switch (name) {
    22.             case "strength": return strength;
    23.             case "intelligence": return intelligence;
    24.             case "dexterity": return dexterity;
    25.             case "charisma": return charisma;
    26.             default: return 0;
    27.         }
    28.     }
    29.  
    30.     public void SetStat(string name, double value) {
    31.         var intValue = (int) value;
    32.         switch (name) {
    33.             case "strength": strength += intValue;
    34.             case "intelligence": intelligence += intValue;
    35.             case "dexterity": dexterity += intValue;
    36.             case "charisma": charisma += intValue;
    37.         }
    38.     }
    39. }

    The script adds Lua functions GetStat("name") and SetStat("name", value). You might use them like this in a conversation:
    • NPC Dialogue Text: "Puny weakling. Drink this strength potion."
      Conditions: GetStat("strength") < 9
      Script: SetStat("strength", 18)
    The node above will only play if the player's strength stat is under 9. When it plays, it will set the player's strength to 18.

    Here's an example that lets the player choose the stat:
    • NPC Dialogue Text: "Which potion do you want?"
      • Player Dialogue Text: "Strength potion."
        Script: Variable["chosenStat"] = "strength"

      • Player Dialogue Text: "Intelligence potion."
        Script: Variable["chosenStat"] = "intelligence"
    • ...
    • Player Dialogue Text: "[drink potion]"
      Conditions: GetStat(Variable["chosenStat"]) <= 16
      Script: SetStat(Variable["chosenStat"], 2 + GetStat(Variable["chosenStat"]))
    In this example, the player can choose a strength or intelligence potion. It records the choice in the variable chosenStat. Later on, when the player drinks the potion, it uses that variable value in GetStat() and SetStat() to add 2 points to the chosen stat. But it only allows the player to drink the potion if the chosen stat is less than or equal to 16.
     
  5. Sigma266

    Sigma266

    Joined:
    Mar 25, 2017
    Posts:
    99
    Hey Tony. I encountered more problems with the Proximity Selector because why not? :(

    So, the thing works fine until a conversation is over. When it's done my character looks at another direction for like 0.5 secs then it goes back to the direction it was facing before. It's really annoying. Adding any other object in the actor transform field makes it stop to do so, but at the same time that doesn't make considering it lets my character walk around while talking. Oh and also, when a conversation is over(without any object in actor transform field) if I, for example, touch the edge of a wall, my character start spinning around like there's no tomorrow. I don't know if it has something to do with my character's Rigidbody or what.(or it's possible that my scripts are really bad haha) I'm so confused.:confused:
     
  6. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @Sigma266 - It sounds like something's happening with your character controller script when it gets disabled and then re-enabled.

    You could write a simple script that does the same thing as when a conversation stops and starts -- disable components, set animator parameters, etc. -- but on a keypress instead. Maybe something similar to:
    Code (csharp):
    1. void Update() {
    2.     if (Input.GetKeyDown(KeyCode.Alpha1)) {
    3.         GetComponent<MyCharacterController>().enabled = false;
    4.         animator.SetParameter("speed", 0);
    5.     } else if (Input.GetKeyDown(KeyCode.Alpha2)) {
    6.         GetComponent<MyCharacterController>().enabled = true;
    7.     }
    8. }
    Then play your game and test out stopping and starting your character with keypresses. This will help isolate the problem.

    Please also feel free to send a copy of your project to tony (at) pixelcrushers.com. I'll be happy to take a look.
     
  7. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    RT-Voice Now Supports All Unity Platforms

    Crosstales just announced that their text-to-speech plugin, RT-Voice, now supports all Unity platforms. Using the Dialogue System's RT-Voice integration package, it's easy to enable text-to-speech in your conversations and barks by just adding a single component. And if you also use the SALSA integration, it'll be automatically lip-synced!
     
    Hormic likes this.
  8. HeyItsLollie

    HeyItsLollie

    Joined:
    May 16, 2015
    Posts:
    68
    Hi Tony, just out of curiosity: Is there a known collection/repository of custom sequencer commands available anywhere, besides the two extras on the Pixel Crushers website? I'm looking into making a couple modified versions of MoveTo() - one that works based on speed rather than duration, and another that accepts position coordinates rather than relying on game objects. I just want to be sure that I'm not retreading old ground!
     
  9. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @3noneTwo - There isn't a larger repository anywhere that I'm aware of, but please feel free to send me any custom commands that you want to share. I'll be happy to add them to the list. Most devs have been using the built-in commands, including many commands for third party integration, or writing commands that are very specific to their projects.
     
  10. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Dialogue System for Unity 1.6.9 Now Available on Asset Store

    Version 1.6.9 is now available on the Asset Store! (release notes)
     
  11. Zephus

    Zephus

    Joined:
    May 25, 2015
    Posts:
    356
    Thank you, the new version is working very well so far.

    I got another small question - how do I delay a message node? I've tried Delay() in the sequencer, but I guess that's for something else.
    I basically just want something like this:

     
  12. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @Zephus - If you want it in the same node, you can use a couple "\." codes in your text, such as:

    Hey, how are you? \.\. Fine, don't answer me then.

    Each \. pauses the typewriter effect for 1 second by default. (You can change the duration on the typewriter effect component.)

    If you want it to be a separate node, you can create three nodes:
    • NPC: "Hey, how are you?"

    • NPC: (blank space character in Dialogue Text)
      Sequence: SetContinueMode(false); SetContinueMode(true)@2

    • NPC: "Fine, don't answer me then."
    The sequence turns off the continue button for 2 seconds, forcing the player to wait for 2 seconds. This may not be what you want, but I put it here as an option.

    If you want to offer the player a timeout option, you can use the SetTimeout() sequencer command:
    • NPC: "Hey, how are you?"
      Sequence: SetTimeout(2)

      • Player: "[say nothing]"
        • NPC: "Fine, don't answer me then."
          Sequence: SetTimeout(0)
      • Player: "Well, thank you."
        • NPC: "That's good to hear."
          Sequence: SetTimeout(0)
    In this example, if the player doesn't respond within 2 seconds it will automatically time out and choose the first response ([say nothing]).
     
  13. Zephus

    Zephus

    Joined:
    May 25, 2015
    Posts:
    356
    Thank you for the options. I think none of those are exactly what I was looking for though.

    The second one is the closest I think. Two things that bug me:
    1) It doesn't continue automatically after that
    2) There's an empty text box for the 2 second duration

    For 1) I've tried ;Continue() after the sequence code, but that only leads to the message being skipped and me being unable to fast-forward the typewriter effect after that for some reason.
     
  14. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Try this sequence:
    Code (sequencer):
    1. SetContinueMode(false);
    2. required SetContinueMode(true)@2;
    3. Continue()@2
    The required keyword ensures that it turns continue mode back on. And the "@2" in Continue()@2 tells the Continue() command to run at the 2-second mark.


    What do you want to happen in this case? Hide the text box? Show "..."? Is it something you can generalize, or is it a one-off? If it's a one-off, you could use the SetActive() sequencer command, something like:
    Code (sequencer):
    1. SetContinueMode(false);
    2. SetActive(Subtitle Panel, false);
    3. required SetContinueMode(true)@2;
    4. required SetActive(Subtitle Panel, true)@2;
    5. Continue()@2
     
  15. Zephus

    Zephus

    Joined:
    May 25, 2015
    Posts:
    356
    Ah thank you, I didn't know about the required keyword. It's working like I want now.

    You asked if it's something I could generalize. It is, since I wanted to do exactly what you did - hide the subtitle panel.

    Is there a better solution? "Hide panel, do something else (in this case just wait), continue with next node" seems to be something I'd use a lot. Maybe I'd like to say something, then move the character over to some other place and then continue with the conversation. Or would I create another conversation for this?

    Another example would be "Node; emoji above character; next node". Like in Golden Sun.
     
  16. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Try clearing the Dialogue Text (and Menu Text) so they don't contain anything, not even a blank space character. If there's no text, the dialogue UI will hide the subtitle panel for the duration of the node.

    If you're still using the JRPG dialogue UI, which keeps the main dialogue panel visible during the entire conversation, and if you want to hide the entire thing, you'll have to continue with the previously-described method. Or you could write a custom sequencer command or OnConversationLine method to hide the main dialogue panel for the duration of the node. For example, your OnConversationLine method could look similar to this, to hide the panel whenever the dialogue text is blank:
    Code (csharp):
    1. void OnConversationLine(Subtitle subtitle) {
    2.     var hasText = !string.IsNullOrEmpty(subtitle.formattedText.text);
    3.     (DialogueManager.DialogueUI as UnityUIDialogueUI).dialogue.panel.gameObject.SetActive(hasText);
    4.     base.OnConversationLine(subtitle);
    5. }
    (Full disclosure: I just typed that into the reply. I haven't tested it.)
     
  17. Zephus

    Zephus

    Joined:
    May 25, 2015
    Posts:
    356
    I wrote a custom sequencer command and it seems to be working so far. Thanks again.

    edit: By the way - Unity says there are some obsolote APIs in the .dll since 5.6. Just letting you know.
     
    Last edited: Apr 8, 2017
  18. Sigma266

    Sigma266

    Joined:
    Mar 25, 2017
    Posts:
    99
    Tony, I was able to fix the bugs! There were indeed some mistakes with my scripts. More ugly stuff incoming though.

    Pressing Z, makes it possible to continue a conversation, that's how I set it. But if after I press it I mistakenly press another key it starts to get buggy. The message dissapears for about 1 sec and then it comes back. Oh, and the rest of the conversations in the scene become buggy too. For example, after one or a couple of messages they go back to the message that started the bug. I tried the bug by clicking instead of pressing Z, but that works fine, so I guess it has something to do the continue button, even though I don't know what it could be...

    Thanks you!
     
  19. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    A Unity 5.6-specific version should be on the Asset Store soon that will remove the warning. In the meantime, it's just a warning; everything works fine.

    Would it be possible for you to send a copy of your script(s) and screenshots of your continue button configuration to tony (at) pixelcrushers.com. A reproduction scene would be even better, if possible. Please let me know what version of Unity to use.
     
  20. Mazak

    Mazak

    Joined:
    Mar 24, 2013
    Posts:
    226
    Hi Tony,
    In this thread you solve the issue with linking between conversations http://www.pixelcrushers.com/phpbb/viewtopic.php?f=3&t=740&p=3683&hilit=chatmapper#p3683

    If I use the menu Window->Dialogue System->Converters method, then link the database to the Dialogue System I don't get the blank box.

    If I use the c# code below to import the XML at runtime I do get the blank box.

    I tried to use the Sequence described but it does not seem to import using the same XML file

    Code (CSharp):
    1.  
    2.  
    3.  
    4.                 AddDatabase = true;
    5.                 var cmproj = PixelCrushers.DialogueSystem.ChatMapper.ChatMapperTools.Load(filePath);
    6.                 if (cmproj == null)
    7.                 {
    8.                     ErrorLogWriter.WriteError("Cannot load " + filePath + " file");
    9.                     return false;
    10.                 }
    11.                 CreateDialogueDatabase(cmproj);
    12.  
    13.  
    14.  
    15.         private void CreateDialogueDatabase(PixelCrushers.DialogueSystem.ChatMapper.ChatMapperProject chatMapperProject)
    16.         {
    17.             try
    18.             {
    19.                 if (AddDatabase)
    20.                     DialogueManager.AddDatabase(chatMapperProject.ToDialogueDatabase());
    21.                 else
    22.                     DatabaseMerger.Merge(DialogueManager.MasterDatabase, chatMapperProject.ToDialogueDatabase(),
    23.                         DatabaseMerger.ConflictingIDRule.AssignUniqueIDs, true, true, true, true, true, true);
    24.                 AddDatabase = false;
    25.                 ErrorLogWriter.WriteError("Database read");
    26.             }
    27.             catch(Exception kaboom)
    28.             {
    29.                 ErrorLogWriter.WriteError("Cannot load " + chatMapperProject.Title + "\n -> " + kaboom.ToString());
    30.             }
    31.         }
    32.  
     
  21. Sigma266

    Sigma266

    Joined:
    Mar 25, 2017
    Posts:
    99
    I checked the site and I got a little lost. Is it fine to just post my player script(I'll explain why only this one after you post) and screenshots here?
     
  22. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    The Chat Mapper Converter window does a little extra fixup at the end, whereas ChatMapperProject.ToDialogueDatabase() just converts the Chat Mapper project to a dialogue database without the extra fixup. In the next release, I'll add a default option to convert the Chat Mapper project and also apply the extra fixup.

    In the meantime, you can run your conversations through this method:
    Code (csharp):
    1. void SetConversationStartSequenceToNone(Conversation conversation)
    2. {
    3.     DialogueEntry entry = conversation.GetFirstDialogueEntry();
    4.     if (entry == null)
    5.     {
    6.         Debug.LogWarning(string.Format("{0}: Conversation '{1}' doesn't have a START dialogue entry.",
    7.             DialogueDebug.Prefix, conversation.Title));
    8.     }
    9.     else
    10.     {
    11.         if (string.IsNullOrEmpty(entry.Sequence))
    12.         {
    13.             if (Field.FieldExists(entry.fields, "Sequence"))
    14.             {
    15.                 entry.Sequence = "None()";
    16.             }
    17.             else
    18.             {
    19.                 entry.fields.Add(new Field("Sequence", "None()", FieldType.Text));
    20.             }
    21.         }
    22.     }
    23. }
    For example, change this:
    Code (csharp):
    1. if (AddDatabase)
    2.     DialogueManager.AddDatabase(chatMapperProject.ToDialogueDatabase());
    3. else ...
    to this:
    Code (csharp):
    1. var db = chatMapperProject.ToDialogueDatabase();
    2. foreach (var conversation in db.conversations)
    3. {
    4.     SetConversationStartSequenceToNone(conversation);
    5. }
    6. if (AddDatabase)
    7.     DialogueManager.AddDatabase(db);
    8. else ...
     
    Mazak likes this.
  23. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Sure, it's fine to post here. Or you can email it to tony (at) pixelcrushers.com. Just replace the " (at) " with "@". Whichever you prefer.
     
  24. Sigma266

    Sigma266

    Joined:
    Mar 25, 2017
    Posts:
    99
    Actually, i'm just gonna link you the scene you made for me. (The one with Proximity Selector)
    This is also a way to know that my scripts aren't the problem here, but maybe my buttons' configurations are.
    https://www.mediafire.com/?85o0qn8o0eerul5

    Okay, let me tell you how this annoying bug pops up first. You talk to the NPC, and before you go to the next message press the Up arrow and the Right arrow then Z to proceed.(I use those, but I think you can try any other key as long at it's of the four directional arrows, because others keys don't seem to cause the bug) Try holding those keys for a few seconds just to see what happens.
    It gets even buggier when you have more than one answer, which is why I added one there. Also, if you're wondering why the text is skippable it's because I changed to test things faster.

    Now, hopefully I didn't link a wrong scene or something.(or made even more mistakes cause that happens A LOT) :D Thank you very much for the help!
     
  25. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @Sigma266 - It looks like the continue button is getting caught up in the arrow key navigation of the response buttons. Try moving the continue button GameObject outside of the Subpanel:
     
  26. Mazak

    Mazak

    Joined:
    Mar 24, 2013
    Posts:
    226
    No change.

    When I debug -> entry.Sequence = "None()" before I call the function.

    I examined the xml file and Sequence had a <Value /> ...
     

    Attached Files:

  27. Mazak

    Mazak

    Joined:
    Mar 24, 2013
    Posts:
    226
    Fixed it..

    It appears on the XML read the ActorID is forced to be the player.

    Code (CSharp):
    1.         private void SetConversationStartSequenceToNone(Conversation conversation)
    2.         {
    3.             var entry = conversation.GetFirstDialogueEntry();
    4.             if (entry == null)
    5.             {
    6.                 ErrorLogWriter.WriteError(string.Format("{0}: Conversation '{1}' doesn't have a START dialogue entry.",
    7.                   DialogueDebug.Prefix, conversation.Title));
    8.             }
    9.             else
    10.             {
    11.                 // need to swap the conversation
    12.                 var t = entry.ConversantID;
    13.                 entry.ConversantID = entry.ActorID;
    14.                 entry.ActorID = t;
    15.  
    16.                 if (!string.IsNullOrEmpty(entry.Sequence))
    17.                     return;
    18.                 if (Field.FieldExists(entry.fields, "Sequence"))
    19.                 {
    20.                     entry.Sequence = "None()";
    21.                 }
    22.                 else
    23.                 {
    24.                     entry.fields.Add(new Field("Sequence", "None()", FieldType.Text));
    25.                 }
    26.             }
    27.         }
    This seems to have fixed it.

    I tried swapping them in Chatmapper but it did not make a difference, so I forced it in the 'fixer' code.

    There is really no need to set to None() because that is inserted by the XML reader.
     
  28. Sigma266

    Sigma266

    Joined:
    Mar 25, 2017
    Posts:
    99
    Sorry I just did that, but nothing.

    EDIT: I'm starting to think that the Subpanel might be, in some way, the problem. Enabling the Subpanel in its navigation section causes the bug, cause if I click while pressing the keys and the thing it's turned off, there are no bugs.
     
    Last edited: Apr 9, 2017
  29. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Got it. I'll publish a patch this upcoming week that performs all of the Chat Mapper Converter window's fixup in the ChatMapperProject.ToDialogueDatabase() method, too. The complete fixup that it does is:
    • Sets the START node's Sequence to None() if it's blank.
    • Swaps the actor and conversant when appropriate (similar your code above).
    • Converts Chat Mapper's Audio Files field into AudioWait() sequencer commands.
    • Connects actor portraits with assets in your project*.
    * The ChatMapperProject.ToDialogueDatabase() method won't be able to connect actor portraits at runtime. This process uses UnityEditor.AssetDatabase to search your project for matching portrait images. UnityEditor.AssetDatabase isn't available in builds. If you don't use portrait images, or if you've already defined those actors in a dialogue database that you've created at design time, you don't need to worry about this.

    Hi @Sigma266 - In that case, separate the panels:



    This package includes that change in the example scene:

    ProximitySelectorExample_2017-04-09.unitypackage

    It also includes a version that uses Unity UI, which you may prefer to use instead of legacy Unity GUI. Unity UI is Unity's new GUI system, and it's a lot easier to work with. Unity UI uses input settings in Unity's Input Manager (Edit > Project Settings > Input) instead of keycodes. By default, the "Submit" input is mapped to the space bar key, not "Z", so you'll have to press space to test the example scene. You can change the "Submit" input in your own project.
     
    Mazak likes this.
  30. Mazak

    Mazak

    Joined:
    Mar 24, 2013
    Posts:
    226
    Oh cool, we will be doing that in the very near future!

    Thanks Tony!
     
  31. Sigma266

    Sigma266

    Joined:
    Mar 25, 2017
    Posts:
    99
    AHHHHHHHHHHHH!! It works! Omg, I have no idea how to thank you! I've spending so many hours with this bug I almost lost my mind!
     
  32. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Thanks for sticking with it! UI issues can be real head-scratchers sometimes. I'm really glad it's working now.
     
  33. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Dialogue System 1.6.9 for Unity 5.6 Update

    The Asset Store now has a version of 1.6.9 built specifically for Unity 5.6+, which eliminates the harmless but annoying "obsolete API call" message. (Thanks, @Zephus!)
     
  34. longroadhwy

    longroadhwy

    Joined:
    May 4, 2014
    Posts:
    1,551
  35. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @longroadhwy - It could be the very near future. I wrote a basic integration a while ago that adds bark and conversation hooks to Deftly for a personal project that I've put on hold for the time being. What else would you be looking for in an integration package? Modifying inventory and stats during conversations seems like a must. My personal project doesn't call for saving games mid-level, so I haven't given any thought to integrating the Dialogue System's save system yet. Would you need that?
     
  36. LaneFox

    LaneFox

    Joined:
    Jun 29, 2011
    Posts:
    7,462
    Feel free to ping me to facilitate making the integration happen.
     
    TonyLi likes this.
  37. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Thanks, Lane! Deftly is nicely modular and has lots of useful hooks, so I haven't had any trouble integrating so far.

    I think the only extra thing that might be helpful would be a way to to tell all AIs pause and resume fighting (e.g., during conversations). Is there an easy way to do this?
     
  38. LaneFox

    LaneFox

    Joined:
    Jun 29, 2011
    Posts:
    7,462
    You could use the PeacefulMode toggle in settings go globally passify all enemies. (I'm not certain if this stops existing aggression, though)
    Code (csharp):
    1. StaticUtil.Preferences.PeacefulMode
    Or change their the IsDead state during conversations to passify a specific target.
    Code (csharp):
    1. // if Intellect is known
    2. targetIntellect.ThisSubject.IsDead
    3. // or if Subject is known
    4. targetSubject.IsDead
    A specific 'frozen' bool might be useful on the Intellect here. I can add one if those options are not ideal.
     
    TonyLi likes this.
  39. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Thanks, @LaneFox! I'll try that out this weekend when I work on the integration.
     
  40. longroadhwy

    longroadhwy

    Joined:
    May 4, 2014
    Posts:
    1,551
    That is good that you did a basic integration already. I thought you were starting from scratch. That sounds good for the bark and conversation part. Also modifying inventory and stats during conversations would be needed too.

    Thanks again.
     
  41. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    You got it!
     
  42. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    RT-Voice Support Package Updated

    The latest version of RT-Voice (2.7.1) introduced an API change. The Dialogue System's RT-Voice Support package has been updated accordingly. It's available on the Dialogue System Extras page.
     
    Hormic likes this.
  43. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Dialogue System for Unity On Sale 30% Off

    The Dialogue System for Unity is available in the Asset Store sale for 30% off right now!
     
  44. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Rise of the King on Kickstarter

    Check out Revelation Games' great-looking Rise of the King, made with the Dialogue System! Rise of the King is "a third-person action-adventure game with survival elements, set within a medieval fantasy world. You will have to survive as you travel across the dangerous lands on your journey to find answers as you investigate the disappearance of a missing child.

    You will explore a sweeping storyline filled with unique characters and meaningful interactions along your journey. Our gameplay is a unique combination of survival, action and investigation mechanics to flesh out a much more dynamic and immersive experience."



    Back on Kickstarter
     
    Last edited: Apr 18, 2017
  45. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Father and Son Now Available on the Apple App Store and Google Play!

    Your memories, your choices: your life.

    What begins as a story of a son that never knew his father becomes a universal and timeless story where the present and the past are a set of meaningful choices.​


    Father and Son is the first game published by an archaeological museum, Museo Archeologico Nazionale di Napoli, and developed by fellow Unity community member Alessandro @NeatWolf Salvati! (While you're at it, check out NeatWolf's great particle system assets on the Asset Store, some of which are part of the Unity Asset Store's Biggest Sale Ever event going on right now. I'm using them in a couch co-op shooter made with Deftly.)

    Father and Son uses the Dialogue System's language localization features and Corgi 2D Engine integration package.

    Free on [ Apple App Store ] and [ Google Play ]
     
    Last edited: Apr 20, 2017
    NeatWolf likes this.
  46. SkyTech6

    SkyTech6

    Joined:
    Jul 14, 2015
    Posts:
    151
    @TonyLi Hey, was thinking about picking up Dialogue System while it was on sale. I noticed that it says it has been tested on all the standard PC platforms and phones... but what about Linux, PS3/4/Vita, Xbox One, Nintendo 3DS?

    Is there a reason Dialogue System wouldn't work on those systems? Or have you just not tested it yourself personally so don't feel save putting it in the description? (If that's the case... has anyone you know of tested it?...)

    The game I was wanting the asset for I had hoped to pitch to ID@Xbox (since I'm already a developer with them) and not being able to use Dialogue System for a dialogue heavy game would suck. D:
     
  47. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi @SkyTech6 - The store description doesn't list Linux, PS3/4/Vita, Xbox One, Nintendo 3DS because they're not in the regular testing rotation for releases, but other devs have confirmed that the Dialogue System works with each of those, as well as Vita and Ouya.
     
    SkyTech6 likes this.
  48. NeatWolf

    NeatWolf

    Joined:
    Sep 27, 2013
    Posts:
    924
    Thanks for featuring the game Tony, your support has been invaluable these months!

    You're now in the Very Special Thanks section of the credits, along with the Museum Director of the most important national museum of "classic" archaeology on earth :)

    @SkyTech6: The nice thing about Dialogue System, now that I can say I'm kind of mastering the basics (I'm still scratching the surface tho, it's so versatile!), is that has a layer that totally abstracts from its visual implementation. Base classes for extending the graphical aspects are provided, even the full source code, and there are literally tons of supported third party sub-packages for making it easily compatible with everything else.

    And when something is not covered, there's Tony, who by far is offering the best, most satisfying support I ever found.
    Better than Unity's Support - by speed, clarity and depth of explanation.

    I already said it in my most enthusiastic review I ever wrote for an asset - this is Tony "Amazon" Li :)

    And, I have a delivered product thanks to him as a proof, a few posts above. Be sure that if at some point some Linux/Any platform package is going to be needed, it's going to be there in an astonishly timely manner!

    Ok, I got carried, but it's true :)
     
  49. flashframe

    flashframe

    Joined:
    Feb 10, 2015
    Posts:
    789
    Seconded!
     
    TonyLi likes this.
  50. katie-muller

    katie-muller

    Joined:
    Feb 18, 2014
    Posts:
    18
    Hey Tony! I hope all is well. Im back with another question for you =)

    I'm trying to use Sequencers to have my conversation continue when the player has selected an enemy, and I got about 90% there. I added an invisible button on top of all of my enemies in their World UI, and when that button is pressed, it uses a Sequencer Trigger (OnUse) to send this sequence: "None()->Message(EnemySelected)"

    This is how my conversation currently looks. I'm trying to replace that "Go!" button, so the conversation continues when an enemy is selected. But I'm not sure what I should put in the Sequence box. I tried finding examples and references, but only found examples on the sequence triggering other things, not just forwarding the conversation =( Thank you very much!

    Capture.PNG