Лучшие компьютерные игры

СОЗДАЁМ ИГРУПАНЕЛЬ ИНСТРУМЕНТОВ

Автор материала:
Ричард Псмит (Андрей Ленский)
Опубликовано в журнале
«Лучшие компьютерные игры»
№6 (67) июнь 2007

Neverwinter Nights 2
Редактор Neverwinter Nights 2
Глава вторая. Разговоры, задания, ролики

Он начал на бедного папу кричать,

А папа Фернанде не мог отвечать,

Не мог, не умел отвечать!

В. Высоцкий, «Алиса в Стране Чудес»

В предыдущей статье мы обсудили редактирование ландшафтов и интерьеров, расстановку предметов и существ, редактирование внешности и боевых свойств монстров. Этого, в принципе, достаточно, чтобы сделать подземелье или дикий лес, полный разнообразной нечисти. Но в ролевой игре никуда не деться без разговоров. Даже если нас интересует исключительно бой, надо хотя бы выдать герою задание и вручить награду за его выполнение, не так ли? Вот этой теме мы и посвятим сегодняшнюю статью.

Из нее вы узнаете:

  • что такое дерево разговоров и как его редактировать;
  • как вставлять условия;
  • как выдавать задания, награды и осуществлять другие действия, связанные с диалогом;
  • как делаются диалоги-ролики — те, где персонажей показывают крупным планом, а реплики озвучивают.

На заметку: если вам нужен не полноценный диалог, а фраза вроде «Мне нечего вам сказать» или «Отстаньте, я занят», которая даже не прерывает процесса игры, — то вместо работы с редактором разговоров вам нужно внести эту строчку в параметр Barkstring (буквально — «отгавкивание») персонажа.

Как устроен диалог

Надо было что-нибудь сказать, он сложил в уме фразу и сказал ее глухим голосом:

— Вот какова конклюзия сей конверзации.

Ю. Герман, «Россия молодая»

В инструментарии Neverwinter Nights 2, в левой верхней панели, есть несколько закладок; для работы с местностью и объектами нам нужна была закладка Areas, а для разговоров — Conversations. Точно так же, как в случае с созданием новой области, для создания диалога мы щелкаем по этой панели правой кнопкой мыши и выбираем Add, после чего вводим название диалога.

«Привязка» диалога к конкретному персонажу происходит в окне редактирования этого персонажа — у него есть свойство Conversation, где мы и выбираем нужный диалог из списка созданных нами. Это, к слову, означает, что мы можем без потерь назначить один диалог нескольким существам (например, все десять орков из банды говорят одно и то же — не очень интересно, но иногда практично), а также передать разговор от одного персонажа другому.


Итак, создадим новый диалог. Поначалу он у нас пустой — только вверху красуется слово Root (корень). Правой кнопкой мыши выводится меню, в котором тоже есть команда Add, на этот раз — создать новый узел разговора (в ответ на тот, на котором мы щелкаем правой кнопкой). При этом появляется окошко, где можно ввести строку реплики.

Это важно: в верхней части этого окна есть возможность выбора языка реплики: так вот, ею пользоваться не надо. Это работает корректно только в «фирменной» кампании. Кнопку Edit String Ref трогать также не рекомендуется.

Разговор устроен в виде дерева: пример показан на рисунке. Можно добавлять узлы в любое место разговора.

Посмотрим на структуру готовой беседы. Красные строчки  это реплики существа (будем называть его в дальнейшем собеседником), синие строчки  реплики героя.

Дерево разговоров на экране инструментария показано в том же стиле, что и дерево каталогов на диске; тот же рисунок можно изобразить и в виде разветвленной схемы (см. рисунок).

72KB
Пример диалога в окне инструментария.
46KB
Схема диалога в виде дерева «корнем вверх».

Все нечетные этажи (корень считаем нулевым) — красные, четные — синие.

Щелкнув на любом узле диалога правой кнопкой и выбрав Add, мы добавляем вариант ответа на эту реплику — если это слова героя, то ответ — его собеседника, и наоборот. Если на реплику нет ответов, она будет служить выходом из разговора (и в ее начале будет автоматически проставлен флажок [END DIALOG]).

На заметку: текст реплик дается в формате псевдо-html. Туда можно добавлять некоторые тэги: например, курсив (<i>), жирный шрифт (<b>), цветовое выделение (<color=название_цвета>).

Если вы хотите сделать очень длинную реплику, можно легко разбить ее на части: наберите часть реплики, потом сделайте на нее пустой ответ, а на него ответом послужит остаток задуманной реплики. Пустой ответ будет отображаться в дереве реплик как [CONTINUE].

На заметку: в длинном файле диалога очень не помешают комментарии — чтобы не запутаться потом, если придется его править. Комментарии можно ставить в фигурных скобках ({ }) или в вертикальных чертах (| |).

Вариантов реплик героя в большинстве случаев должно быть несколько — какой интерес делать выбор из одного? А вот NPC вполне достаточно одной реплики, потому что в любом случае он скажет только одну фразу — но их может быть и несколько, если есть дополнительные условия, определяющие выбор.

Условия

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

— А что, если колокольчик не прозвонит? — громко спросил Фисбен.

— Тогда сработает второй, и они узнают, что первый не зазвонил и...

М. Уэйс, Т. Хикмен, «Драконы зимней ночи»

Показанный на рисунке пример — это заготовка диалога с трактирщиком.

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

26KB
Список доступных условий разнообразен и легко понятен, если вы знаете английский. Его можно расширить — описать собственные условия; но для этого придется обратиться к скриптам.

Если бы трактирщик был знаком с героем, можно было бы вставить его имя в текст. Для этого существует специальный механизм, называемый «знаки» (tokens). Внизу окошка редактирования реплики, под полем для реплики, есть окошко выбора и кнопка Insert  там найдутся имя героя (FirstName), полное имя (FullName), а также еще ряд полезных вещей... увы, в основном полезных для англоязычных пользователей, потому что предугадать их работу в локализованной версии игры довольно непросто.

Но наш трактирщик видит героя впервые, а потому придется выбирать нейтральное обращение. Скажем, «сэр»... Только вот что делать, если персонаж женского пола?

Ответ прост: делаем две реплики, одна — в расчете на мужчину, другая — на женщину. И вставляем условие, при котором реплика прозвучит.

Внизу, под экраном текста, есть кнопка Add  она нужна для добавления скриптов и условий (убедитесь, что закладка внизу окна скриптов стоит в положении Conditions). В окошке Script выбираем gc_is_male (условие истинно, если герой — мужчина). Обратите внимание, что справа от соответствующей реплики в колонке Condition (условие) появилось gc_is_male. Кстати, можно задать и более сложное условие: для этого надо внести несколько скриптов и соединить их логическими действиями And или Or (обратите внимание на поля слева от названия скрипта в панели выбора скрипта).


Пониже нам приходится уже от лица героя использовать по отношению к себе глагол прошедшего времени (то есть дать две разные реплики в зависимости от пола). Сделано это примерно так же, но с одним важным отличием: в случае с трактирщиком скрипт-условие стоит только перед первой репликой, а здесь — перед обеими. В чем разница?

О пользе вежливости

Если вы делаете свой сценарий по-русски, то пусть большинство ваших персонажей изъясняется вежливо — это в ваших же интересах. Игра, как известно, учит людей жизни, и надо повышать культуру наших соотечественников... стоп, стоп, это из другой оперы. У нас с вами есть одна простая, я бы даже сказал, техническая причина любить вежливость.

Дело в том, что в нашем великом и могучем есть такая особенность, как род — прилагательного, существительного и даже глагола в прошедшем времени. И если ваш персонаж обращается к герою на ты, то вы познаете все прелести этого факта, делая «мужские» и «женские» варианты каждой второй реплики.

А вот вежливое «вы» сразу переводит все во множественное число — в котором рода, к счастью, нет. И можно с комфортом англичанина миновать все скользкие моменты, обходясь одним ответом для обоих полов.

Конечно, это не повод заставлять пьяного матроса в кабаке изъясняться куртуазно. Но увлекаться разговором «на ты» не следует. Упустите обращение в фиксированном роде — будет потом неудобно.

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

Эта логика используется очень широко.

Вот, например, если мы хотим, чтобы при первом знакомстве персонаж приветствовал героя не так, как при следующих встречах, нам достаточно сделать ему реплику, показываемую только один раз (для этого в окне скриптов выберите закладку Node и в пункте Show once? — в самом верху — укажите Once per game). В итоге при второй беседе с тем же персонажем эта реплика показана быть не может — и игра выберет следующую подходящую.

На заметку: если вы делаете онлайновое приключение, то вместо Once per game используйте Once per creature — чтобы каждый подошедший герой мог заново пообщаться с NPC. Иногда это осмысленно делать и в случае обычного сценария — в расчете на групповое прохождение, но тут возможны разные хитрости.

Или еще: вам нужны разные ветви разговора в зависимости от того, взял ли уже герой задание, находится в процессе выполнения или выполнил? Просто ставьте все эти реплики в один ряд, снабдив соответствующими условиями. А игра выберет первую подходящую.

Проверки умений — делать или не делать?

Разговорные умения в NWN2 — дипломатия, обман, угроза — вызывают множество дебатов у изготовителей модулей. С одной стороны, они позволяют сделать прохождение за разных героев различным; один любит и умеет добиваться своего аргументацией, другому по душе хитрость, третьему сила, четвертый и вовсе предпочитает меч слову.

С другой стороны, хотелось бы, чтобы дипломатические таланты проявлял игрок, а не только персонаж. Умный выбор реплики для игрового интереса значит больше, чем отсылка к цифрам в листке персонажа.

Реализовать такую проверку технически очень просто — надо всего лишь ввести соответствующее условие в закладке Conditions. Но стоит пользоваться такими проверками с умом.

Самое, на мой взгляд, надежное правило таково: разделяйте момент умственных усилий персонажа и момент проверки умения. Лучше всего делать это так: проверка, скажем, дипломатии открывает возможность вести диалог, который имеет целью убедить собеседника. А собственно поиск аргументов и нестандартный выбор реплики идут уже после этого. То есть проверка дипломатии не решает задачу, а позволяет приступить к ее решению.

Конечно, то же самое относится и к другим разговорным умениям. Заявив угрозу, вы переходите к «силовым переговорам», а уж насколько убедительными окажутся угрозы, зависит от вас...

И даже это правило спасает не всегда. Дайте возможность хоть иногда игроку не быть уверенным, что он в данный момент делает — уговаривает, обманывает, честно разъясняет суть вещей или угрожает.


А как быть с проверками знаний, интуиции (мудрости) и так далее? Тут штука в том, что, указав перед какой-то строкой нечто вроде [Знание], вы фактически убеждаете игрока, что эта реплика будет правильным выбором.

Убирать проверки интеллекта и мудрости не нужно — напротив, гораздо интереснее, если туповатому персонажу будет доступно мало реплик, а гениальному — много. Но не нужно показывать эти умения в тексте беседы! Гораздо правильнее замаскировать эти проверки. Выбор сразу станет интереснее.

Переходы

Творческий работник — лицо, неспособное выполнить одну и ту же работу два раза одинаково.

А. Хайленд, «Малый словарь корпоративной лексики»

Может показаться, что в такой ситуации мы вынуждены делать немало лишней работы.

Вот, к примеру, у нас есть два варианта стартовой реплики, но ответы на них совершенно одинаковые. Что же делать — копировать их вместе со всеми ответами на ответы, ответами на ответы на ответы и так далее?

Нет, есть более простой способ.

Щелкаем по реплике, которую хотим скопировать вместе со всем деревом ответов, правой кнопкой мыши и выбираем Set Link Destination. Затем выбираем узел диалога, в ответы на который мы хотим перенести эту реплику, щелкаем правой кнопкой — и выбираем Insert Link. Под ним появляется та же реплика, но показанная серым цветом (как на нашем рисунке). Это значит, что сие — отсылка к другой ветви диалога.

Почему делать так разумнее, чем просто копировать реплики по одной? Помимо того, что это быстрее, есть еще один довод. Если вы решите что-то исправить, вам не придется копировать исправление во все места, где используется этот текст, — он исправится сам. Изменив что-то в «мужской» половине диалога, мы изменим и «женскую». Если же в дальнейшем тексте нам еще раз понадобится делать ветвление по признаку пола главного героя — «дешевле» будет еще раз проверить то же условие.

40KB
Вставка перехода.

Этот же метод используется, когда у NPC есть несколько независимых, «параллельных» тем для разговора. В фирменной кампании NWN 2 вы наверняка видели много таких примеров: закончив ветку разговора, вы можете выбрать одну из оставшихся или выйти из беседы. Вот, скажем, общаясь с управительницей своего замка, вы можете в любом порядке спрашивать о налогах, солдатах, сержантах... Это тоже делается при помощи переходов-ссылок.

На заметку: однако следите тщательно за логикой в тех случаях, когда делаете переходы между репликами из разных частей игры. Так, например, если у персонажа есть три независимых темы для разговора и одна из них связана с квестом, то при неаккуратном «зацикливании» можно оказаться в ветке выдачи квеста уже после того, как вы его выполнили. Это, впрочем, «лечится» легко — надо просто лишний раз проставить проверку того, что квест еще не взят.

Квесты и другие действия

Часть реплик персонажей должна вести к получению героем задания или, наоборот, сдаче оного. Организовать это совсем несложно.

В панели свойств узла разговора (окно скриптов, закладка Node) выберите пункт Quest  инструментарий предложит вам ввести его описание. А в колонке Quests основного окна появится ссылка на этот квест.

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

Для того чтобы принять у героя задание, нам понадобится другая закладка окна скриптов — действия (Actions). Там открывается такой же внушительный список, как в окне условий; среди них есть и выдача опыта за квест, и выдача награды, и многое другое. Конечно, в том же (или ведущем к этому) узле разговора надо сперва сделать проверку или серию проверок на то, выполнены ли условия квеста.

Это важно: если квест требует принести что-нибудь и отдать NPC — не забывайте забрать его у героя! «Забытая» в рюкзаке персонажа голова чудовища или сорок два церемониальных пояса жрецов Луны вызывают у игрока странные ощущения.

В закладке Actions есть еще много разных скриптов, которые можно применить, и не погружаясь с головой в программирование. На первое время их хватит, а более сложное скриптописание мы обсудим в другой статье.

Смена мировоззрения

В ходе «фирменной» кампании вам неоднократно будут предлагаться реплики, которые окажут воздействие на мировоззрение героя. То же самое можете сделать и вы. Скрипт ga_alignment в закладке действий окна скриптов работает с мировоззрением.

Однако сразу же хочу предостеречь от использования его в духе кампании: грубый ответ или требование увеличить награду — плюс ко злу, отказ от вознаграждения — плюс к добру... Такие ходы унижают саму идею: мировоззрение нельзя менять механически.

Пусть лучше оно будет меняться резче, но реже: тогда, когда вы действительно предлагаете сложный выбор. Пусть это станет для вас правилом: если способ получить в этом диалоге плюс к добру очевиден и в то же время «бесплатен», то плюса к добру давать не следует!

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

Пусть каждое решение, которое стоит сдвига в мировоззрении, будет серьезным и непоправимым. Только тогда игрок в самом деле оценит смысл происходящего.

В вашем приключении не предполагается ставить перед героем серьезные этические проблемы? Пусть так; тогда вообще не пользуйтесь возможностью менять его мировоззрение. Примененная не по назначению, она ничего не украсит.


Похожие принципы могут применяться к вопросу влияния на спутников. С одной стороны, там все несколько проще: можно решать вопрос по принципу «плюс одному, минус другому». С другой стороны — сложнее: вы обязаны внести в игру ситуации, когда ваше влияние на того или иного спутника окажется решающим фактором. Иначе игрока ждет разочарование.

Среди необходимых действий: выдача и забирание предмета (ga_give_item, ga_destroy_item, ga_give_gold), выдача опыта (ga_give_xp, ga_give_quest_xp), присоединение персонажа (ga_henchman_add) и, само собой, концовка игры (ga_end_game) — ведь надо же в какой-то момент объявить о завершении модуля? Столь же просто можно перемещать команду в нужную локацию, убирать персонажа из команды, расширять доступный размер отряда, открывать или закрывать двери с «особым» способом вскрытия — в общем, практически все, что потребуется. Добраться до списка можно точно тем же способом, что и до списка условий, и способ этот на удивление прозрачен для любого, кто хотя бы немного владеет английским языком. Впрочем, подробнее мы рассмотрим набор доступных скриптов в следующей статье.

Одно из самых употребительных действий — переход в режим магазина (ga_open_store). Обычно с ним связывают реплику вроде «Покажи мне свои товары». Сам магазин нужно редактировать отдельно — в закладке Stores. Магазин — это объект, который ставится на карту (о работе с объектами мы говорили в предыдущей статье); но обратиться к нему в игре можно лишь одним способом — через разговор.

Нередко приходится пользоваться и работой с дневником (ga_journal). Сами тексты для дневника редактируются через посредство команды Journal в разделе View главного меню инструментария.

Необычные квесты

Квесты не должны всегда быть тем, чем кажутся при их получении. Иначе игра будет превращаться из подлинно ролевой в непрерывную «зачистку» подземелий.

Спору нет, приятно, когда точно знаешь, чего именно от тебя хотят; но если такой подход еще худо-бедно уместен для онлайновой игры, в однопользовательской он ведет к скуке.

Хороший пример был в «Космических рейнджерах»: там надо было «любой ценой защитить базу», но выигрыш достигался, когда вы плевали на приказы и решались эвакуировать людей, вместо того чтобы положить их всех, «стоя до последнего». Подобных ситуаций ролевому жанру жизненно не хватает.

Если уж вы возлагаете на героя обязанности почтальона, пусть хоть иногда адресат не окажется на месте и придется поискать его, пользуясь собственным умом, а не текстом миссии. Задание отомстить убийце может обернуться попыткой натравить героя на невиновного (вспомните историю с духом разбойника из начала Arcanum) или даже попыткой избавиться от самого героя, столкнув его с заведомо непосильным противником.

Очень украшают игру миссии, которые можно пройти разными способами и на разной стороне. Только не сводите все к примитивной ситуации «А не любит В, нам надо решить, кого из двоих порешить». Опыт Тимоти Кейна (Fallout — Arcanum) будет весьма к месту.

И кто, собственно говоря, сказал, что всякий квест должен непременно быть выполнимым? Да, на сегодняшний день невозможность завершить задание игроки считают ошибкой — но их вполне можно подготовить к тому, что в квестах встречаются хитрости и подвохи, и тогда они с пониманием это воспримут.

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

Как сделать из разговора ролик

Серьезным шагом вперед по сравнению с NWN во второй части игры стал выбор реплик прямо в режиме ролика — когда герои показаны крупным планом, а реплики озвучены. Возможность делать такие диалоги вполне доступна и нам с вами.

Для того чтобы сделать диалог роликом, нам нужно:

  • сделать звуковые файлы реплик NPC (можно и без них, но выглядеть будет глупо);
  • прописать положение камеры;
  • прописать паузы между репликами;
  • определить анимации персонажей.

При желании можно еще прописать движения и другие действия героев, что делается посредством скриптов — но об этом мы сейчас говорить не будем.

Ролик может оказаться (и обычно оказывается) только частью диалога с каким-либо персонажем. Нет ничего неправильного в том, что только одна из ветвей разговора исполняется в виде ролика; но вот переход от обычного разговора к ролику делать нежелательно.

Это важно: не старайтесь делать ролик из каждого разговора; выбирайте только самые важные, интересные и, главное, только те, что происходят один раз. Повторяющийся ролик просто бесит.

Звуковые файлы

Файл вам понадобится в формате MP3. Игра использует моно-дорожку с bitrate=96; не уверен, требование ли это или просто принятый стандарт. Записанный с микрофона файл можно преобразовать в нужный формат любым звуковым редактором — например, AVS Utilities.

Чтобы подключить созданный звуковой файл к реплике, нужно войти в закладку Node окна скрипта и найти там пункт Sound.

Проставляя паузу (пункт Delay того же меню), учтите не только длительность звукового файла, но и действия персонажей.

Камера

В той же закладке Node есть такой пункт, как Camera Settings, а в нем — Shot Type. Здесь можно указать несколько вариантов: от банального взгляда из-за головы (Behind the Head) до взгляда на говорящего в упор в профиль (Side) три четверти (3/4) или анфас (Torso) и даже с земли (Worm’s Eye).

Особый интерес представляет здесь режим Two Shot. Он показывает разом говорящего и того, с кем он беседует (его можно выставить при помощи параметра Listener). По моему опыту, это один из самых полезных режимов.

Анимации

Список анимаций выпадает при выборе пункта меню Animation. Перечислять все пункты этого меню смысла нет — набор достаточно богат; но нельзя не упомянуть одну важную деталь. Если вы выбираете любую лицевую анимацию (начинается со слова FACIAL), она прерывает синхронизацию губ. Поэтому ставьте ее только на пустые реплики: например, персонаж стоит и молча улыбается.

Вообще, пустые реплики для того и созданы, ведь многие варианты анимации будут лучше смотреться, когда персонаж ничего не говорит...


* * *

Как видите, сделать диалог, а потом по желанию преобразить его в ролик не слишком сложно. Конечно, это лишь техническая сторона вопроса; а вот для того, чтобы придумать и сделать красивыми сами тексты, потребуется весь ум, талант и вкус. К счастью, при работе с диалогом почти не приходится бороться с инструментарием — эта его часть продумана на славу, и даже размеры экрана (как я уже писал — инструментарий создавался в расчете на два монитора при одном компьютере) почти не мешают.

Существуют специальные plug-in’ы, которые упрощают работу с разговорами — ненамного, впрочем; они просто объединяют в одну панель самые нужные пункты меню. Принцип остается тем же.

И напоследок совет: изучите как следует те диалоги, что уже есть в игре. Они находятся в папке Modules игры (не все, но вам все и не нужны). Среди них есть немало любопытных примеров, которые потом можно с пользой применять для своего модуля, а равно и ответы на самый популярный вопрос начинающего разработчика приключений: «Как, черт возьми, они это сделали?!»



Назад