1 pontos por GN⁺ 2024-06-14 | 1 comentários | Compartilhar no WhatsApp

Análise do código-fonte do Serious Engine 1

Visão geral

  • Serious Sam foi projetado como um jogo multiplayer.
  • A campanha single-player também funciona como multiplayer.
  • O Serious Engine oferece suporte a single-player, multiplayer, gravação de demo e reprodução.

Determinismo de ponto flutuante

  • Para a sincronização do jogo, o comportamento determinístico das operações de ponto flutuante é importante.
  • Como foi lançado apenas para Windows, foi possível evitar problemas de sincronização causados por diferenças de compilador.
  • Para resolver problemas causados por diferenças de precisão da FPU, usa-se um guard de precisão.

Tick vs frame

  • A taxa de ticks da lógica do jogo é separada da taxa de frames de renderização.
  • A lógica do jogo é fixa em 20 ticks por segundo.
  • Usa interpolação para movimentos e animações suaves.

Multiplayer em rede

  • O modelo de rede do Serious Engine segue o formato cliente-servidor.
  • O servidor recebe e processa mensagens dos clientes, e envia as informações relevantes para todos os clientes.
  • Usa o protocolo UDP para transmitir pacotes.

Camada de pacotes

  • Pacotes UDP podem chegar fora de ordem ou nem chegar.
  • O Serious Engine implementa seu próprio protocolo sobre UDP para garantir confiabilidade e ordem dos pacotes.
  • Pacotes confiáveis são confirmados por meio de pacotes ACK.

Ciclo de vida da conexão

  • Usa pacotes de broadcast para estabelecer uma conexão virtual entre cliente e servidor.
  • O servidor atribui um identificador único ao cliente e roteia os pacotes com base nele.

Jogo offline

  • Single-player e reprodução de demo são casos especiais de multiplayer.
  • Servidor e cliente se comunicam dentro do mesmo processo.

Camada de mensagens

  • CNetworkMessage é uma abstração de mensagem que pode ser lida e escrita como um stream.
  • As mensagens podem ser comprimidas, usando por padrão a compressão LZRW1.
  • Usa codificação delta para minimizar a quantidade de dados transmitidos.

Segurança das mensagens

  • As mensagens não são criptografadas.
  • Mensagens de chat são transmitidas em texto puro.

Opinião do GN⁺

  • Útil para desenvolvedores de jogos: A estrutura de rede e os mecanismos de sincronização do Serious Engine podem servir como referência útil para o desenvolvimento de jogos multiplayer.
  • Importância do comportamento determinístico: Garantir o comportamento determinístico das operações de ponto flutuante é um fator importante para resolver problemas de sincronização em jogos.
  • Projeto de protocolo de rede: Implementar um protocolo próprio sobre UDP para garantir confiabilidade e ordem é um bom exemplo de programação de rede.
  • Considerações de segurança: O fato de não haver criptografia de mensagens é algo a considerar do ponto de vista de segurança no desenvolvimento moderno de jogos.
  • Desafios técnicos: Ajuda a entender os desafios técnicos de implementar um jogo multiplayer de ritmo acelerado no ambiente de rede do início dos anos 2000.

1 comentários

 
GN⁺ 2024-06-14
Comentários do Hacker News
  • Fui o desenvolvedor que implementou o código de rede de Serious Sam. Escrevi um MVP simples inspirado no sistema de predição do QuakeWorld.
  • Serious Sam sempre funcionava bem em LAN parties. Rodava de forma estável mesmo quando outros jogos apresentavam problemas.
  • Implementei o multiplayer de Vigilante 8 no port para GB Color com jogabilidade determinística. Os dados eram transmitidos um byte por vez usando o cabo link do GBC.
  • A Croteam é uma equipe de desenvolvimento de jogos muito talentosa. Desenvolveu a série Talos Principle e um engine de jogos Vulkan customizado.
  • Pergunta se é a mesma ideia de "1500 archers on a 28.8" de Age of Empires.
  • Aponta o fenômeno de o software ficar mais lento e ineficiente à medida que os recursos técnicos aumentam. Chama isso de "efeito Benjamin Button no design de software".
  • A arquitetura de Factorio transmite apenas eventos de entrada e depende de um núcleo de simulação sincronizado.
  • Lembra de ter jogado Serious Sam na demo da PC Gamer. Agora ele já é considerado um jogo clássico.
  • Explica o recurso de interpolação do Serious Engine. É possível jogar sem interpolação digitando net_bLerping=0 no console.