Eu me perguntei se eu não conseguiria fazer um jogo assim? Sim, posso escrever uma dúzia deles por mês. Estudando a questão do desenvolvimento para a web, decidi escolher o flash, parece que naquele artigo havia um jogo só sobre ele, embora seu declínio já fosse uma conclusão precipitada. Comecei então a dominar o flash, assistir vídeos no YouTube, tentar repetir pequenos exemplos. Não pensei muito em escolher o que quero fazer, quero fazer meus Command & Conquers com meu servidor e unidades :) Não sei desenhar, então tirei fotos do jogo original que podem ser encontradas na Internet. Pensei que, se alguma coisa sair, vou encomendar arte para o jogo a alguém que saiba fazer. Quando algo deu certo, postei vídeos e screenshots na minha página VK. Não me lembro por quanto tempo fiquei fazendo isso, mas, como planejado anteriormente,Não consegui fazer um mar de jogos nas semanas seguintes. O trabalho principal também consumia muito tempo e me movia muito devagar. Um pouco depois, meu velho amigo Dima, que também é um grande fã de jogos de estratégia, me ofereceu ajuda no projeto. Ele acelerou o projeto. Além disso, como se viu, ele conhecia o artista que já havia participado da criação de projetos semelhantes para o PC. Portanto, ele já tinha empreendimentos, maquetes de edifícios e equipamentos.
Conversamos e decidimos fazer um jogo juntos. Tínhamos um programador, este sou eu, a artista Sashka e o roteirista Dima. Combinamos como dividiríamos a pele de um urso não morto, sugerimos um nome para o projeto e começamos a trabalhar. Depois de um tempo, abandonamos o VK e começamos a fazer um jogo para celulares. Como parte do projeto já havia sido desenvolvido por mim em flash, optou-se por não deixá-lo, usando Adobe AIR, era possível escrever para quase qualquer plataforma. (Uma pequena digressão, estou escrevendo sobre flash, como se estivesse dando desculpas, para ser honesto, eu realmente não entendo todos os ataques a essa tecnologia, todos pareciam ofender-se com o flash juntos e deixaram-no juntos. Eu geralmente gosto de flash, então chega de desculpas
Como não tinha experiência em desenvolvimento de jogos e a comunidade flash já estava começando a se dispersar, inventei várias bicicletas e algumas de minhas decisões foram, para dizer o mínimo, controversas. Decidi não ficar com uma narrativa cronológica, lembrar o que estava acontecendo, já é difícil para mim, então vou escolher um tema e tentar contar para vocês como essa direção se desenvolveu no jogo.
O jogo não diferia em nenhum recurso, todas as mecânicas do jogo foram emprestadas de vários jogos de estratégia do final dos anos 90 - início dos anos 2000.
Como o jogo é feito no estilo isométrico, todos os objetos usados consistiam em imagens pré-renderizadas. Agora existem mais de 8.000 deles. Sasha frequentemente os redesenha e me dá conjuntos, muitas vezes mudando os nomes das imagens, e isso levou ao fato de que o código teve de ser editado e, em determinado momento, tive que escrever um programa separado que organizaria as imagens e escreveria o código. para que esses kits possam ser usados facilmente. Isso economizou muito tempo. Inicialmente não havia nevoeiro de guerra, depois fiz uma espécie de muleta a partir de uma imagem negra, que “perfurei” com ovais, e depois espiei o algoritmo para desenhar o nevoeiro no motor stratagus. O mapa da paisagem em si no jogo foi desenhado com uma imagem. O mapa indicava antecipadamente os locais onde era impossível deslocar-se. Para isso, escrevi um certo editor,onde era possível marcar esses lugares com certos retângulos. E já no jogo, carreguei-os em um array e repita constantemente se a unidade encontrava este retângulo ou não. Surpreendentemente, foi muito rápido e os mapas foram compilados com a menor quantidade possível de locais. Não conhecia nenhum algoritmo para encontrar um caminho, e por alguma razão incrível decidi inventar o meu próprio, apesar do fato de que na Internet era possível pesquisar alguns já prontos no AS3. Quando uma unidade tropeçou em um retângulo invisível, indicando algum tipo de obstáculo, por exemplo uma pedra, ela começou a girar no sentido horário (na verdade, não me lembro para que lado ela começou a girar, mas não importa mais), eu verifiquei se podia vá lá e continue, ou vire novamente.Se a unidade topou com o retângulo dado ou não. Surpreendentemente, foi muito rápido e os mapas foram compilados com a menor quantidade possível de locais. Não conhecia nenhum algoritmo para encontrar um caminho e, por algum motivo incrível, decidi inventar o meu próprio, apesar do fato de que na Internet era possível pesquisar alguns já prontos no AS3. Quando uma unidade tropeçou em um retângulo tão invisível, indicando algum tipo de obstáculo, por exemplo uma pedra, ela começou a girar no sentido horário (na verdade, não me lembro para que lado ela começou a girar, mas não importa mais), eu verifiquei se podia vá lá e continue, ou vire novamente.Se a unidade topou com o retângulo dado ou não. Surpreendentemente, foi muito rápido e os mapas foram compilados com a menor quantidade possível de locais. Eu não conhecia nenhum algoritmo para encontrar um caminho, e por alguma razão incrível decidi inventar o meu próprio, apesar do fato de que na Internet era possível pesquisar alguns já prontos no AS3. Quando uma unidade tropeçou em tal retângulo invisível, indicando algum tipo de obstáculo, por exemplo uma pedra, ela começou a girar no sentido horário (na verdade, não me lembro em que direção ela começou a virar, mas não importa mais), eu verifiquei se podia vá lá e continue, ou vire novamente.apesar do fato de que na Internet era possível pesquisar os já prontos no AS3 no Google. Quando uma unidade tropeçou em um retângulo invisível, indicando algum tipo de obstáculo, por exemplo uma pedra, ela começou a girar no sentido horário (na verdade, não me lembro para que lado ela começou a girar, mas não importa mais), eu verifiquei se podia vá lá e continue, ou vire novamente.apesar de na Internet ser possível pesquisar os já prontos no AS3 no Google. Quando uma unidade tropeçou em um retângulo invisível, indicando algum tipo de obstáculo, por exemplo uma pedra, ela começou a girar no sentido horário (na verdade, não me lembro para que lado ela começou a girar, mas não importa mais), eu verifiquei se podia vá lá e continue, ou vire novamente.
Bem, voltei ao curso. Na verdade, ele poderia tomar diferentes direções dependendo da situação. Parecia péssimo, aliás, para evitar que os jogadores perdessem dinheiro devido à estupidez dos colecionadores e do dono da obra, fizemos a arrecadação dos recursos em helicópteros de carga que voavam, e eles não precisavam contornar obstáculos. Essas soluções maravilhosas estavam quase em toda parte. Baixei o conteúdo do servidor. Para fazer isso, criei um servidor em casa, que ficava constantemente indisponível uma vez por semana por várias horas, o que não permitia que novos usuários iniciassem o jogo. E decidimos publicar esse milagre na loja de aplicativos do Google. E algures em novembro, segundo as estatísticas, no dia 16 de 2014 o jogo foi lançado no android. O jogo continha muitos erros, em alguns dispositivos ele pode nem iniciar e, se começar,não conseguiu iniciar devido à impossibilidade de baixar atlas e missões, mas, surpreendentemente, foi calorosamente recebida. Muitos jogadores escreveram críticas positivas e pediram para consertar várias falhas.
Aos poucos, desisti do meu servidor doméstico e, como repositório de conteúdo para o jogo, aluguei espaço para o site, comprei um domínio e resolvi o problema com os downloads. O artista começou a pintar um novo lado do conflito, Dima começou a trabalhar no roteiro da campanha. E decidi fazer um servidor para jogar pela Internet. A monetização do jogo era feita por meio de anúncios irritantes, mas não rendia nada, 50-100 dólares por mês. Demos toda essa “renda” ao artista.
É assim que a receita do primeiro mês parecia
Servidor de jogo
Eu tive a experiência de escrever um servidor em C ++, este é um aplicativo cliente-servidor muito simples usando sockets, no qual eu tinha 2 ou 3 clientes.Mas então eu precisava inventar uma bicicleta melhor. Eu escolhi C # porque naquela época eu já programava nele há muito tempo, assim como no Microsoft SQL Server para armazenar estatísticas. Pesquisei um exemplo de servidor em C #, comecei a entender a implementação de sockets no AS3 (vou escrever sobre flash assim no futuro). A ideia era simples, minhas unidades já tinham uma fila de comandos, que depois executaram, basta adicionar um comando a uma unidade em um dispositivo, enviar para o servidor, e o servidor enviará esse comando para o segundo dispositivo e voltar. E também algumas funções de serviço, autorização no servidor, criação de uma sala, controle de versões do jogo, o jogo era muitas vezes atualizado, novas unidades eram adicionadas a ele,bugs foram corrigidos e isso exigia que os jogadores jogassem as mesmas versões, etc. Consegui escrever um servidor de produção de forma relativamente rápida. E, vejam só! podemos brincar uns com os outros! Eu baguncei a criação de salas muito mais tarde, e no início os jogadores simplesmente podiam escolher um mapa para criar um jogo, e o segundo jogador tinha que clicar para entrar no servidor, e então eles se conectaram e jogaram no mapa que o jogador que criou o jogo escolheu. E este servidor foi localizado novamente no meu apartamento. Gradualmente, eu trouxe o multiplayer para uma aparência mais ou menos decente. Agora, até 8 jogadores podem jogar em um mapa, em diferentes versões, até 3 times. Além disso, as estatísticas do jogo e algumas funções podem ser visualizadas no site do jogo, que escrevi no ASP.net. Todos os jogos que ocorrem no servidor são salvos em arquivos xml,que pode ser baixado e visualizado no cliente com vários modos de velocidade. Eu armazeno replays em disco, não no banco de dados, e já existem muitos deles. Não tenho certeza se isso é uma boa ideia, mas também não há desejo de colocar mais de 100 GB de replays no banco de dados. Para ganhar o jogo, é atribuída uma classificação, com pequenas alterações, esta é uma classificação calculada de acordo com o sistema ELO. De vez em quando, eu encontrava vários problemas de otimização, a necessidade de lidar com técnicas assíncronas, falta de espaço no servidor e muito mais. E finalmente aluguei um servidor normal. Primeiro virtual, depois real.com pequenas alterações, esta é a classificação ELO. De vez em quando, eu encontrava vários problemas de otimização, a necessidade de lidar com truques assíncronos, falta de espaço no servidor e muito mais. E finalmente aluguei um servidor normal. Primeiro virtual, depois real.com pequenas alterações, esta é a classificação ELO. De vez em quando, eu encontrava vários problemas de otimização, a necessidade de lidar com técnicas assíncronas, falta de espaço no servidor e muito mais. E finalmente aluguei um servidor normal. Primeiro virtual, depois real.
Assim que o jogo se tornou gratificante, apareceram pessoas que queriam ganhar usando métodos desonestos. E tínhamos que fazer algo a respeito, pois assustava os jogadores normais. Portanto, adicionei a transferência para o servidor de dados sobre os recursos coletados e consumidos, o número de visitas dos coletores à base, etc. Adicionados dados de preços unitários, etc. à base de dados, para que fosse possível calcular quantos recursos o jogador transferiu para o servidor e aí analisou. E se os dados não batessem, ele expulsava o trapaceiro do jogo e contava a vitória para o adversário. Mas os jogadores muitas vezes me surpreendiam com sua engenhosidade. Outra forma que encontrei é acelerar o jogo. Não sei como os jogadores conseguiam, no geral todo o jogo funcionava mais rápido para eles, e os harvesters estavam coletando mais rápido e a liberação de unidades era mais rápida.Tive que calcular a taxa de liberação de unidades no servidor e também punir esses astutos. No entanto, sem emular o jogo, não será possível evitar completamente o jogo sujo no servidor. Mas como o jogo não é popular, resolvo os problemas à medida que se tornam disponíveis. Existem jogadores regulares com os quais me comunico periodicamente para detectar falhas e, às vezes, eu mesmo jogo com streams em meu canal nos fins de semana. Você sempre pode carregar o jogo e ver o que aconteceu nele.
Não havia muitos jogadores no servidor. Alguns ficaram com medo de perder a classificação e, portanto, não jogaram. Era necessário adicionar um jogador impessoal que não se ofendesse em perder e que pudesse entreter os jogadores. Precisamos de um bot. Para escrever um bot, era necessário resolver vários problemas. Se for fácil escrever a fila de construção para edifícios, então encontrar um lugar adequado no mapa para construção já é mais difícil. Em missões offline, por exemplo, eu pré-designei lugares para a IA onde ele poderia construir edifícios. Mas se o inimigo construir tudo de acordo com um determinado plano e colocar prédios nos mesmos lugares, não será interessante, algo mais é necessário. E descobri como trapacear aqui. Fiquei assombrado pelo pensamento de que o servidor armazena todos os jogos e eles têm todos os locais onde os jogadores já foram montados, jogando uns contra os outros. Você só precisa sistematizar essas informações e usar ... Então,Pare. E se eu usar completamente a estratégia de construção e liberação de unidades de um jogador real que já jogou neste mapa e estava no mesmo lugar onde o bot está agora? Alguém notará tal substituição? E para ser honesto, também controlarei a liberação de unidades de acordo com quanto dinheiro ele ganhou. O jogo em si não foi emulado no servidor, mas funcionou inteiramente no cliente que criou o jogo, e alguns pontos eram difíceis de entender. Por exemplo, o servidor não conseguia saber a posição exata das unidades móveis no mapa, as informações sobre a posição eram apenas no momento em que a unidade terminava de executar o comando para ir e muitas informações ainda eram desconhecidas do servidor. Mas eu não os considerava tão significativos, às vezes era necessário transferir um comando para o cliente às unidades para que atacassem os oponentes mais próximos. Isso me pareceu o suficiente.Também adicionei alguns tokens ao bot, esta é a capacidade de capturar seus edifícios de volta se alguém os capturou por um engenheiro e não teve tempo de vendê-los, a necessidade de restaurar seus edifícios se eles foram destruídos e muitas outras funções necessárias para sobreviver no campo de batalha. Surpreendentemente, o bot criou raízes. Os jogadores jogam com ele de boa vontade. E mesmo jogadores fortes, de boca aberta, às vezes podem perder para a tática própria, jogou há um mês contra o mesmo bot ou um jogador real, mas mesmo assim, devemos admitir que ele não alcança um bom jogador. Agora, o bot já disputou mais de 311 mil jogos e em 40% das batalhas que venceu.necessário para sobreviver no campo de batalha. Surpreendentemente, o bot criou raízes. Os jogadores jogam com ele de boa vontade. E mesmo jogadores fortes, de boca aberta, às vezes podem perder para suas próprias táticas, jogaram há um mês contra o mesmo bot ou um jogador real, mas ainda devemos admitir que ele não alcança um bom jogador. Agora, o bot já disputou mais de 311 mil jogos e em 40% das batalhas que venceu.necessário para sobreviver no campo de batalha. Surpreendentemente, o bot criou raízes. Os jogadores jogam com ele de boa vontade. E mesmo jogadores fortes, com um pouco de boca aberta, às vezes podem perder para suas próprias táticas, jogaram há um mês contra o mesmo bot ou um jogador real, mas ainda devemos admitir que ele não alcança um bom jogador. Agora, o bot já disputou mais de 311 mil jogos e em 40% das batalhas que venceu.
Versão paga do jogo
Quando o artista pintou completamente o segundo lado do conflito da URSS, antes tínhamos apenas um - a aliança, queríamos tentar vendê-la. Não me lembro exatamente quando as compras apareceram no jogo, mas também decidimos fazer uma versão paga do jogo, em que não havia publicidade e havia um segundo lado sem compra. Muitas falhas foram corrigidas e até mesmo um algoritmo de pathfinding normal apareceu. Os mapas de imagens foram substituídos por mapas ladrilhados, que foram desenhados com ferramentas padrão. A campanha foi traduzida para o inglês, já por um tradutor normal, e não por nossa conta.
Agora o jogo tem a oportunidade de jogar como Japão, e também recentemente adicionamos outra raça "Aliens", esse é um lado separado onde você pode jogar por unidades parecidas com besouros até que o equilíbrio esteja totalmente ajustado, e eles estão francamente fracos.
Em junho de 2015, lançamos a versão paga de nossa estratégia e não era nada ruim. O jogo está há muito tempo no topo das estratégias pagas na Rússia e em alguns outros países. E ela trouxe $ 1000 para algum lugar no primeiro mês. Essa foi a primeira receita normal de jogos, eu acreditava que isso poderia render alguma coisa. Por todo o tempo, a versão paga no Android rendeu cerca de US $ 22 mil (já sem o Google).
Esses picos, começando do centro da imagem, são vendas. Antes funcionavam melhor, agora as vendas, como vocês podem ver, não fazem o mesmo sentido de antes, pelo menos para o meu jogo.
Localização
As traduções devem ser mencionadas separadamente. O jogo agora tem 7 idiomas além do russo. A maioria das transferências foram feitas para mim por jogadores de diferentes países, gratuitamente ou por uma pequena taxa. Foi um momento muito engraçado. Depois de fazer o login no servidor multijogador, notei um aumento acentuado no número de jogadores, literalmente 10 vezes. Por um lado, isso me deixou feliz.
Eu olhei para as estatísticas de exibição do anúncio e não notei nenhuma mudança. Olhei para alguns jogadores de ip, eles eram todos da China. Pesquisei no Google e encontrei meu jogo, totalmente localizado, na Internet chinesa. Alguém o destruiu, traduziu tudo para as fotos e expôs. Além disso, os anúncios foram removidos do jogo, várias funções pagas foram desbloqueadas, etc. Pude tirar proveito disso, peguei a tradução chinesa de lá e coloquei no meu jogo! Roubei a tradução de um jogo roubado de mim. Versões atualizadas e desativada a capacidade de jogar antigas. Surpreendentemente, o jogo foi muito popular na Tailândia, embora não tivesse uma localização de 1,3 M. 250 mil downloads na Tailândia, que vem em primeiro lugar, seguido pela Rússia com 160 mil. Vou mostrar esse gráfico um pouco mais tarde.
Dublagem do jogo
Inicialmente, procuramos sons gratuitos em várias bibliotecas de sons gratuitos, geramos algumas dicas na dublagem do menu com um gerador de voz. Basicamente, essas frases eram apenas em inglês. Agora há dublagem em russo e inglês. Às vezes, para a versão VK, pedíamos ajuda com a dublagem das unidades de nossos jogadores que falam russo. Então conhecemos Alexei, que mais tarde deu voz a todos os nossos jogos. O processo de dublagem de um dos jogos A
música do jogo foi escrita pelo nosso artista Alexander, e algumas composições foram feitas por Yuri (GraYaSDF).
Publicidade
Embora o jogo não trouxesse nada além de prazer, ninguém pensou em anunciá-lo. Então decidi tentar. O e-mail estava cheio de sugestões de todos os tipos de blogueiros para colocar o jogo nas principais críticas de seus canais. Tentei esse tipo de anúncio várias vezes e fiquei completamente desapontado. Eu não tive o menor sentido com essas críticas, e alguns pediram mais dinheiro do que o jogo rendeu em um mês. A única coisa que realmente valeu a pena foi anunciar no w3bsit3-dns.com. Existe algum tipo de programa para desenvolvedores onde você pode escrever um artigo sobre o seu jogo. E este é o único anúncio que realmente valeu a pena para mim. Mas também, provavelmente, depende do jogo. Eu não comprei nenhuma instalação.
Esta é a aparência do gráfico de configurações do jogo. Não consegui determinar o padrão, devido ao qual os downloads podem aumentar ou diminuir. O crescimento pode ocorrer com um aumento nas avaliações ruins e uma queda - com um aumento na receita e uma diminuição no ANR. Certa vez, ao mudar para um novo número SDK do Android, não tentei instalar o jogo em um novo dispositivo para o teste, e lá, como mais tarde descobri, era proibido gravar na pasta de documentos ou uma permissão especial do usuário era necessária. E o jogo por alguns dias, eu suponho, simplesmente não começava em novos dispositivos. E mesmo assim, o jogo apresentou um grande aumento de downloads, infelizmente eu não tinha esse gráfico sobrando, mas discutimos isso em nossa pequena equipe. Às vezes, as quedas parecem artificiais, isso é especialmente perceptível no início de 2018. Eles parecem ser cortados em uma certa quantidade. A propósito,muitos desenvolvedores experimentaram esta queda.
Outras plataformas
Também lancei o jogo no iOS e depois no Steam. É muito fácil usar a tecnologia Adobe Air. Por um tempo, eu até tive uma versão do jogo para navegador em VK. Mas não havia nem perto daqueles downloads que no android. Portanto, a plataforma principal para mim é o Android.
Meus outros jogos
Escrevi sobre um jogo. Na verdade, já existem três deles. Na verdade, eles são um, uma vez que são feitos no mesmo motor e já são zakosy para Warcraft - Warage e Dune - Expanse.
Conclusão
Lançando jogos subsequentes após o primeiro, que já eram uma fatia do bolo e com um maior grau de prontidão, percebi que não era tão fácil entrar no topo da loja do Google, como foi com o primeiro jogo no final de 2014. Há muito conteúdo para estratégias, mas percebi que adicionar conteúdo não leva a nenhum crescimento nas instalações. Portanto, ainda não decidi se devo melhorar os jogos existentes ou iniciar um novo projeto, se vou estudar uma nova tecnologia e se vou continuar com os jogos em geral. Em todo caso, sem sequer me dar conta da ideia de lançar tantos pequenos jogos, me parece que consegui passar os últimos 7 anos com lucro, dominando uma nova direção. E tudo graças àquele pequeno artigo sobre aviões. Espero que meu artigo seja útil para alguém, ou talvez inspire alguém a desenvolver jogos.