Volcano Rush Post Mortem

screenshot_1.png

Play Volcano Rush Now!

Volcano Rush is a game where you play a villager who must carry a sheep to the mouth of the volcano in order to sacrifice it to the angry volcano god. The path to the mouth is a dangerous one, filled with obstacles that must be avoided.

Just like last December's LD, this one started with the annual Christmas parade on Friday night with the family. I did not sit down to work on my game until more than an hour after the theme had been announced. I spent about 30-45 minutes throwing around ideas until I came up with one I liked. I pictured a little Mayan-inspired villager running up a path on a volcano, jumping over lava and avoiding a variety of other obstacles in his way. My first task was to create a volcano for the villager to run up. I fired up ZBrush and got started. I spent the next 2 hours making a nice looking volcano before heading to bed.

volcano_small.png

The next morning, I woke up early and got started on the volcano again. An hour later it hit me. My sculpted version of the volcano was somewhere in the neighborhood of 30 million polygons. Even with the standard process of baking a normal map to use with a lower poly model, this volcano was going to look bad when zoomed in the required amount for gameplay. I decided to go with a low poly look. So I lowered the poly count down to a bit over 100k polygons and transferred it over to Blender, where I split the volcano into 16 more manageable parts and added it to my game.

The next step was to figure out how to get the player to run around the volcano, following the path. I wanted simple "go forward" and "go backward" controls. No complicated 3D movement. So I opted to create a quad-strip in Blender that is used to create a series of path points on the mountain and the player can then use that to traverse the mountain. It works pretty well, though because his movement is coded as a path index and a percentage of the way to the next index, movement speed can be inconsistent if the path points aren't the same distance apart.

volcano_path.png

Once I had the path generation working, I had to create a player, so I fired up ZBrush and sculpted out a little Mayan villager. Once he was sculpted, I transferred it over to Blender for UVing, rigging and animation. Once UVed and rigged, I spent over an hour creating an idle and a run animation for him and exported it to my game. Once there, I got the character running back and forth and decided I didn't like something in one of the animations, so I went and changed it. The updated animations were wrong in my game, so I went back to Blender and somehow both my animations got completely screwed up. I have no idea what I did or if it was just Blender screwing up, but unfortunately, I had to go back to the pre-animation version of my character and redo the animations from scratch. I could not dedicate the same amount of time to the new versions, so they don't look as nice as the originals.

Now my villager needed something to carry, so it was back to ZBrush to sculpt a sheep. That was pretty easy. Then I needed to get collisions with the flowing lava. My first implementation was to generate an octree of triangles from the lava mesh and use that for collision tests against the player's OBB. It worked, but by the end of the compo, I switched to using placeholder geometry for the collision triangles (instead of thousands of triangles, there are now dozens). It should work much better that way on slower computers.

LD43.gif

I now had a player who could run, jump and if he hit the lava flows, he started over at the beginning. It was pretty close to something I could submit at that point, so I went ahead and created a title screen. Once I had a title screen that transferred you to the game, I called it a day for Saturday.

I was up bright and early Sunday morning and started working on the win condition. I won't spoil what happens when you reach the top of the volcano, but I think it's pretty good and worth the effort to get to. My game had a title screen, it had game play, and win and lose conditions. Now it needed sound effects. I did some quick jump exertion noises and a silly comment he makes when you lose. Then I fired up FL Studio to make the background music. I knew I wanted a drum heavy tribal sound, so I found some interesting drum instruments and played with it until I had something reasonable. Once that was done, I added a smoke particle emitter for the mouth of the volcano.

At this point I had a complete game, but it wasn't very challenging or fun. I needed more obstacles. My first thought was a boulder that bounced down the path after you, so I re-used the smoke particle mesh to be the rock and started coding it. The first step was to get the rock bouncing, so I got it bouncing in place. I tested and by itself that seemed pretty interesting. So instead of taking the time to make the rock bounce down the path, I left it as is. That left me enough time to work on another obstacle. My initial idea was a bird that flew over and dropped something at you, but I didn't have time for that. Instead, I decided to have something moving that you had to jump over. So I re-used the rock mesh again and made a rock that slides back and forth on the ground. I realize that both of these traps make little sense in terms of the real world, but they work for an interesting challenge in the game.

screenshotem3/emsmall.png

So now I had two obstacles and about three hours left before the deadline. I decided to do a little polish. I improved the lava shader and added in a bloom effect. It looks so much better than it did. I added the ability to mute the music. I also optimized the lava flow collisions and fine tuned the trap placement a bit. That brought me to the deadline. I was exhausted, but I was done.

Overall, I'm pretty pleased with this entry. If you decide to try Volcano Rush, please let me know what you think. If you rate and comment on the game, I'll do the same for you. Thanks for reading and for playing!

Play Volcano Rush Now!