Starfire Skies Firework System: Part 1, Journey


I've been working on Starfire Skies for about a year and a half, and I wanted to share the journey of developing the main crux of the game: the firework system. When I first started this project, I was still working full-time at Google, so it was challenging to come home, sit back in a computer, and find the energy to write more code. I am sure a lot of people feel this way, especially in this industry, I have a lot of respect for people who manage it alongside their 9-to-5s but I never was really able to do so. Creating a fireworks game however had been simmering in my mind for a long time, and I began some early experiments in Rust (link to the GitHub) to see if I could bring it to life.

After being laid off, I finally had the time to dive in. I hadn’t developed a game before, so it was a fresh start. My initial plan was to build everything in Rust using Bevy, a data driven game engine. However, I quickly realized that Bevy would require a lot of work to get more functionality if I wanted to get ambitious. I explored other engines like Unity and eventually chose Godot—it offered a great balance of features without requiring a big investment. (And that choice felt even better after the Unity scandal😂!)

Fireworks in Rust

Once I got comfortable with Godot, I began working on the first version of the firework system by creating RigidBody2D instances for each firework and firework star (the little balls of light after the explosion)and using GPUParticles2D for their trails. After launching maybe 3 fireworks, the frame rate became so bad, I had to find a different solution. I experimented with several approaches, eventually moving into the Godot Particle Shaders . With shaders, I could create fireworks without the frame rate issues, though there were trade-offs in flexibility and control.

In the particle shaders, I built a resource system that allowed me to customize each firework’s properties: color gradients, movement parameters (like velocity, drag, and gravity), and particle count. It was a hands-on lesson in shaders, parallel programming, and even creating quaternions for spin effects. Now I could launch 10's of fireworks, each with 100's of stars with 1000's of trail particles per star (Millions of particles) with no real issue.

Fireworks made with Shaders


firework parameters 1

While shaders helped overcome frame rate issues, they introduced new complexities. The fireworks and explosions became difficult to manage—essentially a "black box◼️." Once I set parameters, it was hard to preview or tweak their effects, which limited flexibility, especially when trying to sync sound effects with explosions.

Despite these challenges, I managed to complete a demo and release it on Steam for my first ever game after about 8 months from being laid off. Watching the first trailer featuring my firework system was a rewarding moment and I think it still looks pretty good!

After release, I took a break and saw that not very many people were playing the demo for very long. I got a lot of feedback from friends and family saying that it was really confusing and the tutorial made no sense. I agreed and took the demo down after few weeks from releasing it. This quite drastically reduced the amount of views I was getting and it really sucked but I vowed to make my game better.

I started with the fireworks systems, which felt like something I could work on after low morale. After learning so much about the game engine, I decided to try and rework what I built but using Node2D for stars, since I realized that RigidBody came with extra collision code that wasn’t necessary. Within a few days, I had a streamlined version in place. Although I still encountered some lag, tweaking project settings—like reducing physics calculations per second—helped tremendously. The frame rate held steady with 10-20 fireworks, and this new approach allowed me to adjust the fireworks' appearance outside of shader code, which kept things both flexible and performant (although shader code remains unbeatable for ultra-high frame rates!).

Node2D firework stars

After about 10 months of balancing the game’s development with a side job, I finally arrived at the current version of the firework system, along with a card-playing mechanic and many other gameplay features. This iteration is now live on Steam, and I’ll be diving deeper into the mechanics of the new firework system in a future post.

Reflecting on the journey, I see so many things I’d do differently, but creativity and game development are rarely linear processes. I’m grateful to everyone who’s followed along with this devlog, and I hope you enjoyed the look behind the scenes. Thanks for reading, and have a wonderful day!

Files

StarfireSkies_v0.2.1.0_x64.zip 123 MB
17 days ago

Get Starfire Skies

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.