segunda-feira, 03 de agosto de 2026devblog

Uma linha: um GUID novo a cada carregamento

Cada jogador agora tem uma identidade permanente, e toda a aparência dele é gerada a partir dela. O bug era uma linha que criava um ID aleatório toda vez que o banco de dados carregava.

IDENTIDADEPERMANENTE

Cada jogador agora tem uma identidade permanente, e toda a aparência dele é gerada a partir dela. O Rice, do Brackfield United, tem a mesma cara em qualquer save, em qualquer máquina, para qualquer pessoa do mundo. O ID dele vem do arquivo de dados, não de um número aleatório no carregamento.

O bug

Uma linha: o carregador do banco de dados criava um GUID aleatório novo para cada jogador, toda vez que os dados carregavam. Então "o mesmo" jogador em duas carreiras eram duas pessoas diferentes e, com a aparência gerada a partir do ID, dois rostos diferentes.

Agora o ID é derivado de uma chave estável que já existe no arquivo de dados, com hash FNV-1a. Não a função de hash da engine: esses IDs acabam gravados nos saves, então o hash tem que ser meu e nunca pode mudar. As funções de hash da engine podem mudar numa atualização da engine.

Por que isso importa além dos rostos:

  • Saves. Um save que precisaria de quarenta mil aparências agora não precisa de nenhuma.
  • Online, um dia. Uma partida envia um ID de 16 bytes em vez da aparência de cada jogador. As duas máquinas montam o elenco idêntico localmente.
  • Mods. Mantenha o ID de um jogador e ele é a mesma pessoa. Mude e é outra pessoa. Pacotes de elenco e pacotes de aparência podem sair separados sem conflito.

Mudança pequena. Destrava partida rápida, online e mods da comunidade de uma vez só.

Entregue: IDs de jogador estáveis gerados por hash do arquivo de dados · aparência derivada do ID

Este post foi traduzido do inglês com auxílio de IA. Ler o original