Вход
Приветствую Вас Гость
 

easy.dialog

Подробное руководство по использованию модуля, с примерами. Страница первая

Подключение

Предполагается, что вы уже пробовали писать игры на QSP, знаете основные команды и, возможно, знаете, что такое функции, переменные и массивы и как формируется html-форматирование. Впрочем, можно обойтись и без последнего.

Модуль поставляется в комплекте с библиотекой easy.math.qsp и без неё работать не будет.

Чтобы подключить модуль к своей игре, нужно:

  1. Скачать архив и извлечь его содержимое в папку с вашей игрой. В папке с вашей игрой должна появиться папка "lib".
    • После знакомства с примерами файл "game.easy.dialog.qsp" можно удалить.
  2. Проверить в папке "lib" наличие файлов "easy.dialog.qsp" и "easy.math.qsp".
  3. Открыть файл своей игры (например с помощью QGen) и на самой первой локации ввести две строки:
     addqst 'lib/easy.dialog.qsp'
    addqst 'lib/easy.math.qsp'
  4. Сохранить свою игру.

Теперь при запуске вашей игры, модуль "easy.dialog" и библиотека "easy.math" будут подключаться к игре автоматически.

Внимание!!! При подключении библиотек к своей игре будьте внимательны. К игре добавляются только те локации, названия которых отсутствуют в вашей игре. Просмотрите список локаций в подключаемых библиотеках, чтобы предупредить совпадения имён.

Простые диалоги

Чтобы использовать модуль, нужно знать, как написать диалог, чтобы модуль вас понял.

Диалоги пишутся предельно просто и не требуют специальных знаний, кроме тех, которые Вы получите сейчас.

Диалог - это разговор, как правило, двух персонажей. В игре один персонаж - это герой, которым управляет игрок, другой персонаж - неиграбельный, т.е. игрок условно не может им управлять. Персонаж игрока мы будем называть героем, а персонаж, с которым герой вступает в диалог, просто персонажем, актёром, или неписью (от англ. NPC - non-playable character).

Фразы, доступные игроку (и соответственно герою), должны выводиться в виде списка действий, доступных для выбора и выполнения. А фразы актёра должны выводиться непосредственно на экран автоматически. Собственно это все различия между одним типом фраз и другим.

Итак, у нас есть фразы NPC, которые выводятся автоматически, и фразы героя, которые появляются в виде действий и не используются в диалоге, пока игрок не выберет одну из них. Оба типа фраз помещаются между специальными метками. Я называю их тегами.

{: Фраза, которую будет произносить неиграбельный персонаж :} — фигурная скобка, двоеточие, потом идёт реплика персонажа, потом двоеточие и снова фигурная скобка. "{:" - открывающий тег. ":}" - закрывающий тег. Всё, что произносит актёр, помещаем между такими тегами. Каждая отдельная фраза должна помещаться между тегами. Например:

 {: Сегодня прекрасная погода. :}
{: Не думал я, что будет дождь! :}
{: На город набегают тучи, осенний сплин кого-то мучит... :}

[: Фраза, которая превратится в действие, а когда игрок выберет действие, станет репликой в диалоге. :] — квадратная скобка, двоеточие, потом идёт реплика героя, снова двоеточие, квадратная скобка. "[:" - открывающий тег, ":]" - закрывающий тег. Всё, что может сказать герой, помещаем между такими тегами. Опять же, каждая отдельная фраза - в отдельных тегах. И каждая такая фраза будет выведена одним действием.

Фразы героя и актёра можно располагать одна в другой, или несколько в одной. Мало того, можно располагать фразы одного типа друг в друге.

Зачем это нужно? А вот зачем: диалог собирается и распознаётся по принципу вопрос-ответ. Допустим, реплика актёра - это вопрос, а реплика героя должна быть ответом на вопрос. Но игроку можно предложить несколько вариантов ответов на вопрос. Чтобы написать такой простой диалог: вопрос и несколько ответов, - делаем так:

Первым делом пишем вопрос. Например, непись должна спросить героя "Как тебя зовут?". Пишем:

 {: Как тебя зовут? :}
 

А теперь ответы на вопрос "вкладываем" в вопрос:

 {: Как тебя зовут? 
   [:Вася:]
   [:Петя:]
   [:Не твоё дело!:]
   [:Я забыл...:]
:}

   На экран выведется реплика актёра "Как тебя зовут?" и четыре действия. При щелчке на любом из действий, герой будет произносить фразу, написанную в этих репликах. Например, если игрок выберет действие "Я забыл...", на экран выведется фраза героя "Я забыл...".

Как сделать так, чтобы по щелчку на действии произносил фразу не только герой, но и актёр? Всё тем же способом. "Вложить" реплику актёра в реплику героя. Разовьём предыдущий пример:

 {: Как тебя зовут? 
   [:Вася:]
   [:Петя:]
   [:Не твоё дело!:]
   [:А тебя как?
      {:Меня Васькой Пупкиным кличут:}
   :]
:}

Таким образом, вкладывая реплики друг в друга, вы можете создавать большие ветвистые диалоги. Для примера, вот небольшой ветвистый диалог, на котором отрабатывались первые сборки модуля:

 {:
   Как вас зовут?
   [:
      Меня зовут Вася.
      {:Вас зовут Вася?
         [:Да, меня зовут Вася.
            {:да ну нафиг:}
            [:
            нет. чистая правда
            :]
         :]
         [:Нет, никто меня так не зовёт:]
      :}
      {:
         Это правда, что вас зовут Васей?
         [:Правда
         :]
         [:Неправда:]
      :}
   :]
   [:
      Меня зовут Петя.
      {:
         Вас зовут Петя?
         [:Да{:Как это удобно!:}:]
         [:
            Нет
            {:Вас зовут не Петя? Как неудобно!:}
         :]
      :}
      {:
         Это правда, что вас зовут Петей?
         [:Правда:]
         [:Неправда:]
      :}
      {:Неужели в самом деле Петей Вас зовут?
         [:В самом деле:]
         [:Нет, не в самом:]
      :}
   :]
:}

Обратите внимание на то, как записаны фразы, которые должны выводиться на экран в диалоге. Перед ними есть пустые строки, символы пробелов и табуляций. Модуль сам очистит фразы от мусора и уберёт пустые строки перед фразой и после неё, а так же пробельные символы перед каждой строкой и после неё. То есть даже если вы вставите фразу между тегами вот так:


 {:







                  Как вас зовут?






:}

То на экран всё равно будет выведено: "Как вас зовут?" без пробелов перед репликой и пустых строк.

Запуск диалога

Теперь, когда Вы знаете, как составлять диалог, нужно освоить его запуск и уяснить некоторые особенности вывода диалога на экран.

Текст диалога лучше присвоить какой-нибудь переменной. Например:

 $диалог_старушки = "{:Добрый вечер, милок.
   [:
      Здравствуйте, бабуся!
   :]
   [:
      Девушка, мы разве знакомы?
   :]
:}"

Далее делаем вызов диалога командой gosub

 gosub 'dialog.int', $диалог_старушки
 

gosub - это команда обращения к локации. Плеер обращается к локации "dialog.int", выполнет на ней весь код и возвращается обратно. После запятой стоит переменная $диалог_старушки, в которую, как вы помните, мы поместили диалог. Значение этой переменной будет передано локации "dialog.int" для обработки.

При вызове диалога автоматически очистится окно основного описания, окно дополнительного описания и список действий. Когда диалог будет закончен, всё восстановится обратно: и основное и дополнительное описание, и действия даже.

Наверх