AstroSynchronous

February 2026 → March 2026
Designer, Programmer, Technical Artist

Game Studio 1 Project
Team (6 members)


Controls

WASD or Arrow Keys to move
; or Space to fire weapon
Hold Enter during the intro to skip it

▶ Play

Project Summary

AstroSynchronous is a chaotic, bullet-hell style shoot 'em up with a twist: To deal damage, you must store and discharge energy by allowing your ship to get hit by bullets! Using this unique ability, you must destroy the threat that seeks to devour the Sun—the Cosmic Jellyfish—by absorbing and weaponizing the blasts of energy it fires at you.

This project was a collaborative effort between myself, 2 designers, 2 artists, and one sound designer. Over approximately one month, we followed a scrum workflow across 4 sprints to create a game built around the design verbs "connect" and "rush". Overall, the development of AstroSynchronous gave me valuable experience in working across disciplines and keeping a team aligned on a shared vision.


My Contributions

During development, the bulk of my contributions consisted of the implementation of the game's visual effects---the ship's turning sprites, variable thruster animations, energy absorb effect, and ship explosion---as well as the design of the UI and main menu. Though I view myself as more of a designer/programmer, I also took on the role of a technical artist; as the intro, boss death, warning strip, win/lose, and transitionary animations between the main menu and game were all done by me through Unity's keyframe animation tool.

Intro animation

Intro animation

Boss death animation

Boss death animation

I also designed and implemented a system that dynamically switches the boss's attack patterns. This required me to randomize which color bullet was active for that phase (and change their sprites/collisions based on that), what frequency (amount on screen) each of the three bullet types had, and update the UI accordingly to reflect the changes. Additionally, the system is modular---providing designers a straightforward pipeline for creating and implementing new attack patterns, as both systems live solely within the Inspector (no code required).

public void ActivateRandomBulletPattern()
{
    Debug.Log("Bullet pattern started");
    if(TutorialActive.tutorialActive)
    {
        return;
    }

    if (activePattern != null)
    {
        activePattern.SetActive(false);
    }

    int randomIndex = UnityEngine.Random.Range(0, bulletPatterns.Length);
    activePattern = bulletPatterns[randomIndex];
    activePattern.SetActive(true);
    activePattern.GetComponent<BulletPattern>().UpdateSpawnerColors();
    activePattern.GetComponent<BulletPattern>().ActivateSpawners();
}

ActivateRandomBulletPattern() selects from a list of designer-created patterns and cascades down through that pattern's bullet spawners to activate each, as well as update the color bullets they're firing.

List<EnergyColor> allColors = new() { EnergyColor.RED, EnergyColor.YELLOW, EnergyColor.BLUE };
EnergyColor activeColor = constellationManager.constellationColor;
allColors.Remove(activeColor);
foreach (GameObject spawner in bulletSpawnersHigh) 
{ 
    spawner.GetComponent<EnergyBulletShooter>().bulletColor = activeColor;
}

foreach (GameObject spawner in bulletSpawnersMedium) 
{
    spawner.GetComponent<EnergyBulletShooter>().bulletColor = allColors[0];
}

foreach (GameObject spawner in bulletSpawnersLow) 
{
    spawner.GetComponent<EnergyBulletShooter>().bulletColor = allColors[1];
}
foreach (GameObject bullet in bulletSpawnersHigh) { bullet.SetActive(true); }
foreach (GameObject bullet in bulletSpawnersMedium) { bullet.SetActive(true); }
foreach ( GameObject bullet in bulletSpawnersLow) { bullet.SetActive(true); } 

UpdateSpawnerColors() assigns a random color to each frequency of bullet to keep the player from only needing one type of energy stored for the constellation phase, and ActivateSpawners() kicks the pattern as a whole into motion.


What I Learned

Overall, my first foray into game development with an interdisciplinary team was very interesting! Being able to rely on other people to carry the load of development and bring their own brand of expertise to the project made working on this game quite the fun experience. We even got offered the chance to present AstroSynchronous during Champlain College's Admitted Student's day alongside senior capstone projects, which honestly still blows my mind.

In the end, we as a team all enjoyed working together a lot---And because of that, we've decided that making more games together isn't entirely off the table for us. Maybe we'll participate in a game jam or two down the line... Who knows!