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

imported>Vitamant
imported>Vitamant
Line 20: Line 20:


=Специальные темы=
=Специальные темы=
{{Inuse/ru}}
Раньше мы писали только обычные диалоги, которые персонаж произносит при обращении к нему игрока. Это бесспорно очень важный аспект, однако для создания реалистичного живого мира, нужно наполнить диалогами окружение, бои, научить персонажей реагировать на появление игрока, и т.д.
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=
=Reset Timers and One-Time Lines=
Anonymous user