Исследование способности Камня душ

Любителям различных извращений, багов, фич и костылей посвящается...

Введение

За время существования модмейкинга Warcraft 3 написано много статей, в которых можно было найти много интересных и полезных вещей. Сейчас, наверное, уже ни для кого не секрет, что способность ‘Arav’ добавляет возможность для боевой единицы изменять высоту полета триггерно, что в свое время стало неким прорывом в создании триггерных заклинаний.
Всем, наверняка, хотелось бы открыть для себя что-то новое, не известное ранее. В этом и я не являюсь исключением, поэтому посвящаю свою первую статью исследованиям малоизвестной способности 'AIso' предмета Камень душ ('gsou') из кампании орков в ROC’е. Возможно, после прочтения данной статьи люди уделят ей больше внимания или же вдруг кто придумает интересную механику, построенную на специфике способности.

С чего все начиналось

При создании триггерных заклинаний было желание учесть множество моментов, которые реально могут произойти на карте. Для этого понадобился отлов юнитов, которые с помощью различных способностей погружались куда-либо. Например, погрузка на дирижабль, корабль, рудник и даже проглатывание юнита имеют множество общего, так как вызов функции IsUnitLoaded по отношению к жертве погрузки/проглатывания возвращала истину, если она в этот момент находится на борту или успешно переваривается.
Если продолжить список, которые вызывают такого рода «погрузку» боевой единицы, то во время перебора можно натолкнуться на способность Предмет: похищение душ.
В классическом варианте целью применения был вражеский герой: все мы помним сюжет, когда Траллу был выдан Камень духов, который нужно использовать на Громе Задире, чтобы отнести его таким образом в лагерь Джайны для снятия влияния крови Маннороха, но если внести некоторые коррективы, то данная способность может занять достойное место в арсенале создателей триггерных заклинаний и необычных, ранее не виданных костылей для своих проектов :), поэтому перейдем к исследованиям.

Исследования

Для более удобного тестирования радиус действия способности был выставлен на максимальный, а количество зарядов у предмета неограниченный. Карта с тестами будет прикреплена под статьей. Сила атаки героев велика для того, чтобы проще раскрывать оболочки, навешенные на юнитов. Что это такое - далее в статье.

Тест 1: цели применения способности

Они могут быть самыми различными, но с некоторыми ограничениями в виде юнитов, которые невосприимчивы к заклинаниям или являющиеся вардами. Любой другой неугодный герою юнит спокойно помещается в сферу (кстати о неугодных юнитах: если дать ИИ этот предмет, то он сможет его использовать против враждебных ему юнитов). В понятие любой другой входят также здания, что весьма неожиданно. После поглощения «души здания» ранее занимаемое им место становится свободным и пригодным для нового строительства. После такого впитывания владелец цели, на которую было применено заклинание, может видеть все что и маг.
Стоит отметить тот факт, что герой может применять ее на себя, тем самым исчезая, не теряя при этом триггерной привязки, но при попытке на него сослаться произойдет зависание игры. Также это случается, если нажать на его иконку или просто выйти из игры. Видимо, игра перед этим перебирает всех героев игрока, которых нужно отобразить в статистике, из-за чего и происходит такой глюк.
Интересным в данной способности является еще и то, что бафф, на который она ссылается косвенно (его равкод в параметрах способности не указан) может стакаться по эффекту. С каждой новой поглощенной душой этих эффектов становится больше. Чтобы задать свои параметры нужно поискать в баффах заклинание Похищение души (под равкодом ‘BIsv’). К сожалению, он уникален, и даже если создать копию способности Похищение душ и явно указать свой бафф, то ничего не произойдет, но сама способность будет работать. Сам эффект способности для цели настраиваемый.

Тест 2: поиск практического применения

Оно может быть весьма широким и зависит от человеческой фантазии.
Первое, что приходит в голову, то это сделать матрешку с помощью этой способности. Она с этим прекрасно справляется. Параметры юнитов, души которых поглощаются, сохраняются даже со вложениями в виде душ других юнитов, причем данная цепочка может быть весьма значительной и не требует от игры много памяти. Распространяется это даже на регенерацию и кулдауны способностей, что логично и удобно. Дает хорошую механику для создания боссов или героических сущностей, которые будут препятствовать убийству основного юнита.
Дополнительным удобством является то, что игра сама выделит оболочку боевой единицы, когда вы будете обращаться к основной. Вы можете убедиться в этом, нажимая на карте-примере F1.
Задумка с матрешкой легко реализуется триггерно. Главное в этом деле не запутаться с порядком применения. Основной юнит, на которого одеваются оболочки в виде других юнитов, должен быть самой первой целью применяемой способности.
В коде карты будет приведена данная функция, которая легко добавляет оболочку для боевой единицы. Желательно делать эти манипуляции на основе нестандартной способности предмета, чтобы сохранить возможность настройки эффектов для других целей (не думаю, что нужны эффекты, которые бы прикреплялись к оболочкам юнита, но это дело вкуса). Код на стандартном Jass, чтобы все было проще для понимания (его можно доредактировать под свои цели, так как это больше черновой, демонстрационный вариант). Функция возвращает боевую единицу, которая станет оболочкой. Сделав рекурсию, вы сможете на эту единицу навесить еще одну сверху и так далее. Для очень сложных реализаций лучше использовать циклы.
На карте-примере вводим нужное количество раз “-add”, тем самым наращивая горцев на невинном Чародее Крови. На выходе мы получаем «матрешку». Если вы создали лишних горцев, то можете их посрезать атаками. Касательно реализации стоит отметить то, что в варе существует такая особенность, что нельзя отследить координаты юнита на карте, если он погружен куда-либо. Будут возвращены координаты его последнего местонахождения до момента погрузки. Костыль или фича – тут уже решать вам (иногда полезно знать, где был юнит, как в данном примере).
Если вы желаете сделать создание оболочек более красивым – переместите нового юнита на место старого-основного (команда -set на карте). Для большей зрелищности добавьте эффектов, если это босс на вашей карте. В них могут входить как обычные взрывы, так и демонстративная смерть каждого его облика – выбор за вами. Также это неплохая идея для триггерного морфа, так как можно создать реально рабочий механизм перехода от одной формы юнита к другой.
Также она способна переместить целый лагерь. К примеру, создать некий «дирижабль», который бы применил ее к каждому зданию или юниту, после чего переместился бы на удобную территорию, уничтожился, раскидывая вокруг себя строения и юнитов.
Если боевые единицы и здания будут раскиданы на непригодной территории по проходимости, то они будут уничтожены игрой, что также логично.

Тест 3: поиск максимальной вместительности

Ее можно найти триггерно. Для большей точности уменьшим физический размер горца до 0 и сделаем его летающим, чтобы не было погрешностей ввиду того, что они толкаются при создании и касте. Во время подсчета можем наблюдать за дикими именами последующих горцев. У меня при тесте 3001 итераций горец имел имя Тордис Большая Секира 231 (в сторону пошлый юмор - я знаю ваши мысли).
Тем временем поиск максимального количества близится к 8193 горцу. Пока последний лимит не найден. Удивляет такая огромная вместительность в варе (тестировалось на версии 1.29.2).
16 тысяч горцев – вложенных! И это далеко не предел, но игра уже успела занять должные 650 мб ОЗУ и начала подлагивать, но суть способности от этого не прекращает работать. Невообразимо велики размеры памяти, занимаемые этими тысячами бородатых мужичков 1 уровня без изученных навыков. По прохождению некоторого времени игра, превозмогая беспощадные итерации, снова выдает 60 фпс. Поразительно. По результатам данного исследования на 1.27.1 можно прийти к выводу, что способность имеет в своем распоряжении неограниченную для использования память (в пределах вара, конечно) и не имеет ничего подобного с предельными размерами массива.

Тест 4: кэш и "матрешки"

Рассмотрим их взаимодействие. Может, к лучшему, может нет, но иерархия юнитов при этом не сохраняется, но если бы она сохранялась, то одна такая запись была бы невероятно огромна. Убедиться в этом также можно в карте-примере.

Тест 5: прячем трупы

Да, с этой способностью такое возможно. В карте-примере присутствует данный триггер, который убивает самого первого юнита, который является основным в данном случае. Если он будет убит один (и никто более после него), то выйдет оповещение о гибели, что очевидно, но только после смерти носильщика дух юнита сможет покинуть тело, в котором его хранили. Больше реализма в варе! :) Говоря об освободившейся душе – она так и будет висеть в небе неприкаянной до тех пор, пока игрок не смилостивится воскресить героя.
Также существует еще один интересный момент. Если впитать юнита в героя, после чего его убить там внутри, то его труп при «вскрытии» не обнаружится. По непонятным причинам игра отменяет всякое «бальзамирование» юнитов, запрещая им нормальное разложение, которое они заслуживают после смерти.

Тест 6: другие взаимодействия и особенности

Теперь рассмотрим другие взаимодействия на примере других способностей. Если юнит, который будет поглощен с помощью данной способности будет иметь при себе возможность воскреснуть (например, Крест Перерождения), то она не сработает. При воскрешении ее в алтаре на карте примере происходит блокировка управления юнитом. Контроль возобновится только после гибели всех тех оболочек, которые находятся поверх юнита. Что примечательно – это единственный метод отделить поглощенную душу от навешанных на нее сверху «сущностей».
Необходимо помнить о триггерном влиянии на юнита под оболочками. К нему все также можно обращаться (например, добавлять предметы во вложенных юнитов, а это уже может служить необычным способом их хранения; учитывая, что вложений могут быть тысячи, а предметов). Используя такой способ хранения не забываем о погрузке юнита, которая не обновляет координаты вложенных юнитов в соответствии с оболочками, поэтому если предмет требуется выбросить – его нужно вдобавок пододвинуть в нужное место.
Поглощение Души способно влиять на улучшения зданий и исследования в них проводимых. Если применить его на строящийся Замок или кузницу, улучшающую, к примеру, мечи для юнитов ближнего боя, то проводимый процесс будет остановлен до тех пор, пока здание не высвободится. Строительство боевых единиц в зданиях приостанавливается таким же образом. Если рассмотреть влияние на строительство, то у альянса ничего примечательного не происходит. Оно прерывается, а после смерти юнита-носителя здание перемещается в другую точку. Иначе дела обстоят со строениями нежити, которые могут строиться прямо внутри юнита. Распространение порчи не совсем корректное ввиду того, что погруженный в камень юнит не изменяет своего местоположения. Аналогично для ночных эльфов и орков.
Не сразу был замечен факт того, что иконка бафа способности Поглощения души меняется в зависимости от срабатывания других бафов на карте. Описание и название при этом остается прежним.
Никогда не задумывались над тем, чтобы рабочие ни с того, ни с сего брали в руки оружие не из ратуши, а в определенной точке и шли отбиваться от супостатов? Теперь такое возможно. Трюк из рубрики: слышу, где звон, но не знаю, где он. Достаточно заставить ратушу «позвонить» рабочим, после чего запаковать ее в камень. Рабочие сбегутся в пустую точку и на удивление откуда-то достанут оружие. Весьма приятная фича.
Забавная вещь происходит с ястребами. Если накинуть огненное лассо на юнита, после чего его скрыть в сферу, то лассо останется висеть в воздухе прикрепленным к точке, нанося урон юниту, который находится уже внутри другого. Как уже ранее рассматривалось, труп его обнаружить не удастся, если он в следствие лассо умрет.
Способность является отличным дебаффом. Она снимает всяческое влияние на юнитов, такие как замедление, невидимость и прочие, обрывает ченелинги, но не задевает морфы. Также стоит учитывать, что способности наподобие «Жара Преисподней» будут работать, но никого не обжигать, создавая юниту-носителю внутридушевную изжогу :)

Эпилог

На этом я заканчиваю свой экскурс в суть данной способности. Возможно, напишу что-нибудь еще в этом роде, так как люблю глубокие исследования непримечательных вещей.
Спасибо за то, что прочитали до конца. Желаю вам хорошей фантазии. Может, именно у вас получится придумать уникальный концепт для этой способности, который вы реализуете в своем проекте.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
29
6 лет назад
2
Вроде 1 скилл дума на ней основан, если быть точным. Хотя, может быть и другое использовали. И кстати, вроде бы мне про неё что-то говорил Селендиус. А ещё он говорил про способность случайный предмет, и что она весьма полезная для предметов. Ну подробностей не спрашивал.
По поводу захвата душ, это неплохая идея, если использовать дамикам это абилку, тип поглотил несколько душ, через некоторое время выпустил юнитов, нанёс им урон. При этом лучше использовать перемещения после удаления способности погщением даммиком юнита, ну или просто убивать даммика, поглотившего юнит....
0
13
6 лет назад
Отредактирован Пушистый
0
KingMaximax, так и рождаются идеи для применения. Удаление верхнего слоя юнита не удаляет тех, кто находится внутри него, если брать именно RemoveUnit.
2
29
6 лет назад
2
Пушистый, я знаю)
Я еле-еде прочитал ваш текст, и конечно скажу, что не всякий применить подобную идею. Кстати, если удалить способность то юнит освободиться от юнита внутри. Это как удалять дух зверя, и волки пропадают.
Так скажите вкратце, где это лучше применить и для каких жанров и карт?
Оффтоп
А я видел всякое с Флаффи, и это был Yi....
2
24
6 лет назад
Отредактирован Melissa
2
Как уже ранее рассматривалось, труп его обнаружить не удастся, если он в следствие лассо умрет.
Идеальное убийство
0
29
6 лет назад
0
Melissa:
Как уже ранее рассматривалось, труп его обнаружить не удастся, если он в следствие лассо умрет.
Идеальное убийство
Вот что значит, быть идеальным убийцей, который работает на мафию. Да-к это же можно сделать героя, которые убивает без следа и следствия.
Нет трупа - нет преступления.
0
24
6 лет назад
Отредактирован Melissa
0
Да-к это же можно сделать героя, которые убивает без следа и следствия
понадобится два "героя" -_-
3
32
6 лет назад
3
Многобуков. Видоса не хватает
1
23
6 лет назад
1
Благодаря этой статье я наконец сделаю перевозку кучи руды в телеге! А ведь я тоже был близок, что бы прийти к этому. Ведь именно похищение душ может перевозить неуязвимых юнитов.
0
13
6 лет назад
0
Бордер, это да, если настроить цели применения.
KingMaximax, да, как-то разделять их не пробовал. По ходу статьи думал, что лучше подходит для замысловатых спеллов или боссов в картах (многоликость, которую нужно постепенно разрушать, чтобы убить главного).
Fakov, учту. Так-то проба пера)
0
29
6 лет назад
0
Пушистый, а ещё какие нибудь плюшки будете разбирать?
К примеру бессмертие от регена фонтана в 1000% или -1000% ....
0
13
6 лет назад
Отредактирован Пушистый
0
KingMaximax, думаю, что буду, так как очень много чего было сделано за это время, пока я копался в варе. Возможно, пойдут еще системы на всеобщее обозрение и пользование. Есть одна, не уступающая мемхаку, но она для дебагинга и работает на 1.29 даже. Может стать тоже неким открытием. Пока что это в планах)
0
29
6 лет назад
0
Пушистый, вот только, когда будет о ней излагать суть, то пожалуйста покороче и как можно содержательно. А то кучу текста не каждый осилит читать. Мне будет интересно узнать, что за штука.
0
13
6 лет назад
0
KingMaximax, учту, просто старался ориентироваться на классические статьи по вару, где старались различные моменты более живее истолковать. Думал, абы не скучно было читать)
Забыл отметить, id приказа для применения способности - 852008.
3
28
6 лет назад
3
Автору два чая, побольше бы таких полезных статей (у тех же китайцев подобного полно, но мало кто решается перевести/адаптировать).
1
18
6 лет назад
1
От себя добавлю, что пока делал warcraft multiverse, поигрался с 'Arav' и той абилкой с камня призыва фурболгов. Так вот, вместе при настройке они позволяют вызывать здание, висящее на некоторой высоте (хотел так Наксрамас создавать как артефакт с босса), однако, если здание имеет способность "выпустить корни" древ ночных эльфов (насколько я понял), при применении (планировался осадный режим и передвижной) произойдет вылет. Мб я что-то плохо сделал, но в итоге Наксрамас стал просто декорацией
2
24
6 лет назад
2
Неплохая статья. Остается изобрести машину времени и перенести эту статью лет на пять назад.
0
13
6 лет назад
0
prog, тогда был слишком молод для такого, чтобы от себя ресурс написать)
0
15
6 лет назад
0
Пушистый, годная статейка, аж вдохновила с инвизом пошалить. Буду исследовать стремительность и невидимость, а также невидимость по ночам)
2
13
6 лет назад
2
Sylvanas, напомнил мне об одной способности, которая также с ними связана и редко используется. Может, что из нее получится интересного выжать)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.