Saltar para o conteúdo
Iris Edge StudiosEstúdio de jogos independente

Iris Edge Studios/ Guias/Engenharia

Engenharia

Saves que sobrevivem a uma reinstalação e a um telemóvel novo

Um jogo diário pede um compromisso medido em meses. Quebre-o e não há notas de versão que resolvam.

Três falhas distintas

«Perder um save» são na verdade três erros diferentes, e precisam de três soluções diferentes: a escrita interrompida, a reinstalação e o telemóvel novo.

A escrita interrompida

O save ingénuo é um ficheiro, aberto, truncado, escrito. Se o processo morrer entre o truncar e o escrever, e em telemóvel pode morrer, o ficheiro fica vazio e o progresso do jogador desapareceu.

A solução é uma escrita atómica: serializar para um ficheiro temporário, garantir que foi gravado, e só depois movê-lo para o lugar. Uma mudança de nome dentro do mesmo sistema de ficheiros é atómica, por isso o save é sempre ou a versão antiga ou a nova, nunca uma versão a meio. Guarde a versão anterior como .bak e recorra a ela se a principal não abrir. O Pinteza faz isto em todos os saves através de um único SafeFileIO, porque no momento em que dois caminhos de código escrevem ficheiros de duas maneiras, um deles está errado.

A reinstalação e o telemóvel novo

Os ficheiros locais não sobrevivem a uma desinstalação. O que sobrevive é a cópia de segurança do próprio sistema operativo: iCloud no iOS, Auto Backup no Android. Ambas são gratuitas, ambas estão ligadas à conta do próprio jogador, e nenhuma exige que mantenha um servidor ou que peça a alguém para criar uma conta.

No Android isto exige uma regra de backup explícita no manifesto. Publique sem ela e o comportamento do Auto Backup não é o que imaginaria. Teste como deve ser: instalar, jogar, desinstalar, reinstalar, e confirmar que o progresso lá está. Não uma vez, num aparelho.

A armadilha do restauro

O restauro na nuvem cria um erro que não existe localmente. Se algum direito de acesso for escrito num ficheiro de que o sistema faz cópia, um backup restaurado concede esse direito no novo dispositivo sem pagar. Tudo o que um jogador comprou tem de ser lido do recibo da própria loja em cada arranque, e nunca persistido num save com cópia de segurança. A fonte da verdade é a loja, não o seu ficheiro.

O espelho disto: o estado em cache tem de ser invalidado quando chega um restauro. Um inventário restaurado que o jogo já tenha em memória será ignorado e depois sobrescrito pela cópia desatualizada, o que parece exatamente um restauro a falhar em silêncio.

Versionamento, antes de precisar dele

Todos os saves são um invólucro com um número de versão, desde a primeira publicação. Não porque o formato vá mudar, mas porque vai, e acrescentar um campo de versão a ficheiros que já estão nos telemóveis dos jogadores é uma tarde muito pior do que ter tido um desde o início.

O que testar de facto

  • Matar a aplicação a meio de uma escrita e voltar a abrir.
  • Encher o disco e tentar guardar.
  • Desinstalar, reinstalar, confirmar que o progresso volta.
  • Restaurar uma cópia num dispositivo que nunca correu o jogo.
  • Restaurar uma cópia que contenha uma compra, e confirmar que o direito vem da loja e não do ficheiro.

Mais guias