- PVSM.RU - https://www.pvsm.ru -
Большинство из нас, издавна игравших в старый добрый «UFO: Enemy Unknown», сталкивались (или по крайней мере знают) о случаях, когда статистика солдат залетает за 160 и устремляется в значения, которые переполняясь через 255, уходят в ноль.
Хотелось прояснить ситуацию, почему такое происходило, и где именно такое происходило. Дабы поставить в этой истории точку.
В ходе исследования были проверены DOS версии 1.0, 1.2, 1.4, русская (переведенная), и Gold Edition. Т.е., буквально все имеющиеся.
Данный глюк наблюдался только в версии 1.0. Но, стоит отметить, что русифицированная версия была основана как раз на версии 1.0, поэтому получилось так, что наши многочисленные соотечественники сталкивались с этой ситуацией гораздо чаще, чем в остальном мире, т.к. она проскочила лишь мельком (патч 1.2 вышел достаточно быстро, буквально через месяц), а русификацию свежих версий уже никто не делал.
Фрагмент дизассемблированного кода geoscape.exe, отвечающий увеличения статсов по результату миссии (увеличение Time Units):
Смещения 2Ah и 35h относятся к соответственно Base TUs и TU Improvement [1]
В версии 1.2 код уже выглядел слегка иначе:
Обратите внимание, ключевое тут — JZ/JLE.
JZ — переход, если результат нулевой (эквивалентный).
JLE — переход, если результат меньше или эквивалентен.
Получается, что изначально разработчики допустили ошибку новичка: сделали проверку на лимит без запаса, при том, что значение может прыгнуть на более, чем 1.
Т.е., в случае «TUs», рост ограничивался только если он точно попадал в 80.
Все, кто играли в обновленные или не русифицированные версии, с данным глюком уже не сталкивались.
Автор: Volutar
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/igry/93934
Ссылки в тексте:
[1] Base TUs и TU Improvement : http://ufopaedia.org/index.php?title=SOLDIER.DAT#Initial_Recruit_Stats
[2] Источник: http://geektimes.ru/post/253556/
Нажмите здесь для печати.