Учимся писать сценарий


"О, ступайте, ступайте в театр, живите и умрите в нём, если можете..." В. Г. Белинский

Вне всякого сомнения, что самый популярный сценарий, роль на театральных подмостках, величайшая роль за всю историю театра – "Кушать подано!". Да, да, имена эта роль Если не верите, то посмотрите (хотя бы в Гугле) цитируемость текста этой роли Цитируемость просто феноменальная! Сомневаюсь, что вы сможете найти более популярный источник для цитат, чем это маленькое, но в то же время великое произведение! Мало кто из людей, особенно приближенных к театру, не слышал об этой роли. Многие выдающиеся мастера сцены начинали с нее. Поговаривают, что особенно талантливые актеры так могли сыграть "Кушать подано", что зал вставал и разражался бурными и продолжительными аплодисментами. Лично мне верится в это мало, но наверно это потому, что я не видел этой роли в исполнении истинно Великих актеров… А уж во скольких спектаклях присутствует эта роль и не сосчитать, значит в ней действительно изначально был заложен огромный потенциал. Меняются поколения за поколениями, а роль жива! По сравнению с долголетием этой роли, всё остальное, что было создано для театра можно смело назвать однодневками! На протяжении веков каждый мастер вкладывал в "Кушать подано" что-то свое, частичку своего таланта, частичку своей души. Роль совершенствовалась, огранивалась и шлифовалась, как драгоценный алмаз, и вот! Мы можем видеть перед собой чудесный бриллиант! Самую выдающуюся роль, сценарий или скрипт, всех времен и народов!

На тот, прямо скажем, маловероятный случай если кто-то из читателей не знает этой роли, позволю себе её пересказать. Это не займет много времени. А сцена такая: гостиная, в кресле сидит старый граф... В комнату входит пожилой дворецкий, проходит на середину комнаты, поворачивается к графу и произносит "Кушать подано", после чего выходит из комнаты…

Вот, собственно и вся роль! Конечно, я привел частный случай, вариантов исполнения этой роли бессчетное множество! Все зависит от фантазии режиссера и таланта актера Давайте теперь попробуем сами занять место режиссера, и поставить сцену "Кушать подано" в нашем театре. Только вот с талантливыми актерами нам заведомо не повезло – нет у компьютерных актеров не только таланта, но даже и капельки ума Я уже говорил, что весь, так называемый, искусственный интеллект, это работа скриптов. Без скриптов наши актеры ничего сделать не смогут, да нам этого и не надо Просто будьте готовы к тому, что компьютерным актерам нужно все объяснять едва ли не на пальцах, а то они не поймут, что вы от них хотите Например, дворецкий из приведенной выше роли должен выйти на середину комнаты, НО это человеку, пусть даже не самому умному, мы можем просто сказать: "выйди на середину комнаты", и рассчитывать, что он все сделает как нам надо. С искусственными актерами этот номер не пройдет, не пойму они где середина комнаты и что такое комната вообще… Наверняка вы и в жизни встречали таких людей, которым про середину комнаты говорить бесполезно, ну не понимают они, что тут поделать… Выход может быть простой – положить или поставить что-нибудь, предмет какой-нибудь на середину комнаты и просить подойти к этому предмету, тогда дело пойдет намного лучше! Можете потренироваться на друзьях и знакомых. Итак, распределим роли. Роль дворецкого возьмет на себя, например, Луиджи. Чем не дворецкий? Роль старого графа, несомненно, принадлежит Дону Сальери...

Произведение написано выпускником Казанского Авиационного Института Ростиславом Пулялиным. «Неожиданный телефонный звонок нарушил сон Уве Эрикссона. Ему было не привыкать к таким вещам, и он быстро нащупал на столике кнопку, включил свет настольной лампы и поднял трубку телефона…»

Мизансцена (т.е. расстановка актеров на сцене):
Для декораций можете выбрать любой подходящий интерьер из Лост Хэвена.
Сальери ставим (с помощью BSV) в углу комнаты, Луиджи поместим за дверями, на середину комнаты ставим предмет, который просто отмечает эту середину, чтобы безмозглый актер смог её найти. Второй предмет помещаем там же за дверями, где стоит Луижди, не забываем, что после произнесения своей коронной фразы, ему еще предстоит выйти из комнаты, то есть найти этот самый выход.

Примечание: в качестве предметов для ориентировки актеров в пространстве можем использовать любые предметы из игры, то есть то, что мы видим в игре – "Thing" (вещь, предмет). Или можем использовать нематериального, но очень полезного актера под названием "Detector" (детектор). Детектор использовать удобнее, НО не всегда правильно! Почему объясню чуть позже, а пока давайте для этой цели все-таки использовать детекторы, вроде бы это их прямая обязанность.

Составляем сценарий. Роль Луиджи такая:
1) Для начала мы должны попросить у движка игры выделить ресурсы под нашу сцену, типа, профинансировать нашу театральную постановку Мы должны сообщить движку сколько и каких ресурсов нам потребуется, например, сколько задействовано актеров и т.д. не нужно жадничать и заказывать слишком много, так как ресурсы выделяются за счет оперативной памяти компьютера.

2) Теперь мы должны перечислить всех занятых в этой сцене актеров! Выше мы это уже делали, но там мы делали это для себя, а теперь нам нужно рассказать о наших планах движку игры, чтобы он тоже был в курсе Так как это роль (скрипт) Луиджи, то мы должны, просто обязаны, назвать всех актеров, с которыми взаимодействует Луиджи в процессе исполнения своей роли. Таких актеров четверо: сам Луиджи (естественно), Дон Сальери, детектор посреди комнаты и детектор за дверями.

3) И теперь, собственно только с этого места, начинается сам спектакль. Луиджи подходит к актеру, исполняющего роль детектора на середине комнаты. Мы даем Луиджи соответствующую команду для этого, чтобы он понял, что же от него требуется.

4) Луиджи поворачивается к Сальери – опять даем ему команду, вернее эти команды уже прописаны заранее, еще при составлении роли (скрипта) и просто считываются и выполняются одна за другой.

5) Луиджи произностит нашу фразу "Кушать подано!", ради которой мы его и пригласили в наш спектакль.

6) Теперь Луиджи мог бы сразу развернуться и уйти, но такое поведение не к лицу респектабельному дворецкому! Такое поведение скорее напомнит совкового халдея, который поворачивается к вам спиной, еще не закончив фразы. Поэтому, мы скажем Луиджи подождать несколько секунд.

7) Сейчас Луиджи может развернуться и выйти из комнаты, но мы уже выяснили, что самого понятия "комната" для него, как, впрочем, и для всех компьютерных актеров, просто не существует. Поэтому прикажем Луиджи подойти к детектору, стоящему за дверями гостиной.

Вот и вся роль! Обратите внимание, что роль написана понятным человеку (но не компьютеру!) языком и практически полностью повторяет нашу роль всех времен и народов, разыгрываемую живыми актерами. Отличие в том, что мы более подробно и детально расписываем для актеров их действия, поскольку соображать сами наши актеры не умеют. Собственно, мозгов у них вообще нет, и мы пытаемся заменить отсутствующие мозги нашими скриптами, разбивая сложную последовательность действий на простые и понятные составляющие, на элементарные действия. Под элементарными действиями я понимаю наименьший квант, кусочек или фрагмент действия, называйте как хотите, меньше которого мы не можем получить. Например, мы говорим актеру "Иди", мы не говорим ему "Сделай 10 шагов", или, мы можем сказать "Стреляй во врага", но мы не станем говорить "задержи дыхание, прицелься, плавно нажми на спусковой крючок". Об элементарных действиях мы еще поговорим, а пока давайте обратим внимание еще на один очень важный момент! Если вы заметили, то мы еще нигде в нашем сценарии, в роли Луиджи, не вводили каких-либо специальных или специфических элементов, команд, функций, скриптов их Mafia! Это означает, что мы можем выполнить наш сценарий "Кушать подано!", который мы только что написали, на любом движке, который поддерживает данные функции, то есть, этот скрипт будет работать практически в любой игре с похожим движком! Можно сказать, что скрипт получился кроссигровым, по аналогии с кроссплатформенным.

Теперь давайте переведем наш сценарий на язык понятный движку игры Mafia, это проще простого! Для этого нам понадобится описание скриптов Мафии от c0balt`а (оно идет как справка к Capone). Раньше я говорил, что по этому описанию нельзя научиться писать скрипты, тем более в различных вариантах его перевода на русский, не всегда грамотных даже с точки зрения английского языка, не говоря уж об описании функций. Дело в том, что описание скриптов не является учебником, это просто справочное руководство или, если хотите, словарь! И нужно относиться к нему соответственно! Вы же не станете, например, заучивать толстенный "Yellow Pages", если вам потребовалось найти несколько адресов в городе, или станете? Будете ли вы зазубривать словарь Мюллера (конечно, если вы знаете про какого Мюллера идет речь ) от корки до корки, чтобы написать небольшую статью на английском? Если ваш ответ "Да", то вы можете смело приступать к разучиванию описания скриптовых функций от c0balt`a В противном случае я бы вам этого делать настоятельно не советовал! Думаю, что любой здравомыслящий человек, если уж ему потребовалось написать статью на английском, сначала напишет ее на русском, а потом переведет на английский, уточняя незнакомые слова с помощью словаря. Вот и давайте переведем наш сценарий на язык скриптов Мафии.

1)
/// Начнем с комментариев – весь текст, расположенный за значком слэша
/// считается комментарием или ремарками.
/// Как показывает жизнь, писать комментарии
/// очень полезно, ведь взглянув на свой собственный код через год
/// редкий программист может вспомнить что же он тут пытался изобразить.
/// Да и от разного рода плагиаторов комменты, хоть и слабая, но защита.
/// Комментарии не загружаются в память компьютера,
/// тем более не тормозят игру, как некоторые думают.
/// Единственный минус, что они увеличивают размер файла,
/// но увеличение незначительное, этот минус перекрывается многими плюсами.
/// Итак, первый пункт нашего сценария записывается так
dim_act 4
dim_frm 4

/// Указываем движку, что задействовано 4 актера (первая строка)
/// и что мы используем фреймы этих актеров (вторая строка)…
/// Многие начинающие почему-то пугаются слова "фрейм",
/// между тем ничего сложного тут нет, это просто место на карте, то есть
/// координаты в трех измерениях плюс вектор, то есть
/// ориентация в пространстве и размер объекта.

2)
/// Теперь перечисляем наших актеров и их фреймы.
/// Наиболее частая ошибка, которую совершает
/// практически каждый начинающий программист, это
/// нумерация ресурсов, в нашем случае актеров, фреймов и переменных.
/// Дело в том, что в языке C, да и в большинстве современных
/// языков программирования нумерация начинается с нуля,
/// а не с единицы, соответственно, по запросу выделить
/// четырех актеров, который мы давали в первом пункте,
/// нам выделили четырех актеров с номерами 0, 1, 2 и 3… но не 4!
/// Актера с номером 4 мы использовать не можем,
/// так как это приведет к непредсказуемым последствиям,
/// например, к трудно отлавливаемым багам в программе!
/// Будьте внимательны с нумерацией!
findactor 0,"Луиджи"
findactor 1,"Сальери"
findactor 2,"Детектор1"
findactor 3," Детектор2"

findframe 0,"Луиджи"
findframe 1,"Сальери"
findframe 2,"Детектор1"
findframe 3," Детектор2"

3)
/// Отправляем Луиджи в путь на середину комнаты,
/// или, как вы помните к первому детектору
enemy_move_to_frame 2, 1
/// С английского это буквально переводится как
/// "враг движется к фрейму" - все понятно!
/// Как было бы хорошо, если все разработчики скриптов для Mafia
/// знали английский и называли функции понятными именами!
/// К сожалению нам будет встречаться много абракадабры,
/// понятной разве что чехам.
/// Итак, враг движется к фрейму №2, который занимает Детектор1.
/// Вторая цифра означает дистанцию, на которую враг-Луиджи
/// приблизится к этому фрейму прежде чем остановиться.
/// В данном случае примерно на 1 метр.
/// Почему мы не указываем 0 или полметра?
/// На самом деле никто этого не запрещает, можете сами попробовать.
/// Вся проблема в том, что движок Мафии не очень хорошо,
/// не слишком корректно работает с дробными числами,
/// поэтому использование дробей, особенно дробей маленьких,
/// может неадекватно сказаться на поведении актеров.
/// Например, вы видели как актер перелезает через бочку,
/// вместо того, чтобы ее обойти?
/// Самые внимательные читатели могли заметить, что в этой команде
/// мы вообще не упомянули Луижди!
/// Только куда ему идти и насколько нужно приблизиться к объекту.
/// Дело в том, что все команды, которые начинаются с префикса enemy_
/// работают с тем актером, в скрипте которого они записаны.

4)
/// Луижди поворачивается к Сальери
enemy_look 1
/// Переводится как "враг смотрит", понятно все, кроме того,
/// почему Луиджи (тестя!), мы называем врагом.
/// Разработчики Мафии решили, что все персонажи в игре
/// будут врагами А про префикс enemy_ я говорил выше,
/// он просто служебный.
/// Чтобы программисты не путались, им достаточно один раз запомнить,
/// что этот префикс указывает на актера, которому принадлежит данная роль.
/// То есть, смысловой перевод данной команды будет таким
/// "Луиджи смотрит на Сальери", очень логично!

5)
/// Луиджи произносит коронную фразу "Кушать подано!",
/// естественно, что фраза должна быть предварительно записана
/// в виде звукового файла и в базе озвучки ей должен быть присвоен
/// уникальный номер, как и для всех диалоговых файлов
/// мы можем обратиться к такому файлу только по уникальному номеру.
enemy_talk НОМЕР_ФРАЗЫ_В_ФОРМАТЕ_WAV_ВРОДЕ[00950062]

6)
///Теперь выждем 2 секунды…
wait 2000

7)
///и уходим…
enemy_move_to_frame 3, 1

8)
/// Роль завершена, актер может идти домой
/// На бис его не вызовут и цветов никто не подарит...
/// Такова незавидная доля компьютерного актера (AI)
end

Все! Наша величайшая роль "Кушать подано!" записана в виде скрипта для игры Mafia! Это, естественно, не единственный способ записи, точно так же как при переводе текста на другой язык возможно множество различных вариантов этого самого перевода. Но, нюансы перевода не так уж и важны, главное чтобы переведенный текст был читабелен и понятен для говорящих на этом языке, в нашем случае, для движка игры.

Итак, подведем итоги Чтобы написать хороший скрипт нам нужно:
1) Составить нормальный сценарий наподобие театрального сценария. Именно театрального, а не киношного. Не нужно писать роман или детектив в стиле Пьюзо, Чейза или Агаты Кристи! Прежде задумайтесь, а сможете ли вы свое произведение поставить на театральных подмостках? Будет ли в нем выделена роль для игрока? Будет ли игроку интересно играть свою роль? На нашем форуме предлагалось и обсуждалось много различных сценариев, но меня они не впечатлили, если говорить честно. Многие сценарии написаны как для фильма с голливудскими спецэффектами, как это сделать игрой? Большинство сценариев можно снять как один ролик и просмотреть как фильм, а делать в них игроку нечего, не предусмотрена роль для него.

В общем, самое сложное, это составить сценарий. Он может быть маленьким, как в нашем примере про "Кушать подано, или же огромным как в Мафии, не важно. Важно чтобы он был хорошим, интересным! Ведь сделать из плохенькой пьески хороший спектакль не под силу даже самому талантливому режиссеру, то есть скриптеру.

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

3) Теперь по словарю, он же описание скриптовых функций игры Мафия (или другой игры, если вы делаете скрипты для неё), переводим наш адаптированый сценарий на язык движка игры.

Все! Наш игровой скрипт готов. Между прочим, из наших выводов есть одно интересное следствие. Чтобы быть хорошим моддером, вы должны уметь выполнять указанную последовательность действий задом-наперед! То есть, уметь переводить сценарии с компьютерного языка на человеческий :-)

MikeMouse


 Коды к игре
 Как заставить Тома переносить ящики
 Исповедь мафиозо
 Другие законы

Войдите, чтобы комментировать