Difference between revisions of "Conversation tutorial/ru"

From Dragon Age Toolset Wiki
Jump to: navigation, search
m (Правка)
(Правка)
Line 6: Line 6:
  
 
== Создание и установка диалога для существа ==
 
== Создание и установка диалога для существа ==
 
{{rubox|
 
*Корневой узел (root) диалога содержит настройки, действующие на все последующие реплики.
 
}}
 
  
 
В {{ulink|creature tutorial|учебнике по существам}} мы создали НПС под именем "Quest Giver", который стоит возле своей лачуги, которую заняли монстры.  Цель данного урока в том, чтобы этот товарищ пропросил нас освободить его лачугу перебив, естественно, монстров.
 
В {{ulink|creature tutorial|учебнике по существам}} мы создали НПС под именем "Quest Giver", который стоит возле своей лачуги, которую заняли монстры.  Цель данного урока в том, чтобы этот товарищ пропросил нас освободить его лачугу перебив, естественно, монстров.
Line 19: Line 15:
 
[[Image:Conversation root global settings.png]]
 
[[Image:Conversation root global settings.png]]
  
{{rubox|
+
*"OWNER" - Существо, которому назначен текущий диалог.
*"OWNER" - существо, которому назначен текущий диалог.
+
*"PLAYER" - Собственно сам игрок.
*"PLAYER" - игрок.
+
*Default NPC Speaker: - Это существо (Говорун), которое по умолчанию разговаривает с игроком (отвечает, реагируя на выбор реплик).
*Диалог назначается существу путём выбора свойства "Conversation".
+
*Default NPC Listener: - Это существо (Слушатель Говоруна), которому предназначены ответы Говоруна. Данное свойство используется, чтобы определить, к кому Говорун должен повернуть голову во время произношения реплики.
}}
+
*Default PC Listener: - Это существо (Слушатель Героя), с которым говорит наш Герой, когда вы указываете реплику, которую он должен произнести. Данное свойство используется, чтобы определить, к кому должен повернуть голову Герой во время произношения реплики.
 
+
Свойства, назначенные по умолчанию, отлично подходят для диалога между игроком и одним НПС (что нам и нужно). "OWNER" - это существо, которому назначен диалог, в нашем случае это Quest Giver. "PLAYER" - это, само собой, наш герой.
+
 
+
*Default NPC Speaker: Это существо (Говорун), которое по умолчанию разговаривает с игроком (отвечает, реагируя на выбор реплик).
+
*Default NPC Listener: Это существо (Слушатель Говоруна), которому предназначены ответы Говоруна. Данное свойство используется, чтобы определить, к кому Говорун должен повернуть голову во время произношения реплики.
+
*Default PC Listener: Это существо (Слушатель Героя), с которым говорит наш Герой, когда вы указываете реплику, которую он должен произнести. Данное свойство используется, чтобы определить, к кому должен повернуть голову Герой во время произношения реплики.
+
  
Эти настройки могут быть изменены на любой реплике диалога, обычно их изменение требуется при создании диалога с более чем двумя участниками. Также стоит сказать, что в качестве участника беседы можно назначить и размещаемый объект (placeable). Однако в данном учебнике мы не станем рассматривать такие ситуации, так как они выходят за рамки понятия вводного учебника.
+
Свойства, назначенные по умолчанию, отлично подходят для диалога между игроком и одним НПС (что нам и нужно), но впоследствии могут быть изменены на любой реплике диалога. Обычно их изменение требуется при создании диалога с более чем двумя участниками. Также стоит сказать, что в качестве участника беседы можно назначить и размещаемый объект (placeable). Однако в данном учебнике мы не станем рассматривать такие ситуации, так как они выходят за рамки понятия вводного учебника.
  
 
Также на этой вкладке имеются несколько флажков, использующих для того, что заблокировать изменение видеоряда. Обычно они используются, чтобы предупредить автоматические изменения Тулестом видеоряда, после того, как вы настроили его вручную.
 
Также на этой вкладке имеются несколько флажков, использующих для того, что заблокировать изменение видеоряда. Обычно они используются, чтобы предупредить автоматические изменения Тулестом видеоряда, после того, как вы настроили его вручную.
Line 41: Line 31:
  
 
{{rubox|
 
{{rubox|
 +
*Реплика - это линия диалога, принадлежащая одному из собеседников.
 
*Реплики красного цвета - реплики существа, которое является на настоящий момент Говоруном.
 
*Реплики красного цвета - реплики существа, которое является на настоящий момент Говоруном.
 
*Реплики синего цвета - реплики Героя. Если реплик несколько, то возможен выбор между ними.
 
*Реплики синего цвета - реплики Героя. Если реплик несколько, то возможен выбор между ними.
Line 46: Line 37:
 
*Добавить реплику можно посредством пункта "Insert Line" в контекстном меню, кнопкой #23 на панели инструментов либо сочетанием клавиш "Ctrl+A".
 
*Добавить реплику можно посредством пункта "Insert Line" в контекстном меню, кнопкой #23 на панели инструментов либо сочетанием клавиш "Ctrl+A".
 
*Добавить ссылку можно путём копирования реплики, к которой должен быть отослан диалог, и в нужном месте в контекстном меню выбрать "Paste as Link" либо "Ctrl-Shift-V".
 
*Добавить ссылку можно путём копирования реплики, к которой должен быть отослан диалог, и в нужном месте в контекстном меню выбрать "Paste as Link" либо "Ctrl-Shift-V".
 +
|'''Про реплики:'''|99
 
}}
 
}}
 
Добавление первой реплики производится при выбранном корневом узле посредством правой кнопки и выбора пункта меню "Insert Line".
 
  
 
[[Image:Conversation toolbar.png]]
 
[[Image:Conversation toolbar.png]]
Line 78: Line 68:
 
*Выяснить, куда ведёт ссылка, можно выбрав в контекстном меню пункт "Jump to Target" либо дважды щёлкнув мышкой.  
 
*Выяснить, куда ведёт ссылка, можно выбрав в контекстном меню пункт "Jump to Target" либо дважды щёлкнув мышкой.  
 
*Найти все ссылки на текущую реплику можно выбрав в контекстном меню пункт "Find Links".
 
*Найти все ссылки на текущую реплику можно выбрав в контекстном меню пункт "Find Links".
|Важно
+
|'''Про ссылки:'''|99}}
}}
+
  
 
В данном примере на первую реплику Героя Quest Giver отвечает "Отлично! У меня есть задание, которое сможешь выполнить только ты!".  
 
В данном примере на первую реплику Героя Quest Giver отвечает "Отлично! У меня есть задание, которое сможешь выполнить только ты!".  
Line 102: Line 91:
 
*Plot-файлы могут содержать информацию из кодекса, обучающую информацию, группировать другие Plot-файлы.
 
*Plot-файлы могут содержать информацию из кодекса, обучающую информацию, группировать другие Plot-файлы.
 
*{{ulink|Plot|Информация о Plot-файлах}}
 
*{{ulink|Plot|Информация о Plot-файлах}}
|Plot-файлы
+
|'''Plot-файлы:'''|99}}
}}
+
  
 
Теперь, когда у нашего Героя появилось задание, текущее состояние которого необходимо отслеживать, нам нужен какой-то механизм, позволяющий сделать это. В Neverwinter Nights это осуществлялось посредством прямого скриптинга, однако в Dragon Age появился новый тип ресурсов, который помогает упростить этот процесс. Это {{ulink|Plot|Plot-файлы}}.  
 
Теперь, когда у нашего Героя появилось задание, текущее состояние которого необходимо отслеживать, нам нужен какой-то механизм, позволяющий сделать это. В Neverwinter Nights это осуществлялось посредством прямого скриптинга, однако в Dragon Age появился новый тип ресурсов, который помогает упростить этот процесс. Это {{ulink|Plot|Plot-файлы}}.  
Line 121: Line 109:
 
[[Image:Plot tutorial 1.png]]
 
[[Image:Plot tutorial 1.png]]
  
 +
{{rubox|
 
Каждый раз, когда устанавливается значение флага, ассоциированный с ним текст заменяет в журнале уже имеющуюся запись этого Plot-файла. Если у вас есть чёткая очерёдность установки флагов, то можно избежать этого, устанавливая текст для флага с учётом предыдущего, то есть соединяя их.
 
Каждый раз, когда устанавливается значение флага, ассоциированный с ним текст заменяет в журнале уже имеющуюся запись этого Plot-файла. Если у вас есть чёткая очерёдность установки флагов, то можно избежать этого, устанавливая текст для флага с учётом предыдущего, то есть соединяя их.
 +
|'''Обратите внимание:'''
 +
}}
 +
 +
Самый быстрый и лёгкий способ установить значение флага - это диалог.
  
 
{{rubox|
 
{{rubox|
*Раздел "Action" (действие) вкладки "Plots and Scripting" позволяет устанавливать(set) в TRUE или сбрасывать(clear) в FALSE флаг в любом Plot-файле либо запускать скрипты по завершению реплики.
 
 
*Раздел "Condition" (условие) вкладки "Plots and Scripting" позволяет регулировать видимость реплики для игрока в зависимости от указанных условий о состоянии флагов в Plot-файлах либо о выполнении скрипта.
 
*Раздел "Condition" (условие) вкладки "Plots and Scripting" позволяет регулировать видимость реплики для игрока в зависимости от указанных условий о состоянии флагов в Plot-файлах либо о выполнении скрипта.
 +
Раздел "Action" (действие) вкладки "Plots and Scripting" позволяет устанавливать(set) в TRUE или сбрасывать(clear) в FALSE флаг в любом Plot-файле либо запускать скрипты по завершению реплики.
 +
|'''Условия и действия в диалоге:'''|99
 
}}
 
}}
  
Самый быстрый и лёгкий способ установить значение флага - это диалог.
+
В данном случае, когда Герой примет задание, мы хотим установить значение TRUE флагу "QUEST_ACCEPTED" Plot-файла "clear_the_hut":
В данном случае, когда Герой примет задание, мы хотим установить значение TRUE флагу "QUEST_ACCEPTED" Plot-файла "clear_the_hut plot":
+
 
*Выберите реплику Героя, где он соглашается выполнить задание и перейдите на вкладку "Plots and Scripting".
 
*Выберите реплику Героя, где он соглашается выполнить задание и перейдите на вкладку "Plots and Scripting".
 
*В разделе "Action" выберите наш Plot-файл "clear_the_hut" (первоначально его не будет в раскрывающемся списке, и вам понадобится его выбрать в окне выбора файлов).
 
*В разделе "Action" выберите наш Plot-файл "clear_the_hut" (первоначально его не будет в раскрывающемся списке, и вам понадобится его выбрать в окне выбора файлов).
Line 143: Line 136:
 
*Игра проверяет условия по репликам сверху вниз, то есть если условие первой реплики определяется как True, диалог заходит в эту ветку, не проверяя следующую.
 
*Игра проверяет условия по репликам сверху вниз, то есть если условие первой реплики определяется как True, диалог заходит в эту ветку, не проверяя следующую.
 
*Убедитесь, что последняя реплика каждого ответвления каждой ветки не имеет условия на своё отображение, так как в противном случае диалог может зайти в тупик.
 
*Убедитесь, что последняя реплика каждого ответвления каждой ветки не имеет условия на своё отображение, так как в противном случае диалог может зайти в тупик.
 +
|'''Очень важно:'''|99
 
}}
 
}}
  
Line 174: Line 168:
 
[[Image:Conversation tutorial 6.png]]
 
[[Image:Conversation tutorial 6.png]]
  
Итак, один урок мы завершили. Теперь у вас есть интерактивный диалог, который в необходимой мере взаимодействует с миром игры.
+
Итак, теперь у вас есть интерактивный диалог, который в необходимой мере взаимодействует с миром игры.
  
== Простые сцены ==
+
== Сцены и их использование в диалоге ==
  
{{sidebox|
+
{{rubox|
* Stages define where characters stand and how the camera is positioned during a conversation
+
*Сцены определяют расположение собеседников и камер во время диалога.
* A conversation without a stage will use a basic default camera positioning
+
*Диалог без назначенной сцены, будет использовать сцену по умолчанию, то есть лицом к лицу.
* You need to define a stage for a conversation before you can give the actors animations
+
*Наличие сцены обязательно для возможности мультипликации собеседников
 +
*{{ulink|stage|Информация о сценах}}
 +
||99
 
}}
 
}}
  
If you run through the conversation as it currently exists you'll find that all of the mechanics are there, but that the performance of our virtual actor leaves a lot to be desired - he simply stands there silent and motionless, staring at the player. The camera angle is also somewhat bland. This can be remedied by adding a [[stage]] to perform the conversation in.
+
На настоящий момент созданный нами диалог является статичным и использует сцену по умолчанию (лицом к лицу). Говорун стоит тихо и неподвижно, уставившись на Героя, а это не есть гуд. Да и сам ракурс, при котором происходит беседа - не ахти, а потому придётся в диалог добавить сцену.
  
A stage is a set of locations where the participants in a conversation will be positioned, and locations where various cameras will be placed. Create a new stage resource and name it something informative, such as hut_exterior_quest_giver. You'll be presented with an empty, featureless stage. The stage editor window defaults to having four different views of the stage; if you want to change this you can find the setting for this under the "Tools->Options" menu.
+
Создайте новую сцену (Stages) и дайте ей название, опять же следуя правилам информативности, например "hut_exterior_quest_giver".
 +
Перед вами появится абсолютно пустая сцена. Окно редактора сцен разделено на четыре окна, в каждом из которых можно рассматривать сцену под различными ракурсами. При желании вы можете изменить такой способ отображения используя меню "Tools -> Options".
  
{{sidebox|
+
На сцене можно разместить объекты - позиции собеседников и камеры.
* "place" objects are spots where the conversation's participants will stand
+
 
* The identity of the creatures occupying places is set in the conversation editor
+
{{rubox|
* Each place should have a default camera selected. This camera is used by default when the creature occupying that place is talking.
+
*Позиции собеседников определяют где они будут стоять во время диалога.
 +
*Существа, которые будут занимать позиции, назначаются в редакторе диалогов.
 +
*Для каждой позиии необходимо назначить камеру по умолчанию. Эта камера будет использоваться когда существо, занимающее эту позицию, будет говорить свою реплику.
 +
|'''О позициях:'''|99
 
}}
 
}}
  
Stages can be complex but in this case we'll keep it simple. Right-click somewhere near the center of the stage and insert a "place" object, and then again to insert a second "place" object. You'll create two blank-looking yellow figurines. These figurines will represent the two creatures who will be involved in the conversation, the player and the quest giver. You'll want to turn one of them to face the other and put them relatively close together.
+
В данном случае нам не нужно создавать сложную сцену со множеством позиций и камер, обойдёмся достаточно простым вариантом. С помощью контекстного меню добавьте две позиции ("Insert Place") рядом с центром сцены. На сцене появятся две жёлтых макета. Эти макеты и представляют собой, как будут размещены собеседники, их позиция и ориентация. Разместите их рядышком и поверните их лицом друг к другу.
  
You'll then want to insert a camera for the conversation to use. Right-click, select insert, and select camera. Position the camera so that it has a view over the shoulder of one of the two figures and is looking at the other figure, a standard over-the-shoulder shot. You can adjust the camera more easily by setting one of the four views to be the camera's view; right-click on the frame, go down to the "camera" option, and select which of the cameras the frame should provide the view of. You can also select the "Safe Frame" option, which puts a border on the view showing only what will be visible in-game.
+
Следующим шагом необходимо разместить на сцене камеру (пункт контекстного меню "Insert Camera").
 +
 
 +
Разместите камеру над плечом одного из макетов, который будет нашим Героем, и направьте на макет, место которого займёт владелец диалога, в нашем случае Quest giver.
 +
 
 +
{{rubox|
 +
Для большего удобства в работе можно выбрать представление камеры в одном из окон. Для этого нажмите правую кнопку мыша на заголовке необходимого окна, и интересующую вас камеру, затем выберите "Save Frame". Теперь в этом окне будет показываться вид камеры, так как это будет выглядеть в игре.
 +
|'''Подксазка!'''
 +
}}
  
 
[[Image:Stage tutorial 1.png]]
 
[[Image:Stage tutorial 1.png]]
  
For each place you'll want to define a default camera; this is the camera that will be used to view the creature standing in this place when that creature is talking in the game. Select the place and in the object inspector select "camera1" for the default camera.
+
Теперь для каждой позиции выберите камеру по умолчанию, сделать это можно изменив в свойствах объекта параметр "default camera".
  
If you wish, you can put in additional cameras. In the conversation editor you will have options to select which cameras are active, and even to cut from one camera to another in the middle of a line. We won't do that yet, however; we currently want this to be as simple a stage as possible. A future tutorial will cover stages in more depth.
+
Если вы хотите, вы можете добавить дополнительные камеры, которые впоследствии можно будет назначать для каждой реплики отдельно (а также применить изменение камеры во время произношения реплики).  
 +
Пока мы не будем с этим заморачиваться, так как в нашем диалоге нам требуется простая сцена с двумя позициями и одной камерой. В дальнейшем, возможно, мы изучим и создание более сложных сцен.
  
{{sidebox|
+
{{rubox|
 
* Once a stage resource is created, it must then be placed in the area editor
 
* Once a stage resource is created, it must then be placed in the area editor
 
* Place the stage so that the conversation's participants won't have to be moved far
 
* Place the stage so that the conversation's participants won't have to be moved far
 
}}
 
}}
  
Once the stage has been created, we'll need to place it in the area where the conversation is to take place. Open the hut exterior area in the area editor and go to the location where you've placed the Quest Giver. Find the stage in the resource palette, place it in the area, and you'll see the blank figures and the camera appear. There will also be a red flag similar to a [[waypoint]]; this marks the center of the stage and is useful for distinguishing them when there are many stages overlapping each other in an area. Position the stage so that the place where the quest giver will be standing is approximately where he is right now; it doesn't have to be exact, but if he changes location dramatically when the conversation starts it might be a bit jarring.
+
Созданную сцену нужно поместить на локацию, в которой будет проигрываться наш диалог. Для этого откройте локацию в том месте где стоит наш Quest giver, выберите созданную вами сцену на палитре ресурсов. Теперь щелчком левой кнопки мыша разместите сцену на локации.
 +
 
 +
В результате проведённых вами манипуляций на локации появились два жёлтых макета и камера. Центр сцены обозначается красным флажком, что удобно, когда в одном месте локации размещены несколько сцен, накладывающихся друг на друга.
 +
 
 +
Теперь вам надо разместить локацию так, чтобы макет Quest giver'a и сам Quest giver примерно совпали. Точное совпадение не обязательно, а слишком большая разница может привести к неприятным эффектам в момент запуска диалога.
  
 
[[Image:Stage tutorial 2.png]]
 
[[Image:Stage tutorial 2.png]]
  
{{sidebox|
+
Итак, наша сцена размещена на локации и мы можем использовать её в диалоге.
* Assign the stage to the conversation in the conversation editor
+
* Then assign which conversation participants use which places defined by the stage
+
}}
+
  
Now that the stage has been placed, we can set the conversation to use it. Go back to the conversation editor, select the root node, and then select the "Cinematics" tab. There will be an option there to set a stage. Since we've never selected this stage before it won't be in the dropdown list, use the ellipsis button to select the stage from the available stage resources.
+
Для этого вернитесь в редактор диалогов и, стоя на корневом узле, выберите вкладку "Cinematics". Там вы увидите поле и кнопку выбора сцены. Так как ранее эта сцена не использовалась в нашем диалоге, в выпадающем списке она отсутствует, и выбрать её необходимо с помощью кнопки выбора.
  
Once the stage has been selected the two places that are part of the stage will be listed below. You'll want to assign them to the two participants in this conversation, OWNER and PLAYER.
+
Как только вы укажете сцену внизу отобразится список доступных на этой сцене позиций. Щёлкнув мышкой в поле справа от названия позиции выберите участника диалога, которого вы желаете для неё назначить, OWNER и PLAYER.
  
 
[[Image:Conversation tutorial 7.png]]
 
[[Image:Conversation tutorial 7.png]]
  
== Gestures ==
+
== Жесты ==
  
{{sidebox|
+
Редактор диалогов позволяет задавать собеседникам жесты и анимацию, которые они воспроизводят в момент проигрывания реплик. Наиболее простой способ сделать это - автоматическая генерация.
* Once a stage is set you can automatically generate gestures
+
* To generate gestures for all nodes in a conversation, select the root node and generate gestures for children
+
}}
+
  
Select the root node of the conversation and then click on the "Generate Gestures for Children" button (#35 on the toolbar, or in the right-click menu for the node, or in the edit menu)
+
Для автоматическоой генерации выберите корневой узел диалога и нажмите кнопку "Generate Gestures for Children" (#35 на панели инструментов). Так же эту операцию можно выполнить используя контекстное меню либо меню редактирования (Edit)
  
 
[[Image:Conversation toolbar.png]]
 
[[Image:Conversation toolbar.png]]
  
This will run through all of the nodes beneath root and automatically generate some random gestures appropriate for a man standing and talking to someone. These gestures can be customized and fine-tuned, but this will be the subject of a separate tutorial.
+
Эта операция пройдётся по всем веткам диалога и автоматически сгенерирует жесты для всех собеседников, которые учавствуют в диалоге.
  
Now at last our actors are a little less wooden; they move around a bit, and the camera is in an interesting place. But their faces are still completely blank. This too can be easily remedied.
+
Можно конечно создать все жесты вручную, либо отредактировать появившиеся в результате автоматической генерации. Но пусть это будет предметом отдельного учебника.
  
== Voice-over and FaceFX ==
+
Теперь наши актёры при проигрывании диалога стали более оживлёнными и камера расположена так, как мы этого захотели. Но "лица их ещё пусты и непорочны", но и это мы сейчас легко исправим.
  
{{sidebox|
+
== Озвучка диалога и анимация лица ==
* You need to have voice-over recorded to generate a facial performance with FaceFX.
+
 
* You can generate a basic placeholder voice-over automatically.
+
{{rubox|
* See [[Voice-Over]] for information on how to record your own voice over.
+
*Перед анимацией лица необходимо произвести озвучку реплик.
 +
*Простую озвучку вы можете сгенерировать автоматически.
 +
*Смотрите "{{ulink|Voice-Over}}" о том, как записать собственную озвучку.
 
}}
 
}}
  
 
+
Создание озвучки для каждой реплики диалога - задача масштабная (ну это зависит от масштаба самого модуля). Как временную меру можно использовать встроенную программу синтеза речи, что позволит не отвлекаться на озвучку диалога до окончания разработки мода.  
Every line of dialog in Dragon Age can have [[voice-over]] recorded for it, which as one might imagine can be a daunting task. As a temporary measure during game development you can instead generate a temporary placeholder voice-over using a basic speech synthesis program. Under "Tools" select "Generate VO" and synthesized voice-over will be added to every line.
+
Выберите "Generate VO" и программа добавит к каждой реплике синтезированную речь.
  
 
[[Image:Conversation generate VO.png]]
 
[[Image:Conversation generate VO.png]]
  
The synthesized voice over is very primitive, but it allows you to test the conversation and fine-tune other details without having to record voice as you go - you can leave voice recording until later, once you've finalized all the dialog. It also allows us to generate a facial performance using [[FaceFX]].
+
Несмотря на то, что синтезированная озвучка примитивна, однако мы теперь более полно видим действие диалога и можем произвести {{ulink|FaceFX|анимацию лица}}.
  
 
[[Image:Conversation generate FaceFX.png]]
 
[[Image:Conversation generate FaceFX.png]]
  
The most obvious component of facial performance is lip-synching. FaceFX generates lip-synching from the actual audio of the line, not just from the text of the dialog, so voice over needs to be generated before FaceFX can be run. FaceFX also adds emotional cues to the character's expression using an extension called RoboBrad. You can select the emotion to be added from the "Emotion" field in the cinematics tab for each line of dialog.
+
В анимации лица первое, на что стоит обратить внимание - это движение губ при разговоре. Анимация лица генерируется не на основании текста, соответствующего реплике, а на основании самой звуковой дорожки, именно поэтому перед генерацией лица необходимо озвучить диалог.  
 +
 
 +
Также, используя расширение Robobrad, можно добавить эмоции, которые выражает собеседник во время разговора, для этого на вкладке "Cinematics" необходимо в поле "Emotion" выбрать нужную эмоцию.
  
 
[[Image:Conversation cinematics.png]]
 
[[Image:Conversation cinematics.png]]
  
Once you've generated a facial performance, you can fine-tune it by selecting "Edit FaceFX" from the tools menu. This will open FaceFX with the selected line of dialogue loaded. We won't be doing this in this tutorial, but if you want to try it out and see what options FaceFX provides see the [[FaceFX]] page for more detail.
+
Когда анимация лица сгенерирована, вы можете произвести её точную настройку, для этого выберите "Edit FaceFX" в меню "Tools". Это откроет редактор "FaceFX" с  загруженной выбранной репликой. В рамках текущего учебника ме не будем рассматривать этот вопрос, но при желании вы можете подробней изучить его на странице  {{ulink|FaceFX}}.
  
 
[[Image:Conversation edit FaceFX.png]]
 
[[Image:Conversation edit FaceFX.png]]
  
To record your own [[voice-over]], you'll need some method for recording your voice (Windows comes with a basic sound-recording program but other more sophisticated programs are available free for download as well) as a wav file. The wav file must be recorded in or converted to PCM 24 khz 16 bit mono format, otherwise the process will fail and an unhelpful error message will be displayed.
+
Чтобы создать свою озвучку, вам нужны будут сторонние программы для записи голоса. Записанный звуковой файл должен быть формата ".wav". Этот файл должен быть записан (или конвертирован) Моно PCM 24 khz 16 bit, в противном случае будет выдано сообщение об ошибке.
  
Real vo needs to be stored in ~installpath~\Dragon Age\addins\[moduleuid]\module\override\toolsetexport\[lineid]_m.wav - you can dump wav files anywhere under the toolsetexport directory and they will be picked up but for organizational purposes you should probably organize it into subfolders grouped by conversation.
+
Готовые файлы должны быть размещены по пути "~Папка установки игры~\addins\[moduleuid]\module\override\toolsetexport\[lineid]_m.wav". Можно конечно всё сохранять в одной папке, но мы рекомендуем подойти к этому более организованно и сохранять файлы отдельно для каждого диалога.
  
The wav file's filename must be of the form "[lineid]_m.wav" with [lineid] replaced by the ID number for the conversation line's string table entry. For example, if a conversation's line ID number is 344169, you'd save the voice over for this line as "344169_m.wav".
+
Название файла должно иметь следующий формат "[lineid]_m.wav", где [lineid] - ID номер записи в String table, соответствующей реплики диалога. Для примера, если ID номер реплики - 344169, то звуковой файл надо сохранить как "344169_m.wav".
  
When you select "generate vo" from the toolset, the toolset will first check the above directory for properly named files. Any wav files that are not present will have robo vo created, and any that do exist will be used as-is.
+
Когда вы генерируете озвучку посредством встроенного синтезатора речи, тулсет предварительно проверяет все строки на наличие ассоциированных с ней звуковых файлов, и только в случае их отсутствия генерирует искуственный голос. Ассоциированные звуковые файлы не изменяются.
 +
 
 +
Быстрый способ проверить как сработала автоматическая генерация - запустить файл по пути "~installpath~\Dragon Age\addins\[moduleuid]\core\override\toolsetexport\[conversationname].fsb" с помощью штатного проигрывателя Windows Media player. Вы услышите все звуковые дорожки, записанные для этого диалога.
 +
 
 +
{{rubox|
 +
Когда вы создаёте {{ulink|Builder_to_player|dazip перед распространением мода}}, вам не нужно включать звуковые файлы в архив! Все звуковые файлы, используемые игрой, сохраняются в файлах ".fsb".
 +
|'''Обратите внимание!'''
 +
}}
  
A quick way to verify that voice over generation worked after processing: go to ~installpath~\Dragon Age\addins\[moduleuid]\core\override\toolsetexport\[conversationname].fsb and play it with windows media player. You will hear all of the vo lines for that conversation packaged together with whatever combination of real and robo vo all slapped together in one file.
+
== Известные проблемы ==
  
Note that when you are doing a [[Builder_to_player]] create, you do not need to include the .wav files within the package. The sound used by the game is all stored in the .fsb files, and thus including the .wav files will only unnecessarily increase the size of mod.
+
=== Воспроизведённые диалоги не отображаются в журнале диалогов Героя===
  
== Common Problems ==
+
Все диалоги Героя сохраняются в его журнал, что позволяет при необходимости освежить себе память. Если вы предполагаете, что эта функция не работает или работает неправильно, то удостоверьтесь, что вы произвели {{ulink|Check_in|Check In}} вашего диалога и существа перед экспортом вашего {{ulink|Talk_table|.tlk-файла}}.
=== Conversation history not showing up in the player's journal ===
+
Для получения большей информации смотрите "{{ulink|String_editor#Generated string IDs|Генерация generated string IDs]]".
The journal has a conversation history tab that you'll want your dialogue lines to show up in as well. If that doesn't seem to be working right or at all, make sure you [[Check_in | check your dialogue and creatures back in]] before exporting your [[Talk_table | talk table]]. See the section on [[String_editor#Generated string IDs | generated string IDs]] for more information.
+
  
 
[[Category:Conversations]]
 
[[Category:Conversations]]
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]
 +
[[Category:Translation/ru]]
 
{{languages}}
 
{{languages}}

Revision as of 00:45, 15 November 2010

Conversation topics

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

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

Создание и установка диалога для существа

В учебнике по существам (en) мы создали НПС под именем "Quest Giver", который стоит возле своей лачуги, которую заняли монстры. Цель данного урока в том, чтобы этот товарищ пропросил нас освободить его лачугу перебив, естественно, монстров.

Первое, что нам нужно сделать, это создать сам ресурс диалога. Назовите диалог так, чтобы по имени можно было понять, что это за ресурс и с чем он связан. Мы назовём наш диалог - "conv_quest_giver". Новый диалог создаётся пустым, с одним корневым узлом. Корневой узел не является репликой и содержит различные настройки, которые относятся к диалогу в целом.

Когда корневой узел выбран, на панели вкладок (ниже окна реплик) выберите вкладку "Global settings":

Conversation root global settings.png

  • "OWNER" - Существо, которому назначен текущий диалог.
  • "PLAYER" - Собственно сам игрок.
  • Default NPC Speaker: - Это существо (Говорун), которое по умолчанию разговаривает с игроком (отвечает, реагируя на выбор реплик).
  • Default NPC Listener: - Это существо (Слушатель Говоруна), которому предназначены ответы Говоруна. Данное свойство используется, чтобы определить, к кому Говорун должен повернуть голову во время произношения реплики.
  • Default PC Listener: - Это существо (Слушатель Героя), с которым говорит наш Герой, когда вы указываете реплику, которую он должен произнести. Данное свойство используется, чтобы определить, к кому должен повернуть голову Герой во время произношения реплики.

Свойства, назначенные по умолчанию, отлично подходят для диалога между игроком и одним НПС (что нам и нужно), но впоследствии могут быть изменены на любой реплике диалога. Обычно их изменение требуется при создании диалога с более чем двумя участниками. Также стоит сказать, что в качестве участника беседы можно назначить и размещаемый объект (placeable). Однако в данном учебнике мы не станем рассматривать такие ситуации, так как они выходят за рамки понятия вводного учебника.

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

Первым делом после создания диалога нам необходимо задать нашему Говоруну (Quest Giver) реплику, которую он произнесёт, когда Герой попытается заговорить с ним. Для этого в Тулсете откройте ресурс существа и, нажав кнопку выбора (Ellipsis.png) справа от свойства "Conversation", выберите диалог "conv_quest_giver" (по умолчанию стоит "none").

Формирование диалога

Про реплики:
  • Реплика - это линия диалога, принадлежащая одному из собеседников.
  • Реплики красного цвета - реплики существа, которое является на настоящий момент Говоруном.
  • Реплики синего цвета - реплики Героя. Если реплик несколько, то возможен выбор между ними.
  • Реплики серого цвета - отсылочные реплики, то есть являющиеся ссылками на другие реплики.
  • Добавить реплику можно посредством пункта "Insert Line" в контекстном меню, кнопкой #23 на панели инструментов либо сочетанием клавиш "Ctrl+A".
  • Добавить ссылку можно путём копирования реплики, к которой должен быть отослан диалог, и в нужном месте в контекстном меню выбрать "Paste as Link" либо "Ctrl-Shift-V".

Conversation toolbar.png

Первая реплика диалога принадлежит Говоруну (красный цвет реплики). Кто именно является Говоруном для реплики указано в её начале - [[OWNER]]. Когда игрок вступает в контакт с НПС, являющемся владельцем диалога, первой произносится именно эта реплика.

Текст реплики вводится на вкладке "Dialogue" (предварительно выбрав, конечно же, нужную реплику). Другие свойства, имеющиеся на этой вкладке мы пока рассматривать не будем.

Conversation dialog.png

Предположим, что на вступительную реплику Говоруна Герой должен выбрать между тремя вариантами продолжения диалога, а именно:

  • Поприветствовать собеседника.
  • Задать ему вопрос.
  • Проигнорировать его.

Выберите реплику Говоруна и добавьте три дочерние реплики, которые будут окрашены в синий цвет. Теперь для каждой новой реплики введите текст, который должен произнести Герой.

Conversation tutorial 1.png

Вот таким образом будет выглядеть начало нашего диалога:

Conversation tutorial quest giver speaks.png

Диалог может продолжаться путём добавления последующих реплик с разным количеством вариантов. Например один ответ НПС на каждую реплику Героя и несколько вариантов реплик Игрока, расширяющих диалог.

Когда диалог доходит до конца одной из своих веток, посредством реплики-ссылки он может быть отослан к любой реплике диалога, позволяя таким образом исследовать другие варианты его развития. Добавить ссылку можно путём копирования реплики, к которой должен быть отослан диалог, и в нужном месте в контекстном меню выбрать "Paste as Link".

Про ссылки:
  • Ссылки позволяют создать диалог используя меньшее количество реплик и избежать за счёт отсутствия повторяющихся реплик излишнего его расширения.
  • Выяснить, куда ведёт ссылка, можно выбрав в контекстном меню пункт "Jump to Target" либо дважды щёлкнув мышкой.
  • Найти все ссылки на текущую реплику можно выбрав в контекстном меню пункт "Find Links".

В данном примере на первую реплику Героя Quest Giver отвечает "Отлично! У меня есть задание, которое сможешь выполнить только ты!". По идее Герой на это может ответить "О, Проблемы? Чтож, я могу помочь!", но эта реплика у нас уже есть в диалоге, поэтому дублировать её нет смысла, к тому же тогда нам придётся дублировать и всю ветку ветку, отходящей от этой реплики.

Вместо этого скопируйте её и вставьте как ссылку после реплики Говоруна.

Conversation tutorial 2.png

Созданная реплика будет серого цвета.

Чтобы выяснить, куда ведёт ссылка, выберите в контекстном меню пункт "Jump to Target" либо дважды щёлкните мышкой. С помощью пункта контекстного меню "Find Links" можно выяснить откуда приходят ссылки на выбранную реплику.

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

Отслеживание текущего состояния задания посредством Plot-файла

Plot-файлы:
  • Plot-файлы содержат флаги, которые дают информацию о том, в каком состоянии находятся те или иные отношения в мире, какие события уже произошли, и т.п.
  • Каждый флаг также может содержать журнальный текст, который игрок может прочитать в своём журнале.
  • Plot-файлы могут содержать информацию из кодекса, обучающую информацию, группировать другие Plot-файлы.
  • Информация о Plot-файлах

Теперь, когда у нашего Героя появилось задание, текущее состояние которого необходимо отслеживать, нам нужен какой-то механизм, позволяющий сделать это. В Neverwinter Nights это осуществлялось посредством прямого скриптинга, однако в Dragon Age появился новый тип ресурсов, который помогает упростить этот процесс. Это Plot-файлы.

Создайте новый Plot-файл и назовите его "clear_the_hut".

Plot-файл содержит некоторое количество поименованных флагов, которые могут иметь два значение - TRUE(Истина) или FALSE(Ложь). С помощью этих флагов игра отслеживает события игры (например выполнение задания или изменение отношений) и реагирует на изменение флагов, которое производится действиями игрока. Каждый флаг также может содержать журнальный текст, который показывается в журнале игрока под записью, которая совпадает с именем Plot-файла. Журнал обычно используется, чтобы держать игрока в курсе его продвижения по игре и напоминать о важной информации, которую он узнал по пути.

Итак, нам необходимо задать имя Plot-файла (свойство "Name"), которое будет отображено в журнале. Мы назовём его "Clear the Hut", то есть зачистка лачуги.

Наш Plot-файл является схемой задания, а в нашем задании есть три вехи:

  • Флаг QUEST_ACCEPTED - Герой согласился выполнить задание.
  • Флаг MONSTERS_SLAIN - Герой зачистил помещение путём умерщвления всех монстров.
  • Флаг REWARD_RECEIVED - Герой отрапортовал о выполнении задания и получил награду.

Добавьте приведённые флаги в Plot-файл (пункт контекстного меню "Insert" -> "Main Flag", кнопка "Insert Main Flag" на панели инструментов, сочетание клавиш "Ctrl+M".

Plot tutorial 1.png

Обратите внимание:

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

Самый быстрый и лёгкий способ установить значение флага - это диалог.

Условия и действия в диалоге:
  • Раздел "Condition" (условие) вкладки "Plots and Scripting" позволяет регулировать видимость реплики для игрока в зависимости от указанных условий о состоянии флагов в Plot-файлах либо о выполнении скрипта.

Раздел "Action" (действие) вкладки "Plots and Scripting" позволяет устанавливать(set) в TRUE или сбрасывать(clear) в FALSE флаг в любом Plot-файле либо запускать скрипты по завершению реплики.

В данном случае, когда Герой примет задание, мы хотим установить значение TRUE флагу "QUEST_ACCEPTED" Plot-файла "clear_the_hut":

  • Выберите реплику Героя, где он соглашается выполнить задание и перейдите на вкладку "Plots and Scripting".
  • В разделе "Action" выберите наш Plot-файл "clear_the_hut" (первоначально его не будет в раскрывающемся списке, и вам понадобится его выбрать в окне выбора файлов).
  • В выпадающем списке выберите флаг "QUEST_ACCEPTED".
  • Оставьте действие над флагом без изменения, так как по умолчанию устанавливается "set", а мы и хотим установить флаг как TRUE.
  • Убедитесь, что реплика теперь отмечена буковкой "А", обозначающую, что для этой реплики установлено действие.

Теперь, когда мы дойдём в диалоге до этой реплики, флаг "QUEST_ACCEPTED" в Plot-файле "clear_the_hut" будет установлен в TRUE. Установка флага, в свою очередь обновит запись нашего Plot-файла в журнале на текст, ассоциированный с установленным флагом.

Очень важно:
  • Хотя бы одна из первых реплик Говоруна должна быть чистой от условий, в противном случае диалог может даже не начаться.
  • Игра проверяет условия по репликам сверху вниз, то есть если условие первой реплики определяется как True, диалог заходит в эту ветку, не проверяя следующую.
  • Убедитесь, что последняя реплика каждого ответвления каждой ветки не имеет условия на своё отображение, так как в противном случае диалог может зайти в тупик.

Если Герой согласился выполнить задание, ветка диалога, в которой Герой его получает, больше не должна отображаться. Для этого нам необходимо перейти на первую реплику этой ветки и добавить условие на её отображение (на вкладке "Plots and Scripting" в разделе "Condition" выберите Plot-файл "clear_the_hut", выберите флаг "QUEST_ACCEPTED", и установите условие "is false".

Conversation tutorial 4.png

Это означает, что данная ветка появится в диалоге только если Герой ещё не согласился на задание. Отметьте, что реплика теперь отмечена буковкой "С", обозначающую, что для этой реплики установлено условие на отображение. А так как последующие реплики зависят от появления первой, наш Герой не сможет принять задание дважды и не нарушит установленный ход приключения.

Однако теперь, когда Герой выполнит задание и принесёт головы монстров в мешке, НПС будет нечего ему сказать. А это значит, что нам нужно добавить в диалог ещё несколько реплик.

Выберите корневой узел и добавьте для Говоруна вторую "первую" реплику, с которой также может начинаться разговор. Так как новой репликой Говорун спрашивает, убили ли мы уже монстров, нельзя, чтобы она появлялась в диалоге до тех пор, пока задание не будет принято Героем. То есть в диалоге не должны одновременно появляться обе первые реплики. Установите условие, как показано в нижеприведённой илюстрации.

Conversation tutorial 5.png

  • Репликам Героя также могут быть установлены условия, определяющие отображать их или нет.

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

Как установить флаг "MONSTERS_SLAIN" посредством скриптинга смотрите статью о Plot-файлах и учебник Написание скриптов в DA, мы же пока просто установим для реплики "Yes, I have" условие, что флаг "MONSTERS_SLAIN" имеет значение TRUE. И тогда последующая за ней реплика Говоруна может установить значение флага "REWARD_RECEIVED" в TRUE, в результате чего Герой получит награду за успешно выполенное задание.

Чтобы Герой не мог получать награду за выполненное задание неоднократно, можно задать для реплики "Have you slain the monsters yet?" условие, что флаг "REWARD_RECEIVED" является ложным. И, наконец, добавьте третью "первую" реплику Говоруна, в которой он уведомит Героя, что заданий больше не осталось и разговаривать более не о чем.

Conversation tutorial 6.png

Итак, теперь у вас есть интерактивный диалог, который в необходимой мере взаимодействует с миром игры.

Сцены и их использование в диалоге

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

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

Создайте новую сцену (Stages) и дайте ей название, опять же следуя правилам информативности, например "hut_exterior_quest_giver". Перед вами появится абсолютно пустая сцена. Окно редактора сцен разделено на четыре окна, в каждом из которых можно рассматривать сцену под различными ракурсами. При желании вы можете изменить такой способ отображения используя меню "Tools -> Options".

На сцене можно разместить объекты - позиции собеседников и камеры.

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

В данном случае нам не нужно создавать сложную сцену со множеством позиций и камер, обойдёмся достаточно простым вариантом. С помощью контекстного меню добавьте две позиции ("Insert Place") рядом с центром сцены. На сцене появятся две жёлтых макета. Эти макеты и представляют собой, как будут размещены собеседники, их позиция и ориентация. Разместите их рядышком и поверните их лицом друг к другу.

Следующим шагом необходимо разместить на сцене камеру (пункт контекстного меню "Insert Camera").

Разместите камеру над плечом одного из макетов, который будет нашим Героем, и направьте на макет, место которого займёт владелец диалога, в нашем случае Quest giver.

Подксазка!

Для большего удобства в работе можно выбрать представление камеры в одном из окон. Для этого нажмите правую кнопку мыша на заголовке необходимого окна, и интересующую вас камеру, затем выберите "Save Frame". Теперь в этом окне будет показываться вид камеры, так как это будет выглядеть в игре.

Stage tutorial 1.png

Теперь для каждой позиции выберите камеру по умолчанию, сделать это можно изменив в свойствах объекта параметр "default camera".

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

  • Once a stage resource is created, it must then be placed in the area editor
  • Place the stage so that the conversation's participants won't have to be moved far

Созданную сцену нужно поместить на локацию, в которой будет проигрываться наш диалог. Для этого откройте локацию в том месте где стоит наш Quest giver, выберите созданную вами сцену на палитре ресурсов. Теперь щелчком левой кнопки мыша разместите сцену на локации.

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

Теперь вам надо разместить локацию так, чтобы макет Quest giver'a и сам Quest giver примерно совпали. Точное совпадение не обязательно, а слишком большая разница может привести к неприятным эффектам в момент запуска диалога.

Stage tutorial 2.png

Итак, наша сцена размещена на локации и мы можем использовать её в диалоге.

Для этого вернитесь в редактор диалогов и, стоя на корневом узле, выберите вкладку "Cinematics". Там вы увидите поле и кнопку выбора сцены. Так как ранее эта сцена не использовалась в нашем диалоге, в выпадающем списке она отсутствует, и выбрать её необходимо с помощью кнопки выбора.

Как только вы укажете сцену внизу отобразится список доступных на этой сцене позиций. Щёлкнув мышкой в поле справа от названия позиции выберите участника диалога, которого вы желаете для неё назначить, OWNER и PLAYER.

Conversation tutorial 7.png

Жесты

Редактор диалогов позволяет задавать собеседникам жесты и анимацию, которые они воспроизводят в момент проигрывания реплик. Наиболее простой способ сделать это - автоматическая генерация.

Для автоматическоой генерации выберите корневой узел диалога и нажмите кнопку "Generate Gestures for Children" (#35 на панели инструментов). Так же эту операцию можно выполнить используя контекстное меню либо меню редактирования (Edit)

Conversation toolbar.png

Эта операция пройдётся по всем веткам диалога и автоматически сгенерирует жесты для всех собеседников, которые учавствуют в диалоге.

Можно конечно создать все жесты вручную, либо отредактировать появившиеся в результате автоматической генерации. Но пусть это будет предметом отдельного учебника.

Теперь наши актёры при проигрывании диалога стали более оживлёнными и камера расположена так, как мы этого захотели. Но "лица их ещё пусты и непорочны", но и это мы сейчас легко исправим.

Озвучка диалога и анимация лица

  • Перед анимацией лица необходимо произвести озвучку реплик.
  • Простую озвучку вы можете сгенерировать автоматически.
  • Смотрите "Voice-Over (en)" о том, как записать собственную озвучку.

Создание озвучки для каждой реплики диалога - задача масштабная (ну это зависит от масштаба самого модуля). Как временную меру можно использовать встроенную программу синтеза речи, что позволит не отвлекаться на озвучку диалога до окончания разработки мода. Выберите "Generate VO" и программа добавит к каждой реплике синтезированную речь.

Conversation generate VO.png

Несмотря на то, что синтезированная озвучка примитивна, однако мы теперь более полно видим действие диалога и можем произвести анимацию лица (en).

Conversation generate FaceFX.png

В анимации лица первое, на что стоит обратить внимание - это движение губ при разговоре. Анимация лица генерируется не на основании текста, соответствующего реплике, а на основании самой звуковой дорожки, именно поэтому перед генерацией лица необходимо озвучить диалог.

Также, используя расширение Robobrad, можно добавить эмоции, которые выражает собеседник во время разговора, для этого на вкладке "Cinematics" необходимо в поле "Emotion" выбрать нужную эмоцию.

Conversation cinematics.png

Когда анимация лица сгенерирована, вы можете произвести её точную настройку, для этого выберите "Edit FaceFX" в меню "Tools". Это откроет редактор "FaceFX" с загруженной выбранной репликой. В рамках текущего учебника ме не будем рассматривать этот вопрос, но при желании вы можете подробней изучить его на странице FaceFX (en).

Conversation edit FaceFX.png

Чтобы создать свою озвучку, вам нужны будут сторонние программы для записи голоса. Записанный звуковой файл должен быть формата ".wav". Этот файл должен быть записан (или конвертирован) Моно PCM 24 khz 16 bit, в противном случае будет выдано сообщение об ошибке.

Готовые файлы должны быть размещены по пути "~Папка установки игры~\addins\[moduleuid]\module\override\toolsetexport\[lineid]_m.wav". Можно конечно всё сохранять в одной папке, но мы рекомендуем подойти к этому более организованно и сохранять файлы отдельно для каждого диалога.

Название файла должно иметь следующий формат "[lineid]_m.wav", где [lineid] - ID номер записи в String table, соответствующей реплики диалога. Для примера, если ID номер реплики - 344169, то звуковой файл надо сохранить как "344169_m.wav".

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

Быстрый способ проверить как сработала автоматическая генерация - запустить файл по пути "~installpath~\Dragon Age\addins\[moduleuid]\core\override\toolsetexport\[conversationname].fsb" с помощью штатного проигрывателя Windows Media player. Вы услышите все звуковые дорожки, записанные для этого диалога.

Обратите внимание!

Когда вы создаёте dazip перед распространением мода, вам не нужно включать звуковые файлы в архив! Все звуковые файлы, используемые игрой, сохраняются в файлах ".fsb".

Известные проблемы

Воспроизведённые диалоги не отображаются в журнале диалогов Героя

Все диалоги Героя сохраняются в его журнал, что позволяет при необходимости освежить себе память. Если вы предполагаете, что эта функция не работает или работает неправильно, то удостоверьтесь, что вы произвели Check In (en) вашего диалога и существа перед экспортом вашего .tlk-файла (en). Для получения большей информации смотрите "{{ulink|String_editor#Generated string IDs|Генерация generated string IDs]]".

Язык: English  • русский