Pular para os jogos
Hadukis

Blog

Mantendo o pacote de um jogo abaixo de 10 MB

· 3 min de leitura

A maioria dos portais curados de jogos web limita o upload em algum ponto entre 5 MB e 20 MB, e vários rejeitam qualquer coisa acima da linha sem olhar duas vezes. O motivo não é armazenamento. O portal serve o jogo para um celular no 4G, e um primeiro carregamento lento é um jogador que foi embora antes de o jogo começar. O limite de tamanho é um substituto para "isso vai abrir?".

Os nossos nove originais vão de 63 KB a 2,49 MB. Veja onde o peso realmente fica, na ordem em que importa.

1. Arte sem compressão

Quase sempre, este é o problema inteiro. Uma pasta de PNGs exportados direto de um programa de desenho é, de longe, o maior item do pacote de um jogo, com uma ordem de grandeza de diferença.

Quando o nosso script de sincronização recodifica a arte de origem em WebP, a pasta de arte de um dos jogos caiu de uns 25 MB de PNG para 1,4 MB, com os mesmos pixels e um jogo visualmente idêntico. Hoje o WebP é suportado em todo lugar que importa e, para arte de jogo (cor chapada, bordas duras, poucos degradês), sai quase de graça.

Se for fazer uma coisa só, faça esta.

2. Um engine do qual você usa um décimo

Um engine de uso geral vem com um solver de física, um sistema de partículas, um runtime de animação Spine, um carregador de tilemaps e mais uma dúzia de subsistemas, quer o seu jogo encoste neles ou não. O tree-shaking ajuda menos do que você esperaria, porque muita coisa está interligada por dentro.

Os nossos três jogos em Phaser têm 1,33, 2,09 e 2,49 MB. Os nossos seis jogos sem engine têm de 63 KB a 390 KB. Essa diferença é quase toda do engine. Pode ser a troca certa (veja o post sobre fazer jogos sem engine), mas você precisa saber que está pagando esse preço.

3. Áudio

Loops em WAV sem compressão são pesados. Converta a música para um formato de bitrate baixo e mantenha os efeitos sonoros curtos. Um minuto de loop ambiente não tem nenhum motivo para ser maior que o resto do jogo.

4. Todo o resto

O código quase nunca é o problema. A lógica de um jogo inteiro minificada ocupa dezenas de kilobytes. Se você está minificando JavaScript para caber num limite de tamanho, está otimizando o arquivo errado.

Atlas de texturas, e a única troca real

Juntar quarenta imagens pequenas numa única folha transforma quarenta requisições HTTP em uma, e deixa o engine enviar uma única textura para a GPU em vez de dezenas. O custo é uma etapa de build e um pouco de ferramental. Para qualquer coisa além de um punhado de sprites, vale a pena; abaixo disso, é cerimônia.

O que não fazer

Não corte funcionalidades para bater um número. Um limite de tamanho é uma restrição de entrega, não de escopo. Se o jogo tem 12 MB e o limite é 10, a resposta está nos itens 1 a 3 acima, nunca em "cortar o terceiro mundo". Os jogadores não pediram um jogo menor; o portal pediu um mais rápido.

Meça, não chute

Faça o build do jogo, abra o diretório de saída e ordene por tamanho. O culpado é sempre óbvio quando você realmente olha, e quase nunca está onde você imaginava. Publicamos os números de cada jogo na página de licenciamento exatamente por isso: um número que dá para conferir vale mais que um número digitado.