Localizando arquivos de ativos em jogos Linux

11

Qual é o método usual de armazenar modelos 3D, texturas, sons e scripts (por exemplo, arquivos Lua) durante o desenvolvimento e em um release? Estou desenvolvendo um jogo com meus amigos principalmente em C ++; na fase de prototipagem, tivemos apenas uma única textura que foi salva como um cabeçalho C com o GIMP, mas é claro que essa abordagem não é bem dimensionada e aumenta muito o tempo de compilação.

No Windows, a prática usual é apenas despejá-los no %PROGRAMFILES%subdiretório no qual o executável do jogo reside, talvez organizando-os em uma estrutura de árvore apropriada. No entanto, no Linux, a imagem parece muito mais complicada. O executável geralmente reside em /usr/bin, enquanto os aplicativos armazenam seus outros arquivos /usr/share, e acho que seria uma prática extremamente ruim colocar não executáveis /usr/bin. No entanto, a estrutura de diretórios durante o desenvolvimento é totalmente diferente.

Eu poderia encontrar duas soluções possíveis diferentes:

  • Deixe o executável encontrar os arquivos de ativos em relação a si próprio e instale o jogo em /opt. Em seguida, coloque links simbólicos para /usr/bin. Durante o desenvolvimento, o caminho relativo dos ativos para os binários é o mesmo que durante a implantação.
  • Acesse os arquivos com um caminho absoluto definido como um símbolo do pré-processador. Deixe o processo de compilação (no nosso caso, raw Makefiles) cuidar de defini-lo como ele é adequado.

Ambas as abordagens me parecem um pouco deselegantes em um aspecto ou outro. Existe uma prática comum na indústria de desenvolvimento de jogos sobre isso?

As únicas perguntas relevantes que pude encontrar foram Determinar a localização dos ativos de jogos instalados / em disco e os caminhos do Diretório para recursos e ativos , mas eles não resolveram o problema de executar "a partir da árvore de origem".

Kristóf Marussy
fonte

Respostas:

6

../lib/programnameou ../share/programname/, relativo ao dirname(3)de argv[0], dependendo se os ativos são dependentes da arquitetura ou não.

Esse é o mesmo padrão de todos os outros programas Linux (e a maioria dos programas que não são Mac Unix).

Se você deseja executar a partir da "árvore de origem",

  1. Você deve obter um sistema de compilação real e fazer uma compilação, porque nunca "executa a partir da árvore de origem", executa um executável compilado, que seu sistema compila em algum lugar e pode copiar ou vincular ativos no local com a mesma facilidade.
  2. Se o seu sistema de construção estiver muito ruim, verifique também .ou ./assetsetc., e depois procure um novo sistema de construção mais tarde no desenvolvimento.

Ao contrário do happy_emi, você definitivamente deve fornecer uma maneira de substituir isso por variáveis ​​de ambiente. É exatamente para o que eles se destinam.


fonte
Também considerar essas variáveis de ambiente, que são padrão em desktops Linux: standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
bogglez