# Panda3D/Manual/Criando um instalador com packpanda

Nota: Desde a versão 1.6.0, foi adicionado suporte ao Linux. Antes dessa versão packpanda so poderia ser usado no Windows.
Packpanda é um utilitário que permite que voce crie automaticamente instaladores de extração automatica para um jogo panda3d. No linux ele é capaz de criar um pacote .rpm ou .deb. No windows ele cria um wizard de instalação, que parecerá com isso:
Quando a instalação estiver pronta, o usuário final encontrará seu game no menu iniciar.
O usuário final não precisa ter uma cópia do panda. Ele não precisa nem saber que está usando o panda. Ele apenas instala o game e joga.
Arquivos que seu jogo deve conter:
Antes de empacotar seu jogo, voce precisa colocar todos os seus arquivos de jogo em um único diretório ( que pode conter quantos subdiretorios voce desejar ). Esse diretorio sera empacotado e enviado ao usuario final, junto com o sistema de runtime panda. Seu diretorio de game precisa ter varios arquivos:
main.py:
This is your main program. When the user clicks on the start-menu entry for the game, this is the file that will get executed.
installer.bmp: Apenas para windows. Essa image aparecerá na janela do instalador. Se presente, deve ser um arquivo bmp windows de 164x314. Esse arquivo não é necessário.
license.txt: Essa é a licença de software do seu jogo. O arquivo, se presente, deve ser ascii apenas. A licença de jogo vai aparecer dentro do instalador, e será também copiada para o diretorio de instalação do jogo. Claro que a licença só cobre o código que voce escreveu, não o próprio panda, que é coberto pela licença panda. O arquivo de licença não é necessário.
icon.ico: Apenas windows. Esse é o icone do seu game, que aparecerá no menu start. Se você não suprir um ícone, o icone do panda será usado. Esse arquivo não é necessário.
Empacotando seu Game
O comando para empacotar seu game é "packpanda", e voce precisa especificar a opção de linha de comando "--dir" para dizer o nome do diretorio contendo seu game. Packpanda vai imediatamente analisar seu game e mostrar o relatorio de status:
Nesse exemplo, packpanda deduziu que o nome do jogo é "Airblade", baseado no nome do diretório. No Windows, ele vai isntalar o jogo em "C:\Airblage", e adicionará no menu iniciar "Airblade", e o instalador ele chamará "Airblade.exe" ( mude para .rpm ou .deb para linux ). Posteriormente, vamos mostrar como mudar alguns desses padrões.
Como você pode ver, packpanda está procurando dentro do diretorio do seu jogo pelos arquivos mencionados acima> main.py, installer.bmp, icon.ico e licence.txt. Ele nota que alguns desses arquivos estão faltando, o que não é um problema. O único arquivo essencial é main.py.
Packpanda pode limpar sua source tree antes de empacotar. Quando o faz, packpanda nunca modifica a copia original do seu game. Ao invés disso, ele copia o game para um diretório temporário como você pode ver acima.
Gerando automaticamente arquivos BAM e PYC enquanto empacota:
Packpanda pode opcionalmente criar arquivos BAM e PYC e envia-los ao usuario final. Para pedir ao packpanda que o faça, use as opções de linha de comando seguintes:
packpanda --bam # Gera e envia arquivos BAM packpanda --pyc # Gera e envia arquivos PYC
Essas opções de linha de comando não removem os arquivos EGG e PY correspondentes da distribuição. Se você deseja remover esses arquivos, você precisa usar --rmext opção, documentada abaixo.
Quando packpanda gera arquivos BAM e PYC, ele o coloca no mesmo diretório dos arquivos EGG e PY correspondentes. Se um arquivo EGG contiver um caminho de textura, então o BAM gerado terá um caminho relativo para a textura, relativo em relação ao diretorio raiz do jogo. Packpanda assegura que o diretorio raiz do jogo termine esteja no caminho do modelo.
Verificação de EGG e PY
Packpanda irá checar se todos os seus arquivos EGGe PY estão compilados corretamente. Ele checa os arquivos EGG os rodando no egg2bam. Ele checa os arquivos PY os rodando no compilador python. Se qualquer arquivo falhar, o jogo não será empacotado.
De fato, isso é relacionado ás opções --bam e pyc mencionadas antes. Packpanda gera sempre arquivos bam e pyc. Contudo, es voce não especificar as opções --bam e --pyc, então esses arquivos serão gerados, verificados e descartados. O efeito das opções --bam e pyc é de fazer os arquivos serem enviados ao usuário final.
Pré-carregando o cache de modelo
Se sua distribuição incluir arquivos EGG, e você escolher não os remover com --rmext egg, então panda os converterá para arquivos BAM no momento da instalação. Este é um processo que consome tempo e faz a instalação demorar mais para ser concluída. Se voce quiser evitar isso, não distribua os arquivos EGG - distribua arquivos BAM, como explicado acima.
Tirando arquivos da distribuição
Geralmente sua cópia mestre do jogo contêm arquivos que não devem ser enviados ao usuário final. Para situações como essa, packpanda contem opções de linha de comando para tirar arquivos desnecessários.
packpanda --rmdir dir # tira todos os diretorios com o nome dado packpanda --rmext ext # tira todos os arquivos com a extensão dada
Essas opções são particularmente úteis em várias situações comuns:
Para remover diretorios CVS: packpanda --rmdir CVS
Para enviar BAM ao invés de EGG: packpanda --bam --rmext egg
Para enviar PYC ao invés de PY: packpanda --pyc --rmext py
Mudando o nome do jogo
Normalmente, packpanda presume que o nome do seu jogo seja o mesmo nome do diretorio do jogo. Isso não é sempre conveniente, especialmente quando o jogo tem um nome longo. A seguinte opção de linha de comando diz ao packpanda o nome do jogo:
packpanda --name "Malignos Macacos Espaciais do Planeta Zort"
Essa string aparecerá em vários lugares: em particular, pelos dialogos da isntalação e do menu iniciar.
Número da Versão
Se você desejar, você pode dar ao seu jogo um número de versão usando essa opção de linha de comando:
packpanda --version X.Y.Z # Dá um número de versão
A única coisa que isso faz é adicionar "X.Y.Z" ao diretorio de instalação e ao item do menu iniciar. Isso torna possivel duas versões do mesmo game coexistindo sem conflito em um mesmo PC.
Velocidade de Compressão
No Windows, packpanda usa um algoritmo de compressão muito bom, mas muito lento para comprimir. Você pode especificar essa opção de linha de ocmando para fazê-lo ir mais rapido, ao custo da efetividade de compressão: ( Não disponível no Linux )
packpanda --fast # Rápido, mas menor compressão
Indo além do Packpanda
Packpanda possui muitas limitações. Contudo, packpanda é atualmente um front end para sistemas mais poderosos. No linux, ele usa um sistema de ferramentas dpkg-deb e rpmbuild. No Windows ele usa NSIS, o "Sistema de instalação scriptável Nullsoft". NSIS é incrivelmente poderoso e muito flexível, mas infelizmente bem complicado de usar. Packpanda esconde toda essa complexidade de você, mas ao fazer isso, ele limita suas opções.
Se você achar que packpanda não é mais o suficiente, a melhor coisa a fazer seria aprender como usar esses sistemas diretamente. Essa é uma transição bem fácil. O primeiro passo é simplesmente ver o packpanda em ação. Ele lhe mostrará todos os comandos que está executando. Você pode copiar esses comandos no arquivo batch. Se você rodar esses arquivo batch, você estará executando essas ferramentas base diretamente.
Assim que você tiver ganho controle total sobre o NSIS, você poderá começar a editar as opções de linha de comando NSIS e o arquivo de configuração NSIS (packpanda.nsi). Mas é calro, para fazer isso você primeiro deve ler o manual NSIS (disponivel na internet). Daí em diante voce vai ter flexibilidade ilimitada.