# Babel
## Contexto do Projeto

Este projeto faz parte de uma série de trabalhos desenvolvidos na disciplina de Gerência de Configuração de Software ministrada na Universidade de Brasíla, campus Gama. Este jogo faz parte de um conjunto de jogos desenvolvidos na disciplina de Jogos Digitais e que serão empacotados por outros alunos na disciplina de Gerência de Configuração de Software.
O jogo escolhido foi o Babel, o jogo possui um enredo futurista onde a humanidade estava vagando pelo universo a procura de um planeta habitável, quando enfim encontraram um planeta desconhecido. Neste planeta havia uma torre gigantesca e estranha; Neste cenário o jogador deve explorar a torre e o planeta afim de coletar recursos e desvendar mistérios.

## Introdução
### Objetivo

Empacotar o projeto Babel - Exploration Game, que foi desenvolvido em C, para conseguir distribuir o jogo de forma que as pessoas consigam instalá-lo e iniciá-lo de forma fácil.

### Cronograma

| Data início / término | Marco |
| 24/04/2017 - 24/04/2017 | Apresentação/averiguação do plano de gerência de configuração de software para o presente projeto |
| 25/04/2017 - 28/04/2017 | Configuração do ambiente para execução do projeto |
| 29/04/2017 - 02/05/2017 | Configurar ambiente de integração contínua |
| 03/05/2017 - 06/05/2017 | Estudo dos conceitos de empacotamento (RPM, DEB, ... ) |
| 07/05/2017 - 12/05/2017 | Inicio da implementação de empacotamentos do projeto |
| 29/05/2017 | Ponto de Controle 1 |
| 30/05/2017 - 03/05/2017 | Ajustes após o ponto de controle 1 |
| 04/05/2017 - 04/06/2017 | Finalização do empacotamento do projeto |
| 05/06/2017 | Ponto de Controle 2 |
| 06/06/2017 - 15/06/2017 | Ajustes após o ponto de controle 2 |
| 16/06/2017 – 18/06/2017 | Preparar Apresentação final |
| 19/06/2017 | Apresentação Final |
| 26/06/2017 | Apresentação Final |
| 03/07/2017 | Apresentação Final |

### Escopo

Estará dentro do escopo do projeto os tópicos abaixo:
* Realizar integração contínua
* Criar tutorial para auxílio na instalação do jogo
* Empacotamento do jogo Babel

## Gerenciamento de Configuração de Software
### Papéis

| Membro | Tarefa |
| Nicácio Arruda | Planejar e executar o gerenciamento de configuração de software além de documentar como empacotar o Babel. |
| Leonardo Arthur | Planejar e executar o gerenciamento de configuração de software além de documentar como empacotar o Babel. |

### Ferramentas

| Ferramenta | Descrição |
| Git | Sistema de Versionamento |
| Github | Repositório remoto |
| travisCi | Serviço de integração contínu |

## Integração Contínua

Para fazer a integração contínua do projeto com o travis, inicialmente criou-se o arquivo .travis.yml
sudo: required
language: cpp
compiler:
- g++
script:
- ./install.sh
Sendo que o script install.sh foi criado pela equipe de GCS, o mesmo automatiza o processo de instalação das dependências e compilação da engine e do jogo. Após a contribuição verificou-se que a build estava passando corretamente.

## Preparação da jaula

Para fazer um empacotamento .deb é necessário criar uma máquina limpa para poder usar apenas todas as dependências necessárias. Para isso vamos criar um jaula que é um sistema operacional limpo, dentro de uma pasta no seu sistema operacional já existente.
O primeiro passo é instalar o pacote dchroot com o comando
Ao instalar será pedido uma permissão, confirme a permissão apertando S ou Y.
Segundo passo é instalar o pacote debootstrap com o comando
O terceiro passo é criar um diretório para ser a jaula onde irá empacotar o projeto ou o que estiver em mente. O diretório pode ser criado onde desejar, no meu caso criou-se uma pasta em "/SECURITY/JAIL"
O quarto passo é trocar a configuração do arquivo localizado em "/etc/schroot/schroot.conf"
Entre as linhas que termina com "scratch" e a linha que se inicia com #[sid] , deverá ser adicionado
Onde [yakkety] é o nome que se refere ao sistema operacional que será instalado, no casso o Yakkety Yak = ubuntu 14.10.
Location é onde estará localizado o sistema operacional que irá instalar. Users é o nome do usuário
O quinto passo é usar o comando debootstrap, que é:
Ao usar o comando, repare que arc é a arquitetura do sistema, pode ser i386 ou AMD64 a depender da arquitetura que terá no mirror colocado logo abaixo.
Maverick é o nome do sistema que será instalado.
o site selecionado http://old-releases.ubuntu.com/ubuntu terá inserido no seu final a string "/dist" , a seguir o nome do sistema a ser instalado, "maverick" no caso acima e no site final espera-se que tenha a release do SO desejado, se for encontrado o arquivo no link, o SO será instalado no caminho indicado que é o "SECURITY/JAIL".
Ao terminar essa etapa de instalação a jaula estará pronta para o uso básico e poderá dar o início ao empacotamento.

## Preparação para empacotamento Debian do jogo Babel

O primeiro passo é clonar o repositório do jogo. Entre no site do projeto(Babel) e copie o endereço do git. Crie uma pasta no computador para clonar o projeto e abra a pasta criada a partir do terminal e digite o comando abaixo.
Após clonar é necessário entrar na pasta lib com o comando
Descompacte e instale a engine ijengine com o comando
Agora é hora de compilar o jogo para conseguir os arquivos binários, pasta importante para a criação do pacote do jogo. Utilize os seguintes comandos
Ao terminar o passo anterior com sucesso, na pasta game deve ter duas pastas essenciais, uma chamada bin e outra chamada res. A pasta bin contém o executável do jogo babel e a pasta res contém informações do jogo, como imagens, sons, mapas e outros arquivos. Essas duas pastas (bin e res) serão copiadas para outra pasta onde ocorrerá o empacotamento .deb.
Com as pastas copiadas (bin e res), saia das pastas do clone do projeto e crie uma nova pasta onde achar conveniente para iniciar o empacotamento, pode ser dentro de uma máquina virtual, um container uma jaula ou até mesmo no próprio computador.
Crie a pasta com o nome que terá o pacote. (Ex:babel-1.0)
Entre na pasta criada (babel-1.0),crie uma pasta chamada DEBIAN e entre nela
a pasta DEBIAN conterá dois arquivos, o control, responsável por armazenar informações do pacote, como nome do pacote, mantenedor, versão, breve descrição e outras opções. E o arquivo preinst que é opcional e contém o script para instalar as dependências do projeto antes de iniciar a instalação do jogo.
Crie um arquivo de texto chamado control que contenha as seguintes linhas:
Crie um arquivo de texto chamado preinst para instalar as dependências que foram citadas no arquivo acima (control). O arquivo conterá as seguintes linhas:
Voltando a estrutura raiz do empacotamento (pasta babel-1.0). Agora serão criadas novas pastas que representam a estrutura onde será instalado o pacote. No exemplo desta instalação decidiu-se instalar o pacote no caminho /usr/bin/babel-1.0/ e criar um ícone no diretório /usr/share/applications/babel para que possa ser executado pelo usuário com um clique. Abra o terminal na raiz da pasta que será o pacote (babel-1.0) e digite:
entre na pasta
crie a pasta bin, a pasta share e entre na pasta bin
cria a pasta babel-1.0
entre na pasta criada
Cole a pasta bin e a pasta res que foi copiada do clone do projeto Babel. Caso deseje também coloque uma imagem com extensão .png que será o ícone da aplicação a ser gerada.
retorne ao caminho "/babel-1.0/usr" com o comando
e entre na pasta share com o comando
crie duas pastas, a applications e a doc.
A pasta applications conterá o arquivo com a extensão .desktop, responsável por conter informações do ícone onde o usuário executará o programa com um clique. A pasta doc conterá a pasta babel que contém o arquivo de copyright.
Entre na pasta applications com o comando
Crie um arquivo de texto com o nome babel.desktop o qual conterá as seguintes linhas
O cabeçalho do arquivo indica que é um atalho para abrir o jogo. Os principais pontos deste arquivo são:
* Name: que conterá o nome do jogo
* Exec: que conterá o caminho do executável do jogo. Note que o caminho /usr/bin/babel-1.0/bin/babel não foi criado ainda, porém quando for criado o executável estará neste caminho.
* Icon: indica o endereço da foto para ser o ícone. Note que o caminho /usr/bin/babel-1.0/babel.png não foi criado ainda, mas será onde estará a foto para ser o ícone.
* Path: indica o caminho do jogo instalado. Note que o caminho também não existe ainda.
* Categories: Indica a categoria do jogo que se encontrará no computador. No caso foi definido Game, então o jogo poderá ser localizado na pasta jogos do linux mint testado.
Ao criar o arquivo babel.desktop, volte ao diretório /babel-1.0/usr/share, com o comando
Entre na pasta doc com o comando
Crie a pasta babel e entre nela
Crie um arquivo de texto chamado copyright que contenha as seguintes linhas
Após criar todos esses arquivos a estrutura está completamente montada e pronta para ser empacotada.

## Empacotamento Debian do jogo Babel

Para iniciar o empacotamento entre no diretório babel-1.0 o qual será o nome do pacote e volte um diretório digitando
Digita o comando para gerar o pacote.
O pacote .deb será criado no mesmo diretório que está a pasta babel-1.0. Agora é só instalar o pacote, pode ser pelo terminal com o comando, ou simplesmente abrindo o pacote, clicando em instalar e digitando a senha do root. O comando para instalar pelo terminar é o seguinte:
Agora basta abrir o jogo. É possível abrir clicando no menu e digitando babel, o jogo será encontrado com o seu ícone. Também é possível encontrar o jogo na aba jogo do linux mint. Um executável estará disponível no diretório /usr/share/applications/babel.

## Imagens do jogo

Galeria no postImages:
https://postimg.org/gallery/2vg6opkiu/

## Download do pacote

Entre no nosso fork e baixe o pacote:
https://github.com/Nicacioneto/Babel/blob/master/babel_1.0_all.deb