DIALOGUE. Знакомимся с диалогами (1)

Предисловие

В ZDoom есть поддержка диалогов, как это было в Strife. С её помощью, вы сможете разговаривать с NPC.

В этом уроке, мы изучим основы построения диалогов.

Диалог из Strife

Создавать диалог, можно двумя способами:

  1. Изменяя DIALOGUE в Doom Builder.
  2. Создавая файл типа «DIALOGxx», где «xx» — номер карты (например DIALOG01, DIALOG02).

Мы будем использовать 1 способ, потому что он проще.

Подготовка

Для начала, поставьте на карту ревенанта, и установите у него флаг Friendly и Stand Still.

Теперь, ревенант вам не навредит. Хорошо, приступим к написанию диалога.

Создаем свой первый диалог.

Перепишите следующий код к себе в DIALOGUE:

namespace = "ZDoom";

conversation
{
  actor = "Revenant";
  page
  {
    name = "Random Doomer";
    dialog = "Doom is a old game, why do you play it?";
  }
}

Теперь, разберем по порядку.

namespace = "ZDoom";

Стандарт USDF (формат диалогов из Strife), требует указания пространства имен (namespace). Поэтому, данная строчка является обязательной.

Далее разберем структуру блока conversation (разговор). Синтаксис у этого блока, следующий.

conversation
{
  actor = "название_актора";
  page
  {
    name = "имя_в_диалоге";
    dialog = "Сообщение_в_диалоге";
  }
}

В этой строке:

actor = "название_актора";

Задается актор, с которым можно разговаривать.

В блоке page, как раз таки, и происходит все общение. Здесь задается имя собеседника (name), и сообщение (dialog).

page
{
  name = "имя_в_диалоге";
  dialog = "Сообщение_в_диалоге";
}

Кстати, между страницами (page), можно переключаться, но об этом позже.

Как вы могли заметить, в конце каждой строки ставится «;«, не забывайте об этом.

С кодом разобрались, тестируем.

Выбираем вариант ответа.

Также, в DIALOGUE есть блок choice, задающий вариант ответа. Теперь, измените код DIALOGUE на следующий.

conversation
{
  actor = "Revenant";
  page
  {
    name = "Random Doomer";
    dialog = "Doom is a old game, why do you play it?";
    choice 
    {
      text = "choice1";
      yesmessage = "hi doomer";
    }
    choice 
    {
      text = "choice2";
      yesmessage = "zavardo";
    }
  }
}

Блок choice задается внутри блока page (как и все элементы диалога). И имеет, следующий синтаксис.

choice 
{
  text = "вариант_ответа";
  yesmessage = "сообщение_при_выборе_ответа";
}

Комментарии излишни, синтаксис предельно ясен. Ладно, время тестить.

Заключение

Диалоги позволяют ввести в Doom, новые RPG элементы. Они являются глотком свежего воздуха в создании карт. Диалоги просты, но в то же время — ограничены. Dialogue никогда не сравнится с ZScript, вот для примера, диалог на ZScript:

Но, и порог вхождения у ZScript — выше. Поэтому изучать Dialogue или нет, это ваш выбор.

Итоговый результат.