Diablo 3 e StarCraft 2 têm um recurso interessante: posso começar a jogar antes que o jogo completo ou a atualização terminem o download.
Acho que o Diablo 3 baixa arquivos obrigatórios, como recursos da interface do usuário, e algumas malhas e texturas que são usadas primeiro em vários níveis. No entanto, ao iniciar um jogo, posso escolher qualquer nível que quiser, assumindo que tenho salvamentos apropriados. Nunca experimentei nenhum atraso com isso ao jogar - começar sempre é muito suave.
Como é que isso funciona? Como eu poderia implementar um recurso semelhante?
user-experience
deployment
patching
nikitablack
fonte
fonte
Respostas:
Recursos como som, vídeo, modelos e texturas são a maioria do download e, para cada um desses ativos, existem várias versões. Essas múltiplas versões são compatíveis com várias opções gráficas.
Enviando os recursos necessários para uma opção de gráficos baixos primeiro (que também são os menores). Você tem tudo o que precisa para jogar, apesar de ter apenas 15% ou mais do total de ativos necessários para suportar todas as opções gráficas.
Você pode testar isso reinstalando o StarCraft 2. Execute-o assim que permitir que você vá para a tela de opções gráficas. Muitas opções e configurações estarão indisponíveis.
fonte
Uma vez eu implementei isso para MMOs. Um fim de semana, enquanto tentava instalar o WOW para minha filha, levou 48 horas decorridas (patches, erros de download etc.), então decidi criar minha própria solução melhor.
O jogo geralmente precisa de 10 GB de dados antes de rodar. Na verdade, nem todos os arquivos são necessários imediatamente, mas os jogos costumavam esperar até que todos os arquivos estivessem presentes localmente. Minha solução foi executar o jogo localmente normalmente, mas o EXE foi enganado (usando um minifiltro de arquivo do Windows) para pensar que todos os arquivos já estavam presentes. Quando um arquivo solicitado não era local, o sistema de arquivos baixou e salvou. O jogo foi lentamente copiado localmente, conforme necessário. Quando havia largura de banda disponível, os outros arquivos ainda não necessários eram introduzidos em segundo plano. Isso funcionou com TODOS os jogos sem a necessidade de recompilar, porque meu driver de minifiltro obteve arquivos quando necessário.
A pior desvantagem foi a latência. Minha solução para isso foi criar um pequeno modelo de cadeia de Markov para prever qual arquivo seria necessário em seguida e priorizar o carregador em segundo plano. Isso funcionou como um encanto, e nosso MMO foi capaz de executar quase IMEDIATAMENTE depois que apenas o EXE e alguns arquivos de tela de carregamento estavam locais (~ 20 MB). Conseguimos clicar em um link em uma página da Web e rodar nosso jogo de mais de 10 GB em cerca de 30 segundos . Tivemos uma taxa de acerto de 99%, ou seja, quando o jogo precisava de um novo arquivo pela primeira vez, ele já estava lá!
Ficaria feliz em ajudar alguém a implementar isso.
fonte
Também em alguns jogos, as áreas e arquivos do mundo final são atrasados, apenas as áreas obrigatórias são mantidas e também podem ser instaladas enquanto o jogo ainda está em jogo.
fonte
Para resumir o que várias pessoas disseram e talvez adicionar algumas informações:
Isso significará uma carga de rede mais alta durante o jogo, até que todo o conteúdo seja armazenado em cache localmente, mas uma carga inicial menor nos servidores e uma espera mais curta e menos frustrante para os usuários enquanto eles estão baixando o jogo.
Obviamente, se o usuário tiver uma conexão de rede lenta, ele ainda poderá receber mensagens de "por favor, aguarde, carregando conteúdo" (forneça isso) ao mudar de zona, ou talvez você queira verificar a largura de banda ao iniciar o jogo e se estiver muito baixo para fazer o download de maneira confiável e rápida, espere lá e depois pelo menos o primeiro nível inteiro (e novamente ao entrar em zonas que ainda não foram totalmente baixadas).
Isso evita que o usuário fique no meio da jogabilidade real, porque sua conexão de rede fica atolada.
fonte