Global Game Jam ’11 e Rise of the Titans

Nos dias 28, 29 e 30 de Janeiro aconteceu o Global Game Jam. Como você deve imaginar, é uma competição de criação de jogos que acontece simultaneamente no mundo inteiro. Eu, como já era de se esperar, participei. Junto com @PotHix, @rmasoni e @_bojak.

Aqui em São Paulo, o lugar mais próximo que ocorreu o evento foi na Fatec São Caetano do Sul. E lá estávamos, às 20h de sexta-feira, abdicando nossas preciosas horas de sono e entretenimento do fim de semana.

Nossa equipe já estava formada algumas semanas antes do evento. Nessa ocasião discutimos, inclusive, qual ferramenta, biblioteca e linguagem deveríamos usar. Optamos por criar um game para o HTML5 Canvas, usando JavaScript e a biblioteca Akihabara, que tem como objetivo auxiliar a criação de jogos no estilo 8bits.

Desenvolvimento e Criação

O tema, extinção, embora aparentemente simples à primeira vista, foi complexo. Ideias abundavam. Dinossauros, raça humana, animais, luz. Pizza foi e as ideias foram ficando mais estreitas. Até que decidimos fazer um jogo em que você controla titãs, antiga forma de vida no planeta que estava adormecida, numa guerra contra a humanidade, cujas constantes destruições vêm abalando todo planeta Terra.

Enquanto Rafael Masoni fazia alguns conceitos de nossa ideia, começamos a preparar a estrutura do jogo, repositório Git e fazer alguns testes. Dividimos as tarefas e começamos a programar. Perto das seis horas da manhã, já tínhamos player e inimigo com movimentos básicos. Mas o cansaço já nos dominava, impedindo progressos. Decidimos, então, ir todos para casa dormir e voltar às sete da noite do sábado, para ficar até o fim.

Ao chegar, sabíamos que não haveria mais descanso até o fim. Teríamos que ter disciplina, correr e fazer quase o jogo todo em menos de vinte horas. Percebemos, também, que não seria possível implementar toda nossa ideia para entregar. Era realmente muita coisa, e nós nem sabíamos direito como funcionava a Akihabara. Resolvemos implementar só o gameplay, sem o sistema de estágios e dificuldade. Mas nem inteiro o gameplay ficou, faltaram elementos que mudariam muito o jogo.

Apesar da correria ao fim, conseguimos entregar o básico proposto.

Sucessos

Finalizar qualquer demo jogável em uma competição de 48h como essa já é um sucesso. O intuito da competição é apresentar desafios, e nós os superamos.

A escolha da biblioteca foi muito feliz. Akihabara é uma biblioteca simples, mas muito poderosa. Aliando o poder do Canvas do HTML5 com  a facilidade e a portabilidade, é possível criar jogos casuais em estilo retrô muito facilmente.

Problemas

Acredito que não saber muito da ferramenta que usamos seja a principal falha. Talvez nem seja uma falha em si, mas um problema que nos atrasou um pouco. Mas foi um desafio agradabilíssimo, em minha opinião.

Considerações Finais

Depois de ver o trabalho pronto, embora esteja realmente muito simples, eu acho que nossa equipe trabalhou muito bem. Fizemos o que nos propomos, apesar de nossas limitações. E, pessoalmente, digo que essa foi uma experiência muito agradável e instrutiva. Recomendo.

O jogo Rise of the Titans está online. Mas não terminamos ainda. Continuaremos desenvolvendo este game até o fim. O projeto também é totalmente aberto, o que significa que você pode ajudar o projeto. Dê dicas, sugestões, críticas. Faça como o @henrygosuen, com este belíssimo post dando sugestões ao nosso jogo. Ou coloque a mão na massa! Faça um fork do jogo no GitHub, edite o código e mande. :)

Google Buzz

Meu ambiente de desenvolvimento

Fui convidado para esse meme pelo @PotHix, dê uma olhada também no ambiente dele.

Como eu tenho dois ambientes totalmente diferentes, em casa e no trabalho, vou comentar os dois.

Sistema Operacional

Eu sou bem eclético. Trabalho com o OS X, no meu notebook uso o Ubuntu e no desktop tenho o Fedora e o Windows instalado. Tá, confesso que meu Windows é só playground, já que eu não tenho nenhum console, e tenho que rodar o Steam.

O Ubuntu é o SO que melhor colou no meu laptop. E é nele onde eu desenvolvo mais em casa. Parece que eu associei involuntariamente que o desktop é um video game. Só ligar o computador e eu já quero jogar.

Edição de Código

Gosto bastante do TextMate, queria algo parecido para Linux. Por isso uso GEdit em casa. Editor simples e muito bom. Uso o VIM para algumas coisas, mas editar um projeto inteiro nele não; eu me perco.

Controle de Versão

Subversion no trabalho e GIT em casa. Particularmente acho o GIT muito melhor, apesar dos conceitos ligeiramente diferentes.

Linguagens de Programação

Eu não sou expert em linguagem nenhuma. Nem tenho uma como preferida. Quem me conhece sabe que meu defeito é gostar muito de explorar novas linguagens. Atualmente, minha linguagem de trabalho é ActionScript 3.

Recentemente comecei a aprender Common Lisp por diversão. Já que eu não sei nenhuma linguagem funcional (se você não contar o pouco de funcional em Python). Haskell é outra linguagem que eu pretendo aprender esse ano de 2011.

Terminal

É, tem que ter um terminal aberto.

Uso o Bash no OS X por simples preguiça de instalar o Zsh, que é o meu shell padrão no Linux.

Browser

Sempre usei o Firefox, mas ultimamente o Chrome tá se saindo muito melhor que ele. Ainda mais por que eu tenho um vício de abrir muitas abas. Vejo os feeds no Google Reader, abro as páginas e vou lendo aos poucos. Sempre tem mais de 40 abas abertas. O Firefox costuma ficar muito lento com tudo isso aberto.

Música

Ah, isso não falta. Seja no iTunes ou no Rhythmbox, tem sempre algo tocando. Ouço qualquer coisa, mas na hora de desenvolver, confesso que o melhor é um Hard Rock / Heavy Metal. Meu Last FM.

Eu tamém participo do BBB virtual Wakoopa, todos os programas que eu uso ficam lá.

Vou deixar esse meme aberto. Sinta-se a vontade de postar, mas me avisa que eu quero ver.

Google Buzz

AnimAllegro – Framework simples de animação

Há muito tempo não mexo com Allegro — biblioteca multimedia escrita em C –, mas fuçando em minhas coisas, encontrei algumas classes de suporte que eu utilizava em meus projetos em C++. Resolvi primeiro distribuir algumas classes que fiz para tratar sprites e animações (que eu já tinha postado sobre), então chamei tudo isso de AnimAllegro, um framework bem básico, e aqui vou falar sobre ela, brevemente.

A AnimAllegro é simples em dois sentidos:

  1. Ela está muito simples. Faltam alguns features para que ela possa ficar interessante. Entretanto, ela já é funcional.
  2. Ela é simples, porque fazer um sprite animado tem que ser simples. Vou mostrar alguns exemplos:
AnimSprite sprite;

sprite.AddFrame("standing.bmp");

sprite.AddFrame("walking1.bmp");
sprite.AddFrame("walking2.bmp");

sprite.AddState(new State(0, 0)); // Animações do sprite parado
sprite.AddState(new State(1, 2)); // Animações dos sprite andando
sprite.FitStates();
sprite.SetCurrentState(0); // Escolhe o estado parado.

sprite.SetPosition(10, 10);

Para que ele anime, basta chamarmos o método run, passando um bitmap por parâmetro para que ele exiba o sprite, no looping principal:

sprite.run(bitmap_buffer);

Sempre que precisar mudar de estado, basta chamar o método SetCurrentState. Você pode ver um exemplo completo aqui.

Dá para perceber que ainda ainda falta implementar algumas coisas essenciais, como por exemplo o suporte a spritesheets, aquelas imagem que contém todos os quadros da animação, bem como um suporte aos DATAFILES do Allegro; um melhor controle de velocidade; documentação; etc.

Então aproveitando, gostaria de dizer que o projeto é livre, você pode usar à vontade (de acordo com a licença LGPL), mas que também pode colaborar para melhorar. Basta dar um fork aqui no projeto no Codaset, fazer a alteração que achar conveniente e então enviar.

Ainda tenho muitos outros códigos interessantes em Allegro e C++ que eu criei aqui que gostaria de compartilhar, quem sabe depois eu compilo tudo num framework de jogos. :)

Google Buzz