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