Implementação de Missões Personalizadas e Árvores de Diálogo no Cataclysm-DDA Utilizando JSON

O motor de missões do Cataclysm-DDA é inteiramente orientado por dados, o que permite a criação de narrativas complexas e interações com NPCs sem a necessidade de compilar o código-fonte em C++. Toda a lógica de missões e diálogos é gerenciada através de arquivos JSON localizados no diretório data/json/npcs/. Este guia detalha a arquitetura desses arquivos e o processo de implementação de novas linhas de enredo.

Arquitetura dos Arquivos de Missão

A base do sistema de missões reside na interação entre dois tipos principais de objetos JSON: as definições de missão e os tópicos de diálogo.

Definição de Missão (mission_definition)

Este objeto estabelece os parâmetros fundamentais da tarefa, incluindo identificadores, metadados de exibição e gatlihos de estado. Abaixo, um exemplo de estrutura reescrita para uma missão de reconhecimento:

{
  "id": "MISSION_WASTELAND_RECON_ALPHA",
  "type": "mission_definition",
  "name": { "str": "Setor de Reconhecimento" },
  "description": "Investigue as anomalias relatadas no bunker abandonado e recupere os discos de dados criptografados.",
  "goal": "MGOAL_FIND_ITEM",
  "difficulty": 3,
  "value": 1500,
  "start": { "assign_mission": "MISSION_WASTELAND_RECON_ALPHA" },
  "end": { "u_spawn_item": "data_disk_encrypted" }
}

Tópicos de Diálogo (talk_topic)

Os tópicos de diálogo controlam o fluxo de conversação. Cada nó possui um identificador único que é referenciado por respostas anteriores, formando uma árvore de decisão. As respostas podem desencadear efeitos colaterais, como atribuir a missão ao jogador:

{
  "id": "TALK_WASTELAND_RECON_OFFER",
  "type": "talk_topic",
  "dynamic_line": "Preciso de alguém para verificar o bunker ao norte. Os relatórios de radiação estão inconsistentes.",
  "responses": [
    {
      "text": "Deixe comigo. O que exatamente devo procurar?",
      "effect": { "assign_mission": "MISSION_WASTELAND_RECON_ALPHA" },
      "topic": "TALK_WASTELAND_RECON_ACCEPTED"
    },
    {
      "text": "A recompensa vale o risco? Preciso de mais detalhes.",
      "topic": "TALK_WASTELAND_RECON_NEGOTIATE"
    }
  ]
}

Fluxo de Implementação

1. Preparação do Ambiente

Antes de iniciar, certifique-se de que sua estrutura de diretórios esteja intacta. Crie um novo arquivo JSON dentro de data/json/npcs/ ou edite um existente. O uso de editores com validação de sintaxe JSON, como VS Code, é altamente recomendado para evitar erros de formatação que podem impedir o carregamento do jogo.

2. Construção da Árvore de Diálogo

Uma missão funcional requer, no mínimo, três nós de diálogo distintos:

  • Oferta (OFFER): O ponto de entrada onde o NPC apersenta a tarefa.
  • Consulta (INQUIRE): O diálogo acionado quando o jogador fala com o NPC enquanto a missão está ativa.
  • Conclusão (COMPLETE): O nó que valida a entrega dos itens ou o cumprimento do objetivo.

3. Manipulação de Geração de Mapa

Para missões que exigem locais específicos no mundo, o parâmetro update_mapgen permite injetar estruturas ou terrenos dinamicamente durante a atribuição da missão:

"update_mapgen": {
  "place_terrain": [ { "ter": "t_door_metal_c", "x": 14, "y": 18 } ],
  "place_nested": [ { "chunks": [ "bunker_recon_chunk" ], "x": 12, "y": 12 } ]
}

4. Validação e Testes

Após salvar as alterações, inicie o jogo e utilize o menu de depuração (acessível via tecla de atalho configurada ou parâmetro de inicialização). A opção de "Missões" no menu de debug permite atribuir, concluir ou falhar missões instantaneamente, acelerando o ciclo de testes das ramificações de diálogo.

Lógica Avançada: Condições e Efeitos

O sistema suporta avaliação de estado complexa para restringir opções de diálogo ou executar múltiplas ações em sequência.

Avaliação de Condições

Utilize blocos lógicos para verificar o inventário do jogador ou o estado de variáveis globais antes de exibir uma resposta:

"condition": {
  "and": [
    { "u_has_mission": "MISSION_WASTELAND_RECON_ALPHA" },
    { "u_has_item": "data_disk_encrypted", "count": 1 }
  ]
}

Execução de Efeitos em Cadeia

Os efeitos podem ser encadeados em arrays para processar a remoção de itens, alteração de variáveis de estado e finalização da missão em uma única interação:

"effect": [
  { "u_consume_item": "data_disk_encrypted" },
  { "u_add_var": "recon_alpha_status", "value": "completed" },
  { "u_spawn_item": "FMCNote", "count": 5 },
  { "finish_mission": "MISSION_WASTELAND_RECON_ALPHA", "success": true }
]

Empacotamento como Módulo (Mod)

Para distribuir as missões criadas, isole os arquivos JSON em uma pasta dedicada dentro do diretório data/mods/. Crie um arquivo modinfo.json na raiz dessa pasta para definir os metadados do módulo, incluindo identificador único, nome de exibição e dependências de outros mods, caso sua missão utilize itens ou locais externos. Isso garante que o conteúdo seja carregado de forma modular pelo gerenciador do jogo.

Tags: Cataclysm-DDA JSON Modding Game-Design NPC-Dialog-Tree

Publicado em 7-15 02:55