void masters();


Questões de vida (artificial), apenas

Enviado em desenvolvimento por Felipi no Julho 26, 2008
Tags: ,

Andei nos últimos dias estudando e desenvolvendo uma inteligência artificial para o meu jogo, até agora está em uma fase bastante inicial, mas já envolve bastante conceitos e definitivamente não é fácil de implementar. Achei que seria interessante falar de alguns dos principais tópicos sobre Inteligência Artificial para games, para dar uma introdução para quem quer ter personagens ou sistemas mais naturais e reais nos seus jogos e quem quer saber como toda essa coisa funciona.

State Machines

O uso de State Machines é uma das técnicas mais utilizadas na IA para games. As Finite State Machines seguem a lógica que um dado sistema tem um determinado número de estados, do qual ele pode estar em algum deles e mudar para outro conforme certas ocasiões.
Um exemplo de Finite State Machine é termos um inimigo que não está vendo o herói. Ele está no estado Normal. Neste estado, ele pode fazer coisas como andar de um lugar para outro ou ficar parado. Se o herói entra no campo de visão do inimigo, este muda de estado para Seguindo Herói. Neste estado, o inimigo passa a executar outras ações, como seguir o herói ou atacar se estiver bastante próximo. Se o herói se afasar o bastante, o inimigo volta para o estado Normal. Caso o herói ataque o inimigo, este pode entra num estado Machucado. Neste estado, o inimigo poderia fugir do herói, recuperar a vida e retornar ao estado Normal ou Seguindo Herói, dependendo da distância atual. Caso no estado Seguindo Herói, o inimigo ataque o herói, ele pode então entrar num estado Euforia, onde o inimigo estaria de baixa guarda por alguns segundos, dando chance para o herói contra-atacar.
Uma evolução do sistema de Finite State Machines é o Fuzzy State Machines, onde o dado sistema pode não apenas estar em um estado ou em outro, mas sim estar parcialmente em certos estados. Aplicado no exemplo anterior, poderiamos ter o inimigo com uma porcentagem variável no estado Seguindo Herói, onde quanto mais próximo o herói chega, mais rápido o inimigo o segue, e conforme se afasta, o inimigo reduz sua velocidade e vai voltando ao ponto de repouso dele.

Fuzzy Logic

O conceito da Fuzzy logic é que algo que originalmente deveria ser considerado apenas como “Verdadeiro ou Falso”, “Ligado ou Desligado”, “Longe ou Perto”, possa ter valores intermediários, como “Meio verdadeiro”, “27% ligado”, “consideravelmente perto”. A idéia disso é ter pré-determinados estados, determinar as condições para que cada um seja verdadeiro, e então fazer com que o sistema, dada a situação do momento, calcule qual dos estados é o mais relevante.

Flocking

Flocking é um sistema de comportamento. A idéia do flocking é ter uma movimentação de um grupo, este constituído de seres independentes. Com isso, pode-se criar multidões de pessoas, cardumes de peixes, grupos de pássaros, entre outros. Cada indivíduo consegue se adequar ao grupo seguindo 4 regras: evitar colisão com os vizinhos, alinhar-se em relação aos vizinhos, mover-se de acordo com o posicionamento dos vizinhos e desviar de obstáculos.
Um exemplo clássico do flocking é o grupo de pássaros. Pode-se ter, inicialmente, vários pássaros voando em diferentes velocidades e direções, mas conforme se aproximam de outros pássaros, vão se agrupando aos poucos, e logo todos os pássaros estão agrupados.

Pathfinding – A*

O algoritmo A* ( pronunciado “A Star”) é um algoritmo bastante utilizado para calcular o melhor caminho entre um ponto inicial e um ponto de chegada. Para funcionar, o algoritmo necessita que o terreno esteja divido de alguma forma, o que torna o algortimo difícil de implementar, porque existem muitas formas de divisão de terrenos, e cada uma se adapta melhor a certas exigências, e para cada divisão o algoritmo vai ser mais ou menos eficiente em certos fatores.
O que esse algortimo faz é pegar a posição inicial, e para cada divisão adjacente, verificar se o personagem pode se mover até lá ou não. Fazendo isso recursivamente, o algoritmo vai encontrar certos caminhos possíveis, e então vai escolher o que for mais rápido para chegar até o destino.

Neural Nets

As redes neurais são um dos sistemas de inteligência artificial mais complexos, mas ao mesmo tempo mais interessantes. As redes neurais funcionam através de neurônios artificiais criados com base nos neurônios reais. Esses neurônios interligam-se em camadas, criando a rede. Através de valores que são passados como entrada, e determinados pesos para cada valor, é produzida uma saída. Através desse processo de informações, é possível treinar um sistema, e fazer com que ele aprenda através das suas ações e resultados.
As possibilidades do que se pode fazer com uma rede neural são infinitas: inimigos que reconheçam padrões de luta do jogador e aprendam a “contra-lutar”, NPCs que mudem sua personalidade conforme suas interações com o jogador, equipamentos que se adaptem ao jogador e às batalhas…

Com esses conceitos apresentados, acredito que algumas pessoas já tenham começado a entender como funcionam alguns sistemas inteligentes, e até talvez já saibam quais sistemas usar e não usar para determinadas ocasiões que queiram criar em seus jogos. Não vou postar nenhum link sobre os assuntos, mas pesquisando se acha bastante coisa. Até mais!

My Beloved Cliché

Enviado em design por Felipi no Julho 19, 2008
Tags: ,

Quando eu ando pelos forums por aí, a palavra que eu mais leio é cliché. Nossa, é incrível como as pessoas amam essa palavra. Mas eu, sinceramente, não gosto do jeito que as pessoas tratam essa palavra. Na verdade, eu acho que dizer que algo é cliché da forma como essas pessoas costumam dizer chega a ser algo tão vazio como não ter dito nada.

De que forma, você deve estar se perguntando. Considerando tudo o que já foi visto alguma outra vez na vida como sendo um cliché. Acho que o termo cliché deveria ser usado apenas para idéias realmente passadas, como o garoto de 15 anos que é acordado pela mamãe para salvar o mundo ou algo do tipo.
Mas então, quando que se deve pegar leve e deixar de considerar uma idéia cliché? Acredito eu que quando essa idéia tem um forte valor na questão semiótica, o fato de já estar muito usado ou não não interfere mais na qualidade.
Para os que não sabem, a semiótica é a ciência que estuda o significado das coisas que rodeiam o ser humano. Quando eu digo “forte valor na questão semiótica”, eu quero falar sobre o fato de uma idéia já estar tão batida a ponto de já ser referência, e não apenas uma idéia se repetindo.

Pra começar com um exemplo simples, vamos imaginar uma situação onde “inimigo vermelhos são de fogo e azuis são de gelo”, ou “inimigos grandes são fortes e inimigos pequenos são rápidos”. Isso pode ser considerado por muitos algo bastante chavão, mas também há o valor simbólico. Estamos acostumados a encontrar um inimigo vermelho e grande e então pegar nossas armas de gelo e um bom escudo. Se você quer que o jogador passe mais tempo em outras situações do jogo do que morrendo por perceber que o inimigo vermelho grande na verdade era um demônio elétrico super rápido imune à água, é válido levar em conta esse “cliché”.

Logicamente, contrariar essas “regras” sempre é original, mas deve-se saber quando e onde utilizar esses elementos já conhecidos para facilitar a vida do jogador e mantê-lo mais ocupado nas tarefas relamente originais e que interessam. E também vale lembrar que todo artista de vanguarda iniciou na forma tradicional, então explore todos os signos já conhecidos antes de tentar criar novos!

Semiótica na wikipedia

Questões de Vida ou Morte

Enviado em design, experimental por Felipi no Julho 12, 2008
Tags: ,

Primeiro post \o/

Há alguns dias atrás, li na gamecultura um artigo sobre a “fascinação dos game designer por números”. E percebi que, realmente, muitas vezes os jogos apresentam mais números do que o jogador quer ver. E à partir disso, fiquei com uma paranóia de criar algum tipo de medida de vida de personagens que não fosse baseada em números.

Após uma pequena discussão com alguns amigos, eu fiquei quase convencido que não há como medir a vida (ou o HP, como preferir) sem números. Basicamente todos os jogos usam números, mesmo que não estejam aparecendo para o jogador. Mario, por exemplo, pode ser considerando como se tivesse um HP máximo de 3: 1 quando ele é pequeno, 2 quando ele come um cogumelo e cresce, e 3 quando pega uma pena e cria o rabo/ a capa (ou a flor de fogo). Se ele está voando, com o HP 3, e leva dano, vai sempre perder a pena/ flor de fogo, e continuará grande (HP 2).
Porém, eu fiquei quase convencido. Ainda assim, continuei incubando essa idéia de “inumerabilidade”, e tive algumas idéias.

A primeira idéia serviria para um jogo de naves, por exemplo. A proposta seria ter indicadores booleanos, como “Escudo”, “Asas” e “Corpo”. Em cada fase a nave iniciaria com “escudo” desligado, e os outros indicadores ligados. “Escudo” seria ligado pegando algum tipo de item durante o jogo.
Caso a nave sofresse algum dano qualquer obtendo o “escudo”, este seria apenas desligado. Não obtendo o escudo, a nave iria responder diferente a certos tipos de ataque: tiros fracos e colisões poderia quebrar as asas, tiros fortes e explosões quebrariam o corpo. Não obtendo o item que sofre a certo tipo de dano, a nave seria destruída. Ou seja, mesmo com as asas intactas, se a nave sofresse um tiro forte, seria destruída.

A segunda idéia seria uma “rede de estados não hierárquica”, que poderia ser usada para jogos estilo Mario. Funcionaria simliar ao que acontece no Mario, que estando em um estado, se pode passar para outro estado com uso de algum item, mas aqui não há mais a noção de HP aumentar conforme esses upgrades.
Como exemplo, digamos que num jogo, o personagem começa desarmado, e então pega um escudo. Nesse estado, se sofresse dano, o personagem apenas perderia o escudo. Caso pegasse uma arma, continuaria com o escudo, então poderia ainda perder um ponto de dano, mas ao pegar a arma ele não aumentou esse número. Caso pegasse uma arma secundária, que usaria com a mesma mão do escudo, apesar de estar pegando mais um upgrade, estaria perdendo defesa, então caso levasse dano, iria morrer instananeamente.

Estão aí duas propostas de medidas de vida sem usar números. Mas com certeza as possibilidades são imensas. Só é necessário colocá-las em prática!

Se alguém por aí tem alguma idéia ou conhece algum sistema assim de algum jogo já existente, poste um comentário!
Até mais!