Ошибка переполнения (англ. Overflow Glitch) - игровая ошибка, проявляющаяся в нескольких играх серии Final Fantasy. Обычно в силу этой ошибки, связанной с уровнем урона, превышающим максимально возможный, наносится либо очень низкий урон, либо персонаж убивает врага мгновенно, причем это зависит от выполнения определенных условий, как, например, определенного количества убитых врагов или набранных Очков Способностей.
Проявления в играх[]
Final Fantasy IV[]
В версиях игры для SNES и PlayStation вызов заклинания Cure4, при котором врагу наносился урон более 16383 очков, приводил к тому, что вместо этого у врага увеличивалось количество очков магии MP.
Также во время сражения с Сестрами Магус, если игрок постоянно убивает только Минди и Сэнди, позволяя Синди снова и снова возрождать их, то он будут каждый раз увеличивать количество очков опыта EXP, которые группа получит после сражения. Однако после того, как герои убьют их 256 раз, счетчик врагов сбросится в 0 и начнет увеличиваться заново. Например, если группа набирает опыт за убийство 258 врагов в этом сражении, то она получит опыт за убийство только 2 врагов.
Final Fantasy VI[]
Максимальный урон, который один персонаж может нанести одним ударом, равняется 65535 очков (хотя он всегда ограничивается сверху до 9999). Если персонаж собирается нанести урон, больший этого значения, то из-за переполнения его значения реальный урон будет на 65535 меньше. Например, если персонаж нанес урон в 70000 очков одним ударом, то переполнение заставит игру посчитать размер урона как всего 4465 очков. Самый простой способ увидеть эту ошибку в действии - это вызов заклинания Ultima персонажем, чей уровень Магии превышает 140. В Сети доступен патч, который исправляет эту ошибку в версии игры для SNES.
В версии игры Advance эта ошибка была исправлена.
Final Fantasy VII[]
Ошибка переполнения уровня урона, срабатывающая при использовании оружия Смертная Казнь, является одной из самых известных ошибок переполнения во всей серии Final Fantasy. Одним из аспектов Final Fantasy VII является "прокачка" оружия персонажей, в частности Смертной Казни Винсента, путем убийства большого количества врагов (максимум 65535), после чего и происходит переполнение уровня урона, наносимого этим оружием. Наступление такого события воспринимается игрой как ошибка, в результате чего она немедленно убивает противника, которому нанесен такой урон. Срабатывание этой ошибки возможно почти с любым персонажем, кроме Аэрис, поскольку у нее просто нет оружия с подходящими характеристиками наносимого урона. Оружие Счет Промахов Баррета также может быть прокачано до переполнения урона с помощью экипировки больших количеств AP (максимум 8 Материй Рыцари Круга на уровне Мастера), а также достаточным повышением остальных необходимых боевых показателей. Ошибка переполнения урона наиболее часто срабатывает у Винсента и Баррета, однако и остальные персонажи могут запустить ее, если выпьют достаточное количество Напитков Героя и повысят мощность атаки с помощью статуса Берсерк.
Существуют две причины возникновения этой ошибки. Первая причина - применение базового урона, основанного на показателе Атаки персонажа, к показателю Защита врага. Если этот урон превышает 262144 очка, происходит переполнение. Вторая причина происходит при добавлении Случайной Вариации, которая добавляется после расчета эффекта от статусов Берсерк, Жаба, Критический и других сходных. Если размер урона до применения Случайной Вариации превосходит случайное значение в диапазоне от 524288 до 559241, то также произойдет переполнение. Хотя эта ошибка наиболее часто встречается в атаках Винсента или Баррета, остальные персонажи также могут вызвать ее появление, применяя соответствующие предметы, развивая боевые показатели, а также используя Прорывы Предела.
Возможны также отрицательные эффекты при переполнении излечивающих воздействий - например, сочетание материи Поглощение HP с атакой при переполнении значения урона убьет атакующего персонажа.
Другие виды ошибки переполнения относятся к очкам способностей AP (только для Подводной Материии), очкам опыта EXP персонажей, счетчикам сражений и побегов с поля боя, счетчику Гил, таймерам и возможности Прикрыть друзей с помощью Материи Прикрытия. Максимальное значение, которого могут достичь счетчики сражений и побегов с поля боя, равняется 65535, после этого они сбрасываются в 0 и начинают считать снова.
Что касается таймера игры, то он сбрасывается в 0 после примерно 136 лет 36 дней 6 часов 28 минут и 16 секунд с начала игры (понятно, что это вряд ли достижимо в реальной жизни, но, тем не менее, возможно). Счетчики опыта и гил сбрасываются после значения 4 294 967 295 (четыре миллиарда двести девяносто четыре миллиона девятьсот шестьдесят семь тысяч двести девяносто пять). Необходимо отметить, что счетчик опыта не подвержен переполнению в нормальных условиях, если только его не установить в максимальное значение с помощью чит-кодов или ромхакинга вне сражения. Вероятность способности Прикрыть не имеет ограничения сверху и может быть увеличена путем экипировки сразу нескольких Материй Прикрытия. Переполнение при этом возникает при значении 256%, после чего вероятность вновь считается от нуля.
Final Fantasy IX[]
После того, как игрок будет играть в одну игру 256 раз по 100 часов, внутренние игровые часы сбросятся в 0. Эту ошибку можно использовать для получения Экскалибура II без необходимости проходить игру менее, чем за 12 часов. Однако для этого игрок должен находиться в игре 25600 часов или 1067 дней или 2,92 года.
Если при игре в Тетра Мастер игрок использует карту с максимальными показателями (FAFF), то через некоторое время они также испытают ошибку переполнения и станут равными, например, 0AFF. Однако, хотя на карте и будет написано 0AFF, сила этой карты остается, как у карты с показателями FAFF.
Final Fantasy Mystic Quest[]
Заклинание Cure излечивает целевого персонажа пропорционально максимальному уровню HP последнего, а именно на 50%, к которым добавляется значение показателя Магии заклинателя, умноженное на 1,5. Из-за этого при вызове заклинания Cure Бенджамином происходит переполнение очков излечения, в результате чего целевому персонажу наносится урон. Однако в случае с Фебой это не так. Поскольку ее показатель Магии примерно в два раза выше, чем у Бенджамина, то уровень излечения заклинанием Cure испытывает переполнение дважды, в результате чего излечение происходит нормальным образом.
Происхождение ошибки[]
В компьютерной терминологии переполнением называют условие, при котором результат вычислений превышает по абсолютной величине максимально возможное значение, которое может хранить регистр процессора или ячейка памяти. В результате переполнения старшие значащие цифры отбрасываются, а сохраняются только младшие. В эру 8-битных и 16-битных процессоров и построенных на их основе видеоконсолей максимальным беззнаковым значением, которое могли хранить регистры процессора, были 255 и 65535, соответственно. Ячейки памяти в этих видеоконсолях были, как правило, 16-битными и могли хранить беззнаковые значения от 0 до 65535 включительно. Последнее число записывается в двоичной системе счисления как 1111111111111111 (16 единиц во всех разрядах или "битах"), а в шестнадцатиричной, использующей для записи цифры 0-9 и буквы A-F, - как FFFF.
Для хранения чисел с большими значениями требуется большее количество разрядов (или "бит") - например, число 65536 записывается в шестнадцатиричном виде как 10000000000000000 (единица с шестнадцатью нулями) и требует для своего хранения уже 17 бит. Как уже говорилось, многие старые видеоконсоли, таки, как SNES и PS1, были построены на основе 16 битных процессоров и памяти, в результате чего они могли адресовать до 65535 ячеек, содержащих числа от 0 до 65535.
В силу этого максимальные значения переменных, которыми оперировали старые видеоигры, были ограничены значением 65535. Возможно, в силу недосмотра программистов, которые не ожидали необходимости в значениях, требовавших более 16 бит для хранения, и возникли многочисленные ошибки переполнения, подобные описанным выше - например, при расчете уровня урона. Хотя необходимо отметить, что во многих случаях срабатывание ошибок переполнения требует довольно существенных усилий или точного знания процесса вычислений урона для того или иного боевого снаряжения.
В современных видеоконсолях ошибки переполнения становятся гораздо меньшей проблемой, поскольку почти все они используют процессоры с разрядностью 32 и выше, из-за чего предельные значения переменных вырастают до практически недостижимых 4 294 967 295 (четырех миллиардов двухсот девяносто четырех миллионов девятисот шестидесяти семи тысяч двухсот девяноста пяти) или - в шестнадцатиричной записи - FFFFFFFF (восемь букв F); для 64-битных процессоров эти значения еще выше.