daveconway.net

Devlog #1: Diving into Godot

I want to make a video game. I've kind of always wanted to make a video game, and I've always had ideas for video games to make, but I've never felt so strongly about it that I've actually put more than a couple days' worth of dicking around in Unity into it.

But something about watching SGDQ this past week really lit a fire in me -- watching a community get such enjoyment out of so many charming little indie games that just started as hobbyist projects warmed my heart and made me feel the pull to create, in a way I haven't felt much with piano music recently (though that's always come and gone in phases).

So I downloaded Godot to start playing around with it, and very quickly got to the point of starting to work on a core system for a Chrono Trigger-style RPG I did some design work on years ago: namely, a fully configurable cutscene manager that handles everything from playing sub-scenes with self-contained timelines to manipulating entities in the current scene.

It's great. Godot's UI is very easy to navigate, its structuring of everything as a node tree is brilliant and easy to grasp, and its documentation is really solid. I'm excited to keep learning more.

That said, it's slow work, because the very beginning of trying something new is always the hardest part. Godot can do a million things and I need to figure out how to find the relative handful of them I need. But I've had enough jobs working on large-scale software systems at this point that I know the firehose flow will eventually peter down to a garden sprinkler trickle.

One thing I will say is that choosing Godot's own, Python-esque GDScript instead of C# was, as a long-time professional C# developer, a mistake. I like strongly typed languages, so the first thing I did with GDScript was tell it to treat untyped stuff as errors, and that immediately led to annoyances such as:

# GDScript
var is_invalid := pages.is_empty() or pages.any(func(p: Page) -> bool: return p.lines.is_empty())

// C#
var isInvalid = !pages.Any() || pages.Any(p => !p.Lines.Any());

The built-in text editor is also...not great. It's weird with auto-indenting when you split long lines into multiple lines, the documentation comment format is a little goofy, and so much of the rest of the editor just eats up screen space. So I think I'll make the switch to C# now, when I only have a few hundred lines of code, rather than spending months being annoyed by all these things.

These devlogs are strictly for me, to keep a record of my own progress and my own willingness to continue progressing. So sometimes I may not have anything to show, and that's okay. In the words of, I believe, multiple characters in that episode:

A gif from the TV show "The IT Crowd" showing the character Roy saying, "It's not for you, Jen."