27 мая 2003
Обновлено 17.05.2023

Героический квестострой

Героический квестострой - изображение обложка

Потенциал, заложенный в редактор четвертых “Героев”, столь велик, что можно реализовывать идеи, о которых сами разработчики не подозревали. Сегодня мы научимся нестандартно использовать квесты, создавать на их основе разветвленный сюжет. Спешим вас предупредить, что материал не простой, полностью разобраться в нем вы сможете, только повторив все описанные действия непосредственно в редакторе. Зато, поняв основной принцип, вы сможете создавать сценарии, которые не являются простым набором квестов. Одно задание будет связано с другим, очередной квест будет логично дополнять предыдущий. Из горсти зерен — поле Эврисфей посылал Геракла на подвиги из своего дворца. Геракл выполнял одно задание (квест), возвращался к царю, говорил, что работа сделана, и Эврисфей давал Гераклу новое задание. Подобную преемственность можно создать и в “Героях”, но… Не через Quest Hut ’ы, которые имеют серьезный недостаток: они в буквальном смысле одноразовые. Если вы выполнили требуемый квест, Quest Hut перестает работать. Чтобы обойти подобную “одноразовость”, мы будем пользоваться Placed Events. Quest Huts нам тоже пригодятся, но только для создания дополнительных квестов. Использование Placed Events не лишено недостатков, основной из которых — отсутствие записи квестов в журнал. Поэтому всю схему заданий придется построить так, чтобы игрок, получая квест, в дальнейшем не мог забыть, что же ему нужно сделать. Ведь и Геракл не забывал, какой очередной подвиг его ждет… Основную роль при создании каждого квеста будут играть Placed Events. Блок-схема — основа основ Прежде чем создавать любой скрипт,

Героический квестострой - фото 1

необходимо построить его блок-схему. Те, кто хоть немного знаком с программированием, поняли, о чем идет речь. Для тех же, кто не штудирует регулярно материалы рубрики “Самопал”, поясним на примере. Допустим, что квесты может выполнять только определенный герой в вашей армии. Создадим его и назовем Геракл. Гераклу надо выполнить по очереди несколько квестов. Представим, что Квест1 он уже выполнил. Можно выполнять Квест2. Как только это будет сделано, основное задание будет считаться выполненным, Гераклу дадут EXP (очки опыта) и разрешат выполнять Квест3. И пока Геракл его не выполнит, ему будут говорить: “Ты не выполнил задание”. Согласно стандартному принципу построения блок-схем, скрипт должен выглядеть так: __ Но в этой схеме есть один недостаток. В

Героический квестострой - фото 2

Так выглядит правильная схема.
начале все правильно, но как только мы активируем Placed Event снова, нам сначала покажут брифинг и лишь потом произойдет проверка его выполнения. То есть Геракл мог и не выполнить квеста, а брифинг с поздравлением ему уже покажут. Хорошо если брифинг небольшой, а если это целая история? Игрок будет удивлен. Чтобы избежать казуса, нужно добавить еще одно условие перед брифингом, которое разделит скрипт на две части. Выглядеть условие должно так: — Если брифинга не было — запустить брифинг, отметить, что его показ состоялся, и продолжить выполнение. — Если брифинг был — произвести проверку на выполнение. Рассмотрим, как наша блок-схема может быть реализована в конечном скрипте, в редакторе. 1. Первая переменная, определяющая, выполнен ли Квест1. Назовем ее Quest1_Completed. Так как Геракл выполнил Квест1 , переменная имеет статус True. 2. Переменную, отвечающую за брифинг, назовем Q2_Briefed. 3. Последняя переменная, которая завершит выполнение квеста, будет называться Quest2_Completed. Правильную блок-схему мы построили и даже разобрались, как она в общих чертах должна быть реализована в редакторе. Теперь нужно перевести условные значки блок-схемы в реальные квесты в игре. Квестовая чехарда Ставим на карту дом ( Quest Hut ), в котором Гераклу будут выдавать квест. Перед входом помещаем Placed Event , который сработает, когда герой войдет в дом. Скрипт, прописанный в Placed Event, очень похож на тот, что используется в соответствующем Quest Hut, но его можно будет использовать снова и снова. В дом можно войти с разных сторон, поэтому не забудьте закрыть все входы, кроме главного, где установлен Event. Назовите Event, например, Quests. Зайдите в Map Properties и создайте Placed Event под тем же именем Quests. Перейдите в подраздел Script , где нужно создать Conditional Action. Дальше необходимо выполнить следующую последовательность действий: 1. Проверяем, имеет ли переменная Quest1_Completed статус True. В поле If выбираем Variable , далее из списка берем Quest1_Completed. По умолчанию переменная имеет значение True. Поле Else оставляем пустым. 2. Делаем проверку. В поле Then выбираем Conditional Action. В поле If находим Has certain Hero , после чего выбираем героя с именем Геракл. В поле Else нужно ввести текст: “Только Геракл может выполнить этот квест” или другой текст с похожим смыслом. 3. Проведем проверку брифинга. Выставляем Conditional Action. Герой получает квест в первый раз, поэтому ему надо пояснить, что, где и как он должен сделать. Выбираем If NOT Q2_Briefed. В разделе Then создаем Sequence. Присваиваем переменной Q2_Briefed статус True и вводим текст самого брифинга, например: “Геракл, ты должен убить Немейского Льва”. Не забудьте создать соответствующего врага — в нашем случае Льва — в редакторе. 4. В Sequence идет проверка на выполнение квеста. Создаем Conditional Action и выбираем If / Certain Hero is Dead. Для условия “Немейский Лев умер” в поле Then создаем Sequence , где от всей души поздравим Геракла с пройденным квестом. Дадим Гераклу EXP, объявим переменную Quest2_Completed и сделаем Remove Script. Если же Лев жив, сообщаем игроку, что он не убил Льва, после чего: 5. Возвращаемся к пункту 3. Раздел Else будет пуст. Подразумевается, что игрок проинструктирован и переменная Q2_Briefed имеет статус True. Проводим проверку квеста на выполнение так же, как описано в пункте 4. Если вы будете создавать сюжет вашего уровня по описанному выше образцу, то получите дерево из квестов, количество ветвей которого будет равно 2 в степени n , где n — число последовательных квестов. Работать по такому принципу довольно долго. Можно упростить задачу, создавая не отдельные маленькие квесты, а один большой квест с несколькими заданиями. Каждый последующий квест будет автоматически запускаться после срабатывания предыдущего (когда Questn_Completed примет значение True ). Вы спросите, как в таком случае объединить все локации, где будут выдаваться квесты, в одну. Мы ведь решили, что Эврисфей дает Гераклу задание только в своем дворце. Проблема решается просто: мы ведь можем накладывать Placed Events на карте один на другой! Это значительно проще, чем строить огромное ветвистое квестовое дерево, повторяя процедуру создания много-много раз. Главное без ошибок создать первый квест. Ведь если в нем будет ошибка, то она повторится во всех “размноженных” квестах. Файл с примером правильного построения квестового дерева вы можете взять с нашего компакта. В плену багов Мы создали разветвленную систему квестов. К сожалению, редактор четвертых “Героев” содержит в себе большое количество багов, некоторые из них не позволяют без проблем нашей схемой воспользоваться. Но почти все баги можно обойти. Самый коварный огрех редактора — неработающая команда Remove Script в Continuous Event определенного героя в армии. Все команды скриптов благополучно функционируют, если их создать в разделе Events ЦЕЛОЙ армии. Если же перейти на определенного героя в этой армии и там создавать Continuous Events, то ничего не получится. Поэтому оперировать нужно именно целыми армиями. Еще один баг — некорректное функционирование раздела Branches в команде Combat. Неважно, выиграл или проиграл герой эту битву, но после нее сработает либо раздел Victorious , либо Defeated , причем в случайном ( Random ) порядке. Данный баг иногда себя не проявляет, и все работает нормально. Если же проблема возникла, то ее можно обойти. Combat помещается в Sequence , чтобы мы могли добавить еще пару команд. Раздел Branches оставляете пустым. Сразу после команды Combat надо создать новую переменную, например LookforDeath со статусом True. Данная переменная будет запускать проверку на смерть героя и (или) его армии. Заходите в раздел Continuous Events той армии, где находится ваш герой. Создаете новый скрипт, а в нем Conditional Action. Условием его активации будет наша переменная LookforDeath. Прикидываете все возможные последствия боя и прописываете их. Еще придется “поколдовать” с командами IfHeroIsDead ( NOT Dead ) и Total number of creatures in army. Не забудьте отключить переменную проверки LookforDeath , поменяв ее статус на False , иначе компьютер каждую секунду будет постоянно проверять вашего героя, не скончался ли он. При обращении к разделу Continuous Events вы можете натолкнуться еще на один баг. Так как вы применили Continuous Event ко всей армии, а не к определенному герою, то при перетаскивании героя в другую армию проверка перестает работать. Так что заранее предупредите игрока, например в брифинге, что передавать армию другому игроку не следует. Можно даже это как-то обосновать с точки зрения сюжета. И обязательно отключите караван в городе. Ведь когда герой путешествует в караване, то в городе, куда этот караван направляется, создается армия-клон той, что была у игрока в городе, откуда вышел караван. А исходная армия просто исчезает со всеми скриптами. Игроку также следует в ненавязчивой форме сообщить, что при смерти героя необходимо, чтобы кто-то из его армии обязательно выжил. Иначе герой не сможет воскреснуть, ведь перетаскивать армию погибшего героя нельзя. Один из ближайших патчей к “Героям” должен исправить описанные выше ошибки, и вам не придется делать так много лишней работы по их обхождению. *** Свои работы с оригинальной системой квестов присылайте на gamezone@igromania.ru с пометкой “Работа читателя Мании”. Лучшие уровни займут достойное место на нашем компакте.

Комментарии
Чтобы оставить комментарий,Войдите или Зарегистрируйтесь