Создание ролика
by ScrewBoy
Friday 26 March 2004 - 01:34:02
Сразу скажу, что данный туториал написан не мной, а моим другом и хорошим скриптером Seemann'ом, так что все ниже сказанное ко мне почти никакого отношения не имеет, все лавры ему Итак, поехали!
[1] Вступление. Сначала о грустном: создание роликов самое неблагодарное дело в VMB, по той простой причине, что сделать что-то действительно толковое и красивое невозможно. Те ролики, которые есть в игре и показываются перед началом миссий - это ролики с использованием новороченных анимаций (хранятся в ..animcuts.img), большинство из которых создаются с сложных пакетах графики (например 3D Max), так что любителю повторить их не получится. Но отчаиваться не стоит. Большинство игроков - люди непритязательные, так что их может удовлетворить и простенький ролик, в общих чертах объясняющий смысл миссии. Яркий пример - это миссия Thunderdome из Спиновского мультимода за номером 0033. Перед началом миссии пера облетов камеры, минимум движения, но зато сколько fun. Рекомендую ознакомиться. Итак, начнем. Я постараюсь в общих чертах рассказать об анимациях, работа с камерой и некоторые эффекты. Но договоримся, что вы владеете билдером на уровне продвинутого новичка, и объяснять вам как создавать актера, машину, поток я не буду. Почитайте учебник ScrewBoy'я.
------------------------------------------
[2] Анимации и передвижения.
------------------------------------------
------------------------------------------
[2.1] Анимация.
------------------------------------------
Первое, с чего нужно начать, это с того, что анимация и движение машин, пешеходов - разные понятия. Анимация - это
различные уникальные движения актеров. Более подробно о них вы можете прочитать во второй главе учебника ScrewBoy'я. Я думаю, он будет не против, если я процитирую:
---------------
Актерами можно присваивать некоторые из анимаций игры, делается это командой
0372: set actor $my_act anim 24 wait state time 60000000 ms
24 - номер анимации, 60000000 - время, в течениии которого проигрывать анимацию. Если нужно чтобы анимация проигралась до конца, то ставьте побольше. Вот список анимаций:
1 - стоять
2 - стоять, руки за спину
3 - оглядываться по сторонам
8 - сначала руки за спину, потом почесать голову
9 - как прохожие в игре, когда при беге натолкнулись на стену
10 - разворот на 180 градусов
11 - 9, а затем 8
12 - как устал после бега
14 - как стреляет сидя
15 - удивлен
16 - взмах рукой, как ловит такси
17 - руки вверх
19 - разговаривает
21 - садиться
23 - встает
24 - сидит
25 - как что-то дает из кармана и что-то забирает назад
30 - падает
31 - смотрит на часы
33 - пинок ногой
---------------
Таким образом, если в ролике вам нужно задать актеру какое-либо движение, то пишите 0372: set actor [id актера] anim
[номер анимации] wait state time [продолжительность анимации] ms Примечание: 1. список сверху неполный, но
рекомендуется использовать только вышеперечисленные анимации. Другие номера либо повторяют анимацию, либо вообще ничего не делают. Номера больше 34 - не имеют анимации
2. Для некоторых анимаций третий параметр (продолжительность) не имеет значения. Это так называемые одноразовые анимации - взмах рукой, пинок ногой и т.д.
------------------------------------------
[2.2] Передвижения.
------------------------------------------
Ну тут я думаю все понятно. Цитата из учебника:
---------------
Так же актеров можно заставить передвигать куда-нибудь, причем не только шагом, но и бегом и спринтом:
0211: actor $my_act walk_to x y - идти
0239: actor $my_act run_to x y - бежать
0502: unknown_actor $my_act sprint_to x y- быстро бежать (спринт). Не удивляйтесь, что в этих командах все 2 координаты - так надо.
---------------
Для машин все похоже. Подробнее о манипуляциях машинами смотрите в главе 3
------------------------------------------
[3.] Движение камер.
------------------------------------------
015F: set camera position x y z 0.0 0.0 0.0
0160: point camera x y z [o]
Первая команда указывет место куда нужно поместить камеру. Вторая - куда ее нужно направить. Например
;=====Пример 1==============================015F: set_camera_position 109.3801 -815.2471 13.31329 0.0 0.0 0.00160: point camera 91.86213 -805.922 18.99802 2;===========================================
Первая строка помещает камеру на дорогу перед зданием, вторая
направляет ее на цифру 1102. Или:
;=====Пример 2==============================015F: set_camera_position 109.3801 -815.2471 13.31329 0.0 0.0 0.00160: point camera 117.3482 -825.7412 10.46329 2;===========================================
Здесь камера направлена уже на офис адвоката, но позиция камеры
осталась прежней.
Теперь поподробнее о point camera. Последний параметр в этой команде (в примерах =2) отвечает за стиль передвижение камеры к указанной точке. Например в ролике камера находится в порту, а вы захотели показать красоты пляжа Washington Beach. Вы указываете координаты и игра начинает менять расположение камеры. А так как эти два места находятся в разных частях города, то пройдет некоторое время, прежде чем камера достигнет этой точки. Если point = 1, то камера будет лететь, пока не достигнет точки. Если point = 2, камера моментально встанет в указанную позицию. Если point равен другой цифре, камера вообще не будет менять своего расположения.
Но какой ролик без облетов?! Чтобы задать плавное движение камеры, нужно добавить команду
0460: set camera pointing time 0.0 1500
и камера будет плавно в течение 1500 секунд менять свое расположение. Значение 0.0
мне не ясно, но в скриптах чаще всего встречается именно эта цифра. Доработаем движение наш ролик
;=====Пример 3==============================015F: set_camera_position 109.3801 -815.2471 13.31329 0.0 0.0 0.00160: point camera 91.86213 -805.922 10.99802 10001: wait 1500 ms0460: set camera pointing time 0.0 30000160: point camera 117.3482 -825.7412 10.46329 10001: wait 3000 ms;===========================================
Итак, сначала камера направлена на фасад здания, затем разворачивается и смотрит на офис. Разворот длится 3 секунды, поэтому, чтобы не выполнять дальнейший код, нужно
поставить задержку. В этом примере позиция самой камеры не менятся, меняется ее направление, поэтому второго
set_camera_position нет. Если вам нужно еще и изменить позицию камеры, добавляйте команду set_camera_position после set camera pointing time и она будет плавно меняться. Да, и pointing_time работает тогда когда point = 1 (см. выше).
------------------------------------------
[4] Различные эффекты.
------------------------------------------
Подробнее о спецэффектах в главе 4, тут я расскажу о том, чего там нету.
Видео эффекты. Это
a) 04C7: toggle camera green scanlines 1б) 0507: set camera interference 1в) 02A3: toggle_widescreen 1 (on) - включить зеленые линии на экране (как камера в гольф клубе). Выключается командой 04C7: toggle camera green scanlines 0
б) Включить серенькие линии (как в миссии G-Spotlight, когда Томми на лифте едет). Выключается командой 0507: set camera interference 0
Теперь на основе полученных знаний сделаем простенький ролик.
004F: create_thread ЈЈМой_ролик
...
:Мой_ролик
0001: wait 250 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
02A3: toggle_widescreen 1 (on)
0507: set camera interference 1
015F: set_camera_position 109.3801 -815.2471 13.31329 0.0 0.0 0.0
0160: point camera 91.86213 -805.922 10.99802 2
0001: wait 500 ms
016A: fade 1 () 500 ms
0001: wait 500 ms
0460: set camera pointing time 0.0 3000
0160: point camera 117.3482 -825.7412 10.46329 1
0001: wait 3000 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
0507: set camera interference 0
0247: request model #ARMY
038B: load requested models
:1
0001: wait 0 ms
00D6: if 0
0248: model #army available
004D: jump_if_false ЈЈ1
009A: 0@ = create_actor 4 #army at 109.6735 -834.5632 10.06329
0249: release model #ARMY
0211: actor 0@ walk to 116.4326 -823.2233
0159: camera_on_ped 0@ 15 2
0001: wait 250 ms
016A: fade 1 () 500 ms
:2
0001: wait 0 ms
00D6: if 0
0126: actor 0@ walking
004D: jump_if_false ЈЈ2
0372: set actor 0@ anim 17 wait state time 3000 ms
0001: wait 3200 ms
0321: kill_actor 0@
0003: shake camera 140
0001: wait 250 ms
016A: fade 0 () 500 ms
0001: wait 500 ms
02A3: toggle_widescreen 0 (off)
02EB: restore camera with jumpcut
009B: destroy actor instantly 0@
0394: play music 1
016A: fade 1 () 500 ms
0001: wait 500 ms
004E: end_thread
Вот в общих чертах основы создания ролика. Чтобы научиться делать красивые интересные ролики нужна практика.