# Game client

A game client is a network client that connects an individual user to the main game server, used mainly in multiplayer video games. It collects data such as score, player status, position and movement from a single player and send it to the game server, which allows the server to collect each individual's data and show every player in game, whether it is an arena game on a smaller scale or a massive game with thousands of players on the same map. Even though the game server displays each player's information for every player in a game, players still have their own unique perspective from the information collected by the game client, so that every player's perspective of the game is different, even though the world for every player is the same. The game client also allows the information sharing among users. An example would be item exchange in many MMORPG games where a player exchange an item he/she doesn't want for an item he/she wants, the game clients interconnect with each other and allows the sharing of information, in this exchanging items. Since many games requires a centralized space for players to gather and a way for users to exchange their information, many game clients are a hybrid of client-server and peer-to-peer application structures.

## History

The World Wide Web was born on a NeXTCube with a 256Mhz cpu, 2GB of disk, and a gray scale monitor running NeXTSTEP OS. Sir Tim Berners-Lee put the first web page online on August 6, 1991, while working for CERN in Geneva Switzerland. Online gaming started in the early seventies. At that time Dial-up bulletin boards provided players with a way of playing games over the internet. In the 1990s, new technologies enabled gaming sites to pop up all over the internet. The client-server system provided online gaming a way to function on a large scale.

## Functions

A game client has 4 primary functions: Receive inputs, Analyzes data, Gives feedback, Adjust system

### Receives input

A game client receives input from an individual user. In an FPS game, for example, a player does many different actions such as move, shoot and communicate. Each of them will require the player to control the input devices. After receiving those inputs, the game client will send it back to the server.

### Analyzes data

The game client decodes and displays information that makes up the game world, including objects stored in the computer and action results made by players, and then translate these information onto the user interface and the output devices.

### Gives feedback

The server process the information and send it back to the client. The client will display the processed information to the player according to the player's point of view, so that each player will have a different perspective of the screen due to their private clients.

### Adjust system

The client will also detect any changes made according to the players during the gaming session, including layouts and settings. Since a game is real-time and players are constantly sending actions, the client is constantly processing information and adjusting the system accordingly.

### Example application

Here is an example of how the game client works, using the game League of Legends. In this example, a player named 7Turtle7 is using the character Kha'Zix to attack a neutral character known as the "Red Brambleback". Multiple things are happening from the client's perspective.
1. The client pulls data stored in the computer archives. That includes the player's statistics, map objects, mobs, artworks, character behaviors and other static data to create the player's surroundings.
2. 7Turtle7 attempts to attack Red Brambleback. The client send data of 7Turtle7's and Red Brambleback's data on statistics like position, health, mana, damage, defense and many other data to the server and allows the server to calculate the new world state after 7Turtle7 strikes Red Brambleback. 3. The server process the data and send it back to all other player's clients, informing what 7Turtle7 just did and how the client should give feedback on it. After 7Turtle7's client receives this information, it creates the output and sends it back to 7Turtle7. In this example, we can see that a red number indicating damage done on Red Brambleback appeared and a 3 appeared on the abilities panel indicating the cool-down time of the ability 7Turtle7 just used. Character behaviors, in this case the Red Brambleback, also changes due to the attack. It now becomes a hostile create that will attack 7Turtle7 according to in-game programming since 7Turtle7 attacked the Red Brambleback first. Artwork outputs such as the attack animation, health bar and mana bar also changes.
4. The other game clients are also aware of the attack made by 7Turtle7, but depending on their perspective, their clients determine whether this information is displayed to them or not. A player's client on the opposing team, for example, is aware of the attack, but it would not display the changes to that player since the game sets it so that one has to discover 7Turtle7 doing such a move, only then it will be displayed on their outputs.
5. Even though the client sends and receives data from an individual's perspective, there is data that is shared with everyone in a game or doesn't share at all. Take the top-right corner of 7Turtle7's perspective, for example, there is a time indicator, and that time is the same for everyone inside the game. There is also the FPS and Ping indicator, which is exclusive to 7Turtle7 and not shared through the client.

## Usage
### Technology adoption

To many game developers, adopting technology is the key to their engineering. Standardized platforms such as HTML 5 and JavaScript can allow media integrations and deeper developments. A game client provides the ability to do so.

### User experience

Balancing the game is a big issue for the developers. A large number of users on their client connected to the server could cause high resource usage, but at the same time the users need to stay connected to the game. Game clients will provide this type information to a centralized server.

### Employees cooperation

As the game develops, new feature will be added. Instead of a small, cohesive team that doesn't require much cooperation at the start of a game, a developed game usually has several departments working together to figure out a solution, and that requires all departments to work in harmony.

## Updates

Sometimes the game development team creates new contents or fix previous bugs, which means they need to let every player's clients to synchronize with the server. One way a game developer can fix bugs or add new contents to a game is through patches. The digital distribution platform will alert the user that there is an update is available, and client apply those update patches for the users automatically to ensure every user has the same perspective of the game content when changes have been made. Some examples of a digital distribution platforms include steam, origin and battle.net, which provide the same services when it comes to game clients.