Не так давно в продажу поступило дополненное издание игры «Ведьмак», включающее в себя прекрасный редактор D’jinni. Теперь мы можем создать свой личный модуль на усовершенствованном движке «Aurora engine»! Сделать это непросто, читать официальное руководство, состоящее из 500 страниц, долго, и не все там понятно. Поэтому сейчас на примере небольшого модуля мы вам расскажем обо всех функциях редактора. Разобравшись, вы сможете создать свои ролевые приключения!
Подготовка к приключению
Основа для модуля — это сюжет. Придумав его, мы будем создавать небольшой мир, состоящий из локаций, населенный персонажами, в уста которых вложены диалоги, в инвентарь — предметы, а в разум — скрипты. Для примера мы возьмем максимально простой сюжет, создание модуля под который позволит нам познакомиться с основными функциями редактора.
Ведьмак инкогнито заходит в придорожную таверну отдохнуть и немного поиграть в кости. Местные завсегдатаи предлагают ему принять участие в кулачном бою, а трактирщик просит выгнать бандитов, засевших в винном подвале.
Для начала создадим новый файл модуля, в который мы будем вносить всевозможные изменения (расстановка предметов, появление персонажей, создание диалогов, заданий и многое другое). Итак, нажимаем Module — New module (модуль будет создан в формате .adv). После этого нажмите View — Utility Windows и поставьте галочку на следующих параметрах: Aurora Log (срок учета действий), Module Explorer (обзор модуля), Properties (свойства), Quest Explorer (обзор задания), Resources Explorer (обзор ресурсов, то есть файлов).
Общие свойства модуля. Щелкните по окну Module Explorer и нажмите на Module Properties, это откроет свойства модуля. В поле name впишите желаемое имя модуля, в нашем случае это будет «Taverna». Tag указывать не нужно. Пропишите Description (описание), например «Ведьмак приходит в таверну». Остальные четыре функции в окне General пока трогать не нужно.
Погода. Все, что связано с погодой, находится в окне Weather. Именно оно определяет, по сути, погоду во всем модуле. Параметры Minimum weather intensity и Maximum weather определяют минимальное и максимальное значения количества осадков во всех локациях в модуле. В нашем модуле не будет уличных локаций, поэтому в обоих строках нужно ввести 0.
Строки Chance of rain и Chance of snow определяют, с какой вероятностью в модуле может пойти дождь или, соответственно, снег. 0 означает, что осадков не будет, а 100 — дождь или снег идет постоянно. Понятно, что в данном случае нужно ввести здесь 0, ведь в помещении никак не может пойти дождь или снег.
Время. В окно Time входят параметры, отвечающие за время в модуле.
Пункт Minutes per hour определяет, сколько минут реального времени соответствует часу в модуле.
Параметр Start day (стартовый день) определяет, с какого дня начинается модуль. 1 соответствует понедельнику, а 7 — воскресенью.
Строчка Start hour определяет, с какого часа начинается модуль. Введите значение от 0 до 23.
Пункт Start month определяет, с какого месяца начинается модуль. 1 соответствует январю, а 12 — декабрю.
Параметр Start year определяет, с какого года начинается модуль. Введите любое значение от 0 до 99. К этому числу прибавляется 1200. Если вы, к примеру, ввели число 43, то получится, что вы установили год на 1243.
Строка Dawn hour определяет час, в который в модуле наступает рассвет. Параметр Dusk hour определяет час, в который в модуле наступает закат. В них можно ввести любую цифру от 0 до 23.
Создание локации
Сразу скажу, что в редакторе свои локации создавать нельзя, они делаются в 3D Studio MAX, можно только выбирать готовые. Это, конечно, недостаток, но выбор здесь очень богат, есть локации «на все случаи жизни». Кроме того, можно декорировать локацию по своему вкусу, для этого здесь есть обильный выбор предметов.
Чтобы загрузить локацию, требуется нажать правой кнопкой мыши по папке Areas в окне Module Explorer и далее выбрать New Area. Потом зайдите в папку Data — Meshes — Locations — GL45. Назовем локацию «location1». Учтите, что нельзя вписывать большие буквы и писать по-русски. После этого нажмите левой кнопкой мыши на Area Properties, что откроет окно свойств локации. Задайте ее имя (строчка name), к примеру, «house». Тэг вводить не нужно, так как он предназначается для скриптов, описывающих данную локацию, с которыми мы будем работать позже.
Это баг: чаще сохраняйте локацию (File — Save) и модуль (Module — Save module), так как иногда в редакторе случаются вылеты.
Кроме того, у вас имеется возможность посмотреть графическую схему локации, проще говоря — карту. Для этого выберите bmp-файл локации (Regions bitmap override) в свитке Area Map.
Чтобы задать цикл смены дня и ночи, выберите в свитке Visual параметр Period Settings. Очевидно, что утром локация будет выглядеть иначе, чем днем, вечером или ночью. Для нас это особого значения не имеет, ведь мы создали локацию таверны, а ее вид не зависит от времени суток. Однако мы все равно расскажем вам, как создавать описание вечера или ночи. Если вы всерьез решили заняться созданием собственного модуля, то в дальнейшем вам не раз придется работать с «уличными» локациями.
Чтобы изменить этот параметр, щелкните по красной иконке в правой ячейке. В разделе periods, то есть на чистом белом фоне, нажмите правой кнопкой мыши и выберите Add New Period. В разделе Time укажите нужное вам время.
Далее нам нужно настроить туман (fog). Для реалистичного тумана советую вписать во всех трех левых полях 20, а во всех правых — 70. В полях Minimum, medium и maximum выберите цвет тумана, который считаете наиболее реалистичным (во всех трех полях одинаковый).
Небесный туман (Skybox Fog) практически ничем не отличается от обычного тумана. Разница в том, что этот туман применяется только на небе. Если у вас есть открытая локация, то присвойте небесному туману такие же значения, что и обычному.
Параметр Clip plane (зона видимости) также разделен на три категории: Minimum, Medium и Maximum.
На заметку: уменьшение зоны видимости — неплохой способ повысить быстродействие локации. Чем она меньше, тем ниже нагрузка на видеокарту, а следовательно, больше «кадров в секунду».
Рекомендуется в поле Near (близко) установить значение 0,1, а в строчке Far (далеко) — 200. Установите эти значения во всех трех категориях.
Параметр Shadow указывает цвет теней, отбрасываемых объектами в локации. Рекомендуется выбрать, разумеется, черный цвет.
Параметр Wind power определяет силу, с которой дует ветер. В нашей таверне щелей нет, так что ставим 0.
Остальные настройки не так уж важны, желательно их не трогать.
Чтобы указать, будет ли в локации производиться смена дня и ночи, нужно изменить параметр Day/Night Cycle. Его значение выбирается из списка. Так как наша локация — таверна (и окна в ней чисто декоративные), этот параметр следует отключить. Для этого щелкните по правой ячейке и выберите False. Остальные настройки в свитке Visual рекомендуем не трогать, только в параметре Descriptive properties (описательные свойства) задайте значение Interior (интерьер). В свитке Gameplay параметру Loading Screen (экран загрузки) присвойте значение GL45, чтобы на экран при загрузке этой локации выводилось изображение таверны.
Параметры Safe during day и Safe during night определяют, будет ли ведьмаку безопасно днем и ночью. В первом поставим значение FALSE, а во втором — TRUE.
Теперь давайте определимся с музыкой. Разделу Battle music (боевая музыка) присвойте значение mus_bat_boss1, разделу Music during day (дневная музыка) значение amb_city_safe_1, а Music during night (ночная музыка) — amb lost city. Таким образом, во время боя у нас будет играть тревожная боевая музыка, в мирное время — спокойная, и т.д.
Редактирование локации
Чтобы приступить к редактированию локации, нажмите левой кнопкой мыши Edit Area в окне Module Properties. Затем выберите Entire Geometry. Как видите, у нас появилась панель инструментов. Навигация по редактору достаточно проста: вперед — R, назад — F, влево, вправо, вверх и вниз — стандартный WASD.
Начнем с последнего значка. Кликните по нему и поместите объект около двери в таверну, для того чтобы начать игру именно в этом месте. После этого воспользуйтесь инструментами Move и Rotate, чтобы откорректировать расположение точки. Стрелка указывает, в какую сторону будет повернут лицом наш герой.
Это важно: еслиу вас слишком темная локация и вам ничего не видно, то нажмите Render — Ambient — Medium Ambient. Локация станет светлее, но только на время редактирования. Во время игры или теста освещенность будет стандартной.
Теперь пришла пора создания источников освещения в локации. Для этого щелкните по стрелке рядом со значком Create Placeable или Create Item. Сначала создадим новый слой, чтобы не запутаться в многообразии объектов. В окне Module Explorer нажмите правой кнопкой мыши по location1, выберите Add New Layer и назовите новый слой. В нашем случае он будет называться «predmeti». Чтобы выполнять операции именно в этом слое, нажмите правой кнопкой мыши на его название и выберите Activate Layer. Чтобы создать источник освещения, нажмите Create Placeable — Select New Placeable Item — Light Sources, затем выберите нужный вам источник света.
Это важно: у некоторых источников нет эффекта света, поэтому в разделе Light Sources выберите объект FX — fx light — mo_light_01 и поместите рядом с осветителем.
Для того чтобы создать невидимый объект, при приближении к которому мы будем слышать звук, нажмите Create Sound и выберите, какой звук вам нужен. Настройки там ни к чему, разве что можно сделать громкость поменьше.
Создание предметов
Теперь расставим предметы. С помощью описанного ниже алгоритма создания сундука вы научитесь без труда создавать, расставлять и настраивать нужные вам предметы.
Чтобы выбрать сундук, нажмите Placeables — Containers — chest_cro_01. Далее двойным щелчком левой кнопки мыши по сундуку откройте окно его свойств. В разделе Position есть параметр Model Scale. Он задает размер объекта. По умолчанию стоит 1,0000, в данном случае лучше так и оставить, но можете и поэкспериментировать, чтобы научиться изменять размер предмета в будущем.
В разделе Attributes свойству Useable (можно использовать) ставим TRUE, в параметре Use Physics (использовать физику) ставим FALSE: пусть наш сундук всегда стоит на одном месте. Если поставить TRUE, то предмет становится физически активным, то есть его может снести ветром или нашим богатырским пинком.
Параметр Open state позволяет выбрать состояние предмета. В частности, можно выбрать, будет ли наш сундук закрыт, открыт, разрушен и т.д.
Теперь перейдем к созданию звука. В разделе Sound Type (тип звука) выберите chest open, теперь при открытии нашего сундука мы будем слышать скрипящий звук. При создании других предметов обычно приходится повозиться, прежде чем находится подходящий звук из списка. В разделе Inventory выберите параметр Has Inventory и поставьте значение TRUE, чтобы у сундука был «инвентарь».
Если вы используете физику, то в разделе Physics настройте массу предмета (параметр Mass), материал (Material) и возможность толкать его (Pushable).
Для параметра Enabled Sound ставьте значение TRUE, а для Affected by wind — FALSE, после этого выберите тип звука (Sound Type).
Осталось разобраться с тем, что лежит в этом сундуке. Для этого нажмите на кнопку с надписью 2da рядом с пустым полем и выберите то, что вам нужно. В разделе Economy вы можете задать стоимость товара, а изменить тип оружия можно в разделе Weapon. Также можно назначить предмет квестовым. Для этого поставьте значение TRUE в разделе Attributes — Quest Item. Вы также можете изменить качество прорисовки объекта (качество текстуры и количество полигонов объекта) в разделе Attributes — Quality.
Создание второй локации
Сейчас мы создадим вторую локацию, с которой будет связано основное задание модуля. Нажмите на знак «минус» в окне Module Explorer по папке «location1», она нам больше не понадобится. Далее нажмите правой кнопкой мыши по папке Area и выберите New Area — Mashes — Locations — G15. Назовем ее «location2». Расставьте предметы и источники освещения самостоятельно на свой вкус. Далее откройте окно свойств и впишите имя «Подвал», затем параметру Loading Screen присвойте значение G15.
Перемещение между локациями. Переходить из одной локации в другую можно двумя способами: через дверь или с помощью триггера. В данном случае триггер — это многоугольник, при наступлении на который срабатывает скрипт перемещения в другую локацию.
Сначала разберемся со способом перехода через дверь. Щелкните по надписи location1.area, располагающейся рядом с инструментами.
Это важно: если над локацией стоит знак «*», то это означает, что она не сохранена.
Для начала щелкните два раза левой кнопкой мыши по входной двери, чтобы открыть окно ее свойств. Присвойте ей имя, например, «Дверь». В разделе Attributes в параметре Useable (можно использовать) присвойте значение TRUE, в разделе Lock (закрыто) в параметре Locked впишите TRUE. Теперь дверь активна, но открыть ее нельзя. Проделайте те же самые действия со второй дверью.
Если вы хотите, чтобы дверь открывалась определенным ключом, создайте ключ в инвентаре предмета и присвойте ему и соответствующей двери одинаковые тэги, т.е. впишите одинаковые слова, например «otkryt_dver».
Это важно: тэг в данном случае — это комментарий к предмету, который не отображается в игре. Если у двух объектов одинаковый тэг, то они могут взаимодействовать друг с другом.
Выделите третью дверь (всего в локации их четыре), к которой мы припишем смену локаций. Присвойте ей имя и обязательно тэг «podval1». Вернитесь во вторую локацию, щелкнув по location2.area. Теперь откройте окно свойств двери в этой локации. Введите имя и присвойте тэг «podval2», а в разделе Area transition параметру Destination Tag присвойте тот тэг, который был у третьей двери, то есть «podval1».
Вернемся к location1. Присвойте третьей двери Destination Tag значение «podval2»: теперь вы сможете не только войти в подвал, но и выйти из него. А теперь создадим переход в другую локацию с помощью тэга. Для этого откройте окно свойств (Object Properties) четвертой двери, щелкнув два раза по ней. Сделайте ее используемой (параметру Useable присвойте значение TRUE), а затем параметру Locked присвойте значение FALSE. Теперь дверь можно открыть. Далее выберите инструмент Create Trigger, создайте 4 точки, замкнув четвертую с первой. Получился четырехугольник. Поместите его с обратной стороны четвертой двери. Пропишите тэг, например, «trig1». Убедитесь, что параметру Enabled присвоено значение TRUE, иначе триггер будет выключен. В разделе Attributes параметру Type присвойте значение Area Transition, то есть этот триггер будет сменять локации. Параметру Destination Tag пропишите «way1», зачем это делать, сейчас расскажу. Дело в том, что, наступив на триггер, игрок переместится в другую локацию — но как именно? С помощью другого триггера? Нет. Для этого нам нужен инструмент Create Waypoint. Создайте с помощью этого инструмента объект в location2 и присвойте ему тег «spawn1».
Итак, что же получается? Ведьмак входит в location1, двери выхода закрыты, он подбегает к другим дверям. Открыв левую, он оказывается в location2, а открыв правую, проходит дальше, вдруг срабатывает триггер, и ведьмак моментально перемещается в location2, но выйти из location2 без помощи двери он не может.
Создание персонажей
Начнем с шаблонов персонажей. Что такое шаблон персонажа? Это набор параметров, описывающих персонажа. В шаблон, как правило, входит описание внешности, имя персонажа, характеристики, боевые стили. Создадим несколько персонажей: посетителя, трактирщика и бандита. На их примере вы сможете создавать своих персонажей с определенной внешностью, отношением к нашему герою и так далее.
Трактирщик. Это пример создания квестового персонажа.
Первым делом создайте новый шаблон персонажа (New — Template — Creature): у вас откроется новое окно. Впишите имя «Трактирщик», тэг «persona1», в разделе Statistic параметру Appearance (внешность), определяющему 3d-модель объекта, присвойте значение cr_fat1_c1_g1.
Это важно: для просмотра трехмерной модели персонажа выберите Open appropriate model в меню Edit.
Выберите расу (Race) «Human», пол (Gender) «Gender_Male», скорость передвижения (Movement Rate) — ставим Slow (медленно). Параметр Perception Range (в нем нужно поставить значение Short) определяет дальность восприятия персонажа. Если в радиусе восприятия персонажа появляется другой персонаж, первый предпримет действия, соответствующие установленному значению параметра Profiles (определяет поведение персонажа в зависимости от действий игрока и событий в игре). В последнем расставьте галочки в тех пунктах, где необходимо. Для трактирщика это Friendly (персонаж по-дружески относится к нашему ведьмаку и не будет его атаковать), для параметра Affiliation (определяет, к какой фракции принадлежит персонаж) задайте значение Commoner (второстепенный мирный персонаж), в строке Behavior (поведение персонажа в бою) выберите значение Coward (трусливое, то есть персонаж сбежит, если на него нападут). В параметре Abilities (характеристики) ставим cr_disadv_lowAttack. Содержимое снаряжения (Inventory Contents) присваиваем самостоятельно.
Параметру Plot (сюжет) раздела Special ставим значение TRUE, теперь трактирщик будет так или иначе относиться к сюжету. Пункт Permament Body определяет, превратится ли труп персонажа в скелет или сохранит первоначальный вид. Ставим значение TRUE.
Значению Immortal (бессмертие) ставим TRUE — мы же хотим получить задание. Вот и все. С первым персонажем разобрались, сохраняем файл под именем «persona1».
Посетитель. Это пример создания простого статиста, не влияющего на сюжет, но нужного для создания определенной атмосферы.
Итак, создайте новый файл. Пусть имя персонажа будет «Посетитель». Внешность присвойте cr_citi6_c1g1. Уровень (Level) пусть будет равен 5. Раса — человек, пол — мужской. Скорость передвижения устанавливаем на уровне Normal. Параметр Perception Range показывает, на каком расстоянии объект заметит нашего героя, ставим Default. Профили зададим такие же, как и у трактирщика. Снаряжение присвойте сами. В строке Immortal (бессмертие) ставим True. Осталось только сохранить файл под именем «persona2».
Бандит. Создавать персонажа, умеющего сражаться, немного труднее, чем мирного, потому что приходится прописывать боевые характеристики, давать ему определенное оружие и так далее.
Создайте новый файл .utc. Задайте имя «Бандит», внешность cr_band2_c1g1, уровень 10, расу — человек, пол — мужской. Параметр Experience Value определяет, сколько очков опыта получит главный герой за убийство этого персонажа. Поставим 500.
В профилях ставим галочку над Attitude_Hostile (враждебный), Behavior_Aggressive (агрессивный), Role_PCAttacker (атакует нашего героя), Enemy_Witcher (враг ведьмака), Afflication_Outlaw_Bandit (персонаж — бандит).
В свойства (Abilities) персонажа включаем AutoJump, finisher_1h_sword, HeavyWounded, Wounded. В снаряжение добавьте меч и деньги, чтобы ведьмаку было что взять в качестве трофеев. Чтобы задать боевые стили (Combat Styles), кликните правой кнопкой мыши по пустому полю и пропишите WitcherSteelFast, в столбце Weapon Type (тип оружия) задайте WitcherSteelSword, после этого поставьте h_adv_sword1h01 в поле улучшение (Powerup). В раздел Attack выставите значение h_bas_sword1h01. Это базовая атака с использованием одноручного меча. Остальное не трогаем. Теперь сохраняем под именем «persona3».
На этом мы заканчиваем разговор о создании шаблонов персонажей. Прочтя эту главу и создав три шаблона, вы должны иметь общее представление о процессе создания шаблона персонажа. Поэкспериментировав с редактором, вы научитесь большему. А сейчас вы узнаете, как можно осуществить появление персонажей.
Появление персонажей
В этом разделе речь пойдет об управлении поведением персонажа и установке времени и места появления персонажа в игре. Она позволяет задать место и время появления каждого персонажа, а также указать выполняемые персонажами действия. Благодаря этой системе можно, к примеру, создать кузнеца, который появится в кузнице в 07:00 и будет оставаться там до 15:00, занимаясь созданием мечей и доспехов. В 15:00 этот же персонаж отправится в таверну, чтобы выпить и сыграть в карты. В 20:00 он покинет таверну и отправится домой спать. На следующее утро в 07:00 он встанет и снова отправится в кузницу.
Персонажей можно разделить на три категории: NPC (трактирщик), второстепенные (бандит, посетитель) и монстры. Для NPC задается имя, индивидуальные характеристики, места, где персонаж проводит время на разных стадиях игры, диалоги в определенных ситуациях и так далее. Другими словами, такой персонаж уникален. Если его убить, больше он в игре не появится.
Итак, жмем File-New-Story NPC (.npc). В поле «Примечание» (Comment) пишем что угодно, ведь это поле служит для информативных целей. Щелкаем правой кнопкой мыши по Story Phase (стадия сюжета) и выбираем пункт Add Story Phase (добавить стадию сюжета), далее вписываем имя.
Следующий шаг — создание стадии появления (Spawn Phase). Эти стадии отвечают за разные части суток, в которые персонаж выполняет те или иные действия. Каждая стадия сюжета может содержать несколько алгоритмов появления. В поле Spawn Phase впишите «tractir». Так как трактирщик всегда будет в своем заведении, то параметру Start Timeи End Time (я думаю, вы догадываетесь, что они значат) ставим 0:00:00.
Это важно: учтите, что разные стадии появления не могут пересекаться по времени, так как один и тот же персонаж не может одновременно находиться в разных стадиях появления.
Теперь поговорим о скриптах, выполняющихся при каждом появлении персонажа в игре (параметр OnSpawn Script). В случае трактирщика указывать скрипт не нужно. Еще один важный шаг — добавить шаблон персонажа (Template). Именно здесь указывается шаблон персонажа, который мы создали чуть ранее. Щелкните два раза по пустой ячейке, затем в дереве файлов найдите свою заготовку трактирщика «persona1».
Следующий столбец — категории появления. Это идентификатор, сообщающий NPC информацию о том, в каком пункте появления персонаж должен появляться или исчезать. Чтобы добавить категорию появления, щелкните правой кнопкой мыши по полю в столбце Spawn Categories (категории появления), в контекстном меню выберите Add Category и введите имя «tractirshik».
Столбец Action List (список действий) служит для отображения всех действий, которые будет выполнять трактирщик в данной стадии появления. Это наборы анимационных роликов, воспроизводимых для определенного персонажа в соответствующий момент.
Щелкните правой кнопкой мыши по пустому столбцу и в появившемся контекстном меню выберите Add Action. Вводим имя действия, например w_h_pray (молиться), и вероятность 70%, затем нажимаем Add Action и вписываем w_h_alarmed (тревожно осматриваться) с вероятностью 30%.
Это важно: вероятность всех действий в сумме должна быть равна 100%.
При установке значения True в столбце Actions Looped (цикл действия), все перечисленное в столбце Action Name будут выполняться циклично. То есть трактирщик будет постоянно выполнять указанные действия. Ставим TRUE.
Если прописать в параметре Regions List (список зон) «action1», то зона появления передаст персонажу информацию о том, что нужно выполнить в той или иной области действий. В данном случае это нужно сделать. Осталось сохранить файл под именем «npc1».
Переходим к посетителю. Создаем новый файл .spn (File-New-SpawnSet (.spn)), добавляем любой комментарий. Элемент появления (Spawn Phase) аналогичен стадии сюжета (Story Phase). Добавим элемент и впишем имя, например «posetit». Так как посетитель будет в таверне круглые сутки, то конечное и начальное время поставьте 0:00:00. Затем применяем шаблон посетителя «persona2». В раздел Spawn Categories ставим любое слово, например «posetitel», только его нужно запомнить. В строке Probability, описывающей вероятность появления данного персонажа в игре, ставим 100%.
В столбце Min/Max Creatures указывается минимальное/максимальное количество персонажей этого типа, которые могут появиться в игре одновременно. Ставим 1 для min и 4 для max.
Теперь поговорим о том, сколько всего может быть персонажей (параметр Total Creatures). Если min — 1, а max — 4, то это не значит, что всего должно быть 5. Может быть и больше. Количество персонажей выбирается автоматически в диапазоне от 1 до 4. Допустим, у нас 3 персонажа. Если всего персонажей 10, то после смерти троих появятся еще 4, а потом еще 3. В строке Respawn Condition (условия воскрешения) ставим Always, то есть, если посетителя убьют, он возродится с вероятностью 100%.
Есть еще одна интересная функция под названием «Предметы, препятствующие появлению» (No — Spawn Item List). В этом столбце перечисляются все предметы, которые будут препятствовать появлению персонажа. В список действий ставим w_h_tired1 с вероятностью 100%. В цикле действий (Action Looped) ставим TRUE. Зона появления — «action2». Сохраняем под именем «npc2».
Далее — бандит. Создаем новый файл .utc. Добавляем элемент и вписываем имя, например «band», конечное и начальное время поставим 0:00:00. Затем применяем шаблон посетителя «persona3». В раздел Spawn Categories ставим любое слово, например «bandit», но его обязательно нужно запомнить. Вероятность появления данного персонажа в игре (Probabity) ставим 100%. В параметре Min/Max Creatures ставим 4 для min и 6 для max. Всего персонажей (Total Creatures) — 10. В условиях воскрешения (Respawn Condition) ставим «никогда» (Never). В списке действий пишем w_h_guard с вероятностью 100%. Цикл действий (Action Looped) ставим TRUE. Зона появления «action3». Сохраняем под именем «npc3».
Пункты появления
Что такое пункт появления? Это место в игровом мире, в котором появляется определенный персонаж. Условия его появления зависят от установленных параметров появления NPC и/или второстепенных персонажей. Нам понадобятся 3 пункта появления. В меню Module выберите пункт Open module, выберите ваш модуль, раскрыв ветвь Areas, выберите первый пункт и дважды щелкните по Edit area. В окне загрузки локации (Area loading mode) нажмите кнопку Entire geometry. То же самое проделайте со второй локацией. Щелкните по стрелке рядом с иконкой Add SpawnPoint. Дважды щелкните по созданному пункту — откроется окно свойств объекта.
Категории появления (Spawn Categories) — один из важнейших параметров пункта появления. Здесь указывается тэг, сообщающий персонажу, что он должен появиться в определенном пункте. Чтобы назначить тэг, щелкните по синей иконке в правой ячейке параметра. Щелкните по верхнему полю в окне «Список строк» (String list) и впишите «tractirchik», затем нажмите «добавить/изменить» (Add/Modify). Создайте еще два пункта: один — в таверне, второй — в подвале. Проделайте все то же самое, только не забудьте в категории появления (Spawn Categories) указать другие тэги («posetitel» для посетителя, «bandit» для бандита).
Области действий
Область действий — пункты в локации, куда отправляется персонаж после появления в игре. Достигнув области действий, персонаж начинает выполнять различные действия, которые вы ему задали. Создадим область для трактирщика. Чтобы создать область действия, щелкните по стрелочке рядом с иконкой топора. В списке действий (Action list) перечислены все действия, которые персонаж должен выполнить в данной области. Учтите, что в параметрах системы появления персонажа должны быть указаны те же действия, которые перечислены в этом параметре, т.е. w_h_prayи w_h_alarmed. Имя зоны (Region name) — один из важнейших параметров области действий. Здесь указывается тэг, который сообщает персонажу, какие действия необходимо выполнить в той или иной области действий. Трактирщику мы присвоили тэг «action1». Теперь тот же тэг необходимо присвоить этой области действий. Далее перейдите на вкладку Run и присвойте значение FALSE, чтобы наш персонаж передвигался пешком, а не бегом. Вот и все. Для остальных персонажей область попробуйте сделать сами.
Диалоги
В диалоге должны участвовать не менее двух персонажей. Все диалоги можно разделить на три группы:
диалоги для заданий;
второстепенные диалоги;
диалоги для видео.
Кроме того, мы можем добавить в диалог мини-игры: покер, кулачный бой, а также возможность выпить с другим персонажем или предложить ему взятку.
Создадим диалог для трактирщика (File — New — Conversation.dlg). Добавим первую реплику диалога. Для этого щелкните правой кнопкой мыши по пункту new conversation, выберите в меню пункт Create Quest Node (создать реплику для задания). Дважды щелкните по EMPTY и впишите текст, например «Здравствуй, ведьмак». Теперь наш герой должен ответить. Выберите реплику «Здравствуй, ведьмак» и щелкните по ней правой кнопкой мыши. В меню выберите пункт Create Quest Reply (создать ответ для задания). Обратите внимание, что реплика Геральта выделена синим цветом. Щелкнув дважды по новой EMPTY, впишите ответ, например: «И ты здравствуй, коли не шутишь. Чем ты так обеспокоен?». Далее опять создайте новый ответ и впишите «Пока», а затем выделите эту реплику. Теперь в окне свойств щелкните по правой ячейке параметра Conv Type (тип диалога). В списке значений выберите Accompanying, что означает сопроводительный текст. Щелкните правой кнопкой по реплике «И ты здравствуй...», потом в меню выберите пункт Create Quest Entry (создать запись для задания) и впишите «Эти бандиты в винном подвале распугали всех посетителей! Что же мне делать?!». Затем создайте ответ для задания к этой реплике и впишите «За приличные деньги я вполне готов поговорить с ними». Выберите реплику «Пока» и щелкните по ней правой кнопкой мыши, выберите пункт Copy. Щелкните правой кнопкой мыши по реплике «Эти бандиты...», выберите пункт Paste as link (вставить). Перетащите новую реплику «Пока» под реплику «За приличные деньги я вполне готов расправиться с ними».
Это важно: в одной и той же ветви диалога может быть только одна реплика задания (слова, которым присвоен идентификатор квеста).
Щелкните по реплике «Хорошо». В окне свойств (Properties) щелкните по правой ячейке параметра Quest Id (идентефикатор задания). Введите «zadanie1».
Итак, мы создали реплику с заданием трактирщика. Однако, если игрок уже получил это задание, этот диалог не должен отображаться в случае, если игрок заговорит с трактирщиком снова. Теперь мы должны создать новый диалог, в котором владелец трактира поинтересуется у Геральта, как идут дела с заданием. Если ведьмак ответит, что уже выполнил задание, трактирщик должен вознаградить его. В окне свойств (Properties) в разделе After Flags (устанавливаемые признаки) щелкните по желтой иконке в правой ячейке параметра Add Flag (добавить признак). Щелкните правой кнопкой мыши по полю в окне и выберите в меню пункт Create Name. Введите имя «zadanie_polucheno» и «banditi_ubiti» и нажмите ОК. Теперь создадим второй признак с именем «banditi_ubiti». Значение этого признака будет равно 0, пока главарь все еще жив. Когда Геральт убьет главаря разбойников, значение признака изменится и будет равно 1. Однако этот признак должен быть глобальным. До этого мы создавали локальные признаки, то есть признаки, действующие только во время диалога. Глобальные признаки действуют на протяжении всей игры, поэтому их можно использовать, к примеру, при создании заданий.
Создадим глобальный признак. Для этого в меню File выберите .2da — New 2DA file. В игре Witcher .2da файлы — это простые базы данных, в которых текст записан в 2D-таблицах. В .2da-файле может быть неограниченное количество столбцов и строк, но каждый новый 2da-файл содержит всего два столбца и две строки. Первая строка — заголовок, а вторая — запись. Первый столбец — ключ записи, по которому производится адресация в базе данных.
Для файла globaldlgflags.2da достаточно одного столбца. Чтобы удалить второй, щелкните правой кнопкой мыши по любому из столбцов. В меню выберите пункт Remove Column, что означает «удалить столбец». Даже если вам не нужна вторая строка, удалить ее нельзя.
Обратите внимание, что нумерация строк начинается с 0 и со второй строки. Почему? Как я говорил выше, первый столбец и первая строка могут использоваться для создания заголовка. В нашем случае в этом нет никакой необходимости, поэтому просто щелкните правой кнопкой мыши по первой строке. В меню выберите пункт ****. Осталось только вписать во вторую строку «banditi_ubiti» и сохранить файл под именем «banditi.2da».
На этом первая часть статьи окончена. В следующем номере мы научимся делать разветвленный диалог, создавать задания, видео и тестировать наш модуль.
До встречи!
Здравствуйте, дорогие читатели! В прошлом номере ЛКИ мы научились создавать локации, редактировать их, создавать триггеры, персонажей, моделировать их поведение. Но мы только затронули тему создания диалогов и в прошлом номере создали диалог для задания. Теперь нас ждет работа над стандартным диалогом, мини-играми в диалогах, заданием, тестированием игры. Итак, приступим!
Продолжение диалога для задания
Для начала вернемся к нашему уже созданному диалогу. Выберите самую первую реплику трактирщика «Здравствуй, ведьмак», щелкните по правой ячейке параметра «Добавить признак» (Add Flag) в разделе «Устанавливаемые признаки» (After Flags). В списке значений выберите «zadanie_polucheno». Все значения в списке перечислены в алфавитном порядке. Итак, мы добавили признак «zadanie_polucheno». Каждый признак характеризуется двумя состояниями: истина (числовое значение 1) или ложь (значение 0). Когда игрок вступает в диалог с трактирщиком, Геральт еще не получил задание. Поэтому значение признака должно быть установлено на 0. Чтобы изменить значение, щелкните по правой ячейке признака «zadanie_polucheno» и введите 0, затем нажмите клавишу Enter.
Это интересно: в окне свойств (Propertions) диалога можно выбрать такие настройки: точку съемки (Camera Shot), которая определяет точку съемки во время диалога, ответную реакцию (Response), отвечающую за то, чего хочет персонаж от Геральта (например, взятку или кольцо). Раздел «Эмоции реплики» (Node Emotions) отвечает за эмоции — набор анимационных роликов, воспроизводимых во время реплики.
Теперь выберите реплику «За приличные деньги...». В окне свойств (Properties) щелкните по правой ячейке параметра «Добавить признак» (Add Flag) в разделе «Устанавливаемые признаки» (After Flags). В списке выбираем пункт «zadanie_polucheno» и ставим значение 1, потом выбираем «banditi_ubiti», однако нам нужно установить значение признака на 0, так как разбойники еще не убиты. Щелкните по правой ячейке признака «banditi_ubiti» и введите 0.
Эти признаки сообщают игре, какие диалоги должны выводиться на экран и когда. Диалог, который мы создадим чуть позже, будет отображаться лишь в том случае, когда значение признака zadanie_polucheno будет равно 1. Мы уже знаем, что это значение признак приобретает после того как Геральт соглашается выполнить задание трактирщика, т. е. выбирает в диалоге реплику «За приличные деньги».
Это важно: свойства признаков диалогов для заданий можно изменить только в разделе «Устанавливаемые признаки» (After Flags). Их значение будет установлено после выбора соответствующей реплики в игре. Кроме того, когда игрок выбирает в диалоге реплику задания (т. е. реплику, которой присвоен идентификатор задания), текст этой и последующих реплик не будет выводиться при следующем диалоге.
Стандартные диалоги
Теперь пришел черед еще одного диалога с трактирщиком. Он будет выводиться после того, как Геральт примет задание трактирщика (в уже созданном нами диалоге), но до того, как он его выполнит. Позже, убив разбойников, Геральт должен будет сообщить трактирщику о своей победе. Для этой цели мы используем этот же диалог. Реплики, отображаемые в диалоге, будут зависеть от значения признаков. Вернемся к нашему диалогу. Новый файл создавать не нужно. Чтобы диалог для задания не мешал нам в работе, можно свернуть его, щелкнув по знаку минуса рядом с репликой «Здравствуй, ведьмак». Чтобы создать стандартный диалог, щелкните правой кнопкой мыши по пункту «Новый диалог» (New Conversation). В меню выберите пункт «Создать стандартную реплику» (Create Dialog Node).
Это интересно: чтобы создать диалог для ролика, т. е. диалог, используемый в ролике на основе ядра игры, выберите в меню пункт создать реплику для ролика (Create Cutscene Node). Диалоги для роликов мало чем отличаются от стандартных диалогов, единственное различие заключается в том, что стандартные диалоги можно помещать в один файл с диалогами для заданий, а диалоги для роликов — нельзя. Диалоги для роликов необходимо сохранять в отдельном файле.
Вернемся к нашему стандартному диалогу. Так как созданная нами реплика — первая в диалоге, она должна принадлежать трактирщику. Дважды щелкните по пустой реплике и введите текст: «Геральт, ты уже разобрался с бандитами?». Теперь необходимо сделать так, чтобы диалог выводился только в том случае, если значение признака «zadanie_polucheno» (posiada_zlecenie) равно 1. Так как свойства признаков диалогов для заданий можно изменить только в разделе «Устанавливаемые признаки» (After Flags), значения этих признаков устанавливаются после выбора соответствующих реплик диалога. При этом свойства признаков стандартных диалогов могут отображаться в разделах «Устанавливаемые признаки» (After Flags) и «Необходимые признаки» (Required Flags). В этом втором разделе значения признаков проверяются (а не устанавливаются) до вывода на экран соответствующей реплики. Реплика выводится только в том случае, если значение определенного признака соответствует необходимому. Добавим признак «zadanie_polucheno» в раздел «Необходимые признаки» (Required Flags), чтобы игра знала, что необходимо проверить его значение. Для этого щелкните по правой ячейке параметра «Добавить признак» (Add Flag) и выберите в списке пункт «zadanie_polucheno». Для того чтобы на экран вывелся диалог, начинающийся с реплики «Геральт, ты уже разобрался с бандитами?», значение признака «zadanie_polucheno» должно быть равно 1. Так оно и есть. Но необходимо создать еще один признак. Его значение будет равно 1, когда Геральт убьет разбойников и сообщит трактирщику о своей победе. Чтобы создать признак, щелкните по желтой иконке в правой ячейке параметра «Добавить признак» (Add Flag) в разделе «Необходимые признаки» (Required Flags), создайте признак «otchet», в списке значений выберите пункт «otchet», присвойте ему значение 0. Создаваемый нами стандартный диалог будет выводиться на экран, когда значение признака «zadanie_polucheno» будет равно 1 (т. е. игрок уже получил задание от трактирщика), а значение «otchet» равно 0 (т. е. игрок еще не отчитался в убийстве главаря).
Продолжим создание диалога. Теперь необходимо добавить реплику Геральта. Выберите реплику «Геральт, ты уже разобрался с бандитами?» и щелкните по ней правой кнопкой мыши, в меню выберите пункт «Создать стандартный ответ» (Create Dialog Reply). Дважды щелкните по пустой реплике и введите текст: «Нет, пока нет». Эта реплика будет отображаться только в том случае, если Геральт еще не убил главаря. Щелкните по правой ячейке параметра «Добавить признак» (Add Flag) в разделе «Необходимые признаки» (Required Flags). В списке значений выберите «banditi_ubiti», присвойте значение 0. Теперь мы добавим реплику с другим ответом. Еще раз щелкните правой кнопкой мыши по реплике «Геральт, ты уже разобрался с бандитами?», в меню выберите пункт «Создать стандартный ответ» (Create Dialog Reply), введите: «Да, они тебя больше не побеспокоят». Эта реплика должна отображаться только после того, как Геральт убьет бандитов. Для этого щелкните по правой ячейке параметра «Добавить признак» (Add Flag) в разделе «Необходимые признаки» (Required Flags). В списке значений выберите пункт «banditi_ubiti», поставьте значение 1. Теперь мы добавим реплику трактирщика. Щелкните правой кнопкой мыши по реплике «Да, они тебя больше не побеспокоят», выберите пункт «Создать стандартный ответ» (Create Dialog Reply) и введите следующий текст: «Ведьмак, ты свою работу выполнил, деньги твои». Эта реплика также может означать, что трактирщик принял отчет о задании. Для этого необходимо установить значение признака «otchet» на 1. Щелкните по правой ячейке параметра «Добавить признак» (Add Flag) в разделе «Устанавливаемые признаки» (After Flags). В списке выбираем пункт «otchet»,ставим значение 1. И, наконец, необходимо создать способ закончить диалог с трактирщиком. Щелкните правой кнопкой мыши по реплике «Геральт, ты уже разобрался с бандитами?», выберите пункт «Создать стандартный ответ» (Create Dialog Reply), впишите «Пока».
Второй диалог с трактирщиком готов. Но мы создадим еще и третий. Этот простой диалог будет выводиться при каждом разговоре Геральта с трактирщиком уже после того, как игрок убьет разбойников и получит свою награду.
Это совет: не забывайте сворачивать ветви диалога, нажав на «-«. Так будет намного проще и удобнее работать с большим количеством текста.
Для того чтобы создать третий диалог, щелкните правой кнопкой мыши по пункту «Новый диалог» (New Conversation), выберите «Создать стандартную реплику» (Create Dialog Node), введите текст: «Геральт, с тобой приятно иметь дело!». Этот диалог должен выводиться только в том случае, если значение признаков «rus_compl» и «otchet» равно 1. Щелкните по правой ячейке параметра «Добавить признак» (Add Flag) в разделе «Необходимые признаки» (Required Flags), далее выберите признаки «banditi_ubiti» и «otchet», поставьте значение 1. Благодаря этим признакам данный диалог будет выводиться только после того, как Геральт убил разбойников и сообщил об этом трактирщику.
Теперь добавим еще одну реплику, но на этот раз продолжит разговор трактирщик. До этого во всех наших диалогах персонажи говорили по очереди. Для этого щелкните правой кнопкой мыши по реплике «Геральт, с тобой приятно иметь дело!», в меню выберите пункт «Создать продолжение» (Create Continue). Именно так создается реплика, не отображаемая в игре, т. е. очередь Геральта просто пропускается. Итак, щелкните правой кнопкой мыши по новой реплике, выберите пункт «Создать стандартную запись» (Create Dialog Entry), впишите «Побольше бы таких людей, как ты!». Вот и все, что касается создания диалогов. Диалог с трактирщиком готов. Теперь сохраняйте диалог, назвав его «dialog1», и всегда выбирайте глобальный (Global) тип файла диалога.
Диалог можно назначить в шаблоне трактирщика, но в случае NPC этого делать не рекомендуется. Дело в том, что NPC можно присваивать разные диалоги для каждой сюжетной стадии. Поэтому мы назначим диалог трактирщика в его системе появления. Прежде всего необходимо открыть файл с системой появления трактирщика. Воспользуемся окном обзора ресурсов (Resources Explorer). В меню «Вид» (View) выберите «Окна > Обзор ресурсов» (Utility Windows > Resources Explorer). В левой части экрана откроется окно обзора ресурсов (Resources Explorer). Систему появления трактирщика мы сохранили в каталоге под именем «npc1.npc», откройте этот файл. Дважды щелкните по полю в столбце «Диалоги» (Dialogs), найдите и выберите «dialog1», сохраните, нажав на значок дискеты.
Мини-игры в диалогах
Теперь мы переходим к созданию диалога с посетителем. Хочу напомнить, что посетитель — это не NPC. Он любит поиграть в покер. Геральт сможет составить посетителю компанию. Чтобы создать новый диалог, в меню «Файл» (File) выберите «Создать > Диалог (.dlg)» (New > Conversation (.dlg)). Откроется окно «Новый диалог» (New Conversation). Учтите, что при этом должно быть открыто окно свойств (Properties). Напомню, как его открыть: в меню «Вид» (View) выберите «Окна > Свойства» (Utility Windows > Properties). Создадим стандартный диалог с посетителем. Щелкните правой кнопкой мыши по пункту «Новый диалог» (New Conversation). В контекстном меню выберите пункт «Создать стандартную реплику» (Create Dialog Node), введите «Не составишь ли мне компанию?», щелкните правой кнопкой мыши и выберите пункт «Создать стандартный ответ» (Create Dialog Reply), введите «Пока», щелкните правой кнопкой мыши по реплике «Не составишь ли мне компанию?», выберите пункт «Создать стандартный ответ» (Create Dialog Reply). Для начала выберите реплику, которую мы только что создали, в разделе «Текст реплики» (Node Text) найдите параметр «Тип диалога» (Conv Type) и установите его значение на Gameplay. Посетитель играет в покер, поэтому значение параметра «Тип действия» (Action Type) установите на DicePoker. Можно создать еще два стандартных ответа (Create Dialog Reply) к реплике «Не составишь ли мне компанию?», параметр «Тип диалога» (Conv Type) для каждого ответа установите на Gameplay. Теперь для параметра «Тип действия» (Action Type) одного ответа выберите кулачный бой (Fistfight), для другого — выпивку (Drink). Сохраняем диалог, назвав «dialog2». Теперь во время разговора Геральта с посетителем будут отображаться иконки игральных костей, кулаков и бутылки. Итак, значение Gameplay для параметра «Тип диалога» (Conv Type) определяет различные виды развлечений, которыми интересуется игрок.
Это интересно: в разделе «Текст реплики» (Node Text) есть два интересных параметра — параметр действия 1: минимальная ставка (Action Param 1: Min_Gold) и параметр действия 2: максимальная ставка (Action Param 2: Max_Gold). Но мы эти опции трогать не будем.
Геральт также может совершать другие действия с персонажами. Вот полный список возможностей кроме тех, которые мы использовали: взятка (Bribe), подарок (Gift), подкуп (Pay), кольцо (Signet), отдых (Sleep), хранилище (Store), улучшение меча (SwordUpgrade), торговля (Trade).
Откройте шаблон посетителя (persona2.utc), в разделе «Статистика» (Statistics) щелкните по желтой иконке в правой ячейке параметра «Диалог» (Conversation), выберите файл dialog2.dlg. Только дайте посетителю достаточно денег, иначе выигрывать будет нечего, а то он и вовсе играть откажется.
Задания
Эта часть статьи посвящена созданию заданий. В основном имеются в виду задания, именуемые «квесты», которые игрок получает от различных персонажей и которые способствуют продвижению сюжетной линии игры.
Задания могут быть самыми разными, что вы, наверное, уже заметили, играя в «Ведьмака». Они могут быть связаны с убийством монстров, доставкой определенного предмета или даже сопровождением другого персонажа из одного пункта в другой. Тип задания зависит от игрока. Единственное, что может вас ограничить, — ваша собственная фантазия.
Задания могут быть основными и дополнительными. Основные задания влияют на ход игры, и их выполнение необходимо для прохождения. Дополнительные задания для прохождения игры выполнять необязательно.
Каждое задание в игре разделено на несколько стадий. Их может быть много, но не менее двух. Обязательные стадии: начало и завершение задания. Задания могут быть простыми и состоять всего из двух этих стадий, а могут быть очень сложными и включать в себя множество этапов, каждый из которых состоит из подзаданий. Для упрощения работы созданные вами задания можно добавлять в одну из баз данных заданий.
Ну что ж, приступим. Мы создадим относительно простое задание. Его целью будет убийство главаря разбойников, но при этом оно будет включать в себя три стадии. Это начало задания, исполнение задания (стадия, в которой Геральт убивает главаря) и завершение задания. Чтобы создать новое задание, в меню «Файл» (File) выберите «Создать > Файл задания (.qst)» (New > Quest File (.qst)). По умолчанию каждое задание включает в себя две стадии: начало задания (Quest Beginning) и завершение задания (Quest Completed). Кроме того, в окне отображается информация о персонажах, диалогах и предметах, связанных с заданием. Задание отображается в виде горизонтальной схемы.
Это полезно: вы, однако, можете поменять вид на вертикальную схему. Для этого щелкните правой кнопкой мыши в окне «Новое задание» (New Quest) и в меню выберите пункт «Вертикальный вид» (Vertical View).
Геральт получит задание, если игрок выберет реплику «За приличные деньги я вполне готов поговорить с ними» во время диалога с трактирщиком. Так как это и есть начало задания, необходимо выбрать эту реплику и создать условие получения задания. Выберите пункт «Начало задания» (Quest Beginning) и щелкните по нему правой кнопкой мыши. В меню выберите «Добавить условие начала > Выбранная реплика диалога» (Add Starting Condition > Dialog Line Chosen). В блоке «Начало задания» (Quest Beginning) появилось новое условие. Если бы в диалоге было две или более реплик, начинающих задание, мы могли бы добавить другое условие. Для этого выберите созданное условие в блоке «Начало задания» (Quest Beginning) и щелкните по нему правой кнопкой мыши. В меню выберите пункт «Добавить альтернативное условие» (Add 'or' Condition). Мы можем добавить еще одно условие начала задания. Выберите блок «Начало задания» (Quest Beginning) и щелкните по нему правой кнопкой мыши. В меню выберите «Добавить условие начала > Стадия игры ==« (Add Starting Condition > Game Phase Is ==). Таким образом, блок «Начало задания» (Quest Beginning) содержит три условия начала. Однако для начала задания требуется выполнение только двух из них. Почему? Потому что второе условие, «Выбранная реплика диалога» (Dialog Line Chosen), относится к типу «or», что означает, что должно быть выполнено только одно из двух условий. Для начала нашего задания требуется выполнение только одного условия, поэтому остальные два нам не нужны. Щелкните правой кнопкой мыши по полю рядом с условием «Стадия игры == (Game Phase Is ==). В меню выберите пункт «Удалить альтернативное условие» (Delete 'or' Condition). Проделайте то же самое со вторым условием «Выбранная реплика диалога» (Dialog Line Chosen). Щелкните правой кнопкой мыши по нижнему полю в условии «Выбранная реплика диалога» (Dialog Line Chosen). Еще раз выберите в меню пункт «Удалить альтернативное условие» (Delete 'or' Condition).
Теперь необходимо присвоить условию «Выбранная реплика диалога» (Dialog Line Chosen) соответствующую реплику. Щелкните левой кнопкой мыши по полю рядом с условием «Выбранная реплика диалога» (Dialog Line Chosen). Реплики отображаются в виде древовидной схемы. Наш диалог «dialog1» также находится в списке. Чтобы выбрать нужную реплику, раскройте ветвь «dialog1», щелкнув по знаку плюса рядом с именем диалога, затем щелкните по реплике «За приличные деньги...» .
Это важно: условие «Выбранная реплика диалога» (Dialog Line Chosen) может быть прогрессивным (условие, завершающее стадию задания) и непрогрессивным (условие, не завершающее стадию задания). Чтобы сделать условие «Выбранная реплика диалога» (Dialog Line Chosen) непрогрессивным, поставьте флажок в поле рядом с указанной репликой. Нам ставить галочку не нужно.
А теперь нам необходимо задать параметры начала задания (Quest Beginning). Перейдем к окну свойств (Properties) в правой части экрана. Здесь вы увидите список параметров начала задания (Quest Beginning). В раздел «Задание» (Quest), в локализованное имя задания (Quest Localized Name) вписываем имя, например, «Поручение». В локализованное имя стадии (Phase Localized Name) вписываем «Охота». В локализованное описание стадии (Phase Localized Description) вписываем «Трактирщик попросил меня разобраться с бандитами в винном погребе. За это он меня щедро вознаградит». В краткое локализованное описание стадии (Phase Localized Short Description) вписываем «Я должен разобраться с бандитами». В основное задание (Is Primary) ставим True. Остальные настройки можете перевести на русский и использовать в своем модуле, но нам они не понадобятся.
В разделе «Действия при завершении стадии» (OnPhaseFinished Actions) указываются действия, выполняемые после завершения соответствующей стадии задания. Чтобы вы поняли принцип действия этих параметров, дадим Геральту 100 оренов. Тогда у него будут деньги на игру в покер с посетителем. Для этого в действиях при завершении стадии (OnPhaseFinished) «Добавить очки опыта игроку» (Actions Add XP to player) меняем на «Дать золото игроку» (Transfer gold to player), вписываем 500. Система появления NPC указывается в параметре npc_resref. Именно от этого персонажа Геральт получит деньги. Учтите, что в снаряжении персонажа должно быть достаточно денег, чтобы покрыть сумму, указанную в параметре gold_amount. Чтобы выбрать персонажа, щелкните по правой ячейке параметра npc_resref, выберите «npc1.npc». Кроме того, нам нужно указать еще одно действие: добавить опыт игроку (Add XP to player) в разделе «Действия при завершении задания» (OnQuestFinished Actions). Это позволит Геральту получить опыт за выполнение задания. Добавьте действие «Добавить опыт игроку» (Add XP to player) и параметру xp присвойте значение 500. На этом все, что касается параметров начала задания (Quest Beginning).
Теперь вернемся к нашему заданию. Следующий этап — создание новой стадии. Щелкните правой кнопкой мыши по блоку «Начало задания» (Quest Beginning), в меню выберите «Вставить стадию > условная стадия» (Insert Phase > Conditional Phase), введите имя «razboyniki». Так как стадия «razboyniki» является условной, то нам необходимо присвоить ей условие завершения. Это условие укажет, что необходимо сделать, чтобы завершить стадию, т. е. в нашем случае Геральт должен убить главаря разбойников. Щелкните правой кнопкой мыши по блоку «razboyniki». В меню выберите «Добавить условие завершения > Персонаж мертв» (Add Completing Condition > Character Is Dead). Теперь откройте файл «persona3.utc», в «Тэг» (Tag) пропишите «razb», сохраняйте. Далее переключаемся на задания, вписываем «razb» в чистое поле «Персонаж мертв» (Character is Dead), рядом количество — 1.
Это важно: учтите, что количество персонажей, которых необходимо убить, чтобы условие было выполнено, — это общее количество персонажей такого типа во всей игре. Например, если в первом задании Геральт должен убить пять волков, а в следующем — семь, условие будет выполнено лишь в том случае, если общее количество волков в этом параметре установлено 12 (а не 7). Для каждого задания рекомендуется определять новых персонажей с новыми тегами.
Теперь необходимо настроить параметры стадии «Главарь разбойников» (Herszt bandytуw). Щелкаем по блоку «razboyniki», переходим в окно свойств (Properties), в котором перечислены параметры стадии. Эти параметры практически аналогичны свойствам начала задания (Quest Beginning), установите следующие значения: в локализованном имени стадии (Phase Localized Name) — «Разбойники», в локализованном описании стадии (Phase Localized Description) — «С разбойниками я разобрался, теперь пришел черед трактирщика рассчитаться со мной», в кратком локализованном описании стадии (Phase Localized Short Description) — «Я убил бандита». Значения остальных параметров не меняйте. Осталось только выбрать действия в разделе «Действия при завершении стадии» (OnPhaseFinished Actions). Эти действия будут выполнены после завершения стадии, т. е. после того как главарь погибнет. Достаточно одного действия, а именно — установить признак диалога. Как вы помните, мы присвоили глобальному признаку «banditi_ubiti» значение 1. Благодаря этому признаку Геральт, убив главаря, сможет отчитаться перед трактирщиком о выполненном задании. Для этого щелкните по правой ячейке параметра «Доступные действия» (Available actions) и выберите пункт «Установить признак диалога» (Set dialog flag), щелкните «+», потом щелкните по правой ячейке параметра Name и в списке значений выберите «banditi_ubiti», параметру Value ставьте значение True.
Стадия готова. Осталось создать последнюю стадию, в которой задание будет завершено. Но прежде чем мы это сделаем, нам нужно слегка изменить диалог трактирщика. Если окно обзора ресурсов (Resources Explorer) закрыто, откройте его. Для этого в меню «Вид» (View) выберите «Окна > Обзор ресурсов» (Utility Windows > Resources Explorer), откройте «dialog1.dlg». Теперь выберите реплику «Да, они тебя больше не побеспокоят». В окне свойств (Properties) параметру «Тип диалога» (Conv Type) присвойте значение «Quest», параметру «Идентификатор задания» (Quest Id) присвойте значение «banditi_ubiti» и нажмите на значок дискеты, т.е. сохранитесь.
Теперь добавим последнюю стадию задания. Щелкните правой кнопкой мыши по блоку «Разбойники», в меню выберите «Вставить стадию > Условная стадия» (Insert Phase > Conditional Phase). В окне «Введите имя» (Enter Name) введите «Трактирщик» и нажмите кнопку «OK». Дважды щелкните по полю рядом с пунктом «Выбранная реплика диалога» (Dialog Line Chosen). Откроется окно выбора (Select). Раскройте ветвь dialog1 идважды щелкните по реплике «Да, они тебя больше не побеспокоят». Перейдите в окно свойств (Properties) и установите следующие параметры: в локализованном имени стадии (Phase Localized Name) — «Трактирщик», в локализованном описании стадии (Phase Localized Description) — «Трактирщик доволен», в кратком локализованном описании стадии (Phase Localized Short Description) — «Трактирщик передал мне 500 оренов». Вот и все. Задание готово и может быть использовано в нашем модуле.
База данных заданий
Теперь мы займемся созданием баз данных заданий. Для чего они нужны? Ответ прост: с их помощью управлять заданиями гораздо проще и эффективнее, чем без них. В нашем случае база данных не нужна, так как мы создали всего одно задание. Но представьте, что было бы, если бы у нас было 50 заданий и нам нужно было бы все их открыть. В обычных условиях на открытие 50 файлов ушло бы немало времени. Итак, чтобы создать новую базу данных, в меню «Файл» (File) выберите «Создать > База данных заданий (.qdb)» (New > Quests Database (.qdb)). Назовем базу «base1». Теперь необходимо добавить в базу данных наше задание. Для этого щелкните правой кнопкой мыши по полю содержимого базы (в данный момент оно пусто), в меню выберите «Добавить готовое задание > quest1».
Запуск и тестирование игры
Пора переходить к следующему этапу создания нашего модуля. Мы создали шаблоны персонажей, системы появления, диалоги и одно простое задание. Теперь осталось лишь собрать все вместе и протестировать, насколько хорошо все это работает в игре.
Назначение и добавление файлов в модуль
Нам необходимо присвоить все созданные нами ресурсы соответствующим параметрам модуля. Если мы этого не сделаем, игра просто их не увидит, и модуль не будет работать должным образом. Ресурсы необходимо добавить в модуль. Так будет проще распространять созданный нами модуль, например, через интернет. Но более подробно мы поговорим на эту тему чуть позже. Прежде всего необходимо открыть наш модуль. В меню «Модуль» (Module) выберите пункт «Открыть модуль» (Open Module). После открытия модуля откроется окно обзора модуля (Module Explorer). Дважды щелкните по пункту «Свойства модуля» (Module Properties). Параметр «Список баз данных заданий» (Quest Database list) позволяет нам присвоить базу данных заданий, параметр «Список заданий» (Quest List) позволяет присвоить задание, параметр «Список основных персонажей» (Story NPC list) позволяет присвоить систему появления NPC (т. е. систему появлениятрактирщика), а параметр «Список систем появления» (Spawnset list) позволяет присвоить системы появления остальных персонажей. Добавьте файлы в модуль самостоятельно (base1, quest1, npc1, npc2, npc3), сохраняйте модуль.
Нажмите Game -> Play, чтобы запустить игру. Пройдитесь. Что? Не видите посетителей и бандитов? Все в порядке. По умолчанию системы появления всегда отключены. Это не относится к системам появления NPC, поэтому трактирщика мы видим сразу после запуска модуля. Наша первая задача — активировать соответствующие системы появления, чтобы игрок, запустивший наш модуль, видел всех необходимых персонажей. Включить и отключить систему появления можно двумя способами: с помощью скрипта или, что значительно проще, с помощью особого задания. Этим мы займемся чуть позже, а пока нам необходимо несколькими способами проверить системы появления (мы же тестируем модуль, в конце концов). Откройте меню «Отладка» (Debug), которое появится после запуска модуля. В этом меню выберите «Системы появления > Системы появления модуля» (Spawnsets > Module Spawnsets). В меню «Системы появления модуля» (Module Spawnsets) перечислены все системы появления, которые мы присвоили модулю. Напоминаю, что присвоение модулю файла и добавление файла в модуль — далеко не одно и то же. Сначала запустим систему появления посетителя. Для этого в меню «Отладка» (Debug) выберите «Системы появления > Системы появления модуля > npc2» (Spawnsets > Module Spawnsets > npc2). Через секунду посетитель возникнет в своем пункте появления. Проделайте такую же операцию с npc3, т.е. бандитами. Спустя пару мгновений все наши персонажи должны появиться в модуле. Системы появления можно включить и отключать с помощью заданий. Для этого достаточно выбрать действие «Включить систему появления» (Enable spawnset) или «Выключить систему появления» (Disable spawnset) в разделе «Действия при завершении стадии» (OnPhaseFinished Actions) или «Действия при завершении задания» (OnQuestFinished Actions). По этой причине мы можем усовершенствовать наше задание. Каким образом? Разбойники появятся в модуле только после того, как Геральт получит задание от трактирщика. Зачем? Это поможет нам избежать путаницы с заданием. Например, что произойдет, если Геральт убьет главаря разбойников, не поговорив сначала с трактирщиком? С учетом такой возможности нам пришлось бы создавать новые реплики диалога.
Однако мы добавили в наше задание вторую стадию, и благодаря этому мы сможем избежать вышеупомянутых осложнений. Теперь мы знаем, как можно включить и отключить системы появления при тестировании модуля. Пока наш модуль запущен, мы можем проверить и остальные аспекты работы модуля. Сейчас перейдем к окну обзора ресурсов (Resources Explorer). В этом окне есть несколько интересных команд, которые можно использовать при тестировании модуля. Если окно обзора ресурсов закрыто, откройте его, выбрав в меню «Вид» (View) «Окна > Обзор ресурсов» (Utility Windows > Resources Explorer). Раскройте ветвь Scripts и щелкните правой кнопкой мыши по любому файлу с расширением .lua. Щелкните правой кнопкой мыши по любому файлу с расширением .utc. В меню появится раздел «Отладка» (Debug), а в нем — пункт «Появление персонажа рядом с игроком» (Spawn creature near player). При выборе этого пункта указанный персонаж появится рядом с Геральтом (напоминаю, что файлы .utc — это шаблоны персонажей). Это очень полезная команда. Щелкните правой кнопкой мыши по любому файлу с расширением .spn. В разделе «Отладка» (Debug) появится новый пункт «Выключить систему появления» (Disable spawnset) или Включить систему появления (Enable spawnset).
А теперь давайте займемся изменениями, о которых упоминалось выше. Сначала нам необходимо изменить задание, чтобы разбойники появлялись в игре после того, как Геральт согласится на задание трактирщика. Как я уже говорил, после того как мы добавили файл в модуль, все изменения необходимо производить в окне базы данных заданий (Quest Explorer). Затем дважды щелкните по пункту quest1. Теперь необходимо внести вышеупомянутые изменения. Откройте окно свойств. Для этого в меню «Вид» (View) выберите «Окна > Свойства» (Utility Windows > Properties). Теперь выберите блок «Начало задания» (Quest Beginning), перейдите в окно свойств (Properties). Внесем изменения в раздел «Действия при завершении стадии» (OnPhaseFinished Actions). Почему именно в этот раздел? Потому что действия, указанные в разделе «Действия при завершении стадии» (OnPhaseFinished Actions), выполняются после завершения соответствующей стадии. В нашемслучае стадия «Начало задания» (Quest Beginning) отвечает за действия, выполняемые после того, какГеральт согласится на задание трактирщика. Щелкните по правой ячейке параметра «Доступные действия» (Available actions) и выберите в списке значений пункт «Включить систему появления» (Enable spawnset). Затем щелкните по синему знаку плюса. Теперь щелкните по желтой иконке в правой ячейке параметра spn_resref, Откроется стандартное окно Windows для загрузки файлов. Откройте систему появления разбойников, выберите файл npc3, нажмите кнопку «Открыть». Система появления будет указана в значении параметра spn_resref. Вот и все. Мы внесли все необходимые изменения, и теперь осталось лишь их сохранить.
Однако нам необходимо создать еще одно задание. Это будет так называемое «инициирующее задание», которое активируется вместе с модулем при запуске игры. Естественно, игрок даже не узнает о существовании этого задания, так как основная его цель — включить необходимые системы появления персонажей. Сейчас я расскажу вам, как создать особое задание, которое будет автоматически добавлено в базу данных заданий. Перейдите в окно обзора заданий (Quest Explorer). Щелкните правой кнопкой мыши по любой строке и выберите пункт «Добавить новое задание > base1» (Add New Quest To > base1), введите имя файла «init» нажмите «Сохранить», затем введите имя задания «initialization». Так как это задание используется просто для начала нашего приключения, нам не нужно переименовывать стадии и т. п. Но в задании должна быть одна условная стадия. Щелкните правой кнопкой мыши по блоку «Начало задания» (Quest Beginning) и выберите пункт «Вставить стадию > Условная стадия» (Insert Phase > Conditional Phase). Откроется окно «Ввести имя» (Enter name). Оставьте значение, предложенное по умолчанию, и нажмите кнопку OK. Теперь перейдите в окно свойств (Properties) и откройте раздел «Действия при завершении стадии» (OnPhaseFinished Actions). Так как стадии «Начало задания» (Quest Beginning) не присвоено ни одного действия, задание активируется при загрузке модуля. Все действия, перечисленные в разделе «Действия при завершении стадии» (OnPhaseFinished Actions), будут выполнены автоматически. Это задание используется только для включения стадии появления посетителей. Щелкните по правой ячейке параметра «Доступные действия» (Available actions) в разделе «Действия при завершении стадии» (OnPhaseFinished Actions). Выберите «Включить систему появления» (Enable spawnset) и щелкните по синему знаку плюса рядом с выбранным действием. Теперь щелкните по желтой иконке в правой ячейке параметра spn_resref. Откроется стандартное окно Windows для загрузки файлов, выберите файл npc2 и нажмите кнопку «Открыть».
На диске: вы сможете найти несколько лучших на этот момент модулей, созданных в редакторе D’jinni, а также модуль, описываемый в этой статье. Советую подробно рассмотреть их снаружи и изнутри.
С этим заданием мы закончили. Не забудьте сохранить изменения.
У бандитов нет интеллекта даже чтобы вас атаковать. Для этого придется не один день повозиться с настройкой. |
Ну вот и все! Этот простой на вид модуль затрагивает почти все функции редактора. Как следует разобравшись в его устройстве, вы сможете создавать свои интереснейшие приключения. Фантазируйте и воплощайте!