Аномалии в стиле С.Т.А.Л.К.Е.Р-а

Простите, я не удержался. Хотел про освещение, а начал баловаться. Давайте вместе, что ли…)

Rip and tear, товарищи!

И вот это пожелание тут будет происходить с игроком и монстрами (в большинстве случаев). Земля будет рвать и метать. А потом уже и про свет. Возможно, научусь гифки делать, но лучше, как я всегда советую, просто качнуть карту по ссылке и посмотреть «на живую». А вот она: https://yadi.sk/d/k0xrvPWFUCkEFg

  1. Антиграв.

Что делает: при входе в зону ловушки отрывает от земли и заставляет висеть в пространстве, двигаясь по инерции (хотя, вроде, есть минимальная управляемость). Если вы разместите на разной высоте объекты в этом секторе, будет весьма атмосферно. А если их ещё можно двигать, как бочку, то…)))

В самом секторе, как на картинке показано стрелкой, гравитацию ставим на ноль, а на линих вешаем спешл 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), дабы распознавать аномалии, стреляя в них ракетой, например, или гранатой, если моды (или болтом, если сделаете)? Ещё как додумался, и это выглядит прикольнейше, но есть одна проблема. Точнее, две. Электричке надо ставить на периметр блок снарядов, на внутренние линии вообще не ставить активацию снарядом. Иначе она будет бесконечно стрелять и повесит систему. Остальные штуки, типа мясорубок, ведут себя круто, вот только ПУЛЯ из пистолета или дробовика игрой воспринимается, как часть самого игрока, и выстрел по такой ловушке заставит её сработать на вас.

avataravatar

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!