Estrutura de Diálogo: mudanças entre as edições
| Linha 275: | Linha 275: | ||
== Condições | == Condições Automáticas == | ||
Algumas condições já são consideradas por padrão em todos os diálogos e não devem ser escritas na condição do diálogo. São elas: | |||
* Todo diálogo só será exibido para o jogador se ele ainda não tiver acontecido. Para isso o sistema verifica automaticamente se ele '''não tem o 'Marco do Diálogo''''; | |||
* Todo diálogo só é exibido quando o jogador está próximo ou em conversa com o NPC presente na ficha do diálogo, assim não é necessário condiconar se o NPC está ouvindo ou presente. | |||
Todo diálogo | |||
= Exemplos = | = Exemplos = | ||
Edição das 17h15min de 6 de abril de 2025
Introdução Geral
O sistema de Diálogos da engine PlayTale é uma ferramenta central para criar interações narrativas ricas entre o jogador e personagens não-jogadores (NPCs). Ele permite a construção de conversas ramificadas, influenciadas por atributos, decisões anteriores, condições do mundo e sistemas internos do jogo.
Mais do que apenas exibir falas, os diálogos desempenham um papel fundamental na mecânica do jogo:
- Disparam eventos e atualizam marcos que o jogador alcançou e que alteram o estado do mundo.
- Ativam gatilhos narrativos, desbloqueiam áreas ou avanços de missão.
- Revelam informações que alimentam sistemas como o Diário do Jogador.
- Realizam testes baseados em atributos e permitem múltiplos caminhos de resolução.
Funções do Sistema de Diálogo
O sistema é capaz de atender a diferentes finalidades narrativas e funcionais:
- Diálogos Narrativos: para contextualização, ambientação e aprofundamento de personagens.
- Diálogos Investigativos: para coleta de pistas, verificação de contradições e confrontos.
- Diálogos de Progressão: para desbloquear missões, entregar itens ou registrar marcos da história.
- Diálogos Condicionais: com respostas e opções variáveis, baseadas em atributos, inventário ou estado do jogo.
- Diálogos Estratégicos: com possibilidades de persuasão, intimidação, barganha, entre outros usos de habilidades sociais.
Fluxo de Criação e Integração
O fluxo de trabalho do sistema de diálogos envolve geralmente duas funções principais:
- Autores de Diálogo: responsáveis pela escrita das falas, estrutura narrativa e organização lógica dos blocos.
- Integradores Técnicos: encarregados de aplicar marcadores, vincular testes, configurar variáveis e assegurar que o diálogo esteja conectado ao restante dos sistemas do jogo.
Essa divisão permite que equipes criativas e técnicas colaborem com clareza, garantindo coesão narrativa e funcionalidade mecânica.
Estrutura de Diálogos
A estrutura de Diálogo da engine PlayTale define interações conversacionais entre o jogador e personagens não-jogadores (NPCs), com ramificações narrativas, testes de atributo e efeitos mecânicos. Esta estrutura foi adaptada para utilizar um modelo visual e legível baseado em templates MediaWiki.
Essa estrutura permite uma leitura clara, aninhamento visual de falas, múltiplas variações de estilo e testes, e é especialmente útil durante o design narrativo ou análise por ferramentas de IA.
O que é uma Fala?
Uma Fala representa uma linha de diálogo iniciada pelo jogador e seguida de uma resposta do NPC. Ela pode ter consequências, ramificações e efeitos no mundo de jogo. Falas podem ser simples ou conter variações com estilos diferentes, testes de atributo, comandos e falas subsequentes.
O que é um Diálogo?
Um Diálogo é o conjunto completo de falas encadeadas que ocorrem em uma situação específica com um NPC. Cada Diálogo deve ser documentado como um tópico próprio de nível 1 (usando "="), com um nome que represente o tema tratado. Exemplo:
= Diálogo: Algo Incomum na Floresta =
Esse bloco conterá todas as falas, suas variações e ramificações.
Estilos de Fala
Os estilos de fala representam a abordagem escolhida pelo jogador ao interagir com um NPC — podendo ser direta, persuasiva, agressiva, mentirosa, entre outras. Eles influenciam o tom da fala, o comportamento do NPC, e determinam o tipo de teste aplicado (quando houver).
Estilos não são apenas variações cosméticas, mas afetam a mecânica do diálogo, desbloqueiam respostas diferentes, e podem alterar o relacionamento com personagens.
Para uma descrição completa dos estilos disponíveis, suas implicações mecânicas e exemplos práticos, consulte a página Estilos de Fala e Valoração.
Testes de Fala
Algumas falas exigem testes de atributos para definir se o jogador será bem-sucedido. Os testes são definidos por:
- Atributo testado: (ex: persuasão, intuição, enganar, percepção, carisma)
- Dificuldade: valor-alvo a ser igualado ou superado
O estilo e o teste são conceitos diferentes:
- O estilo define a forma da abordagem.
- O teste define se será necessário um sucesso num teste para desbloquear a resposta positiva.
Exemplo: uma fala persuasiva pode conter um teste de persuasão, enquanto uma fala mentirosa pode conter um teste de enganar.
Comandos da Fala
Os comandos da fala são efeitos executados após a resposta do NPC. Eles permitem que o diálogo influencie o mundo de jogo, registre descobertas, altere relacionamentos ou desencadeie eventos narrativos.
Esses comandos devem ser escritos entre colchetes com seus parâmetros separados por ';'. Para indicar múltiplos comandos eles são separados por vírgulas. Exemplo:
[Nome do Comando; Argumento 1; Argumento 2; ...], [Nome do Comando; Argumento 1; Argumento 2; ...], ...
Vários comandos podem ser aplicados a uma única resposta, separados por vírgulas:
[Inserir Marcador; DESCOBRIU_SOBRE_ORB], [Mudar Relacionamento; 1]
Abaixo estão os comandos atualmente disponíveis e sua função:
- [Inserir Marco; NOME_DO_MARCO]
Insere um marco no sistema de jogo para registrar que determinada informação foi adquirida ou evento ocorreu. Exemplo:
[Inserir Marco; VIU_MAPA_SECRETO]
- [Adicionar Entrada ao Diário; TEXTO_DA_ENTRADA]
Adiciona uma nova entrada ao Diário do Jogador, visível para consulta futura. Exemplo:
[Adicionar Entrada ao Diário; O velho mencionou um local escondido sob as ruínas do norte.]
- [Entregar Item; ID_DO_ITEM]
O NPC entrega um item ao jogador, geralmente como consequência de uma fala bem-sucedida ou como parte de uma negociação. Exemplo:
[Entregar Item; CHAVE_ANTIGA]
- [Mudar Relacionamento; VALOR]
Modifica o nível de relacionamento entre o jogador e o NPC. * Valores positivos (ex: `1`, `2`) melhoram a relação. * Valores negativos (ex: `-1`, `-3`) deterioram a relação. * Um valor de `5` representa confiança máxima; `-5` pode representar hostilidade. Exemplo:
[Mudar Relacionamento; -2]
- [Teleportar jogador; ID_DO_DESTINO]
Move o jogador instantaneamente para outro local. Pode representar uma expulsão, um transporte ou um efeito mágico. Exemplo:
[Teleportar jogador; TEMPLO_ANTIGO_ENTRADA]
Esses comandos são processados automaticamente após a fala correspondente. Em falas com testes, os comandos são separados para os casos de sucesso e falha, permitindo efeitos distintos dependendo do resultado.
Criação do Diálogo
Para criar um diálogo:
- comece completando o Modelo de Ficha de Diálogo, ela dará os primeiros passos de como o diálogo será e objetivos que precisam ser atingidos;
- crie a condição
- após a ficha criada, defina uma ou mais trilhas que atingem tantos os objetivos principais, quando os objetivos secundários, com todos os testes necessários;
- crie trilhas adicionais para melhor imersão, com mais desafios, testes e modificações de relacionamento com o NPC, falas com valores, etc..
- adicione trilhas em que os objetivos secundários não são atingidos.
- valide se todas as trilhas tem o objetivo principal completo, se os caminhos de falas são coerentes e se não há uma grande variação dentro de cada trilha do humor.
Documentação do Diálogo
Os diálogos são documentados utilizando a predefinição {{Fala}}. Cada bloco representa uma fala do jogador, uma resposta do NPC e as possíveis consequências lógicas e narrativas dessa interação. A predefinição é utilizada tanto para falas simples quanto para falas com testes de habilidade, variações e desdobramentos.
Composição do Bloco
A estrutura da predefinição {{Fala}} é composta por campos (parâmetros) que podem ser obrigatórios ou opcionais, dependendo do tipo de fala.
- Quando o campo
testeestá presente, o sistema entende que a fala exigirá um teste de habilidade. Nesse caso:
- Os seguintes campos são obrigatórios:
teste: Nome da habilidade a ser testada.dificuldade: Valor de dificuldade do teste (número inteiro).sucesso_resposta: Texto da resposta caso o teste seja bem-sucedido.falha_resposta: Texto da resposta caso o teste falhe.
- Os seguintes campos são proibidos:
resposta: Não pode ser utilizado, pois a resposta varia com o resultado do teste.
- Os comandos devem ser definidos separadamente para sucesso e falha, nos campos
sucesso_comandosefalha_comandos. Mas são opcionais.
- Quando o campo
testenão está presente, entende-se que a fala não exige rolagem, e o comportamento será fixo. Nesse caso:
- Os seguintes campos são obrigatórios:
resposta: Resposta padrão do NPC à fala do jogador.
- Os seguintes campos são proibidos:
teste,dificuldade,sucesso_resposta,falha_resposta,sucesso_comandos,falha_comandos: nenhum deles deve estar presente.
- Os comandos devem ser escritos no atributo
comandos, mas é opcional.
Se houver comandos, eles devem ser definidos no campo comandos e separados por vírgulas: [Comando; Arg1], [OutroComando; Arg2].
|
Além dos campos de controle do fluxo do diálogo, a predefinição também pode conter:
id: Identificador único da fala, deve se úncio por diálogo. Sua função é estritamente ajudar a identificar o bloco de fala durante sua criação, nao tem efeito na mecânica do jogo.estilo: Estilo de fala do jogador (Conforme definido na tabela Tabela de Estilos de Fala). Opcional. Normalmente não é definido. Só dee ser definido quando se deseja adicionar um tom especial de fala. Quando não definido é considerao um estilo 'neutro'.valor: Valor moral ou princípio transmitido pela fala. Opcional. O valor quase nunca é definido, só deve ser definido quando a frase tem um sentido que demostra um alto valor de caráter. O valor deve ser compatível com as definições da Tabela de Valoração.subfalas: Bloco de falas-filhas que seguem a linha principal. Opcional.sucesso_subfalasefalha_subfalas: Blocos de falas-filhas condicionadas ao resultado do teste.
Regras de Formatação
A estrutura da predefinição segue regras rigorosas de indentação e alinhamento para garantir consistência, legibilidade e fácil manipulação por sistemas automatizados.
- Indentação de Níveis: Cada novo nível de aninhamento usa 1 espaço adicional em relação ao anterior.
- Alinhamento de Blocos: Os símbolos de abertura
{{e de fechamento}}devem estar sempre alinhados verticalmente com o início da predefinição. - Indentação de Argumentos: Quando os argumentos do bloco (como
|resposta=,|teste=, etc.) estiverem em uma nova linha, eles devem ser indentados com 1 nível a mais (1 espaço) em relação a abertura do bloco que o contém. - Valores em Nova Linha: Se o valor do argumento estiver em uma nova linha (como no caso de listas longas ou texto extenso), esse valor deve receber um novo nível de indentação adicional.
Exemplo:
{{Fala |id=1 |fala=Exemplo de fala |estilo=Direto |valor=Honra
|resposta=O NPC responde de forma direta.
|comandos=[Mudar Relacionamento; 1]
|subfalas=
{{Fala |id=2 |fala=Exemplo de fala secudária
|resposta=O NPC responde de forma direta 2.
|comandos=[Mudar Relacionamento; -1]
}}
}}
Condições de Ativação de Diálogo
Diálogos são restritos para aparecerem apenas quando certas condições forem atendidas, permitindo controle contextual e narrativo sobre o que está disponível ao jogador em determinado momento do jogo.
Essas condições são escritas no formato de expressões booleanas simples, similares à linguagem de programação, utilizando funções e operadores lógicos. O objetivo é oferecer uma forma legível, poderosa e extensível de controlar a ativação de blocos de diálogo.
Como declarar uma condição de ativação
Uma condição deve ser colocada logo no início do bloco de diálogo, utilizando a seguinte anotação:
= Diálogo: Guardião da Trilha =
@condição: hasMilestone("OUVIU_SOBRE_TRILHA") AND !hasMilestone("TRILHA_INVESTIGADA")
Essa condição significa que o diálogo só estará disponível se o jogador tiver o marco OUVIU_SOBRE_TRILHA e ainda não tiver o marco TRILHA_INVESTIGADA.
Sintaxe de Condições
As expressões devem utilizar os seguintes operadores lógicos:
- AND: e
- OR: ou - no sentido de qualquer uma das condições
- XOR: ou exclusivo - no sentido de 'ou uma ou outra, não as duas'
- !: negação (NOT) - inverte o true para false e vice-versa. Ou leia-se apenas "não [condição da função]"
As funções retornam valores booleanos e podem ser combinadas livremente com os operadores acima.
Funções Disponíveis
As funções abaixo podem ser utilizadas nas expressões booleanas para definir as condições de ativação dos diálogos. Todas retornam valores booleanos e podem ser combinadas com operadores lógicos.
| Função | Descrição e Parâmetros |
|---|---|
| |
| |
| hasItem |
|
| |
| isNPCListening |
|
| isRaining |
|
| isUnderRain |
|
Exemplos de Condição
@condição: hasMilestone("OUVIU_GRITO") && isUnderRain()
@condição: hasAnyMilestone("VIU_SANGUE", "ACHOU_COLAR") && isNPCListening("Caçador")
@condição: !hasMilestone("TESTEMUNHA_SILENCIADA") && hasItem("CHAVE_DO_PORTAO")
Condições Automáticas
Algumas condições já são consideradas por padrão em todos os diálogos e não devem ser escritas na condição do diálogo. São elas:
- Todo diálogo só será exibido para o jogador se ele ainda não tiver acontecido. Para isso o sistema verifica automaticamente se ele não tem o 'Marco do Diálogo';
- Todo diálogo só é exibido quando o jogador está próximo ou em conversa com o NPC presente na ficha do diálogo, assim não é necessário condiconar se o NPC está ouvindo ou presente.
Exemplos
A seguir exemplos de diálogos para referência.
Diálogo de Exemplo: Algo Incomum na Floresta
@condição: isNPCListening("Lenhador") && hasAnyMilestone("OUVIU_SOBRE_FANTASMAS", "VIU_SOMBRA_NA_FLORESTA", "LEU_LORE_ESPIRITOS")