TCC PDF - lotuzgames
Transcrição
TCC PDF - lotuzgames
GENIS: ASSISTENTE PARA O DESENVOLVIMENTO DE JOGOS DE AÇÃO E RPG ARTHUR FERREIRA DE SOUZA PETRÓPOLIS OUTUBRO DE 2012 GENIS: ASSISTENTE PARA O DESENVOLVIMENTO DE JOGOS DE AÇÃO E RPG ARTHUR FERREIRA DE SOUZA Trabalho apresentado no curso de Formação em Tecnologia da Informação e Comunicação do IST – Petrópolis - FAETC como requisito parcial para obtenção do grau de tecnólogo. Orientador: M.Sc. Sicilia Ferreira Ponce Pasini Judice PETRÓPOLIS OUTUBRO DE 2012 2 ARTHUR FERREIRA DE SOUZA GENIS: ASSISTENTE PARA O DESENVOLVIMENTO DE JOGOS DE AÇÃO E RPG Trabalho apresentado no curso de Formação em Tecnologia da Informação e Comunicação do IST-Petrópolis- FAETEC como requisito parcial para obtenção do grau de tecnólogo. Aprovado em ___/___/___ Banca Examinadora ____________________________ M.Sc. Sicilia Ferreira Ponce Pasini Judice ____________________________ Mozar Baptista da Silva ____________________________ Bruno Clemente Guingo 3 “You are in a maze of twisty passages, all alike." ZORK (1981) 4 5 Resumo Este trabalho destina-se a descrever o desenvolvimento do Assistente de desenvolvimento Genis, que tem como objetivo permitir o desenvolvimento e modificação de jogos eletrônicos do gênero action RPG, apresentando-se como uma alternativa de baixo custo às populares engines de desenvolvimento de jogos. É descrito o desenvolvimento de End’Gar, um jogo que utiliza as ferramentas desta engine, com o objetivo de demonstrar suas funcionalidades. Os conceitos de game design necessários para o desenvolvimento de um projeto também são explorados de forma a montar uma boa experiência para o jogador. Palavras-Chave: Jogos, Game Engine, Xna Framework. 6 Abstract The present work intends to describe the development of the Genis Wizard, that has the objective of allowing the creating and modification of video games of the action rpg genre, presenting itself as a low cost alternative to the mainstream game engines. The development of the game End’Gar with this tool set is also described, demonstrating the engine functionalities. The game design concepts necessary to create a good player experience are also utilized and described. 7 Lista de Figuras 1. Ambiente de desenvolvimento das engines .................................................. 14 2: Interface do jogo Secret of Mana, representante do gênero Action RPG. ..... 16 3. Interface do jogo de ação DOOM, subgênero first person shooter ................ 17 4. Personalização de personagem no jogo Mount & Blade ................................ 18 5. Modo de batalha do jogo Final Fantasy IX ..................................................... 19 6. League of Legends, jogo que usa a habilidade do jogador em combinação com características do personagem. ......................................................................... 20 7. Modelo de tileset ............................................................................................ 22 8. Spritesheet da animação de um morcego ...................................................... 23 9. A ferramenta de edição de mapas ................................................................. 26 10. Configuração de mapa e objetos do editor ................................................... 27 11. Edição de movimentação na ferramenta de criação de mapas .................... 28 12. Ferramenta de criação de objetos ................................................................ 29 13. Ferramenta de criação de PNJ..................................................................... 30 14. Ferramenta de criação de inimigos .............................................................. 31 15. Ferramenta de criação de itens .................................................................... 32 16. Modelo XML de um Item serializado ............................................................ 33 17. Ferramenta de criação de missões .............................................................. 34 18. Diagrama dos mapas do jogo....................................................................... 37 19. Pacote de animações utilizado no desenvolvimento do jogo ....................... 39 20. Código da função BasicDamage .................................................................. 40 21. Código da função DamageReduction ........................................................... 40 8 22. Indicadores de stamina na interface do jogo ................................................ 41 23. Indicadores de pontos de vida do personagem na interface do jogo ........... 42 24. Arquivo XML de configuração de input ......................................................... 43 25. Tela de ajuda do jogo ................................................................................... 44 26. Atalhos das habilidades do personagem exibidos na interface do jogo ....... 44 9 Sumário Introdução ............................................................................................................ 11 1.1 Motivação .................................................................................................... 11 1.2 Objetivos ..................................................................................................... 11 1.3 Organização do texto .................................................................................. 12 Contextualização .................................................................................................. 13 2.1 Jogos de Ação e RPG ................................................................................. 15 2.1.1 Jogos de ação ...................................................................................... 16 2.2.2 Jogos de RPG ...................................................................................... 17 2.1.3 Conceitos do Subgênero Ação e RPG.................................................. 19 A Ferramenta Genis ............................................................................................ 21 3.1 Objetivos do Assistente ............................................................................... 21 3.2 Detalhes da Implementação ....................................................................... 22 3.2.2 Animação de Efeitos ............................................................................. 23 3.2.3 Inteligência Artificial .............................................................................. 24 3.2.4 Pathfinding – Astar................................................................................ 24 3.3 Ferramentas ................................................................................................ 25 3.3.1 Editor de Mapas e Eventos ................................................................... 27 3.3.2 Editor de Objetos do Mapa ................................................................... 28 3.3.3 Editor de Personagens-Não-Jogáveis (PNJ) ........................................ 29 3.3.4 Editor de Inimigos ................................................................................. 31 3.3.5 Editor de Itens ....................................................................................... 32 3.3.6 Editor de Missões ................................................................................. 33 Desenvolvendo um Jogo ...................................................................................... 35 4.1 Projeto do Jogo ........................................................................................... 35 4.2 Recursos Gráficos....................................................................................... 38 4.3 Mecânica do Jogo ....................................................................................... 39 4.4 Métodos de Entrada .................................................................................... 43 4.5 Testes do Jogo............................................................................................ 45 Conclusão e Trabalhos Futuros ........................................................................... 47 Referências Bibliográficas .................................................................................... 49 10 Capítulo 1 Introdução Este trabalho tem como objetivo desenvolver uma ferramenta que permita a personalização de um jogo eletrônico para computador, com elementos de aventura e RPG, provendo as ferramentas necessárias para isso, assim como um modelo básico de jogo a partir do qual o utilizador poderá trabalhar. O desenvolvimento de todos os aspectos de um jogo é um processo complexo, que consome uma grande quantidade de tempo e recursos, assim como exige um conhecimento avançado dentro da área de desenvolvimento de software. Para auxiliar nesse desenvolvimento existe uma categoria de software conhecida como game engine, cujo principal objetivo é abstrair o processo de desenvolvimento, reduzindo os custos associados ao processo. [1] 1.1 Motivação 1.2 Objetivos A ferramenta desenvolvida neste trabalho deverá abstrair ao máximo este processo, de forma que mesmo uma pessoa sem nenhum conhecimento de linguagens programação possa fazer uso da ferramenta de maneira completa. Será dado foco exclusivo a um gênero de jogo, o gênero Action RPG, de forma que a engine será desenvolvida especificamente para atender às necessidades deste tipo de jogo. Será provido inicialmente um modelo básico de jogo, com condições de início e fim, assim como recursos gráficos pré-definidos, que podem ser utilizados livremente durante o desenvolvimento do jogo. Além disso, diversas ferramentas 11 responsáveis pela edição de cada aspecto do conteúdo deste jogo também serão fornecidas. 1.3 Organização do texto O Capítulo 2 apresenta uma introdução sobre ferramentas de desenvolvimento de jogos eletrônicos existentes no mercado atualmente, bem como argumenta as razões pelas quais as mesmas são utilizadas. Além disso, o referido capítulo explica os conceitos de diferentes gêneros de jogos eletrônicos. No Capítulo 3 é apresentada a game engine proposta por este trabalho. São apresentados também os recursos tecnológicos utilizados para o desenvolvimento desta ferramenta. Também serão explicadas as funcionalidades vistas em cada ferramenta da game engine, assim como detalhes da implementação de aspectos fundamentais da estrutura e mecânica do jogo, como a movimentação de agentes e a estrutura de animações e mapas escolhida para o desenvolvimento do jogo. O Capítulo 4 apresenta o processo de desenvolvimento de um jogo utilizando as ferramentas criadas, descrevendo os pontos positivos e negativos deste experimento. Este capítulo tem por objetivo ilustrar a aplicação de uma game engine através de um real desenvolvimento de jogo eletrônico. No Capítulo 5 apresenta-se a conclusão do trabalho após a utilização das ferramentas criadas, assim como os planos de desenvolvimentos futuros para as ferramentas criadas. 12 Capítulo 2 Contextualização Todo jogo possui uma engine, ou seja, um “motor”, responsável por gerenciar aspectos como a criação de cenários, personagens, tratamento de dados, inteligência artificial, movimentação de personagens, video, áudio, etc. No início da história dos jogos, antes do surgimento das engines como ferramentas à parte, os jogos eram desenvolvidos a partir do zero [1]. O sistema precisava ser desenvolvido de forma a aproveitar o máximo do potencial do hardware de acordo com as características de cada jogo em particular. Com o desenvolvimento e evolução do hardware, o reaproveitamento de certas funcionalidades se tornou possivel. Os jogos ainda seriam cuidadosamente otimizados, porém a facilidade de reutilizar funcionalidades comuns tornaria o desenvolvimento mais rápido e eficiente, características essenciais com o crescimento do mercado e necessidade cada vez maior de desenvolver e publicar um jogo em pouco tempo. Atualmente, ao se desenvolver um jogo, há um grande número de ferramentas e tecnologias disponíveis para facilitar o desenvolvimento, citando como exemplo as engines Unity [2] e Unreal [3], ambas já amplamente aceitas e utilizadas profissionalmente. Apesar disso, a maioria das ferramentas tende a ter como objetivo atender necessidades presentes em variados gêneros de jogos eletrônicos, sendo necessário, em geral, que haja um esforço de desenvolvimento de aspectos básicos de alguns gêneros, que, por não serem necessidades gerais, não estão presentes. Assim, a opção que resta aos desenvolvedores é buscar engines específicas para o gênero do jogo a ser desenvolvido. A Figura 1 ilustra o ambiente de desenvolvimentos das engines Torque2D [4], RPG Maker VX [5], Unity3D [2][29] e GameMaker [6]. 13 Figura 1. Ambiente de desenvolvimento das engines: (a) Torque2D; (b) RPG Maker VX; (c) Unity3D; (d) GameMaker. Atualmente, cresce cada vez mais as participação no mercado de jogos de desenvolvedores hobbistas, ou indies, como são conhecidos os desenvolvedores que se comprometem a criar um jogo sem o investimento de capital de uma empresa de publicação, de forma que o financiamento do desenvolvimento é totalmente feito pelos próprios desenvolvedores. [23][24] No desenvolvimento independente, sem financiamento, em geral, não há verba para a utilização de engines profissionais, como a Unreal Engine, que custa $2500 dólares por usuário, com custo adicional de acordo com o rendimento do jogo desenvolvido, sendo necessária a utilização de engines gratuitas ou open source [7]. A ferramenta deve atender às necessidades específicas dos projetos que serão desenvolvidos, reduzindo o trabalho dedicado a reconstrução de 14 aspectos básicos do jogo. Desta forma, ela permite que mais tempo seja dedicado à criação de conteúdo e gameplay, o conjunto de regras que define o funcionamento do jogo, reduzindo o tempo gasto no desenvolvimento e, consequentemente, aumentando a qualidade do produto final [8]. Aspectos internos de mecânicas de jogo, métodos de entrada, armazenamento de informações, já devem ser cobertos pela engine. Se tratando de uma engine específica para um gênero de jogo, a variedade de funcionalidades disponíveis é reduzida. Entretanto, as mesmas podem ser atender à necessidades mais específicas do gênero, reduzindo ainda mais o tempo gasto com o desenvolvimento de funcionalidades básicas, já cobertas pela engine [9]. 2.1 Jogos de Ação e RPG O gênero denominado “Ação e RPG” (do inglês Action RPG) subgênero que contempla uma grande gama de títulos, pois é um inclui elementos variados de ambos os gêneros de ação e de RPG. Estes títulos podem ser representados em variadas combinações de gameplay, resultando em uma grande variedade de experiências para o jogador, tudo dentro de um mesmo gênero [10]. Muitos jogos atravessam continuamente a linha entre ambos os gêneros, e nesta definição se encaixam alguns dos títulos mais conhecidos de todos os tempos, como World of Warcraft [11] e Secret of Mana [12]. A Figura 2 ilustra a interface do jogo Secret of Mana. 15 Figura 2: Interface do jogo Secret of Mana, representante do gênero Action RPG. 2.1.1 Jogos de ação Os jogos classificados com o gênero de ação têm como característica principal incorporar um tipo de gameplay que enfatize desafios físicos, tais como a coordenação motora do jogador e seu tempo de reação [8]. Dentro do gênero de ação, geralmente o jogador tem controle do avatar, representação do usuário no universo virtual, utilizando este personagem para explorar diferentes cenários, enfrentar inimigos e obter itens [8]. A Figura 3 ilustra a interface do jogo de ação DOOM [13]. É frequente a existência de confrontos com inimigos mais poderosos ao fim de cada sessão do jogo, em situações que apresentam mais desafios ao jogador. Eventualmente são apresentados quebra cabeças a serem resolvidos, mas estes são raros neste gênero, e tendem a ser simplificados, pois o tempo é um elemento crucial dos jogos de ação. 16 O avatar do jogador deve possuir uma representação de sua capacidade, através de um número que represente a quantidade de vidas ou uma medida que represente o nível de sua saúde atual. Inimigos encontrados e obstáculos tendem a causar dano ao jogador ou a custar vidas. O objetivo final do jogador, nestes gêneros de jogos, é alcançar o final dos cenários disponíveis. Existem também os jogos no qual não existe um objetivo final determinado, com cenários gerados aleatoriamente, cujo único objetivo do jogador é continuar sua progressão. Figura 3. Interface do jogo de ação DOOM, subgênero first person shooter. 2.2.2 Jogos de RPG Os jogos classificados com o gênero de RPG (do inglês Roleplaying Games), são derivados dos jogos clássicos de RPGs, conhecidos como RPG de Mesa (denominação usada por se utilizar apenas de papel e lápis, e todos os jogadores estarem sentados à mesa). Um exemplo do RPG de Mesa é o jogo Dungeons & Dragons [14]. 17 Este gênero é caracterizado pela imersão profunda do usuário em um universo ficcional, no qual o jogador controla um único personagem ou um grupo, que deve cumprir variadas missões. A evolução do personagem com o tempo de jogo, profunda imersão do jogador na história e elementos de narrativa são elementos fundamentais deste gênero [15]. A figura 4 ilustra a personalização do personagem no jogo Mount & Blade, na qual o jogador pode determinar quais serão as habilidades que irá desenvolver com a evolução do personagem. Figura 4. Personalização de personagem no jogo Mount & Blade. O combate também tem suas bases nos RPGs de mesa, sendo mais tático do que nos jogos de ação. Muitos tem seus combates baseados em turnos, um personagem tomando ação por vez, a partir de uma lista de comandos possiveis apresentados ao jogador, como ilustrado na figura 5. Em geral o objetivo é construir um combate no qual o jogador precisa planejar uma estratégia para enfrentar o adversário, ao invéz de utilizar atributos físicos como tempo de reação. A evolução do personagem se dá 18 através da conclusão de variadas missões e do progresso na história do jogo, sendo a narrativa um aspecto marcante deste gênero. Os jogos se encerram geralmente de acordo com a conclusão de uma linha de histórias, ou o encerramento de uma série de missões. Figura 5. Modo de batalha do jogo Final Fantasy IX. 2.1.3 Conceitos do Subgênero Ação e RPG O subgênero de Ação e RPG une alguns elementos de ambos os gêneros. Uma de suas características principais é deixar de lado o modelo de combate tático ou em turnos, em favor do modelo utilizado nos jogos de ação, fazendo mais uso das habilidades do jogador durante o combate, em combinação com as habilidades do personagem. Um exemplo desta mecânica é o uso de ataques baseados em movimentos do mouse, ao mesmo tempo, considerando a capacidade de mira do personagem para calcular a probabilidade de sucesso do golpe. Desta forma, o gênero une as características de evolução do personagem, populares nos RPGs, com a utilização das habilidades do jogador, que tornam os jogos de ação 19 populares como visto na Figura 6, que ilustra o uso de uma habilidade do personagem, no local determinado pelo jogador, no jogo League of Legends [16]. Figura 6. League of Legends, jogo que usa a habilidade do jogador em combinação com características do personagem. A imersão nas histórias geralmente não é tão ampla quanto nos RPGs, e em geral, o foco passa a ser o gameplay mais rápido e exigente do jogador, com uma quantidade menor de elementos táticos. Este gênero será o foco da ferramenta Genis proposta no presente trabalho. 20 Capítulo 3 A Ferramenta Genis A ferramenta Genis foi desenvolvida como um conjunto de ferramentas e bibliotecas na Linguagem C# [17] com intuito de auxiliar no desenvolvimento de jogos eletrônicos com elementos de ação e aventura. Também foi escolhido o uso do framework Microsoft XNA [18][26][30], que possibilita a abstração de alguns conceitos fundamentais presentes em todos os jogos. Desta forma, o processo de desenvolvimento se torna mais fácil por não ter a necessidade de acesso a funções de mais baixo nível, permitindo assim manter o foco em questões mais específicas do desenvolvimento do assistente. Neste capítulo falaremos sobre escolhas tecnológicas relacionadas à implementação de aspectos do assistente. Além disso, será descrito o conjunto de ferramentas que compõe o assistente. 3.1 Objetivos do Assistente O assistente de desenvolvimento Genis foi desenvolvido com intuito de atender a determinados requisitos, dentre eles se destacam: ● Ser uma ferramenta de desenvolvimento de jogos focada em jogos de ação e RPG, provendo o suporte necessário para este gênero de jogo, não tendo a ambição de servir a uma grande variedade de gêneros; ● Fornecer uma estrutura básica de jogo, tendo o usuário o papel de construir cenários, inimigos e eventos que interajam com o jogador e determinem o fluxo do mesmo; ● Ser responsável pelo armazenamento de todos os dados referentes ao jogo sendo desenvolvido, assim como dados de partidas salvos pelo jogador, tendo sido o jogo já desenvolvido; 21 ● Apresentar uma interface de uso simples e intuitiva, que ofereça acesso fácil às funcionalidades, sendo essas auto-explicativas, e provendo as informações necessárias para que o usuário faça seu uso corretamente. 3.2 Detalhes da Implementação A biblioteca base da engine possui módulos próprios, responsáveis pela animação de efeitos visuais, inteligência artificial, movimentação, e wrappers, ou seja, classes responsáveis por abstrair algumas funcionalidades já existentes, permitindo uma utilização simplificada de funcionalidades do framework XNA, como interação com usuário através do mouse, teclado e joystick. 3.2.1 Mapas A engine utiliza de uma implementação de mapas 2D chamada tile engine. [28] Este modelo consiste, basicamente, de um array (vetor) bidimensional que tem como função armazenar valores correspondentes a um objeto tile. Este objeto tile consiste de informações relacionadas a um tipo de terreno como a textura ou a possibilidade do personagem do jogo caminhar ou não sobre este terreno. A Figura 7 ilustra um modelo de tileset. Figura 7. Modelo de tileset. 22 Neste caso, cada mapa possui um número de camadas, cada camada sendo representada por um array bidimensional, cujos valores fazem referência ao índice das texturas utilizadas na renderização do cenário, de acordo com uma tabela de texturas conhecida como tile set. No momento da renderização do cenário, os arrays de dados de cada mapa são interpretados de acordo com o tileset. Em uma técnica de modelagem similar, cada mapa possui um mapa de colisão. Este mapa consiste em um array bidimensional responsável por armazenar valores iniciais sobre a movimentação do personagem. Ele define as regiões do mapa que não podem ser atravessadas pelo personagem do jogo, assim como regiões que possuem alguma característica especial que afete a movimentação do personagem. 3.2.2 Animação de Efeitos A animação de jogos 2D muitas vezes é baseada no uso de um conceito conhecido como Spritesheet [28][31], que consiste no uso de uma única imagem na qual estão localizados todos os frames da animação (Figura 8). Figura 8. Spritesheet da animação de um morcego. 23 O algoritmo de animação varre esta imagem, selecionando uma fração da mesma por vez, que é exibida como um quadro de animação. A qualidade e suavidade da animação será de acordo com a quantidade de frames e velocidade da animação. Utilizamos esta técnica, sendo cada animação composta de um grupo de imagens, cada imagem sendo uma direção da animação. Desta forma, ao mudar de direção, apenas alteramos a textura que é desenhada, e o processo de seleção do quadro prossegue normalmente. 3.2.3 Inteligência Artificial A aplicação de inteligência artificial em jogos eletrônicos foge do campo tradicional, pois tem como principal objetivo criar uma imersão do jogador no ambiente, através da ilusão de comportamento inteligente dos agentes do jogo. Desta forma, geralmente são utilizadas técnicas deterministicas, ou seja técnicas cujo resultado é previsivel, determinado a partir de um conjunto de entrada. Como exemplo temos o comportamento de perseguição. É sabido que este comportamento tem como objetivo alcançar o alvo, independente da distância ou local. Logo o comportamento é previsível. [25][27] Neste caso, foi definido que os agentes teriam comportamentos definidos, de forma a tornar a jogabilidade mais simples e previsível, dependente unicamente do poder atribuído a cada personagem criado. 3.2.4 Pathfinding – Astar Para a locomoção dos agentes não controláveis nos jogos, é necessário um mecanismo que os permita se deslocar no mapa de forma independente. Para isso foi utilizado um algoritmo de pathfinding combinado a uma escolha aleatória de movimento. [25] Pathfinding é o processo computacional de buscar o caminho mais curto entre dois pontos em um mapa. Com este fim foi utilizado o algoritmo A* (Astar) [19]. Este algoritmo trabalha em cima de um mapa dividido em nós. Cada nó é uma sessão definida do mapa, alguns são livres, outros são obstáculos, e entre 24 dois nós há um custo de deslocamento, que iremos considerar um valor fixo de 1. Todos os nós livres são adicionados a uma lista de nós, a lista aberta. Os nós indisponíveis, que não serão considerados válidos durante o deslocamento, são adicionados à lista fechada e não serão considerados. O primeiro passo do algoritmo é adicionar o nó inicial (A) à lista fechada. Os nós adjacentes ao nó inicial são adicionados à lista aberta. Para cada nó é atribuída uma pontuação G + H sendo G o custo total de movimentação do nó A até o mesmo. Para um nó adjacente a A, este valor é 1. Conforme o algoritmo avançar em direção ao destino, o cálculo de G deve considerar o valor de G do nó que precede o anterior. O segundo componente do valor é H, o custo estimado do movimento deste nó até o destino. Esta aproximação pode ser feita através de uma heurística simples, como apenas o cálculo da distância ignorando obstáculos. Este processo é mais acurado de acordo com o quão avançada é a heurística que determina o valor de H. O nó com menor valor de G + H é selecionado da lista aberta, adicionado à lista fechada, passa a ser o nó atual e o processo é repetido até que o nó de destino seja encontrado. A partir daí, sendo traçado o caminho inverso, a partir do nó pai de cada nó, está localizado o caminho. [20] 3.3 Ferramentas O assistente é composto de um conjunto de ferramentas que fazem uso das bibliotecas criadas assim como das bibliotecas do framework XNA. Cada ferramenta é responsável por um aspecto específico do desenvolvimento. A ferramenta central é o editor de mapas e eventos, a partir do qual se pode acessar as outras ferramentas (Figura 9). ○ Editor de Mapas e Eventos ■ Editor de Objetos do Mapa 25 ■ Editor de Personagens-Não-Jogáveis (PNJ) ■ Editor de Inimigos ■ Editor de Itens ■ Editor de Missões Figura 9. A ferramenta de edição de mapas. Os dados gerados pela ferramenta são armazenados em um banco de dados SQLite3, que consiste de um único arquivo no sistema de arquivos. A biblioteca do jogo se responsabiliza pela conexão com o banco de dados e manutenção da camada responsável pelo gerenciamento dos dados. Ao se realizar uma edição na ferramenta, as alterações são feitas simultaneamente no banco de dados. Os recursos gráficos utilizados pela ferramenta, como tilesets, spritesets, ícones, efeitos gráficos, dentre outros, estão disponíveis fixamente, pois são recursos compilados pelo framework XNA. Recursos adicionais 26 poderiam ser adicionados ao compila-los utilizando o processador de conteúdo do framework. 3.3.1 Editor de Mapas e Eventos Permite a criação de cenários, os quais são construídos a partir de tiles, assim como a criação de eventos que definem as interações do jogador com os mapas e objetos presentes nos mesmos. Cada mapa está associado a um tileset específico, armazenando para cada tile o índice da textura que o compõe, de acordo com o tileset. O tileset pode ser alterado na aba de Tiles da ferramenta de edição de mapas. Os tilesets possuem um tamanho padrão, tendo cada tile 32x32 pixels. O tileset possui 8 colunas de tiles, e uma largura fixa de 256 px. A altura do tileset deverá ser um múltiplo de 32, de acordo com o número de linhas do tileset. A figura 10 mostra as diferentes abas que compõe a ferramenta, sendo cada uma relacionada a um conjunto de objetos ou configurações. Figura 10. Configuração de mapa e objetos do editor. 27 Para preencher um mapa com uma textura é necessário adicionar camadas ao mapa. As camadas são exibidas de acordo com a ordem na qual são adicionadas. Desta forma, as texturas que irão compor o chão do cenário devem ser adicionadas à primeira camada. Posteriormente devem ser adicionadas camadas para elementos que ficarão acima do chão, como pedras ou plantas. O número de camadas de um mapa é ilimitado, mas é necessário haver ao menos uma camada. Além de preencher o mapa com as texturas, é necessário definir as regiões do mapa atravessáveis ou não pelo jogador, como se pode ver na figura 11. As ferramentas de definição de movimentação estão disponíveis no menu de ferramentas. Esta definição ficará associada ao tile, indepentende do número de camadas existentes no mapa, e poderá ser visualizada no editor. Figura 11. Edição de movimentação na ferramenta de criação de mapas. 3.3.2 Editor de Objetos do Mapa Esta ferramenta permite que sejam criados objetos mais complexos para composição do cenário, como árvores ou estátuas, grandes objetos estáticos que ocupam mais do que apenas um tile no mapa. Estes objetos são tratados 28 pelo motor de colisão da mesma forma que outros personagens, e ao serem inseridos no mapa no editor de cenários, automaticamente definem os tiles nos quais se localizam como ocupados. Figura 12. Ferramenta de criação de objetos. Ao criar um novo objeto, o gráfico do mesmo pode ser escolhido a partir da lista de recursos disponíveis, e então o usuário pode definir o ponto de origem do objeto, ou seja, o ponto que será a base do objeto, assim como definir o raio de colisão do objeto, seu limite físico. 3.3.3 Editor de Personagens-Não-Jogáveis (PNJ) O editor de PNJ é a ferramenta responsável por criar os personagens que irão interagir com o jogador. Personagens que definem o tom do jogo, que podem possuir diálogos simples, apresentar um mercado de itens, atribuir ao jogador uma missão ou dar algum tipo de dica ou direção. Esses comportamentos são definidos para cada PNJ criado. 29 Figura 13. Ferramenta de criação de PNJ. A ferramenta permite criar uma lista de diálogos apresentados por este PNJ, cada diálogo possuindo uma lista de possiveis respostas. Para cada resposta, pode haver uma ação atribuída. ● Atribuir missão: atribui ao jogador uma missão, escolhida a partir da lista de missões, no momento de criação do diálogo; ● Entregar missão: verifica o estado atual de uma missão que o jogador possua e executa a ação correspondente ao cumprimento da mesma; ● Mostrar mercado: a partir da lista de itens existentes no jogo (criadas a partir do Editor de Itens), pode-se criar um “mercado” de compra e venda ou exclusivamente de compra ou de venda de itens, cujo acesso é feito através da interação do jogador com o PNJ. 30 3.3.4 Editor de Inimigos A ferramenta de edição de inimigos permite a definição de características como velocidade e poder de ataque dos inimigos encontrados durante o jogo. Apresenta também uma lista de sprites de personagens existentes para que seja escolhida a imagem do inimigo. Figura 14. Ferramenta de criação de inimigos. A ferramenta possui um editor de loot (ou ‘saque’), os itens que podem ser obtidos pelo jogador ao derrotar o inimigo no jogo. Neste editor é escolhido um item a partir de uma lista de itens do jogo, e definida uma probabilidade de obter o mesmo após derrotar o inimigo, assim como a quantidade máxima do mesmo que se pode obter. 31 3.3.5 Editor de Itens O editor de itens é a ferramenta responsável pela criação de todos os itens que serão encontrados no jogo. Itens relacionados a missões, peças de equipamento que podem ser usadas características, armas, ou temporário. cada item A itens pelo jogador utilizados também é para para causar atribuída uma melhorar suas algum efeito imagem, sua representação no inventário do jogador e na tela do mercado, assim como o valor pelo qual o item ficará disponível caso seja inserido em uma loja para ser comprado pelo jogador. Figura 15. Ferramenta de criação de itens. 32 Ao criar um item, é criada uma referência no banco de dados, porém as informações do item são armazenadas em arquivos xml. A escolha do armazenamento em XML ao invés do banco de dados foi feito devido ao fato dos itens conterem apenas informações pertinentes ao próprio item, sem relacionamentos com outras entidades do jogo, o que possibilitaria utilizar de métodos de serialização do framework .net, que realizam o processo de serialização e o processo inverso automaticamente, que é um processo muito mais ágil, em termos de tempo de desenvolvimento. A figura 16 representa um modelo de item após a serialização em XML. Figura 16. Modelo XML de um Item serializado. 3.3.6 Editor de Missões Esta ferramenta possibilita a criação de missões que podem ser cumpridas pelo jogador. As missões criadas são então disponibilizadas na interface de criação de PNJ, de forma que seja possivel atribuir uma missão ao jogador após um diálogo. 33 Figura 17. Ferramenta de criação de missões. A atribuição de missões ao jogador define o fluxo da evolução da dificuldade do jogo. Consistem basicamente de determinar que o jogador enfrente determinados inimigos, obtendo experiência e itens adicionais, que auxiliem a evolução do jogador. As condições de conclusão do jogo são determinadas através de missões marcadas com a flag de conclusão de jogo. Ao concluir uma missão marcada com esta propriedade o jogo se encerra, e a tela de fim de jogo é apresentada ao jogador. As missões criadas pela ferramenta se dividem em dois objetivos: ● Obtenção de Item: o jogador precisa estar em posse de determinado item. O mesmo pode ser registrado como parte do loot de um inimigo ou estar disponível em um evento localizado em um objeto do mapa, como um baú. ● Matar Criaturas: é determinado um número de inimigos que o jogador deverá enfrentar para cumprir a missão. Este tipo de missão tem como principal objetivo incentivar o jogador a enfrentar inimigos e obter experiência, obrigando-o a se desenvolver, além de posteriormente oferecer como recompensa experiência que também colaborará com a evolução do personagem. 34 Capítulo 4 Desenvolvendo um Jogo Tendo finalizado o desenvolvimento do assistente , o próximo passo é criar um jogo capaz de demonstrar cada aspecto da engine, ao mesmo tempo mantendo uma simplicidade de conteúdo, de forma que pudesse ser desenvolvido rapidamente por apenas uma pessoa. Para isso foi desenvolvido End’Gar, um jogo de aventura e RPG, aos moldes dos clássicos jogos de mesa. Os elementos de gameplay seguem os padrões de dungeon crawl, tipo de RPG de ação que consiste da exploração de cenários como masmorras e cavernas, repletos de criaturas e tesouros. Este tipo de aventura, em geral, não possui imersão do jogador em termos de história, e se dedica, basicamente, a oferecer uma experiência diretamente focada no gameplay, tornando o gênero ideal de jogo para ser desenvolvido rapidamente e demonstrar a utilidade da ferramenta. Neste capítulo abodaremos o processo de desenvolvimento de um jogo, de seu conceito à implementação de acordo com as definições impostas pela ferramenta. 4.1 Projeto do Jogo O modelo de jogo sugerido tem a simplicidade como foco. O jogador irá explorar um conjunto de mapas, com objetivo de enfrentar variadas criaturas, adquirir itens e evoluir o personagem. Ao concluir o jogo, o jogador será apresentado à tela de fim de jogo, e terá a oportunidade de salvar seu personagem. Assim poderá iniciar uma nova sessão de jogo, tendo a opção de 35 criar um novo personagem ou de recomeçar o jogo com seu personagem salvo, mantendo seu nível, experiência, itens e habilidades, porém reiniciando as missões do jogo. Para adicionar replay value, ou seja, fator que influencia o jogador a tornar a jogar um jogo, os inimigos serão criados de forma a oferecerem um nível de desafio acima do que é esperado que o jogador seja capaz de obter durante a primeira partida, e variados itens estarão disponíveis para serem obtidos, de forma que seja possível não obte-los durante a primeira sessão de jogo. Assim o jogador ainda terá novas descobertas conforme inicia uma nova sessão de jogo. Ao enfrentar experiência, criaturas e concluir missões, o jogador irá obter que contribui para a evolução de níveis. A experiência (E) necessária para o jogador avançar para o próximo nível é determinada pela fórmula: E = 50x² - 150x + 200, onde x é o nível atual do jogador. Esta fórmula é uma adaptação da fórmula de experiência utilizada no jogo Tibia [21]. De acordo com o avanço de níveis, o jogador passará a ter uma quantidade maior de pontos de vida, e passará a ter a sua disposição habilidades que o ajudarão no combate. Estas habilidades serão obtidas de acordo com o nível do jogador. Conforme se dá a evolução dos 10 primeiros níveis do jogador, cada avanço tornará disponível uma nova habilidade. A partir do nível 11 o jogador continuará evoluindo, porém não irá obter nenhuma nova habilidade. O objetivo do jogo é que o jogador explore os mapas até concluir todas as missões atribuidas pelo PNJ. Caso o personagem morra, o jogador precisará recomeçar o jogo, sendo possível salvar suas características apenas ao encerrar o jogo. Desta forma, criamos um certo elemento tático, no qual o jogador deverá planejar que caminhos fará, que inimigos enfrentará, acumulando itens e experiência, para poder eventualmente explorar todos os mapas com facilidade. Ao encerrar o jogo, o jogador poderá recomeçar, mantendo as características e itens que obteve ao concluir. 36 Foi criado um conjunto de mapas em uma progressão rápida de dificuldade, com um pequeno número de missões. Neste gênero, as missões atribuidas ao jogador têm como objetivo auxiliar o jogador a entender os caminhos e ações que devem ser realizadas, recomepensando-o por cumprir o fluxo planejado do jogo, e permitindo que a dificuldade do jogo escale de acordo com a evolução consequente das missões do jogo. Foi criado um diagrama com o esboço de como seria o fluxo do jogador, do ponto inicial do jogo, do primeiro contato com o PNJ, até o último local do jogo, no qual o jogo se encerra (Figura 18). Figura 18. Diagrama dos mapas do jogo. Para representar este modelo, foram criados 8 mapas baseados em um único conjunto de texturas, de forma a estabelecer o conceito de uma única localidade sendo apresentada, sem uma mudança no ambiente apresentado ao jogador, havendo apenas uma progressão neste ambiente. As missões serão atribuídas ao jogador pelo PNJ presente no primeiro mapa. Estas missões o levarão, em ordem, aos mapas 2, 3 e 4. A última missão atribuída ao jogador o levará ao último mapa do cenário, no qual enfrentará um personagem mais poderoso. Esta missão será o requisito de conclusão do jogo. 37 4.2 Recursos Gráficos Um dos principais obstáculos encontrados por desenvolvedores hobistas é a criação de recursos gráficos. Os gráficos utilizados são um dos aspectos que determina a impressão inicial e uma das memórias que se mantém em relação a um jogo, sendo desta forma muito importantes para o sucesso do mesmo. A qualidade dos gráficos não está necessariamente relacionada ao número de polígonos utilizados em um modelo 3D, ou à resolução das imagens utilizadas, mas ao contexto montado com cuidado, de forma que não haja uma incoerência nos gráficos do jogo, como modelos 3D de alta qualidade envolvidos por um cenário desenvolvido claramente com cuidado inferior. Este recurso importante possui um custo, que muitas vezes está muito além do orçamento de um desenvolvedor independente. Para fins de experimento, foi tomado o caminho utilizado pela maioria dos desenvolvedores hobistas durante o desenvolvimento de um protótipo de jogo: o uso de texturas. Para a criação dos mapas foram utilizados tilesets encontrados em bancos de recursos disponíveis gratuitamente na internet. Texturas desenvolvidas por artistas independentes que as tornam disponíveis com condições limitadas de uso, como o uso apenas para fins de demonstração e não para distribuição comercial. Estes recursos podem ser encontrados em websites como OpenGameArt.org, no qual se pode encontrar arte sob diferentes licenças de uso. Outra possibilidade de baixo custo é a compra de pacotes de recursos. Os spritesets utilizados para a animação dos personagens do jogo foram obtidas através do portal da empresa GarageGames, que oferece variados pacotes de recursos gráficos a custos acessíveis a desenvolvedores independentes [16]. Desta forma o desenvolvedor hobista ou em produção de um protótipo de jogo não necessita arcar com os altos custos de um artista profissional. (Figura 19) 38 Figura 19. Pacote de animações utilizado no desenvolvimento do jogo. 4.3 Mecânica do Jogo A mecânica básica do jogo será baseada no uso de cliques do mouse e hotkeys, ou teclas de atalho, para o uso de habilidades do personagem. Os ataques do personagem são baseados em suas características de ataque e as características de defesa do adversário. As armas utilizadas pelo personagem possuem o atributo Poder de Ataque, que combinado ao seu atributo Força e ao atributo Armadura do adversário, compõe a fórmula através da qual o dano causado pelos ataques do jogador é determinado. O dano básico dos ataques do jogador é calculado pelo poder de ataque da arma, adicionado de 1% para cada ponto de força do personagem, como no jogo Dofus, da Ankama Games [22]. A Figura 19 mostra o código do dano básico calculado através da função BasicDamage. 39 Figura 20. Código da função BasicDamage. A redução do dano recebido é um valor percentual baseado no valor do atributo Armadura do personagem. De acordo com a fórmula: R = 100 / (100 + A), sendo A o atributo Armadura e R a redução percentual do dano recebido. A Figura 20 mostra o código da redução do dano recebido, executada através da função DamageReduction. Figura 21. Código da função DamageReduction. Desta fórmula, o dano recebido pelos personagens no jogo é calculado pela fórmula: D = DB – ( RED/100 * DB ), onde DB é o dano básico calculado acima, RED é o valor de redução de dano calculado acima, e D é o dano final recebido pelo personagem. Esta fórmula é baseada na fórmula utilizada pelo jogo League of Legends, da empresa Riot Games [16], e foi escolhida por apresentar uma escala simples de compreender pelo jogador, apresentando uma evolução rápida na proteção inicial do personagem, porém com uma progressão mais lenta conforme maiores são os valores. 40 Para evitar uma característica comum dos jogos de ação, conhecida popularmente como button mashing na qual o jogador apenas pressiona repetidamente o mesmo botão, para executar uma ação repetidamente, foi adicionado um atributo ao jogador chamado Stamina. Este atributo é responsável por representar a energia do personagem, e é consumido durante ataques físicos, habilidades, ou quando o jogador utiliza o comando de correr com o personagem. Este valor está presente na interface do jogo, em formato de barra, com o valor atual e valor máximo de stamina do personagem, assim como um indicador que se torna verde ou vermelho, caso o personagem possua um valor de stamina que permita executar um ataque. A Figura 21 ilustra a barra de stamina e o indicador de ataque. Figura 22. Indicadores de stamina na interface do jogo. A stamina se recupera periodicamente, assim como os pontos de vida do personagem, e a cada nível o seu valor máximo irá aumentar. O jogador também pode acelerar a velocidade de recuperação utilizando itens que possuam esta característica. 41 Desta forma criamos uma situação na qual o jogador precisa cuidar de quantos ataques utiliza e do quanto utiliza a habilidade de correr, assim como as habilidades de ataque e defesa de seu personagem, adicionando mais um elemento tático à mecânica do jogo. Os pontos de vida do personagem seguem o mesmo mecanismo da stamina. O personagem possui inicialmente um valor fixo de 200 pontos de vida, aos quais são acrescentados 20 pontos por nível do personagem. Estes pontos são a representação da saúde do personagem. São recuperados periodicamente, ou com o consumo de itens com este efeito. Em uma batalha, quando este valor é reduzido a zero, o personagem morre e o jogo acaba. O jogador perde seu progresso até aquele ponto e deve recomeçar o jogo. A Figura 22 ilustra os indicadores de pontos de vida do personagem. Figura 23. Indicadores de pontos de vida do personagem na interface do jogo. Os itens adquiridos pelo jogador ficam disponíveis na interface de inventário, acessível pelo atalho CTRL + I. Há um número limite de itens exibidos no inventário, de forma que para o jogador visualizar todos os itens que possui, caso o número esteja além do limite, ele precisará se livrar de alguns itens. Isto é 42 possível através do botão “Jogar Fora”, localizado no canto inferior direito da interface, e assim o item é removido do inventário do jogador. 4.4 Métodos de Entrada O jogo é controlado pelo uso do teclado e mouse. Por padrão, a movimentação do personagem é feita utilizando as teclas W (cima), A (esquerda), S (baixo), D (direita), formato de movimento bem explorado por jogos de tiro em primeira pessoa e alguns jogos de ação e aventura. O jogador também pode se movimentar clicando com o botão esquerdo do mouse no cenário. Esta movimentação utiliza pathfinding para determinar o caminho até o destino, que a partir daí é traçado fazendo uso de técnicas de steering behavior para realizar o desvio de outros personagens e obstáculos dinâmicos. A interação com PNJ e inimigos se dá utilizando o botão direito do mouse. Ao clicar em um inimigo ou PNJ, o personagem irá se deslocar até o mesmo, e então iniciar a interação, exibindo diálogos ou realizando um ataque. As configurações de input são personalizáveis, e armazenadas em um arquivo XML. Figura 24. Arquivo XML de configuração de input Os principais comandos utilizados são apresentados ao jogador ao escolher a opção “Como Jogar” no Menu Inicial do jogo. A Figura 23 mostra a tela inicial do jogo. 43 Figura 25. Tela de ajuda do jogo. Para utilizar as habilidades do personagem, o jogador usará as teclas F1 até F10. De acordo com o nível do personagem, as habilidades disponíveis ficarão visíveis em uma barra na região inferior da tela, apresentando a tecla correspondente. Este modelo de interface é utilizado globalmente em jogos do gênero, e permite a visualização rápida, evitado a necessidade do jogador memorizar todos os comandos que pode utilizar, ao mesmo tempo evitando aglomerar uma grande quantidade de informações na tela. Figura 26. Atalhos das habilidades do personagem exibidos na interface do jogo. 44 4.5 Testes do Jogo Tendo sido desenvolvido um protótipo de jogo utilizando a ferramenta, passou-se à fase de testes, na qual a mecânica e fluidez do jogo são testados de forma a buscar um nível equilibrado de dificuldade e diversão. Ao mesmo tempo são feitas tentativas de levar o jogo a situação que não tenham sido testadas no momento de desenvolvimento, com objetivo de encontrar falhas. Inicialmente foi considerado o controle do personagem através de ambos os métodos de movimento, teclado e mouse, assim como a possibilidade de interação com a interface através de teclado e mouse. A interação do personagem com PNJ e Inimigos também se dá através do teclado. Porém após uma sequência de sessões de testes, o controle do personagem na interação com PNJ e inimigos através do teclado se mostrou complexa e ineficiente, pois fazia com que o jogador precisasse deixar o mouse de tempos em tempos, se focando hora no teclado, hora no mouse. Foi escolhido então o sistema utilizado com mais frequência em jogos do gênero, o movimento através das teclas WASD, com a possibilidade de configuração deste método de entrada, assim como a movimentação através do mouse. Já as interações do jogador com os inimigos e PNJ é dada totalmente através do mouse, assim como as interações com as interfaces, diálogos e menus, exceto pelas teclas de atalho utilizadas para abrir ou fechar os menus. O uso de teclas de atalho para as habilidades também é um método amplamente adotado em jogos de RPG de ação, permitindo que o jogador mantenha-se utilizando o mouse para executar as interações normais enquanto utiliza as habilidades através dos atalhos. Algumas alterações no nível de dificuldade dos inimigos foram necessárias após o desenvolvimento inicial. Após algumas sessões de testes é possível determinar que nível de dificuldade parece mais adequado para o jogador, assim como planejar quais equipamentos seria adequado que o jogador possuísse em determinada fase do jogo, e a partir daí realizar ajustes na 45 frequência de obtenção de determinados itens, assim como na quantidade de experiência obtida em determinadas missões e inimigos. Os ajustes de detalhes do gameplay são extremamente importantes nesta fase. Após o protótipo inicial é necessário analisar ao máximo os aspectos que tornam a experiência do jogador mais ou menos agradável, e realizar os ajustes necessários para se obter um jogo equilibrado, que propicie uma experiência prazeroza aos jogadores. 46 Capítulo 5 Conclusão e Trabalhos Futuros O desenvolvimento de um jogo desde suas fundações é um trabalho extremamente longo e complexo, que envolve um nível de conhecimento das ferramentas utilizadas e de lógica de programação avançado, assim como o conhecimento desenvolvimento de de problemas jogos que se apresentam eletrônicos, e em geral particularmente no não costumam ser encontrados quando se faz o desenvolvimento de sistemas que apenas armazenam e consomem dados. O aumento na complexidade do trabalho se dá de forma rápida de acordo com o número de funcionalidades adicionadas à mecânica do jogo, o que pode se tornar uma experiência extremamente complicada para um desenvolvedor menos experiente. A utilização de ferramentas prontas para o desenvolvimento reduz de forma drástica o esforço utilizado, permitindo que o foco seja dado totalmente a questões relacionadas ao que o jogo em si deve tratar. Reduzindo a possibilidade de problemas derivados da falta de experiência, de forma que é mais adequado para um especialida no projeto de jogos desenvolver um protótipo utilizando uma ferramenta pronta. Considerando a proposta desta ferramenta, a possibilidade de modificar a forma como o jogo flui e as interações do jogador são a base para uma engine mais complexa, que possa abordar gêneros diferentes de jogos eletrônicos. As limitações apresentadas pela ferramenta, como a determinação de objetivos finais fixos para o jogo, não se mostraram como empecilhos ao se desenvolver um jogo que se encaixava no gênero para o qual a ferramenta foi projetada, porém, seria impossível desenvolver um jogo que fugisse ao gênero determinado inicialmente, o que é uma limitação a ser considerada. 47 Trabalhos futuros incluem possibilitar a utilização da linguagem Lua como linguagem de script, que seria utilizada na criação de PNJ com comportamentos mais variados e na adição de eventos que interajam com o jogador, escritos completamente em linguagem de script, acessando métodos da biblioteca da engine, permitindo uma personalização maior da forma como a ferramenta funciona, o que por si só já aumentaria a flexibilidade da ferramenta em termos de gênero desenvolvido. Além disso, a inclusão de inteligência artificial baseada em máquinas de estado finito, dando uma profundidade maior às interações do jogador com os agentes do jogo, assim como o uso da linguagem de script no controle da inteligência articial faz com que se possa ter um controle fino do comportamento dos agentes, e ainda assim ter um comportamento automatizado. Também é visado possibilitar aos usuários a criação de novas classes de personagens, novas habilidades para o personagem, assim como possibilitar o uso de habilidades pelos inimigos, aumentando a complexidade e o desafio dos jogos. A adição de recursos gráficos pelo jogador também é um dos próximos objetivos da ferramenta. 48 Referências Bibliográficas [1] What is a Game Engine. Game Career Guide. Disponível em: http://www.gamecareerguide.com/features/529/what_is_a_game_.php Acesso: Maio 2012. [2] UNITY: Game Development Tool. Unity Technologies. Disponível em http://unity3d.com/unity/. Acesso: Agosto 2012 [3] Unreal Engine. UDK. Epic Games Inc. Disponível em: http://www.unrealengine.com/udk/ Acesso: Outubro 2012. [4] TORQUE 2D. Garage Games. 2012. Disponível em http://www.garagegames.com/products/torque-2d. Acesso: Agosto 2012 [5] RPG MAKER VX. Enterbrain Inc. Disponível em http://www.rpgmakerweb.com/ Acesso: Agosto 2012 [6] GameMaker. YoYo Games. Disponível em: http://www.yoyogames.com/gamemaker/studio Acesso: Outubro 2012 [7] Licenciamento Unreal Engine Disponível em: https://www.unrealengine.com/udk/licensing/purchase/#personal-form Acesso: Novembro 2012. [8] ADAMS, Ernest. Fundamentals of Game Design. New Riders. 2009 [9] The Engine Survey: Technology Results. Gamasutra. Disponível em: http://www.gamasutra.com/blogs/MarkDeLoura/20090316/903/The_Engine_ Survey_Technology_Results.php Acesso: Outubro 2012. 49 [10] Hack And Slash: What Makes a Good Roleplaying Game?. 1Up. Disponível em: http://www.1up.com/do/blogEntry?bId=9030743. Acesso: Novembro 2012 [11] World of Warcraft. Blizzard Entertainment Inc. Disponível em: http://us.battle.net/wow/pt/ Acesso Outubro 2012. [12] Secret of Mana. Square Enix. Disponível em: http://dlgames.squareenix.com/som/en/ Acesso Novembro 2012. [13] DOOM. Id Software. Disponível em: http://www.idsoftware.com/games/doom/doom-ultimate/ Acesso: Novembro 2012 [14] Dungeons & Dragons. Wizards of the Coast LLC. Disponível em: http://www.wizards.com/dnd/ Acesso Dezembro 2012. [15] BARTON, Matt. The History of Computer Role-Playing Games. Gamasutra. 2007. Disponível em: http://www.gamasutra.com/view/feature/3623/the_history_of_computer_.php Acesso: Outubro 2012 [16] 2D Fantasy Character Pack. GarageGames. Disponível em: http://garagegames.com/products/2dfantasycharpack Acesso: Junho 2012. [17] Visual C#. Microsoft. Disponível em : http://msdn.microsoft.com/pt- br/vstudio/hh388566.aspx. [18] Microsoft XNA Framework. Disponível em: http://xbox.create.msdn.com/enus Acesso: Setembro 2012. [19] Introduction to A*. From Amit’s Thoughts of Pathfinding. Disponível em: http://theory.stanford.edu/~amitp/GameProgramming/AStarComparison.html Acesso: Novembro 2012. 50 [20] A* Pathfinding for Beginners. Patrick Lester. http://www.policyalmanac.org/games/aStarTutorial.htm Disponível Acesso: em: Outubro 2012. [21] Tibia. CipSoft GmbH. Disponível em: http://www.tibia.com/library/?subtopic=experiencetable Acesso: Julho 2011 [22] DOFUS. Ankama Games. Disponível em: http://www.dofus.com/en [23] The State of Indie Gaming, Gamasutra. Disponível em: http://www.gamasutra.com/view/feature/132041/the_state_of_indie_gaming.p hp Acesso: [24] Indie Game Makers Dominate IOS and Android. Flurry. Disponível em: http://blog.flurry.com/bid/82758/Indie-Game-Makers-Dominate-iOS-andAndroid Acesso: [25] BUCKLAND, Mat. Programming Game AI by Example. Jones & Bartlett Learning, 2005. [26] CARTER, Chad. Microsoft XNA Unleashed. SAMS, 2008. [27] MARK, Dave. Behavioral Mathematics for Game AI. Course Technology PTR, 2009. [28] PERRY, Jim. RPG Programming with XNA Game Studio 3.0. Jones & Bartlett Learning. 2009 [29] GOLDSTONE, Will. Unity 3.x Game Development Essentials. PACKT Publishing. 2011. [30] LOBÃO, Alexandre. EVANGELISTA, Bruno. DE FARIAS, José Antonio Leal. Beginning XNA 2.0 Game Programming, From Novice to Professional. APRESS. 2008. 51 [31] LOQUIDICE, Bill; BARTON, Matt. Vintage Games: An Insider Look at the History of Grand Theft Auto, Super Mario, and the Most Influential Games of All Time. Focal Press. 2009 52