Bethesda Tutorial Dialogue/ru
Диалоги
На русском языке Требуется помощь переводчика |
Диалоги | |
---|---|
Серия: Основы квестописания, глава 3 | |
К другим учебникам | |
Предыдущая статья | Следующая статья |
Обзор
В этой главе мы будем создавать диалоги к тренировочному квесту "Единственная надежда Бенду Оло".
Ты узнаешь:
- Как писать диалоги для Skyrim в Creation Kit.
- Как привязать события к выбранным игроком пунктам диалога.
Представления диалогов
Creation Kit визуализирует весь процесс создания диалога, предоставляя удобный интерфейс взаимодействия.
Если ты писал диалоги для предыдущих игр серии TES или Fallout 3, то можешь воспользоваться родной вкладкой Player Dialogue (en) (на самом деле, система диалогов осталась прежней, просто прячется за новым интерфейсом).
Для начала, дважды щелкни по своему заданию (в нашем случае GSQ01), чтобы открыть окно квеста. Перейди на вкладку Dialogue Views (en). Выглядеть это должно как-то так:
Чтобы создать новый диалог, щелкни ПКМ по таблице в левой части окна и выбери пункт "New." Тебе предложат указать ему ID, а ID квеста будет автоматически использован в качестве префикса. Дай ему имя: "GSQ01BenduView." Щелчком в таблице выбери его.
Справа ты видишь белый девственно чистый холст без единого намека на что-нибудь интересное. ПКМ по нему и выбирай "Create Branch" из меню. Да-да, и снова тебе нужно указать ID, на этот раз ветви диалога. Называй: "GSQ01MeetingBenduBranch"... и еще один ID для темы (впрочем, тут можешь оставить вариант по-умолчанию "GSQ01MeetingBenduBranchTopic"). Еще одно нажатие на Enter и пред тобой несколько прямоугольников мерзкого цвета, которые, наверняка, тебе ни о чем не говорят.
Перед тем как продолжить, давай разберемся с терминами:
- Ветвь (en): Набор связанных по смыслу тем.
- Тема (en): Выбираемая игроком тема диалога, на которую последует монолог персонажа.
- Монолог (en): Набор произносимых подряд фраз.
- Topic_Info/ru#The_Response_Form|Фраза: Одна строка монолога, произносимая NPC. Длина строки ограничена 150 символами. С ответом могут быть связаны эмоции и анимации, проигрываемые говорящим.
Итого ты создал ветвь диалога, содержащую одну тему, которая пока что не содержит монолога персонажа.
Темы
Двойной ЛКМ по теме (рыжей полоске над серым пространством) откроет окно темы (en).
Пока тебя интересует только поле "Topic Text". Его содержимое будет выведено игроку в качестве варианта диалога во время разговора с персонажем. Делаем из игрока стандартного героя-дурачка, готового помогать всем и каждому. Пишем: "Тебе чем-нибудь помочь?"
Ниже расположена таблица монолога. Дважды щелкни по ней, чтобы создать новую фразу.
В поле "Response Text" введи: "Странно, что вы спросили... Как раз недавно один грязный ворюга утащил мой амулет! Не могли бы вы... ммм... вернуть его?"
Теперь дважды щелкни по кнопке ОК внизу окна. Надеюсь, ты это сделал достаточно быстро и не успел заметить еще одно окошко с кучей настроек. В нем тебе еще предстоит разобраться, но все по порядку. Окно исчезло и ты вновь видишь окно темы, в котором появилась одна строчка монолога.
Монологи
В этом окне огромное количество всевозможных настроек, но тебя интересует лишь их малая часть. В первую очередь таблица условий (en) в центре. Условия описывают - у кого может появиться этот монолог. Если ты оставишь условия пустыми, то каждый персонаж во всем мире обзаведется темой "Тебе чем-нибудь помочь?"
ПКМ в таблице условий, выбираешь "New" для создания нового условия.
Каждое из условий может быть либо ложным (False) либо истинным (True). Если все условия в списке истинны, монолог проходит проверку и появляется у персонажа. Твое условие будет простым и не замысловатым - нужно задать одного единственного NPС, которому была предназначена тема. Нужная проверка "GetIsID" выбрана по-умолчанию, так-как является наиболее часто используемой ввиду большого количества личных диалогов, привязанных к конкретным персонажам. Щелкни по здоровой кнопке с надписью "INVALID" и выбери ID Бенду Оло: "GSQBenduOlo" (поле поддерживает быстрый поиск при вводе с клавиатуры). Затем нажми "ОК".
Вновь жми "OK" чтобы закрыть окно условий. Свежесозданное появится в списке. Теперь только Бенду сможет общаться на эту тему. Однако, ты ведь не хочешь, чтобы он делал это постоянно? Правильно, тема должна быть доступна только до момента взятия квеста. Добавляем еще одно условие. Уверен, ты запомнил, как это делается.
Ограничим тему диалога еще и стадией квеста. В списке проверочных функций (Condition Function) выбери "GetStage". Затем кликни по любимой кнопке "INVALID" и выбери квест с нужным ID ("GSQ01"). Функция знает, что в качестве первого параметра ей должны передать ID квеста, а не чего-либо еще, поэтому других объектов в списке параметров не будет, только квесты.
Теперь нужно задать метод сравнения результата функции с некоторым значением. Первым желанием может быть проверка на равенство ("==") и числа "0" (наша начальная стадия квеста). Но жесткое сравнение в программировании (а мы сейчас пишем своего рода программу) никогда не считалось хорошим тоном. Например, в последствии вы решите добавить еще одну стадию между "0" и "10", когда игрок еще не встретился с Бенду Оло, но, например, слышал слухи о том, что у бедняги украли амулет, и условие придется переписывать. Дабы этого избежать, и зная, что разговор Бенду Оло станет стадией квеста под номером "10", запишем условие так: если стадия меньше 10. То есть меняем метод сравнения на "<" и значение на "10".
Вот что должно получиться у тебя в итоге:
Кнопкой ОК подтверждаешь изменения и закрывать окно монолога. Еще раз по ОК, закрывая окно темы.
Связи
И вот пред тобою вновь представление диалогов! Теперь уже не пустое. Если тебе захочется увидеть весь текст, отметь флажок "Show All Text" в нижней части окна.
Теперь неплохо бы добавить игроку возможность ответить на просьбу Бенду о помощи. ПКМ в области ветви. Выбираешь "Add Topic." (Если "Add Topic" отсутствует, значит ты промахнулся и щелкнул не туда [см.картинку выше])
Откроется новое окно редактирования темы. И вновь тебе придется ввести ID. Вводишь: "GSQ01MeetingBenduYes", в переводе, если игрок скажет "Да" на просьбу Бенду. В качестве текста укажи: "Конечно я тебе помогу". Дважды щелкаешь по таблице монологов, чтобы добавить ответ, и собственно задаешь сам ответ: "О, спасибо, спасибо вам огромное! Он убежал в сторону Reachwind Eyrie. Пожалуйста, скорее! Я... я выкуплю его у тебя, за двойную цену!" Нажми "ОК".
Чтобы вернуться к редактированию дважды щелкни по ответу в списке Responses. Обрати внимание на список аудио-файлов в нижней части.
Поскольку, ты еще не задал ни одного условия, редактор отображает все доступные голоса, которыми может быть озвучена фраза. Это существенно увеличивает затраты дискового пространства (и времени, если собираешься записывать голос). Закрываем окно редактирования фразы и добавляем новое условие. Функция GetIsID, проверяющая, что ID говорящего GSQBenduOlo (как и в предыдущем случае). Если ты теперь вновь откроешь редактирование фразы, то увидишь, что в списке звуковых наборов остался только MaleDarkElf.
Нажимая ОК, возвращайся к окну с представлением диалогов. Область ветви расширилась, чтобы в ней поместилась новая тема.
Вся прелесть представления диалогов в том, что ты можешь как угодно компоновать темы в одной ветви. На игре это не скажется, зато ты можешь расположить их так, как тебе удобно, в том порядке, в котором захочешь. Схвати любую из тем за верхнюю часть и тащи в нужное место.
Создай еще одну тему с текстом: "Извини, не сейчас". И задай ответ Бенду: "Ну, ладно". Не забудь задать условие, как ты уже делал прежде. После создания, нового топика представление будет выглядеть так:
Все имеющиеся темы расположены в одной ветви, но игра не имеет ни малейшего представления о том, как они связаны. Так что теперь ты будешь учиться их связывать. Кликни по GSQ01MeetingBenduBranchTopic, чтобы сделать тему активной. Щелкни еще раз, теперь уже в области текста (курсор изменится на маленькую руку). Зажми ЛКМ и тащи линию к GSQ01MeetingBenduYes. Отпусти ЛКМ. Аналогичным образом свяжи начальную тему с GSQ01MeetingBenduNo.
Теперь, когда игрок выберет "Тебе чем-нибудь помочь?", Бенду произнесет свой монолог, а затем предложит выбрать одну из двух связанных тем. Темы будут отображаться в том порядке, в котором они были привязаны к главной теме.
Скрипты в диалогах
Пора тебе познакомиться с местной системой скриптов. Не переживай, ничего сложного, даже если это не твой конёк.
Итак, у тебя есть простенький диалог с двумя вариантами ответов. Но игра понятия не имеет, что должна делать, когда игрок выбирает тот или иной вариант. Зато это знаешь ты. Осталось донести эти знания до игры.
Дважды щелкни по тексту "О, спасибо..." под темой GSQ01MeetingBenduYes. (Заметь, что тебе сразу же открылось окно редактирования монолога, без промежуточного окна темы)
В нижней части этого окна есть два поля: "Begin" и "End." Скрипт в первом выполняется, когда персонаж начинает произносить первую фразу, скрипт во втором - когда, заканчивает последнюю. (В терминологии скриптописания эти маленькие кусочки зовутся фрагментами скрипта [см. Topic Info Fragments (en) для дополнительной информации.)
В поле End записывай следующие скриптовые команды (смотри не ошибись!):
GetOwningQuest().SetObjectiveDisplayed(10)
GetOwningQuest().SetStage(10)
О том, что делает SetObjectiveDisplyed(10)
ты узнаешь позже.
Функция SetStage(10)
, как не трудно догадаться, устанавливает "10" текущей стадией квеста. Код GetOwningQuest()
вернет экземпляр квеста, которому принадлежит диалог. Зачем это нужно? Затем, что игра не уверена, что ты хочешь изменить стадию именно этого квеста. Возможно, ты хочешь изменить стадию другого квеста, к которому текущий диалог не имеет никакого отношения. Приходится вдаваться в конкретику.
Нажми кнопку "Compile" и в списке скриптов справа увидишь нечто трудно невнятное и трудно читаемое. Не обращай внимания. (Если ты все-таки ошибся в написании, вместо скрипта со странным названием, ты увидишь сообщение об ошибке).
Перед закрытием окно должно выглядеть примерно так:
Вот и всё! Закрывай окно (естественно кнопкой "ОК") и радуйся жизни. Заметь, что перед текстом монолога появился префикс "[S]", означающий, что в этом монологе присутствуют какие-то скрипты.
Ветви и условия
Только что ты создал ветвь диалога. По умолчанию это верхняя ветка (поэтому при просмотре она окрашена в рыжий). Об остальных пока не задумывайся, просто запомни, что верхняя ветвь первой отобразится игроку, если выполняются необходимые условия.
Тема с желто-рыжей плашкой наверху помечена как начальная тема ветви. Когда персонаж определяет, какие варианты вопросов и ответов предложить игроку, он проверяет все начальные темы на выполнение условий и выводит их, если таковые есть. Как ты помнишь, для начальной темы было задано условие: стадия квеста должна быть меньше 10. Когда игрок соглашается начать задание, ты изменяешь стадию квеста на 10, следовательно условие не выполняется и в списке возможных тем персонажа она не появится.
Не-стартовые темы, обычно, имеют куда более скудные списки условий, потому что выполняются только в том случае, если верны все условия стартовой темы. Поэтому мы указали в качестве условий только ID говорящего. и то лишь для того, чтобы не плодить дополнительных голосовых файлов. На самой игре его отсутствие никак бы не сказалось.
Когда игрок выбирает тему без связанных с ней тем, игра снова ищет удовлетворяющие условиям верхние темы. Если ни одной темы не найдено, NPC выходит из диалога.
Try It Out
Load the game with your plugin and go meet Bendu. (Remember, you can hop right there with COC MixwaterMillWorkersHouse
.) He should now have something to say to you.
There are a few problems with the dialogue as it currently stands:
- It flashes directly to the next choice list. (Since there's no audio, if you don't have captions on, you won't have any idea what he said. Even if you do, they probably flashed by so quickly you couldn't read.)
- If you refuse to help, he'll just go right back to the same top level topic, which feels odd.
Luckily these are easily addressed.
Recording a Temp Track
Open up the GSQ01MeetingBenduBranchTopic and navigate through to its Response window. At the bottom of the window, you'll see a "Record" button.
Press this button and, if you have a microphone hooked up to your computer, you can record a performance of the line yourself. If you don't (or you're self-conscious and don't like the sound of your own voice) you can just record a few seconds of silence, enough to give the captions time to be read. (Note: you MUST have a microphone to record anything. If no microphone was plugged in at the time you started the Creation Kit, the record button will not do anything) Hit the Save button to commit this file to disk.
Do the same thing for the other two topics we made. (While you're in there, consider setting the emotions for those lines, so that Bendu will show Disgust or Happiness depending on your choice.)
In the "No" topic, click the box that says "Goodbye." This will drop the player out of dialogue when it's selected, so you won't end up back at the topic list after the line is done. (You should also make the "Yes" topic a goodbye. Since Bendu only has one top-level topic right now, that's not necessary, because we know he'll have nothing else to say when he's done here. But if another quest had dialogue for him, it might be confusing to the player.)
Currently there is a rare bug: if you already got audio files (with correct file paths, (read table in "Edit Response" window)), but it does not work inside the Skyrim game (does not matter in Creation Kit, test just in the game itself), then you need to convert sound files from WAV to XWM, then XWM to FUZ, for more info and converter links visit http://forums.bethsoft.com/topic/1347417-dialogue-troubles/page__p__20346206#entry20346206
For some people it is the only way to make recorded tracks working in game.
Additional Dialogue
While we're here, let's also make the dialogue that will close out the quest when we come back with the amulet.
In the dialogue view, right-click to create a new branch, and call it "GSQ01BenduFinishBranch." Accept the default name for the starting topic, and make the topic text, "I've brought your amulet." Give him something good as a response (I went with "I hope you gave that thief a good thrashing!"). It will want two conditions; one that restricts it to Bendu, and another that limits it to stage 30 of the quest. Finally, set it to be a Goodbye, and set the quest to stage 40 when it's said.
You should be able to do all this by now. It will look like this when you're done.
We still haven't dealt with the amulet itself yet, and the quest has no way to proceed from stage 10 to 30, so we have work to do!
Предыдущая статья | К другим учебникам | Следующая статья |
Language: | English • français • polski • русский |
---|