Game-Making with Godot

Conversations are better than fighting.

09-24-2022

I’ve always wanted to make video games, I mean, what kind of person who constantly plays games hasn’t? I’ve dabbled with various engines over the years. From the learning tools like Scratch, actual programming like pure HTML5, Phaser, to more conventional game engines like Unity before it went to shit and Unreal Engine before my brain exploded with how much shit is in it. I never actually finished any games, the closest I got to was a clicker game made in Unity that was on gamejolt, but, if I can be honest about one thing, even if I haven’t finished anything, I’ve definitely grown a love for the new game engine on the block, Godot.

And with Godot 4.0 finally reaching beta, I thought I would write a blog post with my thoughts about the game engine as a whole and my thoughts about Godot 4.0, because I was using it during the alpha stages for one project that’s still… very much in development.

SUPRISINGLY SIMPLISTIC

Like with starting out using any game engine, the layout will be a bit intimidating at first, that’s honestly normal. When starting out doing anything, it’s always going to be a bit like that, mainly because you don’t know what you’re doing. Hell, took me years to be good at animating in Blender, shit doesn’t happen overnight.

The cool thing about Godot is that it’s simple enough to get into, the main window is simple to understand, not really changing or being much customizable, which honestly I’m kinda fine with that. Makes everything a lot more uniform when it comes to tutorials, as knowing what I’m looking at is like, very important for learning.

The node tree system was easy to grasp and allowed me to have access to better prefabbing and scene organization and again, while getting used to it was odd for a while, once I did it became way better to use compared to something like Unity’s Entity Component System.

GDScript is also something that I like a lot. I thought I wouldn’t get used to the Python-like syntax, but well, I did, and wow it’s a suprisingly simple yet powerful language. Just being able to make a moveable character with so little lines of code compared to something like Unity or GameMaker where you have to code up the collision and it would get very annoying, now it’s just… in there and it works perfectly. It allows for a lot faster prototyping and genuinely makes developing a lot more fun.

CALLBACK TO THE SUBTITLE

I make note of the subtitle I used because with most engines, it feels like I’m fighting the engine, trying to tangle it to work in the way I want, setting up bad collision because something doesn’t have that woking in the first place, fighting with settings to match how I want things to go, adding plugin after plugin to add like, one feature I need cough cough RPG Maker cough cough. But with Godot, it feels like I’m having a conversation with the engine instead. Everything is so simple that working with it is genuinely just feels nice.

If I want a feature, I just look around in the documentation or find a simple solution online, add it, and because of how simple GDScript is, easily modify it to match what I want out of the system I’m using.

I’ve tried implementing a JRPG System in like 3 or so different engines and Unity was the hardest and most frustrating to program in, Game Maker was technically the one I was able to finish, but it was so jank that it was pretty much just built with twigs and scotch tape, which doesn’t help when it’s the basic prototype. With Godot, while it’s not finished in the slightest, has been working out really well.

Specifically, when setting things up, everything was a mess in Game Maker, but because in Godot, thanks to easily creatable resources that can be used as if it’s part of the main system, I’m able to easily create data and have it prefabricated and working for battles easily. Just simple for loops going through some data, when previously in Game Maker, there were so many Grids and Maps and Lists that navigating in the prototype stage was getting awful, and that’s not even counting that I was using plain JSON for item data and move data and other types of data, it eventually just became a giant mess.

But in Godot? Resources. Resources sorted everything out, all the sata was sorted, battles can be created easily, everything doesn’t need a seperate object, it was just… really fucking good.

I know there’s technically a system like that in Unity that could’ve been very useful, but the thing with Unity is that…

I FUCKING HATE UNITY

Like, let’s just ignore the Unity company’s idiotic actions and focus on the engine itself, because I genuinely think that me developing in Unity actively made me worse at developing games.

Like, let’s go back to the resources thing again, can you tell I love resources, I love resources in Godot.

The Unity equivelent to Resources is ScriptableObjects, and they pretty much do the same thing, ok, so why am I complaining about them? It’s mainly with how they’re implemented.

Inside Godot, here’s what you do to define a resource.

extends Resource
class_name ResourceName

export var data : String

And then inside Godot, when you make a new asset in the FileSystem section, it’s just there, either just scroll down or search for it and BAM, new resource.

In Unity, it’s a lot more… clunkier.

In Unity, when creating a scriptable object, it’s usually importing UnityEngine (because if you’re programming for Unity, you kinda need that). And then you go:

public class ScriptableObject : ScriptableObject
{
    public string data;
}

Now, there is a reason for this clunkiness, for one, Unity uses a bunch of dropdown menus for creating GameObjects and assets, so it could be easier to find it if you set things up properly, but the problem is with how clunky it feels, adding in so much stuff just to create a new asset compared to like, 2 lines fo easily readable code.

Not to mention that everytime code changes in Unity, the project recompiles itself, which if you have a large project takes a lot of time. With Godot, the changes are almost instant.

Another problem I have with Unity is the fact that everything that I code in it feels like it’s going to fall apart in an instant. Now sure, that might be because I might suck at coding, that’s fair, but I swear to god I never have had so many issues just implementing character movement in that engine compared to Godot.

With Godot, the KinematicBody nodes just need a velocity and to activate move_and_slide(), but in Unity? That shit’s a momumental task that is fucking bullshit and no matter what you use, RigidBody, CharacterController, some other way I’m forgetting about, there’s always stupid as fuck downsides that make me try and debug the problems before I can get anywhere with coding anything else. I’m just… so annoyed with programming in Unity and just comparing it to Godot feels like a giant weight was lifted off my back, allowing me to finally just… make the fucking game.

I think that’s my biggest problem with Unity and Unreal, my fucking god it’s slow. Game Maker also technically has this problem, but that was fixed with GMLive, but that requires a third party plugin, but with Godot, all the shit I want just comes out of the box in an executable that’s under 60mb.

Whenever I’m using Unity or Unreal, the moment I change anything, the project recompiles. Whenever I’m making a game in Game Maker, the project has to take it’s time to compile before testing. With Godot? It’s so fast to compile that it doesn’t feel like an issue, AND it can live reload. It just feels like the perfect engine to work with for me… for the most part… until 4.0.

THE GRIPES

No engine is perfect, and Godot is certainly not perfect, especially with it’s 3D department. But I’m gonna be real, I only have stuff to complain about with 2D and 3.0 3D, so I might as well get into that.

2D GRIPES

Honestly, my main gripe is just… collision. Let’s be real, I’m not good at programming collision, I have no idea why, but collision is just my weakpoint when it comes to making games and Godot… alleviates some of it. It definitely helps with character movement by just doing most of it in a black box, but honestly, I’m fine with that because I’m bad at programming. But if I want to do collision with guns? Yeah, that’s were I’m starting to faulter.

Mainly cause, I can’t seem to find a way to do it? One type doesn’t fire off the signal needed, one type moves the character with the bullet for a frame, one type doesn’t work at all, I’m probably not doing it right, but man, I just can’t find out how to do collision to save my life.

Another thing was tilemaps, but that got fixed in 4.0. Like my god tilemaps in 3.X are genuinely bad to work with so I’m glad they got overhauled in 4.0.

And then there’s my gripes with 3.0 3D

3.0 3D GRIPES

Yeah the API for 3D was fucking weird. My god so many things were just named differently for no discernable reason, it just doesn’t make any sense half the time, like to get the position it’s like translation instead of position, I couldn’t figure out how to rotate things until right now and it’s a function instead of a variable.

Shaders were compiled in real time as objects appear, so the game would just hang while the game compiles a shader which yeah… that fucking sucks.

And another thing, just… yeah… I’m starting to lose steam with complaining about things.

Noticed how I called these “Gripes”, that’s because at my stage of development, I don’t really have much to complain about, I might have something down the line once I actually finish a game in it, but right now it’s been a very smooth ride. Pretty much all my problems right now have either been “willing developing a game inside am alpha version of an engine” or “not knowing what the fuck I’m doing”.

Although I think my biggest gripe was the lack of custom resource exporting, but thankfully that’s gonna be in Beta 2 of 4.0.

Speaking of 4.0.

THE TRANSITION TO 4.0

When moving to 4.0, it was… interesting to say the least.

For some reason, I don’t think I converted the project right, because the project settings would crash the software. This was at the time where tiling window managers were very finicky with the multi window approach, so I chalked it up to that, but then, I created a new project and it was working fine. So my solution was to make a new project, copy over everything, and well, it worked.

Obviously after that was the API changes which weren’t that much, mainly changing things with a 2 to a _to_, changing things with translation to position, nothing bad there. The biggest thing was the character controller, which had to be overhauled because it was vastly changed from 3.0 to 4.0, with things you usually declare now just in the node itself, and a simplification of a lot of the code, which honestly was just kinda nice.

Honestly most of my things were just with the tiling window manager thing, after that was fixed, it was smooth sailing for the most part, can’t really thing of anything bad I’ve had while using 4.0, everything has been an improvement.

EDIT 11/26/2022: UNREAL ENGINE

You know, the funny thing about this article is that it was mostly me complaining about Unity and praising Godot, but I didn’t really use Unreal Engine before that point.

So I actually did use Unreal Engine for a while back a month or so ago, and honestly? It’s pretty good. Once I understood what the fuck I was going Unreal was suprisingly easy. Blueprints felt natural to use, making Pawns n shit was easy, but, there was one thing holding it back. Storage Useage.

Ok, so I’ve been using Linux for a few months now and the linux version of UE5 runs good enough, some problems here and there, but overall not that bad, except for two areas, C++ and storage useage.

Setting up C++ was a pain in the ass, mainly because it was obviously built for something like Visual Studio: Regular Edition, so using the VSCode shit was bad from the start, the VSCodium C++ extension was shit and didn’t recognize anything, and with the official extension I had to essentially build it from scratch in order to use it, which took like 200GB of my fucking hard drive to build and 100GB to maintain, the standalone pre-built version (which would probably work if I didn’t tried installing it with an AUR package) was still 50GB.

That’s my biggest hurdle with Unreal, the fact that it’s way too fucking large, even with the standalong verison, you compare that to Godot, which is under 100MB, and like, yeah there’s no contest for me, I’m staying with Godot, even if I liked using Unreal Engine.

Conclusion?

I’m gonna be real, I just wanted to talk about Godot. Like, obviously I do, but I just really fucking love this game engine and I can’t wait to finish games in it, it’s one of those engines that finally just makes everything click for me.

I’ve had problems with Unity, I’ve had problems with Game Maker, Unreal Engine is way too bloated for what I want to do, but Godot? It feels perfect.

Now, how long will it be? Fuck if I know, I have way too much on my plate right now and game making is one of those things, but, I have been pushing my friends to do game dev shit, so maybe I’ll have a game jam game or something up within the next year or so, idk.

God, I can’t wait for Godot 4.0 to fully come out, it’s gonna be great.



Back