I decided to start the 2D course with this chapter, because I'm a writer by trade and certainly want to understand dialogue systems as I begin developing games. This was an excellent tutorial that taught me a lot. If you decide to revise this course in the future, I have two suggestions.
First, viewed solely as a teaching tool, this tutorial is doing a great job as it is. However, if people come into it expecting to get a good start on building their own full-fledged visual novels, they may end up disappointed or overwhelmed by the amount of additional work they'll need to do to get there. Looking at previous comments, I think you've already seen some of those reactions.
While you've done a great job keeping concerns separated and structuring the code for scalability, any visual novel longer than a few lines is going to be excruciating to write in your current data format. Writers just don't work that way. That means aspiring visual novelists will need to first rework the format, in turn recoding the Scene Player, and pretty soon they'll be reinventing Ren'Py from scratch.
I realize you may be reluctant to introduce plugins you don't control in these tutorials, but it seems like they're an important part of game development, and this chapter could be an excellent place to teach best practices for working with and extending them. You mention Dialogic, but I also recommend looking into Ink, a fully developed dialogue middleware system capable of handling huge, highly-branched choice-based stories. Ink already powers several well-regarded indie games on the market, and there are two well-supported Godot plugins for parsing Ink files, one in C# and the other mainly in GDScript. Both are under permissive open source licenses. Ink files are also very writer-friendly, and keep the story text separate from the presentation. Please give it some thought.
My second suggestion is to change the terminology in this chapter. Referring to dialogue "scenes" and "nodes" that are in no way related to Godot Scenes and Nodes is confusing. How about "acts" or "beats" and "lines?"
Despite my criticisms, I want to emphasize that this was a great learning experience. I'm looking forward to working my way through the rest of this course in the coming weeks. Thanks!
Thanks. We already have more coded for this series, although no time to complete it at the moment. Instead of covering plugins, the idea is to show how to implement a language like Renpy's writing language.
The language is done and available in the github project repository, but covering it in a tutorial is quite a bit of work.
You can find the repository here: https://github.com/GdQuest/godot-2d-visual-novel
Excellent, thanks. I see there's a bunch more in the Github project, including implementation of character expressions as well as the parser. I certainly understand how much work it takes to write these thorough tutorials. I'll probably dig into your updated code sometime soon and see what I can teach myself from it.