A hora de refazer tudo do zero

Como falei no último post que fiz, estou fazendo um jogo e vou comentar um pouco sobre ele por aqui. Eu queria que o segundo post fosse sobre tirar as ideias da mente e do monte de papeis que elas estão e fazer alguns modelos funcionais, testes em papel, etc. Porém como é de se imaginar vindo de mim, enrolei pra terminar o texto enquanto o projeto foi andando. Dai que cheguei  no ponto que vou abordar nesse post (e que até faz um pouco de sentido ser falado antes), é um momento que ninguém realmente gosta mas com certeza vai acontecer diversas vezes. A hora de jogar tudo que você fez, dias, semanas ou até mesmo meses de trabalho sem uso nenhum, o conceito não funcionou, a jogabilidade ficou esquisita, a arte está feliz demais, o código mal começou a ser escrito mas já é pura gambiarra e hacks para funcionar.

No meu caso eu acabei resolvendo jogar tudo fora por conta da programação. O maior motivo é que desde o começo eu não estava feliz com as implementações que estava fazendo. A performance estava péssima e por mais que tentasse otimizar o código ele continua lento e com bugs, muitos bugs. Além disso eu gastava cerca de 20 minutos para conseguir fazer simples reta para testes, o que já me mostrava o quão complicado ia ser fazer as fases de verdade para o jogo.

O problema nessa hora é que você já gastou muito tempo com aquilo, provavelmente chegou num ponto que não tem mais ideias de como mudar o que você fez, seja esse algo um código,uma mecânica ou até mesmo uma arte. Além disso você acaba se perguntando se realmente vale a pena recomeçar do zero ao invés de tentar mudar uma coisa ou outra no que você tem ali na sua frente pronto, se vale a pena gastar 1 semana refazendo tudo ao invés de algumas horas remendando o que existe.

As vezes remendar é uma boa opção, as vezes o seu problema pode ser resolvido com uma solução simples no lugar certo outras vezes remendar as coisas só vão piorar as coisas ou pior, esconder um problema muito maior em seu projeto.

No meu caso eu demorei mais do que devia para escolher a opção de jogar tudo fora, eu realmente tentei remendar o código e ver no que ia dar, se desse certo teria valido a pena, já que o código estaria pronto e eu poderia então ir atrás de fazer a arte, modelagem e sonoplastia para o jogo. Infelizmente não deu e eu acabai gastando tempo e esforço em algo que não dará resultados (ao menos não para esse projeto, mas acabei aprendendo bastante sobre catmull-ron splines e curvas de bezier). Como é um projeto sem datas de entrega ou gente cobrando resultados pude jogar tudo pro alto, gritar foda-se e recomeçar.

O resultado disso foi alguns dias parado, desanimado com o projeto e todo o resto e um código muito mais limpo, sem tantas gambiarras e que me permite fazer o level design muito mais rápido do que antes (ou até mesmo não fazer e deixar o sistema gerar as fases de forma aleatória, não que eu vá fazer isso, claro). No final acabei gastando um bom tempo para nada (novamente, para esse projeto, aprendi o suficiente para poupar muito tempo no futuro) mas acabou valendo a pena nesse caso.

Estou fazendo um jogo

Olha só, vejam vocês, lembrei que esse site existe e resolvi postar alguma coisa. :D

Para quem não sabe eu estou fazendo um jogo, tudo bem que isso não é tão novidade vindo de mim. Tirando o fato que nenhum jogo foi publicado para o grande público, ficando quase sempre no meu HD até o dia que eu esqueço de fazer um backup dele eu já fiz uma quantia até que grande de jogos, mas sempre considerei eles mais como experiências com código, arte ou conceitos bizarros que jogos completos (e tecnicamente boa parte deles sequer pode ser considerado um jogo, já que não tem pre-loader, menus, sons e a lista de coisas faltando vai crescendo).

Dessa vez resolvi tomar vergonha na cara e fazer o negócio direito, com tudo redondo, ou pelo menos o suficiente para que o jogo funcione direito, não pareça ser um treco feito de qualquer jeito e principalmente, seja divertido. Além disso resolvi que irei fazer tudo sozinho, o conceito, design, arte, modelagem, animação, sons e programação. E vou aproveitar não ter datas para entrega de nada, ninguém a responder e coisas do tipo para documentar tudo aqui e dar algumas dicas, afinal tenho experiência suficiente nisso para falar como se soubesse o que estou fazendo.

Foi então que comecei a pensar em que tipo de jogo faria. A idéia de fazer um Shmup veio depois de um dia que resolvi brincar com os jogos da ABA Game, estava jogando Torus Trooper quando pensei que um jogo nesse estilo seria perfeito. Ele não é complicado de ser feito e a parte mais complicada é definir o design do jogo, as patterns de tiros e coisas do tipo. Implementar o mesmo é relativamente fácil e eu já tenho uma certa experiência criando esse tipo de jogo (além de uma grande quantidade de snippets de código que poderiam ser reutilizados para o projeto, me poupando muita horas de trabalho).

E já que comentei de ter snippets, vamos a uma dica para os programadores por ai, e aproveite bem porque é uma dica que vale para a vida toda. Faça seu código o mais modular possível, assim se um dia você precisar fazer o mesmo para outro projeto basta importar aquele código antigo e usa-lo, te poupando tempo escrevendo a mesma coisa de novo e de novo.

A partir disso comecei a pensar em como seria meu Shmup. A partir dai peguei uma série de jogos no estilo para estudar e fazer anotações. É um processo que gosto bastante de usar para definir ao menos a base do meu jogo, assim consigo ter contato com diversas mecânicas e suas implementações. A lista de jogos que usei para esse projeto foi bem extensa, pois ainda não tinha definido se meu jogo seria um bullet hell ou algo com a jogabilidade mais clássica. Uma coisa que achei interessante foi incluir alguns rail shooters junto na lista pois estava pensando que poderia ter algumas boas idéias a partir dali.

E vamos lá para mais uma dica, compre um caderno pequeno e passe a andar com ele, quando você tiver qualquer idéia você a anota. Não importa se pareça ruim ou que não se encaixa no seu jogo, se você acha que vai lembrar depois (e normalmente não vai) ou qualquer outra coisa, anote. É a partir do que você colocar ali que vai definir o caminho que seu jogo vai seguir e como ele vai funcionar. E se possível compre um com capa dura, facilita muito se você tiver aquela idéia genial que vai definir o seu jogo inteiro enquanto você está no ônibus voltando do trabalho.

Depois de jogar por um bom tempo cada um dos jogos na minha lista, entender o funcionamento deles, anotar páginas e páginas consegui fazer alguns avanços com meu jogo. Porém uma das coisas que defini é que ele não seria mais um side scroller shooter mas que ao invés disso teria a visão parecida com torus trooper e tempest, o que me faria ter pesadelos horríveis com matemática e escala de desenhos ou me forcaria a usar 3D. Como gosto de ter noites tranquilas de sono, optei pelo 3D e com isso pela troca da plataforma na qual o jogo seria feito. O Flash atualmente tem suporte a 3D mas além de lento (ainda mais para jogos ou cenas com muitos objetos sendo desenhados o que OPA! é o caso do meu projeto) então precisava ir atrás de alguma nova plataforma para fazer meu jogo, provavelmente uma engine 3D.

Defini mais algumas mecânicas gerais do meu jogo e fui pesquisar qual engine 3D usaria para fazer o meu jogo. Alguns dos requerimentos é que ela fosse simples de usar, já que estou fazendo tudo por minha conta, que fosse gratuita e que tivesse uma boa comunidade online (coisa que aprendi que ajuda e muito quando se está com problemas). Acabei escolhendo a Unity 3D que é uma engine que eu já conhecia e tinha usado antes e gosto bastante, além de me permitir publicar o jogo na web, nativamente para Windows, OSX, iOS e Android.

A partir dai comecei a imaginar como o jogo realmente iria funcionar, como o jogador iria vencer, morrer, inimigos, o que ele teria de diferente de qualquer shmup em flash que povoa o Kongregate ou qualquer outro portal, etc. E bom, é basicamente nesse momento que eu estou agora, definindo como o jogo realmente será antes de começar a fazer algo de fato. Além disso tenho feito alguns “tech demos” (basicamente testes de conceitos para descobrir a complexidade de montar isso no Unity 3D) e sempre que algo se prova complicado demais ou não funciona como eu quero acabo voltando para o papel e repensando no funcionamento daquela mecânica.

E isso me leva a última dica, faça protótipos desde o começo. E quando digo protótipos não pense em abrir seja lá qual for a plataforma ou engine que está usando e programar um, isso é loucura! Use papel, caneta, dados, ou seja lá o que seu jogo irá precisar para fazer ele funcionar de forma analógica. Protótipos analógicos são rápidos, baratos e em boa parte das vezes conseguem mostrar falhas na mecânica que você está pensando em utilizar sem todo o processo de implementar ela no jogo de fato (o que vai te causar o dobro de tempo gasto se não estiver versionando seu código).

Odeio o WordPress (pelo menos essa instalação dele)

Odeio o WP. terceira vez que ele some com meu post sobre o macbook. Acho que ele é macfag. Se me empolgar (e por empolgar leia essa merda dar algum pau de novo) essa semana apareço com o post aqui de novo, cada vez mais carregado de ódio e rancor por essa máquina.

Apenas isso (porque acabei de ver que o blog não tem nenhum post e tal).