A contemporary video game may include advanced physics, artificial intelligence, 3D graphics, digitised sound, an original musical score, complex strategy and may use several input devices (such as
mice
,
keyboards
,
gamepads
and
joysticks
) and may be playable against other people via the
Internet
or over a
LAN
. Each aspect of the game can consume all of one programmer's time and, in many cases, several programmers. Some programmers may specialize in one area of
game programming
, but many are familiar with several aspects. The number of programmers needed for each feature depends somewhat on programmers' skills, but mostly are dictated by the type of game being developed.
Game engine programmer
edit
Game engine programmers create the base engine of the game, including the simulated physics and graphics disciplines.
[4]
Increasingly, video games use existing
game engines
, either
commercial, open source or free
. They are often customized for a particular game, and these programmers handle these modifications.
Physics engine programmer
edit
A game's physics programmer is dedicated to developing the
physics
a game will employ.
[5]
Typically, a game will only simulate a few aspects of real-world physics. For example, a space game may need simulated
gravity
, but would not have any need for simulating water
viscosity
.
Since processing cycles are always at a premium, physics programmers may employ "shortcuts" that are computationally inexpensive, but look and act "good enough" for the game in question. In other cases, unrealistic physics are employed to allow easier gameplay or for dramatic effect. Sometimes, a specific subset of situations is specified and the physical outcome of such situations are stored in a record of some sort and are never computed at runtime at all.
Some physics programmers may even delve into the difficult tasks of
inverse kinematics
and other motions attributed to game characters, but increasingly these motions are assigned via
motion capture
libraries so as not to overload the
CPU
with complex calculations.
Graphics engine programmer
edit
Historically, this title usually belonged to a programmer who developed specialized
blitter algorithms
and clever optimizations for
2D graphics
. Today, however, it is almost exclusively applied to programmers who specialize in developing and modifying complex 3D
graphic
renderers. Some 2D graphics skills have just recently become useful again, though, for developing games for the new generation of
cell phones
and
handheld game consoles
.
A 3D graphics programmer must have a firm grasp of advanced mathematical concepts such as
vector
and
matrix
math,
quaternions
and
linear algebra
.
Skilled programmers specializing in this area of
game development
can demand high wages and are usually a scarce commodity.
[
citation needed
]
Their skills can be used for video games on any
platform
.
Artificial intelligence programmer
edit
An AI programmer develops the logic of time to simulate intelligence in enemies and opponents.
[6]
It has recently evolved into a specialized discipline, as these tasks used to be implemented by programmers who specialized in other areas. An AI programmer may program
pathfinding
, strategy and enemy tactic systems. This is one of the most challenging aspects of game programming and its sophistication is developing rapidly. Contemporary games dedicate approximately 10 to 20 percent of their programming staff to AI.
[7]
Some games, such as
strategy games
like
Civilization III
or
role-playing video games
such as
The Elder Scrolls IV: Oblivion
, use AI heavily, while others, such as
puzzle games
, use it sparingly or not at all. Many game developers have created entire
languages
that can be used to program their own AI for games via
scripts
. These languages are typically less technical than the language used to implement the game, and will often be used by the game or level designers to implement the world of the game. Many studios also make their games' scripting available to players, and it is often used extensively by third party
mod developers
.
The
AI technology used in games programming
should not be confused with
academic AI
programming and research. Although both areas do borrow from each other, they are usually considered distinct disciplines, though there are exceptions. For example, the 2001 game by
Lionhead Studios
Black & White
features a unique AI approach to a user controlled
creature
who uses learning to model behaviors during game-play.
[8]
In recent years, more effort has been directed towards intervening promising fields of AI research and game AI programming.
[9]
[10]
[11]
[12]
Not always a separate discipline, sound programming has been a mainstay of game programming since the days of
Pong
. Most games make use of audio, and many have a full musical score. Computer
audio games
eschew graphics altogether and use sound as their primary feedback mechanism.
[13]
Many games use advanced techniques such as
3D positional sound
, making audio programming a non-trivial matter. With these games, one or two programmers may dedicate all their time to building and refining the game's sound engine, and sound programmers may be trained or have a formal background in
digital signal processing
.
Scripting tools are often created or maintained by sound programmers for use by
sound designers
. These tools allow designers to associate sounds with characters, actions, objects and events while also assigning music or atmospheric sounds for game environments (levels or areas) and setting environmental variables such as reverberation.
Though all programmers add to the content and experience that a game provides, a gameplay programmer focuses more on a game's strategy, implementation of the game's mechanics and logic, and the "feel" of a game. This is usually not a separate discipline, as what this programmer does usually differs from game to game, and they will inevitably be involved with more specialized areas of the game's development such as graphics or sound.
This programmer may implement strategy tables, tweak input code, or adjust other factors that alter the game. Many of these aspects may be altered by programmers who specialize in these areas, however (for example, strategy tables may be implemented by AI programmers).
In early video games, gameplay programmers would write code to create all the content in the game?if the player was supposed to shoot a particular enemy, and a red key was supposed to appear along with some text on the screen, then this functionality was all written as part of the core program in
C
or
assembly language
by a gameplay programmer.
More often today the core
game engine
is usually separated from gameplay programming. This has several development advantages. The game engine deals with graphics rendering, sound, physics and so on while a
scripting language
deals with things like cinematic events, enemy behavior and game objectives. Large game projects can have a team of scripters to implement these sorts of game content.
Scripters usually are also game designers. It is often easier to find a qualified game designer who can be taught a
script language
as opposed to finding a qualified game designer who has mastered
C++
.
This programmer specializes in programming
user interfaces
(UIs) for games.
[14]
Though some games have custom user interfaces, this programmer is more likely to develop a
library
that can be used across multiple projects. Most UIs look 2D, though contemporary UIs usually use the same 3D technology as the rest of the game so some knowledge of 3D math and systems is helpful for this role. Advanced UI systems may allow scripting and special effects, such as transparency, animation or particle effects for the controls.
The
joystick
was the primary input device for 1980s era games. Now game programmers must account for a wide range of input devices, but the joystick today is supported in relatively few games, though still dominant for
flight simulators
.
Input programming, while usually not a job title, or even a full-time position on a particular game project, is still an important task. This programmer writes the code specifying how input devices such as a
keyboard
, mouse or joystick affect the game. These routines are typically developed early in production and are continually tweaked during development. Normally, one programmer does not need to dedicate his entire time to developing these systems. A real-time motion-controlled game utilizing devices such as the
Wii Remote
or
Kinect
may need a very complex and low latency input system, while the
HID
requirements of a mouse-driven turn-based strategy game such as
Heroes of Might and Magic
are significantly simpler to implement.
This programmer writes code that allows players to compete or cooperate, connected via a
LAN
or the
Internet
(or in rarer cases, directly connected via
modem
).
[15]
Programmers implementing these game features can spend all their time in this one role, which is often considered one of the most technically challenging.
Network latency
, packet compression, and dropped or interrupted connections are just a few of the concerns one must consider. Although multi-player features can consume the entire production timeline and require the other engine systems to be designed with networking in mind, network systems are often put off until the last few months of development, adding additional difficulties to this role. Some titles have had their online features (often considered lower priority than the core gameplay) cut months away from release due to concerns such as lack of management, design forethought, or scalability.
Virtua Fighter 5
for the
PS3
is a notable example of this trend.
[16]
The tools programmer
[17]
can assist the development of a game by writing custom tools for it.
Game development Tools
often contain features such as script compilation, importing or converting art assets, and level editing. While some tools used may be
COTS
products such as an
IDE
or a graphics editor, tools programmers create tools with specific functions tailored to a specific game which are not available in commercial products. For example, an adventure game developer might need an editor for
branching story dialogs
, and a sport game developer could use a proprietary editor to manage players and team stats. These tools are usually not available to the consumers who buy the game.
Porting
a game from one
platform
to another has always been an important activity for game developers. Some programmers specialize in this activity, converting
code
from one operating system to work on another. Sometimes, the programmer is responsible for making the application work not for just one operating system, but on a variety of devices, such as
mobile phones
. Often, however, "porting" can involve re-writing the entire game from scratch as proprietary
languages
, tools or hardware make converting source code a fruitless endeavour.
This programmer must be familiar with both the original and target operating systems and languages (for example, converting a game originally written in
C++
to
Java
), convert assets, such as artwork and sounds or rewrite code for low memory phones. This programmer may also have to side-step buggy language implementations, some with little documentation,
refactor code
, oversee multiple branches of code, rewrite code to scale for wide variety of screen sizes and implement special operator guidelines. They may also have to fix bugs that were not discovered in the original release of a game.
Technology programmer
edit
The technology programmer is more likely to be found in larger development studios with specific departments dedicated solely to
R&D
. Unlike other members of the programming team, the technology programmer usually isn't tied to a specific project or type of development for an extended length of time, and they will typically report directly to a CTO or department head rather than a game producer. As the job title implies, this position is extremely demanding from a technical perspective and requires intimate knowledge of the target platform hardware. Tasks cover a broad range of subjects including the practical implementation of algorithms described in research papers, very low-level assembly optimization and the ability to solve challenging issues pertaining to memory requirements and caching issues during the latter stages of a project. There is considerable amount of cross-over between this position and some of the others, particularly the graphics programmer.
In smaller teams, one or more programmers will often be described as 'Generalists' who will take on the various other roles as needed. Generalists are often engaged in the task of tracking down bugs and determining which subsystem expertise is required to fix them.
Lead game programmer
edit
The lead programmer is ultimately in charge of all programming for the game. It is their job to make sure the various submodules of the game are being implemented properly and to keep track of development from a programming standpoint. A person in this role usually transitions from other aspects of game programming to this role after several years of experience. Despite the title, this person usually has less time for writing code than other programmers on the project as they are required to attend meetings and interface with the client or other leads on the game. However, the lead programmer is still expected to program at least some of the time and is also expected to be knowledgeable in most technical areas of the game. There is often considerable common ground in the role of technical director and lead programmer, such that the jobs are often covered by one person.
Most commercial computer and video games are written primarily in
C++
,
C
, and some
assembly language
. Many games, especially those with complex interactive gameplay mechanics, tax hardware to its limit. As such, highly optimized code is required for these games to run at an acceptable frame rate. Because of this,
compiled code
is typically used for performance-critical components, such as visual rendering and physics calculations. Almost all
PC
games also use either the
DirectX
,
OpenGL
APIs
or some wrapper library to interface with hardware devices.
Various
script languages
, like
Ruby
,
Lua
and
Python
, are also used for the generation of content such as gameplay and especially AI. Scripts are generally
parsed
at load time (when the game or level is loaded into main memory) and then executed at runtime (via logic branches or other such mechanisms). They are generally not executed by an
interpreter
, which would result in much slower execution. Scripts tend to be used selectively, often for AI and high-level game logic. Some games are designed with high dependency on scripts and some scripts are compiled to binary format before game execution. In the optimization phase of development, some script functions will often be rewritten in a compiled language.
Java
is used for many
web browser
based games because it is
cross-platform
, does not usually require installation by the user, and poses fewer
security
risks, compared to a downloaded executable program. Java is also a popular language for
mobile phone
based games.
Adobe Flash
, which uses the
ActionScript
language, and
JavaScript
are popular development tools for browser-based games.
As games have grown in size and complexity,
middleware
is becoming increasingly popular within the industry. Middleware provides greater and higher level functionality and larger feature sets than the standard lower level
APIs
such as
DirectX
and
OpenGL
, such as
skeletal animation
. In addition to providing more complex technologies, some middleware also makes reasonable attempts to be
platform independent
, making common conversions from, for example, Microsoft Windows to
PS4
much easier. Essentially, middleware is aimed at cutting out as much of the redundancy in the development cycle as possible (for example, writing new animation systems for each game a studio produces), allowing programmers to focus on new content.
Other tools are also essential to game developers: 2D and 3D packages (for example
Blender
,
GIMP
,
Photoshop
,
Maya
or
3D Studio Max
) enable programmers to view and modify assets generated by artists or other production personnel.
Source control
systems keep
source code
safe, secure and optimize merging.
IDEs
with
debuggers
(such as
Visual Studio
) make writing code and tracking down bugs a less painful experience.