Cinco anos de escravidão

Você já pensou em seu próprio jogo? E o seu próprio jogo multiplayer? Eu acho que sim! Muitos de vocês gostariam de se apegar ao desenvolvimento de sua própria obra-prima, onde sua imaginação multifacetada e seu perfeccionismo excepcional se fundem. Entendo você e quero contar a minha história dessa maneira fascinante.




Antecedentes


Tudo começou em 2007, quando apareceu um jogo j2me online baseado no trabalho de Sergey Lukyanenko. Eu ainda não tinha um computador e fiquei muito impressionado com este jogo em um telefone celular, acima de tudo, atingiu o mundo aberto. Eu me envolvi e, apesar da ausência de tutoriais, rapidamente descobri o que estava acontecendo.


O tempo passou, mas o interesse não desapareceu, já não havia apenas um jogo. O desejo de aprender como isso funciona e a aleatoriedade levaram ao uso de bugs nas proibições subsequentes. A graduação e a escolha da profissão "programador" deram impulso ao desenvolvimento do meu primeiro software para obter lucro no mundo online.


Assim que meu conhecimento no campo de OOP foi fortalecido, já decidimos com meu companheiro de brincadeira e artista desenvolver nosso próprio MMO, o que seria cem vezes mais legal!


Sobre o que é o nosso jogo?


Nosso jogo glorifica duas facções em guerra, Oseon e Weiland. Cada um deles tem seu próprio planeta; por sua vez, abriga os edifícios necessários para o desenvolvimento do jogador.



Home planeta facção Oseon


Os planetas das facções são protegidos por um sistema de 12 portas. Tendo capturado todos os portões, os jogadores ganham acesso ao planeta inimigo. Não basta apenas se teletransportar pelo caminho aberto, depois disso é necessário capturar a cidadela - o edifício principal do planeta. Encontrando-se em uma situação difícil, os jogadores do lado ocupado recebem tropas de reserva com parâmetros 1,4 vezes maiores que os seus.


As batalhas acontecem passo a passo, algumas as comparam com outras semelhantes em “Heroes”, outras as chamam de uma espécie de xadrez. Em parte, eles estão bem, existem unidades com magia aqui, e você terá que pensar alguns passos à frente com a cabeça.



Batalha com o inimigo


No entanto, o mundo cruel dos jogos PvP tem outras mecânicas interessantes, começando com o desenvolvimento usual de depósitos ricos e terminando com caçadas a caçadores de tesouros.


Protótipo


Como não tínhamos experiência na criação de jogos MMO, decidimos levar tudo o que é ruim. Nosso conjunto inclui: Anthill, Netty, MySQL. Essas não eram exatamente essas tecnologias. Depois de muito trabalho, enfrentamos vários problemas: a falta de um editor de interface, os micro-logs do mapa ao mover, entrada de texto e muito mais. Em tela cheia, o jogo parecia nojento.



O protótipo do jogo. Desenvolvimento de minas


Em alguns casos, ao mudar o estado do jogo, a câmera virtual no mecanismo começou a se comportar de maneira estranha.



O protótipo do jogo. Lags


Após um ano de desenvolvimento, quando não era mais possível recuar, concluímos a mecânica básica do jogo, montamos um editor de mapas e decidimos que havia chegado a hora de testá-lo em público.
Adicionamos o jogo ao VK (sem catálogo) e anunciamos o lançamento em nosso grupo, onde havia cerca de 100 pessoas.
Neste momento, o jogo tinha um controle incompreensível envolvendo o teclado, havia muitos bugs, além de mapas muito simples, com apenas duas camadas (grama e árvores). E depois de três dias jogando no VK, apenas 15 pessoas se inscreveram - as pessoas não entenderam como jogar. E decidimos refazer tudo do zero.


Capturas de tela da versão antiga

Ótimo online



Menu de interação do jogador



Luta


Lech, não é isso, vamos primeiro!


Provavelmente, muitos, diante do fracasso, acham que não é deles, porque gastou muito tempo, mas não há resultado visível. Mas desistir é estúpido quando você percorreu um longo caminho. Depois de alguns meses, com a experiência existente, decidimos retomar o jogo.


Decidimos criar definitivamente a nova versão do cliente com renderização gráfica via placa de vídeo. Das muitas estruturas, Starling parecia a mais atraente, tinha uma API semelhante com um flash padrão, era suportada pela Adobe e era possível usar os gráficos existentes sem muito esforço. Finalmente, a nova versão funcionou sem problemas.
Para rasterizar o vetor em tempo real, peguei o Dynamic TextureAtlas Generator . Mas na biblioteca subseqüente quase teve que ser reescrita e abandonada atlas, a animação ocupava muito espaço e não cabia no atlas dos tamanhos permitidos.


Postais


Depois que descobrimos as tecnologias no cliente, decidimos lidar com as placas de servidor . Cada planeta pode consistir em um ou mais locais, entre os quais você pode ir para a direita ou esquerda. Para cada local, uma parte do mapa foi criada, consistindo inicialmente em duas camadas. Mais tarde, decidimos adicionar outra camada e, em seguida, outra camada e, como resultado, estabelecemos quatro:


  • grama / solo;
  • pedras \ água;
  • decorações do tamanho de gaiolas;
  • cenário amplo.

A idéia era que as três primeiras camadas fossem desenhadas em um bitmap e enviadas para a memória de vídeo. Essa é uma boa abordagem quando, em vez de três camadas, uma é desenhada em segundo plano. Mas não foi sem problemas: ao alternar o MovieClipa para o próximo quadro para rasterização, todos os quadros anteriores devem ser desenhados. Na entrada do local, o jogo foi congelado, por isso foi decidido transferir todos os blocos para o BitmapData com antecedência e fazer cópias rápidas de pixels. Mas, ao mesmo tempo, um friso desagradável foi obtido no início do jogo, no momento da rasterização de um grande número de quadros. Você pode ter visto alguns navegadores congelarem na inicialização ao carregar recursos. Como não queríamos que o jogo fosse o mesmo inválido, limitei o tempo para desenhar peças para cada quadro. Aqui você pode ler mais sobre como fazê-lo.
Todos os cartões tinham um tamanho de 20x16 quadrados de 64px. Os dados do mapa foram gravados em um arquivo em formato binário, onde os limites da camada foram determinados com antecedência e restavam apenas o registro do número do quadro do MovieClip. Assim, o peso do arquivo de mapa era de 1280 bytes. Porém, mais tarde, o formato foi convertido em JSON para facilitar o trabalho com dados.


Como resultado, o trabalho em mapas ocupou uma parte significativa do desenvolvimento do cliente. Para poder criar belos mapas, um editor foi escrito no Flex.



Editor de mapa


Cada um dos 14 planetas tem sua própria flora e fauna, para que você possa entender visualmente em que planeta está.



Variedade


Além disso, programaticamente, adicionamos metades de blocos para o cartão, de cima e de baixo, que simplesmente duplicam os blocos vizinhos. Isso foi feito para elementos interativos importantes, como botões de menu. Campos de locais vizinhos com a névoa da guerra foram adicionados à esquerda e à direita - essa foi uma ótima idéia que resolveu vários problemas ao mesmo tempo. O jogo começou a ficar muito melhor em tela cheia.



Cartão com névoa de guerra nas laterais


Servidor


Enquanto lidávamos com o cliente, procurávamos simultaneamente um programador de servidor, mas não havia muitos que quisessem escrever um jogo duvidoso sem documentação normal. Alguns começaram a escrever e desistiram imediatamente, porque ficou claro o que escrever, e mergulhar nos espinhos da lógica do jogo era chato. Depois de algum tempo, determinamos que precisávamos de um especialista que pudesse projetar o servidor em Java e, se ele abandonasse o projeto no futuro, eu poderia adicioná-lo. O solucionador de artesão local nos ajudou com a arquitetura do servidor. Pode-se dizer que ele nos colocou no caminho certo: ele mostrou como criar um servidor e pegou emprestada a arquitetura do curso de treinamento do Mail.ru. Solver não foi exceção e depois de um tempo nos deixou. Depois de mais um ano de esforço, consegui escrever toda a lógica básica do jogo. Agora, olhando para trás, estou perplexo porque não escrevemos o servidor no Akka?


Você pode ler sobre arquitetura aqui - Arquitetura de um servidor de jogos online usando o Skyforge como exemplo ; também é possível encontrar palestras sobre o Intuit. No nosso servidor, é claro, não 2 milhões de linhas, mas também bastante. Nenhuma fibra (como no skyforge) é usada, e nosso servidor provavelmente se mostrou menos legível. A propósito, o código usado para a mesma fibra para multitarefa sem aglomeração no Skyforge foi publicado muito mais tarde, quando tudo já funcionava para nós.
Enquanto eu estava ocupado com o servidor e colei a lógica no cliente, o artista completou os detalhes ausentes, que caíram imediatamente no cliente. Assim que o servidor ficou pronto, lançamos um teste alfa. Desta vez, tudo estava quase como deveria, mas os bugs e erros do servidor precisavam ser corrigidos por um longo tempo.


Para frente e para trás. Mecânica de jogo nascida


Eu gostaria de falar sobre outra coisa incomum no jogo. Como você nomearia um jogador que especificamente faz um exército incompleto e perde para outros jogadores / bots? Nós os chamamos de "ameixas". Eles mesclam experiência e diminuem seu nível intencionalmente, tornando-se mais fortes em seu nível. Isso é importante quando o nível de jogadores que podem ser atacados é limitado e oferece mais oportunidades de desenvolvimento. Está se tornando mais fácil derrotar inimigos de alto nível e obter mais recompensas. É como bombear o persa, mas na direção oposta. Embora possa parecer mais simples que o jogo clássico, o desperdício de experiência exige mais tempo e habilidade para aumentar inicialmente. Se você diminuir o nível de um personagem fraco, isso não dará uma grande vantagem e puxará o jogador apenas para a média. Aumentar e diminuir o nível pode ser infinitamente longo. Mesmo tendo atingido o desenvolvimento máximo para seu nível máximo atual, o jogador pode subir para um nível ainda mais alto para acessar novas tecnologias e mesclar seu progresso com a experiência novamente, permanecendo tão forte em tecnologia.


Iniciantes têm um problema quando não podem fazer nada com esses anões bombeados. Resolvemos esse problema introduzindo restrições, dividindo os jogadores em dois grupos: você só pode atacar bots em bots, com restrições no nível máximo de outros jogadores e nos mesmos jogadores mesclados que são. Assim, eles quase deixaram de exercer pressão sobre o equilíbrio do jogo e, o mais importante, poderiam continuar fazendo o que quisessem.


Não deu certo, não fartanulo


Entramos no catálogo de jogos da VK em 4 de fevereiro de 2018 e não na primeira vez. Nossa primeira solicitação foi rejeitada sem explicação, enquanto a reinscrição foi adicionada ao catálogo.


Apesar do longo tempo de desenvolvimento do jogo, não foi possível capturar todos os detalhes; cometemos muitos erros. Antes de tudo, eles cometeram um erro com a plataforma: nem todos os jogadores estão prontos para gastar muito tempo em um jogo 2D baseado em navegador, o que requer um mecânico. Muitas pessoas estão acostumadas a jogos mais simples e compreensíveis, onde há mais diversão desde o início. Nosso treinamento no jogo, para dizer o mínimo, falhou. Depois de concluir o tutorial, os jogadores esquecem com segurança o que estava lá e talvez nem leiam.
De acordo com as estatísticas da VK, temos uma enorme quantidade de jogadores; na maioria das vezes, apenas aqueles que jogaram aquele jogo antigo e já familiarizados com a mecânica permanecem por um longo tempo.


48 semanas depois ...


Cerca de um ano após o lançamento da versão alfa, ficou claro que o Flash logo deixaria de funcionar nos navegadores. A partir desse momento, decidi que deveria portar o cliente para algo mais tenaz. Claro, é melhor escrever em um idioma familiar, então eu escolhi o LibGDX. Essa estrutura Java nos permitiu não reescrever alguma parte da lógica, mas simplesmente copiá-la do servidor. Ele possui boas abstrações para mapas de blocos e uma implementação para o Tiled, o que nos permitiu escrever rapidamente o código para nossos mapas. Mas também existem pontos fracos: renderização de fontes, falta de editores de interface visual ao vivo etc.


No momento, um cliente alfa para Android é gravado, o que implementa 50% de todos os recursos do jogo.



Mobile Game Client


O desenvolvimento ainda está em andamento. Se você deseja desenhar ou escrever algo para um cliente móvel - escreva.


Gostaria também de expressar minha gratidão ao engenheiro de som Peresvet Mukhanov e ao compositor Artem Davydov, que escreveram tudo o que pode ser ouvido no jogo em um tempo muito curto e de alta qualidade.

Source: https://habr.com/ru/post/pt451636/


All Articles