The Flash

I will summarize this week in one sentence: 2 weeks in 2 days

The plan for the week was to implement the “production” gameplay graphics based on the mock I created last week. I already knew that this would require a complete rewrite of the game’s high-level rendering routines so I could get rid of “development” graphics. My initial estimate for that was 2-3 weeks, meaning I’d have this done just in time for Thanksgiving.

But I decided to take a gamble. Instead of reusing my low-level rendering routines for the rewrite, I tried to replace their functionality with built-in Godot facilities. This sounds like a pretty obvious thing to do, but only recently I acquired the necessary knowledge to pull it off. The gamble paid off handsomely, and I successfully rewrote the main “game arena” in 2 days! The performance isn’t as good as my old custom code, but it’s still well above 1000fps, LOL.

With the time savings, I implemented user configuration persistence and got started on the somewhat complex save system. If all goes well, I should have load/save fully implemented by Thanksgiving, leaving most of December for content creation. This would put Outsider well on track for a “public” demo by the end of the year.

This means that the strategy of focusing on a single task (coding) is working very well. If I could restart the project today, I’d focus on coding from the get-go and use AI assets for the first prototype instead of trying my hand at graphics, audio, and writing at the same time as I did. To be clear, I won’t use AI on the final game, but I now see much more clearly the usefulness of early gameplay focus and private playtesting; good throwaway assets can help in doing these earlier.

Beyond that, I’m still trying to fully wrap my head around the amount of code I threw away in the past 2-3 weeks; I estimate that ~30% of Outsider’s codebase got nuked. I can summarize efficient Godot development as “selecting the right node types in the right hierarchy and using their functionality as much as possible”. These “node types” are like a class library in popular commercial frameworks, such as the Java library and .NET. If you are a Java/C# programmer, you might remember the time Generics “clicked” and you started using generic data structures for everything. Or when you learned about lambdas, extension methods, auto properties etc.

Godot is very much the same. When you don’t know much about its capabilities, you end up spending most of your time reimplementing the engine in your code – without realizing it. And this is precisely what I did in the first couple of months of development. Oh well, you have to start somewhere…

I’m still very far from being proficient in the engine, but I’m visibly getting better at building videogames. There is still a long way to go, but it’s great that my starting point is no longer visible from where I now stand.