Wow, what an experience a game jam really is! You hear people say it all the time. I've been hearing the same thing for a few years now and always shrugged it off. Now that I've got 2 game jams under my belt it's time for me to pass the lesson on to you. DO A GAME JAM!! Seriously, you will be happy you did. If you are nervous or scared you should be, a little. It's going to test your endurance and ability to plan and execute like nothing else. But everything that is hard about game jams also builds those areas that are so scary to face. It forces you to learn and it does it at a stupid rapid pace. Most people don't have an unholy will and always work as hard as they possibly can. A game jam gives you that extra push and motivation to go as hard as you can. It's time to prove things to yourself and that's how it should be looked at. Don't stay out because of what others might think. That said, in my experience everyone has been super friendly and such worries are without weight. Oh man, can I go on for days. Luckily, I have a summer camp full of students that I can rant more to later. Let's wrap this up and talk about Battle Meow!

As I mentioned in the Rocket Balls jam post, I am on the jam wagon. A couple weeks back I asked the team if anyone could help with the upcoming Global Game Jam. Our environment artist, Liz, was more than excited and the only one with the spare time. She has a blog post herself. This is awesome because it gives me the freedom to just talk about all the tech crap I want!

The Plan

When I initially asked my team if they wanted to jam, I was ready to throw a full weekend into the jamming abyss. As I hinted above, life decided to kick me in the tookis that same weekend! I had a one week's notice that a summer camp I work for was kicking off on Saturday. Add on to that, my contract work was really piling up, with a feature deadline getting pushed to right after the jam. However, thanks to a sleepless night, I successfully rounded up the hours necessary to get something done. Here is a full overview of all the hours I spent developing.

Game Jam Schedule

Friday (1 hour) 7:00 to 8:00pm Idea brainstorming: cats on boogie boards propelled by boom-boxes!

Added static plane with water texture

Created vary basic propulsion system Saturday (15 hours) 1:00 to 8:00pm Console controller support

Boom box behavior changes

Water mesh warping

Initial art added 10:30 to 6:30am Main Menu, Icon, Splash Screen Assets

Split screen multiplayer support,

Water/boom-box sound particle systems

Music

In game art assets

Weather system

Physics tuning Sunday (4.5 hours) 10:00 to 12:00 Added free look/shooting

Some last second art assets 12:00 to 2:30 - Tuned and fixed last second bugs 2:30 to 3:00 Frantically uploaded game minutes before the deadline :D

Friday

After coming up with the idea of cats riding boogie boards propelled by boom-boxes, we started some initial work. Liz started with a water texture and I started on the mechanics. From the start, I knew I wanted to make some cool water physics. I also knew creating the water would be tough and consume a large chunk of development time. I did what any experienced developer would do and put it off! Ok, seriously though, I would have rather had game mechanics and horrible fake water than just amazing water. After an hour of development I had a very basic prototype that was fun to play with. This was a huge win and having a some visible progress this early on was a big motivational boost for the team. They would not have been as motivated to see some fancy water effects.

It was a start anyways. When you pressed left and right it would add to your "boom-box" rotation. When you pressed forward it would apply some throttle at the current rotation.

Saturday

We started Saturday off by adding support for an X-Box controller. Being a "driving game" a controller was necessary. We also knew we had to showcase the game so controllers were a better option for supporting local multiplayer. Next, we changed how the boom-box rotated. To make it behave more like a car, we reset it to center when you released the joystick. Finally, we started work on the water. Step one: waves!

As you can see this did not go suuuuuuuper smoothly at first. We spent a decent amount of time trying to dig up high school math knowledge. The biggest barrier we hit was when I forgot that a sin wave has a period of Pi. After pounding my head against the table, Kevin remembered, and I just about kissed him. In fact, he made me promise to call the function we wrote to control wave height TheKeverlyFactor. By 8:00pm, this is what we were looking at and we were proud.

Sunday

I worked straight through the night and was as productive as I've ever been. Initially, things were slow and I had some bugs with the floating physics that took about 2 hours to diagnose and fix. Debugging is insanely frustrating when you are working on a deadline. Early Saturday night I was worried we wouldn't have a full game loop. The final floating system we created has 2 parts to it:

Find depth Adjust position (or buoyancy force)

To find the exact depth we use bileaner interpolation using the 4 closest vectors of our water mesh. Then we look at the height at that position and calculate an upwards force that is dependent on how close the floater is to being fully submerged. This worked great but wasn't necessary for all the floaters in the game. For instance, the buoys that make up the arena bounds don't really require super precise floating and since there are hundreds of them a faster method of floating allowed the game to run a bit smoother. For these "fast floaters" we just find the single closest vector on the water mesh and lock our vertical position to that vectors vertical position.

Once these floaters were completed they could be attached to any rigid body in any position. It made adding assets a piece of cake! Here is an example of how some of the game objects worked. I've textured the floaters like sponges.

The final thing I added just before submitting was a crucial feature that I wasn't sure I could get done in time. I wanted the user to be able to toggle into a mode where they would use their boom-box to shoot. I thought it would be neat to force them to choose either to move or to shoot. I got it just in time and was ready to submit with about 30 minutes left in the competition. Here is the final submission in action!

In the end, it was a frantic mess of coding and art that made me want to cry. So I would say... it was a successful jamly time.