Migrate: Boisterous

The development blog

Development began after the post-mortem of Migrate: Fledgling Edition. (M:FE)
With the help of the gamemaker 2.3.1 update, more experience under my belt, and the use of open source tools, development is off to a much stronger start than before.
Check out a quick breakdown of why, and what I'm accomplishing with it.


Check out a preview of the game's OST here!

Boisterous's early development saw me fighting some of the limitations of vanilla Gamemaker. While Gamemaker has the capability for sufficient audio functionality, there is nothing linking together the aspects its low-level implementation.

Juju Adams solution, Vinyl, got me a lot closer to where I wanted to be. While Vinyl did a lot of things right, it still lacked some of the flexibility and ease of use I desired. Support for the library was dropped soon after our discussions, while Juju focused on his other (excellent) libaries, a lot of which I also use.

Closely following the design aspects I appreciated about the library, I rebuilt my own version of Vinyl from scratch. This also allowed me to trim off some of the more esoteric features; Juju had intended Vinyl to work as a full virtual mix console with the requirement of defining and using Busses.

The core idea that stuck was the Patterns and how they worked. The Patterns I set up immediately were Group, Sequence, Random, Loop, Layered, Song, and Song Layered. Nesting patterns allowed for robust definitions and reusability. Each Pattern could contain an arbitrary number of either sound assets (which get built into base Patterns), or other pre-defined Patterns. A global-scope script contains these definitions, and the result is that they are easy to read, flexible to write, and almost make up for Gamemaker's complete lack of an asset pipleine. :)

One thing I have always wanted to mess with is reactional music. By mindfully splitting the music into seperate tracks by intensity, I can use simple listener events to change the intensity of the music. As the health of either team drops or reaches critical levels, new layers of the music will fade in, signifying the stakes increasing. When starting a battle at critical health, the music fading in will start at its highest, foreboding intensity. Here are the three layers to the track Miscommunication.

Sound events also get a kick out of the complex Patterns. While vanilla gamemaker calls easily vary the pitch of a sample, I still prefer each sound to have 2-4 sample variants. The RAND Pattern takes an array of these references, and enhances the sound by doing some small things under the hood. For instance, trying not to play the same two samples back-to-back - this goes miles in helping to eliminate that "gamemaker stank" of repetitive footsteps, wooshing sounds, etc.

While Jukebox has served me well, if I had to move forward from here I would likely use Bard Audio. Regardless, the engine functionality I write myself is very modular, and I love to share. In the future I plan to distribute it, even if it ends up being retired from the game's current stack.

Legacy audio

While M:FE didn't have much going for it, it still contained one of the biggest features I designed on my own. The Duet wheel was a functional musical scale wheel that could be played by swinging the mouse (or gamepad stick).

This had myriad gameplay uses. The environment contains many different prompts to use this optional skill, encouraging the player to stay aware. Music puzzles could give you an explicit melody, color hints, or expect you to use your ears alone. These puzzles awarded any number of valuable things, from making friends or awarding experience, to reshaping the environment in advantageous ways.

In later versions, it also became an implement for casting complex spells, through the Conductor addon. Spells had unique rules for interacting with the wheel as it was played, making visual "Sigils". Intervals are important as well, boosting the effect of spells or providing extra buffs based on certain chords. In the carousel below, you can see an example of the Duet wheel directionally casting the fireball and needle spells.

This was all done before I was ever aware of the excellent Wandersong game. Another game that had done it to great effect in the past was Aquaria. User experience for this sort of feature is very delicate, and so unfortunately it is out of scope for the current Boisterous roadmap. However, the bulk of the implementation work is technically done, and it is a feature I love working with.


Two libraries I'm extremely excited to have in my toolbox this time around are Scribble and Smol PP (yes, really). Combined these tools allow me to make a dynamic, robust dialogue tree system that is localization ready. Managing all the language from the game in one spreadsheet is a huge development relief from my inexperienced days - whereas in M:FE I was hard-coding the dialogue lines for each character within its own object.

Scribble does some incredible things out of the box - the [inline tags] are used to display sprites, change text display, and even fire user-defined events. For instance, I use my custom [speaker,arg,arg] tag to define who is speaking each line, and the [give,arg] tag to award the player items once they reach certain dialogue lines.

Branching dialogue is defined with the [rsp,arg,[options...]] tag I implemented myself. This one tag defines a response method (yes/no, typed, wheel), the displayed prompts, and defines how to look for the lines corresponding to that branch.

The Console

One tool I cannot stop gushing about to my other dev friends is the in-game shell console.
By comparison, for M:FE, I was manually creating testing rooms for any specific scenario I wanted to test. This tool allows me to arbitrarily define any (fully-featured) command I want, from spawning items to warping to rooms, to summoning enemies or manually triggering events.

This is also an appreciated feature for a more curious subset of people who play games. Modders, dataminers, secret hunters, and anyone else who might want a peak behind the scenes will find hours of fun just abusing this tool. Otherwise they'd be stuck just using Cheat Engine and UndertaleModTool.



...more short blogs to come!