Neverwinter Nights 2. Скрипты, диалоги, триггеры
В прошлой статье (опубликована в февральском номере «Игромании» за этот год), посвященной созданию новых модулей для Neverwinter Nights 2 , мы рассмотрели основные принципы создания уникальных персонажей и предметов, а также изменили ряд стандартных атрибутов модуля. Сегодня, в завершающей статье по редактированию игры, мы детально разберем написание диалогов и скриптов, научимся использовать триггеры.
Дар речи
Игровой модуль без квестов и диалогов — мертвый модуль. Кому интересно перемещаться по уровню, на котором нельзя выполнить ни единого квеста, невозможно поговорить с персонажами? Пустая трата времени. Поэтому совершенствовать модуль мы начнем именно с написания диалогов. Они используются, во-первых, при беседе с NPC, что называется, о жизни, во-вторых, при различных операциях купли/продажи, в-третьих (и это самое важное), для получения квестов и кратких пояснений к заданиям.
Школа написания диалогов
Для создания нового диалога выберите пункт меню File/New/Conversation. Вы увидите, что центральное поле приложения преобразуется в окно редактирования диалога, а окно 3D-вида уйдет на второй план. В NWN 2 во всех диалогах на каждую реплику NPC приходится только один комментарий главного героя.
Для создания простейшего разговора перейдите в таблицу, занимающую верхнюю область окна Conversation1 , щелкните по свитку Root правой кнопкой мышки и в контекстном меню выберите пункт Add. Откроется новое окно, предназначенное для ввода текста NPC. Выберите из списка, находящегося под меткой Enter the NPC Greeting , язык, на котором вы собираетесь писать сообщение. После этого перейдите в поле с базовым комментарием <
Нажатие кнопки Ok завершит формирование первой строки диалога. Чтобы создать ответ со стороны игрока, кликните мышкой по строке с диалогом правой кнопкой мышки и в выпадающем меню выберите пункт Add. Перед вами снова появится окно ввода сообщения — щелкните по строке таблицы, содержащей комментарий игрока, правой кнопкой мышки и в контекстном меню в очередной раз выберите пункт Add.
Обратили внимание, что диалог строится в виде «лесенки», где каждый последующий элемент связан только с предыдущим? Комментарии NPC выделены красным цветом, а ответные реплики главного героя окрашены в синий. Если вам понадобится поставить подряд несколько реплик какого-либо NPC или главного героя, то для этого необходимо добавить N-ной строкой диалога пустой блок, то есть не вводить текст в поле <
После этого ответная реплика либо со стороны игрока, либо со стороны NPC (в зависимости от того, после какой строки вы добавили пустое сообщение) примет название Continue. Если вы щелкнете правой кнопкой мышки по этой строке и в выпадающем меню выберете пункт Add , перед вами откроется окно, в котором будет предложено ввести следующую реплику персонажа (ему соответствовала строчка до блока Continue). Для того чтобы завершить написание диалога, добавьте в конец беседы пустой блок — он примет название End Dialog.
Оставь свой след
Часто случается так, что вам необходимо оставить авторский комментарий в определенной строке разговора персонажей. Понятно, что комментарий не должны увидеть геймеры. В этом случае все примечания нужно заключать между символами | | или между знаками { } , например: |отличная реплика| , {ужасное ответное сообщение, надо подумать, как его можно откорректировать}.
Предположим, что в процессе написания диалога вы решили несколько видоизменить слова персонажей. Как быть в такой ситуации — удалять старые строки разговора и заменить их новыми? Необязательно. Достаточно выделить необходимую строку диалога и модифицировать исходный текст сообщения на панели в правой нижней части окна Conversation.
Enter a choice
Если в вашем модуле много квестов, то, скорее всего, вам придется писать сложные диалоги, в которых игрок может выбрать тот или иной ответ из предложенных вариантов. Для создания серии комментариев главного героя выберите реплику со стороны NPC (то есть вопрос), на которую должен будет отреагировать главный герой. После этого кликните по ней правой кнопкой мышки и в выпадающем меню выберите пункт Add , чтобы добавить ответную реплику.
Проделайте описанную манипуляцию нужное количество раз. В итоге вы получите конструкцию вида: [реплика NPC]: [Ответ игрока 1], [Ответ игрока 2]…[Ответ игрока n]. От каждой ответной реплики главного героя может отходить сколько угодно подблоков с сообщениями NPC.
Пути неисповедимы
Для нормального перемещения персонажей NWN 2 по локациям необходимы вейпойнты — специальные контрольные отметки, задающие маршрут движения. Их отсутствие приводит к дезориентации героев; они начинают бродить по уровню, как зомби, сшибая на своем пути все предметы, а в конце концов утыкаются носом в какую-нибудь стену и стоят, судорожно перебирая ногами. Некоторые персонажи так и вовсе замирают в месте своего создания.
Рассмотрим вкратце процесс формирования новых путевых отметок. Перейдите на закладку Blueprints в правой нижней части редактора и щелкните левой кнопкой мышки по кнопке Waypoints на панели Blueprints. Выберите необходимый вейпойнт из списка и поместите его на карту уровня. Для построения четкого маршрута движения используйте только объекты одного типа. Как правило, при создании новых маршрутных сеток используются три типа вейпойнтов из категории Empty :
Waypoint — базовая контрольная отметка, позволяет задать простой маршрут движения персонажей;
Block Waypoint — контрольная точка для блокировки перемещения выбранного NPC на заданном участке;
Generic Stop Waypoint — вейпойнт, в зоне которого будут останавливаться все существа.
Скрипты
И все вроде бы замечательно, но такие вот сложные диалоги начнут работать только тогда, когда к определенным строкам будут привязаны специальные скрипты. Рассмотрим наглядный пример — фрагмент разговора игрока с ручным драконом:
Реплика дракона: « Как жизнь, дружище? »
Ответ игрока №1: « Все просто ужасно, хоть помирай ».
Реплика дракона на ответ №1: « Сказано — сделано » (главный герой после этого должен погибнуть)
Ответ игрока №2: « Все в норме, жаль вот только, что денег раздобыть негде ».
Реплика дракона на ответ №2: « Не вопрос! Лови немного золотишка » (в кошельке должно прибавиться денег).
По сути, сам разговор в данной ситуации представляет собой некую пустышку. Ну выберет игрок один из вариантов ответа, ну получит комментарий персонажа — и что? Никакие действия в подобной ситуации, как вы понимаете, автоматически не выполнятся.
Чтобы оживить конструкцию, необходимо закрепить за определенными строками рассмотренного диалога так называемые события и действия. Для этого выделите, скажем, реплику дракона на ответ №1 и перейдите на панель, занимающую левую нижнюю часть окна редактирования диалога.
Если нужно выполнить проверку определенных условий при выборе игроком текущей строки, перейдите на закладку Conditions , щелкните по кнопке Add и добавьте в табличное поле условие из списка. Присоединение различных действий к выбранной строке производится аналогичным образом (перед добавлением скриптов вы должны переместиться во вкладку Actions ).
Заговори со мной!
Диалог написан: тексты составлены, условия и действия заданы. Осталось лишь закрепить созданный разговор за каким-либо обитателем мира NWN 2, точнее говоря, за персонажем, прописанным на карте нашего модуля. Первым делом сменим название нашего диалога со стандартного (имеет вид Conversation1 ) на более простое, например, Igro-bazar1. На панели Areas, под которую отведена левая верхняя часть редактора Obsidian Neverwinter Nights 2 Toolset , перейдите во вкладку с изображением шарика и буквы C ( Conversations ).
Выберите из списка свой диалог, щелкните по нему правой кнопкой мышки, в выпадающем меню выберите строку Rename. Далее выделите в окне 3D-вида на своем уровне определенное существо. После этого на панели свойств персонажа (по умолчанию занимает правую верхнюю область редактора), во вкладке Properties отыщите блок Behavior и измените значение параметра Conversation на имя вашего диалога.
Триггеры
Пока нам приходилось работать только с видимыми объектами — с персонажами, предметами инвентаря, элементами окружения (декорациями) и некоторыми другими визуальными формами. Сейчас же мы разберемся со специальными компонентами, именуемыми триггерами, которые в отличие от вышеописанных объектов в игре не отображаются.
Что же такое триггер? Это специальная контрольная отметка, предназначенная для активации определенного действия; срабатывает триггер только тогда, когда игрок оказался в зоне его действия. К примеру, триггеры могут использоваться для активации ловушек, диалогов, телепортации главного героя между игровыми локациями.
Редактор позволяет использовать на картах как заранее изготовленные разработчиками NWN 2 триггеры, так и компоненты собственного производства. Мы ограничимся использованием шаблонных триггеров, поскольку написание уникальных требует хорошего знания программирования, которое есть не у всех. Рассмотрим работу двух основных триггеров с названиями Speak Trigger и Transition Trigger.
Speak Trigger
Этот триггер представляет собой чекпойнт для активации беседы с тем или иным обитателем мира NWN 2 (NPC подбежит к вам, и откроется окно разговора). Для того чтобы поместить Speak Trigger на игровую локацию, откройте уровень в своем модуле, перейдите на закладку Blueprints в правом нижнем углу редактора и щелкните по кнопке Triggers на панели Blueprints. Выберите из списка компонент Empty/Speak Trigger и обозначьте щелчками левой кнопки мышки в окне перспективы границы триггера, нажмите клавишу Esc.
В итоге вы получите совокупность линий — это может быть квадрат, прямоугольник, треугольник или какая-то нестандартная фигура. Когда игрок зайдет в данную зону, триггер должен активироваться, однако в нашем случае этого, увы, не произойдет — триггеру в соответствие не поставлен определенный NPC, который должен завести разговор с игроком, и не обозначены другие ключевые параметры.
Давайте зададим ряд базовых атрибутов, чтобы триггер в игре сработал. Выделите его в окне 3D-вида и на панели свойств компонента ( SpeakTriggerProperties ) зайдите во вкладку Properties. В поле свойств отыщите категорию Scripts и кликните левой клавишей мышки по кнопке с символом многоточия (напротив метки Variables ). Перед вами появится новое окно с заголовком Collection , разделенное на две части — левую и правую. Первая представляет собой список всевозможных параметров, а левая — поле для редактирования атрибутов выбранного из левой колонки элемента. Рассмотрим вкратце составляющие каждого из основных параметров.
NPC_Tag. Данный элемент определяет тег или имя персонажа (его можно посмотреть в поле свойств выбранного NPC), которое нужно вбить в поле Value String в правой колонке окна (остальные параметры редактировать не нужно);
Conversation. В этом поле напротив метки ValueString устанавливается файл диалога, созданный вами ранее. В нашем случае он имеет довольно простое имя Igro-bazar1. Заметьте, что триггер не будет функционировать в игре, если вы оставите данное поле пустым;
Run. В данной группе параметр Valueint определяет тип походки существа, которое начинает разговор. Скажем, при значении 1 NPC побежит встречать игрока, при 0 — создание медленно доползет до главного героя, а если в поле Valueint внести цифру -1 , то существо и вовсе не подумает подходить к главному герою — подождет, пока игрок сам до него доберется.
TalkNow. Параметр Valueint в данной категории отвечает за то, когда будет активирован диалог, — сразу же после попадания игрока в зону триггера или же после того, как персонаж встретит главного героя. Если вас устраивает первый вариант, то вам необходимо внести в поле Valueint значение 1 , если второй — 0.
MultiUse. Valueint этого блока определяет множественность использования триггера. Если вы хотите, чтобы главный герой за всю игру мог лишь единожды активировать триггер, необходимо изменить значение данного атрибута на 0. Чтобы игрок мог сколь угодно раз вести беседы с NPC, пропишите в поле Valueint цифру 1.
Переправа, переправа — берег левый, берег правый…
Любой качественный модуль, как правило, состоит из двух и более игровых локаций: в нем есть несколько уровней с открытыми и замкнутыми пространствами. Для перемещения между зонами используются специальные триггеры типа New Area Transition из категории Empty. Рассмотрим на практике механизм их работы.
Первым делом поместите на карту триггер New Area Transition — делается это точно так же, как и в случае со Speak Trigger. Затем выделите компонент в окне перспективы и на панели свойств триггера зайдите во вкладку Properties. В поле свойств перейдите в секцию Behavior. Разберем основные параметры.
Атрибут Link Object Type позволяет установить место, куда будет телепортирован главный герой; возможные варианты — никуда не перемещать игрока ( No Transition ), поместить его к определенной двери ( Transition to a Door ) или вейпойнту ( Transition to a Waypoint ). Параметр Linked должен содержать название (тег) двери или путевой отметки, к которой будет перемещен персонаж. Следующий атрибут, требующий внимания, — Party Transition , что переводится дословно на русский язык как « партийный переход ».
Если вы установите значение параметра True , то все спутники главного героя будут отправлены в новую локацию при условии, что триггера достигнет хотя бы один член группировки (будь то хоть игрок, хоть персонаж, управляемый AI). Если прописать значение False , то при перемещении одного из соратников все его друзья, не добравшиеся до зоны триггера, так и останутся на исходном уровне.
Под авторские комментарии, которые будут скрыты от глаз геймеров, в категории Behavior отведено специальное поле Localized Name.
Скриптинг
Мы научились создавать красивые уровни, уникальных персонажей и орудия убийства, писать диалоги и работать с триггерами. От создания сложных и интересных модулей нас отделяет ровно один шаг: остается освоить основы скриптописания под NWN 2.
Создание новых скриптов проходит на панели Scripts , активировать ее можно на одноименной вкладке ( S — Scripts ) на панели в левой верхней части редактора. Поскольку процесс написания скриптов со времен первой NWN практически не изменился (разве что функций новых с десяток-другой добавилось), мы не станем рассказывать вам о теории скриптописания, а просто выложим на диск (в раздел «Игрострой») статью « Ноктюрн влюбленного зомби. Часть третья », из которой вы сможете почерпнуть всю необходимую информацию. В будущем мы, вероятно, расскажем обо всех скриптовых ноу-хау либо в рамках полноценной DVD-статьи, либо в игростроевской « Горячей линии ».
* * *
В трех статьях цикла мы рассмотрели основные принципы работы в редакторе Obsidian Neverwinter Nights 2 Toolset — научились создавать новые карты для игры с продвинутой ландшафтной архитектурой, населять их нестандартными персонажами, работать с триггерами и писать диалоги. Внимательно изучив материалы трех статей по модулестроению для NWN 2, вы сможете разработать модуль любой сложности — от простенькой карты до собственного продолжения игры, действие которого может развернуться, допустим, в далеком будущем.