Burrow Blaster
Burrow Blaster is an action packed shmup with fun upgrade and progression mechanics. Fight your way through the underground tunnels and collect scrap from the robots you kill to upgrade yourself, escape the underground!
I made Burrow Blaster in collaboration with Lucas Sharkey Chouinard. I was responsible for all of the programming and sound design in the game, and Lucas did all the art. Below I’ve detailed some of the highlights of my work developing this game.
Multi-Scene Development
To help keep the game running well while managing a large level full of enemies, I structured the game space as multiple “Scenes” that were loaded in and out of memory.
float distancefromPlayer;
//loop through tiles to load them in
for (int i=0; i<segments.Length; i++)
{
//check distance from player camera
distancefromPlayer = Mathf.Abs(segments[i].position.z - cam.transform.position.z);
//Debug.Log(distancefromPlayer);
//load if close enough and unloaded
if (distancefromPlayer <= distance && !segments[i].loaded)
{
//Debug.Log("Calling load segment");
LoadSegment(segments[i]);
segments[i].loaded = true;
}
//unload scene if too far
else if (distancefromPlayer > distance && segments[i].loaded)
{
UnloadSegment(segments[i]);
segments[i].loaded = false;
}
}
Awesome Upgrades
Burrow Blaster includes 32 stat upgrades and 4 unique power upgrades including a rechargeable shield, dodge, side shots, and a super laser. Each of these special upgrades are visually represented on the player model using a visuals manager.
Save and Load System
Burrow Blaster includes saving and loading functionality so that the player can take a break and come back another time. It does this by storing the player’s data in an array and respectively serializing or de-serializing it.
//Function that saves game data to a file
private void Save()
{
//creating save tools and file
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat");
//writting save data with serializable class
SaveData data = new SaveData();
data.scrap = scrapManager.GetScrap();
data.upgradeLevels = upgradeManager.GetAllUpgradeLevels();
//Serializing Data and saving to file
bf.Serialize(file, data);
file.Close();
}
//function that loads saved data
private void LoadSave()
{
//check for file existance
if (File.Exists(Application.persistentDataPath + "/playerInfo.dat"))
{
//opening save file
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
//loading data
SaveData data = (SaveData)bf.Deserialize(file);
file.Close();
//rading data
scrapManager.SetScrap(data.scrap);
upgradeManager.SetAllUpgradeLevels(data.upgradeLevels);
}
}