Культовый шутер Doom снова доказал свою живучесть: игра может непрерывно работать два с половиной года, прежде чем столкнётся с критической ошибкой. Это выяснил энтузиаст под ником minki, решивший проверить, как движок обрабатывает воспроизведение демо-записей.
Программист заметил, что переменная, отвечающая за подсчёт кадров в демо, увеличивается бесконечно, даже после начала нового ролика. Теоретически это должно было привести к переполнению счётчика и сбою примерно через 2,5 года непрерывной работы. Для проверки гипотезы minki установил Doom на карманный ПК и подключил его к ИБП, который получал питание через USB-порт роутера.

Расчёты оказались верны: спустя два с половиной года на экране появилось сообщение Fatal Error. Подобные баги характерны для ретро-игр, где события отслеживались с помощью 16- или 32-битных счётчиков. При частоте 30–35 «тиков» в секунду на переполнение могло уходить несколько лет — дольше, чем когда-либо предполагали разработчики.
PC Gamer привело и другие примеры. В Crash Bandicoot 3 счётчик времени переполнился через 2,5 года непрерывной работы, из-за чего враги пошли «в обратную сторону», а ловушки перестали работать. В Final Fantasy IX таймер, связанный с редким мечом, можно сбросить, просто оставив игру включённой на два года. В Paper Mario мини-игра с выпечкой, рассчитанная на 30 секунд, идеально срабатывает даже спустя 4,5 года реального времени.
Все эти случаи объясняются ограничениями старых движков. Разработчики использовали фиксированные целые числа, не ожидая, что кто-то станет держать игру запущенной годами. Эксперименты вроде Doom лишь подтверждают, как глубоко в коде ретро-игр скрыты такие «спящие» баги. И сколько еще можно найти…
Ещё по теме:
- В Японии политическую партию впервые возглавит искусственный интеллект
- Депутаты предлагают контролировать ИИ в стране на государственном уровне
- Apple продлила «Утреннее шоу» на пятый сезон