Пятница, 18.01.19Приветствую Вас, Гость! | RSS
Главная » Статьи » Уроки по созданию персонажей MUGEN

Урок о том как создать Защитную Стену от MidNight(Touhou_Fuhai)
Урок о том как создать Защитную Стену.

Данный урок рассчитан на пользователя хорошо освоившего Хелпер и свойства контроллеров мугена:

Для данной техники нужно создать 2 хелпера... Назовем их Хелпер"илюзия" и Хелпер "барьер". Илюзия будет составлять видимую часть техники, Барьер же исполнять нужные функции присущее технике данного типа.
для начала, определимся каким критериям должна соответствовать данная техника:
1)непропускать противника сквозь себя
2)находясь за стеной игрок должен быть неуязвим для атак, их должна принимать на себя техника.
3)её должно быть возможно сломать, иначе будет читерно, и теряется элемент реальности
________________________________________
итак начнем с хелпера "илюзии". для удобства его призывают в стейте игрока, он ничем не отличается от обычного хелпера. вот пример:
________________________________________
[State 0, Helper] - данный хелпер являет собой образ стены, её изображения, поэтому ставить на его спрайты коробочки в анимациях не надо
type = Helper
trigger1 = * условие появы хелпера
trigger1 = !numhelper(1000)>0 - данная формулировка предотвращает призыв стены больше 1 раза
helpertype = normal
name = "Defence_Wall"
ID = 1000
stateno = 1000
pos = *,* - позиция где появиться стена по х,у
postype = p1
facing = 1
keyctrl = 0
ownpal = 1
supermove = 9999
pausemove = 9999

ну эт понятно, обычный хелпер, терь посложней

итак, перейдем к стейтам стены:
[StateDef 1000]
type = S
movetype= A
physics = S
juggle = 1
velset = 0,0
ctrl = 0
anim = * анимация стены.
poweradd = 0
sprpriority = 10

[State 0, Helper] - а вот уже этот хелпер как раз будет исполнять нужные нам функции. в его анимации спрайтов быть не должно, ток коробочка по контуру спрайтовхелпера илюзии
type = Helper
trigger1 = * условие призыва хелпера. Желательно чтоб призывался в тот момент когда закончено построение стены
trigger1 =!numhelper(2000)
helpertype = Normal
name = "Shield"
ID = 2000
stateno = 2000
pos = 0,0
postype = p1
facing = 1
keyctrl = 0
ownpal = 1
supermove
pausemove
size.ground.back = 20 - задний размер хелпера
size.ground.front = 20 - фронтальный размер хелпера
size.height = 100 - высота хелпера

3 последнии строки обязательно должны быть указаны иначе не будет работать принцып "непроницаемости". их значений подстраивают под спрайты техники. Проверить правильно ли заданы значения можно нажав во время игры комбинацию кнопок Ctrl+C и глянуть не выходят ли рамки хелпера за спрайт

[State 0, AssertSpecial] - убирает тень
type = AssertSpecial
trigger1 = 1
flag = noshadow

[State 0, LifeSet] - задает Жизнь стены
type = LifeSet
trigger1 = 1 && NumHelper(2000) = 1 - означает что код будет работать когда количество хелперов с ID 2000 (барьерный) будет равно 1 и постоянно обновляться.
value = Helper(2000),Life - означает что Илюзионный Хелпер перенимает себе значения жизни Барьерного хелпера

[State 0, ChangeState] - переход в стейт разрушения
type = ChangeState
trigger1 = life <= 1 - активируется когда жизнь упадет ниже 1
value = 1001 - номер стейта разрушения Хелпера Илюзии.
ctrl = 1

[Statedef 1001]
type = S
movetype = I
physics = S
juggle = 4
poweradd = 0
ctrl = 0
velset = 0,0
anim=* - номер анимации разрушения техники

в данный стейт можно добавлять разнообразные спецэффекты типа экплодов и других хелперов что б сделать окончание техники более эффектным

[State 0, DestroySelf] - уничтожает хелпер
type = DestroySelf
trigger1 = * - условие исчезновения хелпера

Примичание: Сцена разрушения техники может и состоять из нескольких стейтов, через использование ChangeState, но в самом конце обязательно должен стоять DestroySelf

________________________________________
с хелпером Илюзии разобрались.
Теперь рассмотрим Барьерный:
________________________________________
[Statedef 2000]
type = S
movetype = I
physics = S
juggle = 4
poweradd = 0
ctrl = 0
velset = 0,0
anim= *

[State 0, AssertSpecial] - убирает тень
type = AssertSpecial
trigger1 = 1
flag = noshadow

[State 0, LifeSet] - задает жизнь барьеру
type = LifeSet
trigger1 = !Time&&Life>* - условие активации хелпера, означает что жизнь задаеться сразу после создания и если прежднее значение жизни меньше указанного значения
value = * - указываем величину жизни хелпера. Должно совпадать со значением указанным строкой выше.

[State 0, PosSET] - фиксирует хелпер
type = PosSET
trigger1 = 1 - постоянно работает
x = Helper(1000), Pos X - означает что Барьерный фиксирован к Илюзионному

[State 0, PlayerPush] - код не дающий пройти насквозь
type = PlayerPush
trigger1 = 1 - постоянно обновляется
value = 1 - если 1 - пройти насквозь нельзя, если 0 будет проницаемым.
IgnoreHitPause=1 - игнорировать паузы от ударов, 1 - активно, 0 - неактивно

[State 0, LifeAdd] - код отнимающий жизнь у хелпера при ударах
type = LifeAdd
trigger1 = !Time
value =-GetHitVar(damage) - данный контроллер будет фиксировать урон нанесенный Барьеру и отнимать его у заданого количества жизни

[State 0, HitOverride] - переназначает свойства удара противника, и возвращает барьер обратно в свой стейт. Таким образом после ударов он не теряет свойств и не реагирует на параматры ХитДефа противника.
type = HitOverride
trigger1 = 1
attr = SCA,NA,SA,HA,NP,SP,HP,NT,ST,HT
slot = 0
stateno = stateno
time = 0
forceair = 0

[State 0, ChangeState] - переход в стейт разрушения
type = ChangeState
trigger1 = life <= 1 - активируется когда жизнь упадет ниже 1
value = 2001 - номер стейта разрушения Хелпера Барьра.
ctrl = 1

[Statedef 2001]
type = S
movetype = I
physics = S
juggle = 4
poweradd = 0
ctrl = 0
velset = 0,0
anim=9999 - стандартный, "пустой" номер анимации, без спрайтов и коробочек.

так как в этом хелпере первоначально не было спрайтов, особо тут делать нечего, просто моментальное уничтожение

[State 0, DestroySelf] - уничтожает хелпер
type = DestroySelf
trigger1 = time=1 - условие уничтожения. Желательно через 1 тик что б хелпер илюзии успел среагировать на жизнь барьерного
________________________________________

что ж с самой техникой разобрались как бы. Но есть ещё одна функция которую мы не задали - защита от атак
для того что б находясь за Стеной быть неуязвимым для атак, используем [statedef -2] в него запишем вот такое:

[State 0, NotHitBy]
type = NotHitBy
trigger1 = helper(1000),p2dist x > 0
trigger1 = helper(1000),ParentDist x < 0
trigger1 = helper(1000),stateno != 1001
trigger1 = helper(1000),abs (p2dist Y)<100
trigger1 = helper(1000),facing = 1
value = SCA,NA,SA,SP,ST,
value2 = S,NA
time = 1

[State 0, NotHitBy]
type = NotHitBy
trigger1 = helper(1000),p2dist x < 0
trigger1 = helper(1000),ParentDist x > 0
trigger1 = helper(1000),stateno != 1001
trigger1 = helper(1000),abs (p2dist Y)<100
trigger1 = helper(1000),facing = 1
value = SCA,NA,SA,SP,ST,
value2 = S,NA
time = 1

[State 0, NotHitBy]
type = NotHitBy
trigger1 = helper(1000),p2dist x > 0
trigger1 = helper(1000),ParentDist x < 0
trigger1 = helper(1000),stateno != 1001
trigger1 = helper(1000),abs (p2dist Y)<100
trigger1 = helper(1000),facing = -1
value = SCA,NA,SA,SP,ST,
value2 = S,NA
time = 1

[State 0, NotHitBy]
type = NotHitBy
trigger1 = helper(1000),p2dist x < 0
trigger1 = helper(1000),ParentDist x > 0
trigger1 = helper(1000),stateno != 1001 - номер стейта разрушения
trigger1 = helper(1000),abs (p2dist Y)<100 - значение высоты хелпера
trigger1 = helper(1000),facing = -1
value = SCA,NA,SA,SP,ST,
value2 = S,NA
time = 1

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

ЕСЛИ игрок призвавшый технику находиться ЗА ней и в тоже время противник находится с другой её стороны, но не выше уровня стены (типа в воздухе, прижок и все такое) и сама техника не находиться в стейте разрушения, ТО игрок будет неуязвимым.
ЕСЛИ же нарушиться ХОТЬ ОДНО из условий (игрок вышел из за стены; противник перепыгнул стену; противник взлетел выше стены; разрушыл стену; (сори за тавтологию)) игрок будет уязвим

Ну вот... как то так выглядит полноценная техника "Защитная Стена"

Автор: MidNight(Touhou_Fuhai)
Категория: Уроки по созданию персонажей MUGEN | Добавил: Hezerwin (11.05.15)
Просмотров: 842 | Теги: (Touhou_Fuhai), урок, Защитную, создать, midnight, стену | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: