In this section, we describe the model and design of current online games. Most contemporary online games are proprietary and their implementation details are largely unavailable. However, several popular online game engines, such as Quake II [8] and the Torque Networking Library [9], have been released publicly and we have examined several open-source games. These released games share a common architecture that we strongly believe is generalizable to games in the same or similar genres. In these games, each participant, or player, controls one (or a few) avatars in a relatively large game world, a spatial area (two or three dimensional) in which the game takes place. Without making specific assumptions about latency requirements, size and persistence of game state, types of interactions between players and the game world or other game dynamics, this architecture encompasses a large number of popular game genres, including First Person Shooters (FPS) (such as Quake, Unreal Tournament, and Counter Strike), Role Playing Games (RPG) (such as Everquest, Final Fantasy Online, and World of Warcraft), and others (such as the Sims Online). In addition, this model is similar to that of military simulators and virtual collaborative environments [22,23].
Almost all commercial games of this type are based on a client-server architecture, where a single server maintains the state of the game world.1 The game state is typically structured as a collection of immutable objects such as the game world's terrain, buildings, walls, etc., and a set of mutable objects which includes player avatars, computer controlled characters, doors, items, projectiles, etc. The server implements a discrete event loop (also called a frame in game parlance) in which it determines the actions for each object in the game and sends out the new view of the game world state to each player. In FPS games, frames generally repeat 10 to 20 times a second; this frequency (called the frame rate) is generally lower in other genres. For player avatar objects, the actions are determined by player input that is sent to the server. For computer controlled objects, the actions are determined by the think function associated with each object.
One of the most attractive attributes of the client-server architecture is its amenability to centralized management and control -- important considerations for game developers who have to prevent player ``cheating'' and abuse, as well as maintain a particular quality of service for paying customers. However, as we demonstrate in the next section, this architecture shows fundamental scalability problems.