Braaains

[estive mais um bom tempo sem postar hein? >.<]
O assunto que venho abordar dessa vez é um tanto abrangente, então possivelmente irei continuar em outros posts futuros. O assunto em questão provém de idéias que tive para a criação de um jogo singleplayer que focasse grande parte da jogabilidade na interação com os NPCs. Para isso, comecei a desenvolver a idéia da criação de um “cérebro”, que estaria presente em todos os personagens do jogo, e que guardariam as mais diversas informações sobre as ações do jogador, e os rumos que o jogo estaria tomando em função destas.
O projeto inicial desse cérebro estava baseado em uma entidade que possuiria algumas categorias de conhecimentos e estados, e cada uma dessas categorias estaria responsável por uma parte do processamento das informações que seria trocadas com o ambiente, com o jogador e com os outros NPCs. Essas categorias deveriam ser auto-adaptáveis, ou seja, deveriam estar prontas a aprender novos comportamentos em caso de serem submetidas à novas experiências, e também mudar este comportamento quando as respostas deixassem de ser as desejadas. Exemplificando, imagine que uma dessas categorias do cérebro seja o controle das emoções do personagem. Essa categoria deveria estar pronta para aprender a rir, caso algo engraçado acontecesse, mas também deveria estar disposta a parar de rir, caso o contexto passasse a não aceitar mais as risadas (risadas num velório??).
As categorias base que imaginei para o desenvolvimento de um cérebro para os personagens seriam:
- Percepção do Ambiente: capacidade de entender o cenário e se adaptar, além de aprender as funções dos objetos em cena e entender possíveis mudanças no ambiente. Exemplos: descobrir pontos do cenário para se proteger de tiros/flechas, aprender que pedras podem ser pegadas e arremessadas, aprender que certas distâncias podem ou não ser alcançadas com um pulo, aprender que na hora da chuva deve-se voltar para casa.
- Resposta ao Jogador: capacidade de dar Feedback para as ações do jogador, ou adaptar comportamento devido a essas ações. Exemplos: contra-atacar o jogador, caso for inimigo, se afastar e fazer perguntas do tipo “por que está fazendo isso?”, caso for amigo, brigar com o jogador caso este quebre alguma coisa que era de posse do NPC.
- Aprendizagem e Adaptação: capacidade de mudar os comportamentos padrões do NPC. Enquanto os itens anteriores tratavam de respostas mais instantâneas e que podiam não durar para sempre, este tipo de adaptação prevê que mudanças no comportamento serão tidas como padrão até que haja uma nova mudança relevante. Como exemplos, leve em consideração que um caixeiro NPC viajante sempre toma um caminho para ir de um lugar ao outro. Em certa ocasião, esse caminho passa a ficar bloqueado (uma rocha gigante talvez). Na primeira viagem do NPC após esse acontecimento, ele deve aprender que este caminho não é mais válido, e então deve passar a sempre usar um caminho alternativo.
- Emoções e FSM: dois tipos de máquinas de estados diferentes, que devem controlar os diversos estados do NPC, como situação de combate, se está dormindo ou acordado, humor do dia e etc. O diferencial da Finite State Machine que controlaria esses estados para o controle de emoções estaria em que o controle de emoções seria uma Fuzzy State Machine que aceita diferentes emoções ao mesmo tempo, e também aceitaria diferentes respostas para as mesmas ações, como numa situação de batalha ficar muito bravo e violento, e em outra covarde (devido a um número maior de inimigos, por exemplo). Além disso, o controle de emoções deveria ter um controle de afinidades entre o NPC e certas ações ou entre os NPCs ( NPC “A” gosta de conversar com “B”, mas não com “C”, e gosta de pescar, mas somente com chuva).
Bom, tendo aí a idéia base do que seria o cérebro dos NPCs, alguém pergunta: isso é fácil de implementar?
A resposta é simples: não. Muitos conceitos de Inteligência Artificial estão englobados nesse projeto, portanto muita coisa poderia não funcionar, ou ser deixada de lado, num cenário real de desenvolvimento de jogos (talvez não no profissional, mas provavelmente aconteceria com desenvolvimento independente).
Mas de qualquer forma, é uma idéia interessante de se trabalhar, então num próximo post irei falar sobre um exemplo de sistema que já desenvolvi e que pode ser considerado como uma parte desse sistema grandioso.
Até mais, aceito feedback \o/
[PS: Caso alguém não saiba o que é um NPC, significa Non-player Character, um personagem não controlável pelo jogador, podendo ser tanto um parceiro controlado pelo computador, um inimigo, um cachorro, ou o tiozinho que vende poção na lojinha.]