Search Unity

[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,694
    Hi @DavidNLN - I'll probably write a dialogue UI implementation for UIElements when its features have settled in for in-game use. If you end up needing it before then, keep in mind that the Dialogue System will happily work with any implementation of the simple IDialogueUI C# interface, so you could implement a UIElements version yourself, too. The current Unity UI implementation (Standard Dialogue UI) is quite capable and battle-tested, so it may continue to be the go-to dialogue UI implementation depending on how UIElements pans out for Unity.

    Hi @MilziPPG - Glad to help! :)
     
  2. DMRhodes

    DMRhodes

    Joined:
    May 21, 2015
    Posts:
    81
    Afternoon, thank you for the continued updates! I'd like to make a small(?) future feature suggestion if possible please.

    A 'folder' functionality for the Dialogue System variable menus would be handy. Similar to how you can use '/' to stack conversations. I have dozens and dozens of general variables and then my actors all have just as many actor variables - it's easy to lose track after a while so a way to keep things more structured would be great.

    Thank you for your time and consideration as always,

    regards
     
  3. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi @Candy-Bomber - Technically all dialogue database variables are global. But many devs define "scope" by putting strings at the front of their variable names, such as:

    upload_2019-6-10_10-10-12.png

    You can sort the variables by name to group them properly, and filter for the first part such as "Bedroom." to see only those variables. Makes it much easier to manage them.
     
    DMRhodes likes this.
  4. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Dialogue System 2.1.7 Released!

    Version 2.1.7 is now available on the Asset Store!

    Version 2.1.7 Release Notes:

    Core:
    • Dialogue Editor:
      • Improved: Can now drag components onto Sequence field to generate sequencer commands.
      • Improved: If holding Shift down while creating a new node, uses same actor assignments instead of swapping.
    • Improved: Standard UI Quest Log Window can optionally use different templates for heading of currently-selected quest.
    • Improved: Added QuestLog and quest log window option to allow only one quest to be tracked at a time.
    • Improved: Added 'x' (remove) button to Dialogue System Trigger > Run Lua Code action.
    • Improved: Added ProximitySelector method RemoveGameObjectFromDetectedList().
    • Improved: Added IncrementOnDestroy option Manually.
    • Improved: Added DialogueManager.ResetDatabase() option with no param.
    • Improved: Custom sequencer commands may now be in any assembly.
    • Improved: OnConversationCancelled message is now sent to participants as well as Dialogue Manager.
    • Fixed: Bug in localization import of quest Display Name and Group.
    • Fixed: Removing database at runtime didn't remove all database contents.
    • Fixed: If Show PC Subtitles and Skip PC Subtitles After Response Menu were both ticked, and response menu was preceded by a blank, non-group node with a zero-length sequence, player's menu choice would still appear as subtitle.
    • Fixed: Did not use player actor's override response menu when conversation had not previously shown a subtitle.
    • Fixed: Can now delete malformed links in Dialogue Editor.
    • Fixed: Input Device Manager System.IndexOutOfRangeException when first importing asset if project's Input Manager is not ready.
    • Fixed: MissingReferenceException if using Camera() sequencer commands with default Main Camera and scene changed during conversation.
    • Fixed: Sequence "+" GameObject couldn't set Alt+drag options.
    • Fixed: Inspector headings in 2019.1+.
    • Fixed: Adjusted VN & JRPG template dialogue UI prefabs' borders to fully cover subtitle panel.
    • Fixed: SetActive() sequencer command can now resolve 'speaker' and 'listener' keywords.
    • Fixed: Bug that occurred when a Continue() sequencer command was marked required and listened for a sequencer message that hadn't occurred yet.
    • Save System:
      • Improved: Added SaveSystem methods LoadAdditiveScene, UnloadAdditiveScene.
      • Improved: Savers can now implement optional ApplyDataImmediate and OnRestartGame methods.
      • Fixed: Moved DiskSavedGameDataStorer initialization code from Start to Awake so other scripts can check for saved games in their own Start methods.
      • Dialogue System Saver: Save Across Scene Changes is now ticked by default; SaveSystem.RestartGame() automatically resets dialogue database.
    Third Party Support:
    • Adventure Creator: RememberDialogueSystem script now uses Pixel Crushers Save System component and Savers if present.
    • Invector: Fixed auto equip issue when loading saved games or changing scenes.
    • Opsive controllers: Added uccEquipItem() and uccUnequipItem() Lua functions, updated UCC Saver.
    • Realistic FPS Prefab: FPSRigidBodyWalker info is now saved.
    • Spine: Added support.
    • uMMORPG: Fixed bug in removing items by using AddPlayerItemAmount() with a negative amount.
     
    Deckard_89 and DMRhodes like this.
  5. kdgalla

    kdgalla

    Joined:
    Mar 15, 2013
    Posts:
    4,634
    Personally, I've been using quests to store groups of related variables. My game does not have "quests" in the RPG sense, but I find that the Quest object is flexible for other interpretations of the word.
     
    hopeful, DMRhodes and TonyLi like this.
  6. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    That's a good solution, too. Many devs store actor-specific variables in custom actor fields, quest-specific variables in custom quest fields, etc.
     
  7. Deckard_89

    Deckard_89

    Joined:
    Feb 4, 2016
    Posts:
    316
    @TonyLi Would you know why "equip sounds" do not play using the new Lua functions to equip / unequip weapons with Opsive UCC? I could just play the sounds myself of course, but it would be a time-saver if it would work just by using these functions. Is it skipping an event maybe?
     
  8. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi @Deckard_89 - That's by design so it can immediately change equipment. I attached an updated UCCLua script with an additional function:

    uccNotifyOnEquip( notify:Boolean )
    • If set to true, notifies the audio system and other objects when uccAddItem or uccEquipItem equips an item. Otherwise it immediately and silently equips. Initial value is false.
    • Example: uccNotifyOnEquip(true)

    So in your case you will want to call uccNotifyOnEquip(true) once to set the value true. (You can set it as many times as you want, but once at the beginning of the game will do.) This will make it play sounds.
     

    Attached Files:

    Deckard_89 likes this.
  9. Deckard_89

    Deckard_89

    Joined:
    Feb 4, 2016
    Posts:
    316
    @TonyLi This actually works great, thanks again.
    One last thing; You say it only needs to be called once at the start of the game. As in, the very start of the game, or start of the scene? I'd probably do it at the start of each scene, just to be safe.
     
  10. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Just once at the start of the game.

    If you want to turn off sounds again at some point, use uccNotifyOnEquip(false).
     
    Deckard_89 likes this.
  11. KarlKarl2000

    KarlKarl2000

    Joined:
    Jan 25, 2016
    Posts:
    606
    Hi Tony,
    Thanks for the response.

    What would you suggest be the workflow to localize my game dialogue with Dialogue System?

    These are the languages:
    • English
    • Spanish
    • Chinese
    • Japanese
    • Korean
    • French
    • German
    I plan to hire individual freelancers to translate my English text.

    Thanks!
     
  12. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi @indieDoroid - I recommend the workflow in the Localization Tutorial. Briefly: Use the Dialogue Editor's Database > Localization Export/Import foldout.

    I didn't cover one thing in the tutorial, but the Dialogue System can handle it: In addition to the workflow in the Localization Tutorial use Database > Export > Language Text (or the CSV spreadsheets from Localization Export/Import) to identify all of the characters that your fonts will need to support. Some fonts only have basic ASCII characters and can't háñdlê spèçíäl çhàräçtèrs. :)
     
    DMRhodes likes this.
  13. AndyNeoman

    AndyNeoman

    Joined:
    Sep 28, 2014
    Posts:
    938
    Hi @TonyLi, Is there a way to control the text speed on the conversation dialogue text? I want to add pause/delays so the audio does not jump ahead too.
     
  14. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi @AndyNeoman - Sure! The easiest way is to use RPG Maker-style codes. For example:
    • Dialogue Text: "I've solved the mystery! The murderer is... \. the butler!"
    The \. code will pause one second before typing "the butler!" You can change the duration of \. and \, on the typewriter effect component.

    You can also call the StandardDialogueUI's SetTypewriterSpeed(#) method. The change will take effect in the next subtitle.
     
    AndyNeoman likes this.
  15. AndyNeoman

    AndyNeoman

    Joined:
    Sep 28, 2014
    Posts:
    938
    Cheers Tony, just a heads up on the documentation, the \ is missing from the one second delay. Was wondering why .... just typed out the full stops :)
     
  16. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Sorry about that! Thanks for letting me know. The documentation processor stripped the backslash. I just fixed it.
     
    AndyNeoman likes this.
  17. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Dialogue System 2.1.7 Hotfix 20190614 Available

    The Pixel Crushers customer download site has a hotfix that addresses these issues:
    • Fixes bug introduced in 2.1.7: If a sequence has a command that's not recognized, it causes a stack overflow instead of reporting that the command is not recognized.
    • Applying a template to a dialogue database no longer resets the types of variables.
    • Lua wizards remember the last setting to reduce the number of clicks needed to set things up.
    You can also download the hotfix from here: DialogueSystem_2_1_7_Hotfix_20190614.unitypackage

    These changes will also be in version 2.1.8.
     
    SamRock and DMRhodes like this.
  18. DMRhodes

    DMRhodes

    Joined:
    May 21, 2015
    Posts:
    81
    Hey, quick question please. When working inside the dialogue system editor is it possible to have nodes present the text in their "Title" field as the text they display on-top of the node rather than the "Dialogue Text"/"Menu Text" texts? For organizations sake.

    Thank you
     
  19. SickaGames1

    SickaGames1

    Joined:
    Jan 15, 2018
    Posts:
    1,270
    Salsa 2 integration?
     
  20. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    I'll add that as an option.

    I'll be working on it this week.
     
    DMRhodes likes this.
  21. jaytwist28

    jaytwist28

    Joined:
    Jul 18, 2017
    Posts:
    50
    Hey here. I have a question about another one of your many great integrations. In your invector integration, I was wondering if the camera sequence commands work with the invector camera, or are there conflicts with it?
     
  22. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi @jaytwist28 - Sure, just assign the camera to the player's Dialogue System Events component, which is added to the player in step 4 of the Invector integration instructions. In OnConversationStart(), disable vThirdPersonCamera. In OnConversationEnd(), re-enable it:

    upload_2019-6-16_20-22-24.png

    The process is very similar for Opsive's character controllers, too. The steps to use Camera() commands in Opsive's controllers are covered in this forum post.
     
  23. jaytwist28

    jaytwist28

    Joined:
    Jul 18, 2017
    Posts:
    50
    I appreciate it and thanks for answering another one of my questions, your always quick to help, even with things that I'm sure youve answered a dozen times already.
     
  24. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Always happy to help!
     
  25. sacb0y

    sacb0y

    Joined:
    May 9, 2016
    Posts:
    874
    I see there is a "always force response" menu setting, but what if i wanted to do that per entry?

    Like I want to gate dialogue progression with a single choice, and then have dialogue progress normally between characters before gating the dialogue again later with a single choice?

    Otherwise i'm forcing the player to click every time they speak instead of only sometimes, in these cases where i may add a branch later.

    EDIT: Never mind i just discovered markup tags!
     
    Last edited: Jun 17, 2019
    TonyLi likes this.
  26. sacb0y

    sacb0y

    Joined:
    May 9, 2016
    Posts:
    874
    Actually another question for some reason i can't drag scene objects into events for dialogue entries. It only lets me add objects from assets not an object in the scene.

    This worked fine for the dialogue system trigger script. Am i missing something?

    I'm also having trouble getting cinemachine to work, but maybe i haven't spent enough time on it...

    EDIT: Figured out cinemachine thing but the issue with the events is still something i can't figure out.
     
    Last edited: Jun 18, 2019
  27. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    @sacb0y - I see you found cutscene sequences. Since the dialogue database doesn't exist within any particular scene, it can't reference scene objects*. Most devs use cutscene sequences instead. In many cases, you don't have to type anything. You can drag GameObjects, components, and audio clips onto the Sequence field to automatically generate commands, and use the "+" menu for more.

    For:
    Code (sequencer):
    1. AnimatorTrigger(next, Naomi);
    temporarily set the Dialogue Manager's Other Settings > Debug Level to Info. This will log a lot of info to the Console, including two lines for that sequencer command. The first will appear when the dialogue entry starts; it reports the command as the sequencer's parser understands it. The second will appear when the command actually runs. Since there is no '@' at the end of the command to designate timing, it will run as soon as the dialogue entry starts.

    Double-check that both lines appear, and that neither one logs a warning.

    If the logs look OK, double-check your animator. Maybe it's transitioning into 'next' and then immediately transitioning to another state.

    * For a future update, I'm contemplating adding support for ExposedReferences, which is a way to reference scene objects from outside the scene. It's not available yet. It will be an option that you can choose to turn on or not, since it will add a little more size to the dialogue database file.
     
  28. sacb0y

    sacb0y

    Joined:
    May 9, 2016
    Posts:
    874
    Lol yeah i removed that quickly cause i realized it was not dependent on the animator name but the object name which was slightly different (NaomiRig) while the other characters name was shared for both. So silly me for that lol.

    So for events i should use the sequencer instead of "OnExecute"? Why does the OnExecute event not work with scene objects?

    But yeah that debug info should be very useful.
     
  29. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    This tip might be useful: If Naomi is the speaker or listener of the dialogue entry, you can use the keywords speaker or listener instead of specifying an actual GameObject name.

    It's the way Unity is designed. Objects that exist outside of a scene can't reference GameObjects inside a scene.
     
  30. sacb0y

    sacb0y

    Joined:
    May 9, 2016
    Posts:
    874
    So dialogue events are considered outside of the unity scene? Hm ok fair enough.

    And that tip is really useful >:O

    EDIT: OK so one more thing i noticed.

    If i end the conversation with "DialogueSystemController.StopConversation" the cinemachine camera still maintains priority if one was used in the sequencer. What do i do about that if i don't know which virtual camera might be used? And setting a new virtual camera might be risky.
     
    Last edited: Jun 18, 2019
  31. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Yes. The OnExecute() events on dialogue nodes in the dialogue database are entirely separate from any Unity scene.

    On the other hand, Dialogue System Trigger components always exist in a scene, so their OnExecute() events can reference scene objects, as you mentioned previously.

    Can you use a Cinemachine Priority On Dialogue Event component to reset the priority at the end of the conversation? To see an example, import the "Cinemachine Support" unitypackage located in the Dialogue System's Third Party Support folder. It contains an example scene. In the scene, if you talk to Private Hart one Cinemachine Priority On Dialogue Event runs on conversation start to bump up the priority of the vcam that looks at the conversation participants. A second Cinemachine Priority On Dialogue Event runs on conversation end and bring this vcam's priority back down to zero, allowing the player's gameplay vcam to take over again.

    If you're working with multiple vcams during the conversation, you can use the CinemachinePriority() sequencer command. For example, in the last dialogue entry of the conversation, you can use it to reset vcams to their gameplay priorities.
     
  32. sacb0y

    sacb0y

    Joined:
    May 9, 2016
    Posts:
    874
    Yeah there's multiple changing through out the scene. The problem is i'd like the player to end the conversation at eny time.

    Hm i might just have to resort to some kind of state driven solution.
     
  33. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    You can add a Dialogue System Trigger to the player. Set the trigger dropdown to OnConversationEnd. Select Add Actions > Play Sequence, and add CinemachinePriority() sequencer commands to set the vcams to the pre-conversation values.

    Or, instead of the Dialogue System Trigger, add a bunch of Cinemachine Priority On Dialogue Event components to set the vcams to their pre-conversation values.

    Or use a Dialogue System Events component or a script with OnConversationStart and OnConversationEnd method. (The Dialogue System has a bunch of special script methods for events.) For example, in OnConversationStart you could record the priorities of vcams. In OnConversationEnd, you could set the vcams back to those original priorities.
     
  34. SamRock

    SamRock

    Joined:
    Sep 5, 2017
    Posts:
    250
    TonyLi, Akshara and magique like this.
  35. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Awesome! Very nice, @SamRock! (Is that... a war pug?)
     
  36. SamRock

    SamRock

    Joined:
    Sep 5, 2017
    Posts:
    250
    Thank you! Not really :D Will be his companion... like Tintin and Snowy (from the comics)
    I need to find a better pug model.
     
  37. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    It's a fine model. With the sneaking and "Enemy Spotted!" I assumed the player and Snowy were going to go Far Cry on the enemy. It just tickled me to think of going into combat with a battle pug. :)
     
  38. SamRock

    SamRock

    Joined:
    Sep 5, 2017
    Posts:
    250
    LOL! That would be funny...Dont give me ideas! :D
     
  39. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Bryant Francis of Gamasutra interviewed CDPR's quest director, Mateusz Tomaskiewicz, in this article:

    From The Witcher 3 to Cyberpunk: The evolution of CD Projekt's quest design

    It's an interesting read, particularly for devs who are working on games with lots of dialogue and quests. If you're writing dialogue and designing quests, you can find some useful tips. He makes good points about some of their design goals, such as never fail the quest based on choices (treat each choice as an interesting outcome, not a fail state) and distinguishing between flavor choices that expand a character's self-expression and tentpole choices that have far-reaching gameplay consequences. He also discusses how they integrate the various teams (art, level design, quest design, etc.) in design decisions.

    Tip: In the Dialogue System, use [var=variable] markup tags liberally in your dialogue text to make NPCs acknowledge the player's self-expression choices. For example, if the player chooses to drink a lot at the bar, set a variable drinkerType to "drunky". But if the player always abstains, set it to "teetotaler". The bartender's greeting text could be:
    • Dialogue Text: "Hey, [var=drinkerType]."
    This means the bartender may greet the player with "Hey, drunky." or "Hey, teetotaler." Little touches like this go a long way to making the world seem responsive to the player's choices even if they have no effect on large-scale gameplay.
     
    Last edited: Jun 20, 2019
  40. a038pca

    a038pca

    Joined:
    Mar 10, 2019
    Posts:
    9
    I get problem when using both LookAt() & Camera() in the same node.

    I want to do 2 things in a node:
    1. Move the main camera to a GameObject named Angle1
    2. Make the speaker look at a GameObject named Food Store Door within 1s

    Then I wrote the following sequences to the node:
    Camera(Angle1);
    LookAt(Food Store Door, , 1);


    Although the camea is changed, the LookAt() sequence is executed on the camera instead of the speaker.
    The combination of Camera() & MoveTo() also has the same problem.
    Do I do any wrong or it is a bug?
     
  41. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi @a038pca - It's possible that the camera GameObject is being assigned as the speaker. Make sure the player GameObject is assigned to the Dialogue System Trigger's Actions > Start Conversation > Conversation Actor.

    To see what GameObject is being used as the speaker, temporarily set the Dialogue Manager's Debug Level to Info. When the conversation starts, the Console will log a line like this:

    Dialogue System: Starting conversation 'Title' with actor=AAA and conversant=BBB.

    Make sure AAA is the player GameObject.

    Alternatively, if you're using a Selector or ProximitySelector on the camera, you can set its Actor Transform to the player GameObject.

    You can also add a Dialogue Actor component to the player GameObject and select the Player actor from the dropdown.
     
  42. a038pca

    a038pca

    Joined:
    Mar 10, 2019
    Posts:
    9
    Thank you for your reply. I finally find where the problem is: the camera is a child of the actor; the camera therefore rotate when LookAt(); is applied on the actor.

    However, I face another problem. I use JRPG Templete Stardard Dialogue UI as the dialogue UI and I toggle the activeness of GameObject Dialogue Panel in 2 empty nodes by SetActive(Dialogue Panel, false) & SetActive(Dialogue Panel, true) respectively. Dialogue Panel is activated at the end but invisible. I try to do it manually during conversation but the result is the same. What is the problem?
     
  43. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi,

    Use the SetDialoguePanel() sequencer command instead: SetDialoguePanel(false) & SetDialoguePanel(true).

    If you manually deactivate the Dialogue Panel using SetActive(Dialogue Panel,false), then it will cause the subtitle panels' animators to reset to their original hidden states. When you use SetActive(Dialogue Panel,true), the subtitle panels will still be invisible because their animators have been reset. The SetDialoguePanel() sequencer command handles this properly.
     
  44. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    SALSA LipSync Suite Integration Available

    The Dialogue System Extras page now has an integration package for Crazy Minnow's SALSA LipSync Suite. (This suite is the successor to SALSA with RandomEyes.)

    The integration package and online documentation will be available in version 2.1.8 of the Dialogue System. If you need it immediately, you can download the integration from the Extras page and refer to the interim documentation here.
     
    Deckard_89 and wetcircuit like this.
  45. a038pca

    a038pca

    Joined:
    Mar 10, 2019
    Posts:
    9
    Oh, I cannot see the command in the sequencer wizard so I do not know it haha.

    One more question is: is there any simple way to deactivate the dialogue panel at the begin of the conversation. I want to do some camerawork before the conversation.
    I try it by entering SetDialoguePanel(false) in the START node and Dialogue System Trigger but it does not work.
     
  46. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    I overlooked it in the Sequence > "+" > All Sequencer Commands list. It's there in the upcoming version 2.1.8.

    The full reference is here: Sequencer Command Reference

    This is an issue if your panels use animation. (Most of the prefab UIs use animation, typically to fade in/out.) This is because, in this case, SetDialoguePanel() tells the dialogue panel to play its Hide animation (e.g., fade out) while it's playing its initial Show animation (e.g., fade in). In version 2.1.8, you can now pass immediate as the second parameter in SetDialoguePanel() to hide it immediately instead of playing the Hide animation.
     
  47. jaytwist28

    jaytwist28

    Joined:
    Jul 18, 2017
    Posts:
    50
    Hey TonyLi, I was wondering id you plan on making any more third party integration? Have you taken a look at the Third Person Cover Shooter by REDBEE? It would be great to see some good dialogues with that controller.
     
  48. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Hi @jaytwist28 - There aren't enough hours in the day to write -- and, importantly, maintain -- integrations for everything. The Dialogue System already has official integrations for Opsive's controllers, Invector, RFPSP, Motion Controller, and many others.

    But it's also designed to be easy to integrate with other assets. If you're interested in integrating with Redbee's system, you may be able to do it with little or no scripting. For example:
    • Add a Dialogue System Events component to the player to disable Redbee's components during conversations.
    • Use a Position Saver to include the player's position in saved games.
    • Use Destructible Savers on enemies and destructible objects.
    • The Templates folder has starter templates for Lua functions, sequencer commands, and custom savers. Examples:
      • Write Lua functions to check, give, and remove items and stats.
      • Write a saver to save the player's weapons and ammo.
    Feel free to pass this info to Eduardas if he'd like to write an integration for the Dialogue System.
     
  49. jaytwist28

    jaytwist28

    Joined:
    Jul 18, 2017
    Posts:
    50
    Thanks :) I definitely will. Thank you for the information!
     
  50. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    Glad to help!