deV( )id Games | because we're tired of no return;

TAG | Flixel

Então, dando mais uma passada rápida por aqui (lembrem-se: a maior parte da ação deVoidiana aparece no twitter, o blog é mais para falarmos sobre assuntos extensos!), apresento-lhes o mais novo spin-off do Scroll Lock, sendo jogado pelo nosso querido amigo Yanko:

E pra você que não viu no Facebook, também tem o Waterwords, um joguinho relâmpago feito pra um contest da MochiMedia que você pode jogar no Kongregate:

· · · ·

Bom, demorou um pouco mais do que eu esperava a princípio–graças, em parte, à adaptação para celular–mas aqui está, para quem quiser saber detalhes nus e crus de como é desenvolver um one-button-two-days-game 🙂

Ah! Espere! O jogo agora tem uma versão que roda em Androids que suportam Flash! Veja no Kongregate Mobile! E aqui está um QRcode bonito para você que não quer copiar um link gigante pro celular: Scroll Loc MobileOk, agora que você perdeu mais 10 minutos da sua vida se divertindo com Scroll Lock (não esqueça de dar estrelas pro jogo!) podemos voltar à nossa programação normal.

 

O que deu certo

1) O conceito. Tudo bem que essa aqui é um pouco de roubo, porque eu simplesmente acordei no domingo com o jogo pronto na minha cabeça. Agora acredito quando lembro da J.K.Rowling falando que isso aconteceu com todo o universo de Harry Potter em uma viagem de trem! Mas enfim, é claro que não surgiu do nada. Tudo começou alguns dias antes, quando o Denilson twittou a respeito do / ESCAPE \, um one-button game que só usava a tecla Esc do teclado, em um trocadilho onde você controlava uma criatura que tinha que fugir de uma torre vertical com espinhos nas paredes e um laser mortal que subia a torre logo atrás de você.

Achei o jogo bem divertido (apesar de não conseguir ganhar a badge difícil =/ ), e fui olhar os comentários a respeito. Um deles era bastante interessante…

“Next game: Scroll Lock Please? I have to use this useless thing.”

Minha mente de desenvolvedor, obviamente, ligou na hora, e pensou em como criar um jogo em que o gameplay central consistisse em um trocadilho com a tecla Scroll Lock (e fosse controlável somente por ela). Não demorou muito para pensar que a idéia seria que o pressionamento da tecla “travasse” a “rolagem” de alguma coisa.

Tá, mas e aí?

Bom, não sei. Digo, não sabia. Então isso foi ficando meio de lado ao longo da semana. Até que acordei no domingo com a idéia de um boneco palito em uma esteira da morte com pistões que o ameaçavam. Mais do que a idéia, me veio de súbito a imagem do jogo completo, com toda a direção de arte (que foi algo que também deu certo, veja mais pra frente), o que foi muito bom para manter ao longo do desenvolvimento uma visão clara de como eu queria que o jogo ficasse.

 

2) O desafio. Junto com a visão de como o jogo ficaria, veio a realização de que ele seria razoavelmente simples de fazer. Talvez simples o suficiente para que eu fizesse sozinho (que era algo que eu queria e sabia que precisava: fazer um jogo sozinho do começo ao fim). Talvez simples o suficiente para ser feito em um ou dois dias.

No fim das contas, eu estabeleci um desafio, quase como um Ludum Dare pessoal: fazer um jogo sozinho em dois dias, com o protótipo de gameplay funcional na noite do primeiro dia.

Para garantir que nada atrapalharia a experiência, eu não comentei a respeito do projeto com ninguém (nem com o Yanko!) exceto o Denilson, porque ele foi a origem da idéia original, tem um bom senso crítico a respeito de jogos, e eu queria ter alguém para ajudar a opinar (como jogador) a respeito de alguns detalhes do gameplay.

No final das contas, não acho que manter contato e mostrar o trabalho em progresso para uma pessoa em especial tenha atrapalhado o objetivo ou ajudado o jogo a ficar pronto em dois dias (corrompendo assim o desafio), dado que não me fez ter MENOS trabalho em momento algum. Apenas serviu para ajudar o jogo a ficar mais divertido, e foi uma ótima experiência em playtesting contínuo 🙂

E enfim, o desafio foi atendido. O gameplay estava totalmente pronto na primeira noite, e o dia seguinte consistiu basicamente de polimento e adição de detalhes como a API do Kongregate e o botão do Twitter.

 

3) A direção de arte. Ok, convenhamos: como artista gráfico, eu sou um ótimo programador. Talvez até conseguisse aprender a ser um artista meia-boca se corresse atrás de material para isso e aprendesse a usar um Photoshop da vida, mas o fato é que nunca o fiz.

Eu queria fazer um jogo sozinho em dois dias,  e a única ferramenta gráfica que eu sabia usar era o Paint do Windows. E, como ele não serve pra muita coisa além disso, a definição da direção de arte se criou na minha frente: o jogo haveria de ser feito em Pixel Art.

Não por acaso, este é o único estilo de arte que eu realmente estudei (informalmente) por algum tempo, analisando sprites de vários jogos antigos e como a colocação cuidadosa de cores e pontos pode fazer nosso cérebro inferir mais informação do que a imagem realmente contém, da forma que o artista quer. Acredito que essa pequena experiência tenha ajudado os gráficos do jogo a irem do “QUE BOSTA LOL PARECE UM RAGECOMIC FEITO NO PAINT POR UM 12YR OLD” para “ei, esse pistão é bem maneiro”.

 

4) A linguagem/biblioteca. O jogo foi feito em Flash (ActionScript 3.0) e, para quem não sabe, usando a biblioteca Flixel e a IDE FlashDevelop. Não por acaso, este é o mesmo ambiente que foi usado pelo Yanko pra fazer o Corrida Presidencial, em cujo desenvolvimento eu também não me envolvi diretamente, então não tinha aprendido nada a respeito dele.

Então me vi deparado com uma escolha: aprender AS3+Flixel e fazer o jogo no que parecia ser um framework bem adequado para o conceito do jogo (afinal o próprio Canabalt foi feito com ela!) ou fazer em Unity, que eu já conhecia, mas seria matar uma formiga com um canhão de íons.

Acabei decidindo, no final, pela Flixel, mesmo tendo em mente que tudo teria que estar pronto em no máximo 2 dias. Hey, era um desafio! Se era pra ser desafiador E uma experiência em aprendizado condensado, melhor aproveitar que já estava na chuva e aprender uma linguagem e framework novos.

Esta escolha se mostrou extremamente certeira, porque a Flixel é realmente muito simples de aprender e usar, e AS3 é bastante parecido com as linguagens com as quais estamos acostumados (C/C++, Java e Javascript). Além disso, todas as ferramentas necessárias são gratuitas independentemente de quaisquer fatores–coisa que a Unity, por exemplo, não é–e inclusive para publicação em várias plataformas: em especial Android (que já tem uma versão web otimizada para ele) e iOS, que estão nos planos para um futuro próximo 😉

Considerando que com Unity a publicação para mobile custaria $1500 pela Unity Pro e mais $1500 para cada plataforma… é, financeiramente foi uma ótima escolha!

Ilustração artística da relação entre os custos de publicação com Flixel e Unity. Sim, foi feita no Paint.

 

5) A data de lançamento. Não sei bem explicar essa, então vai ser rápida. Mas foi simplesmente muito bom lançar o jogo numa terça-feira! Não sei se porque todo mundo tava entediado com o trabalho e queria um motivo pra passar o tempo jogando algo novo na véspera do feriado, mas a popularidade do jogo aumentou bem rápido, dentro e fora dos nossos círculos sociais.

 

Bom, como eu disse lá em cima, o desenvolvimento do jogo no fim das contas foi um sucesso, então não acho que nenhuma decisão tenha sido, em si, errada e não me arrependo de nenhuma delas. Mas vou comentar um pouco sobre algumas decisões que causaram pequenos problemas, por motivos na maioria das vezes fora do meu controle.

 

O que deu errado

1) A linguagem/biblioteca. Pois é, irônico repetir um ponto que era muito forte na lista do que deu certo. Mas a maior fonte de problemas durante o desenvolvimento foi a Flixel. Explico: ela é realmente boa, tem exatamente a complexidade necessária, e uma API simples e direto ao ponto.

O problema é que essa API muda o tempo todo.

Observe que a API da Flixel é totalmente instável, e a cada versão classes novas são adicionadas, métodos são modificados, e o pior–muitos métodos e classes simplesmente são removidos (sim, REMOVIDOS, não só deprecados), sem nenhuma observação na documentação.

A consequência óbvia disso é que A Internet não sabe mexer com Flixel: metade dos recursos que se encontra (além da documentação oficial) sabe mexer apenas com a versão passada da biblioteca. Mesmo no próprio fórum da Flixel havia muita informação conflitante, e eu cheguei a achar que estava ficando louco por não encontrar na minha distribuição uma classe que o mundo parecia concordar que existia (para constar, era a FlxKong, para acessar a API do Kongregate).

 

2) A integração com a API do Kongregate. Uma das coisas que eu queria desde o momento zero era publicar o jogo no Kongregate, e integrar com a API de stats de lá. Mais pra ser fácil de gerenciar o jogo, já que eles já têm uma plataforma pronta, e porque eles também te dão uns trocados em propaganda, o que nunca é demais 🙂 Além disso, seu jogo tem que implementar a API de stats para ter chance de ganhar badges um dia, o que faz com que ele seja muito mais jogado.

Bom, isso causou dois problemas graves: um durante o desenvolvimento, e um no dia do lançamento, com o jogo já publicado.

O primeiro foi a grande dificuldade para descobrir como usar a API do Kong com Flixel. Os exemplos na documentação para desenvolvedor do Kong supõem que você está usando Flash direto, e a Flixel encapsula a maioria das coisas, inclusive algumas que eu teria que acessar. Enquanto isso, teoricamente existia uma classe na Flixel, a FlxKong, que faria a comunicação, mas aparentemente essa classe foi descontinuada. Acabei encontrando um snippet de código pronto para fazer essa comunicação–mas isso demorou umas boas horas.

O segundo problema foi que o backend de stats do Kongregate aparentemente estava meio instável no dia em que o jogo foi lançado (pelo que eu pude testar em outros jogos), então muita gente sofreu atrasos grandes para ter suas pontuações computadas, e muitas simplesmente foram perdidas. Tudo voltou ao normal no dia seguinte, sem mudar nada no meu código, então suponho que o problema nada tinha a ver comigo. Ainda assim, isso chateou algumas pessoas, e imagino que posa ter influenciado negativamente no rating do jogo.

 

3) O botão do Twitter. Não, sério. Eu perdi umas quatro horas só pra fazer esse maldito botão funcionar direito. Sempre em algum momento alguém parecia estar corrompendo a URL da requisição pro Twitter–ou eu mesmo, ou o Flash, ou o Kong, ou o navegador, ou o próprio Twitter–e o twit chegava lá corrompido, com partes da URL no texto e todo tipo de bizarrice.

No fim das contas a página do jogo no Kong já tinha um botão de Twitter, então eu acho que essa poderia ser uma dor de cabeça evitável–mesmo se quisesse ter um botão mais visível, acho que eu poderia usar magias de JavaScript pra simular um clique no botão da página–mas eu queria que o Score da pessoa aparecesse no Twitter junto. Acabei sendo cabeça-dura com isso naquele espírito inicial de aprendizado, mas foi bem desagradável no fim das contas!

 

Enfim, acho que é isso. Poderia continuar falando mais sobre pequenos acertos e pequenos problemas, mas aí ninguém leria esse post (que já está gigante!). Se alguém tiver alguma dúvida ou curiosidade sobre qualquer parte do desenvolvimento que eu não comentei a respeito aqui, fique à vontade para deixar um comentário ou me mandar uma mensagem no GTalk/GMail/Facebook/Twitter 🙂

· · · ·

Ressuscitando um trocadilho infame, esse post é pra explicar o que diabos é o Corrida Presidencial. Se você ainda não jogou, clique no link anterior e vá jogar! É melhor ler a respeito só depois de ter visto!

Quando entrei de férias do último período – infelizmente, último as in “o anterior“, e não o “derradeiro“; ao contrário da calúnia que o Tinnus contou no último post, eu infelizmente só me formo no meio do ano, apesar de já começar o mestrado junto com ele esse semestre, sendo a minha futura tese motivo de vários posts que vão vir,  se tudo der certo – resolvi que devia aproveitar o tempo pra aprender o máximo possível sobre plataformas que nunca tinha programado. As minhas metas: Unity3d (que, apesar do Brasil Game Jam, não tive tanto contato direto com ela), Android e Flash.

Como toda boa promessa de ano novo, as coisas não foram bem como eu planejava. Mas nesse caso, não foi só por desleixo, mas sim porque estava enrolado tentando arrumar um financiamento pra deV( )id tomar mais formas… formais (que em breve talvez vire post aqui também). Além disso, teve o projeto final, que terminamos em tempo record e assim que defendermos devemos liberar o texto por aqui. Adicione aí o GameRama e… bom, as famigeradas promoções de fim de ano do Steam (engoli Lara Croft & The Guardian of Light e Mafia II e recomendo fortemente os dois!).

Enfim, um belo dia, resolvi parar de procastinar. Baixei o Flixel e o FlashDevelop, segui as primeiras instruções do FlashGameDojo e BAM, estava tudo pronto pra começar. E eu já tinha uma idéia do que fazer.

As eleições

Um belo dia de 2010, em plenas eleições presidenciais, estava no laboratório conversando com o Tinnus, o prof. Adriano (nosso orientador) e os amigues do time do Brasil Game Jam.  O meu comentário recorrente durante todas as eleições foi que, apesar de isso ser normal em qualquer eleição desde sempre, as mudanças radicais de opinião dos candidatos ia além dos limites de qualquer tipo de vergonha na cara. Independentemente das preferências políticas de cada um, acho que isso deveria ter sido bem notado e, pra minha surpresa, não foi tanto. “Política é assim!” – mas não deveria, na minha opinião.

Os candidatos “favoritos” advogaram contra e a favor de tudo. O problema é que faziam isso ao mesmo tempo, nos mesmos assuntos, dependendo de a quem estivessem falando. São números, é marketing e, infelizmente, o público alvo deles é uma nação inteira com toda a sua variedade, e não um nicho específico com quem se pode exacerbar um ponto de vista. E aí, quando os números mudam, talvez a postura tenha que mudar também.

Uma mudança de postura, pra mim, não é nada mais que natural, afinal de contas, é um meio para um fim; ninguém é eleito sem agradar ninguém e política nunca foi sobre o melhor para todos – se fosse o melhor para todos, sem exceção, não precisaria de política. O que me incomodou era que a mudança de postura era mais profunda, era uma mudança (aparente) de opinião. E mesmo não sendo a mãe do Paulinho, isso me deixou bem impressionado, porque nunca tinha sido tão cara de pau.

O Jogo

Como muita gente sabe, eu sou fan de Canabalt. O Adam Atomic causou uma pequena revolução em jogos de flash porque, depois dele, a quantidade de one button games que apareceu (e alguns deles eram realmente excelentes!) foi impressionante, a coisa ganhou

15 minutos depois...

15 minutos depois...

ahem – mais atenção.  E mais genial ainda foi o pequeno twist numa versão alternativa do jogo, que te ensinava a digitar sem olhar, porque se você não apertasse a tecla certa na hora certa… morte certa! Durante a tal discussão acima, eu me lembrei disso e disse

Seria legal fazer um jogo tipo Canabalt, mas em vez de ser um cara num prédio, ele é um candidato à presidência. Aí aparece uma pergunta e,  dependendo de quem aparecer, ele tem que responder de um jeito ou de outro, senão cai no buraco!” risos risos.

Mas pera aí. Realmente. Era isso. Era assim que eu me sentia em relação às eleições! Eu deveria fazer esse jogo! E eu fiz.

No Corrida Presidencial, você é um candidato à presidência de um país fictício. Você corre numa pista e tem que pular obstáculos mas, para pular, você precisa responder corretamente a sua opinião sobre uma questão. “Espera aí, responder corretamente minha opinião? Se é minha opinião não tem o que errar ou acertar!” – não se você é um candidato a presidência! Sua resposta só é certa se te render mais votos, logo, você tem que responder de acordo com os eleitores que estão te vendo naquela hora.

O timing

Nossa, muito legal, mas por que você não lançou isso na época das eleições, pra ser mais contextualizado?

Por três motivos

  1. Eu tinha coisa pra caceta pra fazer. Avaliação e Desempenho é uma das matérias mais cabeludas do universo, e o tempo que sobrava pra qualquer coisa era bem pequeno;
  2. Eu acho meio [insira palavra negativa aqui] se aproveitar de uma situação polêmica qualquer pra fazer um jogo meia boca pra cair na boca do povo. É tipo roubar cuecas, você caiu na boca do povo, parabéns… e agora? Houve casos de gente que foi contratada pra fazer jogos com foco em política pelos candidatos e, obviamente, esses não caem nem de perto nessa classificação – era gente sendo paga por um serviço, e viver de gamedev no Brasil não é nada fácil, então pelo contrário, fico feliz que tenham conseguido essa oportunidade. Inclusive, tem jogos “oportunistas” desses que até dão resultado, mas normalmente, são só tosqueiras.
  3. Brasileiro tem a memória curta. Eu lembro disso tudo porque me marcou de maneira negativa, e porque germinou essa idéia na minha cabeça. Se não tivesse sido por isso, provavelmente teria esquecido como a maioria das pessoas esqueceu. E talvez lançar isso agora ajude não só a lembrar, mas também que pessoas considerem com mais calma e de cabeça fria o que não consideraram nas eleições que (isso provavelmente todo mundo lembra) viraram briga de torcida de futebol. My daddy beats your daddy!

O 1 foi o causador, o 2 o justificador e o 3 foi uma das coisas que eu percebi com o processo.

Mas o seu jogo também é meia boca!

Aí é que entra uma das outras descobertas associadas. Sim, ele pode ser. Mas eu precisava fazer o jogo. Tem uma expressão que muita gente usa, especialmente em relação a música/arte em geral que é “i just had to get it out of my system“. Às vezes você tem uma idéia e a ânsia de simplesmente fazer aquilo é justificativa o suficiente pra fazer. E é aí que eu percebi que jogos podem sim, ser arte. Arte é isso, é algo que você precisa fazer, você precisa ver pronto, algo que te incomoda de ter na cabeça e não materializar. Por outro lado, isso não quer dizer nem um pouco que eu concorde com baboseiras artsy fartsy que rolam por aí: jogos têm que ser divertidos, ponto. Se não é divertido, ou é um jogo ruim, ou não é um jogo. Mas não tem problema nenhum em não ser um jogo! Só não fique falando que o futuro da maturidade do meio deve ser um tipo esquisito de interactive fiction, exclusivamente. You dick!

Ao mesmo tempo, cada vez mais eu vejo que não tem problema ser um jogo ruim, se for pra passar uma determinada experiência, e aquilo seja o que o público sendo atingido gosta. Por isso, não anuncie outra coisa. Seja honesto com o seu público. Se o seu jogo é não tão legal, mas tem uma boa idéia por trás, faça como eu: fale! Entao aí está: o Corrida Presidencial não é tão legal, mas ele passa uma mensagem que eu gostaria de passar. Nas eleições passadas, muita gente escreveu em blogs, muita gente xingou muito no twitter… e eu? Eu fiz um jogo. E de quebra aprendi a mexer numa plataforma completamente nova pra mim. Tem desvantagens? Acho que não.

Não seja tão duro consigo mesmo, amigue!

Não seja tão duro consigo mesmo, amigue! Você tem seus talentos!

Decisões

Apesar de tudo, queria que o jogo não fizesse apologia a favor ou contra nenhum candidato. Por isso, ele se passa num país completamente desconhecido, cujas cores da bandeira não são definidas, os monumentos são fictícios e onde os cadidatos que você pode escolher são completamente imaginários: João Guerra e Vilma Nassif. Qualquer semelhança é puramente coincidência.

Tem um candidato no jogo, no entanto, que tem muitas referências literais; e eu não vou dizer quem é, senão dá spoiler. Mas se você destravar ele, ganha um achievement! E esse candidato era o único dos três que não merecia estar ali, por um motivo básico: ele nunca travestiu suas opiniões pra ganhar votos. Então a presença dele é mais uma homenagem que qualquer outra coisa. E a vantagem é que você tem N-eas vidas com ele, o que te dá a chance de jogar como você jogaria na vida real: mentir pra ganhar mais votos ou fazer uma longa corrida mantendo as suas opiniões verdadeiras do início até o fim, mesmo que isso signifique ganhar menos votos. Obviamente quem só for jogar 5 minutinhos e falar “heh, que bosta” não vai ter saco de ler até aqui, mas hey, had to get it out of my system!

Finito!

Como eu fiz tudo sozinho (obviamente com ajuda de opiniões e playtests de todos que tão lá nos créditos e outros, mais o Eddy Seabra que me deu umas boas dicas pra deixar a landing page do jogo mais bonitinha), o tempo que eu investi foi um bocado maior que o que se investe num jogo de fim de semana. Sempre se deve tentar fazer o melhor possível dentro do tempo que você tem; o mais difícil é pesar essas duas coisas. Eu cheguei num ponto em que o jogo estava bom-o-suficiente porque 1) já tinha tudo que eu queria passar; 2) era mais divertido do que eu esperava que ficasse e 3) tava na hora de largar o osso e partir pro próximo projeto. Então é isso, embora longe de perfeito, tentei deixar fechadinho e polido dentro do deadline que eu me impus mas, obviamente, ficarei feliz com qualquer sugestão ou bug report que vocês possam colocar aqui nos comentários! Então como sempre, agradeço a todos que jogaram e que leram até aqui. Espero que o jogo e o post sirvam pra pensar uns 5 minutinhos sobre qualquer um dos assuntos, e que tenham sido pelo menos levemente divertidos!

Pra quem quiser, seria de grande ajuda responderem a 4 perguntinhas a respeito do jogo! Nenhuma delas é obrigatória e você não precisa se identificar/dar e-mail nem nada! Basta clicar aqui!

Assim que der, vou fazer alguns posts aqui no blog sobre como usar o Flixel – teve muita coisa boba que eu demorei um bocado pra pegar, então acho que pode ajudar alguém! Pensei até em divulgar o fonte também, mas boy oh boy, depois da semana final em modo XGH, ele virou uma macarronada só que ia atrapalhar mais que ajudar – e a sensação de colocar o código aqui seria a mesma de postar uma foto nu na internet. Sim, nu, na internet. Agora que você está desinteressado no source, fique de olho no twitter pros posts sobre Flash!

Nu. Na internet. Sim.

Nu. Na internet. Sim.

Off I go!

· · · · · · ·

Theme Design by devolux.nh2.me