Hot Diggity: Dev Log & Postmortem

So Hot Diggity was my first attempt at Ludum Dare.  Been meaning to actually enter this for years but always forget when it’s on.

For anyone interested, here’s a brief overview of the development process of Hot Diggity, followed by a little postmortem, some fun bugs I encountered while making it, and a few hints ‘n tips I’ve learned doin’ various 48hr jams!

Wanna see what this looked like 2 hours in? Read on!

So without further ado, here’s how it was made!

Day 1:

First batch of sprites and already you might notice stuff that didn't make it in

First batch of sprites and already you might notice stuff that didn’t make it in

When the last themes were selected for the final round I had a quick run-through to try figure out what kind of thing I would make for each one.  “Beneath the Surface” came immediately: There’s been so many mining/digging games of late (Terraria, Miner Dig Deep, Steamworld Dig and of course the big MC to name but a tiny selection) that I thought of trying to mix up the genre a bit.  Namely, instead of a careful, gradual and careful expansion, you instead piloting some crazy drilling machine, tearing through the earth and furiously devouring ore at a highly unstable pace.  The idea of expanding the craft was vague at this point, but I was keen on some kind of upgrade system.

With this in mind, I fired up Unity, added some basic controls, some tiles, added all the elements of Unity’s 2D physics engine (Itself based on the popular Box2D Framework) and here’s where we begin:

 

Fun fact. The drill's actually completely stuck here and can't move.

Fun fact. The drill’s actually completely stuck here and can’t move.

For most of the development time, the drill component of the driller was actually solid, meaning you sort’ve “poked” blocks awkwardly to damage them.  It made the entire driller impossible to keep straight because it was effectively triangular.  Removing this so the drills have no ‘solid’ collision was one of two things that eventually made this game bearable to play.  The other was giving the driller a fixed turn speed – Previously it applied torque which made it even worse to steer!

So just digging down was fairly dull.  We need something else.  And when you’re out of ideas and want to add something to a game to make it cool, there’s only one place to go!

No, not zombies.

LASERS!

LASERS!

The laser logic was fairly simple: The turret turns towards the mouse cursor, and firing shoots a little ray out that sees what it hits, then stretches the laser graphic and positions it to represent the ray itself.  Then whatever your ray intersects with (And Unity of course has all this built in) you see if it’s a tile, and if it is? Damage the tile! Huzzah! Instead tile-destroying laser!

You’l notice the terrain also is a bit more varied at this point.  I plugged in Unity’s Perlin Noise class into a basic terrain generation system.  The game generates 16 x 16 tile “cells” which get created as you move around and hidden when they’re off screen.  The perlin noise helps create a basic, psuedo-cave system that’s good enough for a basic underground game.

Fun fact: Unity’s Perlin Noise isn’t seeded, and I couldn’t get random offset working properly, so EVERY game of Hot Diggity has exactly the same physical layout (It’s why you always begin in a large crater).  The only things that’re randomized is ore layout, exploding block positions and some cells have a chance to be one of 3 biomes (“Normal”, “Ice” and “Temple” – More on these later!).

Honestly at this stage I still had no idea what the game would be.  You had a laser, you could shoot things but there wasn’t much point.  THEN I plugged a few of the lasers together and…

I think I'm on to something now...

I think I’m on to something now…

More engines = more thrust, more drills = more digging, more lazers = more lazers… Suddenly the idea that you could gradually add stuff to the Driller made sense and the main game feedback loop was born: Get ore, level up, add a bit, repeat!  You’ll notice in the picture above some things didn’t make it: For one the above ship’s impossible because later on heat generation became a mechanic, and also I didn’t get time to have Drills that go in multiple directions (The idea of building a big box covered in drills did appear though…)

So! Quick change to the Terrain Generation to add little ore prefabs! And so introduce one of the sneakiest techniques to making a 2D game look awesome:

Give me sparkly!

Give me sparkly!

Additive blending! You can never have enough glowing stuff!

So – Destroy the ore blocks, drop some little ore pickups that are pulled towards your Driller and add to your Ore Count when they hit.  Now we just need the level up screen!

Camera was considerably more zoomed in initially, which made it impossible to upgrade past a certain point

Camera was considerably more zoomed in initially, which made it impossible to upgrade past a certain point

Also, I hate doing UI.  Hence why everything is big yellow boxes.

The Level Up screen and handling the state between pausing the game -> Selecting a slot -> selecting a component -> Unpausing and continuing was the biggest faff in the game, namely because when you’ve only got 48 hours, writing a proper game-state system isn’t a high priority, so there’s a lot of dodgy flags here and there and things with references to stuff they shouldn’t just to make sure everything’s fair.  It also had a tonne of bugs -> Laser getting stuck on and causing you to overheat while you level up, money still being collected which would make you level up while levelling up and break everything, etc.

Still, with this one, the basics of the game were more or less in.  Though you still couldn’t actually lose. And there wasn’t any reason not to just stay near the top of the world and dig EVERYTHING up.  I needed some incentive to get the player actually digging down.

Now logically you’d maybe have things like an oxygen meter and maybe tanks you had to reach further down each time, but no. I went with…

Who's that crazy kook destroying the world?

Who’s that crazy kook destroying the world?

Of course! A giant, planet-devouring Lovecraftian horror! That’ll do!  Also I must’ve misspelled the word “Devourer” about 50 times (“Devourerer” was a common one).  He’s basically two big sprites animated in a looping, munching motion.  Before he was done I upgraded his eyes so they actually follow your ship.

Now this chap served two purposes: One is to force the player to keep digging, the other is a more technical reason.  See, the deeper you go, the more terrain cells get generated, and these eventually start grinding Unity to a halt because they don’t get cleared up.  Enter the Devourer: Any cells above him are destroyed and removed from play, keeping the amount of stuff needed to process in game relatively low.  It’s a bit of a hacky fix, but hey! 48 hours isn’t enough time to be tidy!

As this more or less marked the end of day one, I needed a backlog of stuff to get this game fully done, along with any polish I’d like to do.  My backlog consisted entirely of a hastily scribbled notes on an envelope:

Alas, additional components and upgrades to existing ones didn't make it...

Alas, additional components and upgrades to existing ones didn’t make it…

The game still looked kinda naff too.  Then I realized what was needed:

Tile variation. Even a really basic bit of variation can make tile based games just look so much better

Tile variation. Even a really basic bit of variation can make tile based games just look so much better

Plugged in a simple system to select from a random set of sprites for each tile prefab, and suddenly the game looked so much more varied and interesting.  This gave me a bit of a morale boost to actually see this thing through!

 

Day 2

Starting to look like a game.  Heat systems in, added a few more additive glows to the lasers, and the Chase Meter on the left

Starting to look like a game. Heat systems in, added a few more additive glows to the lasers, and the Chase Meter on the left

Chase meter, heat systems, exploding and losing.  Polishing as I go.  Tweaking controls, laser power, laser heat amount, coolant heat amount, various bugs. Adding a basic (And I mean, some text and press a button to start basic) title screen and game over scene.  Before long the main game mechanics were all in place: Now I needed some music and sound.

FLStudio! And a lot of hastily assembled loops

FLStudio! And a lot of hastily assembled loops

I’ve been making music long enough now to be able to very quickly fire something quick and dirty out.  The music for Hot Diggity was entirely made up on the spot – I think looking back I’d’ve made the bassline less annoying, but it’s annoying in a fairly catchy way.  Other FLSTudio users will note I haven’t named or organised anything, no proper automation or anything :p No time!

Also through together a few sounds, although sound design isn’t my strongest suit so most’ve ’em are various instrument libraries I have wrangled into various explosions, dings, rumbles and clunks.

Approaching the final set of things I wanted done, I figured I needed a new obstacle, so an exploding magma-rock of some sort that’d increase in frequency the deeper you got.  Everyone loves explosions, so it didn’t take much to add some in:

The ability to push back the Devourer with lasers also made them more strategically viable

The ability to push back the Devourer with lasers also made them more strategically viable

The exploding rocks had more than a few fun bugs though: They initially could chain react and detonate each other, which later on wipes out pretty much all the level, constantly.  I removed that and also made them destroy any floating ore around because it could trigger the explosions too.

Actually ore has one of the funniest bugs in the game – While it’s being pulled towards the digger, it can actually Dig through the terrain to get to you, which in turn could trigger explosions.  This can cause massive reactions below you as ore falls down, blows stuff up, spawning more ore that falls down and so on and so forth.  Untiy crashed several times trying to wrangle this whole system into something actually playable, but I still like the fact ore large clusters of ore tearing through the level to reach you.  The magnetic pull-ore-towards-me systems was also considered as an optional component.

Also at this point I stuck a big textured quad over everything to simulate lighting.  Clever use of layers mean you still see the glow of ore through it.

What a seamless transition into another environment that isn't.

What a seamless transition into another environment that isn’t.

The last thing to go in was the biomes.  Because everything in Hot Diggity has various prefabs to configure what it does, it was pretty easy to create some variations of the cell generation.  I had bigger plans for this, but in the end only managed to create an Ice Biome and a Temple Biome.  The Ice Biome is tougher than regular, and I originally planned that it would naturally cool you down while you were in it, but this didn’t make it in.  The Temple Biome is just a big empty box, and the walls are the toughest tile in the game.  Originally I’d hoped to include a massive cache of ore in here that was tough to get to, but again time restraints meant it’s basically just a big shortcut.

 

Post Mortem

Overall I’m quite proud of Hot Diggity and glad to see other people have enjoyed it! It’s funny to think how utterly directionless I was during most of day 1 and then have everything come together late Day 1/early Day 2.  It isn’t a particularly ground-breaking, innovative game, but it’s an interesting spin on a popular concept, and in the end, Game Design evolves at its best when it takes current gaming mechanics and mutates them slightly to see what works and what doesn’t.

Good:

  • Getting much more used to Unity’s 2D Framework, which is useful for my current main game project.
  • Not too difficult to understand despite quite a few mechanics in play.
  • Actually quite pleased with the visuals, namely because while I’m an vaguely decent pixel artist, I can’t draw people for the life of me!
  • Level-up instead of Shopping for upgrades mechanic worked better than expected
  • Lasers!

Bad

  • Gets kindof absurdly difficult because of the lava blocks.  Think I may have overdone them a bit.
  • Big monster chasing you seems like a bit of a cop-out. And also looks weird and out-of-place.
  • Quite a few bugs with the extension mechanic – Possible to screw yourself over quite easily and make something that just doesn’t work.
  • Wanted more of everything, but some more strategic  components would’ve been good, and some more varied obstacles/terrain.

 

Tips for Jamming

  • Make sure you’re confident in the tools your using.  I barely know anything about using Game Maker, but I’ve been using C# for years and used Unity many times before, so I know what it can do, and I know what *I* can do.  This helps mitigate risks so you can just concentrate on getting the game done.  It’s worth learning code and such outside of jams so when you enter one you don’t have a constant barrier to overcome.
  • Keep an idea, or an actual written version of a prioritized backlog.  Important things first, bonus cool things later.  Make sure you always have a target and a thing to be working on.  Often helps to have parallel ones so if you get stuck with A you can hop on to B for a while.
  • Get some sleep! The brain can’t think properly when it’s starved of food and sleep.  Things that seem impossible to figure out at 11:30PM on day 1 may be a cakewalk at 9:AM Day 2.
  • Polish as you go! Spending a few more minutes just tidying something up, adding some detail to visuals, nice flourish animations, some particle effects here and there all helps the thing look better, and when your game looks better you’re more inclined to keep working.
  • Above all, have fun! Enjoy the spirit of competition, don’t take it too hard if it doesn’t turn out like you wanted. Learn, and try again another day! Just, keep making games!

Right. I’m off to play som’ore games. See ya’ll! 😀

 

Comments

29. Apr 2014 · 22:24 UTC
Damn, the best game I saw among the entries so far!
30. Apr 2014 · 00:51 UTC
“som’ore games”

Ba-dum-tish
06. May 2014 · 00:00 UTC
This is one of the best web games I’ve played let alone a LD game!
Ditto
06. May 2014 · 06:24 UTC
Awesome postmortem! Almost as entertaining as the game itself! I think I’ll try to get into Unity ’til the next LD!
06. May 2014 · 16:43 UTC
And then compile to iOS! This game would be fantastic on mobile. (I love upgrading stuff)
Merlinou
15. May 2015 · 20:00 UTC
Hello!

I played your game!

I pushed it as far as I could and I was wondering if you were planning to polish it or complete it at all.
Merlinou
17. May 2015 · 23:07 UTC
EDIT 1st Link not working for some reason