logo.aleks Versus Поиск по сайту:
  Главная | Регистрация | Вход   Приветствую Вас Гость | RSS
Майнпаги
тыц
Стихи.РУ
Проза.РУ
Aleks Versus на LI
Я на Самиздате
читательский дневник
На Книготопии

easy.dialog

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

Подключение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   

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

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

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

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

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

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

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

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

   {:







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






   :}

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

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

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

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

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

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

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

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

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

> Далее - настройки диалога




 Aleks Versus'easy.libraries'2014
Aleks Versus'GAM'RUS'2014
 
Copyright MyCorp © 2018
Конструктор сайтов - uCoz
aleksversus@mail.ru
lex666endless@rambler.ru
437337904
Наверх