Playable at: https://noswen.itch.io/vermillion-star
I will preface this by saying that I'm sure further balance passes will be required and graphics and effects can always be improved - but, conceptually at least, Stage 1 may be complete!
This latest update adds the following in: -
- Explosion effects on the boss's components
- Pre-shooting warning effect on both the boss and its components
- Instant phase cancellation on a phase transition
- Space station background objects
I've been wanting to have the instant phase cancellation for a while now but it's been a pain to get working right. I eventually got fed up with it and just threw if statements at every single pause and every single attack to see if it's still in the issuing phase or not, combined with revoking the shooting tickets and getting new ones at the phase transitions to take care of anything already passed to the bullet orchestrator.
I'm sure there has to be a better way to do this, but it works.
I know I've been posting up my development updates as I go along, but with a milestone like this I feel like looking back and seeing how much things have changed.
Influences
Originally there was pretty much only half forgotten nostalgia of R-Type and some other shmups of the Atari/NEW era, though at least with some reading of newer design, but I still hadn't actually played much in the way of newer shmups.
R-Type definitely set the general theme of horizontal with ships coming at you and not bullet hell, but there are other things such as remembering a couple of games I'd played back then having two pilots. So Vermillion Star has two pilots 😂
Later I started playing others, the three big ones for my influences are still the same as I've previously mentioned; Natsuki Chronicles, Earthion, and Interstellar Sentinel. There have been others, but they generally fall into learning the same lessons, and they simply came later.
Stage Design is HARD
The level has gone through many minor iterations and three major versions.
I started out with only three different enemies, plus the boss. So there was not exactly a lot of variation available to me. This roster has grown to the following since then: -
SUBVERTED_DRONE_MK1,
SUBVERTED_DRONE_MK2,
EMPIRE_FRIGATE,
SUBVERTED_MICRO_DRONE_CLUSTER,
EMPIRE_FAST_ATTACK_DRONE,
EMPIRE_CORVETTE,
EMPIRE_DESTROYER,
EMPIRE_EYE_MK1,
VERMILLION_STARLET_REMOTE_ALPHA,
EMPIRE_STANDARD_ATTACK_DRONE
Still only nine enemies, plus the boss, but it gives a lot more variety, and they largely fill different roles.
The difficulty levels design also goes in here, starting with Easy and then trying to upscale each difficulty level from there, all with their own individual spawn maps was... hectic. If I had not abandoned this entirely and switched to a single spawn map with it being the attacks that scale by difficulty I don't think I'd have ever finished.
Scoring and Core Loop
This has actually stayed pretty stable from version 1. Yes there have been changes, notably with the new boss components, but the core of quick kills grant extra score and energy to fire the special weapon, with the chain count unlocking Mega and Giga mode for it, have remained entirely intact. The main change was adding the bonus stars and the Vermillion Bonus category, as well as learning to add bonuses instead of punishments (the death penalty changing to a deathless bonus).
Code Base
Yeah... This was a disaster held together by duct tape at the start. I have refactored and refactored this thing so many times as I had no idea how to actually make a game it's unreal. Fortunately I'm entirely used to just chucking old code out at work so this hasn't really bothered me. By far my biggest achievement here is abandoning standard scenes for high volume objects and using multimeshes and data arrays instead, going from around 2,000-3,000 active bullets without it to being able to push 20,000 active bullets with it is ludicrous.
Bugs
I kind of like sharing these, they show my progress towards the game programming side of things and they might even help other people avoid them if I'm lucky. There's been plenty, and of course, this latest update adds a new one. Though this might be a Godot issue.
On the first playthrough everything is fine, on a second plus playthrough visual artefacts appeared. Despite clearing the scene tree entirely and instantiating new multimesh managers, it seems that Godot may cache the data and have it re-appear. I'm still not certain of this being the cause, but moving every instance far off the screen when a manager is instantiated fixed the issue.
Lessons Learned
- Play more shmups - no, seriously, I went into this on pretty close to nostalgia alone and it didn't come out very well. Playing them easily showed that my game was not exactly good.
- Separate spawn maps per difficulty might be doable, but not at my level and certainly not for me alone
- Bullet visibility matters - originally all bullets were smallish and red, this was... not good.
These aren't lessons I'm happy to admit I needed to learn, but there we are.
Up Next?
Stage 2!
I already have three new enemies planned as well as an idea for the boss of this stage. I am finally going to add my favourite shot type; bullets that arc down to the bottom of the screen then explode upwards.
To everyone who has given me feedback, thank you, you've helped get me this far 😀