Devlog 2 >> Polish and Improve


After the launch of the demo, a friend of mine mentioned that it's a bit hard to tell where the walls are, so I set out to overhaul the sprites. This took much longer than I ever could have expected.

What people don't mention about tilesets is that there are actual requirements for say, a cliff. Yes the above image is one tileset for one type of cliff. the total amount of 16x16 sprites there is almost comical. Of course, I persevered, and eventually made a nice-ish cliff tileset. After that, I messed with the colors for a little in gimp until it felt like it fit in the world.


The floor tileset was a little easier, since I really only needed some static tiles. Now I no longer see a grid when I look at the floor, which is nice. I also completely removed the light gray tiles, and instead added some purple crystal-like tiles. The result of all these definitely inspired me to update some of my lore. I didn't end up using the cracked variants of either the floor or crystal tiles. It may be something worth using, though.

Next, I began work on a bigger hurdle: a dynamic audio system. Let me explain the basics of this before I go more in depth:

In older games, There was usually only a single audio track per area/level. Whenever they wanted to switch music tracks, they would fade the music out, and then start the next track. This isn't bad, and certainly makes a game more retro, but ultimately it was boring to me, so I decided to make a much better solution. 

Dynamic audio tracks allow for more interactivity within games and levels. They can create moods depending on what you're doing, or where you are. They split up the song into many mini-loops, which are then played throughout the level.

A dynamic audio system would then play those loops. How is this achieved? Through code: basically, you want to play the next mini-loop right after the current mini-loop is finished. Of course, the mini-loop would normally just loop again, so a code must be written:

Here you can see the first step of this. I've gone into my music singleton here, which plays the music independently from the level. This code does 2 things (and also changes the scene in func Change_scene()). Here, in func play_music, when the function is called by another script to play music, the singleton checks if the music is the same track that's already playing. If it is, then it won't do anything. If the music track asking to be played is different to the music track that is playing, play_music prepares the song to be played the next opportunity it can.

In func _process, it is ready to play the music. The first step in this is to setup loops. In this, music won't be looped by export options, but rather looped through code, so that useful information can be gained from the audio track, which will be used for the other script. To set the loops up, it first checks for if the music is already playing it's queue. If the music has queue and isn't playing it, then it plays it after emitting the looped boolean. This essentially allows for a loop, with a signal right before the song loops. This signal allows me to setup the second part of the dynamic audio system.

I'm using collision areas in order to progress my music, but this could be done with other events as well. Just replace _on_area2d_area_entered() with your own function. (I really need to get rid of func _ready when i'm not using it)

In this script, I start by giving the area2D(the collision area) an array to put mini-loops in. This allows me to transition my mini-loops with more mini loops (how fun).  After that, I declare the boolean isplaying(ignore justentered). This is going to be used to transition to the next queue at the end of the mini-loop.

You may notice some comments, such as cock and penis. These are printed at key moments, and are simple enough to notice at a glance. It helped me a lot when I was creating this script.

In on_Area2D_area_entered, which is called when something enters the collision area, I set up the queue system. After changing the volume, the first part checks for if the song queue is on, and if it isn't, queue it when the area is entered. This starts the song when the player first spawns in.

In func _process, it checks for a few things. First, it checks for if the song  is about to loop. If the song is about to loop, and the Songs queue isn't at it's last song, then it switches the song before the loop finishes. This means that the GameRoot singleton can then play the next song, instead of looping the current song.

If the song is about to loop, and the Songs queue is at it's last song, then it loops the last song, instead, and empties the queue, allowing for another different song to be played.

This seems to work pretty well, but I may change some things in these scripts. There could be bugs I have yet to see. This makes it incredibly easy to switch between mini-loops now.

In order to utilize this feature, I edited my ambience song so that the song can be almost seamlessly looped from any bar. Here's a bit of a teaser on that:

I did have to change some automation, and I had to make sure that the release wasn't cut off at the looping points. While the automation pictured here is the full song's automation, I had to edit the automation in some loops so that it was more constant. The transitions in this case are still pictured here, but the seamless loops aren't there.

Lastly, as I mentioned, I updated the lore a bit. I've added a statue that I am calling a Fate statue right now. I've also added a name for the unnamed magic, which I called Shade. The Sun Writer is now a scholar, with a team that got stuck in this village. These things can still change, so beware of that. Making characters and stories is very hard as it turns out.

Also, I added a neat new mechanic, where you can deflect at a very specific moment in your dash.

Other than that, that's all I've been up to. I'm anon216, a little exhausted honestly, and also signing off.

Get Eternal Collapse

Leave a comment

Log in with itch.io to leave a comment.