Morrowind — Construction Set Урок 2-3
Морровинд — великая сила. А секрет управления этой силой лежит на поверхности — это Morrowind — Construction Set. В этой статье я проведу сразу два урока.
УРОК 2
Цель: научиться создавать квесты и внедрять их в игру.
Интерфейс
Чтобы попасть в окно редактирования журнала, войдите в окно Dialogue и выберите закладку Journal над списком тем. Тут мы наблюдаем, что список тем превратился в список квестов. Зайдите на тему "town_balmora" и вы сразу все поймете. В списке фраз отображаются все журнальные записи этого квеста. У каждой записи есть свой Index (для чего он нужен, вы узнаете потом) и три значения Y/N (Quest Name — является ли эта запись названием квеста, показываемым игроку, Finished — является ли запись концом квеста (квест становится выполненным, если запись присутствует в дневнике) и Restart — значит, что при выводе этой надписи квест обнуляется).
Система журнала движка TES3
Чтобы сделать запись активной, надо в результате фразы написать "Journal XXXX Y", где XXXX — название квеста в списке тем, а Y — индекс записи, которую надо активировать. При активации первой (имеется в виду не по первому индексу, а первая активированная запись этого квеста) записи в квесте активируется и сам квест. Но в случае, если в теме не имеется ни одной записи с пометкой Quest Name, квест не активируется, а просто выводится запись.
Создаем квест
Для начала создадим журнальную тему, например "MY_First". Суть квеста: Косадерес желает смерти одного нехорошего дяди (Редиски) из Камоны Тонг и просит вас за 2 "косаря" осуществить его мечты. Создаем следующие журнальные записи:
1) "Заклятый враг Кая", Quest Name — On.
2) "Глава шпионов, желает смерти Редиски, из углового клуба в Бальморе", index — 10.
3) "Я согласился убить Редиску. Им оказался Банор Серан из углового клуба в Бальморе. В случае удачи, я получу 2 косаря. КРУТО!!!" (можно без эмоций), index — 20.
4) "Я убил Банора Серана, но получил только 1500 зайчиков, козел этот Косадерес!", index — 30, Finished — On.
На втором этапе работы мы заодно проверим самостоятельную работу. При Фаргусовском переводе Кай "виснет" на теме "Report to Caius Cosades". У меня это была фраза "Итак, %PCName. Тебе нужны приказы? Или у тебя вопросы об Инструкторах клинка?" (для активизации темы "Orders" надо просто поставить ее в конец фразы, при этом должна была активизироваться соответствующая тема). Однако если вы не являетесь "счастливым" обладателем диска от Фаргуса, можете выбрать другую тему, определив нужную фразу по алгоритму приложения №4 в прошлой статье (ВР№2'2004). Далее после выбранной фразы ставим что-нибудь типа "...Можешь заодно поквитаться с Редиской и сделать мне большое одолжение".
Теперь создаем тему "поквитаться с Редиской", создаем для нее следующие фразы и сортируем их в таком порядке:
1) "Спасибо тебе %PCName. Век тебя не забуду."
2) "Ты убил Банора, однако я не могу выплатить тебе весь гонорар, сам понимаешь, налоги душат..."
3) "Ты не убил Банора? Тогда убирайся!!!"
4) "Редиска — это Банор Серан из углового клуба, убей его и ты получишь ДВА рубля"
5) "Если захочешь помочь мне, я расскажу тебе, как поквитаться с Редиской."
6) "Мне нужен человек, который может поквитаться с Редиской, ты согласен мне помочь?"
В результатах фразы 6) ставим:
"Choice "Копи бабло, работа будет сделана!" 1 "Нет! Я не убийца!" 2
Journal "MY_First" 10"
Фразы 4):
"Journal "MY_First" 20"
Фразы 2):
"Journal "MY_First" 30
Player->AddItem, "Gold_100" 1500
В условиях фразы 5) ставим:
Function/Variable>Function>Choice>=>2
Function/V>Jouranl>MY_First>=>10
Фразы 4):
F/V>Function>Choice>=>1
F/V>Jouranl>MY_First>=>10
Фразы 3):
F/V>Jouranl>MY_First>=>20
F/V>Dead>banor seran>=>0
Фразы 2):
F/V>Jouranl>MY_First>=>20
F/V>Dead>banor seran> > >0
Фразы 1):
F/V>Jouranl>MY_First>=>30
Непонятно? Поясняю. При первом разговоре на тему "поквитаться с Редиской" игрок увидит фразу 6), так как все остальные не подходят по условию (везде есть условие Jouranl, которая показывает, есть ли данная запись в журнале, а так как ни одной из фраз мы не видели, то появится фраза без условий). Процедура Journal в результатах активирует запись квеста, указанного в "", с указанным индексом. В фразе 6) используется функция Choice, в результате которой игроку выводятся несколько вариантов ответов. После каждого варианта ответа пишется числовой индекс, который будет использоваться далее. После выбора игроком одного из вариантов Choice список фраз пробирается игрой заново, и выводится фраза с условием функции Choice (следует указать индекс функции, при котором фраза будет доступна). Если это фраза 4), то активируется журнальная запись с индексом 20 (опять же процедура Journal), и игрок получает информацию о Редиске. Фразы 2) и 3) отличаются только функцией смерти Банора Серана (чтобы задать условие смерти NPC, функцию Dead желательно использовать с параметром >0, а несмерти =0). При фразе 3) ничего не меняется, а при фразе 2) игрок получает свой неполный гонорар (в результатах функция AddItem действует аналогично такой же консольной команде (точнее, это и есть команда), то есть добавляет указанному персонажу указанную вещь) и квест становится завершенным.
Создавать квесты оказалось не так уж и сложно, не так ли? Однако я не могу в одной статье описать все возможности диалогов и журнала. Вникайте в них сами, и вы удивитесь, ЧТО можно сделать в одном только Dialogue Window.
УРОК 3
Цель: изучить всевозможные опции персонажей.
Введение
Пора вылезти за пределы окна диалогов. На этом уроке мы рассмотрим все мелочные опции, доступ к которым дает Сет (а это 100%-ые игровые возможности). Рассмотрим мы в основном общие параметры NPC и игрока. Советую сохранять все созданные в процессе обучения плагины, чтобы потом их можно было использовать.
Скиллы
Начинать надо с самого простого. Скиллы — один из главных элементов любого RPG.
В Морроувинде их 27 (перечислять не буду). К сожалению, редактор не позволяет создавать и добавлять эффекты для них, но редактировать их мы сможем.
В меню Character выбираем Skills..., появляется окно. Здесь мы можем редактировать:
1) Основной атрибут (Governing Attribute) — атрибут, значение которого влияет на сам навык, увеличивая его мощь;
2) Специализация (Specialization) — к какому типу персонажа относится данный спел (дает бонус в начале игры);
3) Изменение Характеристики (Actions) — какие характеристики увеличивает спел;
4) Слагаемое (Use Value) — значение, на которое увеличится характеристика при повышении спела на единицу;
5) Описание (Description) — описание спела, которое показывается игроку.
Как вы видите, возможные действия не блещут разнообразием, но читеры могу существенно облегчить себе жизнь, поменяв всего несколько значений (можно, например, превратить свои доспехи в танковую броню).
Фракции
Разберем механизм всевозможных гильдий, домов и т.п.
Character>Faction... Окно состоит из трех основных частей: основные сведения, звания (Reqirements) и отношения (Reactions). Тут все просто. В основной части можно задать редактируемую фракцию, создать новую, удалить существующую, задать Name фракции, который будет показываться игроку, и запрет игроку на членство во фракции (Hidden from PC).
Reqirements — сведения обо всех званиях и требуемых для них характеристиках. Выберите какую-нибудь фракцию и изучите параметры таблицы:
1) Rank Name — название ранга, которое будет видеть игрок;
2) Attrib 1; Attrib 2 — атрибуты, значения которых для успешного повышения должны быть выше или равны указанным значениям в двух выпадающих списках;
3) Pri Skill — значение, которое должно быть для успешного повышения меньше или равно значению одного из выделенных скиллов в списке Favored Skills;
4) Fav Skill — значение, которое должно быть меньше или равно значению двух скиллов, из выделенных в списке Favored Skills (не включая Pri Skill), для успешного повышения. По закону здравого смысла должно быть меньше Pri Skill.
Создать новый ранг для фракции можно, медленно щелкнув два раза на пустом слоте в списке (при быстром двойном щелчке Windows дает процедуру запуска, а при медленном -редактирования). Максимальное количество рангов — 10.
Reactions — бонусы (минусы) к отношениям члена этой фракции с персонажами, состоящими в другой.
Щелкаем правой кнопкой на списке, выбираем пункт New. Справа в выпадающем списке выбираем фракцию, в окне указываем бонус к отношениям с ней.
Интерфейс изучили, теперь давайте попробуем создать свою гильдию. Жмем кнопку New и указываем ID будущей организации, вводим имя, например "Профсоюз истребителей Дагота". Создаем звания, задаем параметры повышения. Ставим отношения с Шестым домом и Черным союзом пониже, с Клинками и Эшлендерами повыше и готово. Опять все просто.
Знаки зодиака
Этот аспект не особо важен, поэтому опишу его поверхностно.
Character>Birthsigns... Состоит из списка ID (выбор знака для редактирования), кнопок New, Rename, Delete (создать, переименовать, удалить), поля Full Name (название знака в игре), кнопки выбора image-файла (.tga,.dds), который будет показываться игроку, окна описания и бонусных спеллов.
На последнее хочу обратить особое внимание. Чтобы добавить спелл в список, надо открыть в Object Window закладку Spellmaking и перетащить все нужные заклинания мышью. При помощи этого можно круто облегчить себе жизнь, с самого начала игры добавив самые нужные заклинания.
Расы
Character>Race... Интерфейс состоит из 6 частей:
1) Основные сведения — ID, New, Delete, Name. Тут все должно быть понятно;
2) Skill Bonus — бонусы к скиллам, опять же можно поставить огромные значения, но рекомендую не больше 45;
3) Base Attributes — начальные значения атрибутов. Для мужчин и для женщин отдельно. Оптимальная сумма 310;
4) Specials — бонусные спеллы, опять же перетягивать мышью с закладки Spellmaking;
5) Description — описание расы в игре;
6) Характеристики — вес и рост — для мужчин и женщин отдельно, и два значения Y/N: Playable — доступна ли данная раса игроку и Beast Race — животная раса, модель тела как у Агонианина и Кхаджита.
Создайте свою расу (подробно описывать не буду, не маленькие уже). Однако раса не может существовать только на цифрах. Теперь ее надо склеить из объектов закладки Body Part окна Object Window. Вот тут и возникают первые трудности: нельзя просто перетащить объекты Body Part, потому что один объект может служить только для одной расы. Варианты решения:
А) Создать свои модели и объекты Body Part, но это слишком долго.
Б) Создать объекты по образу и подобию уже существующих (т.е. скопировать). А делается это так:
1) Создаем расу;
2) Открываем закладку Body Part;
3) Выбираем себе расу, с копией которой будет наша;
4) Выбираем сортировку по расе;
5) Находим в списке выбранную расу и копируем все 51 объект следующим образом:
А) Жмем на объекте правой кнопкой, выбираем Edit;
Б) Указываем уникальный ID, в списке Race выбираем свою расу;
В) На вопрос Create new object? отвечаем Yes.
Когда 51 объект будет создан, вы сможете похлопать себя по плечу и прокричать: "Я сделал ЭТО!!!", потому что вы только что создали новую расу.
Классы
Самое сложное позади, теперь давайте сделаем себе помощь в начале игры и заранее создадим класс для своего персонажа.
Character>Class... Интерфейс объяснять не буду, все разберем по ходу создания класса. А создавать его мы будем так:
1) Жмем кнопку New, вводим ID и Name (например, "ancorion" и "Анкорион", чтобы не запутаться);
2) В списках выбираем основные атрибуты (я бы посоветовал Силу и Интеллект) и специализацию (Бродяга оптимален, так как имеет более разносторонние характеристики, нежели Маг и Боец);
3) Playable — доступен ли этот класс игроку, если создаем для себя, ставим галочку.
4) Major и Minor Skills — скиллы, к которым будут даваться бонусы (большие и маленькие соответственно). Major-ными советую сделать тип брони и оружия, которыми будете пользоваться, а также Разрушение и Алхимию. Дальше описывать не буду (рубрика "Креатив", а не "Кстати" все-таки);
5) Description — описание, тут все понятно;
6) Auto-Calc — для Playable-класса считаю ненужным, а вот когда создаешь класс для какого-нибудь торговца, лучше ставить галочки для предоставляемых услуг.
Итак, у вас уже есть свой класс, свой знак зодиака, своя раса, своя фракция. Комбинируем плагины в один — создаем своего NPC.
Создание NPC
Открывайте закладку NPC в Object Window и смело создавайте новый объект.
Первый шаг — это определение главных параметров (ID, Name, Script (если умеете писать их), Race, Class, Faction and Rank). Из них стоит пояснить:
Female — если включен, персонаж является женщиной;
Level — уровень персонажа в игре;
Resprawn — после смерти NPC возродится вновь;
Corpses Persist — труп NPC нельзя будет убрать;
Essential — является ли персонаж ключевым в сюжетной линии. Если его убьют, вы увидите сообщение, что вам лучше загрузиться, или игра потеряет смысл;
Auto Calculate Status — Сет сам вычислит все значения атрибутов и скиллов исходя из известных данных;
Bloob Texture — цвет крови, посмотрите список — и все поймете.
В окне со скиллами можно изменять любые параметры, независимо от Auto Calculate Status.
Второй шаг — это экипировка и спеллы.
Сначала надо добавить одежду, перетащив ее с закладки Clothing, потом, если надо, броню с Armor и оружие с Weapon (посмотрите, какой скилл оружия и брони более развит у NPC и используйте именно его, чтобы NPC не был слишком слабым). Можно добавить зелий с закладки Alchemy и золото с Misc Item. Добавляйте все, но не увлекайтесь:).
Теперь открываем закладку окна NPC — Spells и закидываем туда все нужные заклинания (опять же, если NPC не силен в разрушениях, файрболлы ему кастовать незачем).
Третий шаг — искусственный интеллект. Нажимаем кнопку AI. В первую очередь удаляем Package Wander, и если хотите, добавляем его же, но с более маленькими значениями Distance. Этот параметр указывает на то, как далеко NPC может отходить от начального места размещения. Также тут можно настроить несколько параметров:
Hello — минимальное расстояние приветствия;
Alarm — подозрительность;
Flee — трусость;
Fight — враждебность (возможность нападения на вас).
В закладке Service указываем предоставляемые услуги (описывать не буду, возьмите словарь и разберитесь сами).
В следующей своей статье разберем редактирование и создание ячеек и местности.
Приложение 1
Уточнения к 1-ой части статьи в прошлом номере ВР. Было указано, что "функция окна диалогов Not Cell возвращает 1, если NPC не является представителем данного класса", однако оно возвращает 1, если ID не находится в указанной ячейке.
Приложение 2
Как вы помните, на прошлом уроке я предложил для практики создать тему травить анекдоты, но не рассказал, как сделать, чтобы несколько анекдотов было сразу в одной фразе. Давайте разберем это. Есть два способа:
1) Журнальный — после рассказа каждого анекдота в журнале появляются записи про это, и после того, как NPC рассказал все анекдоты, он говорит, что ему нечего больше сказать. В условиях каждой фразы ставится наличие той или иной записи, а в результатах активация новой.
2) Рандомный — несколько фраз с функцией Global и параметром Random 100 в условии. Самая нижняя — без условия. Движок перебирает все фразы, и если ни одно из чисел, указанных в Random'е, не равно функции, активируется самая нижняя надпись. Если вы не в силах написать 100 анекдотов, воспользуйтесь операторами сравнения < или >.
Ancorio

