Difference between revisions of "Учебник Bethesda Продвинутые диалоги"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>Vitamant
imported>V.erS.us
 
(16 intermediate revisions by 3 users not shown)
Line 19: Line 19:
* Как заблокировать тему.
* Как заблокировать тему.


=Special Topics=
=Специальные темы=
Up until now, we've been generally writing normal dialogue that's driven by the player directly talking to an actor. That's obviously important stuff, but to really give some semblance of realistic life to the world, we need to write ambient dialogue, combat lines, player reaction lines, etc. (You may now proceed making jokes about taking arrows in the knee. I'll be here when you're done.)
Раньше мы писали только обычные диалоги, которые персонаж произносит при обращении к нему игрока. Это бесспорно очень важный аспект, однако для создания реалистичного живого мира, нужно наполнить диалогами окружение, бои, научить персонажей реагировать на появление игрока, и т.д.


If you followed along with the [[Bethesda_Tutorial_Quest_Loose_Ends|loose ends]] portion of the intro tutorials, you've had some experience with special topics. Rather than being directly driven by the player's choices in a dialogue menu, special topics get played by the engine when certain events occur. If you look at the Misc tab in the quest window (where we went to make the Hellos and Goodbyes), then you can see all the other general events that we have.  
После изучения главы [[Bethesda_Tutorial_Quest_Loose_Ends/ru|о хвостах]] предыдущего учебника, у тебя уже появилось некоторое представление о специальных темах. Вместо того чтобы создавать отдельную тему в меню диалога, мы привязали монологи НИП к событиям взаимодействия. На вкладке Misc окна квеста (там, где мы создавали Приветствие и Прощание) ты можешь увидеть список всех событий, которые могут инициировать начало того или иного монолога.


All game's dialogue for a given type of topic lives in one giant pool. When the game determines that an actor should say a line of dialogue, like a Hello, it starts by considering '''every''' info in every Hello topic that's been defined in a running quest. It takes each topic's stack of infos and sticks them on top of each other in the order of quest priority (so a quest with a priority of 70 will always have its infos chosen before the ones of a quest with priority of 50). Once this giant stack is made, it starts at the top and goes one by one until it finds an info whose conditions are all true, and fires that one.  
Все подобные диалоги в игре подразделяются на типы по вызывающему событию. Каждому типу соответствует огромный банк данных, содержащий диалоги. Когда игра вызывает специальную тему, для того чтобы определить - что персонаж должен сказать, начинается перебор '''всех''' соответствующих данному типу монологов, определенных в запущенных квестах, связанных с говорящим. Движок помещает каждую найденную тему в стек, в порядке определенном приоритетом квеста (тема, определенная в квесте с приоритетом 70 всегда будет выше темы в квесте с приоритетом 50). После тогда, как создание стека будет завершено, начнется перебор тем сверху вниз до тех пор, пока не найдется первая из них, все условия которой истинны.


If it gets to the bottom of the stack and no info has passed, the actor will say nothing.  
Если игра дойдет до основания стека, а тема, удовлетворяющая условиям найдена не будет, персонаж ничего не произнесет.


{{Template:InDepth|If you're a programmer, you might be clawing the table at the very notion of how inefficient this sounds. The reality of how it works under the hood is more complex and much more efficient, but at a conceptual level, this is what the engine is doing.}}
{{Template:InDepth|Если ты программист, то успокойся, отпусти мышь, перестань скрипеть зубами и царапать стол, сделай пару глубоких вдохов и успокойся. Из описания и вправду получается очень не эффективное решение. Не волнуйся, в недрах движка всё намного сложнее, а решение намного эффективнее, но на концептуальном уровне все выглядит именно так.}}


=Reset Timers and One-Time Lines=
=Таймеры, одноразовые и случайные монологи=
The game provides some simple functionality for making sure a single line doesn't get said too often. (Still making arrow in the knee jokes? Fine, take your time.)
Движок игры предоставляет несколько простых, но в тоже время функциональных инструментов, созданных для того чтобы один и тот же монолог не всплывал в разговорах слишком часто.


Along the middle of the Info window, there's a series of checkboxes, pulldowns, and text fields.  
Рассмотрим их поподробнее. Открой окно редактирования монологов и обрати внимание на центральную часть, где скопилась группа флажков, выпадающий список и текстовое поле.


[[File:InfoCheckBoxes.png]]
[[File:InfoCheckBoxes.png]]


==Say Once==
==Флаг "Say Once"==
As you might guess, checking this box means that the line of dialogue will only ever be said once. After that, it will never be considered again. Obviously you want to be careful not to put any plot-crucial dialogue in a Say Once info, since the player might miss it. This is best used for lines that a character uses for introduction.  
Как не трудно догадаться, отмеченный данным флажком монолог появится в игре всего один раз, после чего навсегда исчезнет. Строго не рекомендуется помечать им важные, сюжетные диалоги, так как игрок имеет все шансы их пропустить. Оптимальный вариант использования - знакомство персонажа с игроком.


==Hours until reset==
==Поле "Hours until reset"==
Once this line has been said, it will be considered invalid until this many in-game hours have passed. This helps limit the repetition a bit, but keeps us from having to write substantially more dialogue. Note that this number cannot be longer than 24 hours; any longer duration entered will be reset to 24 hours by the Creation Kit.
Здесь указывается количество часов, которое должно пройти прежде, чем однажды произнесенный монолог, появится снова. Это число не может быть меньше 0 и больше 24.


==Random==
==Флаг "Random"==
Imagine the case of a hello stack written for a particular actor -- we don't want them to constantly repeat it in the same order, since it would make them seem slightly robotic. So we can't just use reset timers to drive this behavior. Instead, we can mark these lines as Random, and the game will deliver all valid lines in an unpredictable order.  
Представь - у нас есть персонаж, у него есть приветствие, и он раз за разом повторяет его игроку, словно заведенный. Нужен нам в игре такой робот? Едва ли. Для того чтобы заставить персонажа произнести '''удовлетворяющий условиям''' случайный монолог из набора и служит этот флаг.


Of course, if these hellos are specific to a particular stage of a quest, we don't want to fall through to generic dialogue after they're exhausted. So we can mark a line at the bottom of the stack as "Random End" to keep the info selection system from dropping below this particular set.  
Прежде чем его использовать, вспомни, что все доступные монологи, в случае ответа на выбранную персонажем тему (равно как и на специальную тему), выстраиваются в стек и берется тот из них, что расположен выше всех (и отвечает условиям). Однако, если мы будем использовать таймеры в совокупности со случайными ответами, то может возникнуть проблема, когда все доступные варианты отвечающие ситуации будут исчерпаны, и персонаж в разгар какого-нибудь важного задания, вдруг заговорит общими фразами, не относящимися к делу. Чтобы этого не случилось, стоит пометить самый нижний из случайных вариантов флажком "Random End". Тогда, даже если каждый монолог будет произнесен и заработает определенный таймаут, игра будет выводить помеченный, как конечный монолог, пока таймеры остальных не восстановятся.


If this is confusing, there's an example below.  
Всё это может показаться сложным, поэтому ниже приведен пример.


==How to Use All of This==
==Как всё это использовать==
Open up our venerable GSQ01 quest and navigate to its Misc tab. Open the GSQ01Hellos topic that we made earlier. You can note that we've set up Bendu to only ever say "I can't thank you enough for helping me" when we've completed the quest. That kind of makes him a little... silly. So let's let him vary it up.  
Открой наш любимый квест GSQ01 и перейди на вкладку Misc. Открой ранее созданную тему GSQ01Hellos. Как видишь, Бэнду упорно благодарит игрока за помощь, после завершения задания. Нехорошо. Давай разнообразим его монологи.


First, open up the "I can't thank you..." info, and mark it as random, then give it a reset time of 0.5 hours. Close it, then right-click and select "Copy" to duplicate the line. Do this twice more, so we have a total of four lines. Edit the three new lines as follows:  
Открой его благодарственную речь, пометь ее флажком "Random" и укажи задержку между повторами равную 30 минутам (0.5 часа). Закрой. ПКМ по ней и выбери "Copy" чтобы сделать дубликат. Повтори это действие еще два раза и получишь четыре одинаковые линии. Измени три последние:
* "I can only imagine how thrilling the fight with that thief was!"
* "Я могу лишь представить, как мужественно сражались вы с этим гадким ворюгой!"
* "A beautiful piece, isn't it? I'm thrilled to have it back."
* "Моя прелесть. Спасибо, что вернули мою прелесть..."
* "Oh, something else?"
* "Да?.. Что-то еще?"


Now open that last line and mark it as "Random End." Note that this line intentionally is a bit non-committal and uninteresting -- it signals to the player that this NPC doesn't really have anything else to say in the way of hellos. Now he will deliver the first three lines randomly, and when when they've been exhausted, he will only say the last line until the reset timers have completed.  
Открой последний монолог и отметь флажок "Random End". Последний монолог намеренно представлен короткой скучной фразой, чтобы игрок понял - НИП сказал всё, что мог и больше ничего интересного не поведает. В игре этот монолог будет произноситься в случайном порядке наравне с остальными. Когда же у всех остальных появится таймаут, она будет появляться постоянно, пока таймеры не отсчитают положенные полчаса.


=Combat Lines=
=Combat Lines=
"Like the bite of a flea!"
"Like the bite of a flea!" — «Как укус блохи!» (прим. переводчика: выкрики, которые звучат во время боя)


There's also a "Combat" tab in the quest window, where topics for events related to combat live. You can construct these just like you would a Hello, and the game will spit them out using the same kind of logic. Reset timers, stacks, quest priorities, etc. all work the same way.  
В окне заданий (Quest window) имеется также вкладка «'''Combat'''» (Бой). Темы (topic) из этого раздела имеют самое непосредственное отношение к «оживлению» схваток с гуманоидными (или не очень) врагами. Работает это все абсолютно аналогично приветствиям, о которых уже было написано ранее. Сброс таймеров, стек (порядок вызова), приоритеты и т.д. — всё то же самое. За исключением ситуации, в которой используется данная вкладка, — в случае, когда персонаж, к которому прикреплен диалог, вступает в битву.


Creation Kit systems can seem a little indirected and complex at first, but once you understand them, they tend to apply across lots of contexts (as we're seeing with conditions and info stacks).
Описанная система может показаться несколько <del>неадекватной</del> запутанной. Но, стоит только поработать с ней, поставить несколько практических экспериментов, как осознание происходящего начинает снисходить на вас.. Равно как и понимание того, что за что отвечает, и чем всё это может грозить. В итоге, разобраться со всеми хитросплетениями Creation Kit помогут не многочисленные писанные и переписанные туториалы, а практика!


=Other Dialogue Topics=
=Прочие темы диалогов (Dialogue topics)=
By default, when we make a new topic in a Dialogue View, it's set as a "Top-Level" topic. This means that if its designated starting topic is valid, it will appear as a choice in the Actor's dialogue menu when the player first clicks on them.  
По-умолчанию, когда мы создаем новую тему (topic) в режиме отображения диалогов (Dialogue View), она устанавливается как '''Top-Level'''. Это означает, что в случае, если начальная тема (topic) прошла все проверки, при выборе её игроком, тема отобразится как один из вариантов меню диалога персонажа (Actor).


[[File:ConnectedDialogue.png]]
[[File:ConnectedDialogue.png]]


In this figure, the orange color of the topic border indicates that it's a top-level topic. Double click on the border to open the Dialogue Branch window. There are two other options:
На схеме оранжевый цвет рамки темы (topic) показывает, что это '''top-level''' тема. Двойное нажатие левой кнопкой мыши на этой рамке откроет окно диалоговой ветки (Dialogue Branch). Две другие опции:
* '''Normal''': This branch will not show up in the topic list unless it is explicitly linked from another branch. This can be useful for organizational purposes, or for branches which are triggered from ForceGreet packages.  
* '''Normal''' (Нормальная): Это ветвь не будет отображаться в списке тем, если она явно не связана с другой веткой. Это может оказаться полезным для организационных целей или для ветвей, вызываемых из специальных пакетов (FoorceGreet package).
* '''Blocking''': When the starting topic of a blocking branch qualifies, that is the only thing that actor will be able to talk about. The starting topic becomes their Hello, and the top-level choice list is replaced by whatever is connected from that starting topic.  
* '''Blocking''' (Блокирующая): Старт темы (topic) блокирующей ветви, подразумевает, что персонаж (actor) сможет говорить только об этом. Исходной темой при этом становится приветствие ветви а список выбора верхнего уровня (top-level) заменяется всем тем, что связано с отправной темой (starting topic).


Blocking topics are useful for contexts where a character has something very important to say and we don't want the player to have access to their normal dialogue topics until they hear this. (So make sure that you change something at the end of the branch to make the starting topic invalid!)
Стартовые темы (topic) блокирующей ветки могут быть полезны в тех случаях, когда персонажу необходимо сообщить игроку что-то очень важное. При этом игрок не может получить доступ к обычному диалогу персонажа до тех пор, пока не выслушал все реплики блокирующей ветки (поэтому убедитесь, что вы сделали все необходимое, чтобы в конце этой ветки блокировалась её стартовая тема, иначе вы рискуете слушать эту «важную» новость постоянно).


Blocking branches show up a kind of pale green in the editor.  
Блокирующие ветви отображаются в редакторе бледно-зеленым цветом.


[[File:BlockingBranch.png]]
[[File:BlockingBranch.png]]

Latest revision as of 03:20, 4 September 2012

Продвинутые диалоги



RoundRussianFlag.pngНа русском языке
Требуется помощь переводчика


Продвинутые диалоги
Серия: Продвинутое квестописания, глава 3
К другим учебникам
LeftArrow.png Предыдущая статья Следующая статьяRightArrow.png


Краткий обзор[edit | edit source]

Эта глава расскажет больше о системе диалогов. Научит более гибко настраивать реплики персонажей, в том числе и в бою.

Ты узнаешь:

  • Какие специальные темы существуют.
  • Как использовать сброс таймеров.
  • Как описать реплики в бою.
  • Как заблокировать тему.

Специальные темы[edit | edit source]

Раньше мы писали только обычные диалоги, которые персонаж произносит при обращении к нему игрока. Это бесспорно очень важный аспект, однако для создания реалистичного живого мира, нужно наполнить диалогами окружение, бои, научить персонажей реагировать на появление игрока, и т.д.

После изучения главы о хвостах предыдущего учебника, у тебя уже появилось некоторое представление о специальных темах. Вместо того чтобы создавать отдельную тему в меню диалога, мы привязали монологи НИП к событиям взаимодействия. На вкладке Misc окна квеста (там, где мы создавали Приветствие и Прощание) ты можешь увидеть список всех событий, которые могут инициировать начало того или иного монолога.

Все подобные диалоги в игре подразделяются на типы по вызывающему событию. Каждому типу соответствует огромный банк данных, содержащий диалоги. Когда игра вызывает специальную тему, для того чтобы определить - что персонаж должен сказать, начинается перебор всех соответствующих данному типу монологов, определенных в запущенных квестах, связанных с говорящим. Движок помещает каждую найденную тему в стек, в порядке определенном приоритетом квеста (тема, определенная в квесте с приоритетом 70 всегда будет выше темы в квесте с приоритетом 50). После тогда, как создание стека будет завершено, начнется перебор тем сверху вниз до тех пор, пока не найдется первая из них, все условия которой истинны.

Если игра дойдет до основания стека, а тема, удовлетворяющая условиям найдена не будет, персонаж ничего не произнесет.

InDepth.jpg Если ты программист, то успокойся, отпусти мышь, перестань скрипеть зубами и царапать стол, сделай пару глубоких вдохов и успокойся. Из описания и вправду получается очень не эффективное решение. Не волнуйся, в недрах движка всё намного сложнее, а решение намного эффективнее, но на концептуальном уровне все выглядит именно так.

Таймеры, одноразовые и случайные монологи[edit | edit source]

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

Рассмотрим их поподробнее. Открой окно редактирования монологов и обрати внимание на центральную часть, где скопилась группа флажков, выпадающий список и текстовое поле.

InfoCheckBoxes.png

Флаг "Say Once"[edit | edit source]

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

Поле "Hours until reset"[edit | edit source]

Здесь указывается количество часов, которое должно пройти прежде, чем однажды произнесенный монолог, появится снова. Это число не может быть меньше 0 и больше 24.

Флаг "Random"[edit | edit source]

Представь - у нас есть персонаж, у него есть приветствие, и он раз за разом повторяет его игроку, словно заведенный. Нужен нам в игре такой робот? Едва ли. Для того чтобы заставить персонажа произнести удовлетворяющий условиям случайный монолог из набора и служит этот флаг.

Прежде чем его использовать, вспомни, что все доступные монологи, в случае ответа на выбранную персонажем тему (равно как и на специальную тему), выстраиваются в стек и берется тот из них, что расположен выше всех (и отвечает условиям). Однако, если мы будем использовать таймеры в совокупности со случайными ответами, то может возникнуть проблема, когда все доступные варианты отвечающие ситуации будут исчерпаны, и персонаж в разгар какого-нибудь важного задания, вдруг заговорит общими фразами, не относящимися к делу. Чтобы этого не случилось, стоит пометить самый нижний из случайных вариантов флажком "Random End". Тогда, даже если каждый монолог будет произнесен и заработает определенный таймаут, игра будет выводить помеченный, как конечный монолог, пока таймеры остальных не восстановятся.

Всё это может показаться сложным, поэтому ниже приведен пример.

Как всё это использовать[edit | edit source]

Открой наш любимый квест GSQ01 и перейди на вкладку Misc. Открой ранее созданную тему GSQ01Hellos. Как видишь, Бэнду упорно благодарит игрока за помощь, после завершения задания. Нехорошо. Давай разнообразим его монологи.

Открой его благодарственную речь, пометь ее флажком "Random" и укажи задержку между повторами равную 30 минутам (0.5 часа). Закрой. ПКМ по ней и выбери "Copy" чтобы сделать дубликат. Повтори это действие еще два раза и получишь четыре одинаковые линии. Измени три последние:

  • "Я могу лишь представить, как мужественно сражались вы с этим гадким ворюгой!"
  • "Моя прелесть. Спасибо, что вернули мою прелесть..."
  • "Да?.. Что-то еще?"

Открой последний монолог и отметь флажок "Random End". Последний монолог намеренно представлен короткой скучной фразой, чтобы игрок понял - НИП сказал всё, что мог и больше ничего интересного не поведает. В игре этот монолог будет произноситься в случайном порядке наравне с остальными. Когда же у всех остальных появится таймаут, она будет появляться постоянно, пока таймеры не отсчитают положенные полчаса.

Combat Lines[edit | edit source]

"Like the bite of a flea!" — «Как укус блохи!» (прим. переводчика: выкрики, которые звучат во время боя)

В окне заданий (Quest window) имеется также вкладка «Combat» (Бой). Темы (topic) из этого раздела имеют самое непосредственное отношение к «оживлению» схваток с гуманоидными (или не очень) врагами. Работает это все абсолютно аналогично приветствиям, о которых уже было написано ранее. Сброс таймеров, стек (порядок вызова), приоритеты и т.д. — всё то же самое. За исключением ситуации, в которой используется данная вкладка, — в случае, когда персонаж, к которому прикреплен диалог, вступает в битву.

Описанная система может показаться несколько неадекватной запутанной. Но, стоит только поработать с ней, поставить несколько практических экспериментов, как осознание происходящего начинает снисходить на вас.. Равно как и понимание того, что за что отвечает, и чем всё это может грозить. В итоге, разобраться со всеми хитросплетениями Creation Kit помогут не многочисленные писанные и переписанные туториалы, а практика!

Прочие темы диалогов (Dialogue topics)[edit | edit source]

По-умолчанию, когда мы создаем новую тему (topic) в режиме отображения диалогов (Dialogue View), она устанавливается как Top-Level. Это означает, что в случае, если начальная тема (topic) прошла все проверки, при выборе её игроком, тема отобразится как один из вариантов меню диалога персонажа (Actor).

ConnectedDialogue.png

На схеме оранжевый цвет рамки темы (topic) показывает, что это top-level тема. Двойное нажатие левой кнопкой мыши на этой рамке откроет окно диалоговой ветки (Dialogue Branch). Две другие опции:

  • Normal (Нормальная): Это ветвь не будет отображаться в списке тем, если она явно не связана с другой веткой. Это может оказаться полезным для организационных целей или для ветвей, вызываемых из специальных пакетов (FoorceGreet package).
  • Blocking (Блокирующая): Старт темы (topic) блокирующей ветви, подразумевает, что персонаж (actor) сможет говорить только об этом. Исходной темой при этом становится приветствие ветви а список выбора верхнего уровня (top-level) заменяется всем тем, что связано с отправной темой (starting topic).

Стартовые темы (topic) блокирующей ветки могут быть полезны в тех случаях, когда персонажу необходимо сообщить игроку что-то очень важное. При этом игрок не может получить доступ к обычному диалогу персонажа до тех пор, пока не выслушал все реплики блокирующей ветки (поэтому убедитесь, что вы сделали все необходимое, чтобы в конце этой ветки блокировалась её стартовая тема, иначе вы рискуете слушать эту «важную» новость постоянно).

Блокирующие ветви отображаются в редакторе бледно-зеленым цветом.

BlockingBranch.png


LeftArrow.png Предыдущая статья К другим учебникам Следующая статья RightArrow.png



Language: English  • français • русский