Cursos / Jogos Digitais / Design de Jogos Digitais / Aula
O segundo tipo de mecânica refere-se às mecânicas que definem o estado em que o jogo se encontra a partir de várias informações do mundo do jogo. Essas mecânicas estão relacionadas aos objetos do mundo do jogo e seus atributos.
Imagine um jogo tradicional de Shoot’em Up: normalmente você inicia com um tipo de tiro simples e uma proteção inicial. Talvez um ou dois especiais para aqueles momentos de tensão, quando as hordas de adversários começam a encher a tela e você não sabe mais o que fazer. Ao longo da partida, muitas coisas podem mudar: poderá utilizar itens na tela que mudam o seu tipo de tiro; disponibilizam um tiro adicional e/ou uma barreira protetora; você pode ter que usar seus especiais até acabarem ou recarregá-los ao longo da partida; e, ainda, pode aumentar seu número de tentativas/vidas quando atingir uma determinada pontuação. Ou seja, à medida que você joga, o estado dos elementos do jogo (sua nave, o estado do jogo) vão mudando de acordo com as interações realizadas e recursos consumidos/adquiridos.
A partir desse exemplo podemos começar nossa discussão. O primeiro ponto a se observar é que um jogo possui vários objetos que compõem o seu espaço, como o personagem do jogador, outros personagens, os inimigos, obstáculos espalhados pelo cenário, itens e recursos, etc. Cada elemento desse possui um conjunto de atributos, características que os definem e os tornam únicos ou parte de um grupo. Esses atributos podem ser tão simples quanto uma posição no mapa ou complexos como o relevo facial que compõe o rosto do personagem. Os atributos permitem identificar os objetos e também definem o seu estado dentro do jogo. Um estado pode ser entendido como uma situação específica relevante para o jogo que é alcançado quando uma determinada combinação de valores dos atributos é atingida. Por exemplo, quando a sua energia chega em zero, o personagem passa do estado ativo para inativo ou quando um item tem em seu atributo condição deteriorado, ele passa a ser menos efetivo.
Existe também um tipo de objeto abstrato que controla informações e, apesar de não estarem fisicamente representadas no mundo do jogo, são essenciais para o controle do que acontece e de como o jogo evolui. Podemos definir esse objeto como o estado do jogo. As informações contidas no estado do jogo podem estar relacionadas ao progresso do jogador (quantos pontos ele atingiu, quais regiões ele já explorou, em que ponto das missões ele está) e dos adversários, permitindo identificar que uma condição de vitória ou derrota foi atingida no jogo.
Normalmente existem interações que são realizadas dentro do jogo que ativam a mudança de estado de um determinado objeto. Em um jogo FPS, por exemplo, as armas costumam possuir uma quantidade limitada de munição máxima e/ou de disparos que podem ser efetuados antes da próxima recarga da arma. Inicialmente a arma possui uma quantidade X de balas. Se o jogador efetua um disparo, a quantidade de balas da arma diminui. Caso essa quantidade de balas se torne zero, a arma está descarregada e não consegue efetuar mais nenhum disparo até que ela seja recarregada. Se o jogador não possui mais munição, ele precisa encontrar recursos no jogo para poder adquirir novas balas. Ao encontrar uma munição, o número de balas que a arma contém é acrescido de um valor específico definido pelo projetista do jogo. Se a arma estiver com o número máximo de balas, pegar uma munição não fará nenhuma diferença (ou não será possível pegar o cartucho de balas). Se formos detalhar esse exemplo, podemos perceber que a arma pode se encontrar em alguns estados diferentes:
Para cada um desses estados, existem condições específicas que determinam não apenas quando a arma se encontra em algum deles, mas também quando ela muda de um estado para o outro. E basicamente tudo pode ser modelado e controlado da mesma forma! Mas isso não é muito difícil?
A gestão de tantos estados de forma simultânea é uma tarefa complexa e para isso recorreremos a ferramentas conceituais que podem ser programadas dentro do jogo para facilitar o nosso controle. Um dos conceitos que podem ser utilizados é o de máquina de estado finito ou Finite-State Machine (FSM). Essas máquinas são uma representação em função de estados e transições que permitem modelar como um objeto do mundo do jogo deve se comportar.
De forma intuitiva, podemos descrever o funcionamento de uma máquina de estados da seguinte forma: cada objeto possui um estado inicial, que é a forma como ele inicia no mundo do jogo. Para cada estado existem ações que são possíveis de se realizar, e condições que indicam quando o estado do objeto irá mudar. Cada objeto se encontra em apenas um estado a cada momento, de forma que sempre podemos definir, a partir de uma sequência de interações, qual o comportamento esperado para o objeto. O jogo analisa o estado de forma contínua, e quando as condições para que ocorra uma mudança de estado são atingidas, a máquina realiza uma transição para um novo estado.
É importante notar que existe uma sequência de transições bem definidas, e um objeto não pode passar imediatamente de um estado para outro sem que exista a transição definida na máquina. A principal vantagem da máquina de estados é que ela nos permite elaborar uma representação visual que facilita o entendimento do comportamento que um objeto do jogo deveria ter. Vamos ilustrar a máquina de estado para o caso da arma:
Como denotado na figura, a máquina de estado da arma possui apenas três estados (claro que poderíamos criar uma máquina com mais estados, mas vamos mantê-la simples para facilitar a explicação: Arma Vazia, Arma Carregada e Munição Cheia. O estado inicial para o nosso exemplo é Arma Carregada, denotado pelo círculo duplo no estado. Estamos aqui assumindo que quando o jogador adquire a arma (seja no início ou ao longo do jogo), ela já vem com alguma quantidade de munição disponível para uso. Nesse estado, o jogador pode executar uma série de ações com a arma, como disparar, recolher/comprar mais munição, recarregar a arma quando a quantidade de disparos permitidos pelo cartucho for efetuado, dentre outras possibilidades.
Esse estado pode ser alterado em função de transições ou mudanças definidas, um exemplo possível é quando a quantidade de munição chega a zero, a arma não tem mais balas e passa para o estado Arma Vazia. Nesse estado, o jogador não pode efetuar a ação de disparo, que fica desabilitada. Tudo que o jogador pode fazer é adquirir munição e recarregar a arma, para retornar ao estado Arma Carregada.
Perceba que o estado do objeto arma influencia nas ações que o jogador pode executar, e esse controle se torna acessível quando temos as transições e estados bem-definidos. Outra possibilidade é que do estado Arma Carregada o jogador adquira muita munição e alcance o número máximo de balas (muito comum quando o jogo possui múltiplas armas e o jogador deixa de usar uma delas). Nesse caso, o jogador ainda consegue efetuar as ações de disparo, mas não conseguirá adquirir mais munição. O jogador precisa, então, gastar munição para poder retornar ao estado de Arma Carregada.
Muito legal essa máquina de estados, não é? Ela não é exclusividade dos jogos, sendo bastante utilizada quando precisamos modelar o comportamento de sistemas computacionais complexos ou críticos. Sempre é válido aprender a usar uma ferramenta como essa, não acha? Confira o material de leitura complementar se desejar aprofundar seus conhecimentos e entender um pouco mais desse assunto!
Versão 5.3 - Todos os Direitos reservados