Scorpion | Дата: Четверг, 05.04.2012, 22:04 | Сообщение # 1 |
Профессионал
Группа: Главный Администратор - Сайта
Сообщений: 126
Статус: Не в сети
| Разберем самое простое фаталити, Джонни Кейжда Сначала правим 1.cmd и находим там вот это ... Code [Command] ; это секция команды name = "fatal" ; имя команды command = F,F,D,U ; комбинация, как можно догадаться - стандартная :))) time = 35 ; время за которое комбинацию надо набрать, вполне приемлимое вермя ... и после этого еще вот что : Code [State -1,fatal] type = ChangeState ; тип - изменения состояния value = 3000 ; значение - номер состояния triggerall = p2bodydist X < 15 ; триггер общий, расстояние от тела противника до игрока не более 15 точек triggerall = command = "fatal" ; проверка названия команды triggerall = p2stateno = 9010 ; состояние противника должно быть под номером 9010 - это состояния Dizzy trigger1 = statetype = S ; тип нашего состояния - S - стоя на земле trigger1 = ctrl = 1 ; мы можем контролировать движение triggerall = command != "run" ; не выполнять комбинацию при команеде Run - то есть на бегу
Вот то что пишется в файлах Finishers.st, это и есть те самые действия что выполняет во время фаталити наш персонаж.
Вот он исходник из того самого файла:
Code
[Statedef 3000] type = S movetype= A physics = S juggle = 1 anim = 0 Velset = 0, 0 ctrl = 0
[State 430, 31sdaa] type = changeanim trigger1 = Time = 60 value = 660
[State 9130, SetFatal] type = Varset trigger1 = movehit V = 4 value = 1
[State 1200, BoltFat] type = Hitdef trigger1 = AnimElem = 7 trigger1 = Anim = 660 velocity = 8, 0 remvelocity = 0, 0 attr = S, NT animtype = Hard air.animtype = Back air.fall = 1 fall.recover = 0 guardflag = HL pausetime = 0,0 sparkno = 16 sparkxy = -20,-125 p2stateno = 6003;661 guard.sparkno = -1 hitsound = 5,0 ground.type = High kill = (Var(9) = 0) fall.kill = (Var(9) = 0) guard.kill = (Var(9) = 0)
[State 200, 7] type = changestate trigger1 = Anim = 660 trigger1 = AnimTime = 0 value = 0 ctrl = 1 Теперь всё по порядку:
Code [Statedef 3000] ; стэйтдэф, определение общих параметров всего движения. Номер важен (3000). Это то что мы указали в секциях файла 1.cmd type = S ; тип состояния (S - stand, стоя на земле) movetype= A ; тип самого движения (A - attack, атака) physics = S ; физика движения (S - стоя на земле) juggle = 1 ; жонглирование, то есть если это движение может являтся, иил явлается частью атаки состоящей из нескольких мелки (тобишь комбо), для любой атаки желательно установить в 1 anim = 0 ; номер анимации которая связана с этим движением, в данном случае тут не надо сразу ставить ту, что мы запрограммировали, ибо она окажется одна, на всё фаталити точ не всегда допустимо, лучше всего установить нужную анимацию в процессе программирования Velset = 0, 0 ; скорость персонажа во время движения, по оси х и у соответстсвенно ... ctrl = 0 ; возможность управлять движением (это не к чему, зачем же прерывать такое зрелище Собственно у нас получилось обычное движение, с физикой "на земле", стоя на месте. Это великолепно! Продолжим разбор полетов...
Далее идет первая часть действия, команда, если можно так назвать. А вообще дословно переводится как "состояние". Code [State 430, name] ; Определения стейта, собствено номер не очень важен, мне на моей практике не встречалось его использовать, как собственон и имя, то что идет после запятой type = changeanim ; тип действия - ChangeAnim - сменить анимацию. По константам этой опции существует целый раздел в официальной документации. (все быстренько RTMFить ... <img src="http://src.ucoz.net/sm/1/wink.gif" border="0" align="absmiddle" alt="wink"> ) trigger1 = Time = 60 ; первый триггер Time(по ним тоже дока есть). означает, что через 60 милисекунд произойдет требуемое действие value = 660 ; значение, собственно тут это значение - номер анимации на которую следует переклчюится (660) Пока что всё просто ... Можем в FF или MCM посмотреть эту анимацию ... да, так и есть. Это то самое классическое фаталити, что потом в Ультимэйте Эрмаку отдали :))) (Обратите внимание на красные и синие Cloosion Boxes, пригодится)
Далее идет очень спецефичная именно для MKP опция, установка определенной переменной. Code [State 9130, SetFatal] type = Varset ;собственно тип действия - установить значение переменной trigger1 = movehit ;тирггер, логического типа (да/нет), получает значение 1 если первый игрок при атаке таки попал во второго <img src="http://src.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile"> V = 4 ; номер переменной в которую пишется значение value = 1 ; собственно значение Code Это специфично для MKP потому что таким образом мы обозначаем какого типа добивание производится Эксперементально я накопал что эту переменную надо установить в 1 во время фаталити, 5 при бруталити. При френдшипе почуму-то ничего устанавливать не надо о_О (до конца пока не понял).
Далее основное действие: Code [State 1200, BoltFat] type = Hitdef ; тип hitdef - отвечает за нанесение удара trigger1 = AnimElem = 7 ; триггер, указывает на номер кадра (элемента) в анимации, при котором состоится действие trigger1 = Anim = 660 ; триггер, соответетсенно проверяет номер анимции (бдительные испанцы <img src="http://src.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile"> ) attr = S, NT ; атрибуты атаки --- S - так же как в Statedef тип атаки, стоя на земеле, NT - тоже тип атаки, дополнительные параметры N - normal (обычная атака), T - throw (бросок, хотя тут бы A надо поставить, обычную атаку) animtype = Hard ; тип воздействия удара на противника - hard - догадайтесь сами (в документации много чего интересного) air.animtype = Back ; тип воздействия если противник окажется в воздухе .... непонял нафига оно тут, но собвстенно back - притивника заносит за персонажа (как при броске) air.fall = 1 ; при этом противник после броска, переходит в состояние Fall - педение fall.recover = 0 ; не позволяет противнику вернутся из состояния fall до окончания его действия (бкувально, перекувыркнуться и встать на ноги) guardflag = HL ; указывает насколько противник может защитится от атаки. HL (экв. M) - средняя степень защиты (очевидно что тут это уже не надо) pausetime = 0,0 ; время задержки после удара, как в Страит-файтерх всяких, первое число - время для нашего игрока, второе - противника sparkno = 16 ; номер "искры" при ударе, то есть эффект который заложен в основах, в файлах FIGHTFX.AIR и FIGHTFX.SFF. 16 - брызги крови , кому интересно смотрим через MCM или FF. sparkxy = -20,-125 ; координаты места, где будет появлятся "искра" p2stateno = 6003 ; номер состояния в которое переходит пртивник после удара (6003 - имерть от отскания головы, заранее запрограммировано для каждого) guard.sparkno = -1 ; номер "искры" у противника ... не требуется hitsound = 5,0 ; номер группы, звука в SND файле, при ударе ground.type = High ; тип "падения" противника ... kill = (Var(9) = 0) ; тут я не совсем разобрался, но это надо fall.kill = (Var(9) = 0) guard.kill = (Var(9) = 0) И в довершение : Code [State 200, 7] type = changestate ; сменить состояние trigger1 = Anim = 660 ; если анимация 660 trigger1 = AnimTime = 0 ; и время её вышло, то есть цикл завершился ... value = 0 ; то переходим в сотстояние 0 - нормальная стойка ctrl = 1 ; мы можем контроллировать движния .... Вот и всё ... А есть добивания и положней, так что дерзаем! Автор: armand Ссылка на оригинал: http://mkp.ucoz.ru/forum/13-14-1
|
|
| |
Godzilla | Дата: Вторник, 10.04.2012, 09:24 | Сообщение # 2 |
Новенький
Группа: Заслуженный
Сообщений: 1
Статус: Не в сети
| Scorpion, Супер всё получилось... СПАСИБО..
|
|
| |
Scorpion | Дата: Вторник, 10.04.2012, 21:34 | Сообщение # 3 |
Профессионал
Группа: Главный Администратор - Сайта
Сообщений: 126
Статус: Не в сети
| Gadzilla, незачто!
|
|
| |