Coding: Bring the Noise

%26lt;0011 Em

SuperGeometryBrawl!

leave a comment »

SuperGeometryBrawl is my first full game using XNA.  It uses chunks of code from Microsoft’s Net Rumble, and aside from icons and the background track, all assets are from that project.

I don’t intend to sell the game, as it was simply an exercise in seeing a game through from concept to final product (including menus and statistics reports.. ugh).

It was also a chance for me to decide if working on games is something I would enjoy doing for hours on end.  As I suspect anyone that interacted with me can attest to, the answer to that is a resounding yes.

Before I get into how much fun I had working on this, here’s a video.

And here’s the source code: source.

Not included in the source is the background track that I used, as I don’t have permission to redistribute it.  Go check out the artist’s page though, some seriously good stuff: Ludique

Development

Back to development: I wanted to write a game using XNA, since C# seemed like a good introduction back to compiled languages after my two-year run with python.  I’ve worked in c++ recently during my research into radiosity and ray-tracing, but hadn’t done much custom coding in it.  I decided to make a game along the lines of Geometry Wars, but wanted to have a Super Smash Brothers style UI (which didn’t work out).  I started off with basic XNA tutorials, and then after seeing my code running on the Xbox360, my excitement took over and I coded for 48 hours in a three day period.  After recovering from that weekend, I fell into an 8-10 hour per day schedule of coding until my deadline of July 30th.  In the last week, I was at 12-16 hours per day, and while my social interactions took a hit for that week, I loved every minute of the stress; it sort of fueled me and kept my energy high for the last push.  Throughout I constantly bounced ideas and problems and demo’d features to my family, who were very supportive in that “oh, you’ve mixed lots of ingredients from the cabinet in another of your experiments, how lovely.  Keep up the good… something, dear.” way.

Setting a deadline was a very good idea, and very frustrating.  I wanted to keep myself from falling into the “I’ve learned so much, I’ll start over and avoid those mistakes” loop that I’d read about in many dev blogs and on /r/gamedev.  It also forced me to weigh functionality against time, which was something I hadn’t done before.  It’s amazing how fast that carefully, lovingly crafted list of features gets cut down when your deadline is single digits away.  It also forced me to stop trying to perfect every method of every class, and kept me from performing major overhauls that weren’t needed.  At one point I remember reading a post on /r/gamedev about BSP in collision detection, and I thought “with that I’d probably be able to put silly numbers of enemies on the screen” and then followed that thought up with “yeah… or I could fix this bug where enemies glitch past barriers and shots aren’t connecting.  Oh I have a week left and no menus.”

One of the biggest realizations I had was that I would love to work in a team to code.  I’ve always had this “lone warrior” image of programmers, and while there are times where it’s best to just zone everyone out and pound out excellence, having even one other person to work with would have simplified a lot of this project.  My whiteboard kept my todo list easy to sort through, and my five or six legal pads strewn about had useful notes on weapons, specials, ships and bullet systems, but they weren’t enough to keep me from one of my major weaknesses: over-focusing on details.  It’s not so bad that I get hung up for minutes at a time on the name of variables, mind you.  Rather, I sometimes will be so enthusiastically working through a class’s methods that when I go to work on another, I’m not sure if I wanted external classes to call the “StartUse” or simply “Use” method (the answer is Use, because from the outside, everything should be simple, and “Use” looks simpler than “StartUse”.  Also, “StartUse” has a matching pair “StopUse” which external classes shouldn’t want to call.  So Use should stand out.  Clearly. Right….)  It wasn’t a problem that kept me from finishing the project, but having someone to talk about code structure with as I worked would have helped me plan things out in a way that would allow over-focusing.

Video Criticisms

There are a few things notably absent from that video, such as:

1.) Any form of title at the title screen (how could someone miss this, you ask)

2.) Lack of notification when you grab power-ups (Is this a..  special? aura?  What do I do!)

3.) Achievements or awards (everyone wants some form of recognition)

Why are these things missing?  What’s my excuse reason?

1.) I wanted to get someone to hand-draw a cool title instead of using a font, but didn’t get it done in time.

Lesson learned: ask for favors early in the project, not two days before deadlines.

2.) Having played this so many times while testing various systems, I got used to the icons and knew which power-ups were which.  For someone playing this for the first time, “shield thing with arrows” does not immediately suggest “slows bullets around you”.

Lesson learned: Assume an ignorant user when usability testing, or get actual fresh players (instead of relying on the same family member for testing each time.)

3.) I wanted the score screen to feature a 2-panel layout, with statistics on the left and awards or medals on the right.  Unfortunately, I had set a rather strict deadline for myself, and this didn’t make it through the crunch period.

Lesson learned: sometimes deadlines force you to make uncomfortable decisions: clean up bugs or add potentially buggy features.  I wanted to polish what I had, so I opted for the former.

Written by delwinna

August 4, 2011 at 8:15 am

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: