Простите, я не удержался. Хотел про освещение, а начал баловаться. Давайте вместе, что ли…)
Rip and tear, товарищи!
И вот это пожелание тут будет происходить с игроком и монстрами (в большинстве случаев). Земля будет рвать и метать. А потом уже и про свет. Возможно, научусь гифки делать, но лучше, как я всегда советую, просто качнуть карту по ссылке и посмотреть «на живую». А вот она: https://yadi.sk/d/k0xrvPWFUCkEFg
- Антиграв.
Что делает: при входе в зону ловушки отрывает от земли и заставляет висеть в пространстве, двигаясь по инерции (хотя, вроде, есть минимальная управляемость). Если вы разместите на разной высоте объекты в этом секторе, будет весьма атмосферно. А если их ещё можно двигать, как бочку, то…)))
В самом секторе, как на картинке показано стрелкой, гравитацию ставим на ноль, а на линих вешаем спешл Thing Thrust Z, рекомендуемые параметры и галочки — всё сфотографировано. Монстр, попавший туда, будет беспомощно барахтаться в воздухе. Если же не повесить на линию спешл, попаданец просто пройдёт по земле. Можно гравитацию вообще в минус сделать. Поиграйтесь с этим.
2. Чёрная дыра.
Просто читайте, что написано в секторах. Эти спешелы работают без активации. Конкретно этот — ветер — двигает игрока в определённом направлении. Направлений 4 (север, запад и т.д.), по три уровня мощности. Можно бежать против ветра, но, естественно, очень медленно. Таким образом данная ловушка тянет игрока в центр. Конское значение гравитации не позволит подпрыгнуть, а настройка урона в секторе сделает аномалию смертельной. Я также добавил линиям вокруг ловушки спешл 9 «Горизонт», чтобы было странное искажение реальности, но это не обязательно. Просто при попадании в такую ловушку можно сделать спавн монстров вокруг, и игрок даже не сообразит, откуда в него будут стрелять. Есть один недостаток: на монстров ловушка эффекта не оказывает никакого. А вот все последующие…
3. Воронка.
Тут обратите внимание на спешелы секторов. Scroll — это такой спешл, который двигает текстуру в указанном направлении, а вместе с ней и игрока. Но, увы, не монстра. Зато имеем эффект скатывания песка в воронку. У спешла «Скролл» есть 8 направлений, а не 4, поэтому столько секторов. Каждая внешняя линия при прохождении через неё толкает к центру. Это спешл Thrust Thing. Тэг указывать не надо, ибо действие совершится с активатором, то есть тем, кто прошёл линию. Направление толчка — thrust angle — куда флажок повернули, туда предмет и полетит. Понимаем принцип, настраиваем каждую линию. Теперь любой монстр, как и игрок, перейдя линию, угодит в центр. И умрёт, поскольку на внутренних линиях у нас Damage Thing. Значения ставьте по усмотрению. К примеру, сильный траст может выкинуть попаданца срезу за пределы аномалии, а слабый лишь пощекочет.
4. Батут смерти и Торнадо
Итак, две аномалии класса «мясорубка», ради них всё и писалось. Внешние круги — это линии с thrust, как и в предыдущей ловушке. Внутренние — спешл 80 Script Execute. Сделаем 2 скрипта.
Для первой:
script 1 (void) { for (int i=5; i>=0; i--) { ThrustThingZ(0, 50, 0, 0); SetActorAngle (0, GetActorAngle (0) - 0.05); Delay(10); ThrustThingZ(0, 150, 1, 0); Delay(10); Thing_Damage(0, 20, 0); SetActorAngle (0, GetActorAngle (0) - 0.05); } }
«for» — это оператор цикла, который ограничен заданным количеством исполнений. Мы создали переменную i, присвоили ей значение 5, задали условие «больше или равно нулю» и поставили счётчик убывания «минус-минус». Теперь всё, что после фигурных скобок выполнится 6 раз (больше, либо РАВНО нулю, так что ноль — тоже 1 раз). Кстати, то же самое произойдёт при таком синтаксисе:
for (int i=0; i<6; i++)
Далее:
ThrustThingZ(0, 50, 0, 0);
В скобочках: (тид актора — ставим 0, на какую высоту взлетит — ставим 50, верх или низ — ноль — это верх, set или add — пусть будет 0 — set). Важно, что set даёт движение с нуля такой силы, какой мы установили, а add — это добавка, она добавляет энергию к уже имеющейся. Поскольку монстр итак на земле стоял до попадания в ловушку, нужен именно set.
ThrustThingZ(0, 150, 1, 0);
Всё то же, но вниз и с большей силой/скоростью.
Thing_Damage(0, 20, 0);
Тут элементарно: тид/тэг подопытного, уровень урона и ненужный нам тип урона. То есть, когда индивид помрёт в аномалии, появится надпись, от какой энергии он умер. Гуглите Damage types на zdoom.org, там таблица. Тип вписывается либо словом, либо числом.
SetActorAngle (0, GetActorAngle (0) - 0.05);
Эта штука интереснее. Позволяет повернуть супостата, либо самого себя, на некоторое кол-во градусов. Первое в скобочках — это тид подопытного, второе — в каком направлении, точнее, на какой угол он должен быть повёрнут (отрицательное значение меняет направление), но в данном случае мы функцией GetActorAngle берём значение поворота здесь и сейчас (в скобочках — тид подопытного) и вычитаем из него чуток (число обязательно с точкой) — крутить попаданца будет по часовой стрелке.
Что произойдёт: попаданца в ловушку подбросит вверх и ударит о землю раз 6, сильно искалечив. Или с летальным исходом. И слегка поворачивая, но это не так заметно, как на следующей ловушке:
script 2 (void) { for (int i=100; i>0; i--) { ThrustThingZ(0, 5, 0, 0); Thing_Damage(0, 1, 0); SetActorAngle (0, GetActorAngle (0) - 0.05); } }
Всё то же самое, и, как вы могли догадаться, эта ловушка смерчем закручивает попаданца, отнимая около 30 ХП ежесекундно. Отняв сотню, отпустит до следующего касания линий со скриптом. А из-за толкателей на внешних кругах попаданца может колбасить направо и налево, что вполне похоже на поведение аномалий в Сталкере.
5. Электрички (или другое определение дайте, не суть)
На правой внешний круг — thrust в центр, как всегда, а внутренние линии содержат спешл Forcefield. При касании такой линии попаданцу наносится урон и отбрасывает слегка от линии. Силовое поле же. А если поставить на эти силовые поля on projectile impact/crosses, то она будет футболить в вас снаряды.
На левой ловушке каждая линия при проходе сквозь неё спавнит в активатора-попаданца снаряд. Мап-спот, из которого летит указанный снаряд, это фонтан синих частиц с тидом 10.
Почему Spawn Projectile Intercept? Можете вместо этого использовать Aimed, тогда снаряд будет за вами гоняться. Данный же экшен «предугадывает», где будет попаданец с учётом его скорости, потому стреляет именно туды. Но если ты ловкий и проворный, можешь и спастись.
6. Телепорт
Что это: при заходе за периметр ловушка телепортирует вас к одной из точек на карте с заданными тидами. Я использовал экшен Thing Move, так как ему обычно пофиг, является ли конечная точка актором-телепортом, или же это вообще монстр с тэгом. Для того, чтобы из нескольких точек с разным тэгом телепорт выбирал случайную, напишем скрипт, который и повесим на каждую линию периметра сектора:
script 3 (void) {
Thing_Move(0, Random (101, 110), 0);
}
Скрипт только затем нужен, чтобы можно было рандомить. Синтаксис: тэг подопытного, тэг конечной точки (куда перемещаем), убрать ли спецэффект телепортации (0 — оставить а 1 — убрать).
Как видите, вместо самого тэга мы написали Random («минимальное число», «максимальное число») — таким образом будет выбран объект с тидом между минимальным и максимальным включительно. То есть, если поставите от нуля до 999, вас будет перемещать куда угодно, даже в пасть монстру. В теории.
Развлекайтесь, пожалуйста!)))
Возможно, вы спросите, почему я не додумался повесить на линии активацию снарядом (on projectile crosses), дабы распознавать аномалии, стреляя в них ракетой, например, или гранатой, если моды (или болтом, если сделаете)? Ещё как додумался, и это выглядит прикольнейше, но есть одна проблема. Точнее, две. Электричке надо ставить на периметр блок снарядов, на внутренние линии вообще не ставить активацию снарядом. Иначе она будет бесконечно стрелять и повесит систему. Остальные штуки, типа мясорубок, ведут себя круто, вот только ПУЛЯ из пистолета или дробовика игрой воспринимается, как часть самого игрока, и выстрел по такой ловушке заставит её сработать на вас.