Os programadores de jogos contam com um dos dois métodos principais de armazenamento de dados:
- armazene cada arquivo de dados como um arquivo separado
- armazenar cada arquivo de dados em um formato de arquivo personalizado
A desvantagem da primeira solução é o problema de espaço em disco desperdiçado, bem como o problema de instalações mais lentas.
A segunda solução fornece suas próprias armadilhas, primeiro é que você deve escrever toda a sua própria imagem / som / etc. rotinas de carregamento que usam uma API personalizada para acessar os dados arquivados. Uma desvantagem adicional é que você precisa escrever seu próprio utilitário de arquivamento para criar os arquivos em primeiro lugar.
A menos que você sempre carregue todos os arquivos do arquivo morto, o TAR / GZ pode não ser uma boa idéia, porque você não pode extrair arquivos específicos conforme necessário. Essa é a razão pela qual muitos jogos usam arquivos ZIP, que permitem extrair arquivos individuais conforme necessário (um bom exemplo é o Quake 3, cujos arquivos PK3 nada mais são do que arquivos ZIP com uma extensão diferente).
EDIT: "Ocultar" a estrutura de pastas do jogo e "Manter" apenas os executáveis
Outra solução é frequentemente usada para "ocultar" os arquivos do jogo na estrutura de pastas. Mantenha apenas os executáveis e talvez um arquivo leia-me no diretório principal e mova os arquivos do jogo para uma subpasta chamada "data" ou outros relacionados.
EDIT: Gamedev Tuts Plus tem um bom recurso
EDIT: libarchive
Uma solução potencial libarchive, que é uma biblioteca de arquivamento que manipula a extração de arquivos de um archive, como um arquivo ZIP. Ele ainda permite atribuir o arquivo extraído a um ponteiro FILE padrão, o que tornaria a interface com outras bibliotecas potencialmente mais direta.
EDIT: arquivos em formato ZIP com extensão alternativa
Aqui, eu gosto do comentário de @Joachim Sauer
O uso de arquivos no formato ZIP com extensões alternativas também tem uma grande tradição fora dos jogos: Java faz isso , o OpenDocument Format (também conhecido como formato OpenOffice / LibreOffice) faz isso , até o Office Open XML (também conhecido como o "novo" formato do Microsoft Office) faz isso .