Dynamic GDDs with Notion & Godot
Shortly after I start with a Game design document, I’m hit with the very sudden and scary realization that I need to upkeep the document as well. By combining the power of Notion and Godot I hope to make it slightly easier. Let me explain to you how you could do the same!
All gamedevs have to either write or read a GDD from time to time. These beautifully complex documents take time to digest, even by the people writing them. You tend to go back a lot of times to revise a part so that they represent the project or prototype that you’re working on.
When it comes to making these documents I found that Notion is not only a great tool, but an essential one as well. Doubling both as a wiki and a document at the same time, it’s easier to write things down and have it be part of your knowledge base. The way you can search through these ever updating documents is great! Instead of sifting through emails with attachments or 3 cloud based sync things, me and my team can just write in the same place.
However, it can be difficult to go back and forth and to update the parameters with which your game runs. What if you want to increase the amount of enemies in that one level? What about the movement speed of the player or the name of that character? What if part of your prototype dialogue is in the document and you want to keep it in one place instead of having to copy all the time?
What if we were to combine the power of Notion with our Game Engine? I/we use Godot for most of our games and when quickly iterating in the first stages of the game, there’s a lot of communication between whoever’s designing and programming the game. When the designer has found out the proper parameters through paper prototyping, the programmer has to usually adjust these values in the engine and create a new build. I was looking for a solution for this and when I saw that Splitbee had made an API for Notion, I knew I found it.
I’m going to take a recent game as an example: Ant game. This game was a small fun prototype I made over a few weeks when becoming obsessed with ants after seeing a Kurzgesagt video. When writing down some of the ideas in Notion, I also began noting down parameters at which the game runs. Think of things like: amount of starting ants, the amount of resources needed to x etc. Using Splitbee’s API wrapper around Notion, I was able to extract these values. Then, I load in these values from the table with parameters and put them into the game. What you’re left with, is a game that automatically updates based on what you fill into your GDD. I made a custom node to make it easier for you to do as well. I hope this tool will allow us to quickly update parts of our design without recompiling the game. You might say: can’t this problem be solved with any CMS? Yes, but being able to do it all in the same tool where you write the bulk of your design is even better.
I’ve found that once you’ve got a working prototype, it’s easier to iterate on pure gameplay with this method. It also makes the GDD “alive” by having the document directly influence the gameplay. It’s easier to see when the document is flawed when the game doesn’t play well. The possibilities for this are close to endless, similar to any system hooked up to a CMS. Because engines like Godot and Unity are data-driven engines, hooking up a CMS is nothing more than changing where the “data” in data-driven comes from. What would be even cooler is to have the ability to post to tables or pages in Notion, that way there’s an easy way to keep track of feedback and testing sessions. Other things worth trying are: dialogue, story structures, downloading images from Notion as textures, downloading locale strings and menu messages.
I’m looking forward to using and innovating with this tool. If you like to try it out, check out the Github.
Thanks for reading
Photo by Kelly Sikkema