Lockstep esperando o jogador mais lento Lockstep waits for the slowest peer
ID da causa sy-lockstep · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
Em uma arquitetura em que todos calculam juntos o mesmo turno, se o input de um jogador atrasa, todos esperam.
Por quê A cada turno, o cálculo só acontece quando chegam os inputs de todos os jogadores → Efeito O input de um jogador chega tarde por jitter ou perda de pacotes → Na tela Todos engasgam ao mesmo tempo e, nos casos graves, aparece a janela “Aguardando jogador”
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Servidor: ajustar o atraso de input automaticamente de acordo com o ping, separar por um momento só quem está atrasado para que os outros sigam sem esperar. Cliente: aplicar o atraso de input definido; em P2P sem servidor intermediário, o cliente host também cuida do ajuste do atraso de input e do tratamento de quem atrasa.
Números de referência
Se o atraso de input for menor que “tempo para o input chegar ao outro jogador + jitter”, as paradas ficam frequentes. O tempo para chegar é metade do ping em conexão direta, e cerca de metade da soma do ping dos dois quando passa por um servidor intermediário.
No gráfico
Picos aleatórios · Tempo de espera por turno, atraso de chegada dos inputs por jogador
Onde olhar
Registrar a cada turno o horário de chegada do input de cada jogador e o tempo em que o turno ficou parado esperando, e ver de quem era o input esperado nos turnos parados. Com servidor intermediário, também dá para ver pelo intervalo de chegada dos pacotes de input de cada jogador em uma captura de pacotes no servidor
Confirma se
Em todo turno parado, o input da mesma pessoa chegou depois do atraso de input, e nesse momento o jitter ou a perda de pacotes dessa pessoa dá pico
Descarta se
Todos os inputs chegaram a tempo e mesmo assim para: problema no tempo de cálculo do PC mais lento ou no processamento do servidor. Sem paradas, mas com resultados diferentes nas duas telas: divergência no resultado do cálculo (desync), então verificar “Divergência no cálculo de caminho na sincronização de comandos”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Fontes
Deterministic LockstepGaffer On Games O cálculo do frame n só acontece quando chegam todos os inputs, então, se algum atrasa, todos esperam. Com um buffer de atraso de reprodução pequeno para absorver o jitter, há engasgos