Truques na mecânica do jogo para evitar lidar com a compensação de atraso na rede?

20

Implementar a compensação de atraso de rede é difícil, como evitá-lo?

Talvez seja possível usar truques e criar mecânica de jogo de tal maneira que o atraso seja percebido como uma parte não crítica ou até natural do jogo?

Quais são essas técnicas e existem jogos existentes (MMORPG, Estratégias, ...) que usam essas técnicas?

ATUALIZAR:

Jogos baseados em turnos não exigem compensação de atraso, mas seria interessante ver abordagens em tempo real (ou apenas uma impressão em tempo real, a parte importante - o usuário não deve ser bloqueado e forçado a esperar).

A principal razão para eu evitar a compensação de atraso é a simplicidade.

Alexey Petrushin
fonte
11
Este link pode ajudar: developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
John McDonald
6
Se você deseja criar um jogo em que a latência não é um problema; considere construir algo baseado em turnos, em que alguns segundos sejam aceitáveis.
Vaughan Empunhaduras
3
Esse link Valve é sobre as maneiras bastante complexas pelas quais a compensação de defasagem de rede é implementada - portanto, é o oposto do que a pergunta faz.
Kylotan
@JohnMcDonald Sim, eu sei sobre esse artigo da Valve e, como ele mencionou - é o oposto do que estou perguntando :).
Alexey Petrushin
Você também pode dar uma olhada no GGPO: ggpo.net
Decency

Respostas:

16

É comum que o cliente implemente algum tipo de feedback para que o jogador saiba imediatamente que sua ação escolhida foi registrada, por exemplo:

  • som da interface (por exemplo, clique no botão)
  • som do mundo (por exemplo, um personagem dizendo: "Imediatamente, comandante")
  • animação (por exemplo, comece a balançar uma espada)

Isso pode ocorrer enquanto as informações estão sendo transportadas para o servidor, para que o jogador não perceba que sua ação ainda não foi iniciada. Enquanto o servidor responder prontamente e a ação começar em breve, o jogador poderá não perceber o atraso.

Esses truques funcionam em jogos em que as entradas do jogador são bastante raras e, portanto, a quantidade de tempo que você gasta esperando a entrada em vigor é uma proporção relativamente pequena do tempo total gasto jogando. Portanto, você gostaria de encontrar maneiras de estruturar o jogo para que o jogador faça menos insumos. Isso provavelmente significa tornar as ações dos jogadores mais abstratas e fazer com que o jogo implemente o comportamento de baixo nível. Exemplos:

  • substituir mecânica de direção por mecânica de pathing
  • substituir a mecânica de mira pela mecânica de seleção de mira
  • substituir instruções de combate round-by-round por planos mais táticos ou estratégicos
  • substituir jogabilidade em tempo real / contínua por sistemas discretos / baseados em turnos
Kylotan
fonte
11
Obrigado, você formaliza o que me perguntam - use entradas adiadas e pouco frequentes do player. Seria interessante ver os jogos reais que usam isso.
Alexey Petrushin
2
Centenas de jogos usam coisas como essa de alguma forma, mas é mais provável que isso tenha sido feito por outras razões, com a ocultação de um efeito colateral benéfico.
Kylotan
7

Pensamentos aleatórios:

  1. fraude: use foguetes . Foguetes explodem em um raio, escondendo qualquer estranheza.
  2. fraude: predeterminar o resultado e forçar a condição a acontecer visualmente
  3. fraude: ataques levam tempo , ocultam latência no atk + anim + descontinuidade do resultado
  4. fraude: desconecte o feedback local do material de rede
  5. fraude: muita atividade VFX ou de tela que cobre qualquer estranheza.
  6. use um design de ação-reação que exija resolução antes de continuar

Então sim, trapaceie bastante.

Patrick Hughes
fonte
4

A resposta é bastante simples - basta criar jogos que não possuem seções de tempo crítico. Você está procurando evitar a implementação desses tipos de interpolações por um motivo específico, pelo que entendi, o que significa que você não está preocupado com a jogabilidade estremecida e rápida. Isso é perfeitamente aceitável para muitos jogos, incluindo o Civilization (que é um jogo de estratégia). No entanto, entenda que isso NÃO é aceitável para um jogo de estratégia em TEMPO REAL , no qual você precisa passar muitos dados pela rede em tempos variáveis. Se você deseja criar um jogo em uma rede de latência muito alta, considere o seguinte:

  1. Crie jogos baseados em turnos. Nesses tipos de jogos, a entrada em tempo real do estado não é necessária e o outro jogador pode simplesmente colocar o estado do jogo em seu cliente na sua vez. Isso reduz a pressão na rede e permite atrasos em até alguns segundos, se assim o desejar. Civilization é um jogo baseado em turnos que é muito popular e na linha de estratégia.
  2. Mantenha o impacto das decisões dos outros jogadores no mínimo. Se seu jogo é estratégico e não pode ser baseado em turnos, considere reduzir o impacto de pacotes atrasados. O cliente pode fazer a maior parte da simulação? Um exemplo é um jogo de estratégia que é jogado sozinho por um tempo e depois, digamos, 16 minutos, é simulado contra outro jogador (talvez um jogo de combate em que os jogadores enviam tropas a cada intervalo x e relatam a cada intervalo y).

Espero que isso ajude pelo menos um pouco; sem conhecer suas idéias exatas de jogo, é difícil. Presumo que você tenha suas razões para querer criar seu jogo com base nesse padrão (simplicidade, economia de largura de banda, complexidade de rede reduzida)

Vaughan Hilts
fonte
4

Você também pode fazer com que o lag faça parte de sua jogabilidade por "realismo". Digamos que seus jogadores pretendam controlar alguns robôs à distância, você pode forçar o atraso a ser de pelo menos 500ms ou 1s (você precisaria implementar algum sistema dinâmico de preenchimento de lag).

Arkh
fonte
Esta é uma bela reviravolta
o0 '.
0

Também é um bom truque para simplesmente esconder as ações dos jogadores. Muitos jogos de FPS fazem exatamente isso. Eles não mostram nenhum visual da maioria das balas, apenas sons são tocados e você obtém o resultado na forma de dano causado aos jogadores.

Eu joguei alguns jogos de FPS em que armas de alta precisão (atiradores de elite e outros) tinham efeitos visuais muito claros, e você podia ver que o outro jogador atirou atrás de você, mas por causa da compensação de atraso, você foi morto.

VSZM
fonte