Веер ножей [Fan of knives]

Интересно, что для создания такой простой абилки близзарды пошли на настоящий изврат. Кому-то пришла в голову идея — хей, но ведь веер похож на обычную мультиатаку, которую мы уже давно закодили! Ту самую, которая barrage, где выстрел производится по нескольким целям одновременно. Просто в каждого врага нужно бросить дротик со статичным уроном и всё. Не знаю, пошел ли этот человек на повышение, но именно так и сделана основа абилки.

Вместе с основной веер унаследовал все «особенности», которые смотрятся логично на мультиатаке. Так, он не может попасть по юниту в тумане войны или невидимости. И это крайне важно для героев вроде шейкера, где ульт, основанный целиком на веере ножей, часто прожимается с даггера. Почему настолько?

Внимательные игроки знают, что варкрафт обновляет туман по таймеру 0.4 секунды. Очень внимательные знают, что с появлением 88 патча этот лимит был снижен до 0.1 — именно с такой скоростью сейчас обновляется туман войны. Но даже с такой частотой остается большая вероятность, что при использовании блинка туман не успеет пересчитаться и враги останутся невидимыми на момент использования способности. В древних версиях вроде 6.48 и т.п. крик акаши тоже был основан на веере, и момент, где она с блинка влетела в рексара и крикнула, не нанеся тому урона, даже попал в какой-то популярных мувик из 2008 года. К сожалению, сейчас найти этот мувик просто невозможно. Увидев это, фрог соизволил переписать код крика, чтобы исключить этот баг, целиком, сделав каждый снаряд вручную.

Итак, всегда есть шанс потратить ульт с кд более 2 минут в молоко, нанеся ровно 0 урона. Что же делать?

До изобретения мемхака шансов исправить ситуацию было немного. Мой подход стал таким — в момент перед кастом веера ножей мы проходим циклом по всем врагам рядом с шейкером. Если кого-то нашли, то выдаем шейкеру обзор над ним, как будто пассивкой Bloodseeker. После этого шел сам ульт, и ножи разлетались как следует — потому что все враги считались видимыми. И сразу после ножей обзор забирался обратно. Из-за обновления тумана по таймеру этот костыль никак себя не проявлял в игровом плане — невидимые враги не отображались у игрока, но получали в лоб от ульты.

С мемхаком процесс стал намного проще — я просто изменил фильтр, убрав проверку на видимость цели из условий. Затем потребовалось некоторое время, чтобы придти к фиксу типа урона — он наносится якобы героем, поэтому ethereal-подобные эффекты давали иммунитет к этому урону. Затем оставалось добавить несложный фильтр на всё том же мемхаке, чтобы «отскакивающие» волны (ножи) не били того, от кого они «отскочили». Никакими штатными средствами подобный эффект реализовать не выйдет.

Почему вообще ульт шейкера не был переписан вручную, как крик акаши? Из-за нагрузки. Если у акаши количество целей редко переваливает за 10, то для шейкера только такие кучки и представляют интерес. Если создавать снаряд вручную от каждого к каждому, то нагрузка будет невероятной — не только из-за самого кода, но и из-за огромного внезапного появления сотни снарядов-юнитов. Поэтому приходилось мириться с недостатками штатного веера, пока не было иного выбора.

4 комментария

avatar
Ничего себе!
avatar
Ну помню знатные пролаги в играх с брудой и шейкером.
А насчет целей — вроде пока урон был «смешанным»( тип атаки 0, тип урона 32, флаг 1)
всех все устраивало? Или не?
Про основу — очень интересно. Какие еще абилки пришлось пофиксить чтобы делать по канону д2?
комментарий был удален
avatar
Если создавать снаряд вручную от каждого к каждому, то нагрузка будет невероятной — не только из-за самого кода, но и из-за огромного внезапного появления сотни снарядов-юнитов.
Есть миллион способов решить эту проблему, танцы с мемхаком это ПОТОМУЧТО Я МОГУ, а не оптимальное решение имхо. Например можно сделать пул снарядов (заранее инициализировать все юниты и убирать в недоступное место после использования, а не уничтожать). Можно мгновенно проводить все расчеты урона и наносить его в памяти и просто рисовать примерные анимации снарядами юнитами, не обзяательно делать 1 снаряд = 1 цель. Это все проще и быстрее имхо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.