Баги, которые стали механикой.
Банни-хоп, или распрыжка — один из самых распространённых приёмов в спидранах игр от первого лица. Он помогает разогнаться значительно быстрее предельных скоростей простого передвижения благодаря особенностям работы некоторых игровых движков. А основан банни-хоп на другой «фиче» — стрейфинге.
В этой небольшой заметке мы разбираемся, как работает распрыжка со стрейфингом и откуда они вообще появились в играх. Материал частично основан на ролике WaifuRuns.
Всё началось с Quake — одного из первых шутеров от первого лица, выполненных в полноценном 3D. Вместе с переходом в трёхмерное пространство в игре появилась ещё и продвинутая система перемещения, которая стала стандартом для жанра — игрок мог без лишних усилий ориентироваться во всех трёх плоскостях, используя лишь WASD-раскладку, пробел и мышь.
Но со временем игроки обратили внимание на интересные особенности системы управления. Так, например, при сочетании обычного бега со «стрейфами» — боковыми движениями влево-вправо при помощи клавиш A и D — скорость становилась больше, чем без них. А если комбинировать стрейфы с вовремя исполненными прыжками, эту скорость удавалось сохранить и даже преисполнить.
Таким образом сочетание непрекращающихся прыжков со стрейфами позволяла передвигаться значительно быстрее, чем при стандартном беге — при этом игроку даже не требовалось зажимать кнопку движения вперёд (W).
Опытным путём игроки выяснили — прыжки сохраняют скорость из-за того, что воздух в Quake не вызывает никакого сопротивления, в отличие от пола и жидкостей. Замедление в воздухе попросту не было запрограммировано в движке.
Стрейфы же позволили ускоряться по совсем банальной причине. Дело в том, что при одновременном нажатии W («вперёд») и A/D («влево» — «вправо») игра не корректировала скорость игрока — из-за чего векторы перемещения вперёд и в сторону складывались.
Разберём на цифрах. Предположим, что скорость перемещения в любую из сторон равна 1. Если сложить направление вперёд и вбок, конечная скорость будет равна корню из двух — или приблизительно 1,4. Иначе говоря, при стрейфраннинге (так называется этот приём) игрок перемещается быстрее в 1,4 раза.
Впрочем, то, что нравилось игрокам, не оценили разработчики — видимо, они сочли это за собственную ошибку при программировании движка. Поэтому в последующих частях выполнять распрыжку стало намного сложнее — так, например, игрок больше не мог разгоняться прямо в воздухе («эирстрейфинг»).
Но уже через два года после выхода Quake вышла первая часть Half-Life. И так уж совпало, что Valve для разработки собственного движка GoldSrc лицензировала Quake engine — причём, его первую версию. И потому первые игры студии унаследовали от Quake в том числе и распрыжку.
Half-Life не просто поддерживала банни-хоп — в ней эта «механика» стала ещё глубже. Как и в Quake, игрок мог получить дополнительное ускорение благодаря урону от взрывов. Но в Half-Life было значительно больше «взрывного» оружия — гранатомёты, гранаты, РПГ и так далее, —и потому применять этот приём можно было значительно чаще.
Распрыжка попала практически во все игры на GoldSrc, включая Counter-Strike. И в какой-то момент игроки стали настолько сильно «абьюзить» банни-хоп в мультиплеерном режиме — ведь с ним можно было намного быстрее достигать выгодных позиций, — что в последней версии шутера (1.6) временное окно для удачного прыжка значительно сократили.
Банни-хоп попал и в следующий движок от Valve — Source. Причём, разработчики и тут пытались его ограничить — ускорение в воздухе отключили. Однако в Half-Life 2 появилась другая фича — бег, который всё ещё можно было применять прямо во время распрыжки. Поэтому по сути банни-хоп продолжил работать, пусть и в слегка урезанном виде — ведь разгоняться теперь оставалось при помощи либо стрейфов на земле, либо гранат.
Распрыжка, похоже, не давала покоя Valve, поэтому в Source ввели ещё одно ограничение. Разработчики добавили порог ускорения при прыжках — как только игрок его превышал, к игроку применялся вектор скорости в обратном направлении, равный превышению этой скорости.
Простыми словами, если игрок превышал скорость на 20 единиц, появлялась ещё одна сила, которая начинала двигать его назад со скоростью тех же 20 единиц. Из-за этого он не мог ускориться дальше порога.
Но одного в Valve не учли — игра никогда не проверяла, в каком направлении движется игрок. Поэтому, стоило игроку достичь скоростного порога, он просто разворачивал камеру назад — и продолжал прыгать спиной вперёд. Вторая сила всё так же появлялась, но теперь она была сонаправлена перемещению игрока, так как он тоже двигался назад. Так благодаря «фиксу» банни-хопа Valve, по сути, ещё сильнее его углубила.
В последующих своих играх Valve продолжала усложнять банни-хоп — и потому в той же Сounter-Strike: Global Offensive добиться его очень сложно. Впрочем, кому-то овладеть таким «скиллом» всё же удалось.
Пока Valve закручивала гайки, распрыжка появилась в другой игре на движке Source — Titanfall 1 и 2 от Respawn. Благодаря тому, насколько много в игре основных механик передвижения — спринта, подката, двойного прыжка, бега по стенам и так далее, — применение банни-хопа в ней разнообразнее, чем где бы то ни было до этого.
Игрок и так ускоряется, когда делает подкаты и бежит по стенам — а если совместить это с распрыжкой, разгоняться получается до небывалых значений. Да и выглядит это очень красиво.
Сейчас банни-хоп — это всё ещё весьма нишевая механика. Большинство разработчиков сочли её «абьюзом» движка и потому сильно ограничили ускорение — распрыжку почти не встретить в современных играх. И студии можно понять — ведь банни-хоп это весьма неочевидная механика, овладеть которой может не каждый. И в мультиплеере те, кто ей научился, получают значительное преимущество.
Впрочем, как показал опыт с Titanfall, некоторые разработчики оставляют возможность распрыгиваться — ведь эта механика прекрасно раскрывает возможности перемещения в шутерах. А некоторые игры так вообще целиком основаны на ней — как, например, Hot Lava, где уровни с препятствиями проходятся исключительно с применением банни-хопа.