Meager Genesis postmortem

Development recape of a A Ludum Dare 45 game

Meager Genesis is a game created over 48 hours for Ludum Dare 45. I view it as more of an audio-visual experience than a legit game

Programming is a skill that eluded me until a little under two years ago. Since then I have been learning mostly by working on a few games, one of which is nearing the end of its development.

Ludum Dare seemed like an ideal way to shake things up a little. To test new-found abilities and actually finish a game (quickly). Without endlessly reiterating and letting scope and idea creep set in. My biggest motivator though - if completed, I would have something visible in the portfolio while larger releases are being developed.

I participated in a few Ludum Dare events in the past. As a part of a team of two, always doing design/art/sound/writing, so some very crunchy days ahead were expected.

Prep for the jam

Two days before the jam I prepared my tools, meaning mostly - I created a fresh Unity project with a handful of plugins I was likely to utilize (all of which are either free or open-source):

  • Sprites and Bones
    Used for mesh deformation and already knew how to work with it.
  • DOTween
    A nifty, free tweening plugin for easy lerping and to reduce unnecessary use of animator components.
  • Legacy bloom
    Still easier to use than the full Post Processing Stack.
  • NextGenSprite
    This was my first time using NextGenSprite, and I didn't end up utilizing it very well as I ran out of time. But it seems very promising for adding some nifty effects to sprites.

Other tools used: Photoshop and Illustrator for graphics, FL studio and Audacity for music and sound; also copious amounts of coffee and The Cure's Disintegration album on repeat.

A day before the jam I went over all 15 themes trying to come up with a rough game idea for each. I didn't want to waste jam time on coming up with a concept. Brainstorming is fun and this felt like a good exercise. Of all the ideas that emerged, those for Start with nothing (exploring nothingness which fills up with watercolor visuals) and Take one leave the rest (play as a grim reaper having to figure out your target out of a group of people) ended up being my favorites.

And finally, meal prep!

May look like an unimportant detail, but again, the less time I had to waste on non-development tasks during the jam, the better. Being the sole cook in my household of two people and one dog, I spent a good part of Friday cooking pasta sauces and roasting veggies.

The jam and the game

I aimed for the compo right from the start, with the jam as a fallback. During the two days of the compo I slept for about 11 hours total, spent roughly 5 hours relaxing, feeding and socializing with my partner. Which left me with some 32 hours to work on the game (4 workdays effectively ).

For those of you not in the know: Ludum Dare is a game development online event coming in two flavors with different rules. One is the compo - strict rules regarding asset creation, lasting 48 hours of exclusively solo work. The other is the jam - lax rules, lasting 72 hours, in a team or solo.

To make matters a bit more confusing the entirety of Ludum Dare is usually colloquially referred to as a "game jam".


Player Character

First thing's first, player character and movement. This started as a (player) object moving towards the mouse position. However, that caused occasional jitteriness for some reason. Instead of bug hunting, I added an intermediary invisible target. Now the player moves an invisible target with input, which in turn has the player character lerp its position towards the target.

Player character movement in Unity

Scene vs in-game view.

Visually, the original idea was to have the player character with long flowing tails which wave as you move around. Have it a sort of outer-space whale-creature, which would grow significantly through the course of the game. Instead what started as a placeholder white circle remained that way. It just got placed on a plane for the ability to use mesh deformation (courtesy of sprites and bones plugin). Some buggy code turns the character towards the target. The character's body keeps rotating back to the original position when it stops moving. But since it's just a white blob it's not too glaring in the actual game.


Environment

The idea of watercolors filling in the screen was quickly replaced by nebulae and stars as these were easier to create with mostly basic Photoshop brushes.

Stars textures preview

Two of 4 stars fill textures. Black is transparency

Nebulae and Stars textures preview

Together with the star fill textures, these 4 textures comprise the whole backdrop

Desiring a level without borders and better (premature) optimization; I spent roughly two hours trying to come up with a system to pool and dynamically activate/deactivate stars and nebulae as the player moves across the scene. This proved time-consuming. The progress was slow and buggy, so I opted to just jumble everything together like dirty laundry and throw it around the scene.

Meager Genesis Unity Scene preview

That's the whole scene. Not much to look at like this.

To make the scene feel more alive and gaseous, and since everything in the universe spins, rotation was added to nebulae. To Stars too, but that was removed quickly as it felt too aggressive.

Animated gif of nebulae rotation

Laundry Nebulae spinning, sped up significantly

This rotation coupled with an additive shader worked well to cheaply create a feeling of gases or fog. For something similar and more insight take a look at this breakdown of how Super Mario Galaxy 2 handles scrolling textures for various effects.

Finally, with the addition of bloom, the scene can become quite magical. But it also tends to burn out too much when too many layers of nebulae overlap.

Meager Genesis gameplay, animated gif

Bloom

Mood Gameplay

Mood or atmosphere, alongside compelling stories, is very important to me in games. All the games I participated in creating for past Ludum Dares scored well in the mood category. So naturally, I focused on crafting the same this time as well. I don't believe this was the best approach. It kept me neatly within my comfort zone, instead of using the jam to try something different.

The game mostly does what it set out to do. In line with the theme - Start with Nothing - you start with an empty white screen with no sound. Quickly progress to a relatively empty universe scene with just some background white noise. Slowly as you play instruments come in, at first just a faint beat somewhere in the background; then richer, filling up with layers. Visuals follow the same sort of progression.

Meager Genesis scene progression

Scene progression

Still, as most of the two days were spent on crafting visuals and music, meaningful interaction suffered. Gameplay boils down to drifting around, collecting orbs, with the ability to dash (yet which serves no real purpose). The number of orbs you collect controls how rich the scene has become - fairly superficial interactivity. My hope was, as the game is really short and ends with a lot of sensory stimulation (compared to where it started) this would be enough for a jam game.

It works, to an extent.

Even without adding any extra mechanics, more exploratory elements would have been a welcome addition. Something more to give the player a sense of wonder and discovery. However, the compo was nearly over. I pondered continuing work for another day and complete the game as a jam entry. In retrospect, I regret not doing so, but at the time it was more important to stick to the tight deadline I decided on beforehand. My sleep-deprived, coffee over fueled, cortisol overloaded brain thanked me for that, at least.

The final thing that made its way into the game was a bubble. I drew it on the first day while checking out the NextGenSprite plugin for distortion and reflection effects and just kinda kept it around. For full two hours before the deadline, I wrestled with trying to animate a burst, throwing two very stiff iterations away completely. The resulting animation felt OK enough, if choppy. Visual issues aside, its main problem is it serves no purpose other than confusing players of its purpose. It can be burst by dashing, but that too was handled haphazardly and doesn't work if you do it from within the bubble.

Bubble burst

Murder of a glorious laundry detergent bubble

Sound and Music

Creating sounds was a lot of fun. All sound effects (sans one tone at the beginning of the game) were me just making sounds into the microphone, then distorted in Audacity. Usually by adding a lot of reverb and reducing pitch.

Music is split into 4 instrumental tracks and 1 noise drone. The drone is more mouth-made noises, distorted and paulstretched. Instrumental tracks are mostly just a simple looped (messy) chord progression, made with layered synths in FL studio. To create the ambient pad I loosely followed this awesome Lush Pad tutorial (FL studio) and played somewhat with effects and values.

For the evolving music, all 5 tracks run in Unity simultaneously but start muted. As needed, each gets a change in volume. Often 3-4 tracks can be heard at once. Now I'm really curious to play with single instrument tracks split to different layers and dive deeper into handling dynamic music, instead of going with "prebaked" tracks.

Meager Genesis - Drone Loop

Meager Genesis - Chords Loop 1

Meager Genesis - Chords Loop 2

Meager Genesis - Chords Loop 3

Meager Genesis - Chords Loop 4

In case the above mp3 embeds are not working, music tracks can be listened from Soundcloud

When creating loops I noticed Unity adds some heavy clicking sounds when using MP3 compression on exported tracks. This was greatly mitigated using the uncompressed WAV format. I did mess up the 4th (richest) loop with improper clipping in Audacity, so the looping isn't perfect.

Takeaway

Overall I enjoyed the Start with nothing theme. Despite a vague notion of "this fits every game ever" (as in most games you start with little then progress and amass more, one way or another) - themes like this beg to be considered outside of such confines; whether in a narrative or mechanical light (or both). Meager Genesis did end up being just one of many universe at the beginning of time (of sorts) themed games.

The bad

The game is bland, and by the time I was finished I was bored of playing it; except for near the ending when all the visuals and music are in full effect. I'm sure many of the players experienced this boredom as well, even if it's not as strongly felt on a first playthrough. The game needed more areas of interest and ways to attempt to inspire awe.

Code got real messy real fast. What started as relatively organized scripts with comments, soon turned to a jumbled mess, and I feel kind of sorry for anyone going throught the source project.

When bugs were encountered it was usually due to the Sprites and Bones plugin, and it was maddening. Animations would fall apart, and unless an object was selected in the hierarchy the deformation wouldn't play. I loved using it in the past, but it's showing its age and is no longer a good fit for projects.

The sounds are probably too bassy and need mastering.

The good

I'm more than happy with how the game looks, sounds and feels. I had fun working on most aspects, especially the intro and the sound stuff. DOTween helped a ton and was used everywhere to tween values with easing. Time was managed well, and I enjoyed the short term, deliberate crunch. Especially as the game got deliver in time.

The game controls well. Not many bugs were encountered and most of the playtesting went smoothly so I could focus on polish. I got to expand my knowledge of Unity's particle systems and got acquainted with NextGenSprite shaders which I'll be using more in the future.

I had fun creating something short and adding something to my portfolio of solo work. Now I'll gladly go back to crunching on Solomeow's Happy Magic Blast , day in and day out again.