GodsBattle
← Todas as notícias

Um cliente novo, feito do zero

newsTambém emEnglishEspañol

Até agora, o jogo na sua tela tem sido o cliente original: um programa de Windows de 2013, lacrado. Podíamos construir um servidor com o qual ele conversasse — foi isso que a maior parte deste projeto tem sido —, mas não podíamos mudar um pixel do que ele faz. Ele desenha uma caixa de 1024×768. Tem as janelas com que saiu de fábrica. Se algo nele está errado, continua errado.

A partir desta semana existe um segundo cliente, e nós escrevemos cada linha dele.

A tela de seleção de personagem, renderizada pelo cliente novo
Seleção de personagem, desenhada pelo cliente novo: a mesma plataforma sobre as nuvens, a partir do nosso próprio renderizador.

O que ele é

Um programa nativo, escrito em C++ moderno, que roda no Linux sem Wine nem qualquer camada de compatibilidade. Ele faz três coisas:

  • Lê os arquivos do próprio jogo. Aponte-o para uma instalação normal e ele carrega os modelos, mapas, texturas, sons, layouts de janelas e tabelas exatamente como o cliente original faz. Nada do jogo original é copiado para dentro dele nem redistribuído com ele; ele usa emprestada a instalação que você já tem.
  • Fala o protocolo real. Ele entra nos mesmos servidores, na mesma língua que o cliente original — então joga no mesmo reino, ao lado de gente que usa o antigo.
  • Desenha tudo sozinho. Um renderizador de modelos com esqueleto para as malhas e animações do jogo, um renderizador de terreno e água para os mapas, um sistema de partículas e efeitos para a arte dos feitiços, e OpenAL para som e música.

A interface é a parte de que mais nos orgulhamos. As janelas do jogo são descritas por layouts XML e conduzidas por scripts Lua 5.1. O cliente novo executa esses layouts e esses scripts sem modificá-los, em um motor de interface escrito para se comportar como o original se comportava. Quando uma janela parece certa, é porque a descrição que o próprio jogo faz dela está sendo seguida — não porque alguém a redesenhou de olho.

Por que se dar ao trabalho

Porque um cliente que é seu é um cliente que você pode melhorar. Tudo nos posts seguintes é algo que não teríamos conseguido fazer com o original:

  • a janela preenche a tela que você tiver, em qualquer tamanho (próximo post);
  • o jogo inteiro é editável — mapas, modelos, janelas e tabelas de dados — com editores construídos sobre o mesmo código com que o jogo desenha;
  • o servidor pode enviar um mapa corrigido a cada jogador que se conecta, assinado para que não possa ser forjado;
  • sistemas que o cliente original só insinuou — talentos, o zodíaco, pets — podem ser terminados direito nas duas pontas do cabo.

A regra sob a qual trabalhamos

Cada formato e cada mensagem está registrado por escrito com a sua evidência. O repositório guarda páginas de anotações sobre como os arquivos de mapa são organizados, o que cada pacote significa, de qual endereço do programa original vem cada comportamento e qual sessão capturada o confirmou. Onde tínhamos evidência, nós a seguimos; onde tivemos que chutar, as anotações dizem isso. É mais lento do que chutar. Também é por isso que o cliente novo consegue entrar, andar, lutar, saquear e conversar com o mesmo servidor sem que nenhum dos lados perceba que algo é diferente.

O que ele não é — ainda

Preferimos ser exatos a ser empolgantes:

  • Hoje ele roda no Linux. Ainda não foi feita uma versão para Windows. Passamos pelo código e listamos o que está no caminho — sockets, alguns caminhos de arquivos, os scripts de build —, e é uma lista finita, mas não está concluída.
  • Não é o que o launcher instala. Os jogadores da beta fechada continuam no cliente original, e vão continuar até o novo merecer o direito de substituí-lo.
  • Não está terminado. Algumas janelas estão completas, outras parciais, e o registro de mudanças no fim desta leva diz quais são quais.

O que vem a seguir

Os próximos posts percorrem o cliente novo peça por peça: como ele preenche a sua tela, os editores, o que agora podemos mudar em um servidor ao vivo, e os sistemas de progressão — talentos, o zodíaco e pets — que finalmente têm um servidor e um cliente por trás. Comece por a tela.