Final Touches


Having taken a break from this project to learn a little Godot and GDScript, I came back to finish up the sprites and tidy up the gameplay.

Game Feel

I learned quite how simple pixel art effects could be thanks to a great tutorial series on making an RPG in Godot. While the sprite animations in Godot are a little easier to implement, it's simple enough in Unity also. So I added simple 3 frame animated effects for hits and enemy deaths that added a lot of punch to the actions.  As an aside, these deaths are all triggered by an Event on the Health component of each entity, which I also used to count the number of enemies killed for a final score screen.

I also used Leshy SFMaker to generate some appropriately pixel-y sounds for most of the events in the game.

Gameplay

With only two enemies the combat could be a bit stale, so I allowed the spawner to produce "super" versions of the enemies (faster moving and shooting enemies coloured red for effect). This was extremely easy thanks to the interface implementation, since the spawner generated an enemy from a list of prefabs, and then if it wanted to spawn a super it simply got the enemies interface implementation where I had added a "Superify" method. That way there are no "if enemy has gun increase fire rate" and everything looks clean.

I am tempted to create another enemy type with some more complex interactions (or just more guns), if I have the time tonight I will take a stab at it.

Having only 3 hearts permanently was very punishing, so I added a healing pad that spawns periodically at the top of the map. Since the enemies continue to spawn relentlessly this does a nice job of providing some meaningful choice as well as forcing the player to traverse around the map more. I really want this game to feel active and not a static shooter that some bullet hells can be where you just dodge in place while holding down the fire button. Not that this game is a "bullet hell", but it can become pretty crowded on screen.

Tidying up

I made many little changes over the last couple of days which probably aren't worth detailing, such as changing inputs and randomizing the start position of the clock. I think all of these things together improved the game a lot however, so it is worth leaving a lot of extra time for polish on these projects.

One thing to note is performance. With a cap on the total number of enemies on screen the game is very smooth, but a few more could result in dips below 60 fps. I haven't looked deeply into the Unity profiler, but given that nothing in this game is particularly expensive (from my understanding) I will need to look into it for future projects, because something I am doing does not scale well. It could be the instancing and destroying of entities, which could be saved by pooling the enemies/projectiles offscreen, something that easier to implement if it's intended from the start.

Motivation

I lost quite a bit of motivation for this project when first drawing the sprites. This is entirely because of my own expectations whenever I approach something artistic, I always imagine things far better than I can actually draw/make. Having never put much time into learning to draw I need to be more realistic with these aspects, but I should also try to make projects that don't rely on me drawing something that is better than I've ever drawn before.

Anyway taking a short break to do something you are good at helps a lot, in my case learning a new engine and language in Godot/GDScript.  I'm definitely going to be using Godot for my next project, it seems like a no-brainer for 2D games. Anyway since I scoped this project well I still had plenty of time to finish, and am very happy with how it's turned out.

For the future, I'm going to try to work with an artist, I think that would be really fun and could push these projects to the next level.

Files

Build.zip Play in browser
May 30, 2020

Leave a comment

Log in with itch.io to leave a comment.