#Paradise Marsh#code#postmortem#music video#Music Morsels#rhythm#production#talk#sound design#implementation#procgen#Hyper Light Drifter#career#harmony#education#FAQ#interview#chipmusic#pulse masking#metric modulation#MIT Gamelab#In Depth#business#January#polymeter#lifestyle#youth#philosophy#dlab#tools#sheet music#Backtrack#MIDI#technique#influences#Atebite and the Warring Nations#Rise of the Obsidian Interstellar#feature#FEZ#album#collaboration#trailer#Midnight Orphans#music theory#college#Limeade Grin#It Follows#Monsters Ate My Birthday Cake#Level#FAMAZE#Somewhere#Mini Metro#minimalism#film#Under the Silver Lake#workshop#Massive#synthesis#Shoot Many Robots#guitar#The Floor is Jelly#demonstration#Logic Pro#Adventure Time#podcast#Gunhouse#Beasts of Balance#ergonomics#playlist#opportunity#mix#failure#analysis#Noon Kids#performance

Mini Metro: Building Your Own City Soundscape

Dino Polo Club recently released the Workshop update for Mini Metro, which allows users to create their own maps for the game. To further help with this I've created a tutorial video and a toolkit. The toolkit contains a written guide, as well as a JSON schema set up for Visual Studio Code by default. By using this schema in tandem with Visual Studio Code, you have access to error linting, autocomplete, and property descriptions.

Link: Mini Metro Audio Toolkit (Github)

Postmortem: Mini Metro

this is a working draft.

Keep the city moving.

While Peter and I both did quite a bit of coding on Mini Metro, we have very different ways of thinking and communicating. We had to overcome cross-disciplinary differences as well as the nuances of being from different English-speaking countries. We both learned quite a lot about the other person’s specialty (Peter about audio, and me about code).

We faced unique challenges in creating a 100% tempo based music system alongside a pre-existing game engine - we had to mold each system to the other, and even as a late add, the audio ended up informing the game design. We needed to make timing adjustments to some of the most basic game behaviors, such as how the passengers move about the subway.

Similarly, changing the audio parameters for a level actually changes the way the subway simulation runs. For example: the audio system controls the speed at which passengers embark/disembark from trains.

The takeaway here is that some gameplay design choices were able to be conceptualized with audio first, and then were later adopted by the rest of the game.

"Inner Complexity, Outer Simplicity."

There is very little distinction between sound design and music in Mini Metro, and the audio attempts to function on multiple layers. There are aspects that communicate information about the subway system using direct and consistent analogies, and there are aspects that are more about creating an emotional atmosphere for the gameplay.

Peter and I gave a sweeping talk called A Musical Subway (System) that covers a lot of topics regarding the audio in the game.

Game Data as Serialism

The musical concept of total serialism (applying value sets to different axes of sound) is used heavily in Mini Metro. For instance, the sound of the lines in the game are determined by sequenced data such as the number of stations on the line (sequence length), their order (sequence order), their station types (timbres), their occupancy rates (dynamics), their visual position on screen (panning), etc.

Historical Parallel - Pierre Boulez: Structures I (1952) For more information, check out the talk I did on Mini Metro's Serialism & Sonification.

Minimalism

I wanted the aesthetic to be as minimal as possible. Most sounds are subtle variations on the sine waveform. For example, the SFX & UI sounds are all controlled random variations on sine wave samples, using various signal chain effects.

If you consider each line as a performer playing a note in a given rhythm, each performer is slightly changing their performance over time, but slowly and systematically, based only on when (and how) the player updates that particular line in the subway system.

Historical parallel - Terry Riley: In C (1964)

Clock

The music had to be designed to work at 4 different speeds: Fast Forward, Pausing from Fast Forward, Normal, and Pausing from Normal. The different speeds generally have different attack times for the line pulses. The slower the clock, the longer the attack times tended to be by design. Faster speeds required tighter attacks to prevent muddiness.

Gameplay Elements

Lines

Each line is represented and formally differentiated by a sequence of pulses of the same pitch. The sequence is as long as the number of the stations on the line, with each station represented by a slightly different timbre corresponding to its shape. Each line can be semi-soloed when selected, and is casually differentiated by rhythm. This means that rhythm was not designed to be a mutually exclusive characteristic for the lines, while pitch was. In hindsight, it would have been interesting to push the sonification of data further, and try to figure out a good way to tie the rhythms of the lines to something meaningful to gameplay. Number of passengers on the line could be represented numerically, perhaps?

Trains

I filmed myself working on a train engine sound set. I describe my process as I go through it, and dive into some workflow stuff for doing batch processing of effects, file naming, and file looping.

Each train's engine has a rhythmic sound. This sound is tonal when the train is occupied by passengers, and just noise when the train is empty. The pitch of the engine matches the pitch of the line. There were opportunities to take this data sonification further, including a drum matrix that I built that would trigger patterns procedurally using the number of passengers and their seat positions as rhythm information. This proved to add what I would call 'outer complexity' to the sound of the game. That said, I think there was probably a hybrid solution using sonified data to create even more dynamically reacting trains.

Passengers

Passengers embark and disembark trains in a pre-determined rhythm. Passengers used to spawn in clumps, all at once. This was changed to allow the passengers designated to spawn together to instead appear in a pleasing cascade. The rhythmic interval of this cascade is designated by the audio system.

Stations

Each station on a line creates a pulse in that line's pitch. The shape of the station determines the timbre.

Shapes

Stations and passengers share shape types. Passengers and stations of the same type share a percussive signature which can be heard when passengers spawn and stations spawn or mutate.

Cities

  • pitch variation for passenger percussion/engine sounds
  • probability for transposing line pitches up or down by the octave, on the fly
  • optional accompaniment (ie. Kick Drum in Berlin)
  • available keys
  • audio mix (though this is changed very sparingly)
  • groove options (straight, swing, custom relationships)
  • harmonic progression of the line pitches
  • harmonic progression of accompanying bass notes for the spawning/mutation of new stations
  • harmony of chords/etc that fire on end of week / end of game screens
  • variations of legato / polyphonic performance style
  • attack and decay times for line pitches
  • engine types

Certain Cities (ie. Paris) have passenger cars that hold less, so the audio design had to be done carefully so as not to imbalance the gameplay.

Build the subway that moves the people throughout the city.

For more information on how audio is created in Mini Metro, and how to try it out yourself, check out the Building Your Own Soundscape workshop.