Poll Results + Dev Update

Howdy! Coming at you today with a development update for Cosmogelica. (This is not a build release, it'll be a while before I do a new build - see below.)

Stage Progression Poll Results

Just over a month ago, I put out a poll asking people if they'd prefer linear stages or randomized stages, and also had a spot where people could add any additional feedback (You can view the results here.) The poll was pretty interesting: People seemed to be pretty split on it, but overall didn't feel too strongly one way or the other. However, that doesn't mean everyone was so passive.

I saw some great arguments from both sides of the problem, and it got me thinking: How do I solve this in a way that makes everyone happy? There was a lot of informational stuff in here, but this one stuck out the most:

> I honestly would've picked linear stages that either contain random elements in them, or random stages inbetween. So you can get to know most of it, but it keeps it a bit more interesting and replayable. That probably doesn't help does it. Sorry.

The respondent thought this wasn't helpful, but this was probably the most helpful response out of all of them. It got me thinking about my chunk system, and how the game arranges the chunks in different orders, and it made me realize I could find a solution without having to change much code at all.

The New Progression

In the initial version of the game, I just had  a scrolling background. I gradually introduced foreground "chunks" to add more decoration to the stages, and make it feel more like you're progressing through an area, but it still didn't feel quite right, something that came to a head when I started trying to introduce ground units again (they were something I was trying for in the original incarnation of story mode, before I scrapped that.)

Since the poll, I've rewritten how the chunks are organized. They now go like this:

  • Intro Chunk - At the start of the stage, allows player some time to see what gel is on this stage and get into position.
  • Stage Chunks - There are 9 of these. Every time the player passes by one, the next wave is introduced (see below.)
  • Boss Chunk - This is the chunk on which the boss appears.
  • Outro Chunk - This is the chunk that's used for when the player leaves at the end of the stage.

In total, each stage has 12 chunks. Now, here's the smart part:  The game can re-arrange these chunks in any order, so any of them could be the intro chunk, boss chunk, etc. In this way, I now have two modes to present stages:

  • Linear - The chunks are presented in the order they are in in the stage editor.
  • Random - The game shuffles the chunks and presents them in a random order. Any chunk can become the intro chunk, boss chunk, etc.

I can also have more than 12 chunks, in order to provide even more variance in random mode.

Here's a video of the stage editor so you can have some idea of what I'm talking about. Here, I can position ground units, pretty gems, and other elements that'll appear on the chunk. I can also specify how enemies will show up, what difficulty they'll show up in, etc.

Randomness With Familiarity

You may notice that  the positions of enemy units, pretty gems, etc, is fixed, and this is true. Players who play the same stage over and over will start to learn what each chunk looks like, what enemies appear there, and where the gem will be. This will always be the same in linear mode, allowing players to learn the stage and layout. However, in randomized mode, you can get these chunks in any order. Therefore, you'll have to learn each chunk's layout and plan accordingly based on which chunk is about to appear. This allows for both an element of familiarity, as well as an element of surprise.

In addition, I have two parameters for what waves of enemies can appear. In linear mode, each chunk has a formation key on it, so the specified set of enemies will always appear on that chunk. In randomized mode, there's a pool of formations, and the game will pick some accordingly.

Putting It All Together

So, what does this all mean? It means that I can have a story mode, as well as an endless mode, while not having to do a lot of extra work. There will be two different ways to go through a stage:

  • Linear Mode - The same chunks are presented in the same order any time. Progression is more or less like a traditional shmup. Enemy formations also appear in the same order every time, but may behave differently - so, you can learn the general gist of how the stage goes, but there will always be a little variance.
  • Randomized Mode - The stage is generated when you enter, selecting from a pool of pre-made stage chunks. This means that you get the hand-crafted challenge of the different chunks and their enemy layouts, but in a random order. You'll also get the set of enemy waves specific to that stage, but in any order. This allows for a fresh experience every time that feels hand crafted and fair.

This middle ground, I feel, allows me to create the best of both worlds, and should satisfy people who want a familiar experience while not driving away players who were drawn by the randomized presentation of the original version.

I've also adjusted how formations are presented. Before, waves of enemies would come at you, and wait for either you to defeat them, or for them to get bored and leave. Then, as soon as the enemies were defeated (or left the screen,) new enemies would come in. The progression now is that waves of enemies appear at fixed intervals. If you don't defeat the enemies, they'll leave the screen as new ones are coming in. If you do defeat the enemies, and you do it fast enough, you'll get a little bit of a break between waves as your reward. Overall, the progression feels much more natural, and there's a natural back-and-forth between enemy waves and ground units.

Here is a video which demonstrates the new progression:

(I've also added other new things like enemies reacting to being hit. I've also got a debug function enabled that makes a boss appear at the end of every stage, just to demonstrate how it all works.)

Here, you can see everything I've talked about above in action. If you compare this to  how it worked before, I think you'll find this one much more natural. It feels great to play, and addresses the last of the weird gameplay feelings I had about the game. I'm quite proud of and confident in this new stage progression, and I feel like everyone's gonna enjoy it.

Unfortunately, rewriting how stage progression works is no easy task. For this reason, it's gonna be a while still before I make a new build, as there's many things I still have to address. I think it'll be well worth the wait, though.

You may also notice the "Next Stage" screen. I plan on having a stage select screen (for linear mode) and a stage preview screen (for endless mode) that'll allow you to see and pick what's coming up next. I've wanted to do something like this for a while, and it looks like I'm gonna be able to. I also may be able to implement that  Story Mode I was discussing before, which I had to scrap (due to its original iteration meaning I would essentially be making two games. Now it's the same game, just presented in a different way, which means all the core aspects will be there regardless.)

Another thing I'm hoping for is that, between stages, you'll be able to change player assignment. I'm hoping to no longer have 1 player and 2 player modes as a separate thing, instead allowing a second player to join or leave at any time. I've got a lot of work to do to make that work, but it's definitely possible for me to do it now.

(a small side note: I actually at first considered making linear stages (similar to how traditional shmups are) with a little in-between stage where you'd fight waves of enemies similar to how it used to be, but this just didn't feel like the right balance. I actually set up my editor to support a "mega chunk" for such a stage, which is a functionality I ended up not using thanks to this new structure.)

New Victory Screen

In the video above, you can also get a glimpse of the new victory screen. Here it is by itself, as well as a 2 player variant. This new screen summarizes how the stage went, and I'm quite proud of it. The new UI look I have going on here will be brought over to the other parts of the game eventually.


I don't know who left the response where they said it wasn't very helpful, but your response (as well as everyone else) shaped how the project is going now. So, whenever you have something to say, I think you should say it! I also want to thank everyone who responded to the poll and/or reached out to me directly about it, you guys have been very helpful.

I'm quite happy with the direction this is going, and look forward to bringing you more updates in the future.  Thank you for reading!

The Nerd Section

I wanted to touch on some technical stuff I had to address in order to make all this work. If you're not interested in that, you can stop reading here.

The original version of Cosmogelica was written to run in a very specific way. Basically, you'd go to "room_gameplay" and you'd stay there until the game was done. The Phase Manager object, which is responsible for figuring out what enemies you'll fight, did a good job here. However, as time went on, that object got roped into doing more and more things like managing transitions between stages, stage loading, dialogue sequences, and more (for a bit it was even stopping the game for the results screen, though all it showed was the time.) I'm hoping to be able to take tasks away from it and let it do what it was originally designed for.

Also, since you were only supposed to go to one room and do everything there, going to another room was unthinkable. The victory and stage selection screens I presented above are in their own rooms with their own objects. I had to rewrite a fair bit of code to make this work, since you were only ever supposed to be in one room (the game would reset all your stats as soon as you left.) This new arrangement will honestly be a lot easier to code and maintain, since everything is now separate and just passes the data necessary along.

The above victory screen replaces the existing screen for the end of a run, and is the beginning of me replacing screens that just use the generic menu handler with screens custom built for a specific purpose. This gives the game a lot more polish, but I didn't want to do it until I had all the mechanics nailed down.

There was a funny quirk where, since the game assumed anything destroying the player object counted as a death, this would also include ending the stage, going to the victory screen, and then coming back. So, you'd come back with one less life and with your powerups and missiles reset, so that was a whole thing.

I mentioned above about being able to add or remove a second player at any time. I've got a lot of stuff to rewrite to make that work, since under the original design, it just starts you with however many players are specified and keeps that until the end of the game. If you ever played 2 Player, and then removed the second player's gamepad, you'll have noticed you can't even continue the game without the second player. That's something I'll need to address too, but I'm not sure how yet.

Behind the scenes, the game gives me a ton of debug error messages when loading stages. This is because the level loader for the game is *mostly* compatible with the new chunk layout and information I mentioned above, but not entirely. I'm gonna have to fix that too. It also doesn't count any of the gems you pick up, which is why in the results screen for the full stage, they didn't show up (they showed up in the video about the end screen itself as I just put some fake values in to make that work.)

There was also an issue with the old progression where loading the second stage would cause it to load partially over itself, as well as throw off all the timings (making enemies and bosses appear much too early.) This was incidentally fixed by just going to a different room for the results screen, and then coming back. This new progression will also allow me to re-write how levels are loaded to be more optimized, since I don't have to try to do it in real time (if you ever wondered why the stage went white between areas, it was to hide the sudden transition between different stages and gel types.)

Get Cosmogelica

Buy Now$4.99 USD or more

Leave a comment

Log in with itch.io to leave a comment.