Anatomy of Game Development
CowboyRobot writes "ACM Queue has an article titled Game Development: Harder Than You Think that looks at the complexities of creating a modern game, in comparison with the relative simplicity of doing so ten years ago.
My understanding of the industry is that they have too many designers and not enough programmers. From the article: 'Now the primary technical challenge is simply getting the code to work to produce an end result that bears some semblance to the desired functionality... There's such a wide variety of algorithms to know about, so much experience required to implement them in a useful way, and so much work overall that just needs to be done, that we have a perpetual shortage of qualified people in the industry.'"
Yea.
It's the usual story. Companies demand experience on all posts, and then whine about lack of "qualified" applicants. While ignoring the fact that they themselves are creating a qualification that's impossible to get.
As a programmer and game developer myself I have experienced first hand the level of complexity that game design and development has approached in recent times.
It used to be, and back in the day when I started programming my first games, that a single "Lone Wolf" programmer (Like I have always been) could develop his own game.
However, now with the crazily complex 3D games, there has to be a whole army of developers, artists, designers, programmers, etc. just to create a game.
Unfortunately that damages lone wolf developers such as myself, in that we cant keep up with the demands of such a large production budget!
Anyway, I have attempted to work as good as I can, see what you think of my game, it is a bit difficult to wear the hats of Programmer, Designer, Developer, Musician, and Artist!
http://abaddon.igerard.com
Post apocalyptic gaming goodness
Yeah, games were easy to make ten years aog, i coded a few but it was a "code" challenge, now it's different, most of the time someone built a nice engine and everyone make content for it, that's why many studios just focus on design, don't get me wrong, design it's important but programmers don't qualify often for game industry unless you want to built something new, something that is not a goal for many companies.
But hey! What do i know? I live in Mexico, there is a small or not-existant game industry at all!
--
No sig found.
One thing I've noticed with a lot of open source game-directed projects is that they feed off each other as needed.
You can take jim's physics library and link it into fred's ROAM engine, slap tommy's interface toolkit on top if it then shoehorn bob's network protocol in and actually get a usable piece of software out of it. The SDL libraries are one obvious example of this but it's far from the only place I've seen it.
No it won't be the next jaw dropping engine that will command everyone's respect but that's not really the point, the point is as long as you have enough basic intelligence to learn an API and can manage to glue several of them together the open source world is plenty willing to fill in the gaps of your knowledge.
It isn't really an open source specific thing, this mode of thinking can be found under windows as well, but for obvious reasons it seems to flourish best in the linux world. It's not mature area of development yet, but the foundations are there. As the barrier of entry into developing commercial games increases, so to do the free software options.
I think it'll be neat to wait and see if open source can evolve to present a solution to the "kitchen sink" problems that current game development has to deal with.
Flash is a bad word for some folks here, but it really excels as a platform for simple, addictive, and fun games that can be easily spread to the world.
Working in a restricted environment like Flash eliminates a lot of the hassles described in the article. It's arguably easier to write, say, King's Quest now than it would have been 20 years ago,
what needs to happen, is we need a complete game enviroment to creat games, not just a game engine, but a complete piece of software that doesn't need any programming at all. think of using maya to do all your 3d models and animations and worlds for the game, and instead of exporting these out to an engine you keep it all under one roof, give the models properties like colision, key bindings to play this animation when this key is pressed in this direction etc. Of course programming should be en extensible part of it to add funtionality that might not be in it. so essentially a 3d applicaiton with a game engine at it's heart containing everything you would need to make a game. This could be done right now with directX9. The single man band could be back if this happened.
Lua is the embedded interpreted language of choice for game designers. Lua's great for writing the game AI (you don't have to wait for a half hour C++ build). Lua's under 200K, threadsafe, has good OO abstractions, integrates with C very easily, and most important of all - it has a commercial friendly license.
I remember when I was 13 writing ASM code code aspiring to write something like Monkey Island -- that was a very attainable goal. I had a friend who was a very good artist, he would whip up a some cells in autodesk animator, I had written a little converter, and we could walk our little guy around the screen against a background. Now truth be told I had NO idea how a game engine worked at 13 years old, but we did end up writing a few neat demos and bbs loaders (I was a weird kid).
Now the level of art work and technical knowledge required to make something that looks half professional is off the scale. I have a great game idea that I don't think I'll ever be able to realize. Thats the loss I mourn... kids wont ever have the fun I had trying to make a game, and we might never be exposed to some new ideas these kids might have.
Religion is a gateway psychosis. -- Dave Foley
There's still a market for the simpler games. Cell phone games are big. The Game Boy Advance is big and anyone can code for it. Distribution is another matter but there's nothing stopping developers from creating a product to get their feet wet. Worst case you make it a pay per download or give it away free as an ad for your PC games.
2D used to be the best choice simply because you could do infinitly better looking graphics. 3D is now getting up to par but there's really no reason not to still use 2D. The latest Wario game just took a tile based game and made it a cube based game in 3D. Not a programming challenge at all. Instead of DrawTile you just use DrawCube, increase the dimensions of your map and voila! 3D platformer. I whipped up the basic components in all of a few days (running, jumping, standing on and above things, collision).
The market is so saturated with 3D first person shooter crap that there's a huge market for games that are simply fun to play. You are not going to get rich from a 3D game so why bother making a crappy 3D game in a lame attempt to milk the 3D scene? Make the best of what you can do, even in 2D and it may not make you rich but at least it won't be half-assed crap.
Stop worrying about the million dollar budgets and just worry about making a fun product.
The best application of 2D is in puzzle games which are ginormous. The hardest part is comming up with the new puzzle concept. Programming them is rediculously easy and they're cheap. Which makes it more likely people will buy them as time killers at work to replace solitaire and minesweeper.
Ben
Work Safe Porn
I'm tired of this, I really am. When will guys like this admit that everyone else works for a living too? No, games are not always very simple. Thanks buddy, we know.
All this "Life is so hard! My industry is so cruel!" is just attention grabbing to get readers to an otherwise rather dry review article on the elements of commercial game production.
In other news, games are unimportant. All but a very few games are played by practically no one, and those that do play it throw it away after a couple-dozen hours. Where did this conception that making games was so exciting and dramatic come from? Just because so many other areas of software development are even more mind-numbing doesn't make gamedev automatically interesting!
Design me a new spoon. Design me a spoon that will be sold across the world, used by millions on a daily basis for years of their life. Design me a brilliant spoon, and I will be impressed.
Here is an interactive game in one line of basic code (ok 4 statements, but you could write it in one basic numbered statement). Just showing what could be done with minimal code.
You control an object at the top of the screen it will move left if you don't push shift, right if you do. Blocks "###" are printed at the bottom of the screen and scroll up. If you crash into a block it is game over. Quite complex for 1 line. I would walk into stores displaying computers without games that attracted the kids, type this in and have fun.
I had versions for PET, VIC20, C64, APPLE II, TRS80 machines
Adjust for my bad memory and learning of many other languages since then.
0 poke 32788+a,65; a = a + peek(515)*2-1; print tab(36*rnd()),"###"; if (peek(32788+a) == 32) goto 0;
clear the screen, scroll to the bottom and run
Break down
A) poke - puts player "A" set by ascii 65 at the middle of the top line of the screen plus the offset a
B) adjust the offset a of the players position dependent on the state of the shift key
C) print - puts a block in a random position on the next line. If this is the bottom of the screen, we get a scroll and everything moves up and the players object is cleared off the top
D) check the new position of the player to see if it is clear
Majic numbers
32788 address of the middle of the top line of the screen
65 character for players object
36 + width of block is 1 less than the width of the screen, in this case 36+3 40
515 shift key status updated by system interrupt
Let look at a few examples:
Games have ballooned in complexity-
I think it is safe to say that nearly all software has grown in complexity. For traditional client-centric applications, we have seen interfaces grow more complicated and sophisticated. Unlike software designed in 1996 nearly all applications are now internet aware. Even your wordprocessor has the ability to communicate via the internet, to interact with email and offer colaboration functionality.
Very little software is designed to operate in the vacuum of a stand-alone workstation anymore. Apparently this is also true of games. Wow, brilliant insight.
Tools-
The author is probably correct about a lack of competing products for Windows C++ development. Still Visual C++ is quite a good IDE. A lot of the issues raised are more generic complaints about C++ development than anything specific to game development. While game programming has its own special requirements- 3D rendering for example- other types of software has different but equally complicated needs. For example, the complexities of interating with a wide variety of back-end databases, message-queueing software and legacy mainframe systems add layer up layer of complexity to most business applications. The specific requirement is game-development specific but the problem is one which all complex projects face.
Let face it, the need for source control systems which are able to manage arbitary content is hardly unique to game development. Nearly every project I have ever seen runs into source control issues.
Workflow issues
Now the issue of re-compilation times, debug build load times and other development issues are a problem for ALL big software development projects. Multi-platform issues are equally problematic. This is hardly restricted to game development
Third party components-
Always an interesting issue for application development and not exactly one confined to game development. Think about applications you have seen which manipulate data and display charts and graphs. How many of those apps actually have custom written charting libraries. Hardly any. Nearly ever application OEMs someone's ibrary with all the associated headaches that come with emebedding components over which you have no control. That is the trade-off you make. You save 10 man-years of effort in developing a graphing library and you lose control of the source code, bug-fixing, release cycles and the ability to add new, special or project specific functionality. (Unless of course you go OSS). Big deal. Highly Domain Specific Requirements-
This is the dumbest section in the article. All software has some domain specific requirement otherwise it wouldn't be an application, it would be some sort of generic framework. Games clearly have a set of requirements not found in typical application software- 3D graphics, AI and sound effects for example. However if we look at network security applications for example, I think that we can safely say that there are just as many complex, domain specific requirements involved in TCP/IP protocols, packet sniffing, network tracing , etc.
Profiling-
Profiling all code is hard. Identifying bottlenecks in code which involves a great deal of user interaction is very complicated. Hardly specific to game programming.
Reality check time. All the article says is in 2004 that users expect a far more sophisticated product than have been required in 1996. Engineering complex products is difficult. Welcome to the software industry.
I completely agree, there is also a hell of a lot of difference between having a great game 'idea' and having a great game 'idea' that is practical and fun.
There are countless examples of games that are great in theory, but poor in practice(I'm looking at you Black & White). Yet relatively few that have no business in being so great(And here I'm looking directly at a certain Tetris), and somehow pull of all those intangibles such as playability.
Even taking a great idea that 'will' be purely playable and making it so, is a great skill that only few can accomplish.
It amazes me how certain designers can almost routinely pull off the impossible.
Although I'm a programmer, I've spent time learning GIMP, blender, Sodopi (and a load of applications from other skill domains) - when no one is regulating your use of software, you're free to teach yourself what ever you want.
...free software is the way the world *should* work
It's not a qualification, but you can easily learn enough to bluff through an interview. (so long as you can tell that the job is really just a programming job with too many requirements written in the spec to make a manager feel like she's doing her job.)
Please help publicise swpat.org - the software patents wiki
(I wrote the article).
The problem is that games are just too big and cutting-edge for this kind of design approach to work. You can only do this for relatively simple problems that you completely understand. Games are the opposite of that. They have to be designed incrementally -- if you just sat down and tried to make a bunch of headers, without building the implementations, you would eventually find that your interfaces were completely wrong.
Interface classes can help a little, but only a little. The problem isn't so much having private data in a header file (though that is a problem) so much as the sheer interconnectedness of the dependencies in a project like this. That's the point of those diagrams on the first page of the article. Look at the one for a Massively Multiplayer Game and then think about what the header structure for that is like (considering that each box is not a file, but a cluster of files).
For what it's worth, Yes, I am a professional Game Programmer.
From a programming standpoint, 20 hours of high quality game play is just as difficult as 60 hours. The bulk of the work for an additional 40 hours is done by artists and level designers creating the additional content.
And a shorter game does not aid its 'beat-ability'. It just aids its re-playability. Most 60 hour games can be beaten in 20 hours or less, typically, you just skip the side quests.
And doing a 20 hour game, but making more of them reeks of what EA does with expansion packs. Its a very shallow marketing ploy.
I would rather play one long well made game, then 1 short well made game and 4 short crappy games tossed off with the aim of turning out a profit.
END COMMUNICATION
It's the usual story. Companies demand experience on all posts, and then whine about lack of "qualified" applicants. While ignoring the fact that they themselves are creating a qualification that's impossible to get.
Reminds me of the ads I used to see when Unix was first catching on. Entry-level pay jobs requiring 5 or 10 years of Unix experience, obviously written by HR people with no clue.
I guess Kernighan, Ritchie, Thompson, Bourne, and Plauger weren't tempted into leaving Bell Labs by the pay scale. B-)
Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
Yeah. This is a problem, but it's actually one that the industry is aware of.
Of course some of this is due to publishers just being imaginative and wanting to pump out the same old dreck as some other game that did pretty well. But really a lot of it has to do with games being hard to make. Often games have to cut tons of features/levels/testing in order to make it out the door only a year late. So usually the game you buy that is mostly fluff, that you're disappointed with, is not much like the game that the developers originally set out to create.
As we become more comfortable with basic technology (3D graphics and physics and stuff) it will probably become easier to get the basics done. At some point a lot of the risk will be mitigated, and you'll start seeing more creativity because we start developing with a higher baseline. Hopefully within the next few years!
I work in the industry. You can read some of my earlier slashdot posts to see where exactly I work.
Games are very complex pieces of software these days for sure. Graphics, audio, networking, even UI is a big deal. Just getting something working is only the beginning. Then comes the real work in making your game engines perform such that you are hitting your framerates in every area of the game.
It used to be if your main loop was hitting your framerate, you were done. This is because you did all of your I/O up front (the loading screen). Your user input was always polled each frame, so unnecessary state changes that could possibly disrupt your performance were minimal. Largely it was your graphics theory knowledge that made or break your engine.
Nowadays it is becoming more non-deterministic due to other forms of disruptive state changes. Graphics have become more complex and networking creates state changes that often don't happen within one frame (e.g. picking up an item in Quake 3 requires the server to acknowledge this).
People complain about why studios ask for at least 5 years of experience and on top of that ask for prior experience with a particular console. Getting something working fast isn't the goal. It's getting it working correctly.
How relationships with publishers changes priorities is an entirely different discussion, however...
You should never take life too seriously - You'll never get out of it alive.
Do you know Counter-Strike? Its a mod. Do you know DoD? Its a mod. Actually some very interesting games comes as a devirative work of other game. That safe a lot of work, whatever can be shared, dont need to be recreated (the engine, textures, sounds, menus, etc...) and you have instantly a lot of users.
So you make a tiny mod for Half-Life, and you have a 1 millon potentian userbase. Cool or not?
Making mods shortcut the problem of very very long development process.
posdata:
Recently a quake guru (FrikaC) has make a Tetris clone in only 2 hours of work. You can download a stand-alone version here:
http://telejano.berlios.de/option/qtetris1.zip
-Woof woof woof!
We would much rather have that manpower spent to make the system compile programs quickly, or generate efficient code,
Bingo, I think the future of mmg's depends on this. People increasingly will want more variation in gameplay. Concepts like an Architecture Generation Engine (AGE) would benefit greatly from this. An AGE makes a multiplayer map/scenario different every time you play it, so you have to adapt all the time. The ability to randomly generate and compile the new map very quickly, is very important. This for me is the neatest thing in gaming going on right now. Great article!