Game engine

Last updated
Creating a racing game in Blender Game Engine BgeCarSc.jpg
Creating a racing game in Blender Game Engine

A game engine is a software-development environment designed for people to build video games. Developers use game engines to construct games for consoles, mobile devices, and personal computers. The core functionality typically provided by a game engine includes a rendering engine ("renderer") for 2D or 3D graphics, a physics engine or collision detection (and collision response), sound, scripting, animation, artificial intelligence, networking, streaming, memory management, threading, localization support, scene graph, and may include video support for cinematics. Implementers often economize on the process of game development by reusing/adapting, in large part, the same game engine to produce different games [1] or to aid in porting games to multiple platforms.[ citation needed ]

Video game electronic game that involves interaction with a user interface to generate visual feedback on a video device such as a TV screen or computer monitor

A video game is an electronic game that involves interaction with a user interface to generate visual feedback on a two- or three-dimensional video display device such as a TV screen, virtual reality headset or computer monitor. Since the 1980s, video games have become an increasingly important part of the entertainment industry, and whether they are also a form of art is a matter of dispute.

A video game developer is a software developer that specializes in video game development – the process and related disciplines of creating video games. A game developer can range from one person who undertakes all tasks to a large business with employee responsibilities split between individual disciplines, such as programming, design, art, testing, etc. Most game development companies have video game publisher financial and usually marketing support. Self-funded developers are known as independent or indie developers and usually make indie games.

A video game console is a computer device that outputs a video signal or visual image to display a video game that one or more people can play.



In many cases, game engines provide a suite of visual development tools in addition to reusable software components. These tools are generally provided in an integrated development environment to enable simplified, rapid development of games in a data-driven manner. Game engine developers attempt to "pre-invent the wheel" by developing robust software suites which include many elements a game developer may need to build a game. Most game engine suites provide facilities that ease development, such as graphics, sound, physics and AI functions. These game engines are sometimes called "middleware" because, as with the business sense of the term, they provide a flexible and reusable software platform which provides all the core functionality needed, right out of the box, to develop a game application while reducing costs, complexities, and time-to-market — all critical factors in the highly competitive video game industry. [2] As of 2001, Gamebryo, JMonkeyEngine and RenderWare were such widely used middleware programs. [3]

A game development tool is a specialized software application that assists or facilitates the making of a video game. Some tasks handled by tools include the conversion of assets into formats required by the game, level editing and script compilation.

Integrated development environment software application used to develop software

An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools, and a debugger. Some IDEs, such as NetBeans and Eclipse, contain the necessary compiler, interpreter, or both; others, such as SharpDevelop and Lazarus, do not.

Rapid-application development (RAD), also called Rapid-application building (RAB), is both a general term, used to refer to adaptive software development approaches, as well as the name for James Martin's approach to rapid development. In general, RAD approaches to software development put less emphasis on planning and more emphasis on an adaptive process. Prototypes are often used in addition to or sometimes even in place of design specifications.

Like other types of middleware, game engines usually provide platform abstraction, allowing the same game to be run on various platforms including game consoles and personal computers with few, if any, changes made to the game source code. Often, game engines are designed with a component-based architecture that allows specific systems in the engine to be replaced or extended with more specialized (and often more expensive) game middleware components. Some game engines are designed as a series of loosely connected game middleware components that can be selectively combined to create a custom engine, instead of the more common approach of extending or customizing a flexible integrated product. However extensibility is achieved, it remains a high priority for game engines due to the wide variety of uses for which they are applied. Despite the specificity of the name, game engines are often used for other kinds of interactive applications with real-time graphical needs such as marketing demos, architectural visualizations, training simulations, and modeling environments. [4]

In computing, source code is any collection of code, possibly with comments, written using a human-readable programming language, usually as plain text. The source code of a program is specially designed to facilitate the work of computer programmers, who specify the actions to be performed by a computer mostly by writing source code. The source code is often transformed by an assembler or compiler into binary machine code understood by the computer. The machine code might then be stored for execution at a later time. Alternatively, source code may be interpreted and thus immediately executed.

Extensibility is a software engineering and systems design principle that provides for future growth. Extensibility is a measure of the ability to extend a system and the level of effort required to implement the extension. Extensions can be through the addition of new functionality or through modification of existing functionality. The principle provides for enhancements without impairing existing system functions.

Some game engines only provide real-time 3D rendering capabilities instead of the wide range of functionality needed by games. These engines rely upon the game developer to implement the rest of this functionality or assemble it from other game middleware components. These types of engines are generally referred to as a "graphics engine", "rendering engine", or "3D engine" instead of the more encompassing term "game engine". This terminology is inconsistently used as many full-featured 3D game engines are referred to simply as "3D engines". A few examples of graphics engines are: Crystal Space, Genesis3D, Irrlicht, OGRE, RealmForge, Truevision3D, and Vision Engine. Modern[ when? ] game or graphics engines generally provide a scene graph, which is an object-oriented representation of the 3D game world which often simplifies game design and can be used for more efficient rendering of vast virtual worlds.

Crystal Space graphics engine

Crystal Space is a framework for developing 3D applications written in C++ by Jorrit Tyberghein and others. The first public release was on August 26, 1997. It is typically used as a game engine but the framework is more general and can be used for any kind of 3D visualization. It is very portable and runs on Microsoft Windows, Linux, UNIX, and Mac OS X. It is also free and open-source software, licensed under the GNU Lesser General Public License, and was's Project of the Month for February 2003.

Genesis3D is an open source game engine developed by Eclipse Entertainment for Microsoft Windows. The engine aims at rendering indoor scenes with moderate polygon counts at high performances. The first version of the engine was released in 1998.

Irrlicht is an open-source game engine written in C++. It is cross-platform, officially running on Windows, macOS, Linux and Windows CE and due to its open nature ports to other systems are available, including FreeBSD, Xbox, PlayStation Portable, Symbian, iPhone and Google Native Client.

As technology ages, the components of an engine may become outdated or insufficient for the requirements of a given project. Since the complexity of programming an entirely new engine may result in unwanted delays (or necessitate that the project be completely restarted), a development team may elect to update their existing engine with newer functionality or components.[ citation needed ]


Such a framework is composed of a multitude of very different components.

Main game program

The actual game logic has to be implemented by some algorithms. It is distinct from any rendering, sound or input work.

Rendering engine

The rendering engine generates animated 3D graphics by any of a number of methods (rasterization, ray-tracing etc.).

Instead of being programmed and compiled to be executed on the CPU or GPU directly, most often rendering engines are built upon one or multiple rendering application programming interfaces (APIs), such as Direct3D, OpenGL, or Vulkan which provide a software abstraction of the graphics processing unit (GPU). Low-level libraries such as DirectX, Simple DirectMedia Layer (SDL), and OpenGL are also commonly used in games as they provide hardware-independent access to other computer hardware such as input devices (mouse, keyboard, and joystick), network cards, and sound cards. Before hardware-accelerated 3D graphics, software renderers had been used. Software rendering is still used in some modeling tools or for still-rendered images when visual accuracy is valued over real-time performance (frames-per-second) or when the computer hardware does not meet needs such as shader support.

With the advent of hardware accelerated physics processing, various physics APIs such as PAL and the physics extensions of COLLADA became available to provide a software abstraction of the physics processing unit of different middleware providers and console platforms.

Game engines can be written in any programming language like C++, C or Java, though each language is structurally different and may provide different levels of access to specific functions.

Audio engine

The audio engine is the component which consists of algorithms related to the loading, modifying and output of sound through the client's speaker system. At a minimum it must be able to load, decompress and play sound files. More advanced audio engines can calculate and produce such things as Doppler effects, echoes, pitch/amplitude adjustments, oscillation, etc. It can perform calculations on the CPU, or on a dedicated ASIC. Abstraction APIs, such as OpenAL, SDL audio, XAudio 2, Web Audio, etc. are available.

Physics engine

The physics engine is responsible for emulating the laws of physics realistically within the application. Specifically, it provides a set of functions for simulating physical forces and collisions, acting on the various objects within the game at run time.

Artificial intelligence

The AI is usually outsourced from the main game program into a special module to be designed and written by software engineers with specialist knowledge. Most games will implement very different AI systems, and thus, AI is considered to be specific to the particular game for which it is created. Many modern game engines come packaged with search algorithms such as A-star and subroutines for baking level geometry into a Navmesh which can help speed up the process of scripting AI behavior.


Some game engines experience an evolution over time and develop a family tree, like for instance id's Quake engine which resulted in the id Tech family Quake - family tree 2 Simplified.svg
Some game engines experience an evolution over time and develop a family tree, like for instance id's Quake engine which resulted in the id Tech family

Before game engines, games were typically written as singular entities: a game for the Atari 2600, for example, had to be designed from the bottom up to make optimal use of the display hardware—this core display routine is today called the kernel by retro developers. Other platforms had more leeway, but even when the display was not a concern, memory constraints usually sabotaged attempts to create the data-heavy design that an engine needs. Even on more accommodating platforms, very little could be reused between games. The rapid advance of arcade hardware—which was the leading edge of the market at the time—meant that most of the code would have to be thrown out afterwards anyway, as later generations of games would use completely different game designs that took advantage of extra resources. Thus most game designs through the 1980s were designed through a hard-coded ruleset with a small number of levels and graphics data. Since the golden age of arcade video games, it became common for video game companies to develop in-house game engines for use with first party software.

While third-party game engines were not common up until the rise of 3D computer graphics in the 1990s, there were several 2D game creation systems produced in the 1980s for independent video game development. These include Pinball Construction Set (1983), ASCII's War Game Construction Kit (1983), [5] Thunder Force Construction (1984), [6] Adventure Construction Set (1984), Garry Kitchen's GameMaker (1985), Wargame Construction Set (1986), Shoot-'Em-Up Construction Kit (1987), Arcade Game Construction Kit (1988), and most popularly ASCII's RPG Maker engines from 1998 onwards. Klik & Play (1994) is another legacy offering that's still available.

The term "game engine" arose in the mid-1990s, especially in connection with 3D games such as first-person shooters (FPS). (See also: first-person shooter engine.) Such was the popularity of Id Software's Doom and Quake games that, rather than work from scratch, other developers licensed the core portions of the software and designed their own graphics, characters, weapons and levels—the "game content" or "game assets". Separation of game-specific rules and data from basic concepts like collision detection and game entity meant that teams could grow and specialize.

Later games, such as id Software's Quake III Arena and Epic Games's 1998 Unreal were designed with this approach in mind, with the engine and content developed separately. The practice of licensing such technology has proved to be a useful auxiliary revenue stream for some game developers, as one license for a high-end commercial game engine can range from US$10,000 to millions of dollars, and the number of licensees can reach several dozen companies, as seen with the Unreal Engine. At the very least, reusable engines make developing game sequels faster and easier, which is a valuable advantage in the competitive video game industry. While there was a strong rivalry between Epic and id around 2000, since then Epic's Unreal Engine has been far more popular than id Tech 4 and its successor id Tech 5. [7]

Modern game engines are some of the most complex applications written, often featuring dozens of finely tuned systems interacting to ensure a precisely controlled user experience. The continued evolution of game engines has created a strong separation between rendering, scripting, artwork, and level design. It is now common, for example, for a typical game development team to have several times as many artists as actual programmers. [8]

First-person shooter games remain the predominant users of third-party game engines, but they are now also being used in other genres. For example, the role-playing video game The Elder Scrolls III: Morrowind and the MMORPG Dark Age of Camelot are based on the Gamebryo engine, and the MMORPG Lineage II is based on the Unreal Engine. Game engines are used for games originally developed for home consoles as well; for example, the RenderWare engine is used in the Grand Theft Auto and Burnout franchises.

Threading is taking on more importance due to modern multi-core systems (e.g. Cell) and increased demands in realism. Typical threads involve rendering, streaming, audio, and physics. Racing games have typically been at the forefront of threading with the physics engine running in a separate thread long before other core subsystems were moved, partly because rendering and related tasks need updating at only 30–60 Hz. For example, on PlayStation 3, physics ran in Need For Speed at 100 Hz versus Forza Motorsport 2 at 360 Hz.

Although the term was first used in the 1990s, there are a few earlier systems in the 1980s that are also considered to be game engines, such as Sierra's Adventure Game Interpreter (AGI) and SCI systems, LucasArts' SCUMM system and Incentive Software's Freescape engine. Unlike most modern game engines, these game engines were never used in any third-party products (except for the SCUMM system which was licensed to and used by Humongous Entertainment).

As game engine technology matures and becomes more user-friendly, the application of game engines has broadened in scope. They are now being used for serious games: visualization, training, medical, and military simulation applications, with the CryEngine being one example. [9] To facilitate this accessibility, new hardware platforms are now being targeted by game engines, including mobile phones (e.g. Android phones, iPhone) and web browsers (e.g. WebGL, Shockwave, Flash, Trinigy's WebVision, Silverlight, Unity Web Player, O3D and pure DHTML). [10]

Additionally, more game engines are being built upon higher level languages such as Java and C#/.NET (e.g. TorqueX, and Visual3D.NET), Python (Panda3D), or Lua Script (Leadwerks). As most 3D rich games are now mostly GPU-limited (i.e. limited by the power of the graphics card), the potential slowdown due to translation overheads of higher level languages becomes negligible, while the productivity gains offered by these languages work to the game engine developers' benefit. [11] These recent trends are being propelled by companies such as Microsoft to support Indie game development. Microsoft developed XNA as the SDK of choice for all video games released on Xbox and related products. This includes the Xbox Live Indie Games [12] channel designed specifically for smaller developers who don't have the extensive resources necessary to box games for sale on retail shelves. It is becoming easier and cheaper than ever to develop game engines for platforms that support managed frameworks. [13]

Game engines as an industry

Producers of game engines decide how they allow users to utilize their products. Just as gaming is an industry, so are the engines they are built off of. The major game engines come at varying prices, whether it be in the form of subscription fees or license payments. [14]

One of the major game engines used to create several notable games such as Fortnite, PlayerUnknown's Battlegrounds, and Life is Strange 2 , the Unreal Engine 4 adopted a free-to-use structure with a royalty on all game sales using this engine. [15] Although the differences among the different game engines blur as they are built upon during the game creation process, different game developers may either be too used to a system to change, or attracted by the huge benefits of such engines regardless of pay-walls.

Another game engine currently bringing in a notable income would be the Unity engine, utilizing a similar pay module to the aforementioned Unreal Engine. [16] This engine is the one behind games such as Rust, Subnautica, and Life is Strange Before the Storm.

Among the other game engines available, Unreal Engine and Unity are often compared and considered competitors on the business side of game engineering. [17]

Game middleware

In the broader sense of the term, game engines themselves can be described as middleware. In the context of video games, however, the term "middleware" is often used to refer to subsystems of functionality within a game engine. Some game middleware does only one thing but does it more convincingly or more efficiently than general purpose middleware. For example, SpeedTree was used to render the realistic trees and vegetation in the role-playing video game The Elder Scrolls IV: Oblivion [18] and Fork Particle was used to simulate and render real time particle system visual effects or particle effects in Sid Meier's Civilization V. [19]

The four most widely used middleware packages [20] that provide subsystems of functionality include RAD Game Tools' Bink, Firelight FMOD, Havok, and Scaleform GFx. RAD Game Tools develops Bink for basic video rendering, along with Miles audio, and Granny 3D rendering. Firelight FMOD is a low cost robust audio library and toolset. Havok provides a robust physics simulation system, along with a suite of animation and behavior applications. Scaleform provides GFx for high performance Flash UI and high-quality video playback, and an Input Method Editor (IME) add-on for in-game Asian chat support.

Other middleware is used for performance optimisation - for example 'Simplygon' helps to optimise and generate level of detail meshes, and 'Umbra' adds occlusion culling optimisations to 3d graphics.

Some middleware contains full source code, others just provide an API reference for a compiled binary library. Some middleware programs can be licensed either way, usually for a higher fee for full source code.

First-person shooter engines

A subset of game engines are 3D first-person shooter (FPS) game engines. Groundbreaking development in terms of visual quality is done in order to get FPS games to its current standard. The level of visual details emphasized in these games have become increasingly precise, something that engines focused on flight and driving simulators and real-time strategy (RTS) games don't contain.

The development of the FPS graphic engines that appear in games can be characterized by a steady increase in technologies, with some breakthroughs. Attempts at defining distinct generations lead to arbitrary choices of what constitutes a highly modified version of an "old engine" and what is a brand-new engine. [21]

The classification is complicated as game engines blend old and new technologies. Features that were considered advanced in a new game one year become the expected standard the next year. Games with a mix of older generation and newer feature are the norm.

See also

Related Research Articles

Simple DirectMedia Layer free software multimedia library

Simple DirectMedia Layer (SDL) is a cross-platform software development library designed to provide a hardware abstraction layer for computer multimedia hardware components. Software developers can use it to write high-performance computer games and other multimedia applications that can run on many operating systems such as Android, iOS, Linux, macOS, and Windows.

In computing, cross-platform software is computer software that is implemented on multiple computing platforms. Cross-platform software may be divided into two types; one requires individual building or compilation for each platform that it supports, and the other one can be directly run on any platform without special preparation, e.g., software written in an interpreted language or pre-compiled portable bytecode for which the interpreters or run-time packages are common or standard components of all platforms.

A game programmer is a software engineer, programmer, or computer scientist who primarily develops codebases for video games or related software, such as game development tools. Game programming has many specialized disciplines, all of which fall under the umbrella term of "game programmer". A game programmer should not be confused with a game designer, who works on game design.

QuickDraw 3D 3D graphics API developed by Apple Inc.

QuickDraw 3D, or QD3D for short, is a 3D graphics API developed by Apple Inc. starting in 1995, originally for their Macintosh computers, but delivered as a cross-platform system.

RenderWare is a game engine developed by the British game developer Criterion Software.

Game programming, a subset of game development, is the software development of video games. Game programming requires substantial skill in software engineering and computer programming in a given language, as well as specialization in one or more of the following areas: simulation, computer graphics, artificial intelligence, physics, audio programming, and input. For massively multiplayer online games(MMOG),knowledge of additional areas such as network programming and database programming is requisite. Though often engaged in by professional game programmers, some may program games as a hobby.

Direct3D and OpenGL are competing application programming interfaces (APIs) which can be used in applications to render 2D and 3D computer graphics. Hardware acceleration of this process has been commonplace since approximately 1999. As of 2005, graphics processing units (GPUs) almost always implement one version of both of these APIs. Examples include: DirectX 9 and OpenGL 2 circa 2004; DirectX 10 and OpenGL 3 circa 2008; and most recently, DirectX 11 and OpenGL 4 circa 2011. GPUs that support more recent versions of the standards are backward-compatible with applications that use the older standards; for example, one can run older DirectX 9 games on a more recent DirectX 11-certified GPU.

A first-person shooter engine is a video game engine specialized for simulating 3D environments for use in a first-person shooter video game. First-person refers to the view where the players see the world from the eyes of their characters. Shooter refers to games which revolve primarily around wielding firearms and killing other entities in the game world, either non-player characters or other players.

Software rendering is the process of generating an image from a model by means of computer software. In the context of computer graphics rendering, software rendering refers to a rendering process that is not dependent upon graphics hardware ASICs, such as a graphics card. The rendering takes place entirely in the CPU. Rendering everything with the (general-purpose) CPU has the main advantage that it is not restricted to the (limited) capabilities of graphics hardware, but the disadvantage that more semiconductors are needed to obtain the same speed.

PhysX Realtime physics engine software

PhysX is an open-source realtime physics engine middleware SDK developed by Nvidia as a part of Nvidia GameWorks software suite.

SpeedTree is a group of vegetation programming and modeling software products developed and sold by Interactive Data Visualization, Inc. (IDV) that generates virtual foliage for animations, architecture and in real time for video games and demanding real time simulations.

Pre-rendering is the process in which video footage is not rendered in real-time by the hardware that is outputting or playing back the video. Instead, the video is a recording of footage that was previously rendered on different equipment. Pre-rendered assets may also be outsourced by the developer to an outside production company. Such assets usually have a level of complexity that is too great for the target platform to render in real-time.


Delta3d is an open source software gaming/simulation engine API. Delta3d is managed and supported by Caper Holdings LLC. Previously the Modeling, Virtual Environments, and Simulation (MOVES) Institute at the Naval Postgraduate School in Monterey, California managed and supported delta3d.[1] Alion Science has also been a major contributor to enhancements and features.

Umbra is a graphics software technology company founded 2007 in Helsinki, Finland. Umbra specializes in occlusion culling, visibility solution technology and provides middleware for video games running on Windows, Linux, PlayStation 4, Xbox One, PlayStation 3, Xbox 360, handheld consoles, iOS, Wii U and other platforms.


O3D is an open-source JavaScript API created by Google for creating interactive 3D graphics applications that run in a web browser window or in a XUL desktop application. O3D may be crafted for use in any application area, however it is geared towards games, advertisements, 3D model viewers, product demos, simulations, engineering applications, control and monitoring systems, or massive online virtual worlds. O3D is currently in Google's incubation lab, and originally built as a web browser plugin, the new implementation of O3D is a JavaScript library implemented on top of WebGL.

Marmalade (software) cross-platform software development kit and game engine

Marmalade SDK is a cross-platform software development kit and game engine from Marmalade Technologies Limited that contains library files, samples, documentation and tools required to develop, test and deploy applications for mobile devices.

In computing, Stage3D is an Adobe Flash Player API for rendering interactive 3D graphics with GPU-acceleration, within Flash games and applications. Flash Player or AIR applications written in ActionScript 3 may use Stage3D to render 3D graphics, and such applications run natively on Windows, Mac OS X, Linux, Apple iOS and Google Android. Stage3D is similar in purpose and design to WebGL.

Scaleform GFx

Scaleform GFx was a game development middleware package, a vector graphics rendering engine used to display Adobe Flash-based user interfaces and HUDs for video games. As a result of Autodesk's acquisition of Scaleform Corporation in March 2011, Scaleform GFx became part of the Autodesk Gameware line of middleware. On July 12th 2018, Autodesk discontinued Scaleform GFx and is no longer available for purchase.

Game development kits (GDK) are specialized hardware used to create commercial videogames. They may be partnered with game development tools, special game engine licenses, and other middleware to aid video game development. GDKs are typically not available to the public, and require game developers to enter an agreement, partnership, or program with the hardware manufacturer to gain access to the hardware. As game console generations pass, development kits often get sold through websites like eBay without repercussions. This is often because the console manufacturers discontinue certain development programs as time passes.


  1. "What is a Game Engine?". Retrieved 2013-11-24.
  2. Cowan, Danny. "Joystiq". Retrieved 2013-11-24.
  3. "Rise of Middleware". 2007-07-06. Retrieved 2011-01-17.
  4. Report on Use of Middleware in Games Archived October 17, 2013, at the Wayback Machine
  5. "War Game Construction Kit". Oh!FM . Archived from the original on 3 September 2012. Retrieved 3 September 2012.
  6. "Thunder Force Construction". Oh!FM . Archived from the original on 1 September 2012. Retrieved 1 September 2012.
  7. Bramwell, Tom (2007-08-09). "id Tech 5 Interview • Page 1 • Interviews •". Retrieved 2013-11-24.
  8. "Game Development Team Composition Study - Changes over time" . Retrieved 2011-01-17.
  9. "Video Games Starting to Get Serious". 2007-08-31. Retrieved 2011-01-17.
  10. "Gaming: Mobile and Wireless Trends for 2008". Archived from the original on 2011-01-08. Retrieved 2011-01-17.
  11. 3D Game Engine Programming (book). Retrieved 2011-01-17.
  12. "". Retrieved 2013-11-24.
  13. "Microsoft to Enable User-Created XBox 360 Games" . Retrieved 2017-05-05.
  14. "The 10 Best Video Game Engines | 2018 Edition". The Ultimate Resource for Video Game Design. 2017-03-11. Retrieved 2019-05-15.
  15. Savage, Phil (2015-03-02). "Unreal Engine 4 is now free". PC Gamer. Retrieved 2019-05-15.
  16. "The Two Engines Driving the $120B Gaming Industry Forward". CB Insights Research. 2018-09-20. Retrieved 2019-05-15.
  17. "Unity vs Unreal: Ultimate Game Engine Showdown". The Ultimate Resource for Video Game Design. 2019-02-11. Retrieved 2019-05-15.
  18. "Gamusutra Product Review of Top Vegetation Middleware". 2003-10-01. Retrieved 2011-01-17.
  19. "Firaxis Using Fork Particle Toolset For Civ V's Visual Effects". Gamasutra. 2010-10-06. Retrieved 2013-11-24.
  20. "Gamasutra Engine and Middleware Technology Survey". 2009-05-08. Retrieved 2011-01-17.
  21. Hauteville, Cédric (2011-04-02). "Technical Game Design: Aim systems in First Person Shooters". Technical Game Design. Retrieved 2019-03-13.