Перейти к содержимому
Максиметер

☠️ Экран смерти в «Pac-Man» 1980, как классическое целочисленное переполнение

☠️ Экран смерти в «Pac-Man» 1980, как классическое целочисленное переполнение Знаменитый «Kill Screen» на Уровне 256, где правая половина экрана превращается в кашу из символов, а пройти уровень невозможно – это хрестоматийный пример бага переполнения 8-битного регистра. Уровень игры хранился в 8-битной переменной. Максимальное значение для 8 бит = 255. Когда игрок проходил 255-й уровень, счетчик переходил на 256. Для процессора это означало переполнение (в двоичной системе 11111111 + 1 = 00000000, но логика отрисовки была написана иначе). На 256 уровне код, отвечающий за отрисовку бонусного фрукта внизу экрана, начинал читать данные не из того адреса памяти. Он читал мусор из видеопамяти (VRAM) и отрисовывал его как тайлы, затирая правую половину лабиринта, что делало уровень непроходимым. 🚫 В Unity это выливается в IndexOutOfRangeException, а в 1980 году это ломало культовую игру на аппаратном уровне. Тут можно было бы сказать что-то типа: "Всегда нужно проверять границы массивов и типы данных!". Но мне хочется сказать другое: "Получается, что разработчики не прошли полностью свою игру раз не выловили этот баг!?" ☝️ Тестировать, тестировать и еще раз тестировать!

11 просмотров

Канал в каталоге Максиметера

4 подписчиков · Игры

Ещё по теме «Игры»

Читать дальше

Два раза в неделю свежие посты этого канала — на почту и в личную ленту. Без повторного поиска канала вручную.