Gems of the Deep Post-Mortem

I already wrote a “the day after” kind of post regarding Gems of the Deep, but I noticed that people were writing proper post-mortems about their games, and I thought that sounded like a good idea to address specific things.   So let’s sum it up!

What Went Right

  • Dynamic cave generation.  This was the very first thing I started doing after the initial rendering of a tile grid worked.   I didn’t want to be designing levels, and it seemed like a waste to not use some of this procedural terrain experience I’ve gotten recently (even if that was for 3D).  The tile grid wasn’t even initially as big, but it had to grow to accommodate the cave generation until I was satisfied with how easily it might be traversed by the player.
  • The jetpack.  This came along pretty early in the game, even before jumping.  Tuning the gravity and thrust was one of the priorities, which I eventually thought felt pretty smooth.  But I still felt like it was kind of unnecessary to constantly be flying, especially since it meant constantly hearing thrust.  Jumping was added on Sunday, immediately after which I moved the jetpack onto the W key.  I didn’t like it; I felt like I was fumbling the controls a lot.  So while out for a break I thought of just implementing a double-jump technique to activate the jetpack instead, and that ended up working out great.
  • Parallax scrolling.  It was never planned, it was just an idea to fill the empty void of the background.  I liked the look, so I kept it, tweaking it along the way.  Initially it was using the exact same render as the main map, so when you destroyed terrain in the foreground it was affecting the background too and looking a bit odd.  So I ended up doing a separate pre-render of the world, then using that one for rendering the parallax layers.   Probably would be even better if I flipped it, since at the starting area you can really tell that it’s the same cave.  But it’s fine once you start moving deeper.  It was apparently a hit with people reviewing the game!
  • The artwork/graphics.  And I’m not an artist!  Sometimes I luck out though by pushing pixels around, which happened with things like the main character and the bat.  Other stuff though, like the background tiles, went through several iterations (some still in the texture atlas) before lucking out on something which wasn’t bland, and which I could use as a base to easily tile random tile types together with.  Rounded corners had already been implemented before that, which made this all even more time-consuming because I had to keep remaking those, too, for each iteration of tiles.
  • Destructible environment.  This was another thing that wasn’t initially planned.  Shooting wasn’t even added until Sunday, and I added breaking blocks as a way to make the gun have a purpose in case I didn’t get enemies added in time.  A happy accident was when I realized that shooting gems made you collect them, because I had based the bullet on the main entity class.  The entity class itself had actually ended up primarily being the player class as time had gone by.  The player could of course collect gems by touching them, so bullets suddenly had the same behavior.   I left it, because I thought it was fun to collect them that way.
  • It’s fun.  Somehow I made something that I personally enjoy loading up and playing every so often, even after the contest.  I surprised even myself with that one.

 

What Went Not-So-Great 

  • Rounded edges.  Overall, this was a plus, avoiding sharp blocky corners and giving it a slightly more polished look.  But it had quirks due to the hacky way part of it was implemented, which while this saved a ton of time, it bugged me and made me worry that people would think it looked sloppy.  The combination of shortcuts manifested itself most noticeably when there was a narrow row of diagonal blocks.  I’ve fixed most of this in a post-LD version, though, using some multi-texturing techniques to apply the rounded edges instead.
  • There was no web app.  I mentioned this in the other post, but I kept getting Java security permission problems, and wasted a lot of time trying to sort this out.  I eventually decided that if my default Java permissions are going to give me this much trouble then I’m not going to bother aggravating other people with it too.  I cut my losses after wasting almost two hours signing and packing JARs.
  • There’s no music.  I wanted something to help set the mood, but at the same time I realized that if it had been bad or annoying/repetitive music (which could very likely have been the case, coming from me) then it might have actually worsened the overall experience.  I did try a few  music-related web things for a bit, but I never got anything I was happy with.  The other big part of it was that I honestly wasn’t even sure of the legality of using music from some of them.  Eventually I felt like I wasted enough time on it and went back to code.  Next time though I’ll be better prepared on that front; I’ll find a tool ahead of time.
  • There’s no proper crosshair.  There’s a flashlight beam, which I felt turned out really well (despite spending too much time on it), but that doesn’t really help you aim.  I also didn’t grab the mouse cursor due to the lack of any kind of crosshair/aimer system, which means it’s also possible to accidentally click outside the window, which is annoying.

 

What Went Wrong

  • There’s not enough gameplay.  Getting gems and shooting bats is fun, but it needed an end goal.  Even just a “you win” type of thing for getting all the gems (there’s exactly a hundred of them randomly placed) would have been better than nothing.  There just wasn’t time, unfortunately.
  • You can’t die.  I didn’t start working on bats until about an hour remaining, then health at the half-hour mark, which meant I not only had to make the code for it but also draw the heart (and I reiterate, I’m not an artist).  I wanted there to be some knockback from the bats, and some flicker during your moment of invincibility.  I wanted you to take damage if you hit your head too hard or fell too far.  I wanted to have earthquakes and have rocks fall.  Even something like stalactites/stalagmites would have made it a bit more hazardous.  Health didn’t seem incredibly important early on, but in the end it turned out to be one of the most important things which didn’t get finished, so practically anything that revolved around the concept didn’t either.
  • The wasted time.  Between all of the time spent sorting out the collision detection, dealing with the applet stuff,  redoing the map tile graphics several times, trying to come up with some music, etc, I could have probably accomplished many of the things the game needed.  I suppose most of that was just part of the development process, but the applet part at least could have been avoided if I’d worked it out before the contest.  But I didn’t even know I was going to enter until practically the same day, so there wasn’t much I could have done anyway, I suppose.

 

Overall it was an incredibly positive experience, one which I plan to participate in again.  Peoples’ reactions have been really enjoyable to read, and making something you’re proud of in such a short amount of time is pretty motivating.  And perhaps best of all, I learned a few things in the process!

To wrap this up, I thought I’d include one of the early screenshots:

ld29_1