Дата: Вторник, 12.03.2013, 20:19 | Сообщение # 1
- Каге
- 939Сообщений:
- 2 +Награды:
-
Гайд о том как создать Защитную Стену
данный тутор расчитан на пользователя хорошо освоившего Хелпер и свойства контроллеров мугена:
Для данной техники нужно создать 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)
|
Дата: Суббота, 20.04.2013, 09:43 | Сообщение # 3
- Член Совета Ниндзя
- 431Сообщений:
- 3 +Награды:
-
|
Дата: Понедельник, 11.11.2013, 11:59 | Сообщение # 4
- Студент академии
- 19Сообщений:
- 0 +Награды:
-
MidNight, а можно пример?(скриншот)
|