← Material Library

Descant

Archived

By Owen Hellum

unityunity-plugin

Descant is a Unity 2022.3.x or later dialogue system plugin. The Unity Asset Store is chock full of many such types of plugins, ranging from feature-rich, to ultra-minimalist, to downright bad. Descant aims to hit the sweet spot between quality UI, powerful features, and easy-to-lean functionality, while also addressing many of the game-specific consequences of the standard dialogue manager setup. Besides acting as a standard tool for creating, saving, and actualizing non-linear game dialogue, it also pushes the envelope by adding optional dialogue-enhancing node components that introduce features to break away from the overused and underwhelming trends seen in many interactive fiction games. These enhancements act similar to Unity’s standard GameObject Component system, and can be applied at-will to nodes. This modular approach is so-far not explored in the world of Unity dialogue systems. The project will be free (and collaborative open-source) forever. Feel free to send me a message or submit a pull request if you want to make any changes.

Timeline

commitSep 11, 2023, 18:48Owen Hellum
77fd45bInitial commit
commitSep 18, 2023, 13:31Owen Hellum
e842977[feat] Base skeleton of the node system
  • Basic node functionality
  • Some QOL changes
  • Grouping
  • Dynamic number of Choice outputs
  • Started work on saving
commitSep 21, 2023, 22:19Owen Hellum
46d5e6f[feat] Added in most of the UI elements and started on saving
commitSep 22, 2023, 17:16Owen Hellum
61b31d8[docs] Added proper README in
  • Added Mac turds line in .gitignore
  • Added separate files for features, interaction research, pitfalls & successes
  • Added a proper README, that I'll try to update as time goes on and I add more references in
commitSep 29, 2023, 23:03Owen Hellum
201d106[feat] More rigorous saving and click-to-open functionality
commitOct 6, 2023, 13:31Owen Hellum
48a33b6[feat] Added in a bunch of loading and QOL features
  • Loading and saving to files not on the root
  • Added 'needs-to-be-saved' asterisk when not auto-saving
  • More rigorous connection data checking
  • Added close button for graphs
  • Started work on the Runtime scripts
commitOct 8, 2023, 14:21Owen Hellum
d8bc3cb[fix, feat, refactor] General organization, and started adding comments
  • Finished small tweaks to the Editor files
  • Cleaned up the Runtime controller, so that's ready to go
  • Started adding in-depth comments to most of the files

After the comments are done, I can start doing the actual creative work of adding the node and conversation components

Monday, October 9th

The base system has finally been settled! I have the Editor script all done (save for a few QOL or functionality tweaks), the saving works pretty well, and I’m now getting started on the Runtime scripts. While I do that, I’ll be working on the unique aspects of Descant. That’s where the real creativity will start to shine through, and I’ll be journalling a lot more (I hope). Presently I’m going to try writing one of these journals every 2-3 commits. To coincide with my general pattern of milestones. I’ll also be ramping up my explanations in commit messages, going beyond the standard dry descriptions of changes.

I’m nearing the proof-of-concept milestone that I played out for myself originally. I’m feeling good about my progress, though I know that the ‘components’ system that I had dreamed up will take some finagling to get working. I think that my next steps for the project are to make a ‘build’ of the current package, build a super simple runtime testing interface, then get going on the ‘components’ system. On Jonathan’s recommendation, I’ll also try to classify and narrow my sights down to just 2-3 for each of the node, graph, and actor scopes. I’ll be doing that soon too I hope.

commitOct 9, 2023, 15:57Owen Hellum
3730d58[refactor] Finished adding comments!
commitOct 9, 2023, 19:54Owen Hellum
d4250f8[docs] Added first proper journal entry now that the base (uninspired) system is done
commitOct 9, 2023, 19:56Owen Hellum
73f3320Tweaked README
commitOct 10, 2023, 22:30Owen Hellum
def939c[feat] Created a testing scene script to preview Descant graphs in-scene
  • Updated to version 0.2.0
  • Created testing scene

Wow! It finally works! I knew that theoretically it does work in runtime, but now I'm able to fully test Descant graphs in-game. Feels amazing. Obviously I still have tweaks to do, but it's almost production ready (at least in a basic operational sense).

I think I need to get started on the juicier features soon, so that will be my focus the next time I work on it.

Monday, October 16th

I’ve added a new file to the documentation, detailing all of the ‘components’ that I will be writing for the system. I have node, actor, and full conversation components. Theoretically, these will be able to be added to their respective types in a totally free, totally modular fashion. Presently, I’m just getting a hold of how I’m going to program it. I’ve added a bunch of TODOs, and have started on about half of the node components. Some are invokable, meaning that they trigger some effect when the node they’re attached to is reached, but some are just for data storage, to be accessed by other scripts which might want to make use of their properties (e.g. a TimedChoice component won’t ever trigger anything itself, but its data members will be necessary for the DescantConversationController scripts to reference when updating countdowns and moving to the next node).

I’m feeling really good about what I’ve got done so far, but it’s definitely going to be a lot of work. Maybe more than I thought. I think it might be best to push my prototype date a week or so into the future, giving me time to get these all working. Instead of doing user testing right away, I’ll run a seminar where folks can comment openly, and I can discuss it in a casual manner. Until then, I’ll keep coding away at these components.

commitOct 17, 2023, 01:45Owen Hellum
9101225[feat] Started adding the components (just the C# scripts + TODOs for now)
  • Made a list of all the components that I'll need for nodes, actors, and conversations
  • Started work on an Actor script
  • Started adding some of the node component scripts (some of which inherit from an invokable interface)
commitOct 17, 2023, 21:07Owen Hellum
a16d129[feat, refactor, docs] Solidified my thinking about how the components will interact with the runtime GraphController
  • Made it so that components have access to the controller, and can affect it at runtime
  • Made it so that the controller never touches the components, save for invoking them and updating them
  • Finished 90% of the node components
  • Reorganized the interfaces so that it's more in line with the new schema
commitOct 18, 2023, 15:42Owen Hellum
b0ab815[feat] Reorganizing the runtime controller a bit

Wednesday, October 25th

I’ve decided to focus on the node components for the moment. Once I get them down and working, then I can add the Actor and Conversation components if I want to / have time to. I’ve been able to get most of them half-written, I started work on saving them, and I’ve added probably 90% of their UI implementation in the Editor. Now I just need to read the data when saving, load it properly, and get it working in runtime. I’m quite pleased with my progress, though I know that I need to start interviewing / demoing the software soon, to get an idea regarding the UX and feasibility. I’ll want to meet with Jonathan soon too to discuss my progress.

As a sidenote, I also reorganized the project so that it only uses one Assembly Definition. This way I can avoid circular dependancy. This wasn’t an issue before, but now that I have the Components going, it’s come up. The Components use both the Editor and the Runtime, and those both use the Components. So I had to put them all in the same Assembly Definition.

commitOct 25, 2023, 16:32Owen Hellum
76cf753[feat] A lot more work done on the Node Components
  • Started work on saving Components
  • Finished almost all of the Editor Node Components UI
  • Working on connecting the Editor to the Runtime via the components
commitNov 7, 2023, 01:38Owen Hellum
b47702f[feat] More tweaks to the node components as well as the addition of some class and variable attributes
commitNov 7, 2023, 03:53Owen Hellum
1d383c9[refactor, feat] Finalized node component style and generation in-editor
  • Added a new attribute to group the component parameters by group name instead of number
  • Made their generation in-editor more steamlined
  • Added yet more TODOs
  • The next step is actually being able to save them!

Tuesday, November 7th

It’s been a little while since I last check in, and a lot of organizational changes, QOL tweaks, and bug fixes have come along. Most importantly, I finally settled on an appropriate package folder structure. I’d been messing around with a 2-folder and 2-folder systems with just as many Assembly Definitions, but I’ve settled now on what I like the best. It allows for Runtime scripts to reference Editor scripts, and allows for them to both reference Components scripts. When the Components will have to start referencing Runtime though, that’ll be a problem. We’ll figure it out as it comes. I also added a bunch of comments to new scripts, converted my Descant Graph files from .desc to .desc.json, and hid the Components scripts for the mean time, as I prepare to push a v0.1.1 build up to GitHub.

The reason for all this organization is the fact that I’ll be demoing Descant in its current state and talking about the future design goals with this semester’s CART 415 class. I had talked with both Jonathan and Jongwoo Kim regarding possibly doing a Descant workshop in their more practice-based classes. The students would benefit from using my system for their game jams (albeit in its simplified state), and I would get feedback regarding usability and my future goals. I was worried about getting it all working and buildable by tomorrow, when I’ll be doing the workshop, but everything is working perfectly now, and I couldn’t be happier!

The next goals after the workshop are to continue developing the Component system by allowing the Components to be saved to the DescantGraphData file. After that, it’s onto run-time implementation, which will be no small feat.

commitNov 7, 2023, 18:39Owen Hellum
3cf36fc[refactor] Reorganized project structure once again
  • Separated Components assembly (and commented out its external references)
  • General organization and cleaning up
  • An unfathomable bug has appeared that makes the dialogue system completely unbuildable due to the fact that omch.descant.editor doesn't seem to want to be referenced by omch.descant.runtime
commitNov 7, 2023, 20:19Owen Hellum
a53196b[fix] Fixed the editor reference issue, but the file type and file path issues still persist
commitNov 8, 2023, 03:08Owen Hellum
1024e38[docs] Added comments, updated journal, and added description to the package,json
commitNov 8, 2023, 03:12Owen Hellum
2e2ab0a[refactor] Moved the repo scope down to just the package so that the default Unity files don't get included
commitNov 8, 2023, 03:14Owen Hellum
0b9ea51Revert "[refactor] Moved the repo scope down to just the package so that the default Unity files don't get included"

This reverts commit 2e2ab0add860c32eff64ec906d245ffab31a42a8.

commitNov 8, 2023, 03:23Owen Hellum
3adc28c[refactor] Undoing some of the errors that occurred due to the last refactor
commitNov 8, 2023, 13:27Owen Hellum
cb8f62c[docs] Updated readme with installation and basic usage instructions
commitNov 15, 2023, 01:21Owen Hellum
62d81f1[fix, refactor] Changes after some testing during GAMERella
commitNov 15, 2023, 03:10Owen Hellum
2ac1c4b[feat] Added editor saving and loading functionality for the node components

Future TODOs:

  • Component integration with runtime
  • Autosaving check for components
  • Runtime Component invocation
  • Smoother runtime scripts and scenes
commitNov 15, 2023, 15:44Owen Hellum
b2e3b43[refactor] Cleared the repo for a sec...
commitNov 15, 2023, 15:45Owen Hellum
62a4c1b[refactor, feat] Added files back in and started implementing components during runtime
commitNov 16, 2023, 18:31Owen Hellum
55dda2c[feat, fix, refactor] Added Response-chaining functionality and the initial DescantActor setup
  • Added the ability to chain multiple Response nodes one after the other
  • Created a new DescantActor class
  • Created a DescantActor Editor
  • Made the DescantActors available to the DescantConversationController
commitNov 17, 2023, 18:55Owen Hellum
ee4e012[feat, refactor, fix] Lots of small improvements and got started on the components in full force
  • Better component and actor saving
  • Added a new way to pass data between the components Assembly and the Runtime assembly
  • Renamed some stuff
  • Added ChangedNode functionality
  • Improved DialogueUI hiding and showing

Future TODOs:

  • Finish implementing other Components
  • Add comments
  • Smoother runtime scripts and scenes
commitNov 21, 2023, 15:54Owen Hellum
a3aa91e[feat] Continued adding more Component functionalities
  • Added ChangedResponse, Interruptable, and LockedChoice Components
  • Added a typewriter option
  • A bunch of small tweaks here and there
commitNov 22, 2023, 19:47Owen Hellum
fa8dec7[feat] Finished up the rest of the components

A few remaining todos:

  • Proper error handling
  • Possibly adding a DescantIfNode
  • New comments
  • Easier implementation
  • Tutorial

Thursday, November 23rd

By this point in the project, I’m starting to think about the end of the independent study. I’ve been able to get a little bit of user testing through some students in Jongwoo’s class, and I plan to run a Descant workshop in TAG as well (either in December or in the new year). As for the project itself, it’m getting close to the end! I’ve successfully implemented pretty much every single Component! I just have to iron out a fair number of bugs, add comments to nearly everything, and develop some proper test scenes. I aim to get most of that done in the next week or so.

After that, the remaining tasks for the independent study are to write the report and get the ball rolling for actually publishing the package on the Unity Asset Store. I feel great about the current status of the project and hope to push forward just a bit more to see it to completion. The possibilities that it’s already affording are truly fantastic.

commitNov 23, 2023, 18:08Owen Hellum
7dec882[docs] Added README and initial documentation back in (also updated my journal which had been getting a little stale)
commitNov 23, 2023, 18:10Owen Hellum
249c9a1[docs] Added proper NiEngine link to the README
commitNov 26, 2023, 17:20Owen Hellum
1d6476b[docs] Set README to present tense
commitDec 1, 2023, 00:02Owen Hellum
d8d63bf[fix, refactor] Created a TODO list and fixed a bunch of bug holes
  • Added TODO file with easy, medium, and hard fixes
  • Fixed a major ChoiceNode issue with choices that have no connections
  • Closed off a bunch of possible error messages with temporary TODO markers for future custom error messages
  • Added text filtering for graph editor and components
commitDec 1, 2023, 17:07Owen Hellum
e297b0b[docs[ Added reflection concept that I put together during the most recent GaR meeting

Gonna try this out the next time I'm working on the project

commitDec 7, 2023, 02:39Owen Hellum
246eae0[docs, fix, refactor] Bug fixing and starting to add comments
  • Renamed all instances of 'conversation' to 'dialogue'
  • Made a more streamlined process for Invoking UnityEvents, and made all Components that do so use it
  • Added proper error messages with a unified formatting
  • Added a NoFiltering attribute to make certain fields in the Components not subject to being filtered
  • Made TMP text styling work with the typewriter
  • Added text filtering to the Actor Editor
  • Unified EventScript and ObjectScript into one Component (if the ObjectTag field is empty, it simply acts as an EventScript)
  • Started adding comments (gonna be a looot of work)
commitDec 7, 2023, 18:35Owen Hellum
40853b8[docs, fix] Comments and small fixes
  • Added comments to the Runtime scripts
  • Fixed a few small issues with Components calling scripts with no name or method name

Friday, December 8th

The semester is coming to close, and I’ve completed the functional aspects of the system. All the editor, runtime, saving, and loading scripts are done (save for a few tweaks), and I just need to put together proper test scenes and documentation before I publish on the Unity Asset Store in January. The report is finished too.

In the spirit of reflection, it’s interesting to see how the project has both slowed down and sped up over its lifetime. Development took a long time, and meant that I wasn’t able to accomplish all my goals, but now I’m able to create Components extremely quickly, and demonstrate it live. The development is practically done, even though it took a while. I think that now my goal should be polish. Make it look nice, make it feel nice, and get to ready for public viewing.

As mentioned below, I plan to demonstrate Descant in TAG at some point in the new year. I was talking with Jonathan today and he recommended I showcase the project in an academic showcase/conference coming up in May, which is very exciting. I’ll definitely be applying. Good things are on the horizon, though I definitely deserve a break.

commitDec 8, 2023, 18:58Owen Hellum
2788d47[docs] Updated package to v0.2.0, added journal entry, and added more TODOs
commitDec 10, 2023, 02:45Owen Hellum
e91d70a[feat, docs, fix] Added actor portraits, fixed bugs, and added some comments
  • Added actor portrait functionality
  • Added Component that can be used to change portraits
  • Fixed some rounding and calling bugs
  • Added comments to the parts changed
commitDec 12, 2023, 20:49Owen Hellum
b7df97c[docs, feat, refactor] Updated README and added new script to trigger beginnings of dialogues
  • Added a proper Usage section in the README
  • Cleaned up README
  • Started work on a Component Directory file to help explain the Components
  • Divorced the dialogue data from the DialogueUI script (so it's simpler to use)
  • Created new simple runtime script to call the beginning of the dialogue
  • Added some help text to the example scene
  • Added a few more TODOs
commitDec 15, 2023, 21:06Owen Hellum
77dce22[feat, refactor, docs] Adding small QOL features and started documentation website
  • Updated README slightly to have better links
  • Made sure nodes created in the graph editor spawn in the right positions
  • Started work on the documentation website (housed outside of this repo)
  • Added an option to inject actor variables into Choice or Response text
commitDec 22, 2023, 16:15Owen Hellum
03c04a4[docs, refactor] Adding comments and reorganizing some small sections

Also updated to v1.0.0 for the upcoming release!

commitDec 26, 2023, 23:34Owen Hellum
0182960[docs, website] Final comments
  • Added comments to all uncommented remaining files
  • Updated README a bit
  • Added website
  • Updated package.json
commitDec 27, 2023, 00:55Owen Hellum
991582bAdded license
commitDec 27, 2023, 22:46Owen Hellum
1c5979f[fix] Small preparations for Unity Asset Store uploading
commitJan 7, 2024, 19:59Owen Hellum
b846484[fix] Added additional path checking for the stylesheets, should the Descant folder be anywhere other than the root of the Packages folder
commitMar 11, 2024, 16:58Owen Hellum
f93aad8[fix, refactor, feat] Converted Descant files from .json to ScriptableObjects (also fixed a few tiny bugs)
commitMar 11, 2024, 18:11Owen Hellum
3e04e03[fix] Fixed a bug that was preventing SerializedObjects from being saved
commitMar 18, 2024, 14:19Owen Hellum
5b14ede[media] Added logos and other media
commitMar 18, 2024, 15:44Owen Hellum
8590c7e[fix, docs] Added a new logo, splash image, and some minor editor fixes
commitMar 19, 2024, 20:33Owen Hellum
07710ed[fix] Added more possible stylesheet fallback paths, and did some renaming
commitApr 18, 2024, 15:22Owen Hellum
96e1e3b[feat, fix, refactor] Streamlined a bunch of functions and added a log functionality
commitApr 18, 2024, 15:44Owen Hellum
99cd271[docs] Added sample images to README
commitApr 18, 2024, 15:55Owen Hellum
f73f726[docs] Added some GitHub badges to the README
commitApr 21, 2024, 14:50Owen Hellum
b7452cf[fix, feat] Tied portraits to players and allowed Components to be rearranged
commitApr 23, 2024, 20:11Owen Hellum
e093f33[feat] Added a bunch of new features from the todo list
  • Added autosave back in
  • Now saving a graph panned position and scrolled scale
  • Added the framework for a search function (not fully implemented)
  • Added a comment box under each node and each group
commitMay 11, 2024, 12:36Owen Hellum
d63c173[refactor] Some small tweaks here and there
commitMay 11, 2024, 14:33Owen Hellum
1c53fda[feat, fix] Put some finishing touches on the editor, actors, and components for the new update
  • Added DescantActor references to the default components
  • Added a SerializableDictionary to the DescantActors
  • Added a ton of new DescantComponent variable types that can be added
  • Added a small version indicator in the editor
  • Updated the screenshots
  • Updated the README and the website
commitMay 22, 2024, 00:49Owen Hellum
cb7cc9e[fix, refactor, feat] Added DescantIfNodes, and fixed a bunch of small bugs that arose during their implementation
commitJan 17, 2025, 13:46Owen Hellum
3f63d69[fix, feat] Added speaker name functionality, and fixed various bugs
  • Added a null check for player portraits
  • Turned Action callbacks into UnityEvent callbacks (so they can be accessed in the editor)
  • Various other small bug fixes
  • Added SpeakerName, Speaker Colour, Override Speaker and speaker name functionalities to nodes
  • Responses now only appear after a typewriter has finished typing
commitJan 17, 2025, 13:48Owen Hellum
460be94[refactor] Updated package version
commitMay 18, 2025, 01:05Owen Hellum
a766f5e[fix, refactor] Fixed bug with SerializableDictionaries not working properly & restructured some code
commitMay 18, 2025, 01:18Owen Hellum
69b40b7Update README.md