XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Желтая пресса: обучающие статьи
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
MapMan
Corey 8 Taylor
offline
Опыт: 21,554
Активность:
FellGuard спасибо, прочитаю добавлю:)
Старый 10.02.2006, 19:04
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Когда карта большая или много импортированных моделей, которые ещё не размещены непосредственно на карте надо эти модели с текстурами прелоадить. (Предварительно загружать). Так, вы бывало наблюдали, что при использовании впервые абилы со сложным артом, карта "подвисает", а потом дёргается и опять всё тип-топ. Дабы избежать таких лагов, близзарбы широко использовали прлоадинг, его следует использовать и при создании/замещении (replace) юнитов. Это сильно сгладит процесс.
Короче, если кому интересно - вот описуха.
Три влзможных действия с прелоадингом -
1)Preload File - указывает путь к подгружаемому файлу. НО НЕ ЗАГРУЖАЕТ ЕГО! Это как срока в листфайле.
2)Begin Preloading with a (x.xx) sec. timeout - вот эта строчкак как раз и начинает подгрузку, указывается время за какое она совершается.
3)САМОЕ ИНТЕРЕСНОЕ!
"Preload Batch" - Preload all files, listed in filname - казывается непосредственно Листфайл, в формате *pld, где прописаны пути до всех моделей/текстур/др. типов файлов (большим я пока не пользовался) и прописано время выполнения. Это может быть листфайл в Вар3.мпку или в импорте. В Вар3.мпк - это листфайлы для Кредитов и некоторых карт-интерлюдий - чтобы не голюкало и не тормозило. Это очень сильное и мощное действие, хотя им почти никто не пользуется.
Некоторые правила пользования/составления
1) Необязательно но желательно, чтобы триггер с действием прелоада выполнялся в инициализации карты. Потому как, при загрузке тормозит всё равно, да ещё и не факт, что заданный во время игры файл вообще загрузится. В любом случае, тормоз, тот которого мы пытались избежать случится при подгрузке, если опять таки не в инициалах.
2) Если вы грузите небольшой объём (например, 2 модели и две - четыре текстуры) пользуйтесь триггером. Можно - конвертированном в текст. Даже лучше. НО если вы юзаете большой обьём загрузки, не сожранной памяти, а именно количество загружаемых файлов - проще составить прелоад-лист и сослаться на него в Preload Batch.
3) Прелоад-лист - та же функция, что и триггер с загрузкой, конвертированный в текст. Содержит следующие обязательные строчки:
I Function *** takes nothing, то же и returns
II Call preload( "Folder//Filefolder//Filename.xxx" ) (данный путь не обязателен так выглядеть, так выглядят большнство в Вар3.mpq)
III Call begin preload( x.xx )
IV endfunction
Как видите, та же функция, что и текстовой триггер, но только он не потребляет ещё и функцию "Create_trigger_action", так что формально выгонее. Создать же непостредственно плд-файл можно просто тупо поменяв расширение *txt файла, скопировав текст из конвертированного триггера, или написав (что глупо от руки) от руки всё то, что необходимо. Потом импортируйте его в игру и в инициализации в Прелоад Батч ссылайтесь на этот файл. Всё.
Старый 11.02.2006, 13:52
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
MapMan переговори с Алексеем, совместите статьи в одну, получится кулл ИМХО, да и эксклюзив на ХГМ.

Nimensy добавил:
FellGuard ты не думал написать свою статью?
Старый 11.02.2006, 19:54
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
FellGuard ты не думал написать свою статью?
А на тему? Почти все мною исхоженные вдоль и поперёк темы здесь раскрыты... Кроме этой. Вообще-то я не против, многое знаю на ура, просто среди авторов этого эксклюзива будет и мой ник. Кстати, за написание зачотной статьи что-то кроме благодарности читателей дают? ;)
ЗЫ - ждите, скоро допишу, чего и как по близзам надо триггерно готовить в кинематике.
Ещё зы - МэпМэн, что не добавил ни одной заметки? Уже третья на подходе, поторопись с сортировкой...
Старый 12.02.2006, 12:23
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
FellGuard +1000 репы ;) да и вечная благодарность.
З.Ы. Переходим на марки ХГМ. Подробнее в подписи WildCat'a!
Старый 12.02.2006, 16:06
MapMan
Corey 8 Taylor
offline
Опыт: 21,554
Активность:
Статья дополнена!)
Спасиба FellGuad'у!
Старый 12.02.2006, 18:03
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
MapMan это по твоему объединил?
ХА!ХЫ!ХО! Ты не просто припиши это в конец, а вставь всё аккуратно, чтоб красиво смотрелось... ЭХ! Тебя уже писать не заставляют, просто скей - а ему леень.
Старый 12.02.2006, 18:29
MapMan
Corey 8 Taylor
offline
Опыт: 21,554
Активность:
Nimensy вотъ такой я, завтра всё красивее сзделаю, у меня щя время ПОЗДНЕЕ, еле сижу:)
Старый 12.02.2006, 18:45
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
MapMan пойди выспись ;)
З.Ы. Мне свои советы писать или как?
Старый 12.02.2006, 19:19
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
attack (от 1 до X) - анимация атаки(пример: attack - 1);
stand (от до X) - анимация стойки юнита;

Хмм... незнал что так можно (Я имею ввиду - (от 1 до Х)), убери, и почитай это.
Старый 12.02.2006, 20:32
Mozes
Green Street!
offline
Опыт: 5,034
Активность:
Пиши советы,внимательно слушаем.
Старый 12.02.2006, 20:37
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
Mozes ты это кому?
З.Ы. судя по аве, не очень то и внимательно.
Старый 12.02.2006, 20:59
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
Мне свои советы писать или как?
Вроде, это ты писал ;). Конечно, давай, будет мегастатья. Блин, запарка с триггерами, удалил текстовик, щас сижу пишу заново.
Старый 13.02.2006, 05:25
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
Заметки Режисёра
И так, ты читатель, решил ознакомиться с созданием синематического ролика.
Если да, то ты пришёл по адресу. Мы постарались сделать эту статью максимально понятной и подробной,
включив сюда все наши знания. Здесь ты узнаешь о многих тонкостях роликов, о том как избежать тех или иных неполадок, о том,
как более профессиональные синематисты делают свои ролики, и какие они используют при этом фишки.

Начало

Синиматика может иметь многократные события, в зависимости от ваших
потребностей, типа применения синематики когда юнит входит в
определенную область карты, или вначале и/или окончания карты.
Синемати должен начинаться плавно, чаще всего, он начинается с затемнения экрана
действием Fade filter. Я не говорю о том, что первым действием в триггере синематики является
Cinematic mode on, т.к. думаю это и ежу понятно.
Чтобы начать синематику мы сначала должны добавить несколько действий,
которые позволят нам показывать сообщения, удалять в игре туманы, и так
далее.
И так как я уже сказал, сначала мы должны использовать действие "Спецэффекты - Turn cinematic
mode On for (All Players)". Это действие включает синематику, выключает
туман войны, чёрную маску и также выключает контроль управления.
Мы также можем использовать действие "Спецэффекты - Turn on letterbox
mode (hide interface) for (All Players): fade out over 2.00 seconds". А
ещё можно и "Cinematic - Disable user control for (All Players)"
Это убирает контроль над юнитами и удаляет круги под ними.
Можно использовать действие "Спецэффекты - Clear the screen of text
messages for (All Players)", это действие очищает экран от сообщений и
текста, которые были показаны действием: "Игра - Display to (All
players) the text: Text".
Спешу так же отметить, что событие Map Initalization - это момент, когда на загрузочном экране полоса загрузки доходит до конца и вылазиет сообщение "Нажмите любую кнопку". Так что если вы ставите как начало триггера (не только синематика, любого) это действие, триггер запускается и работает как раз в
этот момент. Так что добавляйте в действие Wait или как событие ставьте Elapsed game time

Создание и управление камерами.

Работа с камерой является одной из самых необходимых и, фактически, основных и незаменимых особенностей
(в умелых руках - преимуществ) синематики. Когда ты создал камеру, ты не просто можете ёё так и оставить -
потому что вы создали камеру из стандартного обзора, из поля зрения и высоты по Z камеры, которая по умолчанию является обзором игры. Чтобы поменять обзор камеры, нажмите Enter
(или клавишу, которая заменяет эту по умолчанию) - тут широкий спектр действий.
От высоты по Z и до угла крена. Примечательно то, что едитор показывает иногда переход от одной камеры
к другой (Apply camera object) не так, как это смотрелось бы в игре, так что не отчаивайтесь,
если к камере, которую вы накренили, ваш пред.просмотр в редакторе полетит, вращаясь, под землёй - это гон.
К сожалению, манипулировать камерой, используя цифры не так уж и просто, по этому в редакторе имеется одна
интересная фишка... Если ты нажмёшь Ctrl + RC (Right Click) и начнёшь двигать мышь, то ракурс будет меняться
и камера будет вращаться как угодно, не меняя расстояния до цели.
Команды для камеры:
"Создать камеру" - эта функция создаёт камеру с видом, который отображается на вашем экране в данный момент!
"Перейти к виду" - нужная камера переходит к виду(т.е. к тому что у вас
отображается на экране в данный момент).
"Вид" - при выборе нужной камеры и нажатии на данную кнопку, ваш экран переходит в вид выбранной камеры.
Для любой хорошей синиматике,
мы должны использовать камеры и движение камеры, чтобы создать хороший эффект и показывать перспективу в вашей синиматике. Сначала мы должны
создать новую камеру, для этого жмём Слой->камеры. Теперь на карте
создаём камеру, делаем вид, который будет показывать камера и жмём
"Перейти к виду".
Когда мы хотим применить нашу камеру в триггерах, используем действие
"Камера - Apply for over *** seconds".Это действие применить вашу
камеру в течении (сколько вы установили) времени, переходя из
предыдущего вида в следующий.
Когда камера, расположенная в лесу и слегка накренённая
(в лесу - чтобы был заметен крен) плавно переходит в обычную, не накренённую камеру спереди - выглядит как съёмка с вертолёта.
Поле зрения и расстояние до цели
хоть отвечают и каждые за своё, но если между ними определённый баланс
(скажем, на 10 поля зрения, 100 до цели), то камера, ОСТАВАЯСЬ НА МЕСТЕ,
будет увеличивать или уменьшать поле зрения - таким образом, хорошо акцентировать камеру на каком-то объекте.
И запомните - хочешь показать величественного героя во всей красе - не расстояние сокращай, а поле зрения,
если же он стоит на поле битвы - увеличивай, опять же, поле зрения. Вот вроде на пока и всё.


Движения юнита, передачи, и т.д.

Действие "Спецэфекты - Transmission From Unit" показывает портрет
(выбранного) юнита и показывает текст на части основания экрана. Это
действие позволяет делать эффект общения юнитов.
Мы можем перемещать юнитов различными способами, например "Боевая
единица - Order unit issue targeting a point" - здесь мы приказываем
чтобы юнит двигался в область(регион). Мы можем также использовать
"Боевая единица - Issue order targeting a point with Polar Offset" -
чтобы переместить единицу, определяя точно как далеко и в какой угол.
Это одна из возможностей микроуправления всеми теми действиями и мимикой
героев/юнитов, которые вам предстоит двигать, заставлять колдовать и что-то говорить.
Дак вот, эта функция позволяет закрепить часть тела юнита направленной на другого юнита.
Особенно хорошо, когда это летающий юнит - герой очень красиво провожает его взглядом,
ТЕМ БОЛЕЕ, если юнит взлетает с земли.
Для более опытных режиссёров ещё советую - вы можете придать юниту эмоциональность -
с этой целью делаем невидимого юнита (без модели) и различно им манипулируем - двигаем по карте,
резко перемещаем из угла в угол - герой будет нервно озираться по сторонам, можем опустить
невидимку на землю возле героя - он повеситт нос. О строении - функция представляет собой следующие параметры -
Код:
Lock Unit`s (это чью голову вы повернёте) body-part (здесь вы выберете, что же у героя вам заблокировать в режиме обзора на юнита - голову или грудь. Голову надёжнее - грудь не стоит сильно вращать - будет глупо но весело смотреться) facing on Unit (это собственно тот, на кого смотрят) offset by x, y, z (здесь указывается, насколько точка, в которую направлен взгляд отстоит от x0, y0, z0 позиции юнита-цели. Допустим, чтобы взглянуть в лицо ему - ставьте 0, 0, 70 - 100)

Ещё, при использовании функции очень важную роль играет ещё одна, расположенная ниже этой в списке в триггерах,
которая отвечает за скорость поворота части тела в указанном направлении для юнита.
Эта функция - Change Unit`s Blend Time. Для всех моделек юнитов в варе, что я видел по умолчанию Blend Time = 150.
Итак, юзверь, в твоих руках мощное оружие - экспериментируй.
Ещё неплохо смотрится фича с Change Unit Flying Height - она действует только на летающих,
и за определённое время опускает/поднимает юнита на нужную высоту.
Так с дирижабля можно народ "выгружать".


Fade filters и Advanced Fade Filters

Fade filters и Advanced Fade Filters, картинки, которые появляются на
экране, обычно их используют для отделения фрагментов синиматики.
Мы можем использовать Fade filters использая действие "Спецэффекты -
Fade filter" - вы можете устанавливать, как долго будет длиться эффект,
и какую часть карты вы можете видеть.
Применение Advanced Fade Filters предоставит вам больший выбор чем
обычный Fade filters..
Во многих картах, посреди\вначале\в конце игры мы видели красивые картинки на весь
экран. Ты спросишь "Как?", но на самом деле здесь нет ничего трудного, достаточно вглядеться
в возможности Fade filter... Как ты уже заметил можно выбрать не только "Белую Маску", но
ещё множество всякой всячины. А если опустить глаза ниже, то можно увидеть, что так же просто
можно применить импортированные картинки в формате *.blp или *.tga.
Отмечу, что в общепринятом ТГА информация о цвете хранится лучше и качественней, чем в blp (blizzard paint).

Анимация


Чтобы заставить юнита воспроизводить анимацию используем действие "Анимация - Play (Unit)'s stand animation", где stand - анимация стойки юнита! У каждой модели есть анимации, у кого больше, у кого меньше, а у кого её вообще нет! Привиду примеры стандартных анимаций:
attack - анимация атаки;
death - анимация смерти;
dissipate - анимация: душа героя улетает на небеса;
spell - анимация использования спелла;
stand - анимация стойки юнита;
walk - анимация ходьбы юнита.
Очень обидно, что большинство анимаций юнитов оказываются триггерно недоступными.
Особенно обидно бывает, когда импортируешь в карту модель WoW 10Мб весом, а потом оказывается,
что из всех тамошних анимаций можно использовать лишь 3-4 штуки. Остальное же - просто мёртвый груз,
ибо War вообще не понимает анимации с нестандартными именами (навроде Attack Very-Very Hard).
Триггерно решить эту проблему невозможно. А вот у JASS'еров есть шансы.
Думаю, многие любители JASS во время просмотра common.j обращали своё внимание на функцию
Код:
native SetUnitAnimationByIndex takes unit whichUnit, 
                                                      integer whichAnimation returns nothing

Так как же всё-таки проиграть нужную анимацию юнита?
Первое, что для этого нужно сделать - создать анимационный тег. Это особый объект, представляющий собой всего лишь список всех анимаций юнита. Создаётся он при помощи ещё одной "загадочной" JASS-функции:
Код:
native AddUnitAnimationProperties  takes unit whichUnit, 
                                                 string animProperties, boolean add returns nothing

Что только о ней не пишут во всяких мануалах! По одной версии, она добавляет новые имена анимаций; по другой - новые анимационные свойства (что бы это значило). В JASSWiki данная функция "поясняется" так: "Добавляет/удаляет анимационные свойства юнита".
На самом же деле она всего лишь создаёт анимационный тег (список анимаций юнита) и "цепляет" его на указанный юнит. Рассмотрим параметры этой функции:
whichUnit - всего-навсего тот юнит, анимационный тег которого мы хотим создать (или удалить, т.к. эта же функция способна и удалять анимационные теги).
animProperties - имя анимационного тега. Может быть любым. Используется для дальнейших ссылок на анимационный тег. Если ссылки на тег в дальнейшем не понадобятся, то в этом параметре можно передать null. Тогда ссылка на тег теряется и происходит утечка памяти (всем участникам команды DotaTeam рекомендуется всегда передавать сюда null).
add - если сюда передать true, то тег создаётся; если false - удаляется (при условии, конечно, что на юните есть тег с указанным именем). Все, кто озабочен утечками, должны непременно удалять теги, когда они становятся ненужными. Все остальные могут упростить себе жизнь и оставить теги неудалёнными (благо в любой кинематике и без того утечек масса).
Кстати, триггерщики для создания тега могут воспользоваться командой
Анимация - Add/Remove unit animation tag. Вообще говоря, это очень странно: создать тег триггеры позволяют, а работать с ним - нет .

Итак, тег создан (для тех, кто забыл - напоминаю: тег есть список всех анимаций юнита). А вот теперь смело вызываем SetUnitAnimationByIndex. Триггерщики могут воспользоваться для этого Custom script:

Код:
call SetUnitAnimationByIndex(gg_unit_hfoo_0002,3)

Первый параметр этой функции - юнит, анимацию которого нужно проиграть. Второй - номер анимации (нумерация идёт с нуля, 0 - это, как правило, Stand 1).
Триггерщикам будет несколько сложновато определять, что нужно написать в качестве юнита , выглядит это действительно страшновато. Ну что ж, могу посоветовать создать какой-нибудь триггер для тестирования, содержащий всего 1 команду, использующую данный юнит. Затем конвертировать триггер в текст и глянуть имя глобалки юнита. (Надеюсь, я вас ещё не загрузил?)
Вторая проблема - определить номер нужной анимации. WE тут ничем не поможет, т.к. его окошко анимаций сортирует их по алфавиту, а не по номеру. Номер можно определить, открыв файл модели юнита в блокноте (лучше - в виде MDL), War3Viewer, MdlVis, W3ME или подобной программе. После чего просто подсчитать анимации (от нуля), пока не дойдёте до нужной.

Так же вы можете просмотреть анимации моделей с помощью программы War3Viewer или MDLVis!
И ещё дополнение об анимации - иногда возникает реальная необходимость проиграть повторяющуюся,
лупинговую анимацию только ОДИН раз. Можно посмотреть, сколько времени идёт анимация,
запустить Sleep (oh, sorry, Wait!) на примерное время - однако это вызов лишний раз лишней функции,
занятие лишнего места (а перегруженные обилием строк триггеры начинают не по-детски тормозить),
да и всё равно, есть возможность того, что не попадёте в секунду, и анимация самым наглым и некрасивым образом прервётся.
Можно и нужно проще - есть кроме Play animation ещё и Queue animation - функция также удобна в использовании,
как и Add trigger to trigger queue и так же необходима. Суть в том, что к текущей анимации юнита в очередь ставится другая,
к поставленной следом можно ещё добавить - целый плэйлист получается =). Чтоб сбросить очередь - use Reset Unit Animation.
И конечно же, меняйте скорость анимации, движения, боя для юнитов (анимация - Change Unit`s animation speed,
скорость передвижения и боя - в подразделе Боевая единица), это позволит вам тормозить кровавую сечу на поле боя,
облетать его камерой, проскальзывая между застывшими в смертельной схватке футом и гулем, приподнять камеру и,
поднимаясь всё выше, вы показываете истинный масштаб, всю громадность поля, на которой шёл бой. Или делайте что-то вроде матрицы.
Ускоряйте юнита - сделайте из него берсерка - он станет бегать и наносить молниеносные удары всем, кого встретит из врагов...
Дальше всё зависит от вашей фантазии.


Манипуляция спецэффектов

Чтобы прикрепить спецэффект к юниту, мы используем действие "Спецэффект
- Create Special Effect on unit" - прикрепить спецэффект к юниту,
спецэффект перемещяется наряду с боевой единицей.(см.рис3).
Точки прикрепления спецэфектов:
overhead - над головой
head - на голове
chest - грудь
origin - на земле, возле ног. Обычно сюда цепляют ауру
hand - рука foot - нога
weapon - оружие
Уточнения (например, left hand, right hand и т.д.)
left - левый(ая)
right - правый(ая)
Экспериметируйте ещё и с прозрачностью и изменением цвета юнита - Change unit vertex coloring,
помните, как в РОК Джайна имела привычку вот так вот прозрачнеть? Просто её с периодом в 0.1 сек
делали прозрачнее и прозрачнее - единственно видна была тень её, даже когда была Джайна уже не видна,
но с этим уже ничего не сделаешь.
Я так проделывал в кино интересную штуку - когда я осознал, что прозрачность декораций,
типа арки менять нереально, я просто продублировал эту арку юнитом с соответствующей моделью,
спрятал арку (Play HIDE animation for all doodads in Region), а с юнитом-аркой уже делал всё,
что хотел. Это смотрелось на все 100.

Окончание синиматики

Когда мы заканчиваем синиматику, мы должны в конце поставить триггер
"Спецэффекты - Turn cinematic mode выкл."
Затем советую применить затемнение и установить камеру в нужном для игрока месте.

Это основное для синематики, что должен знать каждый картостроитель.
Старый 13.02.2006, 12:15
MapMan
Corey 8 Taylor
offline
Опыт: 21,554
Активность:
Nimensy жж0ш, и чё мне с ентим делать?=)
Старый 13.02.2006, 12:51
J
expert
offline
Опыт: 48,447
Активность:
Nimensy, MapMan Обьедените статью и Nimensy 250xp, MapMan 750xp
Nimensy подлец=), зачем же та крадеш материалы из других статей:p? а ?, целая половина взята от сюда хе хе. :D
Nimensy хе если бы так все делали статьи так тогда бы... :lamo: , ты бы уж сылку показал а не переписывал бы все. :notgood:
Старый 13.02.2006, 13:08
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Nimensy, гм, а собстно зачем ты сюда включил общую редакцию наших с Мэпмэном и Алексеем статей? Это обязанность Мэпмэна, и она, эта редакция дрлжна находиться в начале, а не здесь... Давай лучше чё-нить свежее, а на тему Алексеевской статьи, дак просто в определённом месте статьи стоило бы дать ссылку и написать пояснение - всяко полнее выйдет.
Старый 13.02.2006, 13:51
Кет

offline
Опыт: 111,109
Активность:
единственно мое любимое замечание - орфография. синематика пишется через Е, от слова cinema.
Старый 13.02.2006, 16:30
N.Sy.Prophet
Йа Байан
offline
Опыт: 13,122
Активность:
Цитата:
Сообщение от Nimensy
Можно мы используем твою статью?

Цитата:
Статья.
Конечно, используйте. Впрочем, когда я завершу работу над новым релизом MdlVis, то напишу более подробную статью по анимации - в частности, как можно заставить "объекты" пятиться, как красиво "поднять" труп и механизм искажения анимаций (с помощью JASS-функции).

Да кстати, примечаний я написал и от себя + аккуратно всунул примечания FellGuard и поправил немного орфографию.

Nimensy добавил:
2 сообщение от Алексея

Nimensy добавил:
Jon, мне если честно пох на енти ХП. Я просто хочу сделать что-то хорошее. А 1000 ХП пусть достанутся FellGuard,MapMan и Алексею.
Старый 13.02.2006, 18:37
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Ага, если достанутся. МэпМэн!? Ты ещё тут? =)
Вот обновление эксклюзива. Добавь и поперчи по вкусу ;)

Чтобы правильно составить кинематику, необходимо написать качественные триггеры, которые будут контролировать как можно больше во время ролика, в окружающей среде, в действиях героев. Также (что редко используется современниками нас с вами), триггеры подготавливают сцену для "съёмок" и приготовляют к непосредственно игре (сбрасывают на игровые умолчания), запускает задания, музыку и сам геймплэй (будь то собирание бегающих овец или отстройка лагеря). Необходим также в ряде случаев, пропуск ролика нажатием Эскейпа, что тоже не всегда удаётся :). Ну и наконец, параллельно, в процессе кинематики могут запускаться не в очередь (RunTrigger Action) триггеры, контролирующие тот или иной аспект на карте, связанный с экшном.
Итак, подробнее:

СПИСОК ТРИГГЕРОВ, НЕОБХОДИМЫЙ ДЛЯ ЛЮБОЙ КИНЕМАТИКИ:

- <Cinematic name> setup. Это триггер-установка, запускается из главного триггера ролика параллельно ему, не в очередь. Здесь проводится подготовка к кинематике по след. параметрам:

- variables
- game settings
(game time, day/night cycle, game speed (locking in cin))
- selection param
- player states/allies/properties.
- unit groups
- units
(очень широкий спектр действий)
--animations ( включая по желанию: vertex coloring, body part facing, blend/animation/turn/movement time/speed, flying height)
--abilityes
--buffs

- destructibles
- environment
(fog, weather effects, water etc)
- floating text (if needed)
- sounds/music.(3d sound для профи ;) )

В общем, заносите сюда всё, что будет во время кинематики не по умолчанию.
Все эти параметры устанавливаются так, как необходимо в режиме киношки. Те параметры и группы с объектами, которые надо будет потом восстановить в умолчание, как-то поменять или удалить, запоминаются переменными. Например, дабы в поле зрения не попала безобразная гурьба вашей армии, она добавляется в группу HiddenUnits, которая потом, после окончательного редактирования (добавления некоторых нейтралов, исключения рудников из неё), здесь же и прячется (HideUnit<Group - ?> Action); выделенные юниты добавляются в другую группу, текущая камера запоминается в соотв. переменную, учитываются все пришедшие на ум параметры. ОСОБЕННО обращайте внимание на отвечающие за игровые/окружение настройки - запоминайте скорость, камеру, ин-гейм время. НЕ ЗАБУДТЕ PAUSE`ить ВСЕХ НЕАКТИВНЫХ ЮНИТОВ, дабы не возникало щекотливых ситуаций. Также неплохо бы запрещать на время киношки спать тем, кому этого не следует делать. (Более подробно смотри скрин Setup)

- <Cinematic name> cleanup. Здесь проводится по аналогии с подготовкой к ролику сброс параметров на нуль, дефолт, то есть на игровой режим . Кстати, если ваша карта являет собой один сплошной ролик, то в этом триггере нужда автоматически отпадает - как и в <cin name> cinematic (смотри далее). В этом триггере производится возврат к объявленным в Сэтапе (здесь и далее: Сэтап - <cin name> setup, Клинап - <cin name> cleanup) значениям для различных вещей - к игровой скорости, к камере, к выделенной группе (Selection) (выбираем бывшую выделенной в момент начала ролика группу - естественно после того, как она станет видима (unhidden))... В общем, ко всему тому, чему в Сэтапе вы давали переменную. Также здесь юниты "продолжаются" после паузы; те, что спрятаны, делаются видимыми, кое-кто убирается из игры, настраивается на умолчание туман, камера, анимация, звук. И здесь и в сэтапе в зависимости от строения карты могут быть какие-то объекты/величины, которые тоже придётся заносить на время воспроизведения в память и прятать, менять. А то и в кэш - всё зависит от юзверя, его чувства юмора и карты, здесь же я описываю общие черты.

- <Cinematic name> scipped. Этот пропускающий триггер по умолчанию выключен, но включается в кинематике во временном промежутке, доступным для пропуска ролика, это время определяется пользователем. Служит для прекращения ролика, делает это следующим образом - по всей <cin name> cinematic Q (смотри далее) расставляется нечто вроде контрольных точек - функция вида Если/то/иначе, но о ней позже. Так вот, когда этот триггер включен и игрок жмёт пропуск (тобишь Esc), триггер выключается, становясь непригодным для дальнейшего использования, хоть ты занажимайся Эскейп, и возвращает логическую, которая при проверке обрывает дальнейшую последовательность действий в основном триггере ролика; тем временем здесь копия финальных действий от затемнения в <cin name> cinematic Q (смотри ниже код финишных действий или скрин номер 5) запускает Клинап, сбрасывает камеру к игровой (на забитую в переменную она вернётся уже в Клинапе), запускает геймплэйные триггеры (типа надоевших уже заданий) и убирает из очереди триггеров основной. Начинается игра. Кстати - если триггеров типа <cin name> cinematic Q больше одного, то убираются они все из очереди. И ещё кстати - если опять же ваш ролик - и есть всё, что произойдёт на карте, то после скиппинга Клинап не запускается, а всё что происходит - обрыв действия, затемнение и высвечивание диалога ПОБЕДА! (VictoryPlayer Action)

- <Сinematic name> (например, "Intro cin") cinematic. Этот триггер, в сущности, реакция на какое-то событие, которое приводит в действие кинематику (Add <cin name> cinematic Q to Trigger Queue Action). Если эта кинематика первая, то надобность в этом триггере отпадает - <cin name> cinematic Q добавляется в очередь в инициализации.

- <Cinematic name> cinematic Q, "Q" означает, что этот триггер добавляется в очередь. Это делается для того, чтобы никаких лишних действий из других триггеров, типа объявления заданий, не наслаивалось в процессе. Вот почему сообщения типа " ОСНОВНОЕ ЗАДАНИЕ ПОЛУЧЕНО:" стоит также добавлять в очередь (AddTrigerToTriggerQueue Action). Здесь происходит непосредственно само действие, манипуляция с камерами, сообщения, здесь мы применяем фильтры, и во время применения финального и стартового, мы запускаем <cin name> setup и <cin name> cleanup (RunTrigger Action), включаем и выключаем cinematic mode. И здесь же мы вставляем функцию вида

If/then/else -
if <cin name> scipped (boolean var) = true
then do skip remaining actions
else do nothing
.

после каждого "Wait x.xx sec" в разумных пределах - в равных временных промежутках от 2-х до 5-и сек. для прерывания кинематики в случае нажатия Esc. Временной промежуток характеризует то, как быстро будет реагировать на нажатие ролик. Не стоит заставлять ждать зрителя слишком долго - он может и решить, что пропуска попросту нет =).
Прим.: НЕ ЗАБУДТЕ в самом конце этого и <cin name> scipped триггеров убрать <cin name> cinematic Q триггер из очереди, иначе остальные добавленные после (например, дисплэй заданий) будут очень долго не вступать в действие. (RemoveThisTrigFromTrigQueue Action).
Вот примерное построение стартовой части этого триггера.
Код:
function Trig_Midgame_cinematic_Q_Actions takes nothing returns nothing
    set udg__Mid_cinematic = true
    // Fade out
    call CinematicModeBJ( true, GetPlayersAll() )
    call CinematicFadeBJ( bj_CINEFADETYPE_FADEOUT, 1.00, "ReplaceableTextures\\CameraMasks\\White_mask.blp", 0, 0, 0, 0 )
    call TriggerSleepAction( 0.80 )
    call ConditionalTriggerExecute( gg_trg_Midgame_setup )
    call CameraSetupApplyForPlayer( true, gg_cam_Mid_01, Player(6), 0 )
    call TriggerSleepAction( 0.20 )
    // Fade in
    call CinematicFadeBJ( bj_CINEFADETYPE_FADEIN, 1.00, "ReplaceableTextures\\CameraMasks\\Black_mask.blp", 0, 0, 0, 0 )
    call TriggerSleepAction( 1.00 )
см. скрин номер 4.

Вот примерное построение финишной части этого триггера.
Код:
if ( Trig_Midgame_cinematic_Q_Func124001() ) then
        return
    else
        call DoNothing(  )
    endif
    call ResetToGameCameraForPlayer( Player(6), 2.00 )
    set udg_Mid_cinematic = false
    call DisableTrigger( gg_trg_Midgame_scipped )
    // zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    // ---------Cinematic ends------------
    // CINEMATIC CAN NO MORE BE SCIPPED
    // zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    // Fade out
    call CinematicFadeBJ( bj_CINEFADETYPE_FADEOUT, 0.50, "ReplaceableTextures\\CameraMasks\\White_mask.blp", 0, 0, 0, 0 )
    call TriggerSleepAction( 0.50 )
    call ConditionalTriggerExecute( gg_trg_Midgame_cleanup )
    // Fade in
    call CinematicModeBJ( false, GetPlayersAll() )
    call ResetToGameCameraForPlayer( Player(6), 0.00 )
    call CameraSetupApplyForPlayer( true, udg_Nightmare_c_nul, Player(6), 0 )
    call CinematicFadeBJ( bj_CINEFADETYPE_FADEIN, 0.50, "ReplaceableTextures\\CameraMasks\\White_mask.blp", 0, 0, 0, 0 )
    call TriggerSleepAction( 0.50 )
    call ConditionalTriggerExecute( gg_trg_I_Main_Quest_Updated )
    call ConditionalTriggerExecute( gg_trg_Midgame_gameplay )
    call QueuedTriggerRemoveBJ( GetTriggeringTrigger() )
endfunction
см. скрин номер 5.

На этом всё. От души надеемся, что эта написанная на ломаном русском статья чем-то поможет вам, удачи и ждём от вас качественных роликов!
Старый 15.02.2006, 09:56

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:18.