#1GAM - 6 Month Post Mortem

This year I've been taking part in One Game a Month (#1GAM). Wanting to make games is what got me into software development, but for the last few years I haven't really had enough time to do anything.

Although if I'm being honest, I haven't really made enough time to create anything.

#1GAM gave me a target to focus on, and with the exception of May (when I moved house and then broke my computer) I've managed to create one game every month. They won't be winning awards any time soon, but the aim is to finish something, no matter how small it is.

The rogue's gallery is as follows:

January 2014 - Haywire January - Haywire
Based on an Atari ST game of the same name. Fly your little spaceship around, capture animals and deliver them to the mothership.
February 2014 - Super Puzzle Dungeon Adventure February - Super Puzzle Dungeon Adventure
Match colours to help your adventurer progress through meadows, forests and dungeons.
March 2014 - Zap March - Zap
A really bad shoot-em-up made in four hours. Four different versions available, each released at the hour mark.
April 2014 - Splodey Boats April - Splodey Boats
Made for Ludum Dare #29. Drop your depth charges to destroy the enemy submarines (and try not to kill any fish).
June 2014 - Over-Engineered Invaders June - Over-Engineered Invaders
Space Invaders built using a custom framework. No download available for copyright reasons.

With the exception of Over-Engineered Invaders, all of these were written using AS3 and Flixel.

What I've Learnt

Game development is HARD

Coming up with an idea and then turning it into reality is difficult. Anything over the simplest idea can quickly become a challenge, and once extra features start getting added it becomes even harder. It's a constant battle to make something that's a working piece of software and something for people to play.

Experience makes it EASIER

Haywire didn't really turn out very well. Although it was no fun to play, it got me back into the game development mindset and reminded me of how to do various things. In the end I used lot of stuff from it in newer projects, so I count the overall experience as a positive one.

Don't get me wrong, it's still difficult to make things, but having the library of code and the experience of solving certain problems has been a tremendous help.

How to say "no" (sometimes)

Knowing that I'm building a small project, and that I have to keep it small, has helped me focus on building useful stuff without getting too bogged down in the engineering aspect. There are projects I've been working on for years that would have seriously benefited from being built alongside a bunch of smaller test projects. I can't believe it's taken me this long to figure that out.

It's even harder to get people to play your games

#1GAM hasn't brought in a whole bunch of traffic to the site. Google says about 50 visitors. I've had about the same traffic from Twitter, and about 100 players from Ludum Dare #29. Granted, I'm not doing this for fame or fortune, but it's still a little disheartening to create something that nobody plays.

There are a lot of games out there, and getting seen isn't easy.

Game development is not just about game development

I like the technical challenge of building a game. I like figuring out how to get things moving on screen in a way that I want. I like building an experience for someone else to play, and then seeing that they play it in a totally different way from how I expected.

However, this is only part of the story.

For the last 10 years or so I've been trying to recreate the experience I had when I first started building games for the PC. I wrote two of the best game demos I've ever made. They were fun, people liked them, and I got them built in a couple of months of super-productive coding. It probably shows how much I enjoyed it that even after all this time I still think very fondly about it.

So far I have not been able to recreate that experience.

I've gone though a bunch of phases and emotions. Maybe I was just a better programmer back then? Or now I'm too old to really dedicate myself to it? Maybe I'm just not trying hard enough? Or am I too easily distracted? Or just not good enough?

Perhaps they're all true to some extent, but looking back I think the biggest mistake I make at the moment is developing in a vacuum. I don't want to show any work unless it's "perfect", so I show nothing. Part of what made that time so special was that I didn't do it alone. I showed off what I was making, but I also looked at what everyone was creating. We all encouraged each other, and made what we wanted to make.

The funny thing is that now there's even more chance to interact with other developers. There are way more forums and sites dedicated to it, not to mention the likes of Twitter, Facebook, Instagram, Google Plus, App.net and everything else.

Moving forward

Normally this is the part of a post-mortem where I write a bunch of bullet points and then promptly ignore them. This time I'm going with just two resolutions:

  • No more developing in the quiet. Show more stuff more often. Get feedback and encouragement.
  • Pay attention to other developers. Spend time playing their projects. Give feedback and encouragement.

I think they're pretty achievable. Feel free to leave comments promoting your own games and I'll take a look!


Over-Engineered Invaders - Post Mortem

"Over-Engineered Invaders" was my June entry into #1GAM. It's not publically available as I was lazy and used copyrighted graphics from the original Space Invaders. Having said that, the main reason for creating it was to put some of my own framework to the test. The results were certainly enlightening…

What Went Right

Found some weaknesses

This might not sound like something positive, but a key part of me writing the game was to find out where my own code and process was below-par.

Needless to say, I found plenty of places to improve, and building a quick project really highlighted them. Some areas of code are poorly written, and there are other areas of functionality are missing completely. I never really realised how much of a help Flixel is, so it was certainly an eye opener.

Found some strengths

One part that went absolutely right was the custom entity framework. I used a very simple version of component-based entities when creating Ineptia, and even though it was crude it really helped. This time around I used an entity system approach, and it worked out better than I ever could have hoped.

In previous iterations I have used components that have data and behaviour mixed together. It works well enough, but one thing that always bothered me was deciding which component should do what, and how they should communicate. With entity systems, the component is just data and systems are just behaviour. It makes breaking down data and behaviour much easier, and because systems can access multiple components at once there is rarely a need for them to communicate with other systems.

With this approach, systems are added to the World and can then register their interest with one or more components. For example, you can have a system that only cares about entities with a PlayerComponent attached. Like components, systems can be added and removed at runtime, so new behaviours can be added dynamically.

There's a couple of gotcha's, and it requires a slightly different way of breaking things down, but it works rather well.

What Went Wrong

No release

Although it wasn't very polished, but the main reason for keeping the build private was the use of copyrighted graphics. Now I'm pretty sure the lawyers wouldn't have come to get me, but you can never be too careful.

Late start. Again.

I moved house at the end of May, and the various bits of move prep spilled into June. Coupled with work deadlines it didn't leave me much time or energy for game development, so I didn't start until very late in the month. If I had started earlier I would have been able to change out the graphics and release something.

No inspiration

Although I enjoyed figuring out the technical aspects of the project, the idea of cloning Space Invaders didn't really trigger my imagination. I've always felt like I spend more time trying to solve software problems rather than gameplay ones, so I wasn't really expecting this.

Lessons

Start earlier

I'm writing this two weeks into June, so I guess I failed that already…

Don't use copyrighted material

This one speaks for itself really.

Make something I enjoy

Space Invaders was fun, but technical challenges alone don't motivate me as much as I thought they would. There needs to be some creative aspect in order to inspire me to build something.


June's #1GAM Entry - Over-Engineered Invaders

Everything I've created for #1GAM so far has been written in Flash and the excellent Flixel library. One lesson that has constantly come up is that constant practice with a set of tools makes it easier to build things using them.

This is not exactly a shocking discovery, but for some reason it totally escaped me until now.

With that in mind, this month I decided to make something with BlitzMax and a custom framework I've been building on-and-off for the last few years. It's something I've been using to build a large hobby project of mine, and what started as a few helper libraries has started to encompass everything from rendering to component-based entities.

However, the problem with building the game and framework together is that it's not giving me practice with all the various parts that make up a game.

So June's entry is called "Over-Engineered Invaders". Space Invaders seemed like a good test subject: it has a nicely defined loop, a couple of different entity types and the rules aren't too complicated. The name comes from the fact that Space Invaders really doesn't need a resource manager, rendering pipeline or customizable entity system.

In order to get something up and running quickly I used the original Space Invaders graphics, so for copyright reasons I won't be making the download available until I can replace the assets. Trust me, you're not missing anything.

I learnt some really important stuff in the process, and as always there will be a post-mortem in the next week or so.

"Over-Engineered Invaders" Project Page


The Carnival of Video Game Bloggers - May 2014 Edition

may-2014-blog-carnival.jpg
Figure 1: Ecco the Dolphin

Welcome to the May 26, 2014 edition of the carnival of video game bloggers.

Unfortunately blogcarnival.com was down for most of the submission period, which limited the number of people that could send in articles.

This Edition's Participants

Meg Stivison from Simpsons Paradox sent in Not Quite Legendary ‘Legend Online’, a review of "Legend Online: New Era". I think the following quote gives a good idea of what's in store:

Good game design is often described as a series of meaningful choices, but it was hard to find either meaning or choice in Legends Online.

And finally, Peter John McLean over at writers global, they steal sent in "A Review of World of Warcraft Guides". If you're a recovering WoW addict you might want to give it a miss, but if you're just starting it's as good a place as any to get a head start.

Thank-you to the participants this month!

Next Edition

The next edition will be posted on June 23rd. Depending on interest I may switch to making these bi-monthly instead.

You can add your posts to the next edition of the carnival of video game bloggers using the carnival submission form. There are no strict rules, just make it something related to games that adds some value to the conversation. Reviews, project post-mortems and just chatting about your general experience with games are all great subjects, so don't be shy!

As always, past posts and future hosts can be found on our blog carnival index page.


Splodey Boats - Post Mortem

"Splodey Boats" was my entry into Ludum Dare #29, a 48 hour game creation contest.

Concept and Creation

This time around the theme was "Beneath the Surface". Splodey Boats is a game about submarines. Let's be honest, it's not the most original take on the theme. Having said that, I still learnt some good lessons this time around.

As soon as the theme was announced, I started scribbling notes and ideas to get my creative juices flowing. Past experience has taught me to go for quantity at the start, so by the end I probably had about 3 or 4 pages of (pretty bad) ideas.

Once I was satisfied with what I had, I picked my favourite 6 ideas and drew concept screens of each one. They were nothing complex, but I've found just closing my eyes and pretending to play the game in my head is usually enough to get me moving.

There were a couple of ideas I really liked, but I tried to be realistic in what can be achieved in such a short time span. By about 10:30 I'd settled on the idea that would become "Splodey Boats", so I went to bed.

As soon as I got up the next day, I whipped up a concept screen in paint. Yes, that paint. It all seemed achievable, so I planned out the features I really wanted: the depth charges, sinking submarines and the sonar system.

It only took a few hours to get the core of the game working - a moving ship, some submarines and the double-tap depth charge. Granted, it was all very rough, but having it playable so quickly made a huge difference. Not only was it motivating, but it took off a lot of the pressure so I had a bit more freedom over what I added.

Some features, like the explosions and bubbles, were added quite early. Strangely enough, the one feature I absolutely wanted (the sonar) didn't get added until the last few hours. I had originally planned the entire game to take place in the dark, but being able to play the game without the sonar feature made me realise it was a bad idea.

Development Statistics

Source Files 29
Lines of Code 2,462
Development Time 18:10

I didn't track time as accurately as I normally do, mainly due to being on such a tight deadline, but 18 hours of 48 is a pretty good workload. There's a couple of big, ugly pieces of copy/pasted code, but it all compiles so I can't be too mad.

What Went Right

It got finished

I was a little hesitant to enter this time around, especially after my failure to finish LD #27. Needless to say, I'm very happy I managed to complete something time around.

There's a full loop of gameplay, a title screen, game over screen and even an online high score table. Code-wise it's a mess, but it works.

Matched my original plan

splodey-boats-concept-thumb.png
Figure 1: The original concept
splodey-boats-final-thumb.png
Figure 2: The finished product

I deliberately kept my original plan as simple as possible, and I think it paid off. Normally I get a bit carried away and end up only finishing about 10% of what I want. Taking the simple approach allowed me to finish the core game relatively early, so the end result has a few extra features I hadn't intended on doing.

Gradual enhancement

The graphics started with silhouettes. Then I added some bubbles. Then the explosions. Then more bubbles and a nicer sinking animation. This went on through the whole game. I would start with the feature, get it working, and then polish it until I was happy.

It wasn't just graphical changes either. Originally the ship would sink as soon as a missile or bomb hit it. I thought it would be more fun to have the ship start smoking when damaged, so I added health and smoke/fire particles to indicate the current status. Even though it was initially a graphical idea, I think it makes the later levels more enjoyable.

Organization

Normally I just splat a whole bunch of ideas down and pick whatever takes my fancy. This time around I created a giant "todo" list, and then organized the tasks into milestones. Each milestone only had a few tasks in it, but I forced myself to finish each task before moving to the next one.

Ticking each milestone made a huge difference to my motivation levels, and was also a good way to prevent me from getting sidetracked. Here's the milestone for the "mine dropper" feature (complete with time tracking data):

*** DONE Milestone 9 [6/6]
    CLOCK: [2014-04-27 Sun 09:19]--[2014-04-27 Sun 10:01] =>  0:42
    - [X] Random plane that drops mines
    - [X] Mines float (with a little y-axis wobble I guess)
    - [X] Mines explode after a certain time
    - [X] Mines should flash as they get closer to exploding
    - [X] Exploding mine should sink ship
    - [X] Hitting a mine should sink the ship

Nothing fancy, but it definitely helped.

What Went Wrong

The idea

My idea wasn't really that exciting, which stunted my enthusiasm a little. By Saturday night I had most of what I wanted finished, and didn't really feel like getting up early on Sunday to work on it. The feeling subsided once I got started, but normally by Sunday I'm panicking about how to get everything finished.

Balance

The first 8 stages are pretty much the same - destroy some submarines and don't run out of time. It's only once mission 3 rolls around that more interesting elements (enemy subs firing back, mines, sonar etc) get added. I wanted to make the learning process gradual, but Ludum Dare games are all about grabbing the player's attention as soon as possible. I failed pretty badly there.

No community involvement

I made an announcement post before the compo started, but that's about it. Must try harder next time.

Not tracking milestone times

I tracked time on each task, and it wasn't until Sunday morning that I tracked individual milestones. Not a huge mistake, but it would have been nice to graph each milestone by time taken/code written etc.

Lessons

Get more involved

I think I said this last time, but it's worth repeating. A lot of what makes Ludum Dare so special is the community around it. Sharing ideas, early sketches and progress all add to the experience, and I really missed out (again) this time.

Keep it simple…

Keeping the graphics, sound and gameplay simple helped it all came together much more quickly than usual. There was a slight panic at the end to get things finished, but for the majority of the time development was pretty smooth.

…but not too simple

Everybody is different, but I'm more motivated to work on something when it excites me. Splodey Boats is not a very exciting game.

Keep your milestones small

Keeping each milestone small kept me focused, and stopped me from getting bored or frustrated. If there was a task I wasn't enjoying, I would put a fun task in the next milestone. Knowing I had something enjoyable to do next pushed me through the parts I didn't like.

Learn your tools

This is my 7th Flixel game, and I think it's starting to show. There were still plenty of things I didn't know how to do, but I was able to figure them out due to my previous experience.

I feel a bit silly for not figuring this out earlier, but having any experience really helps. Even the things I learnt from Haywire and Zap made a big difference to how quickly I could get things done.

Lesson learnt: experiment more. Much more.