Безумный фанат продержал Doom включенным более двух лет – пока игра не вылетела

Поделиться

Безумный фанат продержал Doom включенным более двух лет – пока игра не вылетела

Задумывались ли вы когда-нибудь, сколько времени потребуется оригинальной Doom (1993), чтобы аварийно завершиться, если оставить её работать бесконечно? Один энтузиаст уже провёл необходимый эксперимент и получил ответ. Теперь мы все можем спать спокойно.

Благодарить за этот эксперимент стоит пользователя minki с форума Lenowo. Он запустил Doom на старом КПК, предполагая, что рано или поздно игра должна дать сбой. Причина в том, что каждый раз, когда демонстрационный режим запускался и перезагружался, движок сохранял новую переменную. Затем демо запускалось снова, сохраняя очередную переменную – и так далее, пока не происходило переполнение памяти, когда данные превышали возможные границы значения, используемого для их хранения. Теперь теоретические предположения о времени до сбоя наконец получили практическое подтверждение.

Minki провёл физический тест на старом КПК – для запуска Doom не требуется мощное оборудование, что доказали энтузиасты, запускавшие игру в PDF-файле, на бейдже для хакерской конференции и даже на коробке от самой игры. Исследователь оставил игру работать в режиме циклического воспроизведения демо, чтобы узнать, когда произойдёт сбой.

Это заняло два с половиной года.

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

В комментариях на Hacker News заинтересованные читатели упомянули несколько похожих примеров в других старых играх.

Например, если оставить Crash Bandicoot 3 работать чуть более двух лет, глобальный таймер переполнится. Это приводит к тому, что враги начинают двигаться назад во времени, объекты замирают, а некоторые уровни полностью ломаются. На YouTube есть интересное видео об этой аномалии от Jimmy Breck-McKye.

В Final Fantasy IX есть меч, который можно получить только если игрок достигнет финального подземелья менее чем за 12 часов игрового времени. Или же можно играть достаточно долго, чтобы произошло переполнение внутреннего счётчика времени – тогда таймер сбросится, и меч снова станет доступным. Это занимает около двух лет непрерывной игры. Из-за этого на фанатской вики Final Fantasy меч получил статус "условно недоступного", так как технически его всё-таки можно получить.

Ещё один известный пример связан с тортом в Paper Mario. В игре нужно испечь идеальный торт, для чего необходимо оставить его в духовке примерно на 30 секунд. Однако если оставить игру включённой достаточно долго – всего лишь 4,5 года, вы также получите идеально испечённый торт. Это происходит потому, что таймер, отслеживающий время приготовления, превышает своё максимальное значение и, к счастью в данном случае, сбрасывается.

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

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

Это интересно

Похожие новости