Скрипт свободной камеры для Mafia

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

Первым делом давайте сформулируем задачу и попробуем разобраться, что же такое «свободная камера». Помните, в игре мы почти всегда видим происходящие на экране события из-за спины Томми? Конечно, спина и затылок главного героя играют важные роли в сюжете Мафии, но постоянное разглядывание их рано или поздно надоедает. Порой хочется заглянуть в глаза Томми или вообще взглянуть на события под новым и неожиданным ракурсом, с непривычной точки зрения. Для этого нам нужно отвязать камеру от спины Томми, то есть сделать ее свободной. Однако! Как только мы отвяжем камеру от Томми, то в ту же секунду перед нами встанут три очень важных вопроса:

  1. куда теперь девать эту камеру, к чему бы ее привязать?
  2. как этой камерой теперь управлять, как камера будет следить за Томми?
  3. зачем мы заварили всю эту кашу и отвязали камеру от Томми?

Один из наиболее популярных методов создания «свободной камеры», это замена модели Томми на прозрачную модель. Тогда мы сможем управлять перемещением камеры, управляя движениями Томми, как мы это делаем в обычной игре. Этот способ наиболее очевидный, лежащий на поверхности, который, однако, имеет очень существенный недостаток — так как модель Томми станет прозрачной, то мы не сможем снимать видео с участием самого Томми, его просто не будет видно в кадре! А снимать фильмы про Мафию без участия главного героя, это вряд ли имеет смысл. К тому же, камера при использовании этого метода не освобождается реально — создается только иллюзия свободы! Так как камера не отвязывается от Томми, а это было необходимым условием поставленной задачи (см. выше). Поэтому данный метод мы использовать не можем! Не очень то и хотелось его использовать, так как единственный плюс этого метода в том, что просто управлять камерой, во всем остальном одни минусы.

Можем попробовать привязать камеру к какому-нибудь столбу, забору или, говоря техническим языком, связать ее с каким-нибудь неподвижным фреймом. Что нам это даст? По-моему мнению, ничего хорошего такой способ не дает. Если предыдущий способ имел один неоспоримый плюс – простоту управления, то в случае с неподвижной камерой я затрудняюсь дать хотя бы один положительный балл. Зато минусов этот метод имеет множество! Например, как самые значительные я бы назвал два. Первый — Томми и остальные актеры могут быстро покинуть зону обзора неподвижной камеры, которая за ними, естественно, последовать не сможет. Второй минус, это то, что очень существенно затрудняется управление Томми! Хотя мы и не изменяли управление Главного Героя, но, поскольку меняется ракурс, с которого мы будем теперь видеть Томми, то управление очень осложнится. Можете попробовать сами, а можете поверить мне на слово, но Томми (а вернее игрок) теперь сможет четко совершать только довольно примитивные действия. Даже подвести Тома к машине и посадить его в кабину уже может оказаться неразрешимой проблемой! О более сложных действиях придется вообще забыть, а это значит, что нужно будет забыть и об интересной игре с эффектными трюками, только ради которых и стоит снимать фильмы. Будет ли интересно смотреть фильм, если Главный Герой не может исполнить более сложный трюк, чем «два прихлопа, три притопа»? Сомневаюсь! А ведь ничего более эффектного исполнить просто не удастся из-за сильно усложнившегося управления. Тем не менее, такой способ иногда применяется в игре. Например, когда Томми-таксист берет пассажира, то камера на несколько секунд привязывается к неподвижному фрейму. Я думаю, что этот метод иногда может применяться для киносъемки проносящихся мимо автомобилей, то есть когда Томми сидит в машине, а не передвигается пешком. Могут получиться эффектные кадры, да и управление машиной при этом методе проще, чем управление Главным Героем.

Итак, камера, закрепленная в неподвижном фрейме, нас не устраивает, так как минусов имеет много, а практической пользы не приносит. Что ж можем сделать фрейм подвижным! Например, можем приладить к этому фрейму управление, отдаленно напоминающее управление Главным Героем. Чтобы при нажатии определенных клавиш наш фрейм с прикрепленной к нему камерой сдвигался вперед, назад, влево, вправо, вверх, вниз и т.д. Такой метод является наиболее универсальным из перечисленных, с его помощью можно было бы снимать любые фильмы, если бы не одно «Но» — сложность управления при этом будет неимоверно высокой! Посчитайте, сколько клавиш управления добавилось в игру? Не забудьте, что нужно управлять и действиями Томми! Конечно, если вас зовут Эмиль Гилельс или вы хотя бы способны сыграть на пианино левой рукой «В траве сидел кузнечик…», а правой одновременно «Полонез Огинского», то, возможно, этот метод киносъемки вам не покажется сложным. Или вы пригласите в гости своего друга, и вместе с ним попробуете записать видео из игры? Например, друг будет управлять Томом, а вы камерой, тогда может что-нибудь интересное и получится. Во всех других случаях фильмы получатся примитивными, так как один человек эффективно управлять сможет или Главным Героем, или камерой, но никогда тем и другим одновременно. По-моему, этот метод может быть применен для киносъемки сцен без Томми (например, пейзажей или городских достопримечательностей) или когда Томми неактивен (стоит, сидит, спит, умер и т.п.)

Эти рассуждения привели нас к следующим выводам, если мы хотим снять интересный, эффектный фильм про Мафию, то:

  1. камеру нужно обязательно отвязать от Томми.
  2. камера должна быть привязана к передвигающемуся фрейму.
  3. фрейм с привязанной камерой должен двигаться за Томом и держать его в кадре.
  4. управление Главным Героем не должно сильно усложниться.
  5. камера должна управляться автоматически, чтобы не требовать от игрока дополнительных усилий на киносъемку, тогда он сможет полностью посвятить себя управлению Главным

Героем и снять действительно интересные кадры!

А теперь давайте вспомним, как снимаются TV новости и прочий экшен в реальном мире, наверняка вы видели это много раз. Человек с камерой на плече перемещается за участниками происходящих событий, наблюдая за героями своей съемки через объектив камеры и снимая их действия. По-английски, такой человек называется Cameraman, а вот в русском языке точного аналога нет. Я предпочитаю слово «телеоператор», по-моему, оно точнее всего передает смысл. Формально, подойдут слова «кинооператор» и «видеооператор», но это немного другое…

В общем, подумав над поставленной задачей и сформулированными требованиями (а также проконсультировавшись со знакомым профессиональным телеоператором ), я сделал вывод, что скрипт свободной камеры должен быть таким:

  1. это скрипт человека, который следует за Томми, назовем его cameraman (телеоператор).
  2. к телеоператору привязана камера, через которую мы видим Томми.
  3. самого телеоператора мы не видим в кадре.
  4. нужно иметь возможность в любой момент вернуть камеру Тому или опять отдать телеоператору.

Все перечисленное легко реализуется на движке Мафии с помощью скриптов. Нужно взять прозрачную модель человека и создать на ней актера по имени «cameraman», научить его выполнять команды «Следуй за Томом» и «Стой на месте», назначить клавишу на клавиатуре для исполнения этих команд. И, конечно, нужно передавать камеру телеоператору, если он следует за Томом, и возвращать камеру Тому, если телеоператор остановился. Вот и все… Почти все… При первых полевых испытаниях скрипта выяснилось, что телеоператор подвержен конфликтам с городским трафиком, что не очень страшно. Гораздо хуже, что телеоператора могут застрелить! Прямо как в жизни! Человека с камерой не любит никто, ни преступники, ни полиция! Представьте, Томми убегает от копов, за ним бежит телеоператор с камерой, а за оператором парочка копов с помповыми ружьями. Том достает из кармана обрез, останавливается, разворачивается… Все! Ситуация патовая – кто бы сейчас не выстрелил, или Том, или копы, телеоператор будет убит непременно, так как он находится между Томом и копами, то есть на линии огня. А выстрел из обреза или помпового ружья с близкого расстояния убивает любого актера, даже самого живучего. Как тут быть? Выход нашелся очень простой! Cameraman был сделан карликом, его рост равен всего одной десятой от роста среднего человека. Теперь пули пролетают у него поверх головы, не причиняя никакого вреда, да и коллизии с городским трафиком немного уменьшились.

Чтобы встроить Cameraman-скрипт в игровую сцену, открываете файл scene2.bin с помощью редактора BSV, создаете актера по такому образцу:

_mikemouse_alive_mod_p213011522_id011543

И присваиваете этому актеру такой скрипт:

dim_act 5
dim_frm 5
dim_flt 5

findactor 0,»»
findactor 1,»Tommy»
findframe 0,»Tommy.neck»

human_setproperty 0, 111, Intelligence
human_setproperty 0, 9999, Energy
human_setproperty 0, 150, Speed
enemy_vidim 0
///Cameraman by mikemouse (c)
////
///mikemouse@etalon-arm.ru
act_setstate 0, inactive

let flt[0]=0
{ up
if flt[0] = 1, -1, 3
commandblock 1
camera_setfov 70
actor_setpos 0, 0
dialog_begin 1, 0
dialog_camswitch 0, 1
commandblock 0
enemy_action_follow 1, 5, nolink, crouch
label 1
goto 1
label 3
goto 3
}

event 1
enemy_actionsclear
enemy_stop
if flt[0] = 1, -1, 2
dialog_end
enemy_forcescript 0
let flt[0] = 0
return
label 2
enemy_forcescript 0
let flt[0]=1
return

 

Теперь создаете еще одного актера по такому образцу:

_mikemouse_alive_mod_p213011522_id011543

И присваиваете ему вот такой скрипт:

dim_flt 5
dim_act 5
dim_frm 5
findactor 0,»»
findactor 1,»Tommy»
findactor 2,»NULL»
findactor 3,»cameraman»
findframe 0, «Tommy»
///programmed by mikemouse (c)

label 101
ctrl_read 0, CLUTCH1
if flt[0]=0, 101, -1
act_setstate 3, active
setevent 3, 1, -1
label 202
ctrl_read 0, CLUTCH1
if flt[0]=1, 202, 101

end

Все! Теперь можете запускать игру и испытывать скрипт в работе. Тольк не забудьте назначить дополнительную клавишу «Сцепление» в опциях игры, с помощью этой клавиши вы будете переключать камеру, отдавая ее телеоператору или возвращая Тому.
Такой странный выбор клавиши связан с тем, что первоначально я планировал вставить Cameraman-скрипт в Alive mod, а там почти все клавиши уже заняты. Можете изменить клавишу на другую, если клавиша сцепления вас не устраивает. Передумал я встраивать этот скрипт в Аливе мод и решил выпустить как отдельный продукт, так как при тестировании скрипта выяснилась одна интересная вещь – Мафия с получившейся свободной камерой приобрела свойства совершенно новой игры, игрок получает положительные эмоции и новые ощущения от игрового процесса. Бета-тестеры скрипта и некоторые участники нашего форума просили меня выпустить Cameraman-скрипт отдельно, так как они хотят попробовать пройти игру заново с этим скриптом.

На здоровье!
Играйте в Мафию снова и снова!
Пройдите миссии игры еще раз с Cameraman`ом!
Сделайте уникальные и неповторимые скриншоты!
Снимите свои фильмы на тему Mafia: the City of Lost Heaven!
Предлагайте свои идеи для развития и усовершенствования Cameraman`а!

P.S. Учтите, что когда камера находится у телеоператора, то стрелять Том практически не может! Вернее стрелять может, но не может точно прицелиться и попасть. Это нормально, так как прицел привязан к камере, а камеру вы передали другому актеру – телеоператору. В ситуации, когда Тому необходимо или вдруг захочется пострелять, нажимайте кнопку передачи камеры и стреляйте сколько угодно. Помните, вы можете передавать камеру от актера к актеру в любое время, когда пожелаете.

Скачать

CameramanScript_FREEITALY.rar