UE Dialogue Tools
In between knowing I needed to use some sort of narrative middleware for my JRPG side project and needing to actually teach them this trimester, I've had to spend quite a lot of time with narrative tools recently.
I had some prior experience with Articy Draft in Unity, so I started there with its Unreal integration and it's not bad, but been hitting a bit of a wall with how to make various points of conversation fire off gameplay events or communicate that certain animations and sounds should be played. The best I've been able to muster there is some stringly typed variable look ups and I really think that's messy. I also tried a paid marketplace dialogue system (DialogueBuilder) and that alleviates those problems but I really dislike the idea of a new actor component for every conversation.
I had to revise my knowledge on things like Twine and Yarn anyway, so for a bit of fun I made a Twine parser for Unreal. It does rely on using Twiison (a JSON story format for Twine) and so it's quite basic in what it spits out, but I'm able to parse that JSON output to a Data Asset in Unreal.
I started with just loading the JSON file and using some JSON blueprint plugin from the marketplace to assess viability, then I moved to the C++ layer and converted it all over and onto a Data Asset. It still needs an actor to fire off loading it at run time, but next step is an Unreal Editor tool. One thing I've really enjoyed about the process is developing my confidence in C++ in Unreal, this was already something I was working on but it's always a nice feeling when you're comfortably doing something that would have been overwhelming six months ago.
I can see how I could easily extend it to be able to associate all sorts of other things with each node, though I'm wondering if at that point I'd need a clearer in engine editor and then I may have circled back to DialogueBuilder. Another thought I have is maybe I'm better off making a YarnSpinner port into Unreal, as if I want to attach functionality into the nodes that's more what I'd need. But I would need to build the whole library from scratch rather than using an existing JSON reader and that sounds like quite a big job.
For now, I'm going to extend the Twine parser further and build an Editor tool, and see how that pans out from there.