Ratioactive

Godot 4 GDScript Project Planning 2D Game Development Game Design UI Implementation GitHub Collaboration

Ratioactive (rat • ee • oh • active) is a 2D arcade shooter where you play as a rat in a cheese-infested kitchen and fight through waves of evil cheese, collecting points as you go. Buy weapons and obstacles and survive for as long as you can. The game features 17 different weapons, many of which are silly takes on real-world items.

Ratioactive was a project I created with a friend over the summer of 2023. It is heavily inspired by the likes of Call of Duty: Zombies and Enter the Gungeon for it's gameplay aspects and combat systems.

I created the project in Godot 4 using Godot's GDScript programming language. All the code was written by me including the combat system, purchasing system, enemy pathfinding and attack systems, and the data-driven weapon system. I handled many game design decisions like interaction design and assisted in level design. Additionally, all game-engine-sided things such as level colliders and building the project in Godot were done by me.

One goal for this project was to begin experimenting with data-driven design. For my implementation in this particular project, I used Godot Resources, which are lightweight data containers that hold information like weapon texture, positioning, and weapon statistics (ammo, damage, etc).

Working with creating a data-driven item system is something that I have carried with me to many projects since Ratioactive. I find it to be highly efficient for creating multiple types of items and can see the applications in other games like Minecraft or Call of Duty where many different items can boil down to: Texture, Model, Statistics, or other data points. Abstracting these things can make development much more efficient.

Alta VR internship work screenshot

Here is an example of the data-driven weapon system. With the system I set up, new weapons can be made easily via an inspector rather than everything being hard-coded. This accelerated development and made new weapons quick to create.

The link to the code driving this process can be seen here.

Another goal in this project was to use A* Pathfinding in a project for enemy AI. I used Godot's built-in navigation agents to act as a way of learning how to interact with such a navigation system. Using this system, I created navigation grids where the enemies could walk on and set their target periodically to the player's position. The enemies would try to avoid walking into each other as to avoid bottlenecks at chokepoints like doors.

In creating the enemy AI for Ratioactive, I learned a lot about enemy pathfinding rules, A* Pathfinding, navigation algorithms, and some about goal-oriented AI programming (GOAP). In the end, I ended up not using a GOAP system for my enemies, but I found it highly interesting and took notes for future projects.

See the video for the enemies in action as well as general Ratioactive gameplay.