Contents
Introduction
In August I saw an announcement for Fedijam 2024 - a gamejam event for users of the fediverse. Goal was to create a game within a month, and the theme was “Up in the clouds”.
I quickly got an idea that I want it to be a top down shooter where you stop terrorists on a plane - heavily inspired by one mission from Call of Duty: Modern Warfare 3 and Fights In Tight Spaces.
During this month I learned a lot about Godot, gameplay AI, and game development in general.
Development
From the beginning, I decided that I want my game to be 3D and made out of voxel, primarily because I’m yet to learn how to do proper 3D modeling, and voxels are easy to understand.
Player
For the character I quickly settled on generic secret agent: black suit, sunglasses, and bald head, because modeling hard would be hard. Originally he also had a pink tie, which I can’t recall the reason for, but that was swapped for a black tie after my friend sent me an article about Pope’s Asia-Pacific trip and I saw how sharp was Pope’s security dressed. Truly that’s what a real secret agent should look like!
By 3rd of September I had basic movement done, with crouching, walking in every direction, and separate arms and legs animations playing at the same time. All of these mechanics mostly stayed unchanged during development.
Enemies
After player was done, I started working on enemies for us to fight. I based their design on Generic Bad Dudes models by Kommissar Kartofelov for Ravenfield. I really loved that design because of how flexible it is: these could be anarchists fighting the police; eco-terrorists fighting oil PMCs; revolutionary militia overthrowing the state, or anything else you could imagine. Simple, very cliche, but very effective design. Would be perfect for my game considering that I actually had no plot in mind and had no idea why are these terrorists even on board.
For their weapons I chose AK-47. For such a generic Bad Guy design, it only fits to choose the most generic Bad Guy weapon.
Gameplay AI
For my game’s AI I was investigating what do other games in top down shooter genre do for it. Unfortunately it seemed like they usually just made AI walk around, approach sound when heard, and then stand and shoot player until they die. Definitely would be easy to program, but that didn’t sound exciting to me. I wanted my AI to look smart-ish.
I really wanted to choose Goal Oriented Action Planning (GOAP), system used in F.E.A.R., game often praised for fantastic AI (and from personal experience, it does feel pretty smart). The problem was that I could find a lot of theory of how it functions, but I could never really imagine how do I translate this theory into practice.
After looking around some more, I found Behavior Trees, and that system was way more straight forward: even from high-level overview I could already imagine what would it look like in code. I chose Godot addon Beehave for behavior tree implementation, as it seemed pretty simple to use and extend.
Most important thing for my AI was what I called “AI points”: points all over the map that tell AI where to go when needed, i.e. where’s cover, where can player be flanked. I took this approach from Half-life 2 that used a similar system, though as far as I remember, their system required far fewer hand-placed markers than mine did.
Groundwork for AI was laid from 5th to 11th of September, but work on AI continued all the way until release.
One of the AI features that a lot of players really liked was enemies pushing food carts to use as cover - that is done with AI points as well! When enemy is alerted, they will check if there’s a “pull cart” point next to them, and if there is, pull a cart towards it. Unfortunately, this feature was a late addition to a project, so I don’t have in-development footage of it.
HUD and sound
HUD, or Heads Up Display, or health and ammo displays were inspired by Max Payne and PAYDAY: The Heist: characters silhouette representing health, and weapon’s magazine representing ammo.
For sound design it really helped that Godot’s animation system allows for a lot of different things to be present on the timeline, including sounds. I collected a bunch of free audio files from freesound.org and added them to animations, to make shooting and reloading sound relatively nice.
Level design
On 15th of September I finally started working on first proper level. From the very beginning I had an idea that game would have 3 levels: luggage area, economy/business class, and premium class.
Economy class
Premium class
Tutorial
Release
On 31st of September game was officially finished. Game was uploaded to itch.io and soon I started getting my first feedback.
My final thoughts about this project:
- Fedijam is not the most appropriate place for game’s theme
- I’m very proud of what I managed to make in 1 month with pretty much no prior Godot experience
- AI pulling carts and taking cover to reload does indeed feel smart
- Tutorial completely failed at teaching players how to play the game. For example, crouching is taught by making player crouch under something to pass it - something that player actually never does in the game. Instead it should’ve put player in position where ducking behind something would help them avoid danger.
- Targeting browsers for the project was a double-edged sword: on one side, it allowed more people to easily try it; on the other, “Compatibility” renderer Godot uses for browsers was really annoying to work with, as it simply doesn’t support a lot of new nice features.
- Godot overall is very nice to work with, even though sometimes it can be buggy.
In the end, I think I made a pretty decent little game. If you want to try it, you can get it on itch.io. There’s a new Fedijam scheduled for December and I will definitely participate, and, hopefully, my new game will be even better.