Play Button Pause Button

Disasteroids on Itch.io

rcarlson profile image Robert Carlson ・3 min read

Since my last devlog I've been focusing on tuning the game mechanics to make it more challenging and give the player more things to focus on.

Adding Temperature Controls

A couple weeks ago I introduced a new mechanic to the letsbuild community. I got some great feedback, especially on the shape :). If you want to see that post you can check out the link below:

For those of you who didn't see that post, this feature was a result of some player feedback with my last build regarding how easy it was to survive by just holding down the laser. To add an element of difficulty I added a temperature component for the player to watch out for. As you use your laser, the overall temperature of the ship increases. If you don't let the laser cool down you will eventually do damage to yourself. I was very surprised at how effective this mechanic is in later levels (7+).

Alt Text

Adding a Shield

I wanted to add a defensive powerup for the player have. For this I added a shield powerup that absorbs damage. Early iterations of this had the shield on a timer, but I found that this penalized the player for activating the shield towards the end of a level.

You can see an example of this early iteration in my previous post:

I eventually settled on adding a shield power bar that shows the player how much strength the shield has. Hits on the shield reduce the power. In theory the player can keep a shield up the whole time if they manage to avoid getting hit :)

Alt Text

Frustrated with Godot

I spent a considerable amount of time trying to get the shield working. The functional requirement for the shield is

1) Follow the ship
2) Collide with objects
3) Detect collisions and run code on collide

Long story short, I opted to use a RigidBody2D (static) for the shield so that it could 1) follow the ship and 2) collide with objects, however I ran into a problem with the 3rd functional requirement.

Apparently there is a limitation with Godot that prevents RigidBody2D (static) objects from referencing the objects they collide with. The official response I found from github was this was a design choice to optimize the game engine. In most cases static bodies represent the environment and there is little or no reason for Godot handle custom events for collisions. Simply having the objects collide is sufficient 99.9% of the time.

To solve the problem I ended up putting much of the collision logic for the shield into the asteroid which is a RigidBody2D (rigid).

Removing the Insta-Kill Timer

Just like with the shield, I found myself reluctant to pick up an insta-kill power-up towards the later part of a level. I ended up removing the timer component for this power-up in favor of a fuel based system. The player can now see how much energy is remaining for the insta-kill and preserve it between levels.

Alt Text

I found this also made me want to spam this power-up less in favor or burst firing.

Enabling Music

I felt like the music might be too much for some players, so I added a key binding (M) to enable/disable music along with a visual indicator to the UI showing if music is enabled.

Alt Text

Whats Next?

I still have a few bugs to work out with the laser. Sometimes it focuses on multiple targets (see video for example). Also, I want to add a title & controls screen. I am also considering adding a new type of asteroid that can hurt the ship if it's too close on explosion.

Play the Game!

You can download my game via itchio.

View on Itch

Posted on by:

rcarlson profile

Robert Carlson


Husband, Father, Coder, Gamer, Co-Founder LetsBuild.gg


markdown guide

Congrats on getting it out there!!!


Congrats on going beta with it!

I'm a fan of the changes. It feels like there's more strategy rather than spamming.

Keep up the good work!