«Двери — отстой»: как небольшой физический баг двери сломал Half-Life 2

Даже спустя десять лет после релиза игра может подкинуть неприятный сюрприз.

Разработчик из Valve Том Форсайт опубликовал в Твиттере тред, в котором рассказал о неожиданных проблемах, возникших при разработке VR-версии Half-Life 2 из-за дверей. Форсайт уточнил, что эти события происходили примерно в 2013-2014 году. Мы выбрали из треда главное.

Сцена, в которой внезапно появился баг

Мы привыкли к тому, что в реальной жизни двери чаще всего устроены достаточно просто. Но в играх — это сложный элемент дизайна, с которым связано множество потенциальных проблем. К примеру, недавно геймдиректор The Last of Us Part II Курт Маргено подробно описал в Твиттере трудности, которые вызвали двери, а мы пересказали его тред.

По словам Форсайта, когда разработчики решили добавить VR-режим в Half-Life 2, они поняли, что придётся менять код рендеринга. Но при этом они не вносили никаких изменений в код геймплея. Это значит, что по сути игра осталась всё той же, но с новым режимом.

«Двери — отстой»: как небольшой физический баг двери сломал Half-Life 2

Когда Форсайт выполнил всю работу и готовился отправить билд, он решил полностью перепройти игру. Разработчик посмотрел начальную сцену, сошёл с поезда, закинул банку в мусорку и так далее. Всё было нормально, пока Барни, который скрывался под маской охранника, не постучал в дверь — далее она открылась... и тут же закрылась, хотя этого не должно было произойти. На этом моменте всё замерло и больше ничего не происходило.

В скриптах NPC не было прописано, что он должен открывать дверь дважды — изначально одного раза было достаточно. В результате вся игра заглохла. При этом игрок тоже не мог открыть эту дверь — это должен был сделать только определённый персонаж. Форсайт попробовал перезагрузиться, но результат всегда был один и тот же. Для разработчика стало очевидно, что они что-то сломали. Он предположил, что всё дело в изменениях рендеринга — это основное, чем команда занималась.

«Двери — отстой»: как небольшой физический баг двери сломал Half-Life 2

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

Форсайт делал всё это на основе старого кода, но при этом использовал новую версию компилятора. Старый компилятор применял стандарт 8087 для всех математических вычислений. В новом компиляторе его нет — сейчас применяется SSE. У этих компиляторов немного различается точность вычислений. В результате получилось, что новая версия иначе просчитала значения, что повлияло на физику игры.

«Двери — отстой»: как небольшой физический баг двери сломал Half-Life 2

Какое-то крохотное изменение привело к тому, что именно эта сцена не работала, а со всей остальной игрой всё было в порядке. Но это не объясняет, почему скрипт не срабатывал как надо.

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

«Двери — отстой»: как небольшой физический баг двери сломал Half-Life 2

Всё это не срабатывало, потому что дверь не раскрывалась на максимум — ей мешал стоящий рядом охранник: она цеплялась самым краем. Со старым компилятором дверь оказывалась достаточно тяжёлой, чтобы оттолкнуть персонажа и достичь точки, в которой она фиксируется. А новая версия компилятора посчитала, что силы недостаточно, поэтому дверь отскакивала от охранника и закрывалась.

Двери — отстой. Даже старые надёжные двери, которые работают десятилетиями, — отстой.

Том Форсайт, разработчик из Valve
3939 показов
21K21K открытий
33 репоста