maelstrom.exe

July 24, 2020

Introduction


Maelstrom.exe is a farming simulator controlled by console commands. You plant, grow and harvest crops to sacrifice to the Rain Sprites, who slowly bring a flood to end the age of Man. It is my submission to the GMTK 2020 Game Jam. The theme was Out of Control.

Video


There's a video here about the design process of making maelstrom.exe, and it goes into a lot of the technical aspects of the game, covering the creation of the art, music and code pretty thoroughly. The following thoughts however, are more of a holistic reflection on how I ended up making maelstrom.exe and some things I've learned about game development.

A Postmortem


The Kinds of Games I Like Making


I'm discovering that I really like making games that are atmospheric and immersive, rather than "fun", and I suppose that shows in my rankings. Honestly, I'm rather surprised that my game was so well received, as I placed 59th out of more than 5000 entries in the "Presentation" category. On the other hand, I placed something like 1600th in the "Fun" category, but overall it wasn't bad, around 250th place. I got a surprising amount of ratings too, and many nice comments from folks who seemed to enjoy my game.

Perhaps this should have been obvious from the outset, as I found myself spending the majority of time on the visual polish and UX design, and putting compelling gameplay on the backburner. That wasn't a good strategy for winning a game jam, I suppose, but I was banking on the merit of the experience I put together, hoping it would be compelling and atmospheric enough to suck someone in for a few minutes, and take them out of their day to sink into the stereophonic downpours of maelstrom.exe.

Also, I found writing the story to be surprisingly enjoyable, so I'll leave the 20 lines of its entirety here.

The Story of maelstrom.exe (Spoilers!)


  1. A light drizzle paints the ground.
  2. There's no sign of the rain letting up.
  3. The skies darken.
  4. The wind quickens, piercing the air with shrill grasswhistles.
  5. Flash flooding has been reported in some areas.
  6. People begin to question this downpour.
  7. Dams begin to reach capacity, and quiet rivers swell.
  8. A small town is submerged by a rogue stream.
  9. Those who see begin constructing arks, their work illuminated by wild lightning.
  10. The black sky gives no quarter. Thunder splits the sky often.
  11. The maelstrom gains strength as it batters the cities of men.
  12. A great coastal metropolis sinks beneath the tide. The world begins to worry.
  13. Jets of blue lightning sear the ground. Their electric cores are blinding.
  14. Day and night succumb, and all is dark but for the odd thunderbolt.
  15. Some begin to set out on boats. All who do not work frenziedly to build one.
  16. World leaders set out in nuclear submarines for drier straits.
  17. Investment in hyperbaric welding increases tenfold.
  18. A few move into small settlements under the water, built of hardened glass and titanium.
  19. All but the highest skyscrapers are submerged now.
  20. The lights come on in the first underwater megacity.
  21. The rain continues. The world builds on beneath the lashing waves.

You have completed the game.

Technical Lessons


  1. The isometric perspective I picked required pixel art built to the exact dimensions of a regular hexagon. Adjacent edges must meet at exactly 60 degrees.
  2. You can fall through switch statements to allow multiple valid inputs, like so (I really should have known this):

    case "collect":
    case "harvest":
     string[] harvestTiles = tokens.GetRange(1, tokens.Count - 1)...
     foreach (string tileidx in harvestTiles)
     {
         GetComponent<BoardManager>().HarvestTile(tileidx);
     }
     break;
    
  3. Exporting to HTML5 with IL2CPP (An intermediary Language to C++ that compiled my spaghetti code into actual binaries) takes a really, really long time, and is prone to random failure. Leave plenty of time before the end of a jam to build to HTML5 and hard restarts may be necessary.
  4. Unity physics can be overcomplicated, so it's not hard to write your own functions that handle constant displacement, like for the rain effect.
  5. Audacity sucks as a DAW for me, though overall it's quite a useful and powerful software. I just don't know how to use it.

Takeaways


I've been spending a lot of time converting my other, yet-unnamed project, over to an isometric system and boy did I introduce a lot of bugs. But it looks much nicer now (though the colours need some work)!

Before (nice and squarish)

After (less cute but more pro-looking)


After I'm done with this project though, I think I'll be trying to make more atmospheric games, and maybe release a larger version of maelstrom.exe. Right now, I'm thinking it would make a cool habit tracking app, similar to Forest, but that's a problem for later.

Anyways, thanks for reading my post, and I appreciate everyone who's been here and played my game. Thanks for making it worth the effort!