So a long while back (if you’re cool you might even remember me asking around about it :3 ) I was working on a godot module called “Choreographer” which was intended to be a Godot 4 visual scripting language to take the place of Visual Script while focusing on improvements inspired by Unreal’s Blueprints (macro code blocks to make logic flow significantly easier). I eventually had to stop working on that due to many personal reasons. But now I’m back at it!
This time I am using GDExtension (specifically godot-rust) to build out the language and structure it. I’m working on a formal design description that I’ll post to my personal blog as well as putting it into the repo.
For now, the basic concept is that it is a visual scripting language that uses “blocks” (nodes but by a different name to avoid confusion with Godot’s
Node types), and those blocks are linked in a graph similarly to visual shader graphs.
My goal is to have a
ChoreographerServer system that runs at a lower level and just collects namespaced
Block definitions, which would mean users could develop their own custom blocks as a “Block Pack Plugin” that can be installed in any project using Choreographer. This is to solve the main problem I had with VisualScript, which was that it was too general. Godot is amazing at being general purpose, but a visual scripting system can only be so simple while also capturing the myriad of functionality available to the engine. And this is where Block Packs would come in. My idea is that there could be a pack for 3D FPS logic, Networking, 2D JRPG Combat, etc… and because the block definitions are namespaced, these various packs could co-exist within the project without getting too messy.
Additionally, I want to leverage Godot’s binding system to allow users to write these custom blocks in any language supported, with GDScript and Choreographer itself being the premier languages for this purpose.
What I am working on now is getting the basic stuff like language registration and file format (XML based to make git diffs easier) working as expected. I’m also trying to balance performance and memory usage.
I’m running into a huge amount of technical challenges that are forcing me to call on basically everything I’ve ever learned between hobby development and my CS classes I took in college. This project is so incredibly fun and exciting for me and I really hope I can make something that the larger godot community will enjoy.
I’m also hoping to do some write-ups for my personal blog about the journey of writing a custom language and possibly contributing some documentation back to Godot since like 99% of the language registration classes have 0 documentation.
I’m doing this project completely for free and open source under the MIT license, and in the future I hope some people will be interested in helping with development and improvement because I am not perfect.
I’m working a shitty retail job to cover my life needs so if you wanna help me out financially I’ve got a Patreon and a Kofi (this project was re-started because enough people voted on it on my patreon poll.)
Otherwise the best way to support development is to let me know how interested and/or excited you are for this project because when I’m getting frustrated with the tougher aspects it’s knowing that people are excited that helps me push through the pain.
Links are in my carrd link in my profile. When I tried to add a github link it didn’t let me lol.