# 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;