screenshot

Over the past couple of weeks I was working with a friend of mine to make a simple platformer game in Godot. I have never really had much experience collaborating with another person for creating a game (most of the time I’ve been developing my projects solo) and this was a pretty new experience for me. However, everything went very well and I really enjoyed working on Birb Run (that’s what we called the game). Anyway, this post will detail what I learned from this project and also reflect on how it went.

Collaborating with another human on a project

I haven’t really collborated much on a programming project with another person except for my time at my school’s robotics team.

For a summary of how collaboration on the robotics team went, we had to decide between using forks and branches and if I recall correctly, we initially tried out forks but then opted for branches. All I really remember of using branches for development was that there were too many merge conflicts that ended up being a pain to deal with. Also way too much force pushing. Anyway, I left the team before the 2024 season so I wasn’t sure of what they were planning, from what my friend told me they decided to continue with branches and didn’t go to terribly.

However, after that experience, I decided to opt for forks instead for this project and that seemed to work pretty smoothly. There were still merge conflicts that were kind of annoying to deal with (at least Godot’s stuff is all saved in plain text so it wasn’t a nightmare to fix in a plain text editor). I personally didn’t have to force push to anything so that was nice. Overall, coordinating what features to implement and who should implement such features went well and was a fairly good learning experience.

For merge conflicts, after doing some reading online I learned that perhaps smaller localized commits are better for minimizing merge conflicts (and apparently are better practice in general in the software development world? I’m not quite sure what the general consensus on that is though…)

A few other things of note that happened was that I also realized the importance of maintaining readable code and comments. I knew comments were important but as a mostly solo developer up until this point I had been negligent with comments at times (which is not great). One instance where this became an issue was when I randomly added some code that deleted the player node but then instantiated it again to reset its information when the level was loaded. I forgot to comment this so it looked rather strange and of course since this was some random code that appeared to do nothing without explanation, I forgot what it did and it confused my friend which lead to them nearly deleting it. Luckily I randomly remembered what it did and told them not to delete it and my friend was also nice enough to add a comment explaining what the code did. Comments are important kids!

Still, the experience was very nice and I had a lot of fun.

Godot

I have had some experience with Godot prior (I randomly decided to make a somewhat bad breakout clone during a snow day, you can find a YouTube video of the gameplay here). Also, at my high school I started a game development club and while not many people came after the first meeting, one of the things I tried to do with a freshman (not related to this project) was attempt to learn Godot. We followed Godot’s guide on how to make our first 2D game and I also tried to making a somewhat terrible Space Invaders clone.

However, beyond that I did not have any other projects using Godot. I normally like creating simple projects from the ground up using C++ (or Rust for some of my projects) and OpenGL. However, I am open to trying out new technologies. My friend has had some experience with Godot himself (he experimented with the Rust bindings for Godot) but I had only experience with GDSCript but we decided to just use GDScript for this project. I know Godot also officially supports C# and C++ but I felt that for small projects like this, GDSCript would be just fine.

I had quite a bit to learn for this project. For one, I had to learn how TileMaps worked and I made frequent visits to Godot’s Documentation and also reading Stack Overflow and the Godot subreddit in an attempt to learn from others having similar issues to some problems I was having as well. I’ll be honest, at times I found some issues rather frustrating to solve (one specific example was that I could not find anything for the life of me on how to disable the collision of a TileMap - I wanted to create a background layer which of course cannot have collision - this was rather annoying and I just came up with a hack where I just made a new TileMap and created a new TileSet without a physics layer. I’m pretty sure there was a better method but I don’t really care to find out right now). However, I think I still learned quite a bit about Godot and I feel more comfortable using the engine now. I’ll probably still make projects in C++ and Rust though for things like game jams I might use Godot.

Other notes

The game has 20 levels (or 19 if you don’t count the last level, which just has you walk through the exit portal to win the game) and that was quite a bit of effort to make and in all due honesty I’m not quite if all the levels are unique and offer quality gameplay. I tried to have some interesting uses of the mechanics my friend and I implemented and I hope that the game isn’t too repetitive. However, my friend was willing to playtest some of the levels which was nice and he gave some very good feedback and ideas. Hopefully we can get some other people to try out the game and give feedback and critique.

Also, I normally use Neovim for programming and I found some stuff on the internet on using Neovim with Godot but I was lazy and didn’t really want to investigate so I just opted for Godot’s built-in editor. It was okay to use but after being so used to vim it felt weird using the mouse to move around the editor. I might have to investigate using Neovim with Godot more or at least try to find a way to add vim keybinds to Godot.

Conclusion

Overall, this was a very nice project to work on and I’m glad that I was able to make something interesting with Godot with a friend. I like how the final product looks and I hope I can get a few people to try it out and get some feedback.

Anyway, if you are interested in trying it out you can download/play the web version on itch.io.

You can find the source code here

Anyway that’s it, have a nice day!