Cargo Busters

CB demo gif
Techs Demonstrated
  • C#
  • Unity
  • Git
Project Summary

The purpose behind "Cargo Busters" as a project is simple. It's to gain experience creating a large application. Managing complexity is the key emphasis here, and the core lesson to takeaway is of writing clean code.

This project still continues to push my problem-solving skills as I add mechanics-- from designing Ai behaviours, to creating radar systems, to maintaining signaling events, to building scalable and modular entities, to even managing hardware resources.

And most importantly, developing this project also makes me happy. ^_^


Features

Ai Behavior
Demo

Each Ai ship dynamically engages enemy ships while doing it's best not to damage friendlies. Depending on the ship's weaponry, each ship does its best to maintain a safe distance from the target during engagement.

How: Each ship has a controller that communicates with the it's own subsystems. The scanner subsystem picks up enemies, the engines subsystem provides movement, and the weapons subsystem controls firing and weapon cooldowns. This abstraction and encapsulation of the ship's subsystems keeps the controller's logic clean, which in turn allows for more complex maneuver implementations (such as maintianing a set distance from a target, or exercising smarter fire decisions).

Wave Spawning
Demo

Ships spawn into the zone each wave, and once a wave is completed then the volumne of incomming ships increase. When a variable amount of waves are completed, then the round is completed. Enemy ships get stronger each round, but the volume of ships return to a minimal level.

Upgrades
Demo

The upgrades are straight-forward, and they range from simple hull and shield and damage upgrades to increased shield regen rates and unlocking other special actions (like spending time to repair the ship or warping out of the combat zone).

Looting Disabled Ships
Demo

When a ship is disabled, it's cargo may be plundered. Simply getting close enough and completing the loot action will reward the player with resources.

How: This was a bit tricky to implement. Firstly the area around the player is monitored for lootable objects, and when is in range, the respective UI element is displayed. The looting action takes time, and the target must close to the player for the action to complete. Taking damage also cancels the looting.