Post

 Resources 

Console

Game Design


Programming


The Engine


I hate to state the obvious, but it's what I'm good at: Make your engine solid. Do not skimp on the development time you spend here, you will pay for it later if you do. Would you rather buy a car with a German motor, or something made in Cuba? Spend time on your engine until it is complete, never assume that you can patch it up and hold it together as you go. Duct tape can only do so much, even Cuban duct tape.

Make the engine as general as possible. If you hard code anything naughty into it you deserve to be thrown in the Sarlacc pit. Allow for as many details as possible to be file driven. Every world, level, or character should be loaded from a file created by your in-house tools. Try not to describe AI in code either, create a scripting language and allow everything to be interpreted at runtime.

I am a proponent of object-oriented design. Any performance decrease you may encounter will likely be negligible since the one-man army is rarely trying to create cutting edge polygon pounding products like the big-boys. Lone developer games need to impress gamers with their style, originality, and gameplay, not speed and flashy effects. You will therefore likely have enough leeway to incorporate an object-oriented design. This will allow you to integrate new unexpected items (and they will arise, no matter how hard you try to stick to your design doc) more easily and it increases the overall robustness and reusability of your code. Reusability is of prime importance to small developers; anything that can cut down production time for the next game is like money in the bank.

Tools


Gentlemen, start your engines! This is where all the hard work you put into your game engine will start to pay off. In the real world of game development, the programmers are rarely the ones designing the levels or setting up the world. They need to create user-friendly tools to allow game and level designers to interface with their beautiful engine. Things such as level builders, character animators, AI script writers, etc, will all facilitate and expedite the jobs of the designers.

I can hear the one-man army saying "I don't need tools, I do it all myself," but I don't believe this to be true. Your game will end up looking more polished and refined in the end if you have easy to use tools at your disposal with which you can tweak your levels and get the most out of your engine. It is very hard to tell what will be fun before you actually try it, so allowing easy modifications through the use of tools will give you the power to tweak up the level of fun with minimal effort.

Make your tools as reusable and general as possible while still maintaining their utility. Think ahead to your next game (or games) and try to ensure that the tools as a whole, or at least some of the code, will still be useful. Lone developers are usually not as affected by hardware advances as are big developers, so tool reuse is quite plausible and beneficial.

The Interface


The interface should be as unobtrusive as possible. When the player doesn't need it, it should ideally not even be there. Make actions available to the user only when they can be performed, give the user information only when it is needed or requested. By accomplishing these goals you can ensure that the player never loses his sense of immersion in the game world. The longer you can hold him in there, the better. People play games as an escape or release, they do not want to have to deal with uninteresting or extraneous information like they do in real life.

In order to keep the player immersed, seek to avoid any harsh 'reality checks' such as loading screens or menus that don't seem to flow with the game. It's similar to what happens when a 'blue screen of death' pops up while you're madly coding. You are awoken from your WinDoze and you realize that the world is not a happy place full of icons, menus, and 'for loops'. Don't do this sort of thing to your players; you know how much you hate it when it happens to you.

Intuition is the language of the soul, and the game player. Seek to exploit any previous knowledge or habits that your target audience will have. If you're making an RTS, for example, ensure that you include items now standard to the genre such as click-and-drag selecting and shift-click to add to group. Try to use obvious, unambiguous, and habitual metaphors for your buttons and mouse cursors. When a player can't walk in a certain direction, change the cursor to the big red 'no' symbol, or give audible feedback; ensure that you give him ample queues to that effect.

By far, the greatest thing about interface design is that it is just as easy for a lone developer to create an outstanding interface as it is for a large developer. It costs little to implement these sorts of ideas since all it takes is ingenuity and a little savoir-faire. Set your phasers on stun and try to wow your audience and out-do the big-boys. This is one of the few areas where you may succeed.

Multiplayer


Is multiplayer required for your game? Most people nowadays are quick to say yes to this question without properly thinking it through. In truth, not all games really suit multiplayer action. I know I wouldn't want to play a turn-based strategy (TBS) against seven people over the internet; it's bad enough waiting for the computer to take its turn in a single player TBS game, let alone a human. If nobody is going to play it, should you bother to include the option? If you feel your game will sell more units if it has the word "multiplayer" on the box, then go ahead, but if you think that decreasing development time is more important, then I'd advise you to drop it.

Now, truly there are many games that do suit multiplayer and would fail without it as an option, the RTS and FPS genres to name a few. Deciding on the solution you'll use for programming the multiplayer feature is a critical one for the lone developer. You likely have limited resources and paying to maintain a dedicated server is probably not at the top of your 'things to spend my money on' list. You need to put a lot of thought into whether you're going to go with a peer-peer or client-server system.

Peer to peer (P2P) is definitely the way to go - if you can make it work. Sending packets directly between the systems involved is certainly faster than bouncing them off of a server, but it can start to become costly as the number of players involved begins to rise. A two player game is ideally suited to P2P architecture, but as more players are added each system has to send (and receive) increasing numbers of packets in order to inform every other system of its game state. Packet loss or lag can cause fragmentation, and your code would need to be quite robust to hold high numbers of lagging systems together in a P2P state.

With a server, however, the burden on the individual systems is lightened. A client's sole duty is to keep the server up to date, and it is the server's responsibility to inform the appropriate clients of these updates. The indirect nature of information transfer in a client-server mode can increase lag, however. Data flows from client to server to client rather than from peer to peer. The intermediate server step can add to delay and have adverse effects. Ever play that old game 'telephone'? Similar misunderstandings can occur as a result of lost or late packets from the server. Fragmentation is not an issue, however, the server can hold the world together effectively, only losing individuals if their lag becomes too great.

Setting up a dedicated server of your own can be costly and is obviously a deterrent for use of the client-server method, but allowing one of the players to act as a server can solve the problem. If the player with the fastest computer and best connection starts the game (acts as the server) then this method can be employed effectively. It is a tempting alternative indeed for the lone developer, and one that I would recommend investigating.



Next: Testing | 1 | 2 | 3 | 4 | 5

2 comments

Article Console

Article by:

Ryan Clark


Date: 2000 Jan 19


Navigate



2 comments

Latest comment


by: Jamie

What a great article. Well written and interesting.

Post a Comment


Printer Friendly



Copyright © 2002 - 2004 Eric Coleman, Peter Kuchnio , et. al.
There have been 17 visitors within the last 20 minutes
RSS News Feed