Strife of Mythology Tower Defense

Glossário

editar
Termo Descrição
Wave Um conjunto de inimigos que nascem em conjunto em momentos do jogo.
Trilha Caminho pré-determinado que será seguido pelas waves. Caso um inimigo chegue ao fim da trilha, o jogador sofre uma punição.
Tower Defense Um estilo de jogo onde um jogador deve impedir unidades inimigas de completarem seu objetivo utilizando torres.
SoMTD Strife of Mythology Tower Defense.
GCS Gerência de configuração de software.
UnB Universidade de Brasília.

Contexto do Projeto

editar

O enredo desse projeto gira em torno da disciplina de desenvolvimento de jogos digitais e de gerência de configuração de software da Faculdade Gama da Universidade de Brasília. E tem como objetivo o empacotamento dos jogos desenvolvidos na disciplina de jogos com pelo alunos de GCS.

O jogo selecionado para empacotamento foi SoMTD. Que é um jogo de estilo Tower Defense, onde o objetivo é impedir que as waves de monstros avancem pela trilha utilizando torres que atacam. A medida em que as "waves" são vencidas, elas ficam mais fortes e difíceis. Haverá um recurso que servirá para evoluir e construir torres, e que será obtido conforme os monstros forem derrotados.

Plano de Gerenciamento de Configuração de Software

editar

Introdução

editar

Este plano tem como objetivo definir as atividades que serão realizadas no projeto final da disciplina de gerência de configuração de software da universidade de Brasília.

Objetivo

editar

O objetivo do presente projeto é realizar o empacotamento do jogo SoMTD para os sistemas operacionais MacOS e Linux, possibilitando assim a distribuição do mesmo e de jogos desenvolvidos na disciplina de Jogos Digitais, ministradas na UnB, de maneira ainda mais acessível para usuários.

Escopo

editar
  • Criação de pacotes .dmg para fácil instalação em ambientes MacOS.
  • Criação de pacotes .deb para instalação em distribuições linux baseadas no Debian.

Gerenciamento de Configuração de Software

editar

Cronograma

editar
Data Marco
24/04 Apresentação do plano de GCS
25/04 a 08/04 Estudo de diretrizes sobre empacotamento Debian
25/04 a 08/04 Estudo de diretrizes sobre empacotamento MacOS
09/05 a 15/06 Implementação de empacotamentos do projeto
29/05 Andamento dos projetos - Ponto de Controle 1
05/06 Andamento dos projetos - Ponto de Controle 2
16/06 a 17/06 Finalização e revisão do projeto
17/06 a 18/06 Elaboração da apresentação do projeto
19/06 Apresentação final do projeto

Papeis

editar
Membro Tarefa
Gabriel Silva Desenvolver e aplicar o planejamento de GCS
Pedro Sales Desenvolver e aplicar o planejamento de GCS

Dependências do sistema

editar

A arquitetura do jogo é dividida em dois grandes módulos. Um sendo a ijengine e outro o módulo do jogo. O módulo da ijengine é responsável por fornecer um mecanismo de para a utilização de eventos do computador como eventos de teclado, mouse, gerenciamento de windows entre outra coisa e por sua vez possui dependências da biblioteca SDL2. Enquanto o módulo do jogo é responsável por utilizar a ijengine e lógica do jogo. A lista completa de dependências é apresentada a seguir:

ijengine

  • gcc
  • g++
  • libsdl2-dev
  • libsdl2-ttf-dev
  • libsdl2-image-dev
  • libsdl2-mixer-dev

Jogo

  • gcc
  • g++
  • ijengine
  • lua5.2-dev

Como compilar a ijengine

editar

Para compilar a ijengine, primeiro instale as dependências com o seguinte comando:

sudo apt-get install g++ libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev

Em seguida compile com o seguinte comando:

make

Com esse comando um biblioteca libijengine.a será gerada e também um mini-módulo chamado kernel na pasta kernel/sdl2. Também é necessário instalar a ijengine com o comando a seguir:

sudo make install

Como esse comando a biblioteca será instalada em /usr/local/include.

Como compilar o jogo

editar

Com a ijengine instalada, compie e colo o mini-módulo kernel para a pasta libs no diretório raiz do jogo. Caso a pasta libs não exista, crie uma.

Em seguida instala a dependencia do jogo com o seguinte comando:

sudo apt-get install lua5.2-dev

E para compilar execute o seguinte comando:

make

Um binário deve ser gerado na pasta bin. Dessa forma, execute o jogo com o seguinte comando:

./bin/SoMTD

Criando os pacotes

editar

Para a criação do .deb primeiramente foi compilado o jogo, já com a ijengine também compilada, em uma distribuição Debian, com suas dependências previamente instaladas. Em seguida, foram organizados os diretórios de forma de acordo com o seguinte diagrama:

strife-of-mythology_1.0_all  
├── DEBIAN
│   └── control
└── usr
    ├── bin
    │   └── strife-of-mythology
    │       ├── bin
    │       │   └── SoMTD
    │       ├── libs
    │       │   └── kernel.so.0.1.0
    │       ├── lua-src
    │       │   ├── Action.lua
    │       │   ├── Button.lua
    │       │   ├── Panel.lua
    │       │   ├── Tower.lua
    │       │   └── Unit.lua
    │       ├── res
    │       │  ├── (Imagens e txts)
    │       └── somtd.png
    └── share
        ├── applications
        │   └── strife-of-mytology.desktop
        └── doc
            └── strife-of-mythology
                └── copyright

Os meta-dados são descritos no arquivo control, como a seguir:

Package: strife-of-mythology
Version: 1.0
Installed-Size: 17692
Maintainer: Dylan Jefferson M. Guimarães Guedes <djmgguedes@gmail.com>
Section: games
Architecture: all
Priority: optional
Depends: libsdl2-dev, libsdl2-ttf-dev, libsdl2-image-dev, libsdl2-mixer-dev, lua5.2
Description: A 2d-isometric Tower Defense based on mythology.
 O SoMTD é um jogo de estilo Tower Defense, onde o objetivo é impedir que as waves de monstros avancem pela trilha utilizando torres que atacam. A medida em que as "waves" são vencidas, elas ficam mais fortes e difíceis. Haverá um recurso que servirá para evoluir e construir torres, e que será obtido conforme os monstros forem derrotados.

No arquivo copyright foi explicitada a Licença Pública Geral GNU (GNU General Public License). O launcher da aplicação foi descrito no arquivo stryfe-of-mythology.desktop , como a seguir:

[Desktop Entry]
Name=Strife Of Mythology
Version=1.0
Exec=/usr/bin/strife-of-mythology/bin/SoMTD 
Icon=/usr/bin/strife-of-mythology/somtd.png
Type=Application
Terminal=false
StartupNotify=true
Encoding=UTF-8
Path=/usr/bin/strife-of-mythology/

Finalmente, após a configuração dos referidos arquivos, foi executado o seguinte comando no diretório externo ao do jogo:

dpkg-deb --build strife-of-mythology_1.0_all

O comando realiza o empacotamento, gerando o pacote .deb strife-of-mythology_1.0_all.deb, podendo este ser distribuído e executado em diversas distribuições linux.

Para a geração do .dmg foi utilizado a ferramenta appdmg(https://www.npmjs.com/package/appdmg) um modulo npm que automatiza o processo padrão para criação de dmgs.

Para a geração é necessário a criação de um arquivo chamado spec.json com a seguinte informações:

{"title": "Strife of Mythology","contents": [{ "x": 448, "y": 344, "type": "link", "path": "/Applications" },{ "x": 192, "y": 344, "type": "file", "path": "SoMTD" }]}

SoMTD é o caminho relativo para a pasta que será criada para o dmg e Applications a pasta target onde será instalado os arquivos. Feito isso, basta executar o seguinte comando:

appdmg spec.json SoMTD.dmg

A pasta SoMTD é basta com os arquivos necessários para a execução do jogo, ou seja, os recursos(imagens, sons, fonts e código lua) assim como os binários do kernel e do jogo. Não contendo código do jogo.

Também foi desenvolvido um Launcher.command. Arquivo que executa o jogo.

#!/bin/bash

parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )

cd "$parent_path"

./bin/SoMTD

Esse arquivo consiste em um script bash que executa o jogo. Para executa-lo via GUI, foi usado o seguinte comando chmod u+x para transformalo em executável e adicionado a extensão .command para mapear para um terminal.

Como instalar o pacote

editar

Para a instalação do pacote criado no presente trabalho, basta acessar o repositório onde o mesmo se encontra e executar o seguinte comando:

sudo dpkg -i strife-of-mythology_1.0_all.deb

O jogo será instalado no diretório usr/bin/strife-of-mythology . Para execução do mesmo, pode-se executar o binário a partir do diretório raiz do jogo com o seguinte comando:

./bin/SoMTD

ou executar o launcher criado no momento da instalação do pacote.

Para a instalação do .DMG, faça o download do arquivos presente no link na próxima sessão. Após o download, arraste a pasta do jogo para Applications. Em seguida execute o Launcher.

PS.: Não conseguimos configurar a dependência lua5.2 via dmg. Para instalar via dmg, instale o lua5.2 antes.

editar

Debian package - https://drive.google.com/file/d/0B1BuoMkWlTnUbDdvbUMtZnNjcmM/view?usp=sharing

DMG package - https://drive.google.com/file/d/0B1BuoMkWlTnUV242OUIwV2dLeTg/view?usp=sharing

Gameplay - Imagens e Video

editar

Um video de gameplay foi gravado e pode ser acessado no link https://www.youtube.com/watch?v=vrD_XxZo9p8

Gameplay - Como Jogar

editar

Para jogar, clique no botão jogar. Dessa forma uma nova partida começará. O objetivo do jogo é sobreviver ao ataques dos monstros.

Para derrotar a onda de monstro que continuará a surgir enquanto a sua torre estiver com vida, você deve criar elementos de defesa clicando nos NPCs no canto inferior esquerdo e comprando estes elementos, podendo avançar para os níveis II, III, e IV de defesa para cada NPC.

Integração Contínua

editar

O arquivos a seguir .travis serve para integração continua caso a equipe de desenvolvimento deseje prosseguir com o desenvolvimento.

sudo: required
dist: trusty
language: cpp

install:
  - sudo apt-get update
  - sudo apt-get install -y libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev lua5.2-dev
compiler:
   - g++
script:
  - make

Matéria - Gerência de Configuração de Software

editar

Experiências

editar

De forma geral a utilização de GCS e a abordagem de empacotamento do jogo como trabalho final foi proveitosa para os alunos envolvidos nesse trabalho. Uma vez que nunca trabalharam com empacotamento. O que trouxe uma nova área de conhecimento para o envolvidos.

Desafios e Dificuldades

editar
  • Desafio de compilar
  • Desafio de fazer com que o jogo rodasse
  • Muitos erros no macOS

Referências

editar