BGMC15: Lessons Learnt

Ever since learning to program I’ve always wanted to create games. I’ve dreamt of being able to enter a game contest, but between work, my girlfriend and life I don’t normally have time to dedicate to something so time intensive. However, in February I was lucky enough to have several days off work so I could enter the Blender Game Making Contest 15. It was a long slog to finish (seven 16-18 hour days) and over the week I had learnt a lot. So I thought I’d share with you what I learnt:

Turn the profiler off!

Like many, I’m sure, I’d gotten into the habit of developing with the profiler on. And why not? It allows me to see how my game’s performing and where the bottle necks are. However, it comes at a price: constantly worrying about performance, which often leads to endless optimisation and refactoring. Trying to get every function and class perfectly written and efficient.

With only a week to complete a game, there’s no time to worry about endless optimisation. Turning off the profiler really helped hammer this home. I got into the habit to of just getting something to work, then leaving it alone and not stressing about how well it works.

Ironically, in the end, when I did profile my game towards the end it was performing really well. This is something I’m going to continue to do when working in the BGE.

Use design patterns

I used the factory pattern to manage the player loadout and set up. I found this led for a really quick development cycle. By using a design pattern I did not need to worry about how to get something done, and instead, could focus on the specific implementation.

Over the course of the project I became quite a fan of the factory pattern. It allowed me to quickly add new features to the player without breaking old ones. I also applied to generating enemies and particles. Which leads me to my next lesson:

Don’t write generic code

Writing generic code wastes time and doesn’t always perform well. Instead, use a design pattern. For this project I wrote code just for the game. It’s not designed to work with any other set up. Normally, I try and write things I can take to other game projects. For the contest I decided to focus on just writing what I needed and noticed that logic development was vastly accelerated compared to other projects I’d done.

Similarly, using generic code doesn’t work well either. You’d think that being able to reuse code would save time, however, often jut getting it to work with what you’ve already got takes more time than writing it from scratch. I found this with building the particle system. I tried to reuse one I’d previously written, I wasted an hour trying to get it to work before spending 15 minutes writing a new one from scratch. It also performed better because it only did exactly what I needed it to do.

Listen to feedback

It’s easy to get protective of the things we create. They’re like our children. I found the feedback I got very useful. It helped me develop areas, where my skills are weaker – such as art direction. Also, since designing games ins’t about what I want, but the player and this feedback helped me fix things that I thought were good, but the player felt didn’t work.

The feedback, support and encouragement I received from other entrants and BGE users also helped spur me on when I was feeling fed up with it. I think that I’ll try to make greater use of the WIP section on the BA forums for future projects.

Plan before starting

One of the shortfalls of my entry is the lack of sound. In all my development I never once considered adding sound to the game and how I would do that. So I found myself at 10pm on day 7 desperately trying to introduce some sound and not being able to get most of what I wanted to do to work with my game. For next time I need to sit down, plan out my game and map out how I’m going to use my time. I went for quite an ambitious undertaking in the time allowed. And while I got a fully featured end result, there isn’t much of a game to speak of. Things like level design, scoring, point to the game were not fully thought out. This is something that should come out of planning development, not during it.

Finally, because I didn’t plan my time there was no real time to play test it. With a design like Planet Smasher this was important as all the player loadouts needed to be balanced to work effectively. This meant that some loadouts are more powerful than others. For example, using the healing unit makes the game very easy because you could just wait in a safe spot and top your health up. Again, if I’d spent time designing the game I could have found a way to pressure the player to keep moving.

Areas for development

The contest highlighted that my modelling, level design and animation skills are somewhat lacking. I thought getting the scripting right would be the biggest challenge, but actually most of my time went on building simple models and trying to animate them. To me this highlights that I spend so much time doing python that all my other game design skills go rusty. Understanding my skill balance better could have helped in planning my time. Perhaps if I had realised this earlier on I would have been able to design more than 2 short levels.

Final notes

I had a lot of fun entering this contest and I’m forever grateful for those around me who put up with me during that manic week. And I’m also grateful for all the support received from other contestants and BGE users. Overall, I was really impressed with each entry and had a good time playing through them. I found it amazing that each game was so unique, not just in terms of the interpretations of the theme, but also the different game plays and art styles. No 2 games were remotely similar.

You can check out my entry, Planet Smasher, here.

I’d be interested to here what others have gained from game making contests, so leave your thoughts in the comments below.

Advertisements

~ by Jay on March 6, 2015.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: