Интересно
December 24, 2022

Как ползание появилось в Minecraft

Статья написана разработчиком Хенриком Книбергом, покинувшим Mojang в мае 2022 года. Оригинальную статью можно прочесть на официальном сайте.

Возможно, вы заметили, что в одной из версий все игроки получили новый навык — умение ползать! Можно подумать, что такая революционная механика была создана благодаря месяцам упорного труда и спланированной работы. Спойлер: все произошло совершенно случайно! Хотите узнать, как это получилось? Тогда берите стул и держитесь крепче: это большая закулисная история о том, как ползание появилось в Minecraft.

Все началось с невинного на вид репорта об ошибке, касающегося хитбоксов и высоты глаз. Видите ли, все мобы в Minecraft имеют хитбокс — невидимую коробку, которая показывает, сколько места занимает моб. Если вы играете в Minecraft на PC или Mac, вы можете включить отображение хитбоксов, нажав суперсекретную комбинацию клавиш F3+B (никому не говорите).

Красная линия сверху — это высота глаз. Она используется для определения того, могут ли два монстра видеть друг друга. Если они могут установить зрительный контакт, то они могут нацелиться или следовать друг за другом.

Тот самый репорт о баге был связан с неправильным размером хитбоксов или неправильным расположением высоты глаз, что было легко исправлено благодаря нашему замечательному сообществу игроков™, которые помогли перечислить все ошибки, требующие исправления. Один интересный пример, который привлек внимание, заключался в том, что хитбокс белого медведя не менялся во время анимации атаки. Во время атаки белый медведь встает на задние лапы, и если хитбокс не встает вместе с ним, то игрок не может ударить медведя по туловищу.

Хитбокс белого медведя до исправления бага:
Хитбокс белого медведя после исправления бага:
Эй, линия высоты глаз! Ты должна следовать за головой игрока, когда он подкрадывается! Хорошо, что мы исправили это.

Так, и в чем же проблема? Ну, высота глаз также является и «камерой» для игроков, играющих от первого лица, поэтому, когда вы нажимали Shift, чтобы прокрасться, вы не замечали никакой разницы, потому что ваша камера не опускалась вместе с головой. Это было просто исправить — необходимо было просто изменить одно число в коде Minecraft и: та-дам, проблема решена. Теперь высота глаз находилась в правильном положении, а обзор камеры игрока опускался достаточно низко, чтобы создать ощущение, что он приседает.

Приседания после изменения высоты глаз стали гораздо более наглядными.

Однако это маленькая проблема была далеко от решения, так как оказалось, что исправленный баг имел один важный побочный эффект: сделав хитбокс игрока чуть ниже, игрок научился пролезать под полублок, когда приседал.

Из-за этого побочного эффекта игрок мог не только приседать под полублоком, но и поднимать голову над ним всякий раз, когда отжимал кнопку Shift. Причина этого бага заключается в том, что игра не была рассчитана на это, поскольку она предполагает, что игрок стоит во весь рост, когда не держит кнопку Shift.

Позволить игрокам помещаться под ранее недоступное пространство высотой в 1,5 блока было на самом деле довольно значительным изменением геймплея! То, что начиналось как небольшое исправление бага, становилось всё более масштабным, и потребовало обсуждения с командой разработчиков, чтобы решить, стоит ли это так оставлять.

Так вот что происходит, если приседать под полублоком, а затем отпустить клавишу shift? Голова просовывается прямо сквозь полублок(по крайней мере, визуально)! Больно!

После небольшого обсуждения мы решили, что это то, что стоит добавить в игру. Однако его кодирование оказалось довольно сложной задачей, поскольку вещь, которую мы называем «sneak», в Minecraft имеет целых 26 различных значений. Это и затемнение никнейма, и остановка на лестнице, и спуск с лошади — и это только некоторые из них!

Все эти механики были объединены вместе и связаны с клавишей Shift, что значительно усложняло работу. Это также вызывало множество вопросов, например: если вы нажимаете на клавишу Shift, чтобы прокрасться под полублоком, что именно должно произойти, когда вы отжимаете Shift? Если вы находитесь под полублоком и не удерживаете клавишу Shift, вы должны двигаться нормально или медленно? Технически вы всё еще подкрадываетесь или уже нет? Что вообще означает «подкрадываться»?

Эти вопросы в конечном итоге привели нас к решению исключить понятие «sneak» из кода. Это была довольно большая техническая работа, которая включала в себя отсоединение всех различных моделей поведения друг от друга, чтобы сделать возможной настройку каждой модели поведения отдельно.

Вот и вся история о том, как мы научились приседать под полублоками! О, подождите, эта статья должна была быть о ползании? Справедливо, давайте продолжим…


ОТ ПРИСЕДАНИЯ ДО ПОЛЗАНИЯ

После исправления бага с приседанием мы заметили проблему, которая влияет на плавание в игре. Когда вы плаваете в Minecraft, ваш персонаж находится в горизонтальном положении, и как только вы выходите из воды, вы возвращаетесь в вертикальное. Но плавание в пространстве высотой в один блок теперь приводило к визуальному багу, из-за которого голова персонажа торчала над блоком.

Черт! Опять проблема с торчащей сквозь блок головой! Это был лишь визуальный баг, но его всё равно необходимо исправить!
Решение заключалось в том, что надо было оставить персонажа в горизонтальном положении, даже после выхода из воды. Глупо, да, но лучше, чем торчать головой в потолок!

Как только нам удалось это исправить, команда решила принять простой принцип геймдизайна игры: Если у вас нет места, чтобы стоять, вы приседаете. Если у вас нет места, чтобы приседать, вы ползете. В Minecraft не существует анимации ползания, поэтому мы использовали для нее анимацию плавания. Мы рассматривали возможность создания настоящей анимации ползания (даже создали прототип), но решили, что существующая анимация плавания достаточно хороша, чтобы продолжать ее использование.

Как и всегда в Minecraft, любое изменение кода неизбежно приводило к непредвиденным побочным эффектам. Это конкретное изменение не стало исключением. Игра воспринимала вагонетки и лодки, как «недостаточно места, чтобы стоять», поэтому игроку приходилось ползти, когда он пытался сесть в вагонетку.

Однако непредвиденные побочные эффекты не всегда плохи. Например, оказалось, что игроки могут использовать люки для ползанья — и с их помощью проникать в небольшие тоннели и секретные проходы. Такое умное использование механики создавало новый интересный геймплей, который потенциально мог привести к множеству забавных ситуаций и сценариев. Нам это очень понравилось, и в итоге мы решили, что ползание — это то, что нужно.

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

На этом всё. Огромное спасибо за прочтение статьи. Если она была вам полезна, то просим поделиться ею с друзьями-куболюбами — это нам очень сильно поможет.

Мы в Telegram и ВКонтакте