Компьютер умеет считать быстрее любого человека, но иногда спотыкается там, где справится и первоклассник. Ноль минус один в его исполнении легко превращается в четыре с лишним миллиарда. В постапокалиптической Пустоши такая арифметика означает одно: внезапно ты самый обеспеченный медик Содружества.
Именно это случилось с одним из игроков Fallout 4. Заглянув в инвентарь, он обнаружил там 4 294 967 295 стимуляторов, хотя модов не ставил и такого количества никогда не собирал.
Странное число объясняется просто, ведь это 2³² – 1, максимальное значение беззнаковой 32-битной переменной. Счётчик предметов не умеет хранить отрицательные значения. Если код из-за ошибки вычитает единицу из нуля, переменная "проворачивается" к своему максимуму. В комментариях привели наглядное сравнение:
Представьте старый механический одометр с барабанами. Если на отметке 000000 заставить его крутиться назад, он мгновенно покажет 999999.
Оставался вопрос, как вообще можно потратить стимулятор, которого нет. Ответ нашёлся почти наугад: у героя была силовая броня с модификацией, которая автоматически вкалывает стимулятор при низком здоровье. Судя по всему, последний шприц в один и тот же кадр использовали и броня, и сам игрок, а проверку на ноль код не выполнил. Вишенкой на торте стало разочарование: инвентарь на деле оказался пуст, так что баг был чисто визуальным, и продать миллиарды стимуляторов за крышки не получилось.
Подобные ошибки для серии почти родные. Спидраннеры Fallout 4 давно используют похожий трюк с переполнением, только намеренно:
надевают стопку одинаковых предметов брони с бонусом к переносимому весу
переименовывают их на верстаке, чтобы стопка распалась
снимают предметы по одному, и бонус вычитается несколько раз, уводя значение в минус
Кто-то по случаю вспомнил легенду о "ядерном Ганди" из Civilization, который будто бы из-за такого же переполнения превращался из пацифиста в поджигателя войны. Красивая история, но Сид Мейер и Брайан Рейнольдс её давным-давно опровергли: в оригинальной игре подобного бага не было.
Броня спасала героя автоматически, а убить попыталась его же собственная бухгалтерия.
Источник новости: shazoo.ru

