Старый баг в Half-Life 2 «вернулся из будущего» и заблокировал прохождение
Бывший разработчик Valve Том Форсайт рассказал о необычном баге в Half-Life 2, который проявился почти через 10 лет после релиза игры и фактически «заразил» оригинальную версию 2004 года.
В 2013 году Форсайт работал с программистом Джо Людвигом над портированием Half-Life 2 на Oculus Rift VR. На самой ранней стадии игры они столкнулись с критической ошибкой: Гордон Фримен оказывался заблокирован в комнате из-за того, что охранник стоял слишком близко к дверям.
При попытке открыть дверь, она сталкивалась с пальцами ног персонажа и, согласно игровой логике, автоматически захлопывалась. Исправление оказалось простым — сместить охранника примерно на миллиметр.
Загадкой оставалось, почему эта ошибка, существовавшая в коде с 2004 года, не проявлялась так долго. Объяснение нашлось в различиях математических инструкций процессоров.
Half-Life 2 использовал старый набор инструкций x87 с «непредсказуемой» точностью. К 2013 году стандартом стал набор SSE с четкой 32/64-битной точностью. В версии x87 охранник при столкновении с дверью немного поворачивался, и дверь открывалась. В SSE поворот был меньше, и его палец продолжал блокировать дверь.
Таким образом, баг «проявился» из-за эволюции аппаратного обеспечения, а не изменений в самой игре.
Этот случай стал яркой иллюстрацией так называемой «проблемы дверей» в геймдеве — когда кажущиеся простыми объекты создают неожиданные сложности. История также демонстрирует, насколько хрупкой может быть зависимость игр от специфики аппаратного обеспечения, с которым они создавались.
















0 комментариев