Como alguns jogos realmente funcionam #2

Nós raramente paramos para pensar em como os jogos são feitos. Mas no fundo eles são programas de computador, capazes de gerar imagens com as quais interagimos. Obviamente, fazer um jogo nos dias de hoje é uma tarefa complexa que leva anos para tomar forma e para se manter dentro das limitações de memória e processamento. Muitos jogos são obras de arte do mundo da gambiarra:

Jogos online

LoL-Banner-2

Jogar online contra outras pessoas se tornou o principal mercado de games do momento. Antigamente, todo mundo jogava em casa, seja sozinho ou acompanhado, e tudo se desenrolava somente no console. Mas com a internet, os jogos migraram para a nuvem e com isso surgiu um dos mais conhecidos e odiados problemas desse mundo: lag.

Quando você está jogando um game em casa, sem ser online, tudo é calculado por seu console ou computador. Ou seja, cada vez que você clica em um botão, o videogame recebe essa informação e calcula o movimento do personagem, carregando os cenários necessários e fazendo o que você ordenou. Tudo isso acontece em milésimos de segundo, por isso, temos a impressão de que nossos comandos são executados em tempo real.

Com os games online, as coisas ficam bem mais complicadas, afinal é preciso controlar dezenas de jogadores. Quando a partida é online, seus comandos precisam ser enviados ao servidor, assim como o de todos os outros jogadores e processados por lá, para garantir a consistência da partida. Os servidores de jogos online nada mais são que computadores que recebem os dados do jogo que está rodando em seu console e o de todos os outros jogadores, e fica controlando esses dados para saber posição e quem atirou, para poder calcular se o tiro acertou o outro player e assim por diante. O jogo não está de fato rodando no servidor, mas sim um programa que é capaz de controlar as partidas.

O problema todo ocorre pelo fato de que existem dezenas de jogadores, cada um com uma internet diferente, participando de uma mesma partida. Para que tudo ocorresse bem, todos teriam que ter a conexão perfeita em todos os momentos da partida, mas não é assim que as coisas funcionam no mundo real.

O que acontece é o seguinte: você move seu personagem para frente, mas por um problema com a internet, seu comando não chega ao servidor. Nesse meio tempo, alguém atira em ti e como o servidor acha que você ainda não se mexeu, pois ele não recebeu o comando, o inimigo te acerta e você morre. Você só descobre isso quando o servidor recebe os dados de seu movimento e retorna o que ocorreu. Nos primeiros jogos online, isso acontecia todo o tempo, pois a rede era ruim e se qualquer comando não chegasse, o negócio desandava em lag pra todos os lados.

Para evitar esse problema, os desenvolvedores surgiram com uma ideia brilhante, chamada Client-side prediction.

Client-side prediction

Em vez de enviar cada comando para o servidor, os programadores fizeram o jogo calcular tudo localmente, antes de enviar os dados ao servidor. Assim, mesmo que sua conexão não esteja funcionando bem, o jogador vai ver o jogo seguir normalmente por algum tempo. Após alguns momentos, o console envia os dados de novo e recebe do servidor a resposta, recalculando com o que aconteceu lá no meio tempo.

Caso o movimento calculado no console seja diferente do que o servidor esperava, o sistema recalcula tudo e faz as movimentações necessárias de maneira que o jogador não nota e o jogo segue normalmente, mesmo que a conexão tenha sido perdida por um tempinho.

Claro que, em casos onde a internet para de funcionar por um longo tempo, algo mais do que um segundo, nem mesmo essa estratégia funciona e quando o console e o servidor se sincronizam, alguns jogadores pulam para outros lugares.

E foi assim, usando algoritmos de previsão de movimento, que os jogos online saíram de um mundo que travava a cada segundo para funcionarem bem quando a rede ajuda.