After taking a break last week for the Defaction announcement, we're back with a regular devlog.
But before we get to the "dev" part, there are a few adjustments to our previously announced schedule that we'd like to talk about first.
As you might have noticed by some missed and late posts, June was a bit more turbulent for us than we anticipated and both PECTIN and I got held up by some work that we couldn't account for in our original plan. And as a result our whole schedule got pushed back by pretty much a whole month.
This means that the //TODO: today Special Edition Zine and the polishing update for the game will be released in August instead of July.
The next Brassica act will also be delayed to late September or some time in October. We'll let you know more about that when we're clearer on when exactly it'll be ready!
We hope you don't mind the delay, there unfortunately wasn't much we could do to prevent it.
But now on to the development part of today's post!
It's been a while since our last devlog that focused on music and a lot has happened since then so I figured it might be interesting to go a bit into detail on the music of //TODO: today's second half. In this post I'll mostly talk about the planning and implementation aspects but there will be another post with some more insights into the music itself in the coming weeks.
Since the last post about music, the list of tracks in the game grew from 11 to 16 (18 if you also count variations) but despite that number, more than half of those tracks are only played once or a handful of times in the game.
That's not exactly economical and certainly wasn't intentional but on the bright side, pretty much all important moments now have their own music!
Overall I'd still consider it a bit of a planning failure and in hindsight it makes sense why this happened. For one, this was the first longer game soundtrack I was planning, so misjudging some things was probably to be expected.
But the main reason is that the atmosphere in //TODO: today doesn't have drastic fluctuations. Aside from some special and/or emotional moments, the game follows Teal's day to day life which mainly takes place at their home and at the bookstore. Even while planning the initial 11 tracks that were mentioned in the last music devlog, I mainly thought about the different moods that would be in the game, not how often they'd be relevant.
That said, I'm not sure if I would do things drastically different if I were to re-plan the soundtrack from scratch. I don't think it's bad that special moments have their own tracks, but I would probably try to think of ways to split the default tracks at home and at the bookstore into different versions to avoid repetition.
If done right, this wouldn't add too much to the workload but it's also something that works best if planned from the beginning.
In fact, there already are two tracks that have variations depending on what happens in the game: "Memory Leak", the track that plays during the competition finale and the Bell Tech break-in, and "Connect", the track that you can hear in the prelude to Joyce or Phoenix's confessions towards the end of the game.
For "Connect" the variations are fairly subtle. Both versions follow the same structure and the only difference is that in one a melody is payed by a guitar and in the other by a chiptune-y synthesizer depending on if you're on Joyce's or Phoenix's route.
With "Memory Leak" the two versions are more distinct. They still follow the same structure so it's possible to dynamically blend from one to the other, but as their names in the game's music player already tell you, one is "basic" and the other is "tense".
The tense version has a lot more going on. There are not only more layers and melodies in the background but the sounds themselves are a lot more distorted and complex. Well and there's also more bass...
"Memory Leak" is also special in the sense that it's the only track in //TODO: today that features dynamic fading. This feature is quite prominent in the Defaction Prologue, and Brassica also has some of it in the first two Acts but when we started making //TODO: today, fading between track variations in the middle of a scene wasn't something I knew how to do.
In the end it's quite simple though!
First you need to define a music channel for every track variation you have. In the case of //TODO: today that's two.
init python: renpy.music.register_channel("sync1", mixer="music", loop=True, stop_on_mute=True, tight=True) renpy.music.register_channel("sync2", mixer="music", loop=True, stop_on_mute=True, tight=True)
The parameters might be different depending on what exactly you need but it's important that all channels that you plan to use at the same time have the same parameters.
In the game's script you then simply set the volume for the channels (in most cases you want one of them at 1.0 and the other at 0.0) and start the music on both of them simultaneously.
python: renpy.music.set_volume(1.0, delay=0, channel="sync1")
renpy.music.set_volume(0.0, delay=0, channel="sync2") play sync1 "music/memory leak_basic.ogg" noloop
queue sync1 "music/memory leak_basic loop.ogg"
play sync2 "music/memory leak_tense.ogg" noloop
queue sync2 "music/memory leak_tense loop.ogg"
Even if one of the channels is practically muted you still want the music to play on it so the variations are in sync when you switch between them.
The final step then is to change the volume of the tracks at the appropriate moment in the script.
python: renpy.music.set_volume(0.0, delay=3.0, channel="sync1") renpy.music.set_volume(1.0, delay=3.0, channel="sync2")
In this case it's a three second cross-fade from "sync1" to "sync2". Depending on how your audio files are set up you could also add elements to a basic track and basically mix the final music in-game, but for simplicity's sake and to make sure that the audio levels don't get out of control I decided to just switch between tracks.
Well, and that's it for this week! I hope there was something of interest for you in this devlog and next week PECTIN will be back with another one about art!
Writer/Programmer/UI guy at Boys Laugh +