sábado, 3 de janeiro de 2009

Brincando com Jogos de Corrida

Desde muito pequeno eu sempre gostei de jogos de corrida, até mesmo porque eu sempre vencia meus irmãos :D.

O primeiro jogo/simulador de fórmula 1 que joguei foi o F1GP ou World Circuit. Tem uma página legal na wikipédia sobre ele: http://en.wikipedia.org/wiki/Formula_One_Grand_Prix_(Geoff_Crammond) e no YouTube tem um vídeo legal também: http://www.youtube.com/watch?v=ZPTN4hnuShw. Neste vídeo contém a abertura do jogo que até hoje me deixa emocionado :). Eu e meus irmãos passavamos horas jogando. Foi paixão a primeira jogada, ainda lembro até hoje a minha primeira vitória, em Mexico City, estava numa posição ruim, 13º, e fiz uma corrida perfeita, voei baixo, fiz melhor volta atrás de melhor volta e no final lembro que o meu pai imprimiu a classificação final... fahsdufashfasdufsdhfsuadfshdu, bons tempos!!!

Depois vieram os outros jogos da série, GP2, GP3 e GP4. Joguei todos e joguei muito! Até hoje arranjo um tempinho pra jogar GP4, apesar de ser um jogo de 2002, ainda consigo me divertir com ele, ainda mais no meu hardware modesto, que não rodam os jogos de F1 mais novos e mesmo se rodasse continuaria jogando GP4, pois já tive a oportunidade de jogar outros, mas sempre tem algum aspecto que me faz voltar, seja ele na IA, na física, na jogabilidade com o teclado, etc.

Hoje já estou com quase 25 anos, acabei de me formar em ciência da computação e mesmo antes de entrar na faculdade eu sempre quis desenvolver um jogo, porém por um motivo ou por outro sempre acabava mudando os planos e nunca passava da votande. Nas últimas semanas decidi mudar esta história e criar culhões :D. Finalmente comecei a estudar pra criar um jogo e até agora estou me divertindo bastante, apesar de quebrar a cabeça muitas vezes pra fazer algo funcionar. Ainda não comecei a estudar a parte de física a fundo pra deixar o jogo realístico, pois primeiro quero criar um jogo que se possa jogar :D. Isso parece contraditório, porém sou usuário/programador de Linux e neste ambiente é comum encontrar diversos jogos que não dá pra instalar e jogar. Tem que instalar, ficar procurando mods, pistas, add-ons em diversos lugares, aprender como instalá-los, etc, etc, etc... fora os jogos incompletos que possuem screenshots marivolhasas em seus sites, parece até que os desenvolvedores ficaram mais tempo programando pra conseguir uma screen legal, ao invés de um jogo legal e isso me deixa muito frustrado.

Sendo assim a minha idéia é começar com coisas simples, porém juntando todas elas seja possível se divertir ao menos de forma parecida como eu me diverti com o F1GP. Você entra no jogo, escolhe as opções e joga, e pode ficar jogando durante horas. Não me importo em fazer algo visualmente atrativo, mas algo atrativo como um tudo, se conseguir isso, tenho certeza que poderei agregar uma comunidade com interesse comuns. Ainda tenho ótimas lembranças das comunidades que participei durante todos os anos que fiquei jogando a série GP, a qual não apenas jogava, mas criava utilitários, patchs, pistas, carros, milhares de add-ons pra deixar o jogo mais legal. Mas por enquanto isso é apenas sonho, ainda tem muito trabalho pra que eu consiga qualquer coisa próxima disso, então vamos falar de uma coisa mais interessante, o que eu estou fazendo (pelo menos pra min é interessante :).

Primeiramente, decidi em utilizar um engine para jogos, pois caso contrário iria levar no mínimo 2 anos pra fazer uma que funcionasse, e ainda não seria muito boa, pra somente depois começar a desenvolver o jogo. Deste modo, comecei a pesquisar algumas engines em software livre/código aberto. Decidi que iria utilizar a Delta3D, mas depois de praticamente uma semana tentando compilá-la desisti. Depois disto decidi pela CrystalSpace3D (CS) a qual foi fácil fazer funcionar, além disso esta possui uma boa documentação introdutória, a qual está desatualizada, mas quebra um galho pra quem está inciando.

Tal engine possui diversos exemplos que podem ser estudados, modificados e executados imediatamente, além disso, possui capacidade de scripting através da linguagem python e de uma linguagem própria, além disso possui uma biblioteca construída sobre si denominada CEL, esta contém abstrações para facilitar a criação de entidades. Algo que achei bastante interessante quando li e que gostei mais ainda da idéia depois que comecei a ler Programming Game AI by Example.

Apesar de aparentar ser uma boa engine, com suporte a física, detecção de colisões, rede e som (os elementos que preciso pra desenvolver um jogo) possui alguns bugs (que estão sendo trabalhados) e como já disse, como a documentação é introdutória, muitas coisas é difícil de saber como deve ser utilizada, porém a comunidade de desenolvedores é bastante ativa e disposta em ajudar, até já obtive a recomendação de um jogo desenvolvido com a engine que está hospedado no site SourceForge.net, falando nisso, existem vários jogos desenvolvidos com a engine lá, o que é legal, pois pra quem está começando fica mais fácil aprender com pessoas que já têm experiência.

Depois disso, decidi criar uma pista. Não fazia a menor idéia de como fazé-lo, sendo assim a minha primeira idéia foi encontrar uma pista já pronta e encontrei, porém não satisfez as minhas necessidades, pois estava em um formato não suportado pela engine e que só abriria no 3D Studio Max. Deste modo optei por fazer algo utilizando o Blender e fui incentivado pelo pessoal da CS, pois este é o melhor programa suportado pela engine.

Como nunca tinha utilizado o Blender pesquisei na internet como desenvolver uma pista com ele e pra minha surpresa encontrei um ótimo tutorial a respeito. O resultado final que obtive não foi nada profissional, mas para quem não sabia nada de Blender (ainda me bato bastante pra fazer umas coisas simples) fiquei bastante satisfeito, pois pude ver minha pista carregada dentro da engine e até interagir com ela.

Nesta screenshot está a pista dentro do blender:



E esta é uma screenshot da mesma pista dentro da engine:



Como já havia dito, nada profissional, mas consegui criar estas coisas de forma relativamente fácil. Agora que já tenho uma pista (que precisa de alguns ajustes, na verdade são diversos, mas vou fechar o parêntese :) o meu próximo passo é colocar um carro pra andar sozinho aí. Acreditava que isso seria extremamente difícil, mas pelo que estou lendo até agora em Programming Game AI by Example esta não parece uma tarefa muito herculiana e acho que vou me divertir fazendo isso.

Assim que colocar um carro pra rodar aí faço uma nova postagem a respeito. Por hoje é só :D