Как сочинить видеоигру: 201 совет от сценариста Broken Sword и Resident Evil — страница 11 из 26

Диалоги и выбор

76. Избегайте автоматических триггеров

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

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

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

Кат-сцены[9] в конце уровней – это другое дело. Они запускаются помимо воли игрока, но являются прямым результатом завершения этапа, а значит, закономерным следствием действий и выбора игрока. Эти сцены дают ему чувство достижения цели.

77. Используйте принцип булевых переменных

Если вы не знаете, что такое булевы переменные (возможно, у вас просто нет опыта кодинга), – это простые переменные, принимающие одно из двух значений: «истина» или «ложь».

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

Как сценарист вы можете не участвовать в создании скриптов, в которых эти переменные непосредственно применяются. Но вы увидите, что, разрабатывая диалоги или направление сюжета, гораздо проще мыслить категориями «истина» и «ложь».

Если происходит событие, которое зависит от знаний персонажа, можно представить это так: «Если Салли знает о кожаной куртке, мы запускаем эту часть разговора». Это все равно что проверить, присвоено ли переменной Салли_знает_о_куртке значение «истина». Салли может не только разговаривать о куртке с NPC, она может также искать кого-то, одетого в такую куртку.

Продумывая сцену с диалогом, попробуйте определить – на языке булевых переменных, – что знает игровой персонаж, что ему нужно знать, с кем и о чем он разговаривал, что у него в инвентаре и каковы его цели/задачи. Например: разговаривал ли он с Мэри? Есть ли у него бомба? Знает ли он имя жертвы убийства?

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


Том_знает_банан – Том (PC) знает, что ему нужен банан.

Дику_сказано_банан – Том говорил о банане с Диком.

Гарри_сказано_банан – Том говорил о банане с Гарри.


Сначала все эти переменные имеют значение «ложь». Том не может поговорить с Диком и Гарри о банане, пока не узнает, что ему нужно это сделать.

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

Допустим, у вас есть переменная Билл_диалог, значение которой повышается на единицу каждый раз при обсуждении некой темы. В этом случае отпускать реплики можно только в определенном порядке; если последовательность нарушится, возникнут баги.

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

78. Избегайте ветвящихся диалогов

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

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

Если вы мыслите категориями булевых переменных (см. совет 77), присваивание им значений открывает новые разделы разговора либо закрывает старые или ненужные части. Беседа может стать почти живой сущностью, и ее можно написать так, что репликами будет гораздо удобнее управлять, чем в древовидной структуре.

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

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

Избегая ветвящихся диалогов, вы можете сделать сценарий гораздо более читабельным и понятным.

79. Предоставляйте выбор везде, где только возможно

Даже в самом линейном повествовании можно дать игроку выбор. Например, он может определить порядок, в котором игровой персонаж говорит с NPC, или последовательность обсуждения тем.

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

Иногда выбор довольно незначительный или кажется таковым. Он может не слишком повлиять на общий исход истории, но при этом наложить отпечаток на последующие реакции персонажа. Например, в начале игры Broken Sword официантка в кафе после взрыва бомбы спрашивает Джорджа, является ли он врачом. Выбор прост: да или нет. Если игрок выбирает вариант «да», то чуть позже полицейские называют его доктором Стоббартом, после того как один из них поговорит с официанткой. Это не оказывает особого воздействия на игру, но дает игроку ощущение, что его выбор повлиял на происходящее.

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

80. Избегайте ложного выбора

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

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

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

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

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

81. Избегайте несправедливого выбора

Представьте себе, что вы играете и перед вами оказываются две двери, одинаковые на вид. В какую из них вы войдете?

Как игрок вы должны сделать выбор: дверь 1 или дверь 2.

Однако далее вы обнаруживаете следующее:

• у игроков, которые выбрали дверь 1, умирает персонаж;

• у игроков, которые выбрали дверь 2, пропадает все золото.

Нечестно, правда?

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

Порой кажется, что разработчики не заботятся о честности по отношению к игроку.

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

Или еще такой пример. У вас есть два варианта развития сюжета: в одном убийца – священник, а в другом – старушка. Разве это разумно и честно? Ваш сюжет должен быть справедливым и логически обоснованным.

Практика написания игрового сценария

82. Наделите игрового персонажа голосом

Или не давайте другим персонажам с ним разговаривать.

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

Когда в игре есть NPC, разговаривающие с игровым персонажем, он же должен отвечать им! Когда я играл в Half-Life 2, меня раздражало, что множество NPC обращались непосредственно ко мне/Фримену, иногда даже называя его по имени, но Фримен ни разу не ответил.

Думаю, это сделало его слегка невоспитанным. Зачем давать персонажу конкретное имя и позволять NPC разговаривать с ним, если он не реагирует как нормальный человек?