Video Game Development - by Paul Lowe

What is video game development? Essentially, video game development is a specialization of software engineering specifically focused on the implementation of game engines and their associated subsystems.

Commercial grade video game development has traditionally been a black art -- which meant it could only be done by and learned from underground experts -- or learned/developed on one's own; it traditionally did not exist in academia. It was not taught in universities, and written literature was generally limited at best. Only in recent years, due to the booming video game industry, have specialized game development schools been established. Whole bookshelves of publications on the topic can now be obtained, and the internet is full of game development websites, forums, and freely available engines (with publicly available source code!).

Is video game development really similar to art? If one defines "art" as any creation or activity that intrinsically draws upon human expression, then yes, video game development is very much an art. Developing video games requires the developer to use his mind and imagination in order to form artificial, abstruse representations of every-day concrete concepts and ideas that can only exist in an abstract domain. Is video game development similar to engineering? Definitely. Engineering is defined as the application of high-level math and science in order to manipulate the surrounding material environment such that it could be beneficial to humans. Video game development differs from this definition (aside from questionable beneficience to society) in that the environment manipulated is actually an imaginary abstract world that only exists inside digital computers, with a form derived by heavily drawing upon metaphorical representations of equivalent objects and concepts. Since this imaginary world (located inside a computer) is implemented inside our real physical world (the inside of a computer, which is a physical object), math and science are still valid, but they can also be bent.

Contemporary advanced video game engines are about as complex and abstract as software can get. Their manifestation requires heavy utilization of many disciplines. Today's game engines draw heavily upon artificial implementations of Newtonian Mechanics. Their three dimensional graphics systems are based on all sorts of tricks to make a two dimensional surface (the viewing screen) appear as though it truly has three dimensional depth. These tricks are achieved through comprehensive utilization of trigonometric calculations and special effects derived from the observed physical models and properties of optics (refraction, reflection, diffraction). Contemporary game engines also employ some of the most state of the art data structures available from the field of Computer Science in order to tie together and relate the visual and mechanical aspects of a scene, while also guiding the interactive script or fate of the game world. The fusion of these three areas of study: Mechanics, Optics, and Computer Science, allows for the synthesis of quite the convincing artificial world.

Of course, knowing how to program and write software is a given requirement -- but depending on the type of game one might want to make, a specific group of conceptual understandings will be required. For instance: most well-made games will generally require, to some degree, a general understanding of Linear Algebra, Trigonometry, Mechanics, and data structures. Two dimensional games can frequently be made with a much more limited subset of the aforementioned topics, and three dimensional games are usually made by extending these concepts into a third dimension, which far increases their complexity -- especially when the fourth dimension, time, must be taken into consideration. For example, consider two square objects moving in a two dimensional plane and colliding. Doesn't sound very complex, right? Now, consider three soldiers running through a castle firing bullets having a finite velocity through hallways and windows. The equations definitely become more involing.

The following, as a hypothetical example, provides a listing of understandings generally required to make certain types of games:

  • Tic-Tac-Toe
    • Mouse event detection and processing
    • Basic 2D graphics
    • Simple arithmetic
    • No data structures required, really
  • 2D Side-Scrollers
    • Basic 2D math; line interception
    • Single plane trigonometry; basic 2D graphics
    • Basic data structures: arrays, queues, lists
    • Generally basic collision detection and basic models of gravity
  • 3D First Person Shooters
    • Realistic models of Newtonian Mechanics
    • Differential Equations (Elementary, Ordinary, Partial)
    • Heavy use of inheritance; composition
    • Minimal spanning trees
    • Statics, Dynamics, volumetric integrals
    • Moments of inertia, centers of gravity
    • Statistics
    • Fluid dynamics
    • Route traversal techniques
    • Vector Calculus
    • View frustrums
    • Complex 3D collision detection
    • Texture rendering variations
    • Free-look
    • Complex automation of automata, group movement, coordination
    • Three dimensional sound environment mapping
    • Multiple camera angles, perspectives

This above is only an example -- and exceptions do exist. There are 2D games that have implementations obviously far more complex than some 3D games (although usually the opposite is the case). Obviously, more knowledge is required to make ever complex games.

Getting started will require that the developer gain access to the following resources:

  • a game engine or graphics subsystem/graphics package (e.g. LithTech, OpenGL, SDL, Ogre3D, Crystal Space)
  • a compiler/interpreter or modding kit (e.g. C/C++, Python, Java, CounterStrike modding kit)
  • a graphic design or 3D object modeling software package (Gimp, Photoshop, Blender, Lightwave, Bryce
  • a library of sound effects (e.g. Licensed Hollywood movie sounds, CDs from the internet, self-recorded, etc)
  • a score of music (obtained from amateurs or licensed from professionals)
  • various add-on libraries (e.g. networking [TCP/IP/UDP], 3D audio, joystick input, fonts, physics) depending on the nature of the game.

There are already hundreds of game engines -- many of which are freely available on the internet. Starting from scratch can be satisfying (e.g. not using a pre-existing game engine, graphics package, or add-on libraries), though the path of starting from scratch leads through the forest of debugging, frustration, and cyclical redevelopment and improvement until something decent is achieved. Though one of the benefits of starting from scratch is that the game engine can be developed such that all components are well-designed to work together.

(continued soon...)

Designed by Paul Lowe