Ludum Dare 31

I just finished my 6th Ludum Dare! Crazy how time flies. This time last year, I had finished LD on Sunday night and rushed to propose my thesis the next morning. Seems like so long ago. Anyways…

I made a 2D platformer this time (surprise, surprise). The core mechanic involves shooting a cannon that can be used to push yourself in mid-jump. Mostly it involves platforming and shooting some bad guys. Pretty standard, but I had a lot of fun making it, and it still manages to feel relatively unique.

The theme was “Entire Game on One Screen”. I'll be the first to admit that my game's use of the theme is on the weak side. The game essentially takes place inside a theater. Each time you walk to the right or left of the stage, the curtains close and then are reopened. This reveals a “scene change”. When I started out, I wanted to be able to go above the stage, explore the catwalk and everything, even go behind the stage and whatnot. I ended up not really having time to do all of that, so a narrowing of scope had to occur.

Day 1

The competition started at 9:00pm Friday night.

I figured out within an hour what kind of game I was going to make. I knew I wanted to do this theater thing with a pirate setting, and that the curtain close transition was going to be really important. I decided to do a cloth sim in Maya. The sim worked pretty well. Unfortunately I didn't know that importing that mesh to Unity was going to prove next to impossible in the timeframe that I had. So about 2 hours into it, I had to make a pretty big compromise. Instead of curtains opening and closing as a mesh in Unity, I ended up rendering out a video of them moving instead, and put that video as a moving texture on a plane in front of the camera.

I made a quick camera transition script that paused time while the camera moves and the video plays, and then resumes the game when the video is over.

video autoplay loop

I also did some additional programming while the curtain video was being processed (it takes quite a while). Mostly, getting the movement on the character right. Also, I worked on the cannonball shooting with the mouse. By the time I had all of this figured out, it was 4am on Saturday. Time for bed.

Day 2

Woke up at about 11am on Saturday. This is the last time I'd sleep til the compo was over.

I was refreshed and ready, so the first thing I decided to do was get my character animations finished. I opted for a character design very similar to a previous game that I had made.

video autoplay loop

Ignoring arm/leg animation makes it way faster.

I wanted more than just running and jumping, so I decided to have ropes in the game. (At this point in time, I hadn't considered cannon-jumping would be in the game). Luckily the 2D controller that I use has rope functionality built in, so it was just some quick tweaks to make it work (controller made by jnamobile, it's the best 2D controller for Unity hands down).

video autoplay loop

I love the peg leg. The cannon kinda covers it up in game :(

I moved on to the final aspect of the character's movement – the cannonball shooting. I wanted to make the player REALLY feel the full force of the cannon shooting, so I decided to do 2 things:

A really cool side effect of the second point was that in midair, you could actually push yourself up for more jump height, or over for a further jump. I decided after playing around that it was really fun to do. Immediately that became something that I focused on implementing. It just feels so fun! It's the feature that I'm most happy with overall else for this game.

video autoplay loop

Ok. The character was more or less finished. Time to make the level assets. A flat floor isn't going to be any fun, so we need platforms. I decided on:

Here is the planning sheet that I made while deciding on all the level assets / enemies / bosses. Yeah, I know I can't draw.

And here is everything that made it into the game on one screen:

video autoplay loop

I'm glad I removed that awful water backdrop.

Getting the keys and doors to work took longer than I thought it might, because I had to program an inventory system. Anywhere from 1-9 keys is supported for the doors.

video autoplay loop

After the level stuff is done, I decided to finish the different cannonball types that the player will use. First up is the bomb.

video autoplay loop

Also made a particle sim for the crates exploding. Sometimes, it's the little details that makes a game stand out.

Lastly I made the grapeshot. It was going to fire several cannonballs in a spread, but the code I had in place only supported firing speed and knockback force as customizable settings, and I didn't know if I wanted to spend the time getting it to work right. So I opted for a more rapid-fire type of cannon.

video autoplay loop

Hovering is definitely the most fun part.

Pretty sure it's around midnight or so at this point. I've gotten all art assets done for the game except enemies. Time to do that I guess. If you look at my little sketch sheet above, you'll notice that there's a shark. I ended up cutting that for time's sake. Water was initially going to be lethal, and the shark would jump between platforms as you crossed the water. Still, having 2 ghost pirates and a parrot was variety enough for the game length I think.

The way I decided to work was to finish all the art for 1 enemy, and then do the programming for it. That way, even if I just finish 1 enemy AI for whatever reason, I haven't wasted any time drawing things that didn't make it into the game. Luckily, all this AI is pretty straightforward. I think it took about 1-2 hours to do an enemy (art+programming).

The first ghost pirate will slash at you with his sword: video autoplay loop

The second ghost pirate throws bottles of rum: video autoplay loop

At the rate I'm going, I decided to drop the shark and just call it done after the parrot. I immediately realized it's a terrible decision to color this bird with 3 different colors. I wonder if 2 frames of animation is enough…

video autoplay loop

Nope, it's really not. I begrudgingly draw 2 more frames. It's like 5 am at this point, and I'm really tired.

Even though he was a pain to draw, the parrot was still my favorite enemy.

video autoplay loop

video autoplay loop

Day 3

Ok, so now it's like 7-8am-ish on Sunday. I'll consider this the start of Day 3. The enemies are all finished. I'm pretty much finished. All I have left to do is:

Ah... That's not looking good. I only have about 12 hours left, and I'm so tired that I'm not feeling too well. I take a quick shower and grab some food. I decided that I'd just do 1 boss and then make the level.

It's actually quite a lot of animation to do to shade all of those tentacles. The line work is terrible. And I'm pretty unhappy with the dithering on his head. But I'm in a rush at this point, so there's no time to be picky. I think he took about 1 to 1.5 hours to draw, and about 2 hours to program the AI.

video autoplay loop

At this point It was maybe noon or so. Which meant I had about 9 hours to finish the game completely, and I had no level, music, or sound. I was in a big hurry, so I stopped taking videos.

I finished making a level in a couple of hours and then spent probably 3 or 4 hours doing rather boring stuff. UI, cannonball ammo switching, hints for the player, spawning/despawning rooms, fixing the camera bugs. All that good stuff.

I used to make the music. I took the first song it randomly generated and threw it into my game. Is it the best song? No, but it's arguably better than having no song at all. It's passable at least.

I spend a little time making sounds with bfxr and incorporating them into my game. Not everything needs a sound, but the things that the player spends 99% of their in-game time doing really needs sounds. Jumping, damage, shooting, collecting items. These all require sound. I do the bare minimum and call it good enough.

9pm comes. I finish packaging up my game and submit it. I forgot to think of a name. Joe suggests naming it after a famous play. I pick “Much Ado About Pirates” because I can't think of anything punnier than that. Breathe a huge sigh of relief when it's over and swear that I'm never, ever, ever doing this again like I always do. Proceed to sleep for over 13 hours. Friends and loved ones wonder if I'm alive.

Final thoughts

What went well

What didn't go so well