Work: EA Montreal
Sunday, September 4th, 2011
Mais fotos de Montreal aqui.
Puxa! Depois de mais de um ano desde o último post, aqui estou, vivo! Dessa vez não vou falar que escreverei com mais freqüência aqui no blog porque sei que não é verdade. E tenho que agradecer meu aluno Rafael (Romano), pois foi conversando com ele que eu pensei “pois é, tenho um blog… parado.”
Mas e aÃ, falar sobre o que nesse post? Não sei bem a resposta, então parto pro famoso “update do que fiz nesse tempo”, que sei que não deve interessar pra ninguém, mas de cara não vem nenhum outro assunto pra hoje.
Sobre gamedev: meu último trabalho da Glu Mobile foi o freemium (jogo gratuito pra instalar e jogar, mas com a opção de avançar mais rapidamente no jogo via compra de itens – pense em jogos de redes sociais) Zombie Isle, que pode ser baixado pela App Store. Acho que não tem na App Store BR.
Último trabalho pois eu sai de lá já faz um tempo, para retomar um projeto pessoal… que não vingou. AINDA =).

Relembrando essa época de zumbi, acho legal compartilhar um pouco da experiência do desenvolvimento.
Créditos?
Provavelmente meu nome não aparece no jogo e acho que de nenhum desenvolvedor. Chega a ser engraçado, enquanto vemos notÃcias de desenvolvedores que foram removidos dos créditos de LA Noire, tem empresas que nem colocam créditos no jogo. Dos jogos da Glu que eu joguei, só lembro de ter visto créditos em um tÃtulo e ele foi removido do catálogo da empresa.
Easter Egg
O jogo possui coleções de itens e durante o desenvolvimento as pessoas da empresa davam sugestões sobre possÃveis coleções. Minha sugestão foi de colocar uma coleção de Developers =). Seria uma maneira de ser creditado no jogo através de um easter egg que faz parte do game design. Eu sai da empresa quando o jogo estava indo pra uma versão beta e depois me contaram que o produtor do jogo pediu pra “mudar o item Kishimoto dessa coleção pra Dupuy”. Oh, well. Caso o produtor não tenha pedido pro artista alterar meu desenho também, o jogo tem um bug de texto =P.
O que eu fiz?
Peguei o projeto do inÃcio (quando nem game design estava definido). No começo, junto com outro programador, definimos a estrutura dos arquivos que seriam gerados pelo level editor da empresa e adaptei o exporter pras necessidades do jogo.
O jogo tem vários módulos e, pro gameplay ser aprovado, o foco foi a parte da navegação de barco e a exploração das ilhas. Fiquei encarregado da parte da ilha, onde o jogador escolhe os tiles para cavar, encontrar itens e assim por diante. Colocando as principais tarefas em tópicos:
- Exporter das ilhas pelo level editor e importer no jogo
- Definição de propriedades dos tiles/objetos via level editor
- Render das camadas das ilhas
- Ordenação dos objetos
- Distribuição dos elementos enterrados de acordo com a tabela de distribuição/estatÃstica do game design
- HUD, feedback pro jogador (mensagens pop-up e itens na ilha)
- Lock/unlock de áreas das ilhas via código
- Deslocamento do personagem (path-finding com A*)
- Outras tarefas minor mas não menos importantes =)
Trabalhei diretamente também com game design e artes para certificar que os assets e os levels estavam sendo criados e usados corretamente (além de verificar se o que eu estava implementado batia com o GDD). Na parte do mapa (navegação de barco), dei uma ajuda pra parte das informações de cada ilha. Os módulos de loja, compra de itens, batalha, login no GameCenter, porto, tutorial, foram desenvolvidos por outros programadores. E não sei o quanto que mudaram do código original da ilha.
Curiosidades
- Dois métodos importantes pro personagem andar na ilha: WalkThisWay(source, destiny) e KeepWalking(). O primeiro é chamado quando o jogador escolhe um tile e traça o caminho com A*. KeepWalking(), como o nome diz, é usado pra atualizar o caminho do personagem.
- Trecho de código onde o método KeepWalking() é usado:
// johnny walker did not reach destiny, so keep walking if( !ReachedDestiny() ) KeepWalking();
- Depois que sai, me contaram que o projeto pulou de 2 pra 5 programadores (WTF?)
- Lançamento do jogo estava previsto para Halloween/2010.
Bom, acho que já escrevi bastante coisa e foi só de um assunto! Vou deixar outros updates pra depois, só espero que não leve mais um ano pra isso hehe.
See ya!
Outro dia encontrei um jogo educativo sobre sexo lá do Canadá: Adventures in Sex City – The Game. Primeira reação: WTF?. A idéia é boa, afinal, aprender sobre DST’s, controle de natalidade e qualquer coisa relacionada com a nossa saúde nunca é demais. Mas achei a execução do jogo infeliz, muito infeliz.
Não sei se a escolha dos personagens, falas e visual são apropriados para o público-alvo, mas ter um vilão chamado The Sperminator, que possui um pênis em cada braço e tem como objetivo infectar as pessoas com seu ‘Evil Sperm’… É pior que nosso amigo canibal Dollynho (ou nunca repararam que ele toma ele mesmo?).
Fora que errei uma pergunta e meu personagem, depois te ter tomado uma (es)porrada do vilão, falou “Right in the face” (escolha muita boa das palavras, não?).
Para quem quiser conferir, basta clicar no Sperminator abaixo. O jogo é um quiz em inglês e embora visualmente seja muito bizarro, as informações apresentadas são bacanas.
E já que o assunto é sexo, segue um vÃdeo bônus que vi dia desses:
WTF? É um produto japonês para o público masculino que por algum motivo me fez lembrar desse outro vÃdeo (o próximo é finlandês, muitos WTFs?! quando vi):
UFO POOOORRRRNOOOOOOOOOOOOOOO!!!
E agora, paremos com a bizarrice.
(Enquanto isso, me pergunto por que jogos educacionais não são criados com gameplay mais interessantes e por que (quase) tudo relacionado a sexo tende ao bizarro).
Nos últimos dois meses tive a honra e prazer de assistir algumas aulas como convidado do curso de XNA da Alpha Channel ministrado pelo prof. Willians Monteiro. Embora tenha participado dos Gamefests e lido uma ou outra coisa sobre a tecnologia, foi a primeira vez que tive contato com o XNA na prática e posso dizer que gostei bastante, tanto é que sempre que há um tempinho livre eu “brinco” com o XNA.
Em uma das aulas ele explicou que no XNA você pode criar e usar fontes através do SpriteFont, mas um porém é que nesse caso você usaria apenas as fontes do sistema e isso claro é uma restrição chata, já que geralmente a tipografia usada nos jogos vai de acordo com a direção de arte. Depois que ele comentou sobre um dos métodos SpriteBatch::draw(), resolvi criar a classe abaixo para escrever textos usando uma fonte bitmap.
No meu exemplo, criei a seguinte imagem:

Como você pode perceber pelos comentários no código, a implementação não ficou lá essas coisas, fiz algo rápido pra aprender. Há features a serem melhoradas e adicionadas (veja algumas sugestões no todo list)… Mas enfim, você captou a idéia né?
Obs.: há pequenas diferenças entre o código original e a listagem abaixo por causa da formatação html. Sugiro baixar o original aqui (incluindo a imagem da fonte).
/*
* XNA Custom Font Class
*
* Written by
* Andre Kishimoto
* http://www.tupinihon.com
*
* June 20th, 2009
*
*
* Use a bitmap font to draw strings instead of a Sprite Font.
*
* Usage example:
*
public class [YourClass] : Microsoft.Xna.Framework.Game
{
// ...
// Declare a new CustomFont
CustomFont customFont;
protected override void LoadContent()
{
// ...
// Create customFont and define its properties
customFont = new CustomFont(Content, "customfont", 20, 20, 4, 12);
}
protected override void Draw(GameTime gameTime)
{
// ...
spriteBatch.Begin();
// ...
// Draw string using CustomFont class
customFont.drawString(spriteBatch, "Using CustomFont class", new Vector2(10, 50), Color.White);
// ...
spriteBatch.End();
}
// ...
}
*
* In this example, there is an Asset called customfont (CustomFontExample.png), where each character is 20x20. Its content is as follows:
* ABCDEFGHIJKL
* MNOPQRSTUVWX
* YZ
* 0123456789
*
* As you can see, it has 4 rows and 12 columns, where the last row is used only for numbers (see the code to understand this structure)
*
*
* Todo list (or, things you can try on your own while studying XNA development)
*
* - Include proportional typeface fonts (different width for each character)
* - Add special characters such as ç, ã, ô, é and so on (e.g. used in Spanish and Portuguese strings)
* - Optimize code
* - Remove assumption of numbers to be at last row in the bitmap font
* - Redesign font bitmap scheme
*
*/
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
public class CustomFont
{
private Texture2D font;
private int width;
private int height;
private int row;
private int col;
public CustomFont()
{
}
public CustomFont(ContentManager content, String name, int w, int h, int row, int col)
{
load(content, name, w, h, row, col);
}
public void load(ContentManager content, String name, int w, int h, int row, int col)
{
font = content.Load<Texture2D>(name);
this.width = w;
this.height = h;
this.row = row;
this.col = col;
}
// I believe this code is not optimized
public void drawString(SpriteBatch spriteBatch, String text, Vector2 pos, Color color)
{
Rectangle currPos = new Rectangle(0, 0, width, height);
int currIndexY = 0;
char[] tempText = new char[text.Length];
tempText = text.ToUpper().ToCharArray();
// Loop through the whole string, char by char, get correct char location inside the bitmap font and draw it
for (int i = 0; i < tempText.Length; i++)
{
// We assume 0-9 numbers to be at last row in the bitmap font
if (tempText[i] >= '0' && tempText[i] <= '9')
{
currPos.X = (tempText[i] - '0') * width; // Calculate position of the character inside the bitmap font
currIndexY = row - 1; // Note: fourth row is used for numbers only (in this example)
}
else if (tempText[i] >= 'A' && tempText[i] <= 'Z')
{
currPos.X = (tempText[i] - 'A') * width; // Calculate position of the character inside the bitmap font
// Get a value between [0..2] (in this particular example, where there are 3 rows and 12 columns)
// Note: fourth row is used for numbers only (in this example)
// Used to get the correct mapping inside the bitmap font
currIndexY = (currPos.X / (col * width));
}
else if (tempText[i] == ' ')
{
// If it is a blank space, just advance imaginary cursor and process next character
pos.X += width;
continue;
}
else
{
// If character is not found, simply advance imaginary cursor and process next character
pos.X += width;
continue;
}
// Get correct row inside the bitmap font
currPos.Y = currIndexY * height;
// Small adjustment to get correct column inside the bitmap font
if (currPos.X >= col * width)
{
currPos.X -= currIndexY * (col * width);
}
// Draw the current character
spriteBatch.Draw(font, pos, currPos, color);
// Advance imaginary cursor position in X (we assume every character has the same width)
pos.X += width;
}
tempText = null;
}
}
Download do código original e imagem da fonte: clique aqui.
Procurando oportunidades na área de jogos em São Paulo? A Glu Mobile está com 3 posições em aberto (game developer, porting engineer e QA tester). Para informações dessas oportunidades e como aplicar, visite este link.

Edit: o desenho que ilustra essa ‘figurinha’ foi feito dia 10/03/09 de manhã. Que surpresa que tive ao ler há poucos minutos atrás o texto do GameReporter a respeito de um incidente na Alemanha. Como disse aos meus amigos, em breve me desenho ganhando na loteria.
Creio que a franquia Halo dispensa apresentações. E como um dos diversos produtos da franquia, esse é o primeiro artbook da trilogia do jogo (há um segundo artbook lançado em 2008, focando apenas em Halo 3, já na lista para análise).
O conteúdo do livro fala a respeito do Halo 1 e 2 (sendo que este estava sendo desenvolvido durante a criação do livro, segundo o prefácio de Marcus Lehto, diretor de arte da Bungie Studios), dividido em cinco capÃtulos: character design, ambientes, armas e equipamentos, veÃculos e game design, além da introdução contando brevemente a história da Bungie. Para quem não sabe, é interessante o fato que Halo foi anunciado em 1999 por Steve Jobs na MacWorld e, no ano seguinte, a Bungie anuncia que foi comprada pela Microsoft e que Halo seria um tÃtulo de lançamento do Xbox.
Há diversos estudos dos personagens, embora seja quase nulo sobre o Master Chief, e para cada um há sua versão in-game na mesma página. No capÃtulo dos ambientes, muitos concepts e textos explicando o universo Halo. Já na seção das armas, há mais renders 3D do que concepts, e todas elas são explicavas brevemente em alguns parágrafos. Esse é o capÃtulo com menos concepts. Assim como o resto do livro, o capÃtulo de veÃculos possui concepts e respectivos renders 3D dos veÃculos e alguns parágrafos descrevendo o que são ou como a equipe chegou a tal design.
O último capÃtulo comenta algumas coisas sobre o desenvolvimento do jogo, como as ferramentas internas, storyboard, cinematics, áudio e animação, mas nada muito aprofundado. Particularmente gostaria que esse capÃtulo fosse mais extenso, mas compreendo não haver tantos detalhes técnicos de produção por ser um artbook.
É um livro tanto para fãs da franquia Halo como para os que gostam de artes que envolvem exército, alienÃgenas e mundos e objetos futuristas.
Caso você compre o livro na Amazon pelo link ao lado, uma pequena porcentagem é revertida para mim. Com isso, você me ajuda a adquirir mais livros para análise/indicação ou para prêmios no blog.
Você também pode comprar pela Livraria Cultura, no link a seguir:
The Art of Halo – Eric S. Trautmann, Frank O’Connor.
Não cheguei a jogar o Mass Effect (X360, Windows) e o que sei é que o tÃtulo é um RPG/ação com ambientação futurista, misturando humanos e seres alienÃgenas. Logo, não posso opinar se o jogo é bom ou ruim.
Mas em se tratando do artbook do jogo, posso dizer que seu conteúdo é muito bom. Há muitas imagens, sempre com uma breve legenda explicando algum detalhe dos concepts ou sobre as decisões tomadas na direção de arte.
O livro é dividido em cinco capÃtulos, onde os dois primeiros (heroes and villains, life-forms) são voltados para a criação de personagens, o terceiro (transport) para transportes – contando com máquinas e espaço-naves de diferentes raças, o quarto (a galaxy of details) para armas, props dos ambientes e outros detalhes e o último (alien worlds) com vários estudos dos cenários do jogo.
Dada a temática futuro/aliens/guerra (resumidamente), alguns concepts de alienÃgenas e seus mundos me fizeram lembrar de Halo e Half-Life, embora muita coisa seja diferente desses outros tÃtulos.
Para quem gosta de jogos, filmes ou artes que se passam no espaço, com diferentes raças e ambiente futurista, essa é uma boa pedida.
Caso você compre o livro na Amazon pelo link ao lado, uma pequena porcentagem é revertida para mim. Com isso, você me ajuda a adquirir mais livros para análise/indicação ou para prêmios no blog.
Você também pode comprar pela Livraria Cultura, no link a seguir:
The Art of Mass Effect – Dan Birlew, Fernando Bueno.