DAN965: РУКОВОДСТВО ПО КАМЕРАМ
С чего начать.
Чтобы сделать хороший видео-ролик надо знать, разумеется, команды, которыми он создаётся, и быть очень внимательным при написании скрипта - одна малейшая ошибка и скрипт не будет работать (а может вообще вылететь в Windows), поэтому надо всегда проверять, что Вы написали. В начале надо в игре расставить все юниты, указать им Waypoint'ы (точки, показывающие, что делать юниту или игроку), вставить команды, и синхронизировать их (то есть, назначить вейпоинты или триггеры, которые будут выполнятся первыми, вторыми и т.д., то есть будет выполнен второй вейпоинт или триггер, после того, как выполнится первый). Потом, чтобы создать скрипт, вам надо выйти в Windows (если вы в игре - нажмите Alt+Tab) и открыть стандартный блокнот Windows'а (Notepad). Там написать команды, которые будут выполнять действия камеры. (Так же в скрипте можно выполнять любые действия, которые можно делать в редакторе, часть из них я расскажу в конце статьи). Далее - сохранить этот скрипт с расширением sqs (Пример: timebomb.sqs). Чтобы вста вить скрипт в игру надо в строке инициализации любого юнита, или в строке on activation вейпоинта или триггера написать следующее: [] exec "имяскрипта.sqs". Допустим вы назвали скрипт intro, значит пишем: [] exec "intro.sqs".
Как создавать камеру, эффекты камеры, цели камеры и другие команды.
Чтобы создать камеру, нужно воспользоваться командой CamCreate. В этой команде можно использовать два синтаксиса, это:
"camera" - создаёт нормальную камеру;
"seagull" - создаёт летящую камеру с высоты птичьего полёта.
Но командой seagull никто не пользуется, и советую вам тоже ей не пользоваться.
В общем, команда выглядет так: _cam = "camera" camcreate [x,y,z], где [x,y,z] - это координаты места, где создаётся камера (чаще всего используют координаты [0,0,0]).
Чтобы узнать координаты, где Вы хотите создать такой скрипт, нужно создать игрока в понравившемся Вам месте и написать в поле initialization этого игрока следуещее:
hint format ["position: %1", getpos player]. Когда Вы нажмёте на кнопку "Просмотр" (Preview), Вы увидете на экране что-то вроде этого: 8634.56,5972.47,6. Это и есть координаты, их и надо вставлять в эти квадраные скобки, то есть: x - 8634.56, y - 5972.47, z - 6. Пример: _cam = "camera" camcreate [6456.34,5647.25,8].
Далее идёт команда cameraEffect. Она создаёт эффект для камеры. Выглядет так - _cam cameraeffect ["эффект", "позиция"]. Вот все эффекты и позиции, которые корректно работают, но используется сейчас только ["internal", "back"].
Эффекты:
internal - Используют для начала ролика;
terminate - Используют для завершения ролика;
zoomout - удаление;
zoomin - приближение;
follow_far - следовать за целью далеко от неё (ненужная команда);
follow_near - следовать за целью рядом с ней (ненужная команда);
static - статическая камера;
tracking - статическая камера с приближением;
none - обычный вид.
Позиции (переводить не буду, поймёте сами):
bottom;
backtop;
fronttop;
righttop;
lefttop;
rightback;
leftback;
rightfront;
leftfront;
back;
front;
right;
left;
top.
Пример: _cam cameraeffect ["terminate","back"].
После команды cameraEffect можно выключить радио (чтобы не было слышно, как переговариваются солдаты). Эта команда называется enableradio. У неё есть две переменные: false (выключает радио) и true (следовательно, включает). В общем, команда выглядит так: enableradio false - выключенное радио. enableradio true - включённое радио, и в конце ролика надо включать радио обратно!
После этого можно сделать ещё один интересный эффект - переход из чёрного или белого экрана в игру и обратно. Команда эта называется titleCut, выглядит она так: titleCut ["","BLACK IN",5], где BLACK IN - эффект. Всего их четыре. Вот они:
BLACK IN - из тёмного экрана в игру;
BLACK OUT - из игры в тёмный экран;
WHITE IN - из светлого экрана в игру;
WHITE OUT - из игры в светлый экран;
Число 5 означает, за какое время (в секундах) произойдёт переход. Между первыми кавычками можно вставить текст, ктоторый появится на экране вместе с переходом. Эту команду можно использовать в любом месте скрипта.
Пример: titleCut ["Hello!","BLACK IN",9]
Чтобы камера через какое-то время переходила из первой команды во вторую используется команда ~* (где * - время в секундах). Пример: ~15.
Потом идёт команда camsetpos (её можно и не использовать в простых видео роликах). Команда выглядит так: _cam camsetpos [6543,2455,7], [6543,2455,7] - позиция на которой будет создана камера. Так же можно создавать камеру на позициях объектов через _cam camsetpos (getpos player). Позиция будет на том месте, где в этот момент стоит игрок. Если Вы поместите камеру не точно над данным объектом, а сместите её немного, то вам надо написать следующее:
apcoords = getpos ap
x = apcoords select 0
y = apcoords select 1
z = apcoords select 2
mycam camsetpos [x+2,y+3,z+11]
ap - имя объекта на карте; цифры +2, +3, +11 - расстояние, на сколько метров вы хотите сместить камеру.
Потом идёт самая часто использоваемая команда, эта команда называется camsettarget. Она наводит камеру на цель, цель может быть как позицией (например: [3456,2674,4] ), так и объектом (например: t72, t72 - это имя объекта на карте). Примеры: позиция - _cam camsettarget [3456,2674,4]; объект - _cam camsettarget t72.
Дальше следует команда, которая устанавливает камеру относительно цели этой камеры. Она называется camsetrelpos. Эта команда очень удобна для, например, создания вида объекта слева, справа, крупным планом и т.д. Координаты тут отсчитываются не от начала координат, а относительно юнита или позиции. То есть, надо писать не координаты (например [3456,2674,4]), а [4,3,4]. Координаты считаются в метрах, т.е. 4 - это 4 метра от цели влево. Первая цифра показывает отношение слева от объекта, вторая - спереди, а третья - сверху. Если вы хотите что бы, например, снять юнита крупным планом, то пишем: _cam camsetrelpos [0.2,+1,0.4]. "+" - это приближение, а "-" - удаление от объекта.
Все команды, которые мы будем использовать, не будут применены, пока мы не используем команду camcommit. Она выглядит так: _cam camcommit num. Где num - число в секундах, за которое произойдут изменения (чем больше, тем плавнее и медленнее будет совершен переход). Если нам надо, чтобы изменения произошли мгновенно, пишем: _cam camcommit 0. Пример: _cam camcommit 5.
Есть ещё очень полезная команда - camSetFOV. Она используется для приближения и удаления камеры по отношению к объекту. Чем ниже единицы - тем ближе, чем выше - тем, следовательно, дальше. Пример: _cam camSetFOV 0.900.
С командой camSetFOV надо использовать команду CamCommitted, иначе команда camSetFOV не будет работать. Она проверяет, закончила ли камера последнее изменение. Пишется так: @camCommitted _cam.
Вот основной пример ко второй главе:
_cam = "camera" camcreate [0,0,0]
_cam cameraeffect ["internal","back"]
_cam camsettarget v1
_cam camsetrelpos [4,5,4]
_cam camcommit 0
~7
_cam camsettarget s2
_cam camsetrelpos [4,4,2]
_cam camSetFOV 0.310
_cam camcommit 3
@camCommitted _cam
~5
Вставка музыки, замедление времени, вставка объектов поверх камеры и другие команды.
В начале я начну с команды TitleText. Она вставляет на экран текст. Команда выглядит так: TitleText ["текст","позиция текста"]. Есть две позиции:
PLAIN - вставляет текст в середине экрана;
PLAIN DOWN - вставляет текст внизу экрана.
Пример: TitleText ["You win!","PLAIN DOWN"].
В скриптах так же можно вставлять музыку и звуки. Команда для вставки музыки называется playMusic, а для вставки звуков - playSound. Команда для вставки музыки выглядит так: playMusic "название мелодии". В игре есть 20 трэков (от "track1" до "track16" и "7thlifeless", "7thdecide", "7thoverdose", "7thiamgonnafly"). Команда для вставки звуков выглядит так: playSound "название звука".
Вот примеры музыки: playMusic "track6". Звука: playSound "ScreamingPeople".
Если Вам надо, чтобы музыка или звук закончили своё звучание раньше времени, то пишем следующие команды: 10 fademusic 0, а для звуков: 10 fadesound 0, где 10 - время в секундах, за которое мы хотим, чтобы звук понизился, и 0 - до какой громкости звук должен понизится. 0 - выключенный звук, 1 - включённый, 0.5 - в половину громкости и т.д. Если Вам надо, после того как первый трэк уже отзвучал (или Вы его выключили командой fadeMusic) и Вы хотите вставить новый трэк, пишем, например, следующее:
1 fademusic 1
playMusic "название трэка"
В видео-роликах можно так же втавлять поверх камеры какой-нибудь объект (например, телевизор). Тут Вам понадобится команда cutrsc (или для телевизора - cutobj). Вот, как выглядит команда: cutrsc ["название объекта", "PLAIN DOWN", 0].
Вот название объектов:
"default" - обычный вид (без объектов);
"binocular" - вид через бинокль;
"foto" - вид как в стартовом меню игры;
"tvset" - телевизор.
Примеры: cutrsc ["binocular","PLAIN DOWN",0], для телевизора: cutobj ["tvset","PLAIN DOWN", 0].
В видео-роликах можно так же убыстрять или замедлять время, делается это при помощи команды setacctime. Выглядит она так: setacctime num, где num - число. Если число - 1 то это нормальное время (как обычное время в игре), ниже единицы - замедление, а выше - убыстрение. Пример: setacctime 0.4.
В мультиках ещё можно устанавливать солдату определённое выражение лица, это можно сделать при помощи команды setmimic. Выглядит так: ap setmimic face, где:
ap - имя солдата на карте;
face - выражение лица.
Выражения лица бывают разными:
smile - улыбается;
agresive - агрессивный;
angry - злой;
suprise - удивлённый;
sad - обидился;
cynic - ухмыляется;
ironic - улыбка;
hurt - чувство боли;
normal - нормальный.
Пример: soldat1 setmimic smile.
Есть ещё одна команда, которая называется SkipTime. Она позваляет пропускать время. В общем, пишется так: SkipTime 2. 2 - это время в часах, которое Вы хотите пропустить.
Далее я вам расскажу о ещё одной команде связанной с текстом, эта команда называется CutText. От TitleText она отличается тем, что в TitleText текст появляется сразу, а в CutText - постепенно, т.е. плавно за некоторое время, которое Вы сами зададите. В общем, команда выглядит так: CutText ["text","textPosition", fadeinDuration].
text - текст, который Вы введёте;
textPosition - позиция, на которой будет располагаться текст. Как и в TitleText, их две - PLAIN и PLAIN DOWN;
fadeinDuration - время в секундах, за которое на экране должен появится текст.
Вот пример: CutText ["Hello, Guys!","PLAIN DOWN",5].
Под конец этой главы я расскажу, как заканчивать свой ролик и уничтожать камеру. Вначале надо опять написать команду CameraEffect с эффектом "Terminate" и позицией "Back". Затем, воспользоваться командой CamDestroy. Выглядит она так: CamDestroy _cam. И завершить всё это командой exit. Вот, в общем, что получается:
_cam CameraEffect ["terminate","Back"]
CamDestroy _cam
exit.
Вот основной пример к третьей главе:
playmusic "track12"
cutrsc ["binocular","PLAIN DOWN",0]
_cam camsettarget v1
_cam camsetrelpos [4,5,4]
_cam camcommit 0
~7
TitleText ["Vi soldat!","PLAIN DOWN"]
_cam camsettarget ap1
_cam camsetrelpos [9,5,6]
_cam camcommit 0
~7
TitleText ["TANK 1","PLAIN DOWN"]
_cam camsettarget tank1
_cam camsetrelpos [4,2,4]
_cam camcommit 0
~6
s1 setmimic agresive
5 fademusic 0
CutText ["BAZA SSSR","PLAIN DOWN",4]
0 fademusic 1
playmusic "track14"
_cam camsettarget mi24
_cam camsetrelpos [6,7,10]
_cam camcommit 0
~17
_cam cameraeffect ["terminate","Back"]
camdestroy _cam
exit.
Разные команды, которые можно использовать в картостроении.
Тут я расскажу о полезных командах, которые можно использовать как в видео-роликах, так и в миссии.
Как юниту добавить оружие.
В init юнита пишем: Имяюнита AddWeapon "имяоружия".
Как юниту добавить патроны к какому-либо оружию.
В init юнита пишем: имяюнита AddMagazine "типпатронов".
Тут Вы найдёте названия оружия и патронов к ним.
Чтобы удалить всё оружие у игрока, напишите: removeallweapons this.
Чтобы удалить одно или несколько оружий или патронов напишите: removeweapon или removemagazine.
Как посадить юнита или группу в транспорт:
в init (так сокращённо буду называть в этой главе строку - iniеialization) транспорта пишем: "_X moveincargo truck1" foreach units grp2.
Имя группы (имя группы - это имя её лидера) - grp2;
Имя транспорта - truck1;
Как заставить огонь гореть.
в init огня пишем - this InFlame True.
Как создать флаг и присоединить его к юнитам.
Вначале создаем флагшток и в нём, в строке init пишем - this setFlagTexture "rus_vlajka.pac".
rus_vlajka.pac - флаг СССР;
usa_vlajka.pac - флаг Соединённых Штатов
Чтобы прикрепить флаг к юниту есть две команды.
Для пехоты: в init флага после первой команды, через точку с запятой пишем: this setOwner ap, где ap - имя юнита.
Для техники: та же команда, только после имени юнита добавляется буква d.
Грузовик, например, называется truck1, Тогда команда будет выглядить так: this setFlagOwner truck1d.
Как ставить объекты в воздух (например, телефон на столе).
в init объекта пишем: this setPos [getPos this select 0, getPos this select 1, (getPos this select 2) + 1]; this setunitpos "UP".
+ 1 - это высота (в метрах), на которую Вы хотите поместить объект.
Дальше буду рассказывать Вам о команде playmove. Пишется она так: ap playmove "Название действия", где ap - имя юнита на карте, к которому Вы хотите применить анимацию. А в кавычках пишите название действия, которое хотите этому юниту дать, я расскажу Вам лишь о самых часто использываемых командах, о всех командах читайте в статье Кондора про скрипты.
Вот эти действия:
OnChair - сидит как на стуле (остаётся ему только под зад стул подставить ;));
FXStandhip - встаёт со стула;
FXStandSurDown - сдаётся в плен;
CivilDead - уже умерший человек;
CivilLyingDying - человек умирает;
CombatDead - солдат умирает (добавьте к имени действия Ver2 или Ver3 - получите немного другую анимацию);
EffectStandSalute - заставляет юнита отдать честь;
EffectStandSitDown - заставляет юнита сесть на землю;
EffectStandTalk - заставляет юнита говорить (махать руками, как будто говорить);
FXStandDip - засталяет юнита отжаться;
А эти два действия очень хорошо подойдут для ролика, в котором поверх камеры помещается бинокль:
BinocLyingToLying - заставляет юнита стоя поднести бинокль к лицу и убрать его (у юнита должен быть бинокль);
BinocStandToStand - заставляет юнита в присадку посмотреть в бинокль и убрать его.
Вот всё, что я Вам хотел вам рассказать в этой статье, желаю Вам успехов в картостроении для такой замечательной игры, как Флэшпоинт!