Устраняем ошибку Unknown error при запуске игры Ночной дозор (Night Watch) на Windows 7, 8, 10 x64 и новых компьютерах/видеокартах

Как известно, игры Дозоров на новых компьютерах запускаться не хотят, выкидывая милое окошко:
Оно никак не связано ни с версией операционной системы (может появляться как на Windows 10, так и на Windows XP), ни со StarForce (т.е. может возникнуть даже если у Вас Windows XP и лицензионный диск). Проблема проявляется при использовании новых видеокарт с большим объёмом видеопамяти. Но уж очень хочется поиграть без виртуальных машин и поисков старого железа.

Для решения проблемы был написан патч, который меняет всего пару байт в исполняемом файле игр.

Скачать версию 1.2: yadi.sk MediaFire
Changelog:
v1.2
Исправлено поведение патча при отсутствии необходимого EXE + патч для Дневного дозора

v1.1
Изменёна логика патча, теперь игра не теряет производительность, по крайней мере на видеокартах AMD

v1
Первая публичная версия (только для Ночного дозора)
Известные проблемы: на новых видеокартах NVIDIA при высоких настройках качества игрок обводится чёрной сплошной рамкой вместо зелёной прозрачной (решение: снизить настройку качества до среднего или ниже), при высоком разрешении падает производительность из-за освещения (решение: снизить настройку освещение до низкого, в кат-сценах fps всё-равно может падать).
Эти проблемы я пытаюсь решить, но отладка графических проблем dx9 на Win10 затруднена, а Win7 или ниже мне поставить пока некуда (диск маленький). Кто хочет помочь материально, прошу на страницу Donate.

Использованные утилиты:

API Monitor
x32dbg
dUP 2


С помощью API Monitor, отфильтровав вызовы по DirectX, выяснилось, что ошибка возникает после запроса доступной памяти для текстур. Возвращалось значение FFD00000 (4Gb), что, для signed инструкции выглядело как -3145728 байт (-3 Мб). Поменял инструкции на беззнаковые и игра завелась.
Но это ещё не всё. Кроме всего прочего, на старте игра проверяет вендора видеокарты (nVidia или ATI), и если с ATI (AMD) всё ещё до сих пор хорошо (проверял на серии HD7000), то для nVidia ещё проверяется и модель, при чем по PID xor'ом, и определяются только 2 модели - 100 (GeForce2) и 200 (GeForce3), xor всё, что выше 200 отсекает и проверка срабатывает как для 100, поэтому на новых видеокартах nVidia, где PID уже давно перевалили за 1000 применяются все патчи для древней GeForce2, от этого страдает производительность освещения (прорисовка теней) и проявляются глюки с эффектами (игрок обводится чёрной сплошной рамкой вместо прозрачной зелёной по контуру).
И всё бы было хорошо, если бы у nVidia кроме названий видеокарт ещё оставалась и обратная совместимость, но алгоритмы для GeForce3 не совсем корректно работают на новых сериях, и когда я изменил xor так, чтобы проверка опознавала правильно новые видеокарты - игра запустилась на полную, никакого падения производительности, никаких глюков с эффектами, но появились два больших "НО": во-первых, игра начала грузить далеко не офисную видеокарту на 100% (кулер чуть не взмыл в воздух вместе с системным блоком) - что значит, возможно, необходим ограничитель fps, во-вторых - освещение в игре постоянно мерцает. Полного решения для видеокарт nVidia у меня пока-что нет, но я работаю над этим в свободное время.

В качестве бонуса - все доступные ключи запуска игры с пояснениями.
-window - запустить в оконном режиме без рамки (флеш окно)
-fullscreen - полноэкранный режим
-320 - принудительно запустить в разрешении 320х200
-400 - принудительно запустить в разрешении 400х300
-640 - принудительно запустить в разрешении 640х480
-800 - принудительно запустить в разрешении 800х600
-1024 - принудительно запустить в разрешении 1024х768
-1280 - принудительно запустить в разрешении 1280х1024
-1600 - принудительно запустить в разрешении 1600х1400
-nops - отключить шейдеры
-novs - отключить вершинные шейдеры
-gfxvalidate - не работает с патчем, предположительно - проверка способностей видеокарты
-aniso - включить анизотропную фильтрацию (при уже включенной сбрасывает настройку в х2)
-bannp2 - неизвестно, предположительно фикс
-dxtoff - отключить сжатие текстур
-safemode - "безопасный режим", меняет разрешение на 800х600, отключает партиклы, анизотропную фильтрацию, сбрасывает грамму
-nosound - отключить звук
-noai - отключить ИИ
-load - предположительно указать файл профиля
-cfg - предположительно указать файл конфигурации
-gamedir - предположительно указать каталог игры (с файлом nwatch.db)
Опции, связанные с переводом (включить оригинал/перевод, для интерфеса/титров/звука)
-translate
-tr_original
-ntr_original
-od_original
-warn_translation
-warn_original
-snd_original
-snd_nothing

Комментарии

Отправить комментарий

Популярные сообщения