Как двери издеваются над программистами. gamedev.. gamedev. баги.. gamedev. баги. Блог компании Beget.. gamedev. баги. Блог компании Beget. геймдев.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия. история игр.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия. история игр. проблема двери.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия. история игр. проблема двери. Программирование.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия. история игр. проблема двери. Программирование. Разработка игр.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия. история игр. проблема двери. Программирование. Разработка игр. Тестирование IT-систем.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия. история игр. проблема двери. Программирование. Разработка игр. Тестирование IT-систем. Управление проектами.. gamedev. баги. Блог компании Beget. геймдев. игровая индустрия. история игр. проблема двери. Программирование. Разработка игр. Тестирование IT-систем. Управление проектами. Управление разработкой.
Как двери издеваются над программистами - 1

Каждый раз, когда техно-энтузиасты на Хабре начинают петь оды ИИ, который вот-вот заменит всех разработчиков, меня охватывает легкий скепсис. Дело в том, что многие простые задачи совсем не так просты, как кажутся нейросетям или продакту. Знаменитое: “да что там делать, вон ИИ отдай, к вечеру уже на прод зальете”, обычно открывает такую кроличью нору, что проваливаться и падать там можно неделями, а приземление оказывается очень болезненным. 

Вот казалось бы, что сложного, сделать дверь в игре? В 2014 году у Liz England вышло отличное эссе “Проблема Двери”, где Лиза описывает 22 логических вопроса, на которые должен ответить гейм-дизайнер при установке двери в игре. Эссе стало настолько классическим, что в сабредите r/GameDesign автомод прикрепляет ссылку на него в каждый тред. При этом эссе явно выходит за границы геймдева и становится универсальным, показывая, что кажущаяся простота в нашем деле часто не является таковой. Это касается и дверей в игре, и “просто логина на сайте”, и задачи вызова лифта, и визуализации прогресса ожидания и ещё тысячи вещей, необходимость детального продумывания которых менеджментом обычно в расчет не берется.

Поскольку просто переводить эссе – дело неблагодарное  (с переводом справится даже переводчик без ИИ), я буду разбавлять вопросы Лизы Английской примерами, где эти правила были либо интересно обыграны разработчиками, либо наоборот – проигнорированы и это привело к забавным багам.

Итак, вопрос первый: будут ли в вашей игре двери?

  1. Если да, то может ли игрок их открывать?

  2. Все ли двери в игре можно открыть?

  3. Или некоторые двери - просто декорация?

В Minecraft (до версии Village & Pillage) был эпичный баг: механикой игры дом определялся как деревянная дверь с “внутренней” и “внешней” стороной. Игра сравнивала 5 блоков за дверью и 5 блоков перед ней и считала, что та сторона, где больше “крыши” (крышей считается непрозрачный блок на любой высоте, который блокирует прямой солнечный свет) – это “внутри”, а если таких блоков поровну, то дверь вообще не считается домом.

Чтобы сделать “деревню” и зареспавнить голема, игроку нужно было набрать определенное количество дверей-домов в радиусе. Продвинутые игроки быстро сообразили: если алгоритм считает дверь домом, можно строить «квартиры» из одной двери и двух блоков – и фармить голема без лишних усилий 

Тяп-ляп, и “дом” сдан. Почти как в жизни :)

Тяп-ляп, и “дом” сдан. Почти как в жизни :)

4. Как игрок отличит одно от другого?

В игре The Stanley Parable, реализованной на движке Unity и работающей в жанре визуальной новеллы, рассказчик требует от игрока идти в красную дверь.

Как двери издеваются над программистами - 3

Если игрок идет в синюю, его возвращают к выбору двери. На очередной “неправильный” выбор игра физически переносит синюю дверь за спину игроку и рисует стрелку к красной. При этом в синюю дверь по-прежнему можно войти, но она ведет в Unfinished Section с техническими текстурами .

The Stanley Parable – Blue door / Red door endings

5. Открываемые двери зелёные, закрытые - красные? Перед заколоченными навалена рухлядь? Или вы просто убрали дверные ручки и решили, что этого достаточно?

6. Можно ли двери запирать и отпирать?

7. Как игрок понимает, что дверь заперта, но откроется - в отличие от двери, которая не откроется никогда?

Этот пункт великолепно обыгран во всевозможных платформерах и метроидваниях, визуально указывая зоны, проход к которым открывается только после определенного умения (в том числе и такого, которое будет получено только впереди). Так, в серии Metroid цвет игровой двери явно говорит игроку, каким оружием её можно открыть .

Как двери издеваются над программистами - 4

8. Знает ли игрок, как открыть запертую дверь? Нужен ли ключ? Взлом консоли? Решение головоломки? Или нужно дождаться определённого момента в сюжете?

9. Есть ли двери, которые открываются, но войти в них нельзя?

10. Откуда появляются враги? Вбегают через двери? Запираются ли эти двери после?

В Cyberpunk 2077 (даже после нескольких первых патчей) копы NCPD не входили через двери, а сразу спавнились за спиной игрока. Иногда прямо между ним и стеной. 

Как двери издеваются над программистами - 5

Видео не привожу из-за обилия сцен насилия, но вот ссылка для желающих.

11. Как игрок открывает дверь? Подходит - и она сама едет в сторону? Распахивается? Нужно нажать кнопку?

В игре Hitman: World of Assassination двери могли не открываться, если Агент 47 стоял слишком близко – анимация требовала пространства перед дверью, и если 47 или предмет на полу стояли слишком близко, дверь не открывалась.

12. Издает ли она звук при открытии?

В Alien Isolation звук открытия двери похож на звуки Чужого. Это было сделано намеренно, чтобы усилить атмосферу страха в игре. Плюс, сам звук открытия привлекал Чужих в округе.

Как двери издеваются над программистами - 6

13. Запираются ли двери за спиной у игрока?

14. Что происходит, если игроков двое? Дверь запирается только после того, как оба прошли?

В игре Half Life есть арена Surface Tension, в которой есть NPC-персонаж Барни, важный для сюжета. Если Барни умрет, сюжет не пойдет дальше. 

Чтобы Барни случайно не умер, конкретно в этой локации у двери прописан damage −1. Т.е. при взрыве двери вас и Барни не сечет осколками, а в прямом смысле лечит. Чем и стали активно пользоваться спидранеры.

15. А если уровень огромный и целиком не помещается в память? Если один игрок остался позади, пол может уйти у него из-под ног. Что делать?

16. Запрещать второму игроку двигаться дальше, пока оба не окажутся в одной комнате?

17. Телепортировать отставшего?

18. Какого размера дверь?

19. Достаточно ли она велика, чтобы игрок мог пройти?

В Half-Life: Alyx, которая была сделана для VR, крюк ломика незаметно цеплялся за дверной косяк. Игрок шел дальше, а ломик оставался висеть на двери. Valve пробовала отключать физику конкретно у  ломика, но неизменно ломала что-то другое. В итоге символ серии целиком выпилили из игры.

Как двери издеваются над программистами - 7

20. А если игроков двое? Если первый встал в проходе - он мешает второму?

21. А союзники, которые идут следом? Сколько их должно пройти, не застряв?

22. А враги? Мини-боссы крупнее человека - они тоже должны пролезать в дверь?

В Fallout 4 скрипт каравана иногда выбирает точку спавна внутри здания поселения, и двухголовый брамин с большим грузом не пролезает в дверь и блокирует её. Из той же серии: спутники, оказавшиеся слишком далеко в момент перехода через дверь, перестают следовать за игроком.

Как двери издеваются над программистами - 8

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

В интервью с создателями Ведьмака 3, авторы вспоминали: в дополнении “Кровь и Вино” есть квест на осаду замка Дун Тынне. Квестовая команда хотела заблокировать все дома на время миссии. Но логика блокировки была написана так, что игра не помнила исходное состояние двери – и после квеста все двери в игре просто открывались. Включая проходы в декоративные дома, под которыми даже не было земли и войдя в которые Геральд проваливался в пустоту. В итоге дизайнеру пришлось вручную пройти через каждую дверь локации и проставить тег «эта дверь была закрытой, и после квеста должна остаться закрытой».

Заключение

Иронично, что последняя история с ручным обходом всех дверей выглядит вообще как иллюстрация ко всей идее “быстренько дверь мне запили”. Менеджмент искренне считает, что там работы максимум на час, а команда тратит месяц на работу по фиче. И еще черти-сколько времени на ее поддержку. 

Еще более иронично, что Liz England написала своё эссе еще в 2014 году и с тех пор мало что изменилось. Конечно, теперь у нас есть ИИ и это ему можно сказать «включи вот эту фичу и залей на прод». И он даже начнет что-то там генерировать. Но сколько времени уйдет на доработку логики позже? И какова будет цена этих доработок?

Кстати, а поделитесь в комментариях, была ли у вас была такая же «дверь»? Задача, которая пришла как тривиальная и неожиданно (или ожидаемо) превратилась во что-то большое и болезненное?


Размещайте облачную инфраструктуру и масштабируйте сервисы с надежным облачным провайдером Beget.

Эксклюзивно для читателей Хабра мы даем бонус 10% при первом пополнении.

Воспользоваться

Автор: beget_com

Источник