---
# System prepended metadata

title: Toda a informação sobre diálogos

---

# Toda a informação sobre diálogos

## Lista de nós: 

### fact 

Um nó simples que apenas contém um nome e uma descrição breve do que é. Útil para manter noção de onde vem de forma mais intuitiva, e irá ser usado no *autocomplete* de *effects*. Exemplo: 

```
fact f1
[
    "Triggered after going to the house and answering not to go inside."
]
``` 

### rule 

Lista de requesitos para considerar um nó de diálogo como possível. Tem que poder lidar com contadores, e negação de factos, ou até logica de *and* e *or*. Exemplo:

```
rule r1 
[
    f1 
    counter > 0
    not fact_2
]
```

### atomic_line

```
atomic_line a1
[
    text "Do you want shit in my ass"
    audio assets/a1.ogg
    time 2 
    delay 1
]
```

### line 

Um nó da line a ser dita por alguma personagem, pode ser o próprio protagonista. Contém informação da *voice line*, e opcionalmente do tempo que demora, ou de um delay até ser dita (serve como ponto de espera). Exemplo:

```
line l1
[
    atomic_lines { en: [a1, a2, a3], pt: [pt1, pt2, pt3] }
    audio { en: [assets/line1.ogg, assets/line2.ogg, assets/line3.ogg] }
]
```

### dialog 

Nó mais importante no que toca a flow da conversa, porque é este que agrupa toda a informação de uma line, e diz quais são os nós a seguir. Estes nós estão numa lista, e irão ser escolhidos com base no número de rules especificas que dão check. Quanto maior o número, mais específico é, melhor opção se torna. Exemplo:

```
dialog d1
[
    char Tim
    line l1
    next d2 d3 d4
    effects f1 counter+=2
    rules r1 r2 (opcional)
    time 2 (opcional, em segundos)
    delay 1 (opcional, em segundos)
]
```

### input

Nó de *input* que simboliza uma opção, juntamente com um possível efeito que poderá advir daí, e restrições para essa opção. Se as restrições não forem cumpridas, nó não aparece na lista de opções. Exemplo:

```
input i1
[
    text "How was I supposed to know?"
    effect e1 e2 (opcional)
    rule r1 (opcional)
]
```

### option

Nó simples de opções, que agrupa uma lista de possíveis inputs, e diz quais são os possíveis nós seguintes de diálogo para cada input.

```
option o1
[
    i1 d2 d3
    i2 d4 d5 d6
    i3 d2 d5
]
```

#### No fim de tudo isto, é tudo exportado para um JSON que é usado como a fonte para todo o script do jogo. Não deverá haver problemas de performance, porque fica um dicionário com um tempo de lookup de O(1).

# Tool para isto

Parte mais importante de agora seria mesmo ter o script que exportasse isto tudo para JSON para ser lido pelo DialogManager, depois seria fazer uma ferramenta para agilizar o processo de escrever o diálogo.

Possibilidades: 
- Plugin para o VSCode (possivelmente a mais simples);
- Site dedicado para isto, com capacidade de exportar;
- Plugin para o Godot (a mais útil);

Features mais importantes: 
- Shortcuts para adicionar nodes, como `Ctrl+Shift+A` e aparece uma prompt para adicionar nós;
- Autocomplete de rules e effects com base no ficheiro dedicado a eles;
- Conseguir ir para a página da regra ou efeito de onde é referenciada de forma simples, sem necessitar de pesquisar;