
Um cliente novo, feito do zero
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.
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.







