CENTRO UNIVERSITÁRIO FEEVALE
DANIEL COLNAGHI
XNA GAME PROGRAMMING
Novo Hamburgo, novembro de 2007
DANIEL COLNAGHI
XNA GAME PROGRAMMING
Centro Universitário Feevale
Instituto de Ciências Exatas e Tecnológicas
Curso de Ciência da Computação
Trabalho de Conclusão de Curso
Orientador: Ricardo Ferreira de Oliveira
Novo Hamburgo, novembro de 2007
AGRADECIMENTOS
Agradeço a meu irmão por
me ensinar a nunca desistir e por
toda a força que me deu no
decorrer dos anos, a minha mãe e
meu pai pela paciência, apoio e
por acreditarem em mim em todas
as horas difíceis, a minha
namorada Carol por me ajudar
sempre que possível e ao meu
orientador Ricardo por me
mostrar o caminho quando eu não
sabia mais por onde seguir.
RESUMO
O desenvolvimento de jogos tem crescido exponencialmente com o tempo,
provocando uma revolução na tecnologia de seu desenvolvimento. Segundo André
LaMothe, não existe limitações para o ser humano de criar jogos cada vez mais
avançados e com recursos que podem chegar bem próximo a realidade. Em dez anos
atrás os jogos produzidos eram tão avançados pra época que muitos ficavam se
perguntando o que mais poderia vir logo após, e hoje em dia os jogos produzidos já são
planejados para os computadores futuros, e nos deixam perguntando, que maquina será
preciso para rodar o jogo, ou até quando será lançada a máquina que rodará o hoje com
seus recursos máximos.
LISTA DE FIGURAS
Figura 1: Jogo Core Wars para o console Unix ................................................ 9
Figura 2: Pong versão do console Atari ........................................................... 10
Figura 3: Tela do jogo Wolfeinstein ................................................................. 11
Figura 4: Tela do jogo DOOM ........................................................................ 12
Figura 5: Microsoft XBOX 360........................................................................ 13
Figura 6: Inteligência Artificial do jogo Asteroids ........................................... 17
Figura 7: Diagrama de Inteligência artificial. ................................................... 18
Figura 8: Diferenças entre os Gráficos ............................................................. 19
Figura 9: Gráfico em três dimensões ................................................................ 20
Figura 10: Colisão em células ou tiles .............................................................. 20
Figura 11: Colisão usando um vetor 3D ........................................................... 21
Figura 12: Tela do jogo Warcraft 3 usando câmera fixa .................................. 22
Figura 13: Comunicação entre modem ............................................................. 23
Figura 14: Comunicação cliente servidor ......................................................... 23
Figura 15: Comunicação ponto a ponto............................................................ 24
Figura 16: Rascunho de um jogo ...................................................................... 26
Figura 17: Modelo da aplicação do XNA ......................................................... 32
Figura 18: Classe do jogo criada pelo XNA ..................................................... 33
Figura 19: Versão do XACT ............................................................................ 35
Figura 20: Tela do XACT com a estrutura de um novo projeto ....................... 36
Figura 21: Diagrama de I.A. do jogo proposto ................................................. 37
LISTA DE ABREVIATURAS E SIGLAS
IDE Integrated Development Enviroment
MUD Multi User Dungeon
RPG Role Play Game
Índice
1. INTRODUÇÃO .......................................................................................... 8
2. A HISTÓRIA DOS JOGOS ....................................................................... 9
2.1. Gêneros ................................................................................................ 13
2.2. 2D e 3D ............................................................................................... 14
2.1.1 Software de Imagem 2D ............................................................. 14
2.1.2 Software de Modelagem 3D ........................................................ 15
3. ASPECTOS ENVOLVIDOS NA PRODUÇÃO DE JOGO ...................... 16
3.1. Computação Gráfica ............................................................................ 16
3.2. I.A. ....................................................................................................... 16
3.2.1. Algoritmos Determinísticos...................................................... 17
3.2.2. Inference Engine ....................................................................... 18
3.3. Matemática e Física ............................................................................. 18
3.3.1. Gráfico 2D ................................................................................ 19
3.3.2. Gráfico 3D ................................................................................ 19
3.3.3. Teoria da colisão 2D e 3D ........................................................ 20
3.4. Multiplayer e Online ........................................................................... 22
4. PROJETO DO JOGO ................................................................................. 25
4.1. Brainstorm ........................................................................................... 25
4.2. Rascunhos do jogo............................................................................... 26
4.3. Detalhes do jogo .................................................................................. 27
4.4. Game Design Document ...................................................................... 27
5. TECNOLOGIAS DISPONÍVEIS NO MERCADO ................................... 29
5.1. Cg ........................................................................................................ 29
5.2. DirectX ................................................................................................ 29
5.3. XNA .................................................................................................... 30
6. TECNOLOGIA XNA CARACTERÍSTICAS ........................................... 31
6.1. XNA Game Studio Express ................................................................. 31
6.2. Modelo da Aplicação........................................................................... 32
6.3. Content Pipeline .................................................................................. 33
6.4. XNA Audio Creation Tool (XACT).................................................... 34
6.4.1. Projeto de som .......................................................................... 35
7. PROPOSTA DE JOGO .............................................................................. 37
8. CONCLUSÃO ............................................................................................ 39
9. BIBLIOGRAFIA ........................................................................................ 40
INTRODUÇÃO
As ferramentas e métodos de desenvolvimento de jogos têm mudado com
o tempo, os efeitos, gráficos e outros recursos que antes não era possível fazer hoje faz
parte da maioria dos jogos lançados. Cada vez mais os desenvolvedores criam um
mundo virtual mais perto do nosso mundo real. Essa afirmação já era prevista pelo
visionário André LaMothe, que sempre acreditou no potencial dos jogos e o rumo que
ele tomava com o tempo.
Benjamin Nitshke foi um dos pioneiros no desenvolvimento de jogos em XNA,
ele foi privilegiado a testar suas funcionalidades e a nova tecnologia que a Microsoft já
vinha desenvolvendo. Inicialmente parecia mais um framework de desenvolvimento de
jogos como o DirectX, onde ainda seria preciso uma IDE para desenvolver, isso por que
a Microsoft manteve segredo durante um tempo.
Os desenvolvedores de jogos sempre ficaram separados entre, desenvolvimento
de jogos de computador e desenvolvimento de jogos em console, para cada um deles era
preciso uma nova IDE e uma nova linguagem de programação. Com o XNA é possível
desenvolver jogos para computador e para XBOX 360 sem alterar muito o código,
inclusive a manipulação de sons agora é feita de um modo separado para não precisar
programar para console e computador de dois modos diferentes.
Nem por isso o desenvolvimento em cima do DirectX parou, hoje o DirectX
está na versão 10 e promete se manter atualizado independente das tecnologias
paralelas.
9
2. A HISTÓRIA DOS JOGOS
Segundo LaMothe (1999), a história dos jogos começou em meados da década
de 60, quando surgiram os primeiros mainframes. Um dos jogos mais antigos é o Core
Wars, um jogo baseado em texto que rodava em Unix. Com o passar do tempo
começaram a surgir jogos com gráficos primitivos e começaram a se espalhar pelos
mainframes e mini-computadores.
Figura 1: Jogo Core Wars para o console Unix
A maioria dos jogos eram para rede e seguiam alguns estilos como Multi-User
Dungeons (MUDs) e Star Trek. No entanto estes jogos eram jogados pela minoria e
apenas depois do lançamento do Pong a massa popular teve acesso aos jogos. O Pong
foi desenvolvido por Nolan Busnell, que investiu na área dos jogos e criou a empresa
Atari.
10
Figura 2: Pong versão do console Atari
Em meados dos anos 70, surgiram os primeiros computadores pessoais. TRS-
80, Apple e o Atari 800 foram os primeiros a invadirem o mercado, antes disso surgiram
kits como o Altair 8000 que não era muito fácil de montar. Entre estes três modelos, o
Atari 800 era o mais poderoso, o TRS-80 era voltado para negócios e a Apple tinha o
melhor marketing.
Os jogos eram escritos em BASIC ou linguagem de máquina pura. Eles não
possuíam uma interface gráfica muito avançada e com isso bastava fazer um jogo no
estilo Pong com poucas regras para ganhar a atenção do publico da época. Esse fator
ajudou a fazer dos primeiros jogos clássicos tornando seus criadores muito conhecidos.
Não existiam materiais sobre o assunto, até que alguém publicou um artigo de 50 a 100
paginas, outro artigo apareceu na revista Byte.
Na década de 80 surgiram os primeiros computadores de 16-bits e nessa época
os jogos começaram a ter uma aparência boa com mais recursos gráficos. Jogos como
Wing Commander e Flight Simulator apareceram no mercado fazendo sucesso com seus
gráficos avançados. Nessa época o Amiga 500 e o Atari ST dominavam o mercado
como melhores computadores para jogos, entretanto o PC continuava no mercado por
ser um computador de baixo custo.
11
O PC continuou a ganhar popularidade lentamente até a década de 90 quando a
IBM PC - compatível chegou à liderança no mercado lançando o Windows 3.0 e ficou
conhecido como “o computador de trabalho pessoal”. Era possível jogar, escrever
programas e abri-lo para conectar outras placas, diferente do Macintosh da Apple. Esse
diferencial atraiu vários hobistas.
O avanço dos jogos chegou ao ano de 1993 quando a Id Software lançou
DOOM como uma continuação do sucesso Wolfenstein 3D. Ela conseguiu provar que o
PC também era uma plataforma de programação de jogos e isso impulsionou mais ainda
o avanço do PC. Isso fez a Microsoft reavaliar sua posição quanto à programação de
jogos, concluindo que era hora de entrar no mercado. Ela entrou no mercado como
Microsoft Games e tinham como objetivo criar a solução para todos os problemas do
mundo.
Figura 3: Tela do jogo Wolfenstein
12
Figura 4: Tela do jogo DOOM
Entretanto o Windows 95 não tinha um bom desempenho em vídeo em tempo
real e sua capacidade de áudio deixava muito a desejar. Para solucionar este problema a
Microsoft lançou o WinG que possuía algumas funções gráficas para desenhar bitmaps
na tela.
Logo em seguida a Microsoft começou a desenvolver o DirectX que serviria
como uma solução completa para gráficos, sons, dispositivos de entrada(teclado,
joysticks e similar), rede e sistema 3D. O DirectX só começou a fazer sucesso a partir da
versão 3.0 quando ele se tornou mais estável. E mesmo assim as empresa continuaram a
desenvolver jogos usando a plataforma DOS, essa situação só mudou no lançamento do
DirectX 5.0.
Atualmente o DirectX está na versão 10 mas só roda no Windows Vista,
deixando a maioria dos usuário do Windows XP com a versão 9.0c. Ele é muito usado
para desenvolver jogos complexos e de alto desempenho. Entretanto a Microsoft não
parou por ai, atualmente a grande novidade é o XNA, uma IDE completa para
desenvolvimento de jogos de computador com possibilidade de portabilidade para
XBOX 360, o ultimo console lançado pela Microsoft.
13
Figura 5: Microsoft XBOX 360.
2.1 Gêneros
Hoje em dia existem muitos gêneros de jogos, mas não necessariamente é
preciso escolher um deles, pode-se fazer uma mixagem de gêneros (ANDRÉ
LAMOTHE, 1999).
Primeira pessoa: é o jogo em 3D com a visão do personagem, os mais
conhecidos são Doom, Quake e Unreal. Tem como objetivo passar a sensação de estar
no ambiente do personagem principal.
Esporte: os gráficos variam de 2D e 3D, sua principal característica é a
inteligência artificial que vem sendo cada vez mas aprimorada. Normalmente estes
jogos permitem que dois jogadores joguem simultaneamente. Um dos jogos mais
famosos é o Winning Eleven.
Luta: a visão normalmente é de lado e o jogo é uma mistura de gráficos 2D e
3D. A trilogia do Street Fighter é o exemplo mais conhecido.
Arcade/Tiro/Plataforma: tem como principal característica a simplicidade. São
jogos 2D, rápidos, como Pac-Man e Asteroid.
Simulações mecânicas: estilo que passa a sensação de pilotar algum veículo
como carro, avião, submarino entre outros. Um dos simuladores que chega mais perto
da realidade é o Grant Turismo.
Simulação de ecossistema: tem como objetivo dar poder de Deus ao jogador.
Os títulos mais conhecidos são The Sims, Simcity e Black and White.
14
Estratégia: normalmente o jogador tem que controlar um exército ou uma
nação para atingir um objetivo específico. O estilo se divide em dois tipos, em tempo
real e por turno, podendo levar horas para terminar uma jogada. Ages of Empire e
Deadlock refletem os dois estilos.
Role Play Game: também conhecido como RPG, é um dos estilos que mais
atraiu jogador, tanto no modo de jogo sozinho como no modo online. Sua característica
é a interação com outros personagens do jogo tornando um jogo não linear. Atualmente
a interação online é tanta que permite juntar-se em clãs, realizar missões, sozinho ou em
grupo, trocar itens, organizar eventos e muito mais. Um exemplo atual é o Silkroad.
Historia interativa: estilo de jogo linear onde o jogador tem que seguir um
roteiro. Normalmente decifrando charadas ao decorrer do jogo.
Tabuleiro/Puzzles: jogos de tabuleiros normalmente disputados por mais de um
jogador como o Monopoly.
2.1 2D e 3D
Os jogos podem ser desenvolvidos em duas dimensões (2D) ou em três
dimensões (3D). Alguns jogos usam uma mixagem desses estilos, normalmente os jogos
em 2D possuem gráficos renderizados em ferramentas de modelagem 3D para
parecerem mais agradáveis ao jogador (ANDRÉ LAMOTHE, 1999).
2.1.1 Software de imagem 2D
Atualmente no mercado existem inúmeros softwares de edição de imagens com
muitos recursos e efeitos, muitos deles são gratuitos ou até código aberto. Para o
desenvolvimento do projeto será usado o Macromedia Fireworks 8 que possui uma
versão de demonstração de 30 dias. Outros softwares para edição de imagem são o
Photo Shop, Corel Draw, Paint e Paint .NET.
15
2.1.2 Software de modelagem 3D
Softwares de modelagem 3D podem ser extremamente complexos para leigos
no assunto e podem custar até 100.000 dólares. Existem versões de demonstração e
gratuitas, mas normalmente são bem limitadas. As ferramentas mais conhecidas no
mercado são o TrueSpace, Cagliari, 3D Studio Max e Maya. No projeto não será usado
nem uma dessas ferramentas
3. ASPECTOS ENVOLVIDOS NA PRODUÇÃO DE JOGO
3.1 Computação Gráfica
Segundo Feldman (2001), ao passar dos anos o desenvolvimento de jogos no
estilo árcade tornou-se um grande negocio e atraiu muitos programadores fieis a esse
gênero. A computação gráfica começou a crescer desde então, simplesmente por que um
jogo de árcade não vendo no mercado se não possuir um bom design. Feldman mostra
como exemplo o Sonic The Hedgehog, provavelmente não seria tão carismático se os
gráficos fossem representados como caracteres ASCII. Outro exemplo é o Mortal
Kombat, os personagens do jogo não pareceriam tão reais se fossem desenhados a mão
em vez de fotos reais.
A qualidade dos gráficos tem se mostrado de certa forma essencial para os
jogos e uma boa ferramenta de manipulação de imagem pode aumentar a produtividade
e melhorar a qualidade final da arte dos gráficos.
Alguns tipos de ferramentas gráficas que podem ajudar no trabalho de
manipulação de imagem e animação são:
Programas de desenho
Utilitário de captura de imagem
Programa para visualizar e converter imagens
Ferramenta de palheta de cores
3.2 I.A.
Segundo Colnaghi (2001), a inteligência artificial (I.A.) é um conjunto de
algoritmos baseado em lógica, probabilidade e memória a fim de simular a inteligência
17
de um ser humano. A lógica para cada jogo pode variar dependendo da necessidade da
inteligência da maquina.
Na prática, a I.A. depende muito do foco, ou seja, objetivo final do cérebro a
ser modelado. Para um jogo, se o personagem parecer inteligente, estará suficiente,
independente da lógica utilizada. Não existe uma maneira correta de modelar a I.A., se
os resultados obtidos são satisfatórios o método escolhido está aprovado (ROBERTO
COLNAGHI, 2001).
3.2.1 Algoritmos Determinísticos
Algoritmos determinísticos são comportamentos predeterminados ou pré-
programados. Por exemplo, se olharmos para a I.A. do jogo Asteroids, os asteróides são
criados em uma posição qualquer com uma velocidade aleatória. O asteróide possui
apenas um objetivo, seguir seu curso predeterminado, e essa e a sua inteligência
artificial - simples.
Figura 6: Inteligência Artificial do jogo Asteroids.
18
3.2.2 Inference Engine
Segundo Harrison (2003), essa técnica é mais avançada e normalmente é uma
solução para a implementação e codificação da inteligência artificial, mas ela é apenas
uma parte para a solução.
Ela tem como objetivo criar um diagrama de caso com as ações a serem
tomadas dependendo de cada estado da ação. Cada ação é tomada dependendo de seu
resultado, como na imagem abaixo.
Figura 7: Diagrama de Inteligência artificial.
3.3 Matemática e Física
Para o desenvolvimento de um jogo é preciso um conhecimento básico em
física, até mesmo para um jogo no estilo Pong é necessário aplicar formulas de física.
Durante muito tempo estes cálculos de física eram feitos apenas pelo processador da
maquina podendo afetar o desempenho do jogo. Até inicio de 2007 os jogos não
exigiam tanto recurso de física, até o lançamento de Medal of Honor Airborne. Para
19
conseguir jogar usando seus recursos no máximo, é preciso uma placa de física
(AGEIA) além da configuração padrão do jogo.
As placas de física estão começando a aparecer no mercado, abrindo uma nova
possibilidade para os jogos, com isso a programação do jogo terá de ser voltada a este
novo recurso.
3.3.1 Gráfico 2D
Um jogo como Pong usa uma estrutura de gráfico 2D, e deve ser tratada com
um gráfico cartesiano de duas posições, X e Y. Segundo Stahler (2004), é bom ressaltar
que o computador trata o posicionamento das imagens de um modo diferente do gráfico
cartesiano, enquanto o Y do computador é acrescentado, para o cartesiano ele é
subtraído, entretanto existem formulas matemáticas para transformar um ponto do
computador para um ponto no gráfico cartesiano.
Figura 8: Diferenças entre os Gráficos.
O desenvolvimento de um jogo 2D pode ser desenvolvido usando apenas estas
duas posições. A maioria dos jogos de console em 2D são desenvolvidos usando apenas
este conceito. No caso, o jogo proposto usará o gráfico 2D.
3.3.2 Gráfico 3D
Um gráfico 3D difere apenas pela sua dimensão Y, que representa a altura do
objeto no plano. Este objeto é representado por três coordenadas, X, Y e Z. Infelizmente
não existem padrões que dizem que um gráfico 3D deve ter como o eixo Z sendo a
altura. Muitas referencias apontam inclusive o eixo Y como sendo a altura e o Z
profundidade. Entretanto é tudo uma questão de decisão de qual usar (WENDY
STAHLER, 2004).
20
Figura 9: Gráfico em três dimensões.
3.3.3 Teoria da Colisão 2D e 3D
Alguns jogos em 2D usam este tipo de gráfico para simular um efeito de
colisão 3D, conhecidos como jogos isométricos (ANDRÉ LAMOTHE, 1999). Um
exemplo de jogo antigo que usa essa tecnologia é o PaperBoy, outro mais recente que
fez muito sucesso é o Diablo.
Segundo LaMothe (1999), existem três métodos para aplicar colisão em um
jogo.
Jogo baseado em células e totalmente em 2D.
Basicamente deve ser decidido qual será o ângulo de visão do jogo e então
desenhar toda a arte no ângulo definido. Entretanto essa técnica depende também de
como os desenhos são renderizados na tela, elas devem seguir uma ordem, de baixo para
cima, fazendo com que os objetos que estão atrás dos outros continuem atrás.
21
Figura 10: Colisão em células ou tiles.
Full screen com colisão 2D ou 3D.
Essa técnica consiste em desenhar um mundo isométrico do tamanho que for
desejado e criar uma estrutura secundaria que contenha os dados informando onde no
espaço possui colisões. Com essa técnica é possível determinar que os desenhos em 2D
ou 3D não precisam ter informação de altura, por mais complexo que eles sejam.
Figura 11: Colisão usando um vetor 3D.
Usando matemática 3D com câmera fixa.
Essa técnica é a mais fácil, pois não é preciso fazer nem uma estrutura extra
para armazenar os dados dos objetos, basta usar uma engine 3D e fixar a câmera em um
ângulo para fazer o efeito de jogo isométrico. A maioria dos jogos da Sony Playstation I
e II usa essa técnica, são em 3D com câmera fixa em 45º.
22
Figura 12: Tela do jogo Warcraft 3 usando câmera fixa.
3.4 Multiplayer e OnLine
Criar um jogo multiplayer requer muito planejamento na hora de desenvolver o
projeto e a forma de comunicação entre os jogadores e o servidor, muitos jogos não dão
conta de tantos jogadores e se tornam lentos e praticamente impossíveis de se jogar
independente da conexão da maquina do jogador, ou seja o client (ANDRE
LAMOTHE, 1999).
Antigamente os jogos eram modem a modem, ou seja, sem um servidor entre
os dois jogadores. O primeiro jogo modem a modem foi criado por Dani Bunten Berry e
se chama Modem Wars, ele foi lançado para o Commodore 64 na década de 80. O jogo
era de estratégia e em tempo real, o que tornou o jogo realmente significante pois até
então nem um jogo era em tempo real (TODD BARRON, 2001).
23
Figura 13: Comunicação entre modem.
Segundo Barron (2001), a comunicação entre as maquinas pode ser feito de
outros dois jeitos, cliente servidor e ponto a ponto. No cliente servidor, os dados são
enviados para o servidor e retornam um valor ao cliente e vice versa, nesse tipo de
comunicação o servidor é sempre dedicado, ou seja, ele só recebe as informações e
processa o jogo propriamente dito não necessariamente precisa estar rodando. Na
comunicação ponto a ponto um cliente simula um server e todos clientes se comunicam
com ele e entre si seguindo o principio de uma comunicação ponto a ponto.
Figura 14: Comunicação cliente servidor.
24
Figura 15: Comunicação ponto a ponto.
25
4. PROJETO DE UM JOGO
Segundo Perucia (2005), o desenvolvimento de um projeto de jogos é muito
parecido com outro software qualquer, mas caracteriza-se mais pela sua fase inicial de
criação. A criação do jogo segue as principais fases brainstorm, rascunho do jogo,
detalhes do jogo que por sua vez resultam no documento final para codificação da idéia.
Conhecido como Game Design Document.
Cada fase do processo pode ser repassada até a definição final da idéia. A
importância deste documento é tão grande que ao final de seu desenvolvimento, pode
ser avaliado se o jogo vai ser um sucesso ou um fracasso.
4.1 Brainstorm
O brainstorm (tempestade de idéias) é a primeira fase de um projeto de jogos.
Nessa fase os projetistas devem avaliar todas as sugestões para amadurecer as idéias e
não descartar nada que pareça absurdo. Segundo Alexandre Perucia(2005), muitas
idéias que pareciam não ter nenhum sentido, no final, acabam virando um sucesso. Um
exemplo é o Mario, onde um bombeiro se torna herói em um mundo que tem tartarugas
e cogumelos que andam.
Algumas questões que devem ser tratadas nessa fase são: objetivo do jogo, o
que o jogador deve fazer, como ele deve fazer, o que torna o jogo divertido, se o jogo
terá charadas, etc. Nessa fase as idéias não precisam ser detalhadas. Outro passo é
definir o estilo do jogo que será desenvolvido, ou até uma mixagem dele.
O objetivo final do Brainstorm é reunir o máximo de idéias possíveis e
diferentes para, futuramente, transformar em algo criativo e facilitar o processo de
desenvolvimento de idéias.
26
Todas as idéias criadas no Brainstorm de um jogo que não são utilizadas
podem ser armazenadas para que possam futuramente se transformar em outros jogos.
4.2 Rascunhos do jogo
A segunda fase consiste em criar protótipos do jogo em papel, desenhar cenas e
passagens do jogo para poder simular a jogabilidade (gameplay). Esse tipo de técnica é
mais adequado para jogos simples como jogos de tabuleiro e jogos em duas dimensões e
ajuda na visualização do projeto final, permitindo fazer alterações sem gerar muito
impacto no seu desenvolvimento (ALEXANDRE PERUCIA, 2005).
Figura 16: Rascunho de um jogo segundo Perucia(2005).
O rascunho pode ser desenhado em forma de roteiro como se fosse um filme.
Ele ajuda a prever as funcionalidades do jogo não só para o jogador, mas também para o
desenvolvedor ou responsável pela documentação técnica do jogo.
27
4.3 Detalhes do jogo
Segundo Perucia (2005), após ter o rascunho do jogo pronto é preciso fazer um
detalhamento complexo e escrever tudo a respeito do jogo. Nessa etapa a técnica
consiste em realizar perguntas sobre o jogo como:
Em que época se passará o jogo? Medieval, atual ou futurístico.
Quais são seus inimigos? Como serão seus ataques.
Qual o objetivo principal do jogo?
Qual será a trilha sonora do jogo?
Qual será a história do personagem principal do jogo?
As perguntas podem ser feitas dependendo do estilo do jogo, no caso as
perguntas aqui são feitas para o desenvolvimento de um jogo no estilo RPG.
Segundo André Lamothe(1997), as charadas podem tornar o jogo mais
interessante fazendo do jogo um desafio para que o jogador pense e interaja mais com o
ambiente. A idéia é fazer com que o jogo não se torne linear. Atualmente os jogos
onlines têm usado muito deste artifício para segurar o jogador por mais tempo e fazendo
com que ele retorne com mais freqüência. Para que um jogo que possua apenas o modo
de jogar sozinho se torne uma referência, é preciso que tenha muitas charadas e que não
seja linear, dando a liberdade no jogador escolher caminhos totalmente diferentes a cada
vez que joga. Um bom exemplo é o The Elder Scrolls IV Gates of Oblivion.
É nesta fase que a equipe toda deve ser perguntar se não falta mais nada ou se
não deveria ser alterado mais alguma coisa. No decorrer do detalhamento de cada
funcionalidade do jogo, a equipe deve levantar a possibilidade de reavaliar alguma
pendência e partir do inicio para tornar a idéia mais clara e objetiva. Para isso é possível
voltar ao rascunho do jogo ou até mesmo ao brainstorm (ALEXANDRE PERUCIA,
2005).
4.5 Game Design Document
O game design document tem como objetivo agregar todos os documentos do
projeto em um único documento. Essa etapa é muito útil, pois tudo o que foi proposto
até o momento pode ser repensado para não ocorrer nem um imprevisto na criação do
28
projeto. Essa fase pode levar muito tempo e tem como objetivo avaliar de forma clara
todo o funcionamento do jogo.
A avaliação do jogo como um todo aumenta a possibilidade de tornar a idéia
um sucesso.
29
5. TECNOLOGIAS DISPONIVEIS NO MERCADO
5.1 Cg
A linguagem Cg foi criada para tornar possível o controle de shapes,
aparências e movimentos de objetos usando programação gráfica direto do hardware
com o intuito de tornar extremamente rápido o processamento gráfico (RANDIMA
FERNANDO, 2003).
O Cg proporciona aos desenvolvedores uma plataforma de programação fácil
de usar e ajuda na criação de efeitos especiais em tempo real com qualidade
cinematográfica mais rapidamente. Ele também remove a necessidade de programar os
efeitos diretamente em linguagem assembly, ou seja, diretamente no hardware.
5.2 DirectX
Segundo McCuskey (2002), a Microsoft criou a primeira versão do DirectX
para migrar os desenvolvedores do MS-DOS para o Windows. Antes disso a Microsoft
tinha grandes problemas com a limitação e capacidade gráfica e acesso a som
diretamente, acarretando muita lentidão para os jogos e alguns aplicativos. E esse foi o
objetivo inicial quando a Microsoft criou o DirectX, proporcionar um acesso rápido e
direto ao hardware.
Outro beneficio do DirectX é fazer com que qualquer dispositivo de hardware
seja acessado indiferente da sua marca ou configuração.
O DirectX é dividido em partes:
DirectGraphics
30
Essa parte do DirectX fica encarregada de desenhar os gráficos na tela. Em
versões anteriores ela era separada em DirectDraw para os gráficos 3D e Direct3D para
gráficos e modelos em 3D.
DirectAudio
Essa parte é responsável pelo som e musica do jogo, usada para manipular o
som em qualquer ponto do espaço.
DirectPlay
Esse componente do DirectX permite criar jogos multi-player, pela rede local
ou internet. O componente também permite comunicação por voz em tempo real em
jogos multi-player.
DirectInput
O DirectInput gerencia todas as entradas de dados como teclado, mouse,
joystick, controles com force feedback.
DirectShow
Proporciona controle de vídeo e multimídia.
5.3 XNA
Segundo Cawood (2007), para todos os desenvolvedores de XBOX 360, o
XNA fez o maior progresso ma programação de jogos no mundo. Antes do XNA era
muito complicado e custoso para um estudante, hobista ou desenvolvedor independente
de jogos ter acesso a kit de desenvolvimento de console. O XNA possui uma IDE
própria para desenvolvimento, o XNA Game Studio Express que é uma extensão do
Visual C# Express, as duas ferramentas são gratuitas, ou seja, o usuário tem a
possibilidade desenvolver um jogo sem custo algum.
Mais características serão abordadas no decorrer do trabalho.
31
6. TECNOLOGIA XNA CARACTERISTICAS
Segundo Nitschke (2007), o desenvolvimento do XNA começou há alguns
anos atrás, mas se manteve em segredo. A primeira vez que o logo XNA veio a público
foi em 2004, na documentação do DirectX (André Lamothe, 1998). A Microsoft
guardou o segredo do objetivo de desenvolvimento do XNA de forma que seus
programadores não sabiam o que esperar. Todo o desenvolvimento do XNA foi feito
seguindo um padrão novo de framework, com um conceito totalmente diferente.
O XNA não é apenas um framework como o DirectX, ele contém uma IDE
derivada do Visual Studio (Andrew Parsons e Nick Randolph, 2007) e algumas
ferramentas para facilitar o trabalho do desenvolvedor.
Contudo, não é apenas o XNA e sua facilidade de desenvolver que realmente
interessam e sim sua portabilidade para o Xbox 360 e sua biblioteca de códigos livres
que a Microsoft disponibiliza, sem falar que para disponibilizar seu jogo em Xbox 360,
basta se cadastrar no Creators Club e pagar uma taxa anual de U$ 99.
6.1 XNA Game Studio Express
Atualmente a única forma de desenvolver em XNA é usando a IDE XNA
Game Studio Express, mas a Microsoft lançará em breve o XNA Game Studio Pro.
Também é bom lembrar que a única linguagem de desenvolvimento é o C#. Porém
existe um modo de utilizar o XNA com o Visual Studio 2005, mas não recomendado
pela Microsoft.
O XNA Game Studio Express é um add-on do C# Express e é necessário ter o
Service Pack 2 do Windows, o .NET Framework 2.0, processador de 1GHz, mais de
512MB de RAM, e o mais importante, uma placa de vídeo com Shader Model 1.1 ou
superior.
32
6.2 Modelo da aplicação
O framework do XNA é dividido em três partes essenciais.
XNA Graphic Engine; XNA Game Application Model; XNA Content Pipeline.
Figura 17:Modelo da aplicação do XNA.
Todas estas DLLs são escritas em C# e podem ser facilmente exploradas
usando a ferramenta Reflector(Lutz Roeder http://www.aisto.com/roeder/dotnet/).
Algumas destas DLLs são apenas chamadas para as DLLs do DirectX para simplificar
um pouco a estrutura.
Cada projeto do XNA usa a classe Game que contém todos os componentes
necessários. São eles: dispositivo gráfico (graphic device), gerenciador de conteúdo
(content manager) e configuração da aplicação (window settings).
A classe Game contém três métodos essenciais para o projeto, a Microsoft
adicionou mais dois métodos (LoadGraphicsContent e UnloadGraphicsContent) na
classe Game em sua versão final, que são criados automaticamente, mas não serão
abordados por que servem mais para jogos que possuem uma estrutura mais simples.
33
NomeJogo
Class
Methods
Initialize
Update
Draw
Figura 18: Classe do jogo criada pelo XNA.
O método Initialize carrega todo o conteúdo do jogo seta todas as
configurações iniciais e inicia tudo o que for preciso. Se no caso for usado a modelagem
que a Microsoft preparou para o XNA, todo o conteúdo deve ser iniciado no método
LoadGraphicsContent.
O método Update atualiza todo o conteúdo que nele estiver. Ele é sempre
chamado logo após cada frame. Mas não necessariamente depende desta chamada, o
método Update é independente do resto da aplicação.
O método Draw tem como objetivo gerenciar todo o conteúdo gráfico. É neste
método que todo o conteúdo gráfico será desenhado e atualizado sempre que for
preciso.
A separação destes dois métodos (Update e Draw) não parecem afetar muito o
desempenho do jogo no Xbox 360 mas no computador onde o usuário pode minimizar o
jogo toda hora e o jogo precisa continuar executando mesmo que o método Draw não
seja mais chamado.
6.3 Content Pipeline
O Content Pipeline é usado para compilar, importar e carregar recursos como
texturas, shaders, modelos 3D e arquivos de sons. Ele procura e adiciona
automaticamente os recursos sem precisar importar e transformar em um arquivo
binário.
Ao importar um modelo não é preciso compilar o projeto para verificar se o
modelo contém erros ou não, o XNA se encarrega da tarefa.
34
O Content Pipeline não é apensa uma DLL, ela é formada por cinco sub-
divisões, são elas:
Microsoft.Xna.Framework.Content.Pipeline.dll: contém as funções básicas
do Content Pipeline.
Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll: usado para
compilar e importar shaders.
Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll: é a maior
das DLLs e contém inúmeras funções para importar modelos no formato .fbx e possui
funcionalidades como skining e bones, bastante usadas em jogos 3D.
Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll: é a DLL
responsável por importar todas as texturas 2D. Usando as texturas em formato dds (
formato usado pelo DirectX ) se obtém uma performance ainda melhor, mas também
suporta os formatos .png, .jpg, .bmp e .tga.
Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll: usada para
importar os modelos 3D no formato .x
Contudo não é preciso ter estas DLLs para rodar o jogo, elas são apenas usadas
para compilar o projeto e ajudar na importação dos modelos e imagens.
6.4 XNA Audio Creation Tool (XACT)
Segundo Nitschke (2007), o XACT era uma ferramenta apenas para o XBOX
360 e era preciso ser um desenvolvedor certificado para ter acesso ao XDK( Xbox
Development Kit) para usa-lo, sem falar de sua alta complexibilidade. Até mesmo os
desenvolvedores de jogos com bastante experiência tinham que estudar bastante para
desenvolver em cima do XDK.
Mas tudo isso mudou e a Microsoft resolveu adicionar o XACT dentro do
DirectX SDK, tornando uma ferramenta importante para o XNA. Com isso também não
é mais necessário a instalação do DirectX SDK para acessar o XACT, pois o XNA
instala automaticamente a ferramenta.
Existem outras versões do XACT lançadas antes de outubro de 2006 que
podem não funcionar corretamente caso um projeto seja aberto ou convertido para esta
versão. No caso, a versão em questão é a 13, outras versões como a 11 e 12 podem não
35
ter suporte a algumas funcionalidades. A versão 13 também é representada pela Content
Version 41 no about do XACT, como mostra a imagem abaixo.
Figura 19: Versão do XACT.
Nitschke explica que no desenvolvimento do jogo usando o XACT, o
desenvolvedor não precisa se preocupar muito com algumas propriedades como,
volume e formato do som, essa função fica para o especialista na área de som. Inclusive
essa é uma nova área que aparece no desenvolvimento de jogos.
6.4.1 Projeto de som
Inicialmente o XACT cria um projeto vazio e não contém nem um arquivo de
som ou banco de sons disponível. Nitschke aborda a ferramenta da seguinte maneira.
A árvore do projeto que contém a estrutura dos elementos e que não podem ser
alterados.
Duas categorias padrões, default e musica, que pode ser usado para marcar os
arquivos de sons como efeitos ou musicas.
Uma variável global, SpeedOfSound (velocidade do som), que sempre é 343.5
e outras 4 variáveis, Cue Instance, separada em Distance, Doppler Pitch Scalar,
Number of cue Instances e Orientation Angle. Todas essas variáveis são importantes
para sons 3D.
Um caminho para efeitos globais.
36
Todo o restante da estrutura é iniciada em branco e deve ser adicionada
conforme sua necessidade.
Figura 20: Tela do XACT com a estrutura de um novo projeto.
7. PROPOSTA DE JOGO
A proposta de jogo consiste em desenvolver um jogo no gênero role play game,
utilizando gráficos 2D e sistema de colisão de tiles. A arte do jogo será desenvolvida
por um profissional de design a fim de tornar o jogo mais agradável.
O jogo conterá uma inteligência artificial simples que será implementado nos
inimigos, conforme diagrama abaixo.
Figura 21: Diagrama de I.A. do jogo proposto.
38
O objetivo do jogo será o personagem explorar o mapa e combater os inimigos
que aparecerem. Podendo comprar itens para equipar e deixar o personagem mais forte
e resistente. Conforme o personagem combate seus inimigos ele ganhará pontos de
experiência que por sua vez o fortalecerá com o tempo.
A documentação seguirá o exemplo do Game Design Document abordado no
trabalho.
O jogo será desenvolvido usando a tecnologia XNA e sua IDE Game Studio
Express. Os sons serão editados na ferramenta XACT.
8. CONSIDERAÇÕES FINAIS
Neste trabalho foi possível ver todos os processos envolvidos na criação de um
projeto de jogo até a escolha de ferramentas para desenvolvimento de cada fase do jogo.
Dentro dessa pesquisa foi possível planejar o desenvolvimento do jogo usando as
técnicas, documentação, foco para o desenvolvimento e o caminho a seguir para manter
uma idéia do inicio ao fim.
O planejamento inicial de um projeto demonstrou sua importância no resultado
final, mantendo a qualidade e expectativas do jogo.
9. BIBLIOGRAFIA
Perucia, Alexandre Souza, et. Al.(2005) Desenvolvimento de Jogos Eletrônicos, Porto
Alegre, Novatec.
Colnaghi Junior, Roberto. (2001) Programação de jogos de computador na
plataforma Windows – Teoria e prática, Novo Hamburgo, Trabalho de conclusão.
LaMothe, André. (1995) Black Art of 3D Game Programming, California, Waite
Group Express.
LaMothe, André. (1999) Tricks of the windows game programming gurus –
Fundamentals of 2D and 3D game programming, Estados Unidos, Sams.
Cawood, Stephen; McGee, Pat. (2007) Microsoft XNA Game Studio Creator’s
Guide, New York, Osborne.
Nitschke, Benjamin. (2007) Professional XNA Game Programming, Indiana, Wrox.
Stahler , Wendy (2004) Beginning Math and Physics for Game Programmers, New
Riders.
Azevedo, Eduardo (2005) Desenvolvimento de Jogos 3D e Aplicações em Realidade
Virtual, Editora Campus.
Barron, Todd (2001) Multiplayer Game Programming, Prima Tech
Buono, Salvatore A (2003) C# and Game Programming: A beginner´s Guide, A K
Peters LTD.
Harrison, Lynn T. (2003) Introduction to 3D Game Engine Design Using DirectX 9
and C#, Apress.
Pazera, Ernest (2001) Isometric Game Programming with DirectX 7.0, Prima Tech.
Feldman, Ari (2001) Designing Arcade Computer Game Graphics, Wordware.
Mulligan, Jessica, et Al (2003) Developing Online Games, New Riders.
41
McCuskey, Mason, et Al (2003) Especial Effects Game Programming with DirectX,
Premier Press.
Fernando, Randima et. Al (2003) Cg The Cg Tutorial – The Definitive Guide to
Programmable Real-Time Graphics, Addison Wesley.
Microsoft XNA Developer Center, Disponível em: Acesso em 17 set. 2007