Estou trabalhando em um MMORPG gratuito e tenho um problema.
Estou (com outras pessoas) desenvolvendo um sistema de gravação de vídeo para o jogo. A idéia é basicamente: registramos todos os pacotes enviados e recebidos com registros de data e hora, além de alguns dados locais do cliente e depois os despejamos em um arquivo. Para reproduzir o vídeo, apenas simulamos tudo o que está no arquivo. Também temos a opção de exportar o vídeo para avi com ffmpeg.
O problema é: quando alternamos entre as versões do jogo, é difícil manter a compatibilidade com versões anteriores do vídeo (comandos adicionados / removidos, alterações de função, etc.). Existe uma boa maneira de lidar com esse problema? em vez de ter vários jogadores diferentes e escolher o caminho certo para cada versão do arquivo de vídeo?
Seria útil saber como outros jogos lidam com essa situação.
Obrigado pela ajuda, desculpe pelo meu inglês.
Respostas:
Nossa regra básica é nunca alterar um tipo de pacote existente. Tudo é adicionado no final de um existente ou um novo comando. Isso também torna muito menos provável que duas pessoas pisem no trabalho uma da outra.
fonte
Não é inconcebível, especialmente em um PC, que eles apenas modifiquem o código da jogabilidade e aumentem a versão quando fazem uma alteração que afeta o sistema de repetição. Se o arquivo de reprodução estiver marcado com a versão do código de jogo com o qual ele foi criado e o cliente ainda tiver acesso a essa versão, ele deverá funcionar corretamente.
fonte
Uma maneira de resolver isso é na linha de um jogo chamado "Heroes of Newerth". (que muda a cada +/- 2 semanas) Pelo que posso dizer, eles:
Como não trabalho na S2, claramente não posso dizer que é definitivamente assim que funciona. No entanto, notei uma tendência de tamanho de download associada à idade da reprodução.
Ou isso, ou eles adicionam patches de entidade ao replay (por exemplo, o feitiço X tem efeito Y em vez de Z). Se as informações relacionadas aos pacotes também forem armazenadas na configuração da entidade, esse hot-patch da entidade também permitirá que você entenda os pacotes mais antigos.
Definitivamente, eu não armazenaria um comportamento histórico no cliente, porque isso pode ficar enorme muito rapidamente. Especialmente quando o cliente está atualizando, por exemplo, 10.1.0 para 10.2.0 (pois eles precisam fazer o download de cada patch entre as duas versões, em vez do patch final).
O Google Protobuf é uma boa idéia como uma camada de serialização, pois suporta coisas como essa por design.
fonte