Tuesday, December 27, 2011

Journey into Technical Game Requirements

Hello again fellow game enthusiasts!

So, over a nice glass of holiday eggnog, I've been thinking about my previous post and a comment that was made on that post. Basically that "a plan" is one thing, but how to go about executing the plan is another. I've decided to take this post from the perspective of aiding a person who does not have a great deal (or any) technical planning experience. In other words, how do you take your epic game idea from your head and translate it into it's digital form. Let's journey into technical game requirements.

From an IT industry standpoint, a technical requirements document is a big detailed document that can be handed to a programmer and then they can...well...program the system. It lists the recommended tools for programming the project, how the project's technical architecture will be laid out, the problems the system will solve by being built....all that good stuff. If you have no clue where to start programming, a technical requirements document is the place to start.

That being said, I know phrases like "technical architecture" can be pretty scary to a non-techie (or to a techie depending on who's writing the document...*ba-dum, tish!*). You don't need a huge fancy document with a cover page on your TPS report. Basically your document should answer the following questions:
  • What platform are you designing for? (iPhone, Android, PC. XBLA, PSN, all of the above?)
  • What tools will you use?
  • What programming language will you use?
  • How is your game laid out? (a.k.a. what are all of it's pieces)
Let's do a quick example. Let's say you played every Final Fantasy six times and you think the iPhone app store deserves an awesome JRPG-inspired game. And you have just the game for the job! If that's what you want to create then what would your technical requirements document look like? It would look a little like this:

Super-Special Awesome JRPG Technical Requirements Document

Platform: iPhone
Tools: Unity
Programming language: Javascript and Objective-C to complement Unity
Game Modules:
  • Overworld map
  • Battle System
  • Item menu
  • Character menu
  • Sprites 
  • Music
  • SFX
  • Ability to Save
  • Ability to Load
  • Ability to delete saved games
If you know how to create and read Unified Modeling Language or UML document, that would be even better still for mapping out the relationship between all the parts of your game. While there are admittedly some pretty glaring gaps in the "game module" section, that's really all you need as a starting point. If there is any bit of advice I've heard from the local game dev community repeated over and over it's to not get caught up in planning forever. A plan is very, VERY important. However, when you have a good, solid idea of what you want to do, then just start!

For instance, in the above sample document, a great place to start would be to program the battle system. If you're doing traditional box battle style, it will have independent mechanics from all the other components. Start with simple text menus and basic geometric shapes to start. Then work your way up!

There was a lot I was going to say about learning how to program if you don't know how, but I decided to scrap it all and say one simple thing: just get started. The internet is flooded with great tutorials on programming in whatever language you want to.

I hope that was useful! Now if you'll excuse me, I need to refill my cup of eggnog. Have a game filled holiday!

gl hf!

Thursday, December 8, 2011

Journey into Game Development Goals

*Sigh.* O.K, so I've been playing with the idea of becoming a game developer since...well...since I first laid my hands on an Atari 2600 controller when I was 4. After doing my Computer Science degree at Memorial University of Newfoundland (a degree I choose because I wanted to develop games) I found that getting into the game industry was far more difficult that I had originally imagined.

But wait! A glimmer of hope! With different gaming platforms becoming more ubiquitous (smart phones, tablets, etc), gaming becoming more mainstream, and a true "indie" market just starting to be tapped into, you could make games in your basement and actually have the opportunity to be very successful. JOY!

So, I have options! I can totally do this!...but I really haven't been going anywhere. I feel like those clouds from Family Guy...you know...the one's that will "attack tomorrow?"


Yea...those guys.

However, thanks to a very inspiring meeting of the local IDGA (check out I Code By The Sea for details on the meeting) and reading a few good wikiHow articles, I finally realize what I've been lacking...

A Plan.

Sure, maybe now you're thinking "duh, of course you need a plan!" The true problem was I thought I DID have a plan. It was along the lines of:
  1. Learn to program games
  2. Become a hot-shot indie developer
  3. PROFIT!
I'm sure anyone who knows how to set goals and stick to them can see the problem. I really haven't set any goals at all...I've set big, broad "hopes" but no real destination. O.K. then...lets get serious.

Step 1: Set the ultimate goal

Ultimate goal: Become a Hot-shot indie game developer

This is the ultimate destination. The holy grail. This is the goal that I'm going to write on a sticky note and paste it on my bathroom mirror so I can see it every morning and be inspired. Now, to just leave it at that won't get me there...the goal is way to big and unspecific, so lets break it down.

Step 2: Take ultimate goal and break it down into sub-goals

  1. Become comfortable with game development
  2. Design a very simple game
  3. Develop previously designed game
  4. Publish simple game
  5. Take what you've learned and repeat steps 2-4 as needed
  6. Design a more complex game
  7. Program more complex game
  8. Publish more complex game
That's getting better! But we're still not there yet, are we? These goals are still in the realm of big, scary, and unspecific. So, I may as well use some of that development know-how that I've learned in my past five years of industry programming to break these down further. Rather than calling them "goals", let's call them "milestones." Lets continue to break each milestone down, so that way our journey becomes far more clear. We should also include a few rewards in the steps as well. After all, who doesn't like being rewarded for their efforts!

Step 3: Map out a specific path to reach each milestone

Become comfortable with game development
  • Pick a platform to practice development on (Unity, pre-made engine such as UT, OpenGL, DirectX, etc). If possible, think ahead slightly to where you'd eventually like to release a game. That will help with the choice.
  • Pick a simple game that you are very familiar with. One where the mechanics are easy to pick appart (Tetris, Space Invaders, Missile Command, Solitare, etc).
  • Program that simple game on chosen platform using nothing but simple shapes as the avatars.
  • $$Reward!!$$ Five to ten dollar game on Steam
  • Upgrade the graphics of the game to include more detailed avatars, animation, etc
  • Check and see if it's legal to distribute clone for free. (sourceforge, linux community, link on blog, etc)
  • $$Reward!!$$ New small canister of tea from local specialty tea shop
  • If still lacking in confidence, repeat steps to milestone with new game or new platform.
 Design a very simple game
  • Find inspiration. 
    • Play games from genres you don't normally play.
    • Brainstorm with trusted friends
    • Think about how whatever you're currently doing could be made into an interactive experience
  • Design core mechanic. Base game around this mechanic. Keep things simple.
  • Sketch out full design on paper
  • Prototype on paper if possible and play-test before coding even begins.
  • $$Reward!!$$ Twenty bucks at your favorite hobby shop
Program game you designed
  • Choose the platform that you wish to see your game released on. This will inherently narrow down the set of tools and programing languages you will use.
  • Settle on a set of tools. Research cost (if any) of using tools.
  • Program game using simple shapes and sounds
  • $$Reward!!$$ A new art supply
  • Upgrade graphics and animation of game.
  • Hire friends for pizza to play-test game
  • Polish until bug free
  • $$Reward!!$$ Meal at a restaurant
Publish game
  • Seek advice from local game devs if possible
  • Find out what it means to make a company / studio in Newfoundland
  • Send prototypes of media to try and generate buzz
  • Plan for associated costs of publishing product
  • Publish!
  • $$Reward!!$$ Release PAR-TAY!

Whew...O.K....now we're actually getting somewhere. Looks like it's going to be a long journey, but a worthwhile one. If you ever make a list like this, make sure that your rewards are meaningful to you. Also if you are in need of more constant motivation, you could even give yourself a small reward after each and every step. Really, now all I'm missing are self-imposed deadlines. I'm hoping the promise of reward will help to push me forward, but I may find that I'm still wavering and need to set deadlines.

I also know that some of these steps to the milestones may need to be broken down even further. For instance, "improving the graphics of the game" may result in me having to learn Blender, which would be a whole new set of steps. That's the beauty of setting flexible goals...they can flex!

Well, this blog post is certainly hefty enough, so I'll wrap up here. Remember, no matter how big your goals, be they to create a popular game, write an award winning novel, or creating an acclaimed work of art, they are always obtainable. You CAN do it, but you won't make it there by reveling in passivity. Fate won't make it happen. Take small steps on your journey every day. I look forward to reading all about all your successes!

gl hf!