Skills Needed to Design either: Quake, Quake II, Q3A, Unreal, oUnreal 2003
I'm wondering, what kinds of skills do you need to design first person shooter games like those? For any of you who have designed them, would you need to be very familiar with linear algebra/abstract math/matrix theory type things? How advanced would you need to be in physics? Would you have to be a genius to design those kinds of games, or could you just do it with hard work and a little bit of help from the API? What are your thoughts.
Unreal games have their own scripting language, UnrealScript. The engine takes care of most of the low-level physics/collision/graphics stuff, which is where the linear algebra plays huge parts. So you don't have to worry about that stuff as much when you write extensions in unrealscript.
Quake, I don't know; I believe you write extensions in C++.
The problem is that these game engines tend to be under-documented.
You end up spending a lot of time reading half-written help documents from three years ago.
No watter what 3d programming you do you need at least a reasonable grasp of maths. I'd say in general the lower the level of the API the better you;re maths would have to be.
It just occurred to me that maybe you meant the skills needed to design a game like Quake or Unreal from the ground up.
In that case, you really need math and physics knowledge a lot.
(Well, the math and physics necessary are probably pretty basic; freshman and sophomore undergraduate level at worst; but there's a lot of it.)
Plus there is just no end of graphics techniques to get the right visual effects.
From my (albeit limited) experience, I'd say the hardest part isn't the math, it's just the tremendous amount of detail. And the human brain is wired to see small details in the images you're trying to reproduce on-screen, so small bugs have even bigger effects than in other fields.
Not a weekend hack.
Lets not forget AI, sound, any networking you want to include - the lot. And then you need to get the models and textures done, which is ultimately more work than the programming.
To design the games or to actually write them?
You probably need lots of playing experience and some creativity, as well as knowledge of the limits on your 3D engine in order to design a good game on paper.
To actually write one, you'd probably need:
- 2D, 3D and sound editors, as well as code to load those files
- A system for representing the world and the various objects (enemies, powerups, misc. objects) within it, and a level editor to create these worlds easily; probably you'll also need a simple trigger-based scripting system for scripted missions where things happen after the player completes a goal
- Knowledge of general 3D graphics theory: the rendering pipeline, transformation matrices, multitexturing, various types of light sources, vertex shaders (?), special effects (fog, shadows, water waves, transparent bitmaps for fire/rain/explosions, etc)
- A good enough representation of physical objects that you can prevent them from going through each other (this is harder if they are arbitrary 3D meshes), and calculate their new velocity and position each frame based on gravity, friction, and interactions with other objects (probably using conservation of momentum or kinetic energy)
- An AI system for enemies: probably a finite state machine which can give them various goals/missions, and pathfinding and weapon targetting routines
- Miscellaneous user interface features: a minimap/radar, a way of selecting weapons, a main menu and level selector/loader, code to serialize/deserialize the game state for saving a game, code for networking (probably using UDP).
A good book on creating games would probably contain most of the things you'd need. I've seen many of these. Check Amazon or your local book store maybe.
I don't think a simple first person shooter with most of the main features of Quake or Unreal would be hard to make. However those designers had two things that made the games successful and would be very hard for a single person to do alone:
1) Time. Lots of it to add details, fix bugs, create artwork/sound, design challenging levels, and even write and document all the basic routines and object libraries that make up the game.
2) Heavy optimization. Those games look good because almost everything is optimized to go the fastest it can, so there can be more polygons, larger textures, more special effects, more objects and particles, larger levels, and so on. A game with the same gameplay/strategy features as Quake or Unreal but with 3-4 times lower polygon count, blurrier textures, many of the particle effects gone, and smaller levels would be a lot less successful.
Mateia at 2007-7-14 20:55:54 >

You seem to know what you are talking about, I was wondering if you ever read a/some book/books to give you a boost, cause I certinaly need one!!
I've read "Tricks of the Windows Game Programming Gurus", by Andre LaMothe, a very comprehensive book about making Windows games using C++ (it could be applied to any language though), and "Game Programming Gems", a collection of articles on specific topics by different authors. I haven't looked at these kinds of books recently though so there probably are better ones out there.
Mateia at 2007-7-14 20:55:54 >

I don't want to discourage you, but the possibility of one person having all the skills to create game like Quake3, for example, is very slim.
I work for a game company, and even though we don't produce games as advanced as cutting edge as the once you mention (at least when they were released) we have a large number of people on each project.
There are programmers, 3D-artists, 2D-artists, sound people(outsourced), producers, production assistants, game-designers, QA-people, and more...
Don't expect to write the next big hit on your own. But I do believe that with enouh practice you should be able to put together a decent FPS game, it won't by far look as good as the commercial games, but if the programming is good maybe you can use it as a demo to get a job in a game studio. Then you would have the resources to really create cool stuff...
On another note, after going to E3 in LA this spring, I kind of feel that the world doesn't need any more first person shooters. New ideas, anyone? Please? But that's just my personal opinion :-)
**** right. We need some altogether new genres. Not just rehashes of old ones and not just combinations of old ones. Something that no-one has even tried before...
I feel I should contribute to this; (eventually I want to put together a portfolio and apply at EA, but first things first).
For mathematical skills you'll want to take the following courses in school (or just swipe the textbook from a store):
- Linear Algebra
- Grade 12 physics
You don't need extravagant physics, in fact the Pythagorean theorem goes a long way in game programming. Your basic F = ma, p = mv, Ke = 1/2mv^2 physics formulas is all you need.
In Linear algebra, you will learn how to make transformation matrices and perform vector math. For more advanced topics, you'll learn to create a normal on a plane using only three verticies on that plane; that's called "cross product", then there's always the popular "dot product", which the Quake II engine uses to calculate the span of the "power screen".
Linear algebra is usually a second year mathematics course at university.
For artificial intelligence, you will find a little bit useful in mathematics / artificial intelligence courses at school. In particular, look-up the following things:
- Dyjkstra's algorithm & Digraphs (Used for pathfinding)
- Binary trees & Binary search algorithms (Used for decision making)
Hope this helps, good luck.
- Jonathan Neufeld
extollIT Solutions
http://www.extollit.com
wow, thats some heavy duty stuff. It seems that you MUST be good in math and physics to be a decent game programmer. How difficult is it to simulate physics in coding? Like, simulating a jump or climbing a simple terrain feature, falling, etc. It cant be that hard, can it?
Jumping and falling isn't hard; you just simulate gravity.Climbing terrain can be trickier as you need to represent the terrain, and collisions with the terrain.Do you have a specific game you want to make?
no, not yet, but I just think it would be fun. it seems that if you can get physics and collisions, then you can do anything.
Put it this way - if you need to ask, you don't got it (where's that from?)I've been game programming for years and my most complete "Quake, Quake II, Q3A, Unreal, oUnreal" game is a half-done wolfenstein 3d clone. The logic is OK-ish, but as above, 3d-math is a pain in the ****