← All Game Design Projects
The Xeno Saucer boss encounter, its lamp ring firing a fanned volley across the screen

Crystal Drive Z

I went back to Crystal Drive and looked at what it could do better. The same central action now sits inside a field where everything collides, rivals hunt the same ore, four bosses break up the climb, and every death pays for one more run.

Role Solo Developer
Engine Godot 4
Scope Design, code, art, audio
Status Shipped ✓
Design Goal

Take the first game's fantasy further: a living asteroid field where everything collides, enemies hunting the same ore, four custom boss fights, an identity to fly, and a progression loop that makes death feel like one more run.

I started Crystal Drive Z by going back to the first game and asking what it was missing. Crystal Drive proved the main action - catch the falling thing and chase a score - and proved I could ship in Godot. For the sequel, I wanted to push the fantasy much further. An ace pilot braving a deadly asteroid field deserved more than hazards falling politely in straight lines.

Z keeps that central action and builds around it. The player picks a hull and pilot before launching, spends banked crystals in the hangar between runs, and climbs through 99 levels with four boss fights along the way. Two players with the same skill can end up playing very different games.

One pickup, four rewards

A crystal is score, hull repair, dash charge and level progress all at once. There's no separate health pickup, currency or combo token. One object carries the whole run, so every reward question comes back to the same thing. In Z, that crystal also has rivals - you're not the only one who wants it anymore.

The combo is what turns collection into movement. It counts consecutive pickups and expires five seconds after the last one, so standing still isn't a neutral choice, it's a decaying one. Crystals fall in a spread wide enough that covering it means crossing the screen, and hazards fall into that same space. Moving toward reward is moving toward risk, and there's no safe corner.

A field that fights back

In the first game, nothing interacted with anything except the player. The field looked dangerous, but it was secretly polite. In Z, everything interacts: asteroids drift unpredictably, crash into each other, take damage and change direction, and every collision passes on momentum. A crash on one side of the screen changes what arrives on the other. The player has to think about their positioning on screen, not just dodge what falls next.

The field also gained enemies - space pirates and aliens, all keen on the same crystal ore you're collecting. And because everything collides, the classic sci-fi action movie beat comes free: fly into the asteroid field and watch your pursuers crash because they can't match your moves.

Missing a crystal costs the multiplier and nothing else - no health, no loss of anything already banked. Stacking a health cost on top would punish the same mistake twice. When an enemy steals a crystal off the field it costs even less: no combo break, no penalty, just the crystal. The enemy took an opportunity away rather than punishing the pilot for something they couldn't have reached.

Gameplay at level 18: crystals falling, mines and asteroids, an enemy raider top right, 8x combo
Gameplay at level 20: two raiders holding station, crystal magnet field active on a nearby crystal

Bosses are dismantled, not just damaged

Four custom boss fights break up the 99-level climb. When one starts, normal spawning stops and the field clears. Collection ends and the game asks for pattern reading and precise movement instead. Every boss has three phases with different attacks to solve. In three of the four fights, the target changes as well: the outer weapons first, then the main cannon, then the hull.

Each part owns one of the boss's attacks, so destroying a turret permanently removes whatever it was firing. A boss with one long health bar feels the same at 90% and 10%. A boss losing its guns visibly slows down, and the player can see exactly what their shots changed. Choosing which turret to kill first also means choosing which attack to remove first, so the player gets some control over the fight's difficulty.

The rule that came out of playtesting

The level 25 Saucer has a blink that teleports it to a new position and fires straight along the line it arrives on. In testing, it sometimes created situations where no input could save the player. The fight came down to whether dash happened to be ready. That's not difficulty, it's a coin flip.

Slowing the projectiles wasn't the fix. The important part was how close the blink could land, because that decided how much time the player had to react. I now tune it around the slowest hull, a quarter-second reaction time, and the distance needed to clear the shot. Every phase has to work in that worst case, not just for the average ship.

That became a standing rule for every encounter in the game. Each attack must be survivable on movement alone, with the dash unavailable. The dash turns a survivable situation into a comfortable one; it's never the only thing that makes it survivable. A death should always trace back to a decision.

An identity to fly

I also wanted the game to have more personality, and to give players a way to have an identity inside it. There are three playable pilots and five ship types, each with their own strengths and weaknesses, and each pilot has their own colours - so your choice of pilot recolours your ship, and the pairing you fly reads as yours at a glance.

A run's numbers come from the hull, the pilot and the hangar, multiplied together rather than replacing each other. That protects each hull's character no matter how much has been spent on it: a Viper flown by Giana is still the twitchiest ship in the game, and a Bulwark with every plating level bought is still slow. All five hulls are available from the start, because locking them away would put the most expressive choice in the game behind a grind.

The select screen bars come straight from the real tuning, so they can't promise something the ship doesn't do. Retune a ship and its bars move automatically. I scale them against a range wider than the current roster and give them a visible floor. An earlier version made the slowest hull look almost broken, even though it still moved at about two thirds of the fastest ship's speed. The bar shows where a ship sits in the roster, not a percentage of some imaginary perfect ship.

Ship select screen showing the Tomcat and its speed, handling, firepower, hull, dash and salvage bars
Pilot select screen showing Ace, whose specialisation is plus 25 percent weapon damage

The one-more-run problem

I could see the first game losing people in the same place. They'd fly a few runs and die at whatever level was theirs - maybe level 20, maybe 35. After a few deaths there, they'd put the controller down. That was as far as they could get, and the next run didn't promise anything different.

The hangar fixes that. Every run banks its crystals, and between runs they buy permanent upgrades across eight tracks - more damage, more health, a faster rate of fire, a better dash. Death now ends with a purchase that makes the next try visibly stronger. The question changes from "is that as far as I go?" to "maybe I'm strong enough to beat this level now".

Hangar screen showing eight upgrade tracks with per-level costs and the effect of the selected purchase
Main menu showing the Crystal Drive Z logo alongside career performance and crystal economy records

Need a level or technical designer?

I can take a feature from the first idea through building, testing and tuning it.