domingo, 8 de julho de 2012

Bitz in Time - Gameplay de manipulação temporal

Antes de tudo, um pequeno vídeo pra introduzir o assunto:




"Bitz in Time" é uma pequena demo feita para demonstrar a implementação de estruturas de dados em um sistema de manipulação temporal. Ele foi inicialmente feito como um trabalho para a matéria de AED, mas o desafio, o aprendizado e a diversão que tive desenvolvendo o sistema foi o suficiente pra me fazer continuar,   adicionando o Bitz na minha lista de projetos pessoais. :D

Então, o que há no vídeo além da música foda?

O vídeo demonstra algumas das aplicações da manipulação temporal em jogos, além do rascunho de um level design onde a habilidade pode ser aplicada.
É uma implementação relativamente simples e como há uma tonelada de jogos com o recurso, a imersão é profunda e bem direcionada. Com isso resolvi explorar o caminho que parece ser o mais comum: combinar plataforma, puzzle e a manipulação temporal.
Para criar o sistema, a implementação teve maior foco em:
  • Retorno da posição e rotação do personagem: a base da ideia de voltar o tempo é ser capaz de desfazer suas ações como bem entender e isso, obviamente, inclui a posição e rotação do personagem. O próprio level design que rascunhei força o jogador a utilizar essa propriedade, já que ele precisa entrar em um buraco sem saída pra conseguir progredir.
  • Retorno dos contadores (vida, gold, munição, etc): "Oh meldels, apanhei de 15483548 inimigos e estou qse morrendo, oq eu faço?!!1!11!onze!". Volta no tempo, seu dano é desfeito e você joga de novo, dessa vez desviando dos 15483548  inimigos e chegando ao objetivo. É como morrer e ter que começar a fase de novo, mas você não morre e faz se quiser. Todas as variáveis são retornadas (inclusive o gold e a munição, pra manter o equilíbrio), devolvendo você a um estado anterior qualquer.
  • Instanciação dos itens coletados: como as variáveis retornam, os itens que desencadearam  a alteração dessas variáveis também devem retornar, reaparecendo na posição que estavam antes de serem coletados. Foi uma gambiarra implementação interessante de se fazer, e foi feita de maneira que se eu decidir inserir novos itens no jogo eu tenho flexibilidade total.
  • Retorno dos projeteis atirados e da "arma" selecionada: implementei como bônus um sistema de tiro em primeira pessoa (efeito colateral da imersão em TimeShift talvez?) e assim como as variáveis e os itens, os projeteis atirados e a "arma" selecionada em cada momento também retornam.



Esses são os elementos essenciais que compõem juntos a base do gameplay. Para proposito de polimento os seguintes recursos também foram implementados: 
  • Retorno da posição e rotação da câmera: Por ser possível trocar de terceira para primeira pessoa livremente, achei importante fazer com que a posição da câmera também retornasse, sem isso era possível mover a câmera durante o retorno temporal, causando um efeito realmente estranho. Em um dos jogos que usei para imersão, Rose and Time, feito em um Game Jam que resultou no Bundle Indie Buskers, o sistema de câmera apesar de apenas em terceira pessoa, permitia a movimentação durante o retorno temporal. Não ficou incomodo, mas não era em primeira pessoa.
  • Exatidão nos frames da animação para o retorno: em um primeiro momento acreditei que teria problemas com a animação e parcialmente eu estava certo. Durante o retorno temporal o personagem deveria refazer a exata movimentação que ele fez antes de retornar, porém ao contrário. Isso envolveu manipular o WrapMode, Time e Name da animação. Deu trabalho, mas o sistema ficou mais bonito e plausível.
A lógica do recurso de manipulação temporal é simples: salve todos os dados que você vai precisar em uma lista e, quando for voltar no tempo, iguale os dados atuais com os guardados. O Bitz guarda aproximadamente 20 variáveis 24 vezes por segundo (20 x 24 = 480 variáveis por segundo), o que me fez esbarrar em um possível problema de limitação.

Minha maior inspiração para criar o Bitz in Time é o Braid, jogo independente que combina plataforma, puzzle e manipulação temporal, mas ao contrário da maioria dos outros jogos de manipulação temporal Braid não te limita, você pode voltar no tempo o quanto quiser até o inicio da fase. Deixe o jogo duas horas parado e depois volte no tempo. A vontade.
O meu ideal era criar um jogo nesse molde, dando ao jogador a liberdade para explorar e experimentar com o tempo da maneira que bem entendesse. Porém a liberdade com que Braid presenteia o jogador se aproveita da simplicidade do jogo, enquanto meu sistema guarda 480 variáveis por segundo ele guarda a posição do jogador (em um espaço 2D), o sprite atual dele, a posição atual dos inimigos e elementos móveis e o sprite atual deles. Consideravelmente menos variáveis a serem guardadas e consideravelmente menos espaço a ser ocupado.

Minha solução então foi a mais lógica, repensar os modelos de level design para criar um jogo que, apesar de "limitar" o jogador, permitisse que ele explorasse e experimentasse o quanto quisesse.


A barra de tempo acima representa o quanto o jogador pode voltar no tempo, quando cheia ele pode voltar o equivalente a 10 segundos no tempo (quantidade que será ampliável durante o jogo com um sistema de loja, engrenagens por itens! :D).

Por último, mas não menos importante: contexto.

B.I.T.Z ou Bot Interdimensional Temporal Z faz parte de uma série de robôs criados sabe-se lá por quem (mistério, PAMPAMPAM) para garantir o equilíbrio das linhas temporais do multiverso. Isso significa que ele e os outros robôs patrulham os diversos momentos da história detectando e corrigindo paradoxos que destruiriam ou alterariam drasticamente a existência.
B.I.T.Z foi o último de sua série a ser criado e foi programado para ser responsável pelo setor menos significante e importante da galáxia. O setor Z. Que inclui o nosso sistema solar.
A insignificância do setor Z permitiu que Bitz levasse alguns séculos de existência pacata no laboratório dimensional Z (uma base fora do alcance do espaço e do tempo), até que eventos estranhos em seu setor espacial o forçaram a embarcar em uma aventura pela história humana. Isso significa que Bitz terá que viajar pelas diversas épocas da nossa existencia, corrigindo paradoxos e prevenindo nossa extinção.
A fase mostrada no vídeo é uma fase tutorial/tela de seleção. Nela o jogador aprenderá sobre os recursos de que dispõe e terá de aplica-los para destrancar o elevador que o leva aos portais temporais. Cada portal mostra como Bitz se parecerá na época em que será enviado (no caso o velho oeste e uma fase espacial).


É isso então, de tempos em tempos vou postar atualizações e ideias para o projeto e quando tiver algo mais significante pra mostrar posto um vídeo ou um link jogável. Qualquer dúvida, critica ou sugestão, estou a disposição. :)

Nenhum comentário:

Postar um comentário