Well Ludum Dare has come to a close, that makes the third one I’ve done! I wanted to write this post-mortem sooner, but I defended my thesis proposal today, so I’ve had a bit of a full schedule. For those of you reading this who don’t know what Ludum Dare is, it’s a 48 hour game development competition based on a theme. Once the theme is announced, you have 48 hours to make a game- from scratch – and submit it.
I made a on-rails style game (think star Fox, or those arcade machine games with the guns) where you need to use items picked up along the way to reach the end of each level. However, there’s not just 1 way to beat a level – multiple paths could bring you to the end, or even to another level altogether. The game features 4 unique levels and 2 special stages.
What went well:
- Art style definitely worked well in my favor. I got to take advantage of my background in lighting in order to make some cool levels.
- The concept of an on-rails adventure game is pretty neat. I’m going to visit it later in a post-compo entry.
- Picking up and using items felt pretty good
- Lots of unique levels for the amount of time.
What didn’t go so well:
Pacing is pretty slow, right up until you get killed unexpectedly. There seems to be this big gap between too easy and too difficult, and not much “medium” difficulty in this game. That’s something I can fix with more time to playtest and adjust levels.
Low quality texture. Even though they were solid colors, there’s still quite a bit of jaggies and some rendering artifiacts. Spending some time doing research on this is going to produce much better results in the future.
The boss fight. It wasn’t a complete disaster, but it was one of the last things I worked on, I was super-tired and it shows.
It took me 2 hours to decide on an idea. My first idea was bad, my second one was so-so, and I probably had a dozen micro-ideas that weren’t so good. Finally I decided on an idea: You run through a level but you can only use an item once.
Alright, an on-rails game, that’s manageable!
I didn’t want to write a character controller from scratch, so I modified the one that Unity ships with. You will always move forward, and when you hit a waypoint the character will rotate to face the next one (my game called them “direction changers”, great name I know).
First person was necessary because I just don’t have the time to model/rig/animate a full character on top of everything else.
I had a lot of ideas for items, the first one I had was a bomb. If this game is going to be similar to Star Fox in gameplay, why not take it a step further? I wanted the player to be rewarded by figuring out some puzzles, not just following the same fixed path. A bomb is a pretty clear tool for opening up a new path, so I wanted to get the tossing mechanic and item inventory working. The inventory works at this point, but I had not made icons for the items yet.
For a while I’ve wanted to do some of these stylized low-poly renderings. Both of my past LD entries were 2D platformers so I thought this would be a good way to branch out. I used Maya to do the basic models, Blender to do fractal displacement of the verticies and reduce polycount, then back into Maya for texturing and light baking. An advantage of doing the lighting/texturing in Maya is that I can use things like soft shadows and global illumination, which free Unity does not allow.
I finished modeling level 1, just a short tutorial level, about 6am on Saturday morning. Definitely ready for bed at that point. I fiddled around with texture baking, set the level to bake, and went to bed.
So, that light baking didn’t work. I’ll summarize my lessons for doing light baking quickly: have as little geometry as possible. I didn’t have enough time to really research what was causing some of the issues, so I had to make all the levels very low poly. That bridge in the image didn’t make it into the game, instead I used a quick rock bridge. RIP bridge :'(.
Picking up items is pretty crucial in the game, so I like to prioritize those important mechanics when doing LD. I think if you get them working early, it pays off later. Last-minute changes don’t really have time for tweaking. At this point, you can pick up a chest and get the item inside. Also, you can take damage! It depletes your heart count, and the screen edges flash red.
Just under 1 day and the first level was complete. I planned on 6 levels, so I knew I’d have to pick up the pace. Luckily at this time, most of the programming was finished (except for some level-specific things) and I had an established workflow for level creation. I determined that each level would take 2 hours for the art and 2 hours for programming and implementations. That turned out to be pretty accurate.
Level 2 art was finished right at the halfway point. This is the first level that features divergent paths – the normal route takes you into the mountains, but the (not so) secret route takes you to the crystal caves.
Level 2 had a lot of programming – I needed decision points for certain paths, as well as destructible objects and moving objects that damaged the player. In a particularly evil mood, I put 2 rocks at the end of that level that hit you, which I think frustrated 99% of the players into choosing the crystal caves route.
The caves had to do 2 things: 1- look cool, 2- be kind of difficult. I felt the difficulty was a fair price of being able to completely skip the mountain level. Any mistake in this level will instantly kill you, and the beginning has a relatively difficult double-jump to perform. I wish the texture resolution of the level were high enough to show off the glow of the crystals, but that’s something I had to sacrifice for time’s sake. Instead I threw in millions of particle effects in an attempt to distract everyone.
It’s hard to call this “level 3” now because there’s 2 “level 3’s” based on which route you choose. This is the default route’s level 3. The mountians features 3 paths (though 2 take you to the same end). The rightmost path, if you take it (and suffer some damage) will take you to the christmas level! The mountains are probably the most difficult level because if you don’t destroy 1 of the 2 ice walls soon enough, you’ll meet a cold and pointy demise.
The end was in sight at this point. It was 6am on Sunday and I had not slept since those 6 hours on Monday night. But I only had 1 level left to go, and 1 special level (the Christmas one was very very short). I wished I had more time to work on this level.
I started to take less progress photos at this point because I realized how tight time would be. I probably lost 1.5 hours on this level simply because of how tired I was at the time. I don’t know why I decided to model, rig, and animate a character at this point. I can’t rig or animate to save my life. Oh well, the boss is a tree. I added rigs and animation in about… 20 minutes. It’s a hackish combination of a y-shaped joint chain and hand-animating verticies. It works alright for the context that it’s in however. The level is pretty small – it’s just a figure-8 loop that constantly passes the boss. You have to use the endless supply of bomb chests in order to defeat him.
I don’t know the time of this photo, it was sometime after the boss was completed and before the Christmas level was done. I actually really like the feel of this menu, the camera animation worked out really well, and it’s probalby something I’ll keep doing in the future if people like it.
Nothing like some last-minute programming! I decided to have a travel log that kept track of your path. That way the player can see which paths they have traveled and try to go back and unlock all of them (a pretty bold assumption thinking people would actually play this game 2 times, let alone 3).
The Christmas level was finished an hour before the finish. It’s a small message to all the LD participants. If you want to read it, go play the game!
Thanks for reading! So glad for all of the feedback and support I’ve gotten on this game already. I’ll make sure to let you all know when the post-comp game is ready!
Til next time,
P.S., check out my friend’s entry titled “FowL Play”.