Criação de Histórias de Role-Playing Games

Transcrição

Criação de Histórias de Role-Playing Games
Criação de Histórias de
Role-Playing Games através
de Interações entre Agentes
Inteligentes
por
Thomas Caleffi Scaletscky
UNIVERSIDADE DO VALE DO RIO DOS SINOS
THOMAS CALEFFI SCALETSCKY
Criação de Histórias de Role-Playing
Games através de Interações entre
Agentes Inteligentes
Monografia apresentada como requisito
parcial para a obtenção do grau de
Tecnólogo em Jogos Digitais
Prof. Msc. João Ricardo Bittencourt
Orientador
São Leopoldo, janeiro de 2009
“Ao meu avô Euclides.”
AGRADECIMENTOS
À minha família stricto sensu - Mãe, Pai e Irmã - às minhas duas avós, que
me ajudaram em todos os momentos, à minha Tia Tânia e à meu Tio Beto, que
sempre me deram força com este trabalho, ao meu falecido avô Abram e aos outros
integrantes da minha família lato sensu.
Aos meus amigos do RPGneto, ao meu orientador João, aos meus colegas JEDis,
ao pessoal da ADPLabs e aos meus amigos mais antigos.
“Work it harder, make it better, do it faster, makes us stronger.”
— Daft Punk
SUMÁRIO
LISTA DE ABREVIATURAS E SIGLAS . . . . . . . . . . . . . . . . . . .
7
LISTA DE FIGURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
RESUMO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
ABSTRACT
1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
INTRODUÇÃO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 ROLE-PLAYING GAMES E NARRATIVAS
2.1 Role-Playing Game . . . . . . . . . . . . . .
2.1.1
Sistema de Aventuras Instantâneas . . . .
2.2 Computer Role-Playing Game . . . . . . . .
2.2.1
Multi-User Dungeon . . . . . . . . . . . .
2.3 Narrativas e Personagens . . . . . . . . . . .
.
.
.
.
.
.
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
3 ANÁLISE CRíTICA DE JOGOS DE ROLE-PLAYING
3.1 Neverwinter Nights II . . . . . . . . . . . . . . . . . . .
3.2 The Elder Scroll IV: Oblivion . . . . . . . . . . . . . . .
3.3 Diablo II . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Final Fantasy Tactics A2: Grimoire of the Rift . . . . .
.
.
.
.
.
.
14
15
16
17
18
18
GAME . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
.
.
.
.
.
22
22
23
24
24
4 INTELIGÊNCIA ARTIFICIAL .
4.1 Agentes Inteligentes . . . . . .
4.1.1
Modelo Belief-Desire-Intention
4.2 Lógica Difusa . . . . . . . . . .
4.2.1
Fuzzy Logic Framework . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
.
.
.
.
.
26
27
28
29
32
5 PROJETO C.H.R.I.A. . . .
5.1 Arquitetura do Projeto . . .
5.2 Caso de uso - Re:CHRIA . .
5.2.1
Game . . . . . . . . . . .
5.2.2
World . . . . . . . . . . .
5.2.3
Player . . . . . . . . . . .
5.2.4
BDI . . . . . . . . . . . .
5.2.5
GameMaster . . . . . . .
5.2.6
Agent . . . . . . . . . . .
5.2.7
Enemy . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
33
35
37
37
38
39
39
41
43
44
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5.2.8
Room . . . . . . . . . . . . .
5.2.9
Item . . . . . . . . . . . . .
5.2.10 Quest . . . . . . . . . . . . .
5.3 Funcionamento do Re:CHRIA .
5.3.1
Detalhes de funcionamento .
5.3.2
Detalhes do funcionamento da
5.3.3
Fator computacional . . . . .
6
. . .
. . .
. . .
. . .
. . .
BDI
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
44
44
45
45
45
48
50
CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
APÊNDICE A - BDI DE UM AGENTE . . . . . . . . . . . . . . . . . . . 57
LISTA DE ABREVIATURAS E SIGLAS
RPG
Role-Playing Game
CRPG
Computer Role-Playing Game
SAI
Sistema de Aventuras Instantâneas
MUD
Multi-User Dundgeon
GM
Game Master
NPC
Non-Playable Character
IA
Inteligência Artificial
BDI
Beliefs, Desires and Intentions
FUZZYF
Fuzzy Logic Framework
C.H.R.I.A.
Criação de Histórias de RPG através da Interação de Agentes
Re:CHRIA
Recriação de Histórias de RPG através da Interação de Agentes
LISTA DE FIGURAS
Figura 2.1: Diagrama básico de um roteiro por Field. . . . . . . . . . . . . . . . 20
Figura 4.1: Relação Agente-Ambiente de acordo com Wooldridge. . . . . . . .
Figura 4.2: Comparação entre a lógica Booleana, a lógica Multi-valor e a lógica
Fuzzy por Bittencourt. . . . . . . . . . . . . . . . . . . . . . . . .
Figura 4.3: Boolean Logic - Definição de Madrugada e Manhã. . . . . . . . .
Figura 4.4: Variável difusa (estado do dia), formada por 4 termos difusos . . .
Figura 4.5: Exemplo de um domínio difuso (estado do dia) . . . . . . . . . . .
.
.
.
.
30
30
31
32
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
36
46
46
46
47
47
48
48
49
49
50
51
51
52
5.1:
5.2:
5.3:
5.4:
5.5:
5.6:
5.7:
5.8:
5.9:
5.10:
5.11:
5.12:
5.13:
5.14:
5.15:
A arquitetura inicial do projeto C.H.R.I.A. . . . . . .
A arquitetura final do C.H.R.I.A. . . . . . . . . . . .
Início do Re:CHRIA. . . . . . . . . . . . . . . . . . .
O comando de ajuda e os comandos disponíveis. . . .
O comando de “go” e a descrição de uma nova sala .
O comando de “talk” e a descrição de uma conversa .
Algumas mensagens de início e fim de missões. . . . .
Atacando um NPC (agente). . . . . . . . . . . . . .
Atacando um inimigo. . . . . . . . . . . . . . . . . .
O inventário do jogador e a descrição de itens obtidos.
A interação com uma loja (Store). . . . . . . . . . .
Interagindo com itens, “get” e “use”. . . . . . . . . .
A sequência das ações dos agentes. . . . . . . . . . .
Oscilações da sociedade no Re:CHRIA. . . . . . . . .
Oscilações da sociedade no Re:CHRIA. . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 27
RESUMO
Esta monografia visa mostrar um problema comum aos jogos de Role-Playing
Games atuais e propor uma solução para esta questão que pouco modifique os jogos.
O desinteresse e falta de motivação dos jogadores para continuarem jogando um
título está cada vez mais presente nos games, estando eles sempre em busca de
jogos novos para suprir esta falta de interesse. Com o objetivo de comprovar este
problema foi feita uma análise crítica de alguns jogos digitais atuais que contem este
fator. Dentre todos os jogos analisados “The Elder Scroll IV: Oblivion”, que ganhou
o título de “Game of the Year”, é o que chama mais atenção: com algumas horas
de jogo (que tem em seu total de jogo mais de uma centena de horas) é perceptível
a repetição e falta de inteligência de algumas missões secundárias. Para propor
uma solução válida foram estudadas as àreas de RPG, CRPG, Narrativas, Agentes
Inteligentes, BDI e Lógica Difusa. Com este estudo, a solução encontrada foi criar
um agente inteligente que crie temas de histórias e quests diversificadas, baseandose na interação entre os agentes racionais presentes no mundo. Para esta solução
foi proposta uma arquitetura chamada “projeto C.H.R.I.A.”. Para validação, foi
desenvolvido um caso de uso denominado “Re:CHRIA”, que implementa a solução
proposta em um jogo simples no estilo textual para um jogador.
Palavras-chave: Role-playing game. inteligência artificial. agentes inteligentes.
belief-desires-intentions. lógica difusa. narrativas.
Creating Stories of Role-Playing Games by the Interactions between
Rational Agents
ABSTRACT
This monograph aims at revealing a common problem of modern RPG games
and proposing a solution to this question that infers on small changes on the games.
The disinterest and lack of motivation from the players to continue playing a game
is growing and to suppress this detachment the players have to be on a constant
quest for new releases. With the objective to prove this problem, a review of current
digital games that contains this factor was made. Among all the reviewed video
games “The Elder Scroll IV: Oblivion”, that won the title of “Game of the Year”,
is the one that calls most attention: with only a few hours of gameplay (the total
of the game surpasses a hundred hours) is noticeable the repetition and lack of
intelligence of some side-quests. To propose a valid solution the fields of RPGs,
CRPGs, Narratives, Rational Agents, BDI and Fuzzy Logics were studied. With this
study, the solution thought was to create an intelligent agent capable of generating
themes of stories and diversified quests, based on the interaction between rational
agents existing in the world. For this solution, an architecture was proposed and
the “project C.H.R.I.A.” was born. To validate it an use case, named “Re:CHRIA”,
was developed, that implements the proposed solution on a simple game based on
the MUD game-style for one player.
Keywords: role-playing game, artificial inteligence, rational agents, beliefs-desiresintentions, fuzzy logic, narratives.
11
1
INTRODUÇÃO
Os Role-Playing Games, surgidos na década de 70, são jogos de interpretação e
atuação de papéis jogados em grupos. O RPG atrai adeptos, pois é um jogo colaborativo e social, ao invés de competitivo. O grupo toma as decisões e se aventura,
raramente havendo vencedores ou perdedores, e se isso acontecer, o grupo como um
todo é afetado. Os Computer Role-Playing Games, originários dos RPGs, são o
porte do jogo real para os computadores, com algumas diferenças.
Atualmente, muitos jogos de RPG para computador são líderes de venda no
mercado e sucesso de crítica. O presente trabalho de conclusão de curso inclui
uma análise crítica (capítulo 3) para identificar um problema comum aos CRPGs e
projetar uma alternativa de solução para este problema.
Na análise, o que percebe-se é o pouco desenvolvimento das histórias ou quests
secundárias do jogo. Normalmente, essas missões não são obrigatórias, e não dão
estímulo o suficiente para o jogador resolver fazê-las, sendo a recompensa pouco
gratificante ou até entediante. Outro problema relacionado a essas missões é o
fato de que elas são pouco desafiadoras, exigindo mínima habilidade do jogador.
Esses jogos poderiam ser mais interessantes se as histórias secundárias e side-quests
criassem mais desafios para que os jogadores pensassem mais sobre a sua interação
com o jogo. Além disso, poderiam existir várias opções aleatórias dessas missões
para que o game tivesse um “fator replay” maior, fator esse que determina se o
player irá jogar novamente o jogo.
Este problema, está ligado aos jogadores de RPGs cansarem e perderem o interesse muito rapidamente em um título novo, estando sempre em busca de novos
games para suprir esta carência. Além do fato de muitos jogadores terem desistido
de RPGs, pois não tem o tempo necessário para começar um jogo sabendo que vão
12
cansar rapidamente.
É difícil delimitar um culpado por trás deste problema. O que pode ser afirmado
é que muitas vezes os desenvolvedores e publicadores só estão interessados em melhorar as histórias/missões principais do jogo e acabam deixando de lado as partes
secundárias. O detalhe é os players perdem o interesse no jogo como um todo se
as missões secundárias não forem atrativas o suficiente, pois as mesmas, quando
interessantes, estimulam o jogador a continuar jogando e aproveitando o game.
A solução inicial deste problema foi desenvolver um agente inteligente que crie
temas de histórias e quests diversificadas, baseando-se na interação entre agentes
racionais. Uma das especificações é que esses agentes deveriam ter a possibilidade
de serem integrados em diferentes motores de RPG.
Para compreender melhor a solução projetada para o problema, foi necessário
conceitualizar e estudar os temas envolvidos e trabalhos relacionados.
O primeiro passo foi o estudo dos RPGs e CPRGs (capítulo 2). Com este estudo,
surgiu a necessidade de criar um modelo básico para as quests do jogo, então o
Sistema de Aventuras Instantâneas foi incorporado às missões. Para a criação de
histórias, era necessária uma narrativa sólida, com personagens agradáveis e um
bom cenário. Estas características puderam ser obtidas com o estudo das narrativas,
personagens e roteiro, presente na seção 2.3 deste trabalho.
Para entender melhor o conceito de “Agente Inteligente” (Rational Agents), uma
conceitualização da Inteligência Artificial como um todo foi feita, tornando o estudo
dos agentes mais compreensível (capítulo 3). O termo “agente” é utilizado para
significar uma entidade que interage com o ambiente que ela vive, sendo o ativo
originador da ação. Com base nos trabalhos de Wooldridge [1], foi compreendido
que os agentes racionais computacionais são sistemas capazes de ações autônomas
e independentes, tomando as melhores decisões sobre o que deve ser feito em determinada situação.
Pela necessidade de permitir a racionalização aos agentes, foi escolhido um modelo para criar este comportamento, o BDI (Beliefs, Desires e Intentions), na seção
4.1.1 deste trabalho. Este modelo representa uma arquitetura cognitiva humana
baseada em estados mentais, e seu nome é originário a estes estados: crenças, desejos e intenções. O objetivo do BDI é decidir quais as metas que devem ser atingidas
13
e como isto será feito.
Para desenvolver o modelo BDI, foi escolhida a Lógica Difusa, Fuzzy Logic (seção
4.2), que permite lidar com aproximação e valores relativos, ao invés de precisão e valores absolutos das lógicas clássicas. Alguns valores como “forte”, “fraco”, “muito”,
“pouco”, “talvez”, “médio”, “quase”, são utilizados no dia-a-dia da racionalização
humana, assim estes valores beneficiariam os agentes inteligentes, que teriam uma
capacidade de tomar decisões mais parecida com a humana. Para implementar a
lógica difusa no projeto, foi utilizado o Fuzzy Logic Framework (FuzzyF), que é um
conjunto de classes usadas para representar domínios difusos e efetuar as inferências
sobre este domínio.
Após estes estudos e conceitualizações, foi proposta uma arquitetura no presente trabalho, que recebeu o nome de “projeto C.H.R.I.A.” (capítulo 5), originário
da idéia de “criação”. Para testar a validade da idéia, um caso de uso, denominado “Re:CHRIA”, foi desenvolvido na linguagem Java e utilizando como base os
Multi-User Dungeons. Os MUDs (seção 2.2.1) são jogos de computador para multijogadores que combinam elementos de RPGs e bate-papo. Os MUDs clássicos são
em formato textuais e a interação com os jogadores acontece pela leitura e inserção
de comandos.
14
2
ROLE-PLAYING GAMES E NARRATIVAS
Os RPGs surgiram da necessidade das pessoas interessadas em terem um jogo
onde pudessem fantasiar e interpretar personagens em um mundo e ambiente que
desejassem. Assim os RPGs foram evoluindo com o passar dos anos e foram cruciais
para o desenvolvimento da indústria de jogos da atualidade, pois muitos gêneros
diferentes destes utilizam elementos surgidos nos RPGs para compor seu gameplay.
A base de um jogo de RPG é uma narrativa sólida e consistente, com personagens
coerentes e criativos, participando de um cenário interessante e agradável. Todas
estas características acima podem ser obtidas com o estudo das narrativas, dos
personagens e dos roteiros, criando um mundo ideal, tanto para o desenvolvedor
como para o jogador.
Ao analisar as técnicas de criação de narrativas e roteiros, podemos obtemos
conhecimentos essenciais para a criação de uma boa história, como os pontos de
virada - para criar mais drama e ação, as sequências - para estrutuar uma narrativas
consistente - e um bom final - que muitas vezes é mais importante que o início de
uma história.
Os personagens bem elaborados são elementos que mais prendem o leitor à
história. O que seria de “O Senhor dos Anéis” sem Frodo Bolseiro? Ou ainda
“Star Wars” sem Darth Vader? E “Harry Potter” sem Dumdbledore? Ou mesmo
“Romeu e Julieta” sem o casal apaixonado? Um personagem é a ação da história,
agindo o personagem “carrega” o leitor junto com ele.
Neste capítulo serão analisados os RPGs e os CRPGs. Também serão estudados
a criação de personagens, as essências da narrativas e o as partes de um roteiro.
15
2.1
Role-Playing Game
RPG é a sigla de Role-Playing Game, ou seja, jogo de interpretação e atuação
de papéis. Foi criado em 1974 com o Dungeons and Dragons, ou D&D, como é
conhecido. Uma sessão de RPG é caracterizada por jogadores assumindo papéis de
personagens, aventurando-se por cenários diversos. É normalmente jogado por um
pequeno grupo de pessoas, dentre as quais, um Game Master, Dungeon Master ou
Mestre de Jogo, que é responsável por narrar a história, ditar os acontecimentos e o
andamento do jogo.
Para se jogar RPG é necessário um conjunto de dados de faces diferentes, dentre
os mais utilizados estão o dado de seis faces e o de vinte faces. Os dados de dez,
oito, quatro, doze e até mesmo cem faces são, muitas vezes utilizados durante uma
sessão.
De acordo com Pedroso [2], o tempo de uma aventura é variável, podendo durar
de horas até semanas. Se os jogadores usarem os mesmos personagens durante
muitas aventuras, as aventuras tornam-se uma “campanha” como é chamada, que é
composta por várias aventuras, podendo durar de meses a anos.
Os jogadores humanos, ou PCs como são chamados - do inglês Playable Character, em oposição aos NPCs (Non Playable Character) - recebem missões dos NPCs,
essas missões são conhecidas pela palavra em inglês, quest. Normalmente uma aventura é caracterizada por uma quest principal e algumas secundárias; a campanha
é composta por uma grande quest geral, as missões principais das aventuras e as
secundárias. Normalmente um jogador pode ter ao mesmo tempo várias missões
para fazer. Por exemplo, um grupo de três pessoas - um Guerreiro, um Mago e um
Ladrão - tem uma missão principal de destruir o senhor das trevas e salvar o continente. No momento eles estão resgatando uma princesa em um castelo distante, que
possui um mapa que pode ajudá-los a conseguir um item para destruir o vilão. Ao
mesmo tempo eles devem salvar a vila próxima do ataque constante de uma gangue
de ladrões e ajudar um fazendeiro local a se livrar dos goblins que assolam suas
terras.
Pedroso relata que para jogar normalmente são utilizados um sistema de regras
e um cenário. O mais conhecido é o sistema d20 no cenário de Dungeons & Dragons
[3], mas existem vários outros como os sistemas Daemon e GURPS e os cenários
16
de Tormenta e Arkanum. Esses sistemas estão descritos em livros ou em netbooks,
livros de internet que são distribuídos gratuitamente.
Por uma interpretação melhor, cada jogador humano escolhe um personagem
para interpretar e “viver” durante a campanha. Suas características, habilidades,
perícias e talentos são descritos na ficha do personagem. As características são
me-lhoradas conforme o personagem sobe de nível, por ter ganhado experiência
suficiente, fazendo quests ou matando monstros.
2.1.1
Sistema de Aventuras Instantâneas
Durante uma sessão de RPG, muitos obstáculos acabam por surgir como: falta
de livros específicos do jogo, o Mestre não tem mais idéias para a aventura, falta
de informações a respeito de uma regra, improvisação de características dos personagens e até falta de vontade dos jogadores. Dentre esses problemas, sem dúvida o
mais importante deles é a falta de idéias do Mestre do jogo. Os outros problemas
são significativos também, mas com criatividade dos jogadores esses obstáculos são
contornáveis.
Na tentativa de resolver o problema de falta de inspiração, muitos mestres
recorrem a livros ou revistas especializadas, contendo histórias sólidas (aventuras
prontas) que atendem às necessidades momentâneas. Pedroso [2] cita que no mercado brasileiro poucos são os lugares em que podem ser encontradas essas aventuras.
Os livros têm pouca procura devido a seu alto preço e algumas revistas especializadas que publicam essas aventuras não tem como suprir a demanda de todos os
cenários que são jogados.
Para resolver esta questão foi desenvolvido o SAI - Sistema de Aventuras Instantâneas [4], que tem como base a análise de partidas de RPGs, definindo padrões
básicos de aventuras. O SAI reúne várias opções para serem usadas em uma sessão,
desde uma simples quest até campanha completa. Assim sendo, o sistema, que é
um netbook distribuído gratuitamente na Internet, se torna um poderoso aliado do
Game Master.
17
O SAI foi utilizado neste trabalho para definir algumas noções básicas de uma
missão, criando assim um Agente Inteligente (explicado no próximo capítulo) mais
realista com o mundo dos RPGs e um Dungeon Master que consiga diferenciar
aspectos de missões, determinando qual é a mais indicada para o jogador interagir
com a sociedade.
2.2
Computer Role-Playing Game
Um CRPG é um gênero de vídeo game originalmente desenvolvido para uso
em computadores pessoais. Os primeiros CRPGs foram inspirados pelos primeiros
RPGs de mesa, como o Dungeons & Dragons, e tentavam proporcionar uma experiência de jogo similar. Muitas vezes os CRPGs são confundidos com os console
Role-Playing Games, que mesmo fazendo parte do mesmo gênero de jogos, não são
completamente iguais.
Apesar das diferentes features e estilos de jogos que existem no gênero CRPG,
existem alguns elementos comuns entre eles. Provavelmente a semelhança mais
saliente seria o personagem, com suas características que evoluem no decorrer do
jogo e acabam por tomar o lugar da habilidade do jogador na determinação do resultado do jogo. Além de ser a maior semelhança, o desenvolvimento do personagem
principal também é designado como o elemento mais importante dos CRPGs.
Os CRPGs atuais, utilizam toda a mecânica de jogo e opções dos RPGs, como
histórias que envolvem um grupo de personagens (em inglês party) que se uniram
para cumprir uma missão. Durante o jogo, os aventureiros devem enfrentar um
grande número de desafios e inimigos. Os personagens possuem uma variedade de
atributos, como pontos de vida, força, constituição, agilidade e inteligência.
A indústria de jogos evolui muito por conta dos CRPGs, pois jogos famosos e que
marcaram história como Grand Theft Auto: San Andreas e Warcraft III utilizam
muitos elementos originários do gênero em questão. No caso do primeiro, um jogo
de ação, ele utiliza uma variedade de atributos para determinar o personagem principal e existem quests para o jogador cumprir. E o segundo, um jogo de estrátegia
em tempo real, existem heróis que evoluem, completam missões e ganham novas
habilidade e equipamentos.
Uma das limitações dos CRPGs em relação aos RPGs refere-se a grande maioria
18
dos temas apresentados nestes jogos envolverem um cenário altamente fantástico.
Diferente dos RPGs tradicionais onde existem uma infindade de temas e cenários
diferentes. Alguns CRPGs tentam fugir desta limitação, mas dos poucos que tentaram esses fizeram ainda menos sucesso entre o público.
2.2.1
Multi-User Dungeon
Uma das inspirações para os CRPGs foi o MUD (Multi-User Dungeon, Domain
or Dimension), um jogo de computador multi-jogador que combina elementos de
RPGs e salas de bate-papo. Os MUDs típicos são em formato texto. A interação
com os jogadores se dá pela leitura da descrição de salas, objetos, eventos, combates,
personagens, NPCs ou monstros em um mundo virtual e a inserção de comandos
(por meio da digitação) escritos, de acordo com o jogo.
Semelhante aos CRPGs, os MUDs mais tradicionais tem como tema um mundo
de fantasia com características semelhantes aos jogos de role-playing. O objetivo de
um MUD similar aos RPGs/CRPGs: matar monstros, explorar o mundo, completar
missões, criar uma história por interpretação e evoluir o personagem. Muitos dos
MUDs possuem como cenário um tema de RPG já existente como o D&D.
Indo além do mundo dos CRPGs, e adentrando mais perto dos RPGs, os MUDs
podem ter temas diferenciados, como livros populares, filmes, animações e histórias.
Nem todos os MUDs são jogos, existem os educacionais que ensinam temas mais
abrangentes.
Na última década os MUDs perderam espaço para os jogos mais avançados graficamente, mas os herdeiros dos MUDs, os atuais MMORPGs (Massively Multiplayer
Online Role-Playing Games) ou MUDs gráficos, honram o nome do seu antecessor
em popularidade e qualidade.
2.3
Narrativas e Personagens
A palavra personagem pode ser dividida em duas partes, “persona” e “agem”.
“Persona” tem sua origem da palavra latim persona, que significa pessoa (mas também pode significar ação) e “agem” vem de agir, ou seja, personagem pode ser
resumido como uma pessoa que faz uma ação, que age.
Field [5] descreve que um dos aspectos mais importantes sobre a criação de um
19
personagem é que você deve conhecê-lo. A sua vida é separada em interior - formação
do personagem, desde o nascimento até o início do jogo - e exterior - revelação do
personagem, o começo é marcado pelo início do jogo, até seu fim.
Field ainda esclarece que o desenvolvimento de um personagem é chamado de
pesquisa criativa, e que ele interage de três formas: experimentando conflitos para
alcançar sua necessidade; interagindo com outros; e interagindo consigo mesmos.
Ele conclui que a parte mais importante de um personagem é a definição de sua
necessidade principal, e sua essência é a ação. O personagem é o que ele faz.
Vogler [6] emprega o termo Arquétipo ao descrever tipos comuns de personagens, símbolos e relações, termo que antes era usado ao designar antigos padrões
de personalidade que são uma herança compartilhada por toda raça humana.
Ele ainda delimita os arquétipos que ocorrem com mais freqüência, os mais úteis e
mais importantes: o Herói - o que está disposto a sacrificar suas próprias necessidades
em benefício dos outros, o Mentor - também conhecido como “Velho(a) Sábio(a)”,
uma figura positiva que ajuda ou treina o herói, o Guardião do Limiar - são os
guardiões dos obstáculos que o herói enfrenta, o Arauto - que é uma força que
traduz um desafio ao herói, o Camaleão - o personagem que muda de aparência
ou estado de espírito constantemente, o Sombra - representa o lado obscuro, os
aspectos não-expressos, irrealizados ou rejeitados de alguma coisa, normalmente a
face da Sombra está presente nos vilões, antagonistas ou inimigos - e o Pícaro - são
os personagens “palhaços” ou manifestações cômicas.
Vogler relaciona que os arquétipos podem ser como máscaras, usadas temporariamente pelos personagens a medida que são necessárias para o avanço da história.
Um personagem pode entrar na história fazendo o papel de um arauto, depois trocar
a máscara e funcionar como um bufão ou pícaro, um mentor ou um sombra.
Uma das partes mais importantes da narrativa é o final. Antes de fazer o início da
narrativa, o final já deve estar bem delineado. Para criar um início, basta responder
a três questões básicas: quem é o personagem principal; do que se trata a narrativa;
e qual a situação dramática.
Uma narrativa deve conter várias seqüências, que de acordo com Field, é a parte
mais importante de um roteiro. Seqüência nada mais é do que, uma série de cenas
ligadas por uma idéia única. Para criar uma cena se deve pensar a respeito de seu
20
contexto e conteúdo.
Outra parte essencial para qualquer história é o plot point, ou ponto de virada.
O ponto de virada é o incidente ou evento que engancha na ação e a reverte noutra
direção. Ele dá continuidade à história.
Os pontos de virada são os pivôs de ação dramática, eles mantêm tudo no lugar,
são metas, objetivos ou pontos de destino de cada ato. Elos forjados na cadeia da
ação dramática.
Os plot points são usados sempre quando se deseja causar drama ou aumentar
a tensão de uma narrativa. Normalmente, um ponto de virada é inesperado para o
leitor e aumenta o interesse do mesmo na narrativa. O comum é se usar dois pontos
de virada em uma narrativas (como mostrado na Figura 2.1), porém podem existir
mais dependendo da necessidade do autor.
Field explica sobre a criação básica de um roteiro em que ele deve ser divido em
três atos principais, chamados de apresentação, confrontação e resolução, respectivamente. Entre os atos I e II e os atos II e III existem pontos de virada. O diagrama
pode ser visto na Figura 2.1.
Figura 2.1: Diagrama básico de um roteiro por Field.
O diagrama básico de um roteiro pode ser muito útil nas histórias de um jogo e
missões. Exemplificando esta idéia em um jogo, em “The Elder Scroll IV: Oblivion”
existe uma quest em que se deve ajudar uma moradora da cidade a solucionar o
mistério de quem está matando os seus ratos. No que seria o “Ato I” ou Apresentação
da missão, o jogador deve andar pela cidade pra descobrir se alguém viu os ratos
da habitante ou não. No final do “Ato I”, o player entra no porão dela e encontra
um Leão-da-Montanha matando as ratazanas. Esta parte seria o primeiro ponto de
virada.
No início da confrontação o guarda da cidade fala que suspeita da vizinha maldosa
da dona dos ratos. Então por todo “Ato II” o jogador deve segui-lá pela cidade
21
para no final descobrir que ela está pondo carne crua na frente de um buraco do
porão dos ratos. Este seria o segundo plot point. No começo da resolução, alguns
guardas avisam o personagem que uma alcatéia de Leões-da-Montanha foi avistada
nas redondezas da cidade. Uma batalha ocorre entre os animais e o viajante. Esse
sai vitorioso e volta para cidade para pegar sua recompensa com a dona dos ratos.
No final a vizinha má vai presa.
22
3
ANÁLISE CRÍTICA DE JOGOS DE ROLE-PLAYING
GAME
Com base nas definições feitas nos capítulos anteriores, alguns jogos de RPG
atuais, foram estudados para o fim deste trabalho, podendo ser citados, por exemplo
“Neverwinter Nights II” (NWN2) [7], “The Elder Scroll IV: Oblivion” [8], “Diablo
II” (D2) [9] e “Final Fantasy Tactics A2: Grimoire of the Rift” (FFTA2) [10].
Analisando estes jogos percebeu-se o pouco desenvolvimento das histórias/missões
secundárias dos jogos, normalmente sendo pouco desafiadoras e exigindo mínima habilidade por parte do player. Com isto, os jogadores cansam mais rápido do game
e perdem o interesse, partindo em busca de títulos novos ou o modo multiplayer
online do jogo (caso de Diablo II).
Um ponto positivo em NWN2, Oblivion e FFTA2 parecem suprir um pouco
desta carência por um lado, pois os três jogos são extendos, tendo muitas horas
de duração. Porém o problema ainda existe. D2 leva vantagem em relação aos
outros três, pois possui um modo para multi-jogadores pela internet, diminui assim,
o declínio de interesse dos jogadores.
Ao analisar este jogos foi observado que o problema das missões repetitivas continuou, desde um jogo de oito anos atrás (D2) até um jogo de dois meses atrás
(FFTA2). Nas seções a seguir vou analisar os jogos citados e descrever o motivo de
estudo deles para este trabalho.
3.1
Neverwinter Nights II
A série Neverwinter Nights (incluindo o primeiro e suas expansões, e o segundo
jogo e as expansões), é considerada uma das séries de CRPGs com regras que se
23
aproximam mais dos RPGs de mesa. Todo o sistema do segundo jogo da série
é baseado no sistema de regras do Dungeons & Dragons versão 3.5, com apenas
algumas modificações para se adaptar ao gameplay em tempo real.
Neverwinter Nights II recebeu vários prêmios por sua história e enredo excelentes, porém, um problema no jogo é que, mesmo podendo fazer vários personagens
diferentes, as missões e histórias secundárias são sempre iguais, não importando
que classe esteja usando ou em que ordem essas missões foram feitas. Este fator
diminui a vontade do usuário jogar novamente o jogo (conhecido como replay) e
assim impede que os desenvolvedores e jogadores explorem um jogo com missões
sempre diferenciadas.
NWNII consegue contornar este problema de modo com que o jogador não
perceba este ocorrido até ter jogado por muito tempo. O jogo é extenso e conta
com uma excelente história, com castelos, dragões e grandes magos. Além deste
fato, expansões para o jogo - contendo mais história, poderes, horas de jogo e mapas
- são lançados constantemente, sempre estimulando o player a comprar e continuar
jogando.
Mesmo com as expansões, sempre que se chega à uma nova cidade ou região, um
objetivo comum é “mate todos os monstros que estão atacando a vila, pois somos
fracos e não conseguimos”. O que acaba por cansar o jogador com menos paciência
ou que está em busca de novidades.
3.2
The Elder Scroll IV: Oblivion
Oblivion, um jogo com temática de fantasia e ação orientada, é considerado um
dos jogos que mais se aproxima do ideal do RPG clássico, desempenhar papéis. Este
jogo (e seu antecessor Morrowind) possui um mundo muito grande e aberto, com
possibilidades imensas de ação. Neste jogo o enredo não comanda a aventura, ele
é apresentado no início do jogo, mas em nenhum momento o jogador é obrigado a
segui-lo. Quem faz o game é o player, pois o jogo tem muita liberdade e é extenso.
No entanto, o Oblivion tem a mesma limitação de NWN II, não importando o
personagem a ser usado e o jeito que o jogo foi desenrolado, as missões e histórias
alternativas sempre são as mesmas. Oblivion leva uma pequena vantagem neste
ponto em relação à NWN, pois o mundo é imenso, tornando difícil ao player fazer
24
todas as missões da primeira vez que jogar.
Oblivion, na sua totalidade, tem mais de 100 horas de jogo, o que faz com que
o jogador tenha interesse em conhecer o jogo em sua totalidade. Outro fator que
contribui para isto é o fato de que o mundo de Oblivion é enorme, com cenários
variados e bem feito. A liberdade do jogo contribui para superar o problema, pois
o player consegue explorar seu personagem ao máximo antes de se cansar dele.
Só que mesmo com o mundo enorme e variado e muita liberdade, a missão mais
comum é “pegue ali na minha estante o item para mim” ou “ache na minha casa
o item que eu perdi”, sendo assim o jogador que busca novidades acaba por não
explorar muitos personagens e missões do jogo, pois cansou de fazê-las anteriormente.
3.3
Diablo II
Diablo II, um action RPG, é com certeza um dos jogos mais famosos de todos
os tempos. Lançado pela gigante empresa Blizzard no ano 2000, é a seqüência do
aclamado Diablo, e rapidamente se tornou um sucesso de público. Um dos maiores
motivos do sucesso do jogo foi a mistura entre RPG e hack and slash (termo que faz
alusão à violência do jogo), e o fato que o jogo podia ser jogado online com outros
jogadores do mundo todo, através da Battle.net.
Diablo II, anterior a NWN2 e Oblivion, é bem limitado em se tratando de quests
e história, existem quatro atos principais no jogo, cada ato possui uma cidade com
alguns NPCs e em média 6 missões. Completando essas missões o jogo acaba. Então,
você pode tentar fazer as mesmas quests por uma dificuldade mais difícil. O modo
para um jogador de D2 não fez muito sucesso, o que mantém o jogo vivo e sendo
jogado até hoje é o modo multiplayer, que após completar as missões o jogador pode
interagir com outros para trocar itens e enfrentar outros players para decidir quem
possui o personagem mais forte.
3.4
Final Fantasy Tactics A2: Grimoire of the Rift
Mudando um pouco dos RPGs clássicos citados acima, Final Fantasy Tactics A2:
Grimoire of The Rift, seqüência do sucesso Final Fantasy Tactics Advance, é um
RPG mais moderno, lançado recentemente pela Square Enix. FFTA2 é um RPG de
25
tática em turnos e foi bem recebido pelos críticos e público em geral, ao melhorar
o já excelente sistema do primeiro jogo e incrementar novidades, como raças, jobs
(similar a classes) e clãs inimigos.
Final Fantasy Tactics A2 entretem o jogador por várias horas, possuindo mais de
300 missões e batalhas aleatórias contra monstros e clãs inimigos. Interessante que
muitas dessas missões formam histórias próprias e são desencadeadas à medida que o
jogador vai completando outras. Infelizmente, o problema analisado anteriormente
persiste, mesmo com mais de 300 missões, FFTA2 possui uma história e missões
iguais.
Um bônus e atrativo extra para os jogadores está no fato de que após terminado o
jogo, muitas novas missões se tornam disponíveis, assim como personagens especiais
e novos modos de jogo. Esse extra é uma tentativa de superação do problema das
missões repetitivas, pois o jogador sempre se interessa por novos personagens e novas
histórias.
26
4
INTELIGÊNCIA ARTIFICIAL
A Inteligência Artificial (IA, ou em inglês, AI) é a inteligência das máquinas,
sendo definida como o estudo e o planejamento de agentes inteligentes, no qual
o agente é aquele que percebe seu ambiente e o influência [11]. De acordo com
McCarthy [12], criador do termo Inteligência Artificial em 1955, a IA pode ser
definida como “a ciência e a engenharia para fazer máquinas inteligentes”.
A IA surgiu da necessidade humana de simular a própria inteligência em máquinas,
e no decorrer dos anos, evoluiu muito e também sofreu problemas que surpreenderam
até os mais pessimistas dos cientistas. Atualmente, o campo da IA, é uma parte
essencial do mundo tecnológico em que vivemos, ajudando a computação à resolver
os problemas mais desafiadores.
Existem muitos temas no ramo de estudos da Inteligência Artificial [12], que
asseme-lham-se na tentativa de simular a inteligência humana, seja através de comportamento, aprendizagem, racionalização, planejamento, conhecimento, comunicação, percepção ou interação.
Um jogo de RPG nada seria sem os agentes do mundo, desde uma simples criança
até um rei importante. Para entender como estes agentes funcionam e torná-los
mais reais, foi escolhido um modelo de comportamento de agentes que simula o
raciocínio prático humano, o BDI. Combinando este modelo com o estudo de Agentes
Inteligentes, os agentes de um RPG puderam ser desenvolvidos a pensar por si. E
para simular a lógica de raciocínio destes agentes, foi usado junto com o BDI, a
lógica difusa, que permite uma lógica muito mais complexa e realista que as demais.
Todos estes temas serão abordados detalhadamente neste capítulo.
27
4.1
Agentes Inteligentes
O mundo que habitamos está repleto de agentes. O termo “agente” é utilizado
para significar uma entidade que interage com o ambiente que ela vive. Agentes não
são meramente observadores ou recipientes das ações feitas por outras entidades,
agentes são os ativos originadores da ação. Essas ações são feitas para modificar
e delimitar o ambiente. Os humanos são os exemplos mais óbvios de agentes que
existem.
De acordo com Wooldridge [1], um dos objetivos da comunidade de IA é criar programas/sistemas de computadores que possam agir como agentes racionais autônomos.
Esses sistemas são chamados de agentes porque eles são capazes de ações autônomas
e independentes para suprir o objetivo de seu design, ou seja, eles são capazes de
tomar decisões sobre o que fazer em determinada situação, sem a presença de um
humano. O adjetivo racional (ou inteligente) é adicionado à palavra agente, para
simbolizar o fato de que as decisões que eles fazem sobre o que deverá ser feito, são
consideradas boas, pois otimizam o estado do agente.
Figura 4.1: Relação Agente-Ambiente de acordo com Wooldridge.
Wooldridge afirma que, o problema é que não basta um sistema de computador
pensar sobre boas ações para serem tomadas, o desejo é que ele seja hábil para
executar essas ações. Ou seja, o agente inteligente deverá estar perfeitamente integrado em um ambiente - que habita e age perante este ambiente tal qual agimos
e habitamos sobre o nosso próprio. Evidentemente, este objetivo está longe de ser
alcançado, conforme Wooldridge. Na Figura 4.1 é possível observar uma visão abstrata da relação de um agente com o ambiente. Os sensores do agente (as decisões)
28
são influenciados pelo ambiente e as ações do agente influenciam o ambiente.
Bittencourt [13] relata que entender as propriedades de um agente auxilia no
processo de classificação dos mesmos. Ele descreve as principais propriedades dos
agentes: Reatividade - o agente deve ser capaz de reagir as informações provenientes
do ambiente; Autonomia - o agente deve ser capaz de tomar suas próprias decisões independentemente; Pró-Atividade - ele deve poder agir conforme metas, não somente
sobre os impulsos do ambiente; Contínuo Temporal - o agente está continuamente
em execução; Comunicação - capacidade de trocar informações com outros agentes;
Adaptação e Aprendizado - habilidade de extrair conhecimento de experiências anteriores e adaptar-se perante o ambiente; Mobilidade - é a capacidade dos agentes
navegarem através de redes de computadores; Flexibilidade - quando as ações de
um agente não são pré-definidas ; e Caráter - esta propriedade refere-se aos agentes
que possuem personalidade e estado emocional.
As quatro primeiras propriedades (Reatividade, Autonomia, Pró-Atividade e
Contínuo Temporal) são comuns a todos os agentes. As outras propriedades podem ser encontradas em agentes ou não, dependendo da aplicação do mesmo. Por
exemplo, se o agente for um agente de comunicação em rede com outros agentes,
possuindo ações pré-definidas e sem aprendizado, ele terá as propriedades de Comunicação e Mobilidade, porém, as propriedades de Adaptação e Flexibilidade não
estarão presentes.
4.1.1
Modelo Belief-Desire-Intention
Segundo Fagundes [14], o modelo BDI representa uma arquitetura cognitiva
baseada em estados mentais, e tem sua origem no modelo de raciocínio prático humano. O nome atribuído a este modelo vem dos estados mentais: Beliefs (crenças),
Desires (desejos) e Intentions (intenções). Uma arquitetura BDI representa seus
processos internos através dos estados mentais e define um mecanismo de controle
que seleciona de maneira racional o curso das ações.
Bittencourt [13] resume que o modelo serve para decidir qual ação executar que
melhor atenda os objetivos dos agentes. Em suma envolve decidir quais as metas
que devem ser atingidas e como isto será feito.
De acordo com Wooldridge [1], o modelo BDI é interessante, pois combina três
29
componentes distintos: um componente filosófico - o modelo possui uma base filosófica na teoria Belief-Desire-Intention da praticidade da razão humana, proposto por
Bratman [15]; um componente de arquitetura de software - o modelo pode ser implementado de maneiras diferentes, pois não tem uma implementação específica em
sua teoria; e um componente lógico - este componente do modelo é uma família
de lógicas. Essas lógicas capturam o aspecto chave do BDI como um conjunto de
axiomas. As lógicas do BDI, em suas várias formas, foram provadas como sendo as
mais úteis e aceitas teorias de agentes racionais.
Wooldridge define as crenças como representantes do conhecimento do agente
sobre o mundo. Em termos computacionais, crenças são apenas uma maneira de
representar o estado do mundo, seja através de variáveis, uma base de dados relacional, ou expressões simbólicas em um cálculo de predicados. As crenças podem
ser incompletas ou incorretas.
Fagundes descreve os desejos (imprecisamente chamados de objetivos) como relacionamentos eventuais ao estado de mundos que o agente quer provocar. Desejar
não significa agir. Antes de um determinado agente decidir o que fazer, ele passa por
um processo de racionalização e confronta os seus desejos com as suas convicções.
O agente escolherá os desejos possíveis de acordo com algum critério.
As intenções são os estados do mundo que o agente quer provocar, ou seja, ao
contrário dos desejos, os agentes estão comprometidos em realizar as intenções. De
acordo com Bittencourt, as intenções são as metas escolhidas conforme a prioridade
do agente. Desta forma planos podem ser criados através da combinação destas
intenções.
4.2
Lógica Difusa
A Lógica Difusa (fuzzy logic) é uma forma de lógica que surgiu dos estudos sobre a
teoria dos conjuntos difusos (fuzzy sets theory) desenvolvidos por Lotfi Zadeh [16] em
1961. O raciocínio da lógica difusa é baseado na aproximação ao invés da precisão,
lidando com valores relativos como “forte”, “fraco”, “muito”, “pouco”, “talvez”,
“médio”, “quase”, e não os valores “verdadeiro” e “falso” das lógicas clássicas.
Wilkison [17], em 1963, publicou o primeiro trabalho sobre Fuzzy Logic, e redefiniu as lógicas multi-valores em termos dos conjuntos difusos, usando circuitos
30
Figura 4.2: Comparação entre a lógica Booleana, a lógica Multi-valor e a lógica Fuzzy
por Bittencourt.
elétricos. Em 1965, Zadeh [18] axiomatizou a lógica de Wilkison sem os sistemas
elétricos, e a partir de então a Lógica Difusa vem sendo aplicada em diversos campos,
desde teoria do controle até inteligência artificial.
De acordo com Bittencourt [13], a lógica difusa é um super conjunto da lógica
booleana tradicional como pode ser observado na Figura 4.2, que estende esta lógica
incluindo outros conceitos entre o “verdadeiro (1)” e o “falso (0)”. Representa-se
esta variação por conjuntos difusos, gerando números dentro de um intervalo de 0 a
1.
Figura 4.3: Boolean Logic - Definição de Madrugada e Manhã.
Para facilitar a compreensão desta lógica, determinaremos que a partir das 6
AM até às 12 PM é manhã (como mostra a Figura 4.3). Seguindo a lógica booleana
as 7 AM é tão manhã quanto às 12 PM, e também significa que às 5:59 AM não é
manhã ainda, sendo considerado madrugada. O fuzzy pode ajudar a definir melhor
se é dia ou não, inicialmente definindo variáveis lingüísticas e depois definindo os
conjuntos difusos associados a estas variáveis, como: manhã, tarde, noite e madru-
31
gada (Figura 4.4). Uma variável difusa não resultaria em uma única resposta, mas
em um conjunto de respostas, sendo que cada posição do conjunto é o calor para
cada termo nebuloso da variável. Por exemplo, na Figura 4.4, 1 AM seria 0.25; 0,6;
0,0; 0,0, ou seja, seria um “pouco” de noite, “bastante” madrugada e “nada” manhã
ou tarde. Mas já ao meio dia, 12 PM, seria “bastante” manhã e “bastante” tarde,
mas “nada” dos outros dois.
Figura 4.4: Variável difusa (estado do dia), formada por 4 termos difusos
Bittencourt detalha melhor a lógica difusa, explicando que os sistemas especialistas fuzzy utilizam um conjunto de regras do tipo If-Then (Se-Então), desenvolvido
por Zadeh [19], baseadas em variáveis difusas. Primeiramente as variáveis de entrada sofrem um processo de fuzzificação, ou seja, os conjuntos difusos das variáveis
lingüísticas de entrada são ativados.
Terminado esse processo efetua-se a inferência sobre o conjunto de regras difusas
obtendo os valores dos termos das variáveis de saída. Finalmente, as variáveis de
saída sofrem um processo de defuzzificação. Este processo consiste em converter os
dados difusos para valores numéricos precisos. Para isto são utilizadas várias técnicas, tais como valor máximo, média dos máximos, média local dos máximos, centro
de gravidade, ponto central da área e o centro da média [20]. Estes métodos citados anteriormente referem-se ao modelo Fuzzy denominado Mamdani [20]. Também
existe um outro método chamado Takagi-Sugeno [20] que se diferencia do primeiro
pelo processo de defuzzificação empregado.
Bittencourt ainda observa que os sistemas Fuzzy devem oferecer aos usuários as
seguintes capacidades: (i) definir as variáveis e conjuntos difusos; (ii) definir regras
If-Then e operadores lógicos (And, Or) que manipulem as variáveis difusas; (iii) re-
32
alizar inferências usando as regras; (iv) oferecer diferentes métodos de defuzzificação
das variáveis de saída.
4.2.1
Fuzzy Logic Framework
Analisando os trabalhos na área de Lógica Difusa, pode ser encontrado o FuzzyF,
Fuzzy Logic Framework [21; 22], que é um conjunto de classes usadas para representar domínios difusos e efetuar as inferências sobre este domínio. O FuzzyF é
desenvolvido em linguagem Java, sob a licença GNU GPL e oferece as funcionalidades (i), (ii), (iii) e (iv) descritas na seção acima sobre Lógica Difusa.
Este framework oferece uma implementação do modelo Mamdani, possui os principais métodos de defuzzificação (Centro de Gravidade, Ponto Central da Área e a
Média dos Máximos), utilização de operadores e definição de regras do tipo If-Then
com valores de confiança associados, além de ter um motor para ser utilizado em
tempo de execução.
O motivo pela escolha da utilização do FuzzyF, é que ele pode ser utilizado
facilmente dentro de qualquer aplicação Java, bastando definir um arquivo textual
descrevendo o domínio do problema (variáveis de entrada, intermediárias e de saída
e as regras, conforme a imagem 4.5) e ativar o motor com um vetor contendo os
valores de entrada. O FuzzyF irá retornar um outro vetor com os valores de saída.
No capítulo de apêndices existe um exemplo detalhado de arquivo de domínio
do FuzzyF.
Figura 4.5: Exemplo de um domínio difuso (estado do dia)
33
5
PROJETO C.H.R.I.A.
Com os estudos realizados nos capítulos anteriores, a conclusão da análise é que os
jogos atuais carecem no conceito replay, que envolve o jogador e as missões/histórias
secundárias, tornando-as exaustivas, maçantes e repetitivas.
Portanto, com o objetivo de criar um jogo em que as histórias alternativas e as
side-quests repetissem raramente, este trabalho desenvolve um modelo para gerar
narrativas com missões diversificadas e inteligentes. Na discussão da concepção do
projeto surgiu a idéia de uma sociedade, que interagisse e originasse acontecimentos,
tal qual o dia-a-dia do mundo real. A proposta era que os eventos fossem inteligentes
e não pré-programados, assim os agentes foram integrados ao modelo para poder
simular a realidade dos integrantes da sociedade e suas ocorrências.
Na tentativa de seguir o comportamento humano, tomar decisões e influenciar
devidamente as ações de outros, um modelo de raciocínio prático humano foi adicionado ao processo cognitivo dos agentes, agora racionais. Entretanto, percebeu-se
que as pessoas não baseiam suas decisões somente nos seus pensamentos e sim no das
outras, na sociedade. Um conjunto de leis básicas foi incorporado à sociedade para
suprir mais um requisito que os integrantes dela necessitassem: além de pensarem
por si, serem influenciados pelo mundo onde vivem e ao mesmo tempo influenciá-lo
com suas ações.
Agentes povoariam uma comunidade, agiriam e pensariam, porém ainda faltava
uma entidade que possuísse controle sob os agentes e a sociedade, com capacidade
para análises profundas e que pudesse delimitar o papel de cada agente, impondo
limites e harmonia. Baseando-se nos sistemas de RPG, o conceito do Game Master
(GM) foi adaptado, para entender a sociedade e tomar decisões de mais alto nível
envolvendo o mundo.
34
O real papel do GM seria analisar e utilizar a sociedade, modificada constantemente pelos agentes, criando histórias com os acontecimentos. Um dos desafios para
o GM, seria que ele não deveria incluir quaisquer ações dos agentes na história. O
ideal seria que ele selecionasse as ações mais relevantes e de mais impacto e assim
faria uma narrativa mais consistente e pertinente. O mesmo modelo de raciocínio
prático humano foi adicionado ao GM para fazer esta seleção, assim o Game Master
virou um agente
O próximo passo do projeto foi a criação da narrativa, propriamente dita, à
princípio o GM consultaria alguns textos pré-prontos e escolheria as partes mais
adequadas, unificando-as para formar a história atribuída àquela sociedade. Porém,
após a aplicação prática da arquitetura esta idéia foi modificada, como relatada a
seguir.
O conceito e o projeto inicial ficou assim delimitado, e baseando-se em toda a
idéia de criação, o projeto ganhou o nome de “Criação de Histórias de RPG entre a
Interação de Agentes”, ou C.H.R.I.A., abreviado. Então para o modelo C.H.R.I.A.
foi projeto uma arquitetura inicial com base neste estudo (ver a próxima seção de
Arquitetura).
Aplicando praticamente a arquitetura e continuando os estudos envolvendo o
projeto, um pouco do conceito inicial foi modificado: (i) a sociedade não possuiria
mais leis, e sim um conjunto de features (atributos), como Riqueza, Felicidade,
Condição de Vida, etc; (ii) o GM não necessitaria mais de um modelo de raciocínio,
ele teria a capacidade de analisar as features da sociedade e assim escolher que missão
fosse mais adequada para a mesma, com simples regras If-Then; (iii) a criação de
histórias diretamente pelo Game Master seria substituída pela criação de quests; (iv)
uma história agora seria gerada por um conjunto de missões; (v) o GM ganharia
mais um papel, sendo o responsável por designar estas missões para o agente que
ele julgar mais adequado; (vi) cada agente poderia possuir no máximo uma quest
por vez.
Então uma nova arquitetura foi criada, com base na anterior, contendo estas
modificações: as leis (beliefs) da sociedade foram excluídas, sendo substituídas pelas
features; o GM não possui mais uma BDI, desenvolvendo sua lógica através de regras
simples; e a criação de quests é agora atribuída ao GM, assim como sua delegação.
35
5.1
Arquitetura do Projeto
Com a criação do projeto C.H.R.I.A., uma arquitetura inicial foi proposta (Figura 5.1),
baseada nas análises primárias e nas especificações para o trabalho.
Existirá uma sociedade principal, composta de um número variável de agentes,
que poderá ser desde 1 até n agentes, e cada agente possui um modelo de raciocínio,
o BDI, feito com Lógica Fuzzy. A sociedade terá um conjunto de regras gerais
(originárias das Crenças do BDI), que será comum a todos os membros da sociedade,
como se fosse um conjunto de leis. Princípios que regem a sociedade não estão em
cada agente, mas são compartilhados pelo grupo.
Ainda existirá um Game Master, como se fosse uma espécie de narrador, que
usará e comandará a sociedade. Ele será uma espécie de “avaliador”, que analisará
as ações feitas pelos agentes para definir a importância delas para poder gerar a
narrativa principal da história. O GM terá um sistema BDI, similar a dos agentes
e consultará um banco de templates de narrativas para gerar uma nova história.
Figura 5.1: A arquitetura inicial do projeto C.H.R.I.A.
Ao desenvolver a arquitetura e aplicá-la em um caso prático, percebeu-se a necessidade de modificar o conceito inicial: as leis (beliefs) da sociedade foram excluídas,
sendo substituídas pelas features; o GM não possui mais uma BDI, desenvolvendo
sua lógica através de regras simples; e a criação de quests é agora atribuída ao GM,
assim como sua delegação. Então uma nova arquitetura foi proposta, baseada nestas
novas idéias (ver Figura 5.2).
36
A nova sociedade não possui mais regras do BDI e sim um conjunto de features
que classificam o estado atual da mesma, e os agentes utilizam estes atributos para
tomar as decisões sobre suas ações. Cada ação modifica as features da sociedade e
assim os agentes estão constantemente modificando o ambiente, ao mesmo tempo
que são influenciados por ele.
O GM, antes utilizando a sociedade, agora a analisa, tomando suas decisões
baseadas no estado do grupo. Com um simples conjunto de regras If-Then, a decisão
de que missão escolher se torna fácil para o Mestre do Jogo, assim, todo o modelo
BDI de racionalização foi cortada. Ele também ganhou um novo papel, o de criador
e delegador de quests, as atribuindo à um agente do mundo escolhido por ele.
A idéia de “história” foi modificada, na nova arquitetura a história de uma
sociedade é formada por um conjunto de missões. A história, antes um atributo
textual, se tornou um conceito, que é representado pela união das missões que o
player terá de completar, sendo a nova “história” desenvolvida no decorrer do jogo.
Figura 5.2: A arquitetura final do C.H.R.I.A.
37
5.2
Caso de uso - Re:CHRIA
Com a finalização da arquitetura do projeto C.H.R.I.A., os estudos e o desenvolvimento do caso de uso foi iniciado. O próximo passo foi implementar toda a idéia
do modelo em um mini-jogo, simulando uma parte de um jogo real e misturando
com as idéias do projeto, provando a validade do C.H.R.I.A.
Para desenvolver a implementação foi decidido que a base seria um MUD, só
que somente para um jogador. Foi implementado na linguagem Java 5, no ambiente
Eclipse. O caso de uso se chama Re:CHRIA, inspirado no conceito de recriar e
reproduzir a idéia inicial.
As especificações, pensadas no início da criação do aventure de texto foram
as seguintes: deve existir um mundo onde o jogador possa andar e interagir com
a sociedade; deve existir, não só agentes inteligentes, mas também agentes nãoracionais e inimigos; o jogador pode entrar e sair das “salas” quando quiser, as “salas”
neste caso, são como regiões da cidade que o player se encontra; devem existir itens
à disponibilidade do jogador; comandos variados que possam ser inseridos para a
interação do usuário; as quests são mais genéricas possíveis, tendo um mandatário,
um local, um tipo, uma condição final para completar e uma recompensa; o jogador
tem uma lista de missões e de itens; e os agentes tem personalidades próprias.
Nas próximas seções são explicadas detalhadamente cada uma das partes que
compõe o Re:CHRIA.
5.2.1
Game
O Game é o responsável pela lógica principal do Re:CHRIA, ele usa um parser programa que subdivide uma entrada (input) para que um outro possa atuar sobre
ela - e obtém o comando digitado pelo player. Após essa obtenção, o jogo verifica
o tipo de comando e o processa. E isto se repete infinitamente. O World e o GM
estão contidos dentro do Game. O Game foi baseado no código do Zork criado por
Michael Kölling [23], programador e professor da Universidade de Kent.
O jogo consegue processar os seguintes comandos: “go”, “talk”, “get”, “use”,
“give”, “inventory”, “fight”, “describe”, “help” e “quit”. Cada um destes de uma
maneira única.
O comando “help” imprime uma mensagem de ajuda na tela, informando ao
38
jogador os comandos disponíveis em caso de esquecimento. O comando “quit” acaba
o jogo.
A ordem “talk” permite ao jogador colocar mais um nome após o comando, por
exemplo talk João, se o “João” for uma entidade válida no jogo, um diálogo do João
com o jogador terá início. O player tem a possibilidade de falar com um Enemy
(inimigo), um Agent (agente inteligente) ou uma Store (loja).
O comando “get” dá a possibilidade do usuário de obter algum item. Como o
“talk”, o “get” deve ser usado em conjunto com uma segunda palavra, como get
medicine. O jogador pode usar este comando para Item, Enemy (obter um item de
um inimigo) ou Store (obter o item existente na loja).
A palavra “use”, seguida do nome de um Item permite ao jogador utilizar aquele
item. Assim como o comando “describe” lhe concede a descrição do item escolhido.
A ordem “give” é um pouco delicada, a palavra que segue o comando não deve
ser o nome do Item que deseja ser entregue e sim o nome do Agent a quem deseja
entregar um item. O agente perceberá automaticamente qual item ele necessita e
assim o obterá do jogador. Por exemplo, give João, entregará ao “João” o item
necessário, desde que o jogador o possua.
O comando “combat” pode ser usado para entrar em combate com um Enemy,
Agent ou Item. Já o comando “inventory” exibe na tela os itens que o jogador
possui.
E finalmente a palavra reservada “go” possibilita o usuário ir para outras Rooms
ou entrar em uma Store. Nem todas as salas estão interligadas, existe um caminho
disponível, e algumas lojas só existem em salas específicas.
O Game ainda possui uma Thread (linha de execução) separada, que executa
a BDI dos agentes e a análise do Game Master a cada 5 segundos. Ou seja, em
diferentes intervalos de tempo os agentes agem modificando a sociedade e o GM
analisa-a.
5.2.2
World
O World é a sociedade, o lugar que contém todos os Agents, Enemies, Items,
Rooms e Stores. Além do elemento vital da sociedade, as Features, que para demonstração somente três foram criadas: Peacefulness (pacificidade), Happiness (felici-
39
dade) e Life Condition (condição de vida). Na criação do mundo, os atributos da
sociedade são criados, assim como todos os objetos nela contidos.
O World ainda tem uma função especial, que é modificar os valores da sociedade
com base nas ações dos agentes. Como vai ser explicado na parte de Agent e BDI,
as features só alteram quando todos os agentes agirem.
5.2.3
Player
O Player é responsável pela interação do usuário com a sociedade e o mundo.
Ele possui uma lista de Quests e Items, conhecido como inventário.
5.2.4
BDI
A BDI, utilizando o FuzzyF [21], é responsável pela racionalização dos agentes.
Ela processa a lógica difusa com o BDI e retorna ao agente qual a ação feita por ele
e o quanto esta ação irá influenciar a sociedade.
A função de criação do BDI é carregar o domínio difuso, utilizando as classes
do FuzzyF, passando como arquivo de domínio, o nome especificado na criação do
agente que possui esta BDI.
O BDI também possui uma função para processar o arquivo de domínio que foi
carregado. Os parâmetros para as variáveis de entrada do FuzzyF são as features
da sociedade, já previamente modificadas pelo agente possuidor da BDI (como será
explicado na subseção sobre os Agents). Então o BDI é ativado recebendo como
parâmetro de saída um vetor de ações.
O arquivo do FuzzyF que contém a BDI é assim descrito: a parte superior do
arquivo contém as definições gerais, como nome do domínio, descrição, modelo de
inferênia e método das regras de agregação; após isto são descritas as variáveis de
entrada, que são os atributos da sociedade - Peacefulness, Happiness e Life Condition, com seus níveis definidos, por exemplo, “pouca” pacificidade chama-se Rage e
ocorre quando o nível de Peacefulness está entre 0 e 25, sendo 0 “máximo” Rage e 25
“mínimo”. Da mesma forma quando a felicidade é “maior que a média”, chama-se
Happy que tem seu “máximo” no nível 75, porém, os “mínimos” deste estão em 50
e 100, adotando uma função triangular. Essas variáveis são iguais para todos os
agentes, não importando a personalidade deles.
Seguindo as variáveis de entrada, as variáveis intermediárias têm início. Diferente
40
das de entrada, estas variáveis são divididas pelas ações e cada uma contém seus
níveis definidos como anteriormente, porém essas entradas são diferentes dependendo
da personalidade do agente, por exemplo um agente “Pacífico”, crê que “Matar” é
“errado” entre 0 (máximo) e 80 (mínimo), e crê que “Matar” é “certo” somente entre
80 (mínimo) e 100 (máximo), ao mesmo tempo que um agente com personalidade
agressiva é justamente o contrário.
As primeiras variáveis intermediárias são as de Beliefs, que sempre começa com
“About”, simbolizando o que o agente acha sobre este conceito. Por exemplo a
crença “About_Fight”, assim como as outras crenças, tem valores definidos como
“Wrong”, “Neutral” e “Right”. As crenças são seguidas pelos Desires, que iniciam
com a palavra “Want” (“Want_Party” ou “Want_DoDrugs”) com valores de “No”,
“Sometimes” e “Yes”. E por último as Intentions, que simbolizam uma vontade a
ser cumprida, inicia com “To” - “To_Steal” ou “To_Teach” - que tem como valores
“No”, “Doubt” e “Yes”.
As variáveis de saída do FuzzyF são as ações propriamente ditas. Além dos
nomes (Kill, Clean, Relax, ...), as “OUTPUT_VAR” ainda contém o método de
defuzzificação, que no caso é centro de gravidade (o método mais comum e utilizado
[22]), e também os valores definidos: “Weak”, “Medium” e “Strong”. Assim como
as variáveis intermediárias, os valores das definições mudam de acordo com a personalidade de cada agente. Por último, no arquivo são descritas as regras de cada
ação, utilizando regras IF-THEN, por exemplo uma das regras da ação “Kill” é se a
crença de matar (“About_Kill”) é “Right” e o nível de Peacefullness é “Agressive”
então a intenção de matar (“Want_Kill”) é “Yes”.
No Apêndice A existe um exemplo detalhado de um arquivo de domínio do
FuzzyF utilizado no projeto.
Após receber o vetor de ações com seus devidos valores, o BDI faz o tratamento
das ações. O primeiro passo do tratamento é descobrir qual a ação escolhida pelo
agente, ou seja, a que teve o maior número no valor “Strong” da variável de saída
da ação.
Para descobrir realmente qual é a ação e o quanto ela influencia na sociedade,
é utilizada uma classe “Enum” chamada BasicActions, contendo todas as ações, e
cada action contém um nome, o índice dela (na mesma ordem de saída das ações
41
da lógica difusa) e o quanto ela influencia nas três features da sociedade. Assim, o
BDI faz uma busca nesta classe, comparando o número da ação escolhida e o índice
do conjuto de ações.
Uma vez descoberto realmente qual a ação feita pelo agente, o BDI obtém os
valores que aquela ação mudaria na sociedade e passa para o World. Os valores
variam entre “-5”, “-2” e“-1” para ações negativas, “0” para ações neutras e “+1”,
“+2” e “+5” para positivas. O mundo guarda estes valores, e espera todos os agentes
agirem. Quando todos os agentes agiram, ele pega estes valores, calcula o produto
final e modifica as features de acordo com este valores.
Foi optado por somente modificar a sociedade quando todos agentes tivessem
agido. Caso contrário quando um agente fosse começar a inferir os valores já teria
mudado e assim ele teria utilizado atributos desatualizados para a racionalização,
acarretando em tomadas de decisões incorretas.
5.2.5
GameMaster
O papel do GameMaster no Re:CHRIA é essencial para a criação de quests. O
GM analisa as features da sociedade e decide qual o tipo de missão correta para o
tipo de sociedade e entrega para o agente que ele julgar correto. Toda esta heurística
é feita por meio de um sistema baseado em regras If-Then.
Para analisar a sociedade o GM obtém os valores das features existentes e compara cada um desses atributos. O GM possui um vetor chamado “society status”
que serve para definir como está a sociedade no momento da análise. Para preencher
este vetor ele compara cada um dos atributos da seguinte forma: se o atributo tiver
valor menor que “30”, aquele status é negativo (“Agressive”, “Unhappy” ou “Poor”);
se o valor estiver entre os números “30” e “70”, o status é médio (“Netrual”, “Indifferent” ou “Medium”); e é positivo quando o valor for maior que “70” (“Pacific”,
“Happy” ou “Rich”).
Preenchido o vetor (podendo conter 27 combinações diferentes) o GM verifica
qual a combinação do momento e dependendo dela, decide qual o tipo de Quest
será criada, entre “Retrieve”, “Defeat” ou “Message”. Existe uma prioridade para
estas três, o fator Peacefullness pesa mais nas decisões do que o Life Condition, que
por sua vez tem mais prioridade que o atributo Happiness. O tipo “Defeat” é esco-
42
lhido sempre quando a sociedade é “Agressive”, não importando os outros atributos.
Quando a sociedade não for agressiva, mas for “Poor”, o tipo “Retrieve” é esco-lhido
independente dos outros status. Se a sociedade não é agressiva e nem pobre, e for
“Unhappy”, o GM decide pelo tipo “Message”, e quando não é nenhum dos três,
mas for de Peacefullness “Neutral” ele decide também por “Defeat”, seguindo a
prioridade. Continuando nesta lógica, se o menor valor de atributo for “Medium”,
“Retrieve” se torna o tipo da missão e então, sendo “Indifferent” o menor, ele decide
por “Message”. Por último, quando todos os status forem iguais e positivos, existe
uma exceção na regra que obriga o GM a escolher o tipo “Message”. Esta regra
foi escolhida, pois “Message” é o tipo de missão que menos influencia na sociedade,
não utilizando um item (como o “Retrieve”) ou eliminando um inimigo (como o
“Defeat”).
Após a escolha do tipo de missão o GM define o mandatário. Para isto, ele utiliza
o tipo que foi definido anteriormente e compara com a personalidade dos agentes que será explicado detalhadamente na próxima subseção - contidos na lista de Agents
do World. Por exemplo, se o tipo de quest foi “Defeat”, o agente que possui o atributo
de personalidade “PersonalityAgressive” menor é escolhido como mandatário para
a missão. O tipo “Retrieve” está associado ao “PersonalityLifeCondition” menor e
o a quest de “Message” é associada ao mais baixo “PersonalityHappiness”. Como
definido anteriormente, um agente só poderia ter uma missão para entregar para
o player por vez, então se o mandatário já possuir uma quest, o agente que tiver
o segudo valor mais baixo de personalidade daquele atributo é escolhido e assim
sucessivamente. Se todos os agentes daquela personalidade tiverem uma missão, o
processo de criação de quest é interrompido e o GM espera uma nova mudança nas
features da sociedade para começar um novo processo.
Se o mandatário for definido com sucesso, uma FinalCondition (FC) é escolhida.
Este atributo é relativo ao elemento que o jogador precisa interagir para completar
a missão, podendo ser um agente, um inimigo ou um item. Como na escolha do
mandatário, a escolha da condição final depende do tipo de quest. Sendo “Retrieve”
o FC deve ser um item, que é sorteado da lista de itens ativos presentes no World.
O tipo “Defeat” impõe que o FC seja um inimigo, que também é sorteado de todos
os inimigos ativos do mundo e no tipo “Message” o alvo da FC é um agente, que
43
também deve estar ativo e presente no mundo.
Por último, para definir a recompensa, o GM sorteia uma da lista de recompensas
existentes no mundo (diferentes da lista de itens) e define aquela como sendo a da
quest. Após isto o GM envia estes dados para o QuestManager que cria a missão e
a entrega para o mandatário.
Como explicado na seção de arquitetura, o GM não criará mais histórias, a
história do mundo se tornou um conceito representado pelo conjunto de todas as
missões que o jogador completar e completará no decorrer do jogo, não existindo
uma história fixa, se tornando variável com o desenrolar da aventura.
5.2.6
Agent
Os Agents possuem alguns atributos variáveis, como nome e lugar onde está no
mundo. Além disso, cada agente tem uma personalidade e um arquivo de BDI.
Para processar o BDI os agentes modificam os valores da sociedade com seus atributos, criando um processo de pensamento diferente de agentes com personalidades
diferentes.
Possui o atributo “active”, que define se ainda está ativo no mundo ou não,
podendo ou não ser utilizado para quests.
Na criação de cada agente, feita no World, é necessário que os agentes possuam
três variáveis de personalidade: uma “PersonalityPeaceful”, classe Enum que contém
três tipos: UNFRIENDLY, NEUTRAL e FRIENDLY ; uma “PersonalityHappy”,
classe Enum que também possui três tipos: UNHAPPY, NORMAL e HAPPY ; e
uma “PersonalityLifeCondition”, outra classe Enum que pode ser POOR, MEDIUM
e RICH. Cada uma dessas personalidades possui um valor associado, as negativas
valem “-10”, as neutras “0” e as positivas “+10”. Assim, quando o agente vai
processar sua BDI, explicado anteriormente, ele obtém do World os atributos da
sociedade, modifica esses números com os valores da sua personalidade e passa para a
BDI. A modificação só vale para cada agente, não influenciando outros diretamente.
Por exemplo, um agente que tem a personalidade relacionada com a felicidade com
valor FRIENDLY e uma sociedade com feature de Happiness “40”, vai transformar
o valor do atributo de Happiness para “50” e então começar o processo de BDI com
o novo valor, que só vai valer para este agente.
44
O QuestAgent estende um Agent, porém ele é o agente que possui as quests para
entregar para o jogador, um NPC. O NPC, além das mesmas características dos
agentes, possuí um diálogo, uma descrição quando recebe um item e uma descrição
de combate. Estes atributos são lidos de um arquivo de texto externo.
5.2.7
Enemy
O EnemyAgent também estende um Agent, e possui um diálogo, descrição de
obter um item e descrição de combate. Possui o atributo “active”, que define se
ainda está ativo no mundo ou não, podendo ou não ser utilizado para quests.
Um inimigo quando é alvo de uma quest, essa quest pode ser completada de
dois modos, ou usando o comando “get” para obter o item do inimigo, ou usando
“combat” e lutando com o inimigo para conseguir o item. Para fazer um EnemyAgent genérico, foram definidas duas estratégias, uma GetStrategy (que pode ser
SimpleGetStrategy ou QuestGetStrategy) e uma CombatStrategy (que pode ser SimpleCombatStrategy ou QuestComabtStrategy), que definem se aquele comando faz
parte de uma missão ou não. Assim, na hora da criação do inimigo no World, é
definido a estratégia dele.
5.2.8
Room
A Room, parte do mundo, possui nome, lugar do mundo, uma descrição e as
saídas dela. Por exemplo, um mundo em forma de cruz com 5 salas, a sala norte só
tem saída para o sul que dá na sala central, e esta por sua vez tem saída para todos
os lados.
A Store, que extende uma sala, possui as mesmas características dela, e tem
também um diálogo e uma descrição do comando “get”.
5.2.9
Item
Os itens são divididos em dois: o Item e o QuestItem. O Item, possui um nome
e uma descrição e é um item básico que não pode ser utilizado e nem tem um lugar
específico no mundo. Possui o atributo “active”, que define se ainda está ativo no
mundo ou não, podendo ou não ser utilizado para quests.
Os QuestItem tem uma descrição pro comando “get”, uma para o comando
“combat” e uma para o “use”. A classe QuestItem extende um item básico.
45
5.2.10
Quest
A Quest é cada missão do jogo e tem alguns atributos: um mandatário, um tipo,
uma FinalCondition, uma recompensa e um status. A missão também tem uma
descrição e uma mensagem final. O mandatário é o NPC responsável por passar a
quest para o jogador; o tipo, baseado no SAI [4], pode ser “Retrieve”, “Defeat” ou
“Message”; a FinalCondition é com que elemento o jogador precisa interagir para
completar a missão, pode ser um agente, um inimigo ou um item; a recompensa
que é um Item; e o status, que pode ser “NOTSTARTED”, “STARTED”, “COMPLETED” ou “FINISHED”. A Quest ainda tem as funções de ativar, completar ou
acabar uma missão.
Existe ainda o QuestManager que controla a criação de novas quests e adiciona
ao jogador a nova missão criada.
5.3
Funcionamento do Re:CHRIA
O mundo do Re:CHRIA é composto de cinco salas (centro, norte, sul, leste e
oeste), e jogador pode interagir com os objetos de cada sala com comandos.
Ao inserir um dos comandos possíveis, uma mensagem é exibida com o efeito causado pela ação do usuário. E assim o jogador vai progredindo no jogo e interagindo
com os agentes e o mundo.
Na próxima seção será explicada mais detalhadamente o funcionamento do Re:CHRIA.
5.3.1
Detalhes de funcionamento
O jogador começa a aventura textual e uma mensagem de boas-vindas é exibida.
Logo abaixo uma mensagem mostra explica que ao digitar o comando help a lista
de comandos disponíveis aparece, como mostrado na figura 5.3, abaixo.
Figura 5.3: Início do Re:CHRIA.
46
Na mesma Figura 5.3, após a introdução, aparece a fala do narador a história,
explicando onde o jogador está localizado e a descrição da parte da cidade. No fim
do texto aparecem as possíveis saídas do jogador.
Ao digitar o comando “help” uma lista aparece com os comandos, como demonstrado na figura 5.4.
Figura 5.4: O comando de ajuda e os comandos disponíveis.
Para interagir com outras salas do jogo, o jogador deve inserir o comando de ir
(“go”) seguido do nome da saída que deseja, por exemplo na figura 5.5, o jogador
inseriu o comando “go south” para ir para a parte sul da cidade.
Após o comando de ir para outra sala é inserido, e se a saída for válida, a descrição
da próxima sala aparece, assim como as saídas disponíveis. (Figura 5.5).
Figura 5.5: O comando de “go” e a descrição de uma nova sala
Ao observar o texto de cima, pode se perceber que o narrador menciona uma
mulher chamada “Catherine”. Para falar com ela deve-se digitar o comando “talk”
seguido do nome dela. Após isso aparece a fala dela. Como ela é um npc ela lhe
entrega uma quest, que foi previamente feita pelo GM. Você é avisado pelo sistema
sobre este fato. (Figura 5.6)
A descrição da quest também aparece para o jogador. As frases são geradas
randomicamente de um banco de frases, tem uma descrição e no final da frase
aparece o item necessario para quest, o inimigo que se deve derrotar ou a pessoa
com quem se deve falar. A mensagem de completar a missão funciona do mesmo
jeito. Na figura abaixo 5.7, pode-se observar algumas mensagens de início e fim de
47
Figura 5.6: O comando de “talk” e a descrição de uma conversa
missões geradas de modo aleatório. O comando “give” entrega a quest para o npc
(se todos requisitos estiverem completos) e uma das mensagens abaixo aparece.
Figura 5.7: Algumas mensagens de início e fim de missões.
Um outro comando possível para interagir com os agentes é de “fight” (Figura
5.8), este comando também pode ser usado para atacar monstros no cenário, como
pode ser visto na figura 5.9. Note que neste figura o jogador também recebe um
item de uma missão por ter derrotado o inimigo.
Figura 5.8: Atacando um NPC (agente).
Para ver os itens que o jogador possui, basta inserir o comando “inventory”. Uma
lista com os itens que o jogador obteve aparece na tela. Para se obter a descrição
48
Figura 5.9: Atacando um inimigo.
de qualquer um desses itens bastante escrever “describe” e o nome do item. (Figura
5.10)
Figura 5.10: O inventário do jogador e a descrição de itens obtidos.
Existes salas especiais, que no jogo são conhecidas como “Stores”. Você pode
interagir com elas usando o comando “go”, assim como as salas, usando um comando
“talk” para falar com alguém dentro da “Store” ou ainda usar um comando “get”
para obter um item. (Figura 5.11)
Para se obter um item existente no mundo, deve usar o comando “get” e o nome
do assim, assim uma descrição de sua ação aparece seguida da confirmação do item
em seu inventário. O jogador ainda pode “fight” com o item e “use” ele, esses dois
no caso são somente descrições de acontecimentos e não tem influência no jogo. A
utilização dos comandos pode ser vista na figura 5.12.
Ao mesmo tempo que o player interage com o jogo, a inteligência artifical dos
agentes, a BDI, acontece em paralelo a cada 5 segundos, como explicado na seção a
seguir.
49
Figura 5.11: A interação com uma loja (Store).
Figura 5.12: Interagindo com itens, “get” e “use”.
5.3.2
Detalhes do funcionamento da BDI
A cada 5 segundos o sistema de BDI dos agentes é ativado, modificando as features da sociedade, então o GM analisa estas mudanças e cria uma quest dependendo
das modificações dos agentes. Na figura 5.13 é exibida um pequeno log da sequência
das ações dos agentes. Aparece as ações feitas, como ficou os valores da sociedade e
como está a sociedade atual.
Na Figura 5.14 pode ser percebida as oscilações na sociedade e também nota-se
que estas mudanças são controladas e não randômicas. Para gerar esta Figura 5.14,
os agentes tinham personalidades que se compensavam. Para criar a Figura 5.15 um
50
Figura 5.13: A sequência das ações dos agentes.
dos agentes, que tinha personalidade “Happy e Friendly” foi trocado para “Unhappy
e Unfriendly” e a sociedade teve diferentes oscilações se comparada com à anterior.
Se todos os agentes tiverem a mesma personalidade, a sociedade tende a não ser
modificada depois de um espaço tempo, ficando com atributos constantes.
Figura 5.14: Oscilações da sociedade no Re:CHRIA.
51
Figura 5.15: Oscilações da sociedade no Re:CHRIA.
5.3.3
Fator computacional
O Re:CHRIA não apresenta grande consumo de memória e nem de processamento, porém deve-se considerar o fato de que existem poucos agentes inteligentes
no mundo e que existem poucas variações de personalidade entre os agentes.
Aumenando na casa de milhares estes números, a solução começa a ficar inviável
para alguns jogos mais simples e que tem como objetivo rodar em máquinas mais
modestas. Um dos fatores que levam a isto é que cada arquivo de BDI demora
mais de uma hora para ser desenvolvido e é muito grande. O processamento desses
arquivos é feito rapidamente pelos métodos de defuzzificação, porém se existirem
milhares destes arquivos este processo não será rápido, ainda mais se isto deve
ocorrer a cada 5 segundos, como no caso do Re:CHRIA.
Uma solução seria colocar o raciocínio da BDI somente em alguns agentes-chave
e mais importante para a continuidade do jogo, podendo assim manter o número de
processamentos menor e tão constante quanto antes.
52
6
CONCLUSÃO
Com base nos estudos realizados foi permitido propor uma metodologia para
melhorar a qualidade dos CRPGs, assim como aumentar o interesse e a fidelidade
dos jogadores para com o jogo.
Analisando e testando as últimas novidades em games do gênero RPG, percebeuse uma necessidade prática de contornar um problema que ocorreu nestes jogos. O
fato de um player perder o interesse rapidamente em um game, mesmo que este jogo
tenha várias horas de duração. As missões e histórias secundárias são repetitivas e
não-inteligentes, parecendo apenas mais uma missão para contar no tempo de jogo,
e não um desafio real ao jogador. Isto gera desinteresse e falta de fidelidade com o
jogo.
Acredita-se que indústria de jogos cresceria ainda mais se a variedade das sidequests e histórias secundárias fossem levadas em conta na hora do desenvolvimento de
um game. Com este conceito sendo considerado, os desenvolvedores de jogos criariam
uma nova era de jogadores mais interessados e mais fiéis aos jogos. As exceções nos
games atuais, que mantém os jogadores fiéis e que mais “viciam”, são os MMORPGs,
jogos que não tem objetivos delimitados, possibilitando a interação do player com
outros jogadores ao redor do mundo, aumentando em muito as possibilidades e
limitações do jogo.
Provavelmente este aspecto dos jogos de RPG já tenha sido explorado por desenvolvedores e talvez seja de interesse comercial que este problema não seja solucionado. Imagine que um jogo, toda vez que um for jogado, seja diferente? Isto
geraria um game com inúmeras possibilidades, tornando-o muito atrativo.
Aplicando o projeto C.H.R.I.A. para criar o Re:CHRIA, percebeu-se que o problema analisado pode ser contornado, mesmo com um número limitado de agentes
53
no mundo, de personalidades, de BDIs, de ações a serem feitas, de features da sociedade, de itens, de inimigos e de salas. As missões criadas foram mais inteligentes,
diversificadas e “reais” que o normal, sendo fiéis ao status atual da sociedade e dos
agentes existentes.
A contribuição deste projeto está em trazer o ineditismo ao jogo, um fator “x”, no
qual o jogador não sabe o que vai acontecer nas histórias e nas missões que terá que
fazer. Esta novidade constante pode motivar o player a explorar o jogo ao máximo
para conhecer todas situação e prender a atenção dele por mais tempo, pois sempre
acontecerá algo diferente do que aconteceu anteriormente.
Por outro lado, esta mudança talvez seja muito radical e extrema, podendo causar
o efeito oposto aos jogadores, levando-os a desistir do jogo, pois não conseguem
prever o que vai acontecer. Muitos jogadores gostam de se sentir seguros com um
jogo, sabendo o que vai acontecer na sequência e como que a situação perante eles
pode ser lidada.
Com o término deste trabalho, algumas idéias foram deixadas para o futuro. A
primeira é aumentar consideravelmente o número de todos os fatores do Re:CHRIA,
otimizando ainda mais a solução do problema, pois aumentaria a variabilidade de
quests e tornaria os agentes mais diversificados.
Outra melhoria para o futuro, é o fato de que o player, após completar ou falhar
na missão influenciará de forma positiva ou negativa, dependendo do sucesso da
mesma, os atributos da sociedade. Esta idéia tornará ainda mais real a criação
de missões e racionalização dos agentes, pois se uma missão foi feita que deixou a
sociedade mais rica, então as idéias dos agentes sofrerão influencias.
Um modo gráfico também pode ser implementado, onde o usuário escolhe facilmente as personalidades dos agentes e os valores dos atributos da sociedade para
iniciar o jogo. O usuário poderia ainda escolher quantas features e quais (dentro de
uma lista de pré-determinadas) a sociedade terá e qual será o tamanho do mundo.
Por último, o futuro ideal deste projeto é testar se o projeto é de fácil implementação em um jogo já existente, ao mesmo tempo em que se observa se os resultados
obtidos com o Re:CHRIA, também são obtidos com um jogo real.
54
REFERÊNCIAS
[1] WOOLDRIDGE, M. Reasoning About Rational Agents. Cambridge, Massachusetts, Estados Unidos: The MIT Press, 2000. ISBN 0-262-23213-8.
[2] PEDROSO, F. S. Virtual Dungeon Master - Um Narrador Inteligente de Quests
para Role-Playing Games. Dissertação (Mestrado) — Trabalho de Conclusão de
Jogos Digitais - Universidade do Vale do Rio dos Sinos, dez. 2007.
[3] Wizards
of
the
Coast.
Http://www.wizards.com/DND/.
Dungeons
&
Dragons.
2008.
[4] FILHO,
V.;
COBBI,
B.
SAI
Sistema
de
Aventuras
Instantâneas.
2002.
Royal
Hunter.
Disponível
em:
http://www.rederpg.com.br/portal/modules/news/article.php?storyid=573.
[5] FIELD, S. Manual do Roteiro - Os Fundamentos do Texto Cinematográfico. Rio
de Janeiro, Brasil: Editora Objetiva, 2001. ISBN 85-7302-044-X.
[6] VOGLER, C. A Jornada do Escritor. Rio de Janeiro, Brasil: Ampersand Ed.,
1997. ISBN 85-86135-02-X.
[7] Obsidian
Entertainment.
Http://www.obsidianent.com/.
Neverwinter
Nights
[8] Bethesda Softworks. The
Http://www.bethsoft.com/.
Elder
IV:
Scroll
II.
Oblivion.
out.
mar.
2006.
2006.
[9] Blizzard Entertainment. Diablo II. jun. 2000. Http://www.blizzard.com/us/.
[10] Square Enix Holdings. Final Fantasy Tactics A2: Grimoire of the Rift. jun.
2008. Http://www.square-enix.com/na/.
[11] POOLE, D.; MACKWORTH, A.; GOEBEL, R. Computational Intelligence: A
Logical Approach. New York, Estados Unidos: Oxford University Press, 1998.
[12] MCCARTHY, J. What is Artificial Intelligence?
formal.stanford.edu/jmc/whatisai/whatisai.html.
nov. 2007. Http://www-
[13] BITTENCOURT, J. R. Ambiente para Simulação de Múltiplos Agentes
Autônomos, Cooperativos e Competitivos. Dissertação (Mestrado) — Trabalho
de Conclusão - Universidade do Vale do Rio dos Sinos, jun. 2002.
55
[14] FAGUNDES, M. Um Ambiente para Desenvolvimento de Agentes BDI. Dissertação (Mestrado) — Trabalho de Conclusão de Ciências da Computação Universidade Federal de Pelotas, set. 2004.
[15] BRATMAN, M. E. Intention, Plans and Practical Reason. Stanford, California,
Estados Unidos: CSLI Publications, 1999. ISBN 1-57586-192-5.
[16] Stanford Encyclopedia of Philosophy. Fuzzy Logic. Stanford, California, Estados
Unidos: Stanford University, 2006.
[17] WILKINSON, R. H. A Method of Generating Functions of Several Variables
Using Analog Diode Logic. Dissertação (Mestrado) — Institute of Electrical and
Electronic Engineers, 1963.
[18] ZADEH, L. A. Fuzzy Sets. Estados Unidos da América: Information and Control, 1965. 8:338-353.
[19] ZADEH, L. A. The Calculus of Fuzzy If-Then Rules. Estados Unidos da
América: AI Expert, 1992. 7:23-27.
[20] EBERHART, R.; SIMPSON, P.; DOBBINS, R. Computational Intelligence PC
Tool. Boston, Massachusetts, Estados Unidos: AP Professional, 1996. 464p.
[21] BITTENCOURT, J. R. FuzzyF - Fuzzy Logic Framework. jul. 1999. Atualizado
em Junho de 2006. Disponível em http://www.inf.unisinos.br/ jrbitt/fuzzyf.
[22] BITTENCOURT, J. R.; OSóRIO, F. S. Fuzzy logic framework: Uma solução
software livre para o desenvolvimento, ensino e pesquisa de aplicações de inteligência artificial multiplataforma. III Workshop sobre Software Livre, 2002.
[23] KöLLING, M. Zork 1 - Exercise part of the BlueJ interactive environment.
2008. Http://www.bluej.org/resources/exercises.html.
56
APÊNDICE A - BDI DE UM AGENTE
# BDI Fuzzy
# Thomas Caleffi Scaletscky
# "C.H.R.I.A."
# UNISINOS, 2008
#General definitions
DEFINITIONS
#Domain name
DOMAIN_NAME=AgentBDI
#Short description
DESCRIPTION=This domain controls the BDI of a Friendly Happy Medium agent
#Author name
AUTHOR_NAME=Thomas
#Inferency model
MAMDANI_RULE_MODEL
#Method for aggregation rules
AGGREGATION_MIN
#Finish definitions
END_DEF
#Variable definitions
#Aggressiveness
INPUT_VAR = Aggressiveness
TERM = Rage LeftTriangleFunction 0 25
TERM = Aggressive TriangularFunction 0 25 50
TERM = Neutral TriangularFunction 25 50 75
TERM = Calm TriangularFunction 50 75 100
TERM = Pacific RigthTriangleFunction 75 100
END_VAR
57
#Happiness
INPUT_VAR = Happiness
TERM = Depressed LeftTriangleFunction 0 25
TERM = Unhappy TriangularFunction 0 25 50
TERM = Indifferent TriangularFunction 25 50 75
TERM = Happy TriangularFunction 50 75 100
TERM = Radiant RigthTriangleFunction 75 100
END_VAR
#LifeCondition
INPUT_VAR = LifeCondition
TERM = Miserable LeftTriangleFunction 0 10
TERM = Poor TriangularFunction 0 10 50
TERM = Medium TriangularFunction 25 50 75
TERM = Rich TriangularFunction 50 90 100
TERM = Elite RigthTriangleFunction 90 100
END_VAR
#Beliefs
#Aggressiveness
MIDDLE_VAR = About_Kill
TERM = Wrong LeftTriangleFunction 0 80
TERM = Neutral TrapezoidalFunction 40 65 85 100
TERM = Right RigthTriangleFunction 80 100
END_VAR
MIDDLE_VAR = About_Steal
TERM = Wrong LeftTriangleFunction 0 70
TERM = Neutral TrapezoidalFunction 20 40 80 100
TERM = Right RigthTriangleFunction 70 100
END_VAR
MIDDLE_VAR = About_Fight
TERM = Wrong LeftTriangleFunction 0 60
TERM = Neutral TrapezoidalFunction 10 40 70 100
TERM = Right RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = About_Rest
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
58
MIDDLE_VAR = About_Apologize
TERM = Wrong LeftTriangleFunction 0 40
TERM = Neutral TrapezoidalFunction 0 30 60 90
TERM = Right RigthTriangleFunction 40 100
END_VAR
MIDDLE_VAR = About_Relax
TERM = Wrong LeftTriangleFunction 0 30
TERM = Neutral TrapezoidalFunction 0 20 60 80
TERM = Right RigthTriangleFunction 30 100
END_VAR
MIDDLE_VAR = About_Soothe
TERM = Wrong LeftTriangleFunction 0 20
TERM = Neutral TrapezoidalFunction 0 15 45 60
TERM = Right RigthTriangleFunction 20 100
END_VAR
#Happiness
MIDDLE_VAR = About_Depress
TERM = Wrong LeftTriangleFunction 0 80
TERM = Neutral TrapezoidalFunction 40 65 85 100
TERM = Right RigthTriangleFunction 80 100
END_VAR
MIDDLE_VAR = About_Dumped
TERM = Wrong LeftTriangleFunction 0 70
TERM = Neutral TrapezoidalFunction 20 40 80 100
TERM = Right RigthTriangleFunction 70 100
END_VAR
MIDDLE_VAR = About_Spoil
TERM = Wrong LeftTriangleFunction 0 60
TERM = Neutral TrapezoidalFunction 10 40 70 100
TERM = Right RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = About_Chat
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = About_Party
TERM = Wrong LeftTriangleFunction 0 40
TERM = Neutral TrapezoidalFunction 0 30 60 90
TERM = Right RigthTriangleFunction 40 100
59
END_VAR
MIDDLE_VAR = About_Sex
TERM = Wrong LeftTriangleFunction 0 30
TERM = Neutral TrapezoidalFunction 0 20 60 80
TERM = Right RigthTriangleFunction 30 100
END_VAR
MIDDLE_VAR = About_Rejoice
TERM = Wrong LeftTriangleFunction 0 20
TERM = Neutral TrapezoidalFunction 0 15 45 60
TERM = Right RigthTriangleFunction 20 100
END_VAR
#LifeCondition
MIDDLE_VAR = About_Pollute
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = About_Broke
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = About_DoDrugs
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = About_Clean
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = About_Teach
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = About_Donate
TERM = Wrong LeftTriangleFunction 0 55
60
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = About_Preserve
TERM = Wrong LeftTriangleFunction 0 55
TERM = Neutral TrapezoidalFunction 0 25 50 100
TERM = Right RigthTriangleFunction 45 100
END_VAR
#Desires
#Aggressiveness
MIDDLE_VAR = Want_Kill
TERM = No LeftTriangleFunction 0 80
TERM = Sometimes TrapezoidalFunction 40 65 85 100
TERM = Yes RigthTriangleFunction 80 100
END_VAR
MIDDLE_VAR = Want_Steal
TERM = No LeftTriangleFunction 0 70
TERM = Sometimes TrapezoidalFunction 20 40 80 100
TERM = Yes RigthTriangleFunction 70 100
END_VAR
MIDDLE_VAR = Want_Fight
TERM = No LeftTriangleFunction 0 60
TERM = Sometimes TrapezoidalFunction 10 40 70 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = Want_Rest
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_Apologize
TERM = No LeftTriangleFunction 0 40
TERM = Sometimes TrapezoidalFunction 0 30 60 90
TERM = Yes RigthTriangleFunction 40 100
END_VAR
MIDDLE_VAR = Want_Relax
TERM = No LeftTriangleFunction 0 30
TERM = Sometimes TrapezoidalFunction 0 20 60 80
TERM = Yes RigthTriangleFunction 30 100
61
END_VAR
MIDDLE_VAR = Want_Soothe
TERM = No LeftTriangleFunction 0 20
TERM = Sometimes TrapezoidalFunction 0 15 45 60
TERM = Yes RigthTriangleFunction 20 100
END_VAR
#Happiness
MIDDLE_VAR = Want_Depress
TERM = No LeftTriangleFunction 0 80
TERM = Sometimes TrapezoidalFunction 40 65 85 100
TERM = Yes RigthTriangleFunction 80 100
END_VAR
MIDDLE_VAR = Want_Dumped
TERM = No LeftTriangleFunction 0 70
TERM = Sometimes TrapezoidalFunction 20 40 80 100
TERM = Yes RigthTriangleFunction 70 100
END_VAR
MIDDLE_VAR = Want_Spoil
TERM = No LeftTriangleFunction 0 60
TERM = Sometimes TrapezoidalFunction 10 40 70 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = Want_Chat
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_Party
TERM = No LeftTriangleFunction 0 40
TERM = Sometimes TrapezoidalFunction 0 30 60 90
TERM = Yes RigthTriangleFunction 40 100
END_VAR
MIDDLE_VAR = Want_Sex
TERM = No LeftTriangleFunction 0 30
TERM = Sometimes TrapezoidalFunction 0 20 60 80
TERM = Yes RigthTriangleFunction 30 100
END_VAR
MIDDLE_VAR = Want_Rejoice
TERM = No LeftTriangleFunction 0 20
62
TERM = Sometimes TrapezoidalFunction 0 15 45 60
TERM = Yes RigthTriangleFunction 20 100
END_VAR
#LifeCondition
MIDDLE_VAR = Want_Pollute
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_Broke
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_DoDrugs
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_Clean
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_Teach
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_Donate
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = Want_Preserve
TERM = No LeftTriangleFunction 0 55
TERM = Sometimes TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
63
#Intentions
#Aggressiveness
MIDDLE_VAR = To_Kill
TERM = No LeftTriangleFunction 0 60
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = To_Steal
TERM = No LeftTriangleFunction 0 60
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = To_Fight
TERM = No LeftTriangleFunction 0 60
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = To_Rest
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_Apologize
TERM = No LeftTriangleFunction 0 40
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 40 100
END_VAR
MIDDLE_VAR = To_Relax
TERM = No LeftTriangleFunction 0 40
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 40 100
END_VAR
MIDDLE_VAR = To_Soothe
TERM = No LeftTriangleFunction 0 40
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 40 100
END_VAR
64
#Happiness
MIDDLE_VAR = To_Depress
TERM = No LeftTriangleFunction 0 60
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = To_Dumped
TERM = No LeftTriangleFunction 0 60
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = To_Spoil
TERM = No LeftTriangleFunction 0 60
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 60 100
END_VAR
MIDDLE_VAR = To_Chat
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_Party
TERM = No LeftTriangleFunction 0 40
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 40 100
END_VAR
MIDDLE_VAR = To_Sex
TERM = No LeftTriangleFunction 0 40
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 40 100
END_VAR
MIDDLE_VAR = To_Rejoice
TERM = No LeftTriangleFunction 0 40
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 40 100
END_VAR
#LifeCondition
MIDDLE_VAR = To_Pollute
TERM = No LeftTriangleFunction 0 55
65
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_Broke
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_DoDrugs
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_Clean
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_Teach
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_Donate
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
MIDDLE_VAR = To_Preserve
TERM = No LeftTriangleFunction 0 55
TERM = Doubt TrapezoidalFunction 0 25 50 100
TERM = Yes RigthTriangleFunction 45 100
END_VAR
#Actions (21)
#Aggressiveness
OUTPUT_VAR = Kill
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 60
TERM = Medium TriangularFunction 0 50 100
66
TERM = Strong RigthTriangleFunction 60 100
END_VAR
OUTPUT_VAR = Steal
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 60
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 60 100
END_VAR
OUTPUT_VAR = Fight
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 60
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 60 100
END_VAR
OUTPUT_VAR = Rest
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = Apologize
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 40
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 40 100
END_VAR
OUTPUT_VAR = Relax
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 40
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 40 100
END_VAR
OUTPUT_VAR = Soothe
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 40
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 40 100
END_VAR
#Happiness
OUTPUT_VAR = Depress
67
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 60
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 60 100
END_VAR
OUTPUT_VAR = Dumped
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 60
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 60 100
END_VAR
OUTPUT_VAR = Spoil
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 60
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 60 100
END_VAR
OUTPUT_VAR = Chat
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = Party
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 40
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 40 100
END_VAR
OUTPUT_VAR = Sex
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 40
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 40 100
END_VAR
OUTPUT_VAR = Rejoice
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 40
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 40 100
END_VAR
68
#LifeCondition
OUTPUT_VAR = Pollute
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = Broke
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = DoDrugs
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = Clean
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = Teach
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = Donate
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
TERM = Strong RigthTriangleFunction 45 100
END_VAR
OUTPUT_VAR = Preserve
DEFUZZ = CenterOfGravity
TERM = Weak LeftTriangleFunction 0 55
TERM = Medium TriangularFunction 0 50 100
69
TERM = Strong RigthTriangleFunction 45 100
END_VAR
#Rules defintions
#Agressiveness RULES
#KILL rules
BLOCK_RULES
RL = IF Aggressiveness IS Rage THEN About_Kill IS Right
RL = IF Aggressiveness IS Aggressive THEN About_Kill IS Right
RL = IF Aggressiveness IS Aggressive THEN About_Kill IS Neutral
RL = IF Aggressiveness IS Neutral THEN About_Kill IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Kill IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Kill IS Wrong
RL = IF Aggressiveness IS Pacific THEN About_Kill IS Wrong
RL = IF About_Kill IS Right AND Aggressiveness IS Rage THEN Want_Kill IS
Yes
RL = IF About_Kill IS Right AND Aggressiveness IS Aggressive THEN Want_Kill
IS Yes
RL = IF About_Kill IS Right AND Aggressiveness IS Aggressive THEN Want_Kill
IS Sometimes
RL = IF About_Kill IS Right AND Aggressiveness IS Neutral THEN Want_Kill
IS Sometimes
RL = IF About_Kill IS Neutral AND Aggressiveness IS Aggressive THEN Want_Kill
IS Yes
RL = IF About_Kill IS Neutral AND Aggressiveness IS Aggressive THEN Want_Kill
IS Sometimes
RL = IF About_Kill IS Neutral AND Aggressiveness IS Neutral THEN Want_Kill
IS Sometimes
RL = IF About_Kill IS Neutral AND Aggressiveness IS Calm THEN Want_Kill
IS Sometimes
RL = IF About_Kill IS Neutral AND Aggressiveness IS Calm THEN Want_Kill
IS No
RL = IF About_Kill IS Wrong AND Aggressiveness IS Neutral THEN Want_Kill
IS Sometimes
RL = IF About_Kill IS Wrong AND Aggressiveness IS Calm THEN Want_Kill IS
No
RL = IF About_Kill IS Wrong AND Aggressiveness IS Calm THEN Want_Kill IS
Sometimes
RL = IF About_Kill IS Wrong AND Aggressiveness IS Pacific THEN Want_Kill
IS No
RL = IF Want_Kill IS Yes THEN To_Kill IS Yes CV = 0.5
RL = IF Want_Kill IS Yes THEN To_Kill IS Doubt
RL = IF Want_Kill IS Sometimes THEN To_Kill IS Yes CV = 0.5
RL = IF Want_Kill IS Sometimes THEN To_Kill IS Doubt
RL = IF Want_Kill IS Sometimes THEN To_Kill IS No
RL = IF Want_Kill IS No THEN To_Kill IS Doubt
70
RL
RL
RL
RL
RL
RL
RL
=
=
=
=
=
=
=
IF
IF
IF
IF
IF
IF
IF
Want_Kill IS No THEN To_Kill IS No
Aggressiveness IS Rage THEN Kill IS Weak
To_Kill IS Yes THEN Kill IS Strong CV = 0.5
To_Kill IS Yes THEN Kill IS Medium
To_Kill IS Doubt THEN Kill IS Medium
To_Kill IS No THEN Kill IS Weak
Aggressiveness IS Pacific THEN Kill IS Strong
#STEAL rules
BLOCK_RULES
RL = IF Aggressiveness IS Rage THEN About_Steal IS Right
RL = IF Aggressiveness IS Aggressive THEN About_Steal IS Right
RL = IF Aggressiveness IS Aggressive THEN About_Steal IS Neutral
RL = IF Aggressiveness IS Neutral THEN About_Steal IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Steal IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Steal IS Wrong
RL = IF Aggressiveness IS Pacific THEN About_Steal IS Wrong
RL = IF About_Steal IS Right AND Aggressiveness IS Rage THEN Want_Steal
IS Yes
RL = IF About_Steal IS Right AND Aggressiveness IS Aggressive THEN Want_Steal
IS Yes
RL = IF About_Steal IS Right AND Aggressiveness IS Aggressive THEN Want_Steal
IS Sometimes
RL = IF About_Steal IS Right AND Aggressiveness IS Neutral THEN Want_Steal
IS Sometimes
RL = IF About_Steal IS Neutral AND Aggressiveness IS Aggressive THEN Want_Steal
IS Yes
RL = IF About_Steal IS Neutral AND Aggressiveness IS Aggressive THEN Want_Steal
IS Sometimes
RL = IF About_Steal IS Neutral AND Aggressiveness IS Neutral THEN Want_Steal
IS Sometimes
RL = IF About_Steal IS Neutral AND Aggressiveness IS Calm THEN Want_Steal
IS Sometimes
RL = IF About_Steal IS Neutral AND Aggressiveness IS Calm THEN Want_Steal
IS No
RL = IF About_Steal IS Wrong AND Aggressiveness IS Neutral THEN Want_Steal
IS Sometimes
RL = IF About_Steal IS Wrong AND Aggressiveness IS Calm THEN Want_Steal
IS No
RL = IF About_Steal IS Wrong AND Aggressiveness IS Calm THEN Want_Steal
IS Sometimes
RL = IF About_Steal IS Wrong AND Aggressiveness IS Pacific THEN Want_Steal
IS No
RL = IF Want_Steal IS Yes THEN To_Steal IS Yes CV = 0.6
RL = IF Want_Steal IS Yes THEN To_Steal IS Doubt
RL = IF Want_Steal IS Sometimes THEN To_Steal IS Yes CV = 0.6
RL = IF Want_Steal IS Sometimes THEN To_Steal IS Doubt
RL = IF Want_Steal IS Sometimes THEN To_Steal IS No
71
RL
RL
RL
RL
RL
RL
RL
RL
=
=
=
=
=
=
=
=
IF
IF
IF
IF
IF
IF
IF
IF
Want_Steal IS No THEN To_Steal IS Doubt
Want_Steal IS No THEN To_Steal IS No
Aggressiveness IS Rage THEN Steal IS Weak
To_Steal IS Yes THEN Steal IS Strong CV = 0.6
To_Steal IS Yes THEN Steal IS Medium
To_Steal IS Doubt THEN Steal IS Medium
To_Steal IS No THEN Steal IS Weak
Aggressiveness IS Pacific THEN Steal IS Strong
#Fight rules
BLOCK_RULES
RL = IF Aggressiveness IS Rage THEN About_Fight IS Right
RL = IF Aggressiveness IS Aggressive THEN About_Fight IS Right
RL = IF Aggressiveness IS Neutral THEN About_Fight IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Fight IS Wrong
RL = IF Aggressiveness IS Pacific THEN About_Fight IS Wrong
RL = IF About_Fight IS Right AND Aggressiveness IS Rage THEN Want_Fight
IS Yes
RL = IF About_Fight IS Right AND Aggressiveness IS Aggressive THEN Want_Fight
IS Yes
RL = IF About_Fight IS Right AND Aggressiveness IS Neutral THEN Want_Fight
IS Sometimes
RL = IF About_Fight IS Neutral AND Aggressiveness IS Aggressive THEN Want_Fight
IS Yes
RL = IF About_Fight IS Neutral AND Aggressiveness IS Neutral THEN Want_Fight
IS Sometimes
RL = IF About_Fight IS Neutral AND Aggressiveness IS Calm THEN Want_Fight
IS No
RL = IF About_Fight IS Wrong AND Aggressiveness IS Neutral THEN Want_Fight
IS Sometimes
RL = IF About_Fight IS Wrong AND Aggressiveness IS Calm THEN Want_Fight
IS No
RL = IF About_Fight IS Wrong AND Aggressiveness IS Pacific THEN Want_Fight
IS No
RL = IF Want_Fight IS Yes THEN To_Fight IS Yes CV = 0.8
RL = IF Want_Fight IS Yes THEN To_Fight IS Doubt
RL = IF Want_Fight IS Sometimes THEN To_Fight IS Yes CV = 0.8
RL = IF Want_Fight IS Sometimes THEN To_Fight IS Doubt
RL = IF Want_Fight IS Sometimes THEN To_Fight IS No
RL = IF Want_Fight IS No THEN To_Fight IS No
RL = IF Aggressiveness IS Rage THEN Fight IS Weak
RL = IF To_Fight IS Yes THEN Fight IS Strong CV = 0.8
RL = IF To_Fight IS Yes THEN Fight IS Medium
RL = IF To_Fight IS Doubt THEN Fight IS Medium
RL = IF To_Fight IS No THEN Fight IS Weak
RL = IF Aggressiveness IS Pacific THEN Fight IS Strong
72
#Rest rules
BLOCK_RULES
RL = IF Aggressiveness IS Rage THEN About_Rest IS Wrong
RL = IF Aggressiveness IS Aggressive THEN About_Rest IS Right
RL = IF Aggressiveness IS Neutral THEN About_Rest IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Rest IS Right
RL = IF Aggressiveness IS Pacific THEN About_Rest IS Wrong
RL = IF About_Rest IS Wrong AND Aggressiveness IS Rage THEN Want_Rest
IS No
RL = IF About_Rest IS Right AND Aggressiveness IS Aggressive THEN Want_Rest
IS Yes
RL = IF About_Rest IS Neutral AND Aggressiveness IS Aggressive THEN Want_Rest
IS Yes
RL = IF About_Rest IS Neutral AND Aggressiveness IS Neutral THEN Want_Rest
IS Sometimes
RL = IF About_Rest IS Neutral AND Aggressiveness IS Calm THEN Want_Rest
IS Yes
RL = IF About_Rest IS Right AND Aggressiveness IS Neutral THEN Want_Rest
IS Sometimes
RL = IF About_Rest IS Right AND Aggressiveness IS Calm THEN Want_Rest IS
Yes
RL = IF About_Rest IS Wrong AND Aggressiveness IS Pacific THEN Want_Rest
IS No
RL = IF Want_Rest IS Yes THEN To_Rest IS Yes
RL = IF Want_Rest IS Sometimes THEN To_Rest IS Yes
RL = IF Want_Rest IS Sometimes THEN To_Rest IS Doubt
RL = IF Want_Rest IS Sometimes THEN To_Rest IS No
RL = IF Want_Rest IS No THEN To_Rest IS No
RL = IF To_Rest IS Yes THEN Rest IS Strong
RL = IF To_Rest IS Doubt THEN Rest IS Medium
RL = IF To_Rest IS No THEN Rest IS Weak
#Apologize rules
BLOCK_RULES
RL = IF Aggressiveness IS Rage THEN About_Apologize IS Wrong
RL = IF Aggressiveness IS Aggressive THEN About_Apologize IS Wrong
RL = IF Aggressiveness IS Neutral THEN About_Apologize IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Apologize IS Right
RL = IF Aggressiveness IS Pacific THEN About_Apologize IS Right
RL = IF About_Apologize IS Wrong AND Aggressiveness IS Rage THEN Want_Apologize
IS No
RL = IF About_Apologize IS Wrong AND Aggressiveness IS Aggressive THEN
Want_Apologize IS No
RL = IF About_Apologize IS Wrong AND Aggressiveness IS Neutral THEN Want_Apologize
IS Sometimes
RL = IF About_Apologize IS Neutral AND Aggressiveness IS Aggressive THEN
Want_Apologize IS No
RL = IF About_Apologize IS Neutral AND Aggressiveness IS Neutral THEN
73
Want_Apologize IS Sometimes
RL = IF About_Apologize IS Neutral AND Aggressiveness IS Calm THEN Want_Apologize
IS Yes
RL = IF About_Apologize IS Right AND Aggressiveness IS Neutral THEN Want_Apologize
IS Sometimes
RL = IF About_Apologize IS Right AND Aggressiveness IS Calm THEN Want_Apologize
IS Yes
RL = IF About_Apologize IS Right AND Aggressiveness IS Pacific THEN Want_Apologize
IS Yes
RL = IF Want_Apologize IS Yes THEN To_Apologize IS Yes
RL = IF Want_Apologize IS Sometimes THEN To_Apologize IS Yes
RL = IF Want_Apologize IS Sometimes THEN To_Apologize IS Doubt
RL = IF Want_Apologize IS Sometimes THEN To_Apologize IS No
RL = IF Want_Apologize IS No THEN To_Apologize IS Doubt
RL = IF Want_Apologize IS No THEN To_Apologize IS No
RL = IF Aggressiveness IS Rage THEN Apologize IS Strong
RL = IF Aggressiveness IS Aggressive THEN Apologize IS Strong
RL = IF To_Apologize IS No THEN Apologize IS Medium
RL = IF To_Apologize IS Doubt THEN Apologize IS Medium
RL = IF To_Apologize IS Yes THEN Apologize IS Medium CV = 0.9
RL = IF To_Apologize IS Yes THEN Apologize IS Strong CV = 0.8
RL = IF Aggressiveness IS Pacific THEN Apologize IS Weak
#Relax rules
BLOCK_RULES
RL = IF Aggressiveness IS Rage THEN About_Relax IS Wrong
RL = IF Aggressiveness IS Aggressive THEN About_Relax IS Wrong
RL = IF Aggressiveness IS Aggressive THEN About_Relax IS Neutral
RL = IF Aggressiveness IS Neutral THEN About_Relax IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Relax IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Relax IS Right
RL = IF Aggressiveness IS Pacific THEN About_Relax IS Right
RL = IF About_Relax IS Wrong AND Aggressiveness IS Rage THEN Want_Relax
IS No
RL = IF About_Relax IS Wrong AND Aggressiveness IS Aggressive THEN Want_Relax
IS No
RL = IF About_Relax IS Wrong AND Aggressiveness IS Aggressive THEN Want_Relax
IS Sometimes
RL = IF About_Relax IS Wrong AND Aggressiveness IS Neutral THEN Want_Relax
IS Sometimes
RL = IF About_Relax IS Neutral AND Aggressiveness IS Aggressive THEN Want_Relax
IS No
RL = IF About_Relax IS Neutral AND Aggressiveness IS Aggressive THEN Want_Relax
IS Sometimes
RL = IF About_Relax IS Neutral AND Aggressiveness IS Neutral THEN Want_Relax
IS Sometimes
RL = IF About_Relax IS Neutral AND Aggressiveness IS Calm THEN Want_Relax
IS Sometimes
74
RL = IF About_Relax IS Neutral AND Aggressiveness IS Calm THEN Want_Relax
IS Yes
RL = IF About_Relax IS Right AND Aggressiveness IS Neutral THEN Want_Relax
IS Sometimes
RL = IF About_Relax IS Right AND Aggressiveness IS Calm THEN Want_Relax
IS Yes
RL = IF About_Relax IS Right AND Aggressiveness IS Calm THEN Want_Relax
IS Sometimes
RL = IF About_Relax IS Right AND Aggressiveness IS Pacific THEN Want_Relax
IS Yes
RL = IF Want_Relax IS Yes THEN To_Relax IS Yes
RL = IF Want_Relax IS Yes THEN To_Relax IS Doubt
RL = IF Want_Relax IS Sometimes THEN To_Relax IS Yes
RL = IF Want_Relax IS Sometimes THEN To_Relax IS Doubt
RL = IF Want_Relax IS Sometimes THEN To_Relax IS No
RL = IF Want_Relax IS No THEN To_Relax IS Doubt
RL = IF Want_Relax IS No THEN To_Relax IS No
RL = IF Aggressiveness IS Rage THEN Relax IS Strong
RL = IF Aggressiveness IS Aggressive THEN Relax IS Strong
RL = IF To_Relax IS No THEN Relax IS Medium
RL = IF To_Relax IS Doubt THEN Relax IS Medium
RL = IF To_Relax IS Yes THEN Relax IS Medium CV = 0.8
RL = IF To_Relax IS Yes THEN Relax IS Strong CV = 0.6
RL = IF Aggressiveness IS Pacific THEN Relax IS Weak
#Soothe rules
BLOCK_RULES
RL = IF Aggressiveness IS Rage THEN About_Soothe IS Wrong
RL = IF Aggressiveness IS Aggressive THEN About_Soothe IS Wrong
RL = IF Aggressiveness IS Aggressive THEN About_Soothe IS Neutral
RL = IF Aggressiveness IS Neutral THEN About_Soothe IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Soothe IS Neutral
RL = IF Aggressiveness IS Calm THEN About_Soothe IS Right
RL = IF Aggressiveness IS Pacific THEN About_Soothe IS Right
RL = IF About_Soothe IS Wrong AND Aggressiveness IS Rage THEN Want_Soothe
IS No
RL = IF About_Soothe IS Wrong AND Aggressiveness IS Aggressive THEN Want_Soothe
IS No
RL = IF About_Soothe IS Wrong AND Aggressiveness IS Aggressive THEN Want_Soothe
IS Sometimes
RL = IF About_Soothe IS Wrong AND Aggressiveness IS Neutral THEN Want_Soothe
IS Sometimes
RL = IF About_Soothe IS Neutral AND Aggressiveness IS Aggressive THEN
Want_Soothe IS No
RL = IF About_Soothe IS Neutral AND Aggressiveness IS Aggressive THEN
Want_Soothe IS Sometimes
RL = IF About_Soothe IS Neutral AND Aggressiveness IS Neutral THEN Want_Soothe
IS Sometimes
75
RL = IF About_Soothe IS Neutral AND Aggressiveness IS Calm THEN Want_Soothe
IS Sometimes
RL = IF About_Soothe IS Neutral AND Aggressiveness IS Calm THEN Want_Soothe
IS Yes
RL = IF About_Soothe IS Right AND Aggressiveness IS Neutral THEN Want_Soothe
IS Sometimes
RL = IF About_Soothe IS Right AND Aggressiveness IS Calm THEN Want_Soothe
IS Yes
RL = IF About_Soothe IS Right AND Aggressiveness IS Calm THEN Want_Soothe
IS Sometimes
RL = IF About_Soothe IS Right AND Aggressiveness IS Pacific THEN Want_Soothe
IS Yes
RL = IF Want_Soothe IS Yes THEN To_Soothe IS Yes
RL = IF Want_Soothe IS Yes THEN To_Soothe IS Doubt
RL = IF Want_Soothe IS Sometimes THEN To_Soothe IS Yes
RL = IF Want_Soothe IS Sometimes THEN To_Soothe IS Doubt
RL = IF Want_Soothe IS Sometimes THEN To_Soothe IS No
RL = IF Want_Soothe IS No THEN To_Soothe IS Doubt
RL = IF Want_Soothe IS No THEN To_Soothe IS No
RL = IF Aggressiveness IS Rage THEN Soothe IS Strong
RL = IF Aggressiveness IS Aggressive THEN Soothe IS Strong
RL = IF To_Soothe IS No THEN Soothe IS Medium
RL = IF To_Soothe IS Doubt THEN Soothe IS Medium
RL = IF To_Soothe IS Yes THEN Soothe IS Medium CV = 0.6
RL = IF To_Soothe IS Yes THEN Soothe IS Strong CV = 0.5
RL = IF Aggressiveness IS Pacific THEN Soothe IS Weak
#Happiness RULES
#Depress rules
BLOCK_RULES
RL = IF Happiness IS Depressed THEN About_Depress IS Right
RL = IF Happiness IS Unhappy THEN About_Depress IS Right
RL = IF Happiness IS Unhappy THEN About_Depress IS Neutral
RL = IF Happiness IS Indifferent THEN About_Depress IS Neutral
RL = IF Happiness IS Happy THEN About_Depress IS Neutral
RL = IF Happiness IS Happy THEN About_Depress IS Wrong
RL = IF Happiness IS Radiant THEN About_Depress IS Wrong
RL = IF About_Depress IS Right AND Happiness IS Depressed THEN Want_Depress
IS Yes
RL = IF About_Depress IS Right AND Happiness IS Unhappy THEN Want_Depress
IS Yes
RL = IF About_Depress IS Right AND Happiness IS Unhappy THEN Want_Depress
IS Sometimes
RL = IF About_Depress IS Right AND Happiness IS Indifferent THEN Want_Depress
IS Sometimes
RL = IF About_Depress IS Neutral AND Happiness IS Unhappy THEN Want_Depress
IS Yes
76
RL = IF About_Depress IS Neutral AND Happiness IS Unhappy THEN Want_Depress
IS Sometimes
RL = IF About_Depress IS Neutral AND Happiness IS Indifferent THEN Want_Depress
IS Sometimes
RL = IF About_Depress IS Neutral AND Happiness IS Happy THEN Want_Depress
IS Sometimes
RL = IF About_Depress IS Neutral AND Happiness IS Happy THEN Want_Depress
IS No
RL = IF About_Depress IS Wrong AND Happiness IS Indifferent THEN Want_Depress
IS Sometimes
RL = IF About_Depress IS Wrong AND Happiness IS Happy THEN Want_Depress
IS No
RL = IF About_Depress IS Wrong AND Happiness IS Happy THEN Want_Depress
IS Sometimes
RL = IF About_Depress IS Wrong AND Happiness IS Radiant THEN Want_Depress
IS No
RL = IF Want_Depress IS Yes THEN To_Depress IS Yes CV = 0.5
RL = IF Want_Depress IS Yes THEN To_Depress IS Doubt
RL = IF Want_Depress IS Sometimes THEN To_Depress IS Yes CV = 0.5
RL = IF Want_Depress IS Sometimes THEN To_Depress IS Doubt
RL = IF Want_Depress IS Sometimes THEN To_Depress IS No
RL = IF Want_Depress IS No THEN To_Depress IS Doubt
RL = IF Want_Depress IS No THEN To_Depress IS No
RL = IF Happiness IS Depressed THEN Depress IS Weak
RL = IF To_Depress IS Yes THEN Depress IS Strong CV = 0.5
RL = IF To_Depress IS Yes THEN Depress IS Medium
RL = IF To_Depress IS Doubt THEN Depress IS Medium
RL = IF To_Depress IS No THEN Depress IS Weak
RL = IF Happiness IS Radiant THEN Depress IS Strong
#Dumped rules
BLOCK_RULES
RL = IF Happiness IS Depressed THEN About_Dumped IS Right
RL = IF Happiness IS Unhappy THEN About_Dumped IS Right
RL = IF Happiness IS Unhappy THEN About_Dumped IS Neutral
RL = IF Happiness IS Indifferent THEN About_Dumped IS Neutral
RL = IF Happiness IS Happy THEN About_Dumped IS Neutral
RL = IF Happiness IS Happy THEN About_Dumped IS Wrong
RL = IF Happiness IS Radiant THEN About_Dumped IS Wrong
RL = IF About_Dumped IS Right AND Happiness IS Depressed THEN Want_Dumped
IS Yes
RL = IF About_Dumped IS Right AND Happiness IS Unhappy THEN Want_Dumped
IS Yes
RL = IF About_Dumped IS Right AND Happiness IS Unhappy THEN Want_Dumped
IS Sometimes
RL = IF About_Dumped IS Right AND Happiness IS Indifferent THEN Want_Dumped
IS Sometimes
RL = IF About_Dumped IS Neutral AND Happiness IS Unhappy THEN Want_Dumped
77
IS Yes
RL = IF About_Dumped IS Neutral AND Happiness IS Unhappy THEN Want_Dumped
IS Sometimes
RL = IF About_Dumped IS Neutral AND Happiness IS Indifferent THEN Want_Dumped
IS Sometimes
RL = IF About_Dumped IS Neutral AND Happiness IS Happy THEN Want_Dumped
IS Sometimes
RL = IF About_Dumped IS Neutral AND Happiness IS Happy THEN Want_Dumped
IS No
RL = IF About_Dumped IS Wrong AND Happiness IS Indifferent THEN Want_Dumped
IS Sometimes
RL = IF About_Dumped IS Wrong AND Happiness IS Happy THEN Want_Dumped
IS No
RL = IF About_Dumped IS Wrong AND Happiness IS Happy THEN Want_Dumped
IS Sometimes
RL = IF About_Dumped IS Wrong AND Happiness IS Radiant THEN Want_Dumped
IS No
RL = IF Want_Dumped IS Yes THEN To_Dumped IS Yes CV = 0.6
RL = IF Want_Dumped IS Yes THEN To_Dumped IS Doubt
RL = IF Want_Dumped IS Sometimes THEN To_Dumped IS Yes CV = 0.6
RL = IF Want_Dumped IS Sometimes THEN To_Dumped IS Doubt
RL = IF Want_Dumped IS Sometimes THEN To_Dumped IS No
RL = IF Want_Dumped IS No THEN To_Dumped IS Doubt
RL = IF Want_Dumped IS No THEN To_Dumped IS No
RL = IF Happiness IS Depressed THEN Dumped IS Weak
RL = IF To_Dumped IS Yes THEN Dumped IS Strong CV = 0.6
RL = IF To_Dumped IS Yes THEN Dumped IS Medium
RL = IF To_Dumped IS Doubt THEN Dumped IS Medium
RL = IF To_Dumped IS No THEN Dumped IS Weak
RL = IF Happiness IS Radiant THEN Dumped IS Strong
#Spoil rules
BLOCK_RULES
RL = IF Happiness IS Depressed THEN About_Spoil IS Right
RL = IF Happiness IS Unhappy THEN About_Spoil IS Right
RL = IF Happiness IS Indifferent THEN About_Spoil IS Neutral
RL = IF Happiness IS Happy THEN About_Spoil IS Wrong
RL = IF Happiness IS Radiant THEN About_Spoil IS Wrong
RL = IF About_Spoil IS Right AND Happiness IS Depressed THEN Want_Spoil
IS Yes
RL = IF About_Spoil IS Right AND Happiness IS Unhappy THEN Want_Spoil
IS Yes
RL = IF About_Spoil IS Right AND Happiness IS Indifferent THEN Want_Spoil
IS Sometimes
RL = IF About_Spoil IS Neutral AND Happiness IS Unhappy THEN Want_Spoil
IS Yes
RL = IF About_Spoil IS Neutral AND Happiness IS Indifferent THEN Want_Spoil
IS Sometimes
78
RL = IF About_Spoil IS Neutral AND Happiness IS Happy THEN Want_Spoil IS
No
RL = IF About_Spoil IS Wrong AND Happiness IS Indifferent THEN Want_Spoil
IS Sometimes
RL = IF About_Spoil IS Wrong AND Happiness IS Happy THEN Want_Spoil IS
No
RL = IF About_Spoil IS Wrong AND Happiness IS Radiant THEN Want_Spoil
IS No
RL = IF Want_Spoil IS Yes THEN To_Spoil IS Yes CV = 0.8
RL = IF Want_Spoil IS Sometimes THEN To_Spoil IS Yes CV = 0.8
RL = IF Want_Spoil IS Sometimes THEN To_Spoil IS Doubt
RL = IF Want_Spoil IS Sometimes THEN To_Spoil IS No
RL = IF Want_Spoil IS No THEN To_Spoil IS No
RL = IF Happiness IS Depressed THEN Spoil IS Weak
RL = IF To_Spoil IS Yes THEN Spoil IS Strong CV = 0.8
RL = IF To_Spoil IS Yes THEN Spoil IS Medium
RL = IF To_Spoil IS Doubt THEN Spoil IS Medium
RL = IF To_Spoil IS No THEN Spoil IS Weak
RL = IF Happiness IS Radiant THEN Spoil IS Strong
#Chat rules
BLOCK_RULES
RL = IF Happiness IS Depressed THEN About_Chat IS Wrong
RL = IF Happiness IS Unhappy THEN About_Chat IS Right
RL = IF Happiness IS Indifferent THEN About_Chat IS Neutral
RL = IF Happiness IS Happy THEN About_Chat IS Right
RL = IF Happiness IS Radiant THEN About_Chat IS Wrong
RL = IF About_Chat IS Wrong AND Happiness IS Depressed THEN Want_Chat
IS No
RL = IF About_Chat IS Right AND Happiness IS Unhappy THEN Want_Chat
IS Yes
RL = IF About_Chat IS Neutral AND Happiness IS Unhappy THEN Want_Chat
IS Yes
RL = IF About_Chat IS Neutral AND Happiness IS Indifferent THEN Want_Chat
IS Sometimes
RL = IF About_Chat IS Neutral AND Happiness IS Happy THEN Want_Chat IS
Yes
RL = IF About_Chat IS Right AND Happiness IS Indifferent THEN Want_Chat
IS Sometimes
RL = IF About_Chat IS Right AND Happiness IS Happy THEN Want_Chat IS
Yes
RL = IF About_Chat IS Wrong AND Happiness IS Radiant THEN Want_Chat IS
No
RL = IF Want_Chat IS Yes THEN To_Chat IS Yes
RL = IF Want_Chat IS Sometimes THEN To_Chat IS Yes
RL = IF Want_Chat IS Sometimes THEN To_Chat IS Doubt
RL = IF Want_Chat IS Sometimes THEN To_Chat IS No
RL = IF Want_Chat IS No THEN To_Chat IS No
79
RL = IF To_Chat IS Yes THEN Chat IS Strong
RL = IF To_Chat IS Doubt THEN Chat IS Medium
RL = IF To_Chat IS No THEN Chat IS Weak
#Party rules
BLOCK_RULES
RL = IF Happiness IS Depressed THEN About_Party IS Wrong
RL = IF Happiness IS Unhappy THEN About_Party IS Wrong
RL = IF Happiness IS Indifferent THEN About_Party IS Neutral
RL = IF Happiness IS Happy THEN About_Party IS Right
RL = IF Happiness IS Radiant THEN About_Party IS Right
RL = IF About_Party IS Wrong AND Happiness IS Depressed THEN Want_Party
IS No
RL = IF About_Party IS Wrong AND Happiness IS Unhappy THEN Want_Party
IS No
RL = IF About_Party IS Wrong AND Happiness IS Indifferent THEN Want_Party
IS Sometimes
RL = IF About_Party IS Neutral AND Happiness IS Unhappy THEN Want_Party
IS No
RL = IF About_Party IS Neutral AND Happiness IS Indifferent THEN Want_Party
IS Sometimes
RL = IF About_Party IS Neutral AND Happiness IS Happy THEN Want_Party
IS Yes
RL = IF About_Party IS Right AND Happiness IS Indifferent THEN Want_Party
IS Sometimes
RL = IF About_Party IS Right AND Happiness IS Happy THEN Want_Party IS
Yes
RL = IF About_Party IS Right AND Happiness IS Radiant THEN Want_Party
IS Yes
RL = IF Want_Party IS Yes THEN To_Party IS Yes
RL = IF Want_Party IS Sometimes THEN To_Party IS Yes
RL = IF Want_Party IS Sometimes THEN To_Party IS Doubt
RL = IF Want_Party IS Sometimes THEN To_Party IS No
RL = IF Want_Party IS No THEN To_Party IS Doubt
RL = IF Want_Party IS No THEN To_Party IS No
RL = IF Happiness IS Depressed THEN Party IS Strong
RL = IF Happiness IS Unhappy THEN Party IS Strong
RL = IF To_Party IS No THEN Party IS Medium
RL = IF To_Party IS Doubt THEN Party IS Medium
RL = IF To_Party IS Yes THEN Party IS Medium CV = 0.9
RL = IF To_Party IS Yes THEN Party IS Strong CV = 0.8
RL = IF Happiness IS Radiant THEN Party IS Weak
#Sex rules
BLOCK_RULES
RL = IF Happiness IS Depressed THEN About_Sex IS Wrong
RL = IF Happiness IS Unhappy THEN About_Sex IS Wrong
RL = IF Happiness IS Unhappy THEN About_Sex IS Neutral
80
RL = IF Happiness IS Indifferent THEN About_Sex IS Neutral
RL = IF Happiness IS Happy THEN About_Sex IS Neutral
RL = IF Happiness IS Happy THEN About_Sex IS Right
RL = IF Happiness IS Radiant THEN About_Sex IS Right
RL = IF About_Sex IS Wrong AND Happiness IS Depressed THEN Want_Sex IS
No
RL = IF About_Sex IS Wrong AND Happiness IS Unhappy THEN Want_Sex IS
No
RL = IF About_Sex IS Wrong AND Happiness IS Unhappy THEN Want_Sex IS
Sometimes
RL = IF About_Sex IS Wrong AND Happiness IS Indifferent THEN Want_Sex IS
Sometimes
RL = IF About_Sex IS Neutral AND Happiness IS Unhappy THEN Want_Sex IS
No
RL = IF About_Sex IS Neutral AND Happiness IS Unhappy THEN Want_Sex IS
Sometimes
RL = IF About_Sex IS Neutral AND Happiness IS Indifferent THEN Want_Sex
IS Sometimes
RL = IF About_Sex IS Neutral AND Happiness IS Happy THEN Want_Sex IS
Sometimes
RL = IF About_Sex IS Neutral AND Happiness IS Happy THEN Want_Sex IS
Yes
RL = IF About_Sex IS Right AND Happiness IS Indifferent THEN Want_Sex IS
Sometimes
RL = IF About_Sex IS Right AND Happiness IS Happy THEN Want_Sex IS Yes
RL = IF About_Sex IS Right AND Happiness IS Happy THEN Want_Sex IS Sometimes
RL = IF About_Sex IS Right AND Happiness IS Radiant THEN Want_Sex IS Yes
RL = IF Want_Sex IS Yes THEN To_Sex IS Yes
RL = IF Want_Sex IS Yes THEN To_Sex IS Doubt
RL = IF Want_Sex IS Sometimes THEN To_Sex IS Yes
RL = IF Want_Sex IS Sometimes THEN To_Sex IS Doubt
RL = IF Want_Sex IS Sometimes THEN To_Sex IS No
RL = IF Want_Sex IS No THEN To_Sex IS Doubt
RL = IF Want_Sex IS No THEN To_Sex IS No
RL = IF Happiness IS Depressed THEN Sex IS Strong
RL = IF Happiness IS Unhappy THEN Sex IS Strong
RL = IF To_Sex IS No THEN Sex IS Medium
RL = IF To_Sex IS Doubt THEN Sex IS Medium
RL = IF To_Sex IS Yes THEN Sex IS Medium CV = 0.8
RL = IF To_Sex IS Yes THEN Sex IS Strong CV = 0.6
RL = IF Happiness IS Radiant THEN Sex IS Weak
#Rejoice rules
BLOCK_RULES
RL = IF Happiness IS Depressed THEN About_Rejoice IS Wrong
RL = IF Happiness IS Unhappy THEN About_Rejoice IS Wrong
RL = IF Happiness IS Unhappy THEN About_Rejoice IS Neutral
81
RL = IF Happiness IS Indifferent THEN About_Rejoice IS Neutral
RL = IF Happiness IS Happy THEN About_Rejoice IS Neutral
RL = IF Happiness IS Happy THEN About_Rejoice IS Right
RL = IF Happiness IS Radiant THEN About_Rejoice IS Right
RL = IF About_Rejoice IS Wrong AND Happiness IS Depressed THEN Want_Rejoice
IS No
RL = IF About_Rejoice IS Wrong AND Happiness IS Unhappy THEN Want_Rejoice
IS No
RL = IF About_Rejoice IS Wrong AND Happiness IS Unhappy THEN Want_Rejoice
IS Sometimes
RL = IF About_Rejoice IS Wrong AND Happiness IS Indifferent THEN Want_Rejoice
IS Sometimes
RL = IF About_Rejoice IS Neutral AND Happiness IS Unhappy THEN Want_Rejoice
IS No
RL = IF About_Rejoice IS Neutral AND Happiness IS Unhappy THEN Want_Rejoice
IS Sometimes
RL = IF About_Rejoice IS Neutral AND Happiness IS Indifferent THEN Want_Rejoice
IS Sometimes
RL = IF About_Rejoice IS Neutral AND Happiness IS Happy THEN Want_Rejoice
IS Sometimes
RL = IF About_Rejoice IS Neutral AND Happiness IS Happy THEN Want_Rejoice
IS Yes
RL = IF About_Rejoice IS Right AND Happiness IS Indifferent THEN Want_Rejoice
IS Sometimes
RL = IF About_Rejoice IS Right AND Happiness IS Happy THEN Want_Rejoice
IS Yes
RL = IF About_Rejoice IS Right AND Happiness IS Happy THEN Want_Rejoice
IS Sometimes
RL = IF About_Rejoice IS Right AND Happiness IS Radiant THEN Want_Rejoice
IS Yes
RL = IF Want_Rejoice IS Yes THEN To_Rejoice IS Yes
RL = IF Want_Rejoice IS Yes THEN To_Rejoice IS Doubt
RL = IF Want_Rejoice IS Sometimes THEN To_Rejoice IS Yes
RL = IF Want_Rejoice IS Sometimes THEN To_Rejoice IS Doubt
RL = IF Want_Rejoice IS Sometimes THEN To_Rejoice IS No
RL = IF Want_Rejoice IS No THEN To_Rejoice IS Doubt
RL = IF Want_Rejoice IS No THEN To_Rejoice IS No
RL = IF Happiness IS Depressed THEN Rejoice IS Strong
RL = IF Happiness IS Unhappy THEN Rejoice IS Strong
RL = IF To_Rejoice IS No THEN Rejoice IS Medium
RL = IF To_Rejoice IS Doubt THEN Rejoice IS Medium
RL = IF To_Rejoice IS Yes THEN Rejoice IS Medium CV = 0.6
RL = IF To_Rejoice IS Yes THEN Rejoice IS Strong CV = 0.5
RL = IF Happiness IS Radiant THEN Rejoice IS Weak
82
#LifeCondition RULES
#Pollute rules
BLOCK_RULES
RL = IF LifeCondition IS Miserable THEN About_Pollute IS Right
RL = IF LifeCondition IS Poor THEN About_Pollute IS Right
RL = IF LifeCondition IS Poor THEN About_Pollute IS Neutral
RL = IF LifeCondition IS Medium THEN About_Pollute IS Neutral
RL = IF LifeCondition IS Rich THEN About_Pollute IS Neutral
RL = IF LifeCondition IS Rich THEN About_Pollute IS Wrong
RL = IF LifeCondition IS Elite THEN About_Pollute IS Wrong
RL = IF About_Pollute IS Right AND LifeCondition IS Miserable THEN Want_Pollute
IS Yes
RL = IF About_Pollute IS Right AND LifeCondition IS Poor THEN Want_Pollute
IS Yes
RL = IF About_Pollute IS Right AND LifeCondition IS Poor THEN Want_Pollute
IS Sometimes
RL = IF About_Pollute IS Right AND LifeCondition IS Medium THEN Want_Pollute
IS Sometimes
RL = IF About_Pollute IS Neutral AND LifeCondition IS Poor THEN Want_Pollute
IS Yes
RL = IF About_Pollute IS Neutral AND LifeCondition IS Poor THEN Want_Pollute
IS Sometimes
RL = IF About_Pollute IS Neutral AND LifeCondition IS Medium THEN Want_Pollute
IS Sometimes
RL = IF About_Pollute IS Neutral AND LifeCondition IS Rich THEN Want_Pollute
IS Sometimes
RL = IF About_Pollute IS Neutral AND LifeCondition IS Rich THEN Want_Pollute
IS No
RL = IF About_Pollute IS Wrong AND LifeCondition IS Medium THEN Want_Pollute
IS Sometimes
RL = IF About_Pollute IS Wrong AND LifeCondition IS Rich THEN Want_Pollute
IS No
RL = IF About_Pollute IS Wrong AND LifeCondition IS Rich THEN Want_Pollute
IS Sometimes
RL = IF About_Pollute IS Wrong AND LifeCondition IS Elite THEN Want_Pollute
IS No
RL = IF Want_Pollute IS Yes THEN To_Pollute IS Yes
RL = IF Want_Pollute IS Yes THEN To_Pollute IS Doubt
RL = IF Want_Pollute IS Sometimes THEN To_Pollute IS Yes
RL = IF Want_Pollute IS Sometimes THEN To_Pollute IS Doubt
RL = IF Want_Pollute IS Sometimes THEN To_Pollute IS No
RL = IF Want_Pollute IS No THEN To_Pollute IS Doubt
RL = IF Want_Pollute IS No THEN To_Pollute IS No
RL = IF LifeCondition IS Miserable THEN Pollute IS Weak
RL = IF LifeCondition IS Poor THEN Pollute IS Weak
RL = IF To_Pollute IS Yes THEN Pollute IS Medium
RL = IF To_Pollute IS Doubt THEN Pollute IS Medium
83
RL = IF To_Pollute IS No THEN Pollute IS Medium
RL = IF LifeCondition IS Rich THEN Pollute IS Strong CV = 0.3
RL = IF LifeCondition IS Elite THEN Pollute IS Strong CV = 0.3
#Broke rules
BLOCK_RULES
RL = IF LifeCondition IS Miserable THEN About_Broke IS Right
RL = IF LifeCondition IS Poor THEN About_Broke IS Right
RL = IF LifeCondition IS Poor THEN About_Broke IS Neutral
RL = IF LifeCondition IS Medium THEN About_Broke IS Neutral
RL = IF LifeCondition IS Rich THEN About_Broke IS Neutral
RL = IF LifeCondition IS Rich THEN About_Broke IS Wrong
RL = IF LifeCondition IS Elite THEN About_Broke IS Wrong
RL = IF About_Broke IS Right AND LifeCondition IS Miserable THEN Want_Broke
IS Yes
RL = IF About_Broke IS Right AND LifeCondition IS Poor THEN Want_Broke
IS Yes
RL = IF About_Broke IS Right AND LifeCondition IS Poor THEN Want_Broke
IS Sometimes
RL = IF About_Broke IS Right AND LifeCondition IS Medium THEN Want_Broke
IS Sometimes
RL = IF About_Broke IS Neutral AND LifeCondition IS Poor THEN Want_Broke
IS Yes
RL = IF About_Broke IS Neutral AND LifeCondition IS Poor THEN Want_Broke
IS Sometimes
RL = IF About_Broke IS Neutral AND LifeCondition IS Medium THEN Want_Broke
IS Sometimes
RL = IF About_Broke IS Neutral AND LifeCondition IS Rich THEN Want_Broke
IS Sometimes
RL = IF About_Broke IS Neutral AND LifeCondition IS Rich THEN Want_Broke
IS No
RL = IF About_Broke IS Wrong AND LifeCondition IS Medium THEN Want_Broke
IS Sometimes
RL = IF About_Broke IS Wrong AND LifeCondition IS Rich THEN Want_Broke
IS No
RL = IF About_Broke IS Wrong AND LifeCondition IS Rich THEN Want_Broke
IS Sometimes
RL = IF About_Broke IS Wrong AND LifeCondition IS Elite THEN Want_Broke
IS No
RL = IF Want_Broke IS Yes THEN To_Broke IS Yes
RL = IF Want_Broke IS Yes THEN To_Broke IS Doubt
RL = IF Want_Broke IS Sometimes THEN To_Broke IS Yes
RL = IF Want_Broke IS Sometimes THEN To_Broke IS Doubt
RL = IF Want_Broke IS Sometimes THEN To_Broke IS No
RL = IF Want_Broke IS No THEN To_Broke IS Doubt
RL = IF Want_Broke IS No THEN To_Broke IS No
RL = IF LifeCondition IS Miserable THEN Broke IS Weak
RL = IF LifeCondition IS Poor THEN Broke IS Weak
84
RL
RL
RL
RL
RL
=
=
=
=
=
IF
IF
IF
IF
IF
To_Broke IS Yes THEN Broke IS Medium
To_Broke IS Doubt THEN Broke IS Medium
To_Broke IS No THEN Broke IS Medium
LifeCondition IS Rich THEN Broke IS Strong CV = 0.5
LifeCondition IS Elite THEN Broke IS Strong CV = 0.5
#DoDrugs rules
BLOCK_RULES
RL = IF LifeCondition IS Miserable THEN About_DoDrugs IS Right
RL = IF LifeCondition IS Poor THEN About_DoDrugs IS Right
RL = IF LifeCondition IS Medium THEN About_DoDrugs IS Neutral
RL = IF LifeCondition IS Rich THEN About_DoDrugs IS Wrong
RL = IF LifeCondition IS Elite THEN About_DoDrugs IS Wrong
RL = IF About_DoDrugs IS Right AND LifeCondition IS Miserable THEN Want_DoDrugs
IS Yes
RL = IF About_DoDrugs IS Right AND LifeCondition IS Poor THEN Want_DoDrugs
IS Yes
RL = IF About_DoDrugs IS Right AND LifeCondition IS Medium THEN Want_DoDrugs
IS Sometimes
RL = IF About_DoDrugs IS Neutral AND LifeCondition IS Poor THEN Want_DoDrugs
IS Yes
RL = IF About_DoDrugs IS Neutral AND LifeCondition IS Medium THEN Want_DoDrugs
IS Sometimes
RL = IF About_DoDrugs IS Neutral AND LifeCondition IS Rich THEN Want_DoDrugs
IS No
RL = IF About_DoDrugs IS Wrong AND LifeCondition IS Medium THEN Want_DoDrugs
IS Sometimes
RL = IF About_DoDrugs IS Wrong AND LifeCondition IS Rich THEN Want_DoDrugs
IS No
RL = IF About_DoDrugs IS Wrong AND LifeCondition IS Elite THEN Want_DoDrugs
IS No
RL = IF Want_DoDrugs IS Yes THEN To_DoDrugs IS Yes
RL = IF Want_DoDrugs IS Sometimes THEN To_DoDrugs IS Yes
RL = IF Want_DoDrugs IS Sometimes THEN To_DoDrugs IS Doubt
RL = IF Want_DoDrugs IS Sometimes THEN To_DoDrugs IS No
RL = IF Want_DoDrugs IS No THEN To_DoDrugs IS No
RL = IF LifeCondition IS Miserable THEN DoDrugs IS Weak
RL = IF LifeCondition IS Poor THEN DoDrugs IS Weak
RL = IF To_DoDrugs IS Yes THEN DoDrugs IS Medium
RL = IF To_DoDrugs IS Doubt THEN DoDrugs IS Medium
RL = IF To_DoDrugs IS No THEN DoDrugs IS Medium
RL = IF LifeCondition IS Rich THEN DoDrugs IS Strong
RL = IF LifeCondition IS Elite THEN DoDrugs IS Strong
#Clean rules
BLOCK_RULES
RL = IF LifeCondition IS Miserable THEN About_Clean IS Wrong
RL = IF LifeCondition IS Poor THEN About_Clean IS Right
85
RL = IF LifeCondition IS Medium THEN About_Clean IS Neutral
RL = IF LifeCondition IS Rich THEN About_Clean IS Right
RL = IF LifeCondition IS Elite THEN About_Clean IS Wrong
RL = IF About_Clean IS Wrong AND LifeCondition IS Miserable THEN Want_Clean
IS No
RL = IF About_Clean IS Right AND LifeCondition IS Poor THEN Want_Clean
IS Yes
RL = IF About_Clean IS Neutral AND LifeCondition IS Poor THEN Want_Clean
IS Yes
RL = IF About_Clean IS Neutral AND LifeCondition IS Medium THEN Want_Clean
IS Sometimes
RL = IF About_Clean IS Neutral AND LifeCondition IS Rich THEN Want_Clean
IS Yes
RL = IF About_Clean IS Right AND LifeCondition IS Medium THEN Want_Clean
IS Sometimes
RL = IF About_Clean IS Right AND LifeCondition IS Rich THEN Want_Clean
IS Yes
RL = IF About_Clean IS Wrong AND LifeCondition IS Elite THEN Want_Clean
IS No
RL = IF Want_Clean IS Yes THEN To_Clean IS Yes
RL = IF Want_Clean IS Sometimes THEN To_Clean IS Yes
RL = IF Want_Clean IS Sometimes THEN To_Clean IS Doubt
RL = IF Want_Clean IS Sometimes THEN To_Clean IS No
RL = IF Want_Clean IS No THEN To_Clean IS No
RL = IF To_Clean IS Yes THEN Clean IS Strong
RL = IF To_Clean IS Doubt THEN Clean IS Medium
RL = IF To_Clean IS No THEN Clean IS Weak
#Teach rules
BLOCK_RULES
RL = IF LifeCondition IS Miserable THEN About_Teach IS Wrong
RL = IF LifeCondition IS Poor THEN About_Teach IS Wrong
RL = IF LifeCondition IS Medium THEN About_Teach IS Neutral
RL = IF LifeCondition IS Rich THEN About_Teach IS Right
RL = IF LifeCondition IS Elite THEN About_Teach IS Right
RL = IF About_Teach IS Wrong AND LifeCondition IS Miserable THEN Want_Teach
IS No
RL = IF About_Teach IS Wrong AND LifeCondition IS Poor THEN Want_Teach
IS No
RL = IF About_Teach IS Wrong AND LifeCondition IS Medium THEN Want_Teach
IS Sometimes
RL = IF About_Teach IS Neutral AND LifeCondition IS Poor THEN Want_Teach
IS No
RL = IF About_Teach IS Neutral AND LifeCondition IS Medium THEN Want_Teach
IS Sometimes
RL = IF About_Teach IS Neutral AND LifeCondition IS Rich THEN Want_Teach
IS Yes
RL = IF About_Teach IS Right AND LifeCondition IS Medium THEN Want_Teach
86
IS Sometimes
RL = IF About_Teach IS Right AND LifeCondition IS Rich THEN Want_Teach
IS Yes
RL = IF About_Teach IS Right AND LifeCondition IS Elite THEN Want_Teach
IS Yes
RL = IF Want_Teach IS Yes THEN To_Teach IS Yes
RL = IF Want_Teach IS Sometimes THEN To_Teach IS Yes
RL = IF Want_Teach IS Sometimes THEN To_Teach IS Doubt
RL = IF Want_Teach IS Sometimes THEN To_Teach IS No
RL = IF Want_Teach IS No THEN To_Teach IS No
RL = IF LifeCondition IS Miserable THEN Teach IS Strong
RL = IF LifeCondition IS Miserable THEN Teach IS Strong
RL = IF To_Teach IS No THEN Teach IS Medium
RL = IF To_Teach IS Doubt THEN Teach IS Medium
RL = IF To_Teach IS Yes THEN Teach IS Medium
RL = IF LifeCondition IS Rich THEN Teach IS Weak
RL = IF LifeCondition IS Elite THEN Teach IS Weak
#Donate rules
BLOCK_RULES
RL = IF LifeCondition IS Miserable THEN About_Donate IS Wrong
RL = IF LifeCondition IS Poor THEN About_Donate IS Wrong
RL = IF LifeCondition IS Poor THEN About_Donate IS Neutral
RL = IF LifeCondition IS Medium THEN About_Donate IS Neutral
RL = IF LifeCondition IS Rich THEN About_Donate IS Neutral
RL = IF LifeCondition IS Rich THEN About_Donate IS Right
RL = IF LifeCondition IS Elite THEN About_Donate IS Right
RL = IF About_Donate IS Wrong AND LifeCondition IS Miserable THEN Want_Donate
IS No
RL = IF About_Donate IS Wrong AND LifeCondition IS Poor THEN Want_Donate
IS No
RL = IF About_Donate IS Wrong AND LifeCondition IS Poor THEN Want_Donate
IS Sometimes
RL = IF About_Donate IS Wrong AND LifeCondition IS Medium THEN Want_Donate
IS Sometimes
RL = IF About_Donate IS Neutral AND LifeCondition IS Poor THEN Want_Donate
IS No
RL = IF About_Donate IS Neutral AND LifeCondition IS Poor THEN Want_Donate
IS Sometimes
RL = IF About_Donate IS Neutral AND LifeCondition IS Medium THEN Want_Donate
IS Sometimes
RL = IF About_Donate IS Neutral AND LifeCondition IS Rich THEN Want_Donate
IS Sometimes
RL = IF About_Donate IS Neutral AND LifeCondition IS Rich THEN Want_Donate
IS Yes
RL = IF About_Donate IS Right AND LifeCondition IS Medium THEN Want_Donate
IS Sometimes
RL = IF About_Donate IS Right AND LifeCondition IS Rich THEN Want_Donate
87
IS Yes
RL = IF About_Donate IS Right AND LifeCondition IS Rich THEN Want_Donate
IS Sometimes
RL = IF About_Donate IS Right AND LifeCondition IS Elite THEN Want_Donate
IS Yes
RL = IF Want_Donate IS Yes THEN To_Donate IS Yes
RL = IF Want_Donate IS Yes THEN To_Donate IS Doubt
RL = IF Want_Donate IS Sometimes THEN To_Donate IS Yes
RL = IF Want_Donate IS Sometimes THEN To_Donate IS Doubt
RL = IF Want_Donate IS Sometimes THEN To_Donate IS No
RL = IF Want_Donate IS No THEN To_Donate IS Doubt
RL = IF Want_Donate IS No THEN To_Donate IS No
RL = IF LifeCondition IS Miserable THEN Donate IS Strong CV = 0.5
RL = IF LifeCondition IS Poor THEN Donate IS Strong CV = 0.5
RL = IF To_Donate IS No THEN Donate IS Medium
RL = IF To_Donate IS Doubt THEN Donate IS Medium
RL = IF To_Donate IS Yes THEN Donate IS Medium
RL = IF LifeCondition IS Rich THEN Donate IS Weak
RL = IF LifeCondition IS Elite THEN Donate IS Weak
#Preserve rules
BLOCK_RULES
RL = IF LifeCondition IS Miserable THEN About_Preserve IS Wrong
RL = IF LifeCondition IS Poor THEN About_Preserve IS Wrong
RL = IF LifeCondition IS Poor THEN About_Preserve IS Neutral
RL = IF LifeCondition IS Medium THEN About_Preserve IS Neutral
RL = IF LifeCondition IS Rich THEN About_Preserve IS Neutral
RL = IF LifeCondition IS Rich THEN About_Preserve IS Right
RL = IF LifeCondition IS Elite THEN About_Preserve IS Right
RL = IF About_Preserve IS Wrong AND LifeCondition IS Miserable THEN Want_Preserve
IS No
RL = IF About_Preserve IS Wrong AND LifeCondition IS Poor THEN Want_Preserve
IS No
RL = IF About_Preserve IS Wrong AND LifeCondition IS Poor THEN Want_Preserve
IS Sometimes
RL = IF About_Preserve IS Wrong AND LifeCondition IS Medium THEN Want_Preserve
IS Sometimes
RL = IF About_Preserve IS Neutral AND LifeCondition IS Poor THEN Want_Preserve
IS No
RL = IF About_Preserve IS Neutral AND LifeCondition IS Poor THEN Want_Preserve
IS Sometimes
RL = IF About_Preserve IS Neutral AND LifeCondition IS Medium THEN Want_Preserve
IS Sometimes
RL = IF About_Preserve IS Neutral AND LifeCondition IS Rich THEN Want_Preserve
IS Sometimes
RL = IF About_Preserve IS Neutral AND LifeCondition IS Rich THEN Want_Preserve
IS Yes
RL = IF About_Preserve IS Right AND LifeCondition IS Medium THEN Want_Preserve
88
IS Sometimes
RL = IF About_Preserve IS Right AND LifeCondition IS Rich THEN Want_Preserve
IS Yes
RL = IF About_Preserve IS Right AND LifeCondition IS Rich THEN Want_Preserve
IS Sometimes
RL = IF About_Preserve IS Right AND LifeCondition IS Elite THEN Want_Preserve
IS Yes
RL = IF Want_Preserve IS Yes THEN To_Preserve IS Yes
RL = IF Want_Preserve IS Yes THEN To_Preserve IS Doubt
RL = IF Want_Preserve IS Sometimes THEN To_Preserve IS Yes
RL = IF Want_Preserve IS Sometimes THEN To_Preserve IS Doubt
RL = IF Want_Preserve IS Sometimes THEN To_Preserve IS No
RL = IF Want_Preserve IS No THEN To_Preserve IS Doubt
RL = IF Want_Preserve IS No THEN To_Preserve IS No
RL = IF LifeCondition IS Miserable THEN Preserve IS Strong CV = 0.3
RL = IF LifeCondition IS Poor THEN Preserve IS Strong CV = 0.3
RL = IF To_Preserve IS No THEN Preserve IS Medium
RL = IF To_Preserve IS Doubt THEN Preserve IS Medium
RL = IF To_Preserve IS Yes THEN Preserve IS Medium
RL = IF LifeCondition IS Rich THEN Preserve IS Weak
RL = IF LifeCondition IS Elite THEN Preserve IS Weak
END_RULES
#Finish domain

Documentos relacionados