Nesse final de semana (05/12 – 08/12) foi realizada a Game Jam Ludum Dare de numero 31. Para quem não sabe Game Jam é um “concurso” onde vc se submete a desenvolver do 0 um jogo com a temática dada pelos organizadores do evento em um período curto de tempo, alguns são 48 horas e outras 72 horas, isso normalmente. No caso a Ludum Dare são 72 horas para fazer esse jogos.  /o\

A temática dada foi: Entire Game on One Screen / Jogo inteiro em uma tela.

Então eu e o Lucas Thiers participamos! 😀 E o que saiu dessa fusão?

Jelly Maze

Saiu o Jelly Maze, onde pegamos referencias de Bomberman, Tetris e Gelatinas saborosas. NHAM NHAM!

Eu fiquei encarregado da parte de programação e o Lucas na arte (Ele manda muito bem, ficou muito foda), então nesse post vou falar da programação dentro da engine Construct 2, que onde foi feito o jogo e todos os paranauês.

Como disse ai em cima o jogo foi feito usando a engine Construct 2, devido ao pouco tempo e a facilidade de uso né.

Para começar acho interessante eu ressaltar os sistemas que achei muito legal ter criado no jogo, o primeiro é o sistema de destruição dos blocos da mesma cor quando estão ou em cima ou ao lado do bloco que recebeu o tiro de destruir ou de derreter. Esse sistema foi para mim a coisa mais “complicada” dentro do jogo, pois nunca tinha nem pensado em como fazer algo desse tipo…  e então tive que improvisar. Caso vc não tenha jogado ainda, para entender como é esse sistema é aquele mesmo usado no Candy Crush ou jogos do tipo, quando três objetos do mesmo tipo estão ou na horizontal ou vertical eles são destruídos. Nesse caso é quando 1 ou mais estiver juntos, então quando estiver 2 blocos da mesma cor em qualquer lado eles recebem o efeito do tiro. OK, mas e ai como que foi feito? Resumindo a opera, eu procurei vários lugares como fazer um sistema desse, que se chama 3-matching-game, mas era tudo muito complexo para aquele pouco tempo, pois eu teria que estudar um pouco mais sobre e então resolvi improvisar. O que foi feito no jogo é algo que posso dizer que literalmente é uma reação em cadeia…  Quando crio o bloco é criado um objeto invisível maior que o próprio bloco que tem sua colisão em “cruz” detectando o bloco de cima, baixo, esquerda e direita. Quando um bloco recebe um tiro é feito então a reação em cadeia, é detectado que bloco está aos lados e então se for o mesmo tipo ele recebe o mesmo efeito do tiro e então isso vai acontecendo sucessivamente para todos os blocos até não ter nenhum do mesmo tipo em um dos lados. Esse método pode não ser o mais eficaz, mas pela questão de tempo o que vale é o improviso. E eu gosto de improvisar, pois aprendo separadamente algo novo, ai estarei criando algo e não recriando caso eu veja algum algoritmo pronto e transcreva…  Não que isso seja errado, mas eu prefiro tentar criar do que “copiar”. Aproveitando os blocos de geleia tem uma funcionalidade que foi de ultima hora que foi implementado. O Sistema de combo, foi algo que nos veio a ideia e então foi colocado HAHAHAHA Acho que deu um pitaco a mais, bem bacana isso! Para fazer o sistema eu pensei assim, com base na minha experiência sempre que vc começa um combo ele te da um timer para que vc continue aquele combo e caso termine o tempo acaba. E foi nessa base que segui. Basicamente é um sistema que conta quantos blocos vc destruiu dentro daquele tempo determinado e se for maior que X o multiplicador de pontos muda de valor chegando até 2x o valor já dado. Então, vc destruiu um bloco inicia a contagem se não destruir outro bloco dentro desse tempo o combo acaba, mas se vc destruir outro bloco essa contagem é resetada começando a contar novamente e entrando no mesmo processo. Continuando, algo que achei interessante de fazer tbm foi o posicionamento e criação dos blocos. A ideia original nossa era fazer no inicio do jogo criar 2 a 3 blocos iniciais então a partir desses ir criando mais blocos por volta deles e em momento criar outros separados para então em volta deles ir criando mais blocos, mas não deu para colocar essa ideia em pratica.  O que deu foi criar os blocos dentro do campo do jogo e onde não tinha nenhum. Aqui eu tenho mais de uma coisa para falar, então vamos começar em como eu posicionei esse blocos no campo do jogo. Basicamente eu criei uma matriz com X e Y, onde o tamanho dessa matriz é o tamanho do layout dividido pelo tamanho dos blocos. HAHAHAHAHA mor gambiarra né? Nem é! 😀 O que ajudou, é que todos os blocos tem o mesmo tamanho então vc dividindo o tamanho dele pelo tamanho do layout em X e Y eu tenho o numero de blocos que posso colocar e tbm em que posição coloca-los.  Mas como vou posicionar esse blocos? O posicionamento então era feito assim:  Quando criado o bloco ele recebe um valor randomico de x e y de 0 até o tamanho maximo da matriz para x e y e então esse numero eu multiplico por 32 + 16. O 32 é o tamanho do bloco e a soma de 16 é que o ponto de referencia de posicionamento do objeto era no meio dele, então para deixar ajeitado adiciona o valor da metade do tamanho dele. Meio simples né? Mas não acabou.

Tá, mas e ai e quando aquela posição estava ocupada o que vc fazia?  Pra isso a matriz, quando eu posicionava o bloco em tal lugar que era a mesma coordenadas dentro da matriz eu retribuiria para o valor daquelas coordenadas da matriz um valor qualquer diferente de 0, para dizer que aquela posição não estava vazia. Então quando criava o bloco eu perguntava antes – E AI MEU TEM ALGUEM AI? – se ele não respondesse eu criava lá HAHAHA Mas serio, eu perguntava usando comparação do valor dentro daquela posição na matriz se fosse diferente de zero não criava ali e mandava criar em outro lugar, mas caso fosse igual ali mesmo que ele iria ficar!!!! Bom, esse texto ficou grandão :v Para finalizar, sobre o jogo foi uma experiência muito bacana pq eu tive que improvisar bastante coisas que nunca tinha tentado e isso é muito gostoso (AI QUE DELICIA), e vale a pena tentar e sair da sua zona de conforto para desenvolver um jogo em 72 horas ou até menos, o importante é vc dar o seu máximo e conseguir trazer um resultado diferente do de ficar paradão ai! Se forçar a isso te força a entender mais rapidamente o desenvolvimento de um jogo! E isso ai champions! Até a próxima!