Morrowind:Основы работы с диалогами

Материал из Tiarum
Перейти к: навигация, поиск
Основы работы с диалогами в Morrowind'e
45px-Scroll.png

автор: Eternity aka Asirion
редактор: Garin
ccылка на оригинал: Туториал "Основы работы с диалогами в Morrowind'e", v0.1
дата публикации оригинала: 16.5.2008г
ссылка на сайт: TesAll
ver: 0.2

Авторская Эта страница защищена авторскими правами..
Не редактируйте его без предварительного согласования с автором! Свои изменения и дополнения вы можете предложить непосредственно автору, либо на Форуме, либо на странице Обсуждения


Основы работы с диалогами в игре TESIII:Morrowind


Скачать оффлайн-версию v0.2 в формате PDF: "Morrowind - Основы работы с диалогами (v0.2).pdf" (678kB)


Я попытаюсь доступно рассказать о том, как устроены диалоги в Морровинде и как правильно создавать свои. Если что-то покажется вам сложным или же просто загрузитесь, не дочитав до конца - сделайте перерыв, продолжите позже - у большинства людей на освоение этой темы уходят месяцы, однако я надеюсь, что с этим мануалом вы освоитесь намного быстрее. Итак, загрузите ваш TESIII Construction Set (далее - CS). На панели инструментов выберите “комиксное” облачко:


MBWD 001.png


Подождите немного и перед вами появится диалоговое окно с текстами всех игровых разговоров.

Слева в верхней части окна диалогов находятся закладки, показывающие их структуру:


MBWD 003.png


Topic - темы для бесед. В игре они подсвечиваются в разговоре синим цветом


MBWD 005.png


и располагаются в правой части разговорного окна NPC/Creature:


MBWD 007.png


В правой части окна редактора, в секции Info/Responce содержатся списки текстов для данной темы. Топики, как и другие диалоги, нельзя упорядочить по алфавиту или как-либо еще. Однако можно заметить, что топики, в общем, расположены, хоть и в кривом, но все же в каком-то подобии алфавита, отчего найти нужный нам становится не так сложно.


Для того, чтобы создать новый топик, кликаем в левой колонке пкм -> new и пишем название. Заметьте, как только вы его обозначите, он автоматом улетит куда-то в спиcке остальных топиков. Не пугайтесь - так и должно быть. Если после создания топика вы видите, что рядом с ним находится другой с таким же названием, то удаляйте ваш и переходите к уже существующему, иначе могут возникнуть ошибки в игре, вплоть до того, что ваш и/или оригинальный топик не будут работать. Пока что - это всего лишь тема для разговора, но для того, чтобы она работала, нужно в правой части (Info / responce) создать новый текст.


И вот тут внимание - стоит четко уяснить, что будет сказана первая фраза, которая будет удовлетворять условиям при движении сверху вниз. Т.е., если вы разместите ваш топик в самом верху, не указав никаких условий, то все персонажи, имеющие эту тему и не имеющие специальных условий, будут говорить одно и то же, и никогда других текстов в этом же топике. Если же нужно, чтобы NPC/Creature говорил данный текст в определенные моменты, то располагаем такой диалог в самом низу. Стоит добавить, что развитие диалогов идет снизу вверх. Например, мы через топик хотим дать игроку квест. Так вот, диалог, стартующий квест, должен быть самым нижним. В теории, гиперссылки на топики в текстах должны проставляться редактором автоматически. Иногда так оно и происходит, но, как правило, даже если мы укажем тэги ссылок вручную, то они все равно не будут работать. И для этого нам понадобится маленькая утилитка - morrowind plugin utils, которая, работая через командную строку, позволяет избавиться от этого недостатка. Например, мы имеем текст:

"Будь осторожнее. Она вооружена и опасна!" 

При этом нам нужен топик "вооружена и опасна" со ссылкой на него. Для этого в новых диалогах все слова и/или фразы, которые должны послужить нам ссылкой на топики, заключаем в скобки { }. После чего наш диалог должен выглядеть как

"Будь осторожнее. Она {вооружена и опасна}!" 

Когда наш плагин будет закончен, кладем его в папку morrowind plugin utils, которая содержит файл fixplugin4game.exe (желательно, чтобы путь до них был как можно короче - в идеале - сразу на локальном диске) и запускаем командную строку. Там набираем команду вида:

C:fixplugin4game.exe "изначальный плагин.esp" "конечный плагин.esp"

В ней указываем пути к вашим файлам, имя вашего плагина и любое название для вашего плагина после. Программка сгенерирует копию вашего плагина, заменив все символы { } на @ #, которые будут работать в русской версии игры.


MBWD 009.png


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

Begin название_скрипта
    AddTopic, "название_топика"
End

Повесив этот скрипт на вашего NPC/Creature, у него будет доступна эта тема для разговора уже при первом же диалоге в игре, независимо от того, присутствует ли ссылка в тексте других диалогов.


После этого ваш плагин готов к чистке в Тesame. Обращаю ваше внимание, что любое последующее редактирование плагина может привести к потере гиперссылок, поэтому пропускать его через fixplugin4game стоит только тогда, когда вы его закончите.


Чистка плагина с диалогами в Тesame очень актуальна. Дело в том, что если плагин не очистить от измененных объектов, это может привести к конфликтам с другими плагинами, использующими те же обьекты - к их раздвоению, некорректной работе, исчезновению и т.п. Очень часто это происходит при отключении/подключении плагинов и при загрузке разных сейвов. Однако это не так катастрофично для самой игры - в большинстве случаев пересечение измененных диалогов может привести к потере ссылок и/или условий в них, отчего, например, исчезнет возможность взять/продолжить квест, выполнение которого, к тому же, может повлиять на возможность взять последующие квесты во фракции или продолжить сюжетную линию. В любом случае плагин надо чистить всегда, независимо от того, есть там диалоги или нет. О том, как использовать утилиту tesame, вы можете ознакомиться в статье о Тesame.


Ещё одна особенность добавления фразы в старый топик – это согласование ID топиков. При загрузке плагина у вас может выскочить предупреждение типа:

Previous string different topic Greeting1" info 32281390961219948-"Кто здесь?". 

Если такое случилось, то вам надо минимально изменить топик (поставить и убрать любой символ), о котором говорится в предупреждении. Обычно он соседствует с вашим новым. Дело в том, что, как мы уже могли заметить, при создании своего диалога не нужно указывать его ID - он генерируется автоматически, опираясь на связь с ближайшим диалогом, который сразу помечается измененным - звездочкой (*). Если такой диалог содержал ссылки, то в нем надо тоже проставить скобки { } и такой диалог не удалять в Tesame.


Такова сложная работа диалоговых связок в CS. Эти записи представлены связанным списком, что означает, что каждая запись содержит (невидимую) информацию о том, какая запись стоит перед ним, и какая после. (Это приводит к обычному сообщению об ошибке, когда в диалоге удаляли записи или перемещали их, например, при чистке мода в Tesame или, загружая несколько модов, которые изменяют одну и ту же тему. Игра более не уверена, какая запись идет после какой. Иногда это не важно, но иногда означает, что некоторые отклики будут вырезаны, потому что порядок изменился — это зависит от условий).


Стоит обратить внимание, что описанный выше способ указания ссылок на топики работает только в тех случаях, когда название топика совпадает со словом в тексте полностью, до последней буквы, и заключено в символы { }. Например, если есть топик "вооружена и опасна", то он будет открываться только при аналогичном тексте в разговоре. Если же словосочетание/слово будет хоть немножко перефразировано, но таким образом, что не совпадает с топиком, например, "вооружен и опасен", то для этого нам понадобится создавать новый топик, иначе он просто-напросто не будет иметь ссылки. Можно попробовать изловчиться и, если мы станем использовать топик типа "воин", а в диалоге у нас слово "воины" или "воинственный", то ссылка будет работать, но слова будут выглядеть как "@воин#ы" и "@воин#ственный". Не совсем правильно, но зато исправно работает.


В русской версии Морровинда одно и то же слово/фраза, на которую есть топик, может иметь разные рода/числа/склонения. Для этого используется файл с расширением .top. Для того, чтобы прикрепить к своему плагину такой файл, создайте простой текстовый файл с именем «название файла плагина». Внутри просто пишите «текст ссылки» -> tab -> «топик». Ссылка и топик обязательно должны быть разделены табулой. На одной строчке пишется только одна пара. Это будет выглядеть приблизительно так:

книгу	книга
книга	книга
книгой	книга

Закончив, переименуйте этот текстовой документ файловым менеджером в .top. Как вариант, можете скопировать уже имеющийся файл, например, morrowind.top и, изменив название на название вашего плагина, удалить все содержимое и заполнить вашими ссылками и топиками. Для того, чтобы файл заработал, надо в корень игры рядом с Morrowind.exe положить файл Angel.ini - он есть при установленном Бладмуне. Он содержит всего-навсего одну секцию, в которой напротив ключей должны стоять значения такого вида:

[General]
ProcessPriority=0

LoadTopdataForPlugins=1
LoadMarkTopicForPlugins=1
LoadCellsForPlugins=1

EnableConsole=1
EnglishInput=1

Просто добавляйте этот файл в архив с плагином. Если его не будет - top-файл будет проигнорирован и сложные ссылки работать не будут.

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

Если вы все же решились на это, то кроме файла *.top необходимо создать и файл *.cel с тем же названием (абсолютно пустой), иначе игра даже не запустится. Можно добавить еще и пустой файлик *.mrk с тем же названием, но и без него все будет хорошо работать. Понятное дело, что в этом случае необходимость в файле angel.ini отпадает. Для этих целей можно использовать нехитрую утилитку Mod Prepare.

Это относится ко всем диалогам, а не только к топикам.


Теперь вернемся к закладкам диалоговых групп. И следующая после топиков - Voice. Здесь содержатся фразы, которые npc с озвучкой произносят вне диалогового окна. В левой части перечислены события:

  • Alarm – обнаружение;
  • Attack – npc кричит фразу, когда начинает нападение;
  • Flee – npc кричит, когда «сдается» и пытается убежать;
  • Hello – npc говорит, когда рядом проходит игрок. Вероятность, что npc что-то скажет, задаeтся параметром Hello в настройках AI. Расстояние, на котором NPC может обратиться к персонажу игрока, задается константой "iGreetDistanceMultiplier". Значение (если файл справки CS говорит правду) умножается на значение hello, чтобы получить дистанцию, на которой они начинают говорить. Опция доступна в Gameplay -> Settings -> Gameplay, но помните, что ее изменение коснется всех NPC;
  • Hit – NPC кричит при получении удара;
  • Idle – npc говорит просто так. Как бы обращаясь к самому себе или другому NPC;
  • Intruder – реакция на вторжение;
  • Thief – реакция на замеченное воровство.


В правой части, в info/responce, содержатся тексты субтитров. В правом нижнем углу доступна кнопка Sound Filename, где вы можете присвоить звуковой файл для конкретной фразы.


MBWD 011.png


Специфичность движка Морровинда такова, что далеко не каждый файл станет проигрываться в игре, даже если он проигрывается в редакторе при клике на текст, к которому он присвоен. Файл должен лежать в подпапке Sound папки Data Files директории игры и обязательно иметь следующие атрибуты:


MBWD 013.png


  • Расширение файла - mp3.
  • Звук должен быть одноканальным - mono.
  • Резолюция - 16 бит.
  • Частота дискретизации - 44 кГц.
  • Битрэйт - 64 кБит/сек.
  • Битрэйт должен быть постоянным - CBR.
  • Отсутствие числа контроля целостности информации - без(!) CRC.


MBWD 015.png


Это классический вариант. Но есть возможность использовать звуки более высокого качества с иными частотой и битрэйтом, но обязательно без CRC. Для этого вместе с *.mp3 создаем *.wav с тем же именем и помещаем их в одну папку. В войсе выбираем wav-файл, а не mp3. Но так как у вас будут отображаться только mp3, то просто в строке "Имя файла" набираем часть имени вашего файла и во всплывшей подсказке появится *.wav, его и назначаем. Если мы будем использовать только *.wav, то он будет проигрываться в игре, но будет появляться и окно с сообщением, что не найден *.mp3. Это всего лишь техническая особенность войсов, изначально предназначенных только для работы с mp3, потому кидаем ваш *.mp3 с тем же названием в папку с *.wav и проверяем в игре. Все должно работать.


Как вы можете теперь судить, кнопка Sound filename, с помощью которой вы можете установить звуковой файл, соответствующий реплике, - достаточно полезная вкладка, т.к. есть большое количество фраз, для произнесения которых установлены слишком жесткие условия и вы их могли никогда и не услышать в оригинальной игре. Их можно использовать для придания большей индивидуальности вашим npc. Оригинальные файлы голосов находятся в Data Files\SoundVo. Там вы найдете папки, состоящие из одной буквы, которая соответствует английскому названию рас. Очень распространенный недостаток большинства плагинов, добавляющих новые расы - отсутствие войсов, отчего они выглядят абсолютно немыми, молча стоят, молча сражаются и т.д.


Закладка Greeting

Теперь вернемся к закладке типов диалогов в левой верхней части. Следующая называется - Greeting. Это - приветствия, то есть то, с чего начинаются все разговоры в игре. Без него нельзя даже воспользоваться услугами NPC/creature (обучение, энчантинг, починка, торговля и т.п.), если они у них имеются, поскольку просто-напросто диалог будет невозможен.

Гритинги делятся на следующие типы в порядке убывания приоритета:

  • Greeting 0: То, что говорят NPC/Creature, когда встревожены.
  • Greeting 1: Здесь начинаются разговоры о квестах (для которых не важно, является ли игрок вампиром, голым, больным, преступником и т.д.).
  • Greeting 2: Говорят, когда игрок - вампир и/или раздет.
  • Greeting 3: Совсем незначительная группа для предателей Мораг Тонг.
  • Greeting 4: Говорят, когда игрок - совершил преступления и/или болен.
  • Greeting 5: Квесты, но для которых имеет значение, чтобы игрок был здоров, не был вампиром, преступником и т.д.
  • Greeting 6: Приветствия членов фракций.
  • Greeting 7: Начала разговоров рабов, различных игровых классов и финала игры.
  • Greeting 8: Общие приветствия на основании одежды игрока. Не уверен, но, вроде, основываются на цене надетого шмота.
  • Greeting 9: Приветствия по локациям.

Всегда будет сказана самая верхняя из подходящих по условиям фраза. Т.е., сначала будет произнесена первая фраза, которая будет подходить по условиям в 0-м гритинге. Если там не будет подходящей – будет произнесена первая подходящая из 1-го гритинга и т.д. В принципе, не слишком важно, где вы вставите свое приветствие, но желательно выше 6-го. Также обратите внимание, что вы не можете ставить свой новый гритинг выше, чем фраза «ты нарушил клятву молчания» в 1-м гритинге и ниже, чем фраза «Вы мне все еще не нравитесь», в 9-м. Причину этого я не знаю, но так написали разработчики в комментах к этим фразам.


Закладка Persuasion

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

  • Admire Fail - лесть не подействовала.
  • Admire Success - успешная лесть.
  • Bribe Fail - попытка дать взятку потерпела неудачу.
  • Bribe Success - успешная попытка дать взятку.
  • Info Refusal - отказ предоставить игроку информацию.
  • Intimidate Fail - неудачная попытка запугивания.
  • Intimidate Success - угроза подействовала.
  • Service Refusal - отказ предоставить услуги (торговля, обучение и т.п.).
  • Taunt Fail - оскорбление не возымело действия.
  • Taunt Success - оскорбление подействовало.


Закладка Journal

И последняя закладка - Journal. Здесь содержатся заметки и квестовые памятки, дополняющиеся в ваш дневник. В левой части ID, упорядоченные по алфавиту. Не стоит использовать простые названия для журнальных тем, желательно добавить какие-нибудь буквы в начале – иначе запись журнала будет показана как обычная тема для диалога, если эта тема будет упомянута в диалоге.


В правой части, под окном с текстом, есть маленькое окошечко - Index. Он показывает, какая запись из журнальной темы будет добавлена. Обычно, квестам присваиваются индексы в порядке развития сюжета. Т.е. минимальный индекс - для начальной записи, максмальный - для конечной. Какие числа для индексов вы будете использовать, не имеет значения. Вы можете применять 1, 2, 3, можете 10, 20, 30, а можете 1001, 1004, 1005. Главное, чтобы их значения увеличивались/уменьшались в одном направлении.


MBWD 017.png


Если вы используете Трибунал, то у вас будут дополнительно чек-боксы Quest Name, Finished и Restart для установки галочек .


MBWD 019.png


С появлением Трибунала квесты в дневники стали упорядочены по названиям, которое указывается в строке при чеке Quest Name, и перемещаются из активных в пройденные, когда в дневник добавляется запись, помеченная Finished. Quest Name должна быть одна на один ID журнала и не иметь индекса. Если поставить галочку возле Restart, то при добавлении записи, к которой она привязана, квест можно будет взять и пройти повторно. Обычно, чек Restart присваивают к последней записи вместе с чеком Finished.

В нижней правой части диалогового окна есть функция Filter for.


MBWD 021.png


С ее помощью можно выбрать Creature/NPC и посмотреть, какие диалоги относятся только к нему. В этом режиме вы можете редактировать уже имеющиеся диалоги, но не можете добавлять новые.


Все типы диалогов, кроме тех, что во вкладке Journal, идут вместе с условиями, которые можно установить в секции Speaker Condition.


MBWD 023.png


Слева идет список основных условий. Тут вы можете определить, кто будет иметь такой диалог: NPC/creature (ID) или их группа по расе (Race), классу (Class), фракции (Faction), рангу во фракции (Rank). Там же можно обозначить диалог для конкретной локации (Cell), а также задать до двух условий для игрока (его фракция [PC Faction] и ранг [PC Rank]).


Справа вы можете установить максимум шесть “свободных” условий, которые могут относиться к существу, игроку или другим вещам, таким как состояние глобальных переменных — здесь много опций, с которыми вам придется разобраться самим. Это проверка записей журнала, состояние игрока, локальные или глобальные переменные, предметы в инвентаре и много других функций - некоторые эквивалентны скриптовым функциям, некоторые уникальны для диалогов.


В этой же секции в окошке Disp можете поставить значение отношения существа к игроку, при котором оно заговорит с вами. Если вы указываете в левой части одним из условий группу созданий (расу, гильдию и т.п.), то у вас станет активна вкладка Sex, где вы сможете разделить диалоги по полу NPC. Кроме того, что это актуально для войсов, это имеет значение и для большинства русских текстов, в которых слова для разных полов имеют различные окончания. К сожалению, многие, занимаясь переводом плагинов, такую мелочь упускают.


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


MBWD 025.png


В 1-м столбце (Info) написано начало фразы. Там же можно и писать сам текст, но это гораздо удобнее делать в окошечке ниже. "Войну и Мир" вам вбить туда за один раз не получится, так как для текстов диалогов существует ограничение в 512-ть символов.

Во 2-м указана, собственно, информация об ID диалога - Info ID, но это нам совершенно бесполезно. Далее указываются условия, которые были установлены в нижней части окна.

В 3-м столбце указано отношение NPC к персонажу игрока, при котором будет сказана фраза. Если мы работаем на вкладке журнала, то это число указывает индекс записи. Благодаря этим индексам прослеживают стадии выполнения квестов.

Далее идет ID NPC/creature. Только этот обьект сможет сказать эту фразу. Далее идут группировка, ячейка и функции.


Некоторые из наиболее часто используемых функций:

  • Function – в окошке чуть правее вы должны выбрать, какая именно функция будет работать. Их там много, но наиболее используемая – это choice. Благодаря ей производится обработка вопросов к игроку. Правее мы выставляем значение, которому должен соответствовать ответ. Как задать вопрос, я расскажу ниже.
  • Global – здесь указывается значение глобальных переменных. Наиболее интересными из стандартных здесь являются random100. Этой функцией можно генерировать случайные числа от 0 до 99, благодаря чему можно сделать случайную выдачу фраз. Другие, которые можно как-нибудь использовать – это day, month, year…
  • Local – здесь можно выбрать переменную из локального скрипта.
  • Journal – выбирается запись журнала и нужное значение/диапазон индексов строк. Для корректной работы этой функции необходимо нумеровать строки на вкладке журнала сверху вниз или снизу вверх.
  • Item - здесь можно установить проверку на наличие у игрока какого-то предмета и его количества. Если надо проверить, есть ли у игрока хоть сколько-нибудь такого объекта, то ставят проверку > 0.
  • Dead – срабатывает, соответственно, если NPC/Creature с таким ID мертв/а/о.
  • Остальные - Not ID, Not faction, Not class, Not race, Not cell и Not local работают с точностью до наоборот относительно соответствующих условий.


Самое нижнее окно носит название Results.


MBWD 027.png


В нем пишутся минискрипты, которые будут выполнены после произнесения фразы. Здесь же можно делать для себя пометки, обязательно ставя перед ними точку с запятой ";". Можно использовать здесь почти все скриптовые команды, но это уже обучение скриптописанию, а не диалогам, потому рассмотрим наиболее распространенные, как, например, команда выбора, которая выглядит так:

choice “Вариант1” 1 “Вариант2” 2

В результате этого после фразы появится менюшка.

Для обработки ответов, в соответствующих выбору фразах надо поставить функцию choice = 1 (для ответа на первый вариант). Стоит учитывать, что эта фраза будет произнесена, только если будет задан вопрос и если на него будет получен именно такой ответ. У одного вопроса может быть много вариантов ответа, а в одном топике может быть много вопросов. Главное - не запутайтесь в них.


Часто применяется команда дать/забрать предмет.


Для выдачи предмета она выглядит вот так:

player->additem “ID предмета” “его количество” 

И, соответственно, для изъятия предмета:

player->removeitem “IDпредмета” “его количество” 

Можно также забрать предмет у кого-нибудь другого, у NPC, например, или из сундука. Для этого вместо player надо вписать ID пациента. В большинстве оригинальных квестов используют параллельно сразу обе команды, одной, например, изымают из инвентаря игрока предмет, а второй добавляют его в инвентарь NPC, который по сюжету его и забирает себе.


Еще одна полезная штука - изменение отношения.


Оно прописывается так:

ModDisposition “значение, на которое будет изменено”

Изменение может быть как положительным, так и отрицательным.


Добавление записи в журнал:


journal “ID вашего квеста” “индекс” 

В заключение стоит добавить, что в диалогах, как и в текстах книг, в названиях объектов и вообще где бы то ни было в Морровинде, нельзя использовать букву "Ё" - ни к чему серьезному ее использование не приведет, просто будет отображаться запятой, что выглядит весьма некрасиво - потому заменяйте ее на "Е".


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


Удачи!