Классический Doom работал без сбоев более двух лет до переполнения переменной

/ (Обновлено: ) / ИгрыНовости / Игры

Вы когда-нибудь задумывались, сколько времени потребуется классической игре Doom (1993), чтобы зависнуть при непрерывной работе? Оказывается, ответ известен: примерно два с половиной года. Именно столько потребовалось для переполнения переменной, что привело к сбою.

Пользователь minki на форуме Lenovo провел необычный эксперимент. Он запустил Doom на старом КПК (карманный персональный компьютер), ожидая, что игра в конечном итоге зависнет. Причина в том, что каждый раз при завершении и перезапуске демо-режима движок сохранял новую переменную. Этот процесс повторялся снова и снова, пока в один прекрасный момент не произошло переполнение — данные превысили возможные границы значения, используемого для их хранения.

minki запустил физический тест на старом КПК (карманный персональный компьютер) — для работы Doom много не нужно, что доказывают запуски игры в PDF-файле, на бейдже хакерской конференции и даже на собственной упаковке. Затем он оставил игру работать, что заставляло демо-режим циклически повторяться, чтобы увидеть, сколько времени потребуется для сбоя.

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

«Игра зависла всего через несколько часов после отметки в два с половиной года, что доказывает: переменная действительно переполнилась и вызвала ожидаемый жесткий сбой», — пояснил minki.

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

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

В Final Fantasy IX есть меч, который можно получить, только если игрок доберется до финального подземелья менее чем за 12 часов игрового времени. Альтернативный способ — играть достаточно долго, чтобы переполнить внутренний счетчик времени, сбросить таймер и забрать меч. На это уходит, как вы уже догадались, около двух лет непрерывного игрового процесса. За это меч получил на Final Fantasy Fandom титул «пропускаемого в разумных пределах», поскольку технически он не является безвозвратно упускаемым.

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

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

Однако стоит отдать должное разработчикам. Они не планировали такого, потому что зачем? Вероятно, многие игры сталкиваются с той же проблемой, поскольку это скорее ограничение арифметики, чем плохое программирование. И, эй, если вы оставляете игру работать более двух лет, чтобы получить неуловимый меч в Final Fantasy, возможно, вы заслуживаете его не меньше, чем кто-либо другой.

ИИ: Любопытно, что подобные «временные капсулы» в коде старых игр продолжают удивлять даже спустя десятилетия. Это напоминает нам о технических ограничениях эпохи и о том, как креативность сообщества выявляет самые неожиданные особенности классического софта.

Подписаться на обновления Новости / Игры
Зарегистрируйтесь на сайте, чтобы отключить рекламу

ℹ️ Помощь от ИИ

В статье есть ошибки или у вас есть вопрос? Попробуйте спросить нашего ИИ-помощника в комментариях и он постарается помочь!

⚠️ Важно:

• AI Rutab читает ваши комментарии и готов вам помочь.
• Просто задайте вопрос 👍
• ИИ может давать неточные ответы!
• ИИ не скажет «Я не знаю», но вместо этого может дать ошибочный ответ.
• Всегда проверяйте информацию и не полагайтесь на него как на единственный источник.
• К ИИ-помощнику можно обратиться по имени Rutab или Рутаб.

Топ дня 🌶️


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

Оставить комментарий


Все комментарии - Игры