Проблемы в Overwatch 2 — дело рук разработчиков Blizzard
Интересное исследование провел наш соотечественник Алексей Николайчук, разработчик известных утилит MSI Afterburner и RivaTuner, приводим его слова без купюр.
Для разрабатываемого в РФ ПО обеспечение совместимости с разными игровыми проектами заметно усложнилось в условиях банковских санкций, и как следствие, приостановки продаж лицензий ПО у большинства цифровых дистрибьюторов. Но некоторые вендоры ПО в слепом националистическом угаре попытались выпрыгнуть из штанишек, добавив к банковским санкциям и свои собственные региональные ограничения для унтерменшей, то бишь для нас. Одним из таких чудо-вендоров является Blizzard, решивший ограничить доступ и к бесплатному (!) Overwatch 2 (OW2 далее) для новых игроков из России и Белоруссии. Исключение сделали только для тех пользователей из наших регионов, на чьих аккаунтах Battle.net присутствует первая часть Overwatch. Остальных оставили за бортом. По иронии судьбы, именно с Overwatch 2 возникли проблемы с непонятными рывками в игре при активизации оверлея, которые пользователи из других стран просили расследовать и по возможности устранить. Но взаимодействовать с вендором, считающим тебя национально неполноценным, не стану принципиально ни сейчас, ни в будущем, поэтому расследование проблем с Overwatch 2 оставлял за бортом.
Но несколько дней назад, к своему удивлению, обнаружил Overwatch 2 у себя в аккаунте Battle.net. Первоначально порадовался, подумав, что Blizzard одумались и тихо удалили региональные ограничения для их бесплатной игры. Но всё оказалось намного банальнее — система региональной блокировки OW2 просто периодически сбоит, приводя к временной разблокировке продукта у некоторых пользователей и в нашем регионе. И спустя пару часов OW2 так же тихо исчез с моего аккаунта, как и появился на нём. Но несколько часов на то, чтобы заглянуть внутрь Overwatch 2, у меня всё-таки появилось.
Источник проблем с оверлеем (и не только с ним) в Overwatch 2 — собственный античит Blizzard. В игре присутствует система мониторинга внедрения в DXGI библиотеки, но Blizzard не стали заморачиваться с лицензированием сторонних РАБОЧИХ решений вроде EAC или BattlEye и решили изобрести велосипед заново. Велосипед получился не очень, с треугольными колёсами, поэтому эффективность у него так себе. В результате любая попытка внедрения сторонними процессами в DXGI в процессе Overwatch 2 подвешивает игровую логику на несколько миллисекунд, приводя к тем самым рывкам в игровом процессе. RTSS периодически проверяет целостность своей цепочки хуков, в каждой из таких моментов чудесная защитная система Blizzard делает «я есть долго и безрезультатно думать» и подвешивает игру. К сожалению (или к счастью?), надёжность этой защитной системы Blizzard так же высока, как и надёжность их региональной блокировки. Другими словами, она перестаёт работать при некоторых условиях. Некоторые пользователи уже заметили, что все проблемы с RTSS в Overwatch 2 магически исчезают при создании профиля для процесса игры и включении в нём опции «Custom Direct3D support». Эта опция предназначена для возможности внедрения в модифицированные D3D/DXGI рантаймы, для этого она создаёт в прямо в контексте приложения временные вспомогательные D3D/DXGI интерфейсы для определения целевых адресов внедрения «на лету». Именно создание временного DXGI интерфейса ломает поведение и их защитной системы, как следствие нейтрализуя и тормоза. Но такое решение проблемы — явный костыль, это Blizzard рано или поздно исправят. Поэтому более правильным вариантом решения будет создание профиля совместимости для Overwatch 2 со следующим содержимым, который сделает события внедрения в этот процесс гораздо более редкими:
Overwatch.exe.cfg
[Hooking]
CBTFlags = 0
Это приведёт к тому, что для процесса OW2 RTSS на порядок сократит диапазон CBT событий, на которых будет производиться анализ целостности цепочек хуков и попытка внедрения.
Такой профиль уже встроен и в вышедшую не так давно RTSS 7.3.4 Beta 6 Build 27502.