Как стать автором
Обновить

Загадка больших статсов в UFO: Enemy Unknown (1994)

Время на прочтение2 мин
Количество просмотров11K
xcom stats


Большинство из нас, издавна игравших в старый добрый «UFO: Enemy Unknown», сталкивались (или по крайней мере знают) о случаях, когда статистика солдат залетает за 160 и устремляется в значения, которые переполняясь через 255, уходят в ноль.

Хотелось прояснить ситуацию, почему такое происходило, и где именно такое происходило. Дабы поставить в этой истории точку.

В ходе исследования были проверены DOS версии 1.0, 1.2, 1.4, русская (переведенная), и Gold Edition. Т.е., буквально все имеющиеся.

Данный глюк наблюдался только в версии 1.0. Но, стоит отметить, что русифицированная версия была основана как раз на версии 1.0, поэтому получилось так, что наши многочисленные соотечественники сталкивались с этой ситуацией гораздо чаще, чем в остальном мире, т.к. она проскочила лишь мельком (патч 1.2 вышел достаточно быстро, буквально через месяц), а русификацию свежих версий уже никто не делал.

Фрагмент дизассемблированного кода geoscape.exe, отвечающий за увеличение статсов по результату миссии (увеличение Time Units):

version 1.0

Смещения 2Ah и 35h относятся к соответственно Base TUs и TU Improvement

В версии 1.2 код уже выглядел слегка иначе:

version 1.2

Обратите внимание, ключевое тут — JZ/JLE.
JZ — переход, если результат нулевой (эквивалентный).
JLE — переход, если результат меньше или эквивалентен.

Получается, что изначально разработчики допустили ошибку новичка: сделали проверку на лимит без запаса, при том, что значение может прыгнуть на более, чем 1.

Т.е., в случае «TUs», рост ограничивался только если он точно попадал в 80.

Все, кто играли в обновленные или не русифицированные версии, с данным глюком уже не сталкивались.

P.S.: Покапавшись глубже, выяснилось, что русифицированная версия была гибридом, в которой GEOSCAPE.EXE был взят из версии 1.0, а BATTLESCAPE.EXE из 1.2. Просто боевая часть от 1.0 вылетала при появлении Криссалидов, и с этой версией игра была бы нежизнеспособна. Голлопы умышленно разделили игру на два разных EXE'шника (два разных игровых режима), взаимодействующих через файлы, для того чтобы игра уместилась в 640 килобайтах Conventional Memory, ну и из исторических соображений: изначально она задумывалась как просто пошаговая тактика, Laser Squad 2. Поэтому и такой гибрид оказался возможен.
Теги:
Хабы:
Всего голосов 13: ↑13 и ↓0+13
Комментарии8

Публикации