novelrt / NovelRT

A cross-platform 2D game engine accompanied by a strong toolset for visual novels.
MIT License
182 stars 42 forks source link

Suggestion To Implement Node-based Editor #85

Open 123tris opened 4 years ago

123tris commented 4 years ago

Why?

TL;DR

Many games that contain a more complicated dialogue system use some kind of node-editor to visualize and editor dialogue.

Articy craft is a good example of a professional tool designed exactly for that. Used by Ubisoft, CD Projekt Red, EA, and many other professional studios.

image

This is how Articy Craft visualizes a dialogue. By using a node-editor and icons it makes it very intuitive for a user to create and edit dialogues.

A simpler version of this could look something like this: image

*= The reason why this can allow for better UX is that you can allow the user to edit other data by selecting items/buttons inside of the node. An example would be the avatar. You could have a small edit button, double-tap, etc. to open up a window to change that character's data.

How?

It's completely up to the team on how to go about implementing something like this but I would like to pitch in my two cents on this. It's important to avoid dependencies and keep editor code completely separate. So I think ideally you would want to generate API code (Lua,Ink,etc.) using the node-editor. The editor could even be a separate application by all means whilst generating scripts. Really depends on how exactly you want things to work in tandem.

Tylertron1998 commented 4 years ago

Here are my two cents on this:

Forgoing the difficultly of implementation; I think the main problem at hand here is one of design. Here are some issues that come to mind:

I think a visual scripting/node based system would be amazing. I'd love to see this as a first class citizen - there are many benefits to this and it'd really help us target a wider audience - however I feel these issues are things that do need to be resolved and chewed over, I'd love to see some discussion and ideas for any resolution!

Thank you for the suggestion!

RubyNova commented 4 years ago

The way I'd visualise this working is basically Ink script generation. Since Ink will always be available as a core feature and is how were handling all our dialogue support, we could also extend this to "C# components by default", so to speak, though I think if we want to support custom components that would be later down the line.

I feel this addresses point 1 since it'd be exclusive to an engine feature.

As for debugging I feel this is affected by my opinion on custom components. If we choose to not support custom components, at least at the start, then there isn't really anything to debug as an end-user.

This, by extension, means any errors that happen would need to be output to a log file that can be sent to us to fix things internally.

As for language specific features, things like asynchronous programming would exist within the context of user-defined custom components. They could debug that themselves and I can't imagine us providing anything along these lines OOTB.

I think if we limit the scope quite heavily, its doable. It just depends if people would still want it in a limited state.