★★★ Novice
февраля 2020
Не запускается Mass Effect-1. При нажатии на иконку лаунчера ничего не происходит. Какое-то время крутится символ загрузки и на этом всё. Никаких ошибок не отображается на экране. Последние обновления Windows-10 в системе установлены.
Запуск в режиме совместимости, а так же запуск от имени администратора положительных результатов не привело.
Сообщение 1 из 15
(3 456 просмотров)
★★★ Novice
марта 2020
@beetle_rus Спасибо, разобрался. Чтобы запустилась игра Mass Effect-1 необходимо приложение Origin так же запускать от имени «Администратора». Еще обратил внимание, что играя в Mass Effect-1, в Origin лучше отключить оверлей, так как, во время батальных сцен игра жутко начинает просидать по FPS и на экране происходит все рывками.
Сообщение 5 из 15
(3 374 просмотров)
Hero
марта 2020
@yojind
Дисковое или цифровое издание?
Сообщение 2 из 15
(3 398 просмотров)
★★★ Novice
Сообщение 3 из 15
(3 388 просмотров)
Hero
марта 2020
@yojind
Дайте отчет MSINFO.
Сообщение 4 из 15
(3 383 просмотров)
★★★ Novice
марта 2020
@beetle_rus Спасибо, разобрался. Чтобы запустилась игра Mass Effect-1 необходимо приложение Origin так же запускать от имени «Администратора». Еще обратил внимание, что играя в Mass Effect-1, в Origin лучше отключить оверлей, так как, во время батальных сцен игра жутко начинает просидать по FPS и на экране происходит все рывками.
Сообщение 5 из 15
(3 376 просмотров)
★★★ Novice
марта 2020
@yojind У тебя заработала игра ? Поможешь если не сложно ?
Сообщение 6 из 15
(3 268 просмотров)
★★★ Novice
марта 2020
Попробую. Опиши проблему.
Сообщение 7 из 15
(3 249 просмотров)
★★★ Novice
марта 2020
@yojind Ну попробуем . Купил через origin ее, скачал вроде всё норм, Нажимаю играть , только перезагрузка origin происходит И все . Пытался и от имени админа зайти и менял совместимости не знаю что делать ещё. Даже отчёт этот какой то сделал только как прикрепить его в сообщении чтобы тут админ увидел может в чем проблема
Сообщение 8 из 15
(3 240 просмотров)
★★★ Novice
марта 2020
@demon123454231 Попробуй следующие действия:
1. Запусти Origin от имени «Администратора»;
2. Запусти само приложение MassEffect от имени администратора, только не запускай его через лаунчер Origin, а запусти его из папки установленной игры.
Сообщение 9 из 15
(3 231 просмотров)
★★★ Novice
марта 2020
— последнее изменение
марта 2020
@demon123454231
В Origin нажми правой кнопкой мыши на Mass Effect (в библиотеке), выбери пункт «Обновить игру» и жди окончание процесса, если не поможет напиши, я тебе подробно распишу что да как дальше делать.
Сообщение 10 из 15
(3 206 просмотров)
Часть 1
В последнее время я работал над собственным форком ME3Explorer [неофициальный редактор игр серии Mass Effect], содержащим множество важных улучшений и даже новые инструменты. Также я поработал над Mod Manager 5.1, который имеет удобные новые функции импорта сторонних модов, однако был отодвинут на второй план, пока я работал над новым фронтендом установщика ALOT.
ALOT Installer с манифестом 2017 года
Для его реализации я сотрудничал с CreeperLava и Aquadran; он должен упростить жизнь конечным пользователям, устанавливающим ALOT и его аддон (сторонние текстуры). Одна из моих проблем заключалась в том, что Origin не запускал игру после установки ALOT, если не запустить его с правами администратора. И поскольку запуск Origin при загрузке невозможно выполнить с правами админа, это очень раздражает. К тому же это влияет на мод MEUITM. Поэтому я начал разбираться, почему это происходит. Дело оказалось в идеальном сочетании реализации защиты, плохого кода и желания упростить жизнь других людей.
Давайте посмотрим, как работает Mass Effect с Origin в неизменённом состоянии под Windows 10.
- Пользователь запускает MassEffect.exe. Файл немедленно запрашивает повышение прав до администраторских.
- В конце образа MassEffect.exe есть код вызова Origin для запуска игры, это некая DRM. Он вызывает Origin, а затем выполняет выход.
- Origin проверяет права пользователя на запуск игры, а затем запускает MassEffect.exe в соответствии с указаниями в реестре (не тот, который вы запустили сами), после чего пытается запустить исполняемый файл.
- Origin не может запустить исполняемый файл, потому что он требует повышения прав. Чтобы DRM работала, она должна иметь возможность взаимодействия с процессом, поэтому она повышает права одного из внутренних сервисов, чтобы он мог общаться с игрой в целях DRM-защиты.
- MassEffect.exe выполняется с правами администратора. Origin обменивается данными с MassEffect.exe и выполнение игры продолжается, как это было бы в случае с DVD-версией.
Всё это работает (через два UAC-запроса) на немодифицированной игре. Но если установить MEUITM или ALOT, то вы больше не сможете запускать игру через Origin как стандартный пользователь. Что за дела?
Сигнатуры файлов
И MEUITM, и ALOT модифицируют исполняемый файл MassEffect.exe, чтобы он мог использовать Large Address Aware. Это позволяет 32-битному процессу Mass Effect использовать до 4 ГБ ОЗУ вместо обычного 32-битного ограничения в 2 ГБ. При модификации флага LAA цифровая сигнатура MassEffect.exe оказывается поломанной — сигнатура используется для проверки того, что файл не модифицирован. После модификации файла сигнатура становится неверной.
Origin при выполнении процесса с повышенными правами проверяет, подписан ли EXE компанией EA и правилен ли он. Если он не подписан EA, то он не повышает права модуля обмена данными DRM. Mass Effect загружается, а затем немедленно закрывается, потому что разблокировка DRM не работает, ведь со стороны Origin ей не с чем общаться, поскольку отказано в повышении прав.
То есть при модификации EXE Origin будет отказываться запускать исполняемый файл игры с повышенными правами. Но нам нужен LAA, поэтому необходимо как-то обойти эту проблему. Наша единственная надежда заключается в том, чтобы помешать MassEffect.exe запускаться с правами администратора. Сначала нужно разобраться, как задан его запуск с правами администратора.
Изучив манифест EXE, я увидел, что он запускается как инициатор вызова — пользователь, запускающий EXE. Это означает, что этот исполняемый файл не должен требовать администраторских прав. Я проверил свои параметры совместимости, там тоже ничего не было. Каким-то образом права повышаются при запуске, но не через сам exe и не из-за моих настроек. В чём же хитрость? В Microsoft Windows Compatibility Database.
mirh (я встречался с ним в кругах любителей моддинга) провёл исследование того, почему Mass Effect вынужден запускаться с правами администратора. Он соответствует критериям базы данных — в ней есть запись для Mass Effect, в которой указано, что нужно всегда принудительно запускать параметры совместимости. Это логично — пользователь не должен конфигурировать параметры, если MS уже знает, какие из них работают (теоретически).
Как видите, для этой игры есть две записи — MassEffect.exe (игра) и загрузчик (который, к сожалению, не включён в версию Origin). Для совместимости включается RunAsHighest (что означает права администратора). Критерии включения таковы:
- EXE имеет название MassEffect.exe
- Название компании в манифесте: BioWare
- Название продукта в манифесте: Mass Effect
- Версия продукта равна или меньше 1.2.0.0.
Эти критерии соответствуют всем известным версиям игры, в том числе, полагаю, и пиратским. Поэтому из-за совпадения всех этих критериев exe принудительно запускается с правами администратора. Это можно легко проверить, переименовав MassEffect.exe, после чего ему не потребуются администраторские права. (Однако Origin будет недоволен).
Исправление
Итак, теперь у нас есть понимание, как это исправить, но почему в базе данных есть эта запись? Поскольку Demiurge/Bioware не поддерживают идею Least User Access (LUA), Mass Effect при самом первом запуске требует прав администратора для выполнения записи в ключ реестра HKEY_LOCAL_MACHINESOFTWAREWOW6432NODEAGEIA Technologies. Если этот ключ не существует, он пытается создать его — без прав администратора у него нет для этого доступа, и игра просто вываливается. Похоже, в этом ключе содержится некая информация о том, что сейчас называется PhysX. Вероятно, запись в реестр мог внести и установщик игры, но разработчики реализовали это в самой игре.
Именно поэтому Microsoft вынуждает игру всегда запускаться с правами администратора, из-за этого единственного пункта. Это логично — если заставить её запускаться под администратором, но пользователю не нужно будет беспокоиться о параметрах совместимости. Однако из-за этой комбинации трёх проблем (LAA портит сигнатуру, MS принуждает запускаться игру с правами администратора, Origin отказывается работать с процессами с повышенными правами, имеющими сломанную сигнатуру EA) Mass Effect не запускается с Origin и LAA.
Как же нам это исправить? Просто изменим в EXE название продукта с Mass Effect на Mass_Effect. Серьёзно, это всё. Проверка критериев не срабатывает, игре больше не нужны права администратора и Origin доволен (если не считать постоянного ворчания из-за обновлений). В MEUITM и ALOT Installer мы добавили код, создающий ключ реестра с правами записи для текущего пользователя, поэтому если Mass Effect нужно создать эти ключи (допустим, если его никогда не запускали), то игра будет довольна.
Часть 2
Mass Effect на PC: что ожидать от порта с консолей середины 2000-х
Если вы не знали, Mass Effect вышла на PC в 2008 году, она была портирована с Xbox 360 студией под названием Demiurge, которая также разработала Pinnacle Station для Mass Effect. Это очень посредственный порт, не особо хорошо переживший смену времён. Он приемлем как игра, но имел множество проблем даже на момент выхода. LOD частиц работали неправильно, LOD текстур считывались в обратном порядке, параметры ini случайным образом сбрасывались на значения по умолчанию — проблем было довольно много. Но не было ничего, что бы полностью ломало игру.
Ну, или типа того. Была одна проблема, но вызванная не конкретно самой Mass Effect. Серьёзная проблема заключается в том, что Mass Effect требует для запуска прав администратора потому что Demiurge, похоже, считала, что все должны запускать игру как администратор — это вполне могло быть приемлемым, если бы игра разрабатывалась во время, когда была только Windows XP, однако на момент выпуска игры уже больше года существовала Windows Vista. Но даже Windows XP имела концепцию LUA (Least User Access) с разделёнными аккаунтами пользователей. Подробнее об этом можно прочитать в первой части статьи.
Ух ты, PhysX, моя любимая библиотека физики!
Наверно, у меня небольшая неприязнь к этому SDK.
Mass Effect для PC работает на немного модифицированной версии Unreal Engine 3, который был выпущен примерно в конце 2006. По словам некоторых бывших разработчиков из BioWare, эта версия Unreal Engine тогда была немного сыроватой, если не сказать больше. Согласно рассказам этих разработчиков, было очень сложно работать с ней, потому что Epic Games сосредоточенно работала над Gears of War и не уделяла особо много времени своим партнёрам, тоже использующим движок.
Для расчёта физических взаимодействий Unreal Engine 3 использует PhysX, поэтому Epic Games создала dll, реализующую интерфейс между PhysX и форматами данных Unreal Engine через файл под названием PhysXLoader.dll, который загружает библиотеки PhysX с обеих сторон. PhysX — это библиотека симуляции физики, приобретённая компанией AGEIA Technologies в середине 2000-х перед тем, как саму AGEIA в начале 2008 года купила Nvidia. Возможно, вы помните карты Physics Processing Unit (PPU) — они использовали PhysX до того, как Nvidia похоронила эту идею.
PhysXLoader.dll, PhysXCore.dll и NxCooking.dll составляют библиотеки PhysX для Mass Effect.
Все три части Mass Effect используют PhysX, однако Mass Effect 2 и Mass Effect 3 используют установленную в систему PhysX, а Mass Effect — локальную PhysX игры. Кроме того, в Mass Effect 2 и Mass Effect 3 применяется «современная» версия PhysX, а не устаревшая, которая была выпущена AGEIA. После приобретения Nvidia изменила некоторые пути внутри библиотеки, отделив устаревшие части от «современных» версий.
Но, похоже, это не мешает программе удаления старой PhysX удалять файлы/ключи реестра современной PhysX, поэтому в процессе тестирования моего исправления другие копии Mass Effect 2/3 не работали даже после установки «современного» дистрибутива PhysX. Очень бесит, что BioWare не смогла просто установить библиотеку на 8 МБ вместе с игрой — в комплекте с игрой всё равно поставляется установщик PhysX, то есть это даже не экономило место!
Ну да ладно…
Проблема PhysXLoader.dll компании Epic Games в том, что она может загружать PhysXCore.dll локально или из установленной в систему версии
Что? Как это может быть проблемой? Разве нельзя просто загружать локальную dll, и если она не существует, загружать системную? Почему это вообще проблема?
Вы не поверите, сколько фейспалмов я испытывал в процессе создания этого исправления.
При запуске Mass Effect записывает в реестр Windows HKEY_LOCAL_MACHINE два значения:
REG_BINARY HKLMSOFTWAREAGEIA Technologies enableLocalPhysXCore [mac-адрес, 6 байт]
REG_DWORD HKLMSOFTWAREAGEIA Technologies EpicLocalDllHack [1]
*Mass Effect — это 32-битная программа, поэтому на 64-битной системе она выполняет запись в HKLMSOFTWAREWOW6432NodeAGEIA Technologies (на случай, если вы захотите проверить сами).
Запомните эти значения реестра, они будут важны в дальнейшем!
Именно из-за этих значений реестра Mass Effect требует административных прав. В первой части мы говорили о том, почему этих операций было достаточно, чтобы Microsoft внесла Mass Effect в базу данных совместимостей, заставляющую игру запускаться под администратором при совпадении определённых критериев исполняемого файла. Мы обошли эту проблему, изменив критерии так, чтобы они больше не совпадали.
Нам нужно изменить исполняемый файл, чтобы включить Large Address Aware, благодаря чему игра сможет загружать текстуры повышенного разрешения без переполнения памяти, поэтому нет никакого способа избежать порчи сигнатуры. Это, в свою очередь, привело к тому, что Origin больше не мог запускать игру, потому что он не может повышать права игры без правильной сигнатуры EA. Но если игра не имеет возможности записывать эти ключи реестра при запуске, то она может вылететь…
Итак, это само по себе уже длинная цепь проблем, но мы обошли необходимость прав администратора в Mass Effect, просто дав аккаунту пользователя разрешение на этот конкретный ключ реестра AGEIA Technologies. Это позволит процессу игры записывать нужные ему значения. Я предполагал, что игра вылетает, потому что ей запрещался доступ для записи, а Demiurge не озаботилась написать try/catch вокруг кода записи в реестр.
Вероятно, не стоит называть значения реестра «hack»
Наше решение этой проблемы не изменило поведения Mass Effect — значения, которые игра хотела записать в реестр, тем или иным способом будут в него записаны, поэтому мы просто позволяем ей делать то, что она всегда делала, только без прав администратора. На самом деле, никаких изменений в поведении приложения не было.
Два значения реестра, записываемые Mass Effect.
Модератор PC Gaming Wiki под ником mirh долгие годы бил тревогу о том, что мы каким-то образом ломали другие игры в ALOT Installer, даже несмотря на то, что наше приложение никак не меняла способ записи Mass Effect этих значений, поэтом наше изменение никак не может сломать другие игры.
Спустя много месяцев он написал довольно подробное обоснование того, почему ALOT Installer (то есть на самом деле это была Mass Effect) ломает другие игры: находящийся в реестре enableLocalPhysXCore используется другими играми, работающими с PhysXLoader.dll. Когда я писал версию V4 установщика ALOT Installer, то сказал mirh, что серьёзнее рассмотрю его идею решения, не позволяющего ломать другие игры, хотя тогда я ещё не понимал, как ключ реестра с MAC-адресом системы может ломать другие игры и зачем вообще используется MAC-адрес.
Похоже, mirh был уверен, что эта enableLocalPhysXCore позволяет Mass Effect использовать PhysXCore.dll/NxCooking.dll в локальной папке, а не загружаться из установленного дистрибутива PhysX. Mass Effect не устанавливает дистрибутив PhysX, поэтому не может полагаться на её существование и вынуждена использовать локальные библиотеки.
Держитесь, теперь начинается нечто совершенно тупое:
MAC-адрес, сохраняемый в реестр файлом MassEffect.exe, считывается библиотекой PhysXLoader.dll и сравнивается с MAC-адресом вашей системы, чтобы определить, нужно ли загружать библиотеки PhysX из локальной папки или из системной.
Какой MAC-адрес?
¯_(ツ)_/¯
Итак, Mass Effect работает следующим образом:
- В самом начале процесса загрузки MassEffect.exe MAC-адрес вашей системы считывается и записывается в реестр как enableLocalPhysXCore (вместе с EpicLocalDllHack)
- MassEffect.exe загружает PhysXLoader.dll
- PhysXLoader.dll считывает значение enableLocalPhysXCore и сравнивает с ним MAC-адрес вашей системы
- Если они совпадают, она использует PhysX из локальной папки, если нет, то версию дистрибутива PhysX из системы
Да, вы всё поняли правильно.
Оказалось, что другие игры, например, Mirror’s Edge, имеют PhysXLoader.dll, которая тоже считывает эти значения (так как они основаны на одинаковом коде), но в этих играх нет локальных библиотек PhysX. Поэтому эти игры загружаются, видят enableLocalPhysXCore и пытаются загрузить локальную библиотеку, терпят неудачу и игра не запускается. Эту информацию я получил от mirh — сам я не тестировал другие игры, поломанные этим значением реестра.
Обычно этого значения не существует, и игра должна использовать PhysX. Это поведение можно протестировать в Mass Effect, запретив доступ на запись к ключу реестра, удалив значения и установив старую версию PhysX — она будет использовать системные библиотеки. Если системная PhysX не установлена, приложение не загрузится — именно поэтому мы изначально разрешали записывать эти ключи Mass Effect, в противном случае бы казалось, что установщик портит Mass Effect, хотя на самом деле виновата ужасная реализация со стороны Epic Games.
Сложно представить сценарий, при котором это было бы хорошей идеей.
Если вы реализуете интерфейс с библиотекой, имеющей экспорт, который можно вызвать для инициализации/загрузки PhysX SDK, то разве нельзя просто передать ей булево значение, приказывающее ей загрузиться локально? Почему она вообще не начинает с локального поиска? И что за дела с MAC-адресом? Почему он находится в реестре, где ведёт себя как глобальный параметр???
Всё это выглядит как ужасные архитектурные решения, а после дизассемблирования PhysXLoader.dll кажется, что всё это и есть ужасные архитектурные решения. Давайте внимательнее присмотримся к Mass Effect и рассмотрим процесс её исправления от начала до конца.
Находим начальную точку
Предупреждение: я совершенный новичок в реверс-инжиниринге. Я создавал ассемблерные моды для игр Megaman Battle Network (и написал неплохое руководство по созданию хуков), проектировал моды на ActionScript2 P-Code и работал с байт-кодом UnrealScript, но никогда не углублялся в ассемблер x86. Я множество раз открывал IDA и могу находить нужные мне вещи, но никогда не понимал их. Уверен, что для более опытных реверс-инженеров этот процесс намного проще.
Сложно получать удовольствие от реверс-инжиниринга, если почти ничего не понимаешь в том, с чего начать. Это режим графа IDA, который очень помогает визуализировать ассемблер, но его всё равно очень сложно понять в большом двоичном файле на 20 МБ.
Недавно (пару лет назад), Агентство национальной безопасности США (АНБ) выпустило Ghidra — бесплатный тулкит для реверс-инжиниринга с открытыми исходниками, который может отреверсировать ассемблерный код в довольно читаемый код на C; его бесконечно проще читать, чем ассемблерные графы IDA. И IDA, и Ghidra имеют свои сильные стороны: в IDA есть отладчик, позволяющий пошагово пройти по ассемблеру и посмотреть, какие пути кода будут выполняться, а также она может находить Unicode-строки (которые используются в Mass Effect ). Ghidra может рекомпилировать ассемблерный код из его декомпилированного кода на C (иногда), имеет преобразователь из ассемблера в C (простите, не знаю его названия), обладает открытыми исходниками и работает на куче платформ и со множеством двоичных форматов.
Ghidra — это отличный инструмент для новичков в реверс-инжиниринге, поскольку она позволяет просматривать ассемблер как код на C, хоть и без имён переменных.
Итак, в начале я знал, что Mass Effect записывает enableLocalPhysXCore и EpicLocalDllHack. Давайте начнём с изучения MassEffect.exe, найдём эти строки и посмотрим, что на них ссылается. Открыв шестнадцатеричный редактор, я знал, что это unicode-строки, поэтому я буду искать их в IDA, потому что Ghidra, похоже, не поддерживает эту функцию.
Окно IDA Strings. Я наконец узнал, что эта полезная вкладка открывается по Shift + F12.
Поискав внутри окна IDA Strings строку enableLocalPhysXCore, я её нашёл. При двойном нажатии программа переносит нас к области данных исполняемого файла, в которой она задаётся:
На изображении вы видите, где задаются enableLocalPhysXCore, EpicLocalDLLHack и даже ключ реестра, все они находятся прямо рядом друг с другом.
Выше мы видим задание строк, которые, похоже, связаны с нашей целью. Над заданием текста мы видим DATA XREF, то есть что-то напрямую ссылается на эти данные — вероятно, записывает их. Давайте дважды щёлкнем на XREF и посмотрим, куда это нас отправит.
Режим IDA View, а не Graph View.
Изучив это, мы видим, что здесь записывается RegSetValueExW. Я очень слабый разработчик на C, поэтому после гугления я понял, что это подготовка стека для вызова на C метода из Windows API, что можно увидеть по отображаемому IDA названию параметра, например, lpData и dwType. Мы знаем, что значению enableLocalPhysXCore присваивается MAC-адрес системы. Давайте посмотрим, где выполняется это присваивание. Чтобы выглядело логичнее, переключимся на режим графа.
В третьем блоке мы видим, что eax записывается в стек для lpData, а также записывается в стек для этого загадочного вызова «sub_10929393». В этой подпроцедуре нет других вызовов с заданными названиями, поэтому вероятно именно там получается MAC. Давайте перейдём к ней.
Похоже, это какая-то подпроцедура-обёртка, или так это трактовала IDA, но она просто указывает на другую подпроцедуру. Давайте перейдём к ней.
Эта подпроцедура содержит названия, взятые из Windows API, и они показывают нам, что это как-то связано с сетью. Нас не волнует MAC-адрес, но давайте зададим название этой подпроцедуре. Назовём её GetMacAddress. Вернёмся к исходной подпроцедуре, которую изучали, и тоже переименуем её — похоже, это что-то типа SetupPhysXSDKLoad, поэтому назовём её так.
Это относительно небольшая подпроцедура, всё, что она делает — это производит запись двух вышеупомянутых значений реестра. Кроме ранних этапов загрузки двоичного файла, на эту подпроцедуру больше нет других ссылок, поэтому на этом этапе я вполне уверен, что исполняемый файл Mass Effect никогда не считывает эти значения, и пока я не знаю, что же делает EpicLocalDllHack.
Вскрываем PhysXLoader.dll
Теперь мы знаем, что исполняемый файл Mass Effect никогда не считывает этот ключ; значит, это делает одна из dll. Здесь я этого не показал, но в ProcMon (отличном инструменте для моддинга и подобных вещей в целом) я вижу, что значение реестра считывается непосредственно перед загрузкой библиотеки в процессе MassEffect.exe и перед загрузкой локальной dll. Я увидел, что после того, как запретил Mass Effect доступ на запись в эту папку, он считывает системную библиотеку, и игра не загружается, если не установлена системная версия старой PhysX.
Первой из dll загружается PhysXLoader, после которой загружается PhysXCore.dll, поэтому логично будет анализировать её. Давайте откроем её в IDA и посмотрим, где там используется enableLocalPhysXCore. Также я открою эту dll в Ghidra, чтобы лучше понимать, что происходит. Проделав ту же последовательность действий по поиску мест использования строки enableLocalPhysXCore, мы находим подпроцедуру:
Подпроцедуру читать не так уж сложно, особенно в режиме графа — мы видим, что есть цикл, идущий из левого блока в блок над ним. Тем не менее, всё это не так просто читать для новичка, поэтому давайте посмотрим, как это выглядит в Ghidra. Я использую адрес этой подпроцедуры, чтобы перейти к ней в Ghidra (0x10001640).
Это даёт нам чуть больше понимания происходящего — вызовов подпроцедуры, цикла, возвращаемого подпроцедурой типа. Мы можем находить элементы в одном из инструментов и помечать их в обоих, чтобы разобраться в том, что происходит. Мы сразу же видим, что есть вызов подпроцедуры, передающий путь к ключу реестра, название значения, а также две переменные. В цикле видим сравнение 6 элементов под индексу для определения их равенства.
Чтобы немного сократить пост, скажу, что эта подпроцедура поиска в реестре и в самом деле является простой обёрткой для получения информации из реестра. После реверс-инжиниринга (который в основном заключался в сопоставлении входящих данных подпроцедуры с тем, чем они являются в вызовах windows api) выяснилось, что её параметры являются подключом, именем значения, возвращаемым указателем на данные и возвращаемым размером данных.
Мы видим, что в подпроцедуре есть цикл, выполняемый шесть итераций и проверяющий равенство каждых значений. Воспользовавшись полученной информацией, мы можем переименовать некоторые переменные, чтобы лучше представлять, что делает подпроцедура.
Мы знаем, что Mass Effect записала в реестр 6-байтный mac-адрес, и что PhysXLoader.dll просто считала это значение из реестра, и что подпроцедура сравнивает что-то побайтно 6 раз. Логически мы можем предположить, что local_14 с показанного выше изображения — это MAC-адрес. Зная это, мы также можем предположить, что FUN_10001580 получает MAC-адрес и задаёт его, поэтому мы переименуем ещё несколько элементов подпроцедуры.
Похоже, что вызов подпроцедуры не выполняет саму загрузку, он просто проверяет ключ и совпадение MAC-адреса. Зная название и информацию о действиях этого ключа, мы можем дать этой подпроцедуре обоснованное название ShouldUseLocalPhysX. Однако сравнение декомпиляции этой подпроцедуры в IDA и Ghidra приводит к немного различающимся результатам, и Ghidra, похоже, ошибается:
IDA показывает, что al присваивается 1 при нормальном выходе из цикла и 0 (xor al,al), если какие-то байты не совпадают. Ghidra этого не показывает, на самом деле она показывает, что возвращаемый тип равен void, что кажется ошибкой.
Немного погуглив информацию для этой части поста, я узнал, что EAX обычно используется как регистр возврата для x86, а регистр al — это нижние 8 бит EAX. Я не имею достаточно опыта в Ghidra, чтобы знать, как сменить тип сигнатуры для этого вида возвращаемых нижних 8 битов; возможно, Ghidra пока этого не поддерживает, или я упустил какую-то настройку, которую нужно использовать.
Дизассемблированная подпроцедура, вызывающая ту, которая ищет enableLocalPhysXCore.
Однако если мы взглянем на ссылки на эту подпроцедуру (их две — скорее всего, по одной на каждую библиотеку) в IDA и Ghidra, то увидим, что при вызове ShouldUseLocalPhysX она проверяет, не равен ли al нулю. Если он не равен нулю, то она загружает локальную PhysXCore.dll. Если равен, то она ищет библиотеку через системную установку PhysX, которая находится по ещё одному значению реестра в ключе AGEIA Technologies под названием PhysXCore Path. На самом деле это нам неинтересно, потому что мы хотим заставить PhysX всегда загружаться локально, вне зависимости от значения enableLocalPhysXCore.
Посмотрев на другую перекрёстную ссылку, можно и в самом деле увидеть, что она загружает библиотеку NxCooking, используя ShouldUseLocalPhysX таким же образом:
Вооружённые этим знанием, мы можем решить эту проблему несколькими способами. Я много занимался моддингом функций в байт-коде UnrealScript, который очень долгое время нельзя было увеличивать и уменьшать в размере, поэтому нахождение способов успешного или неуспешного прохождения логических проверок без изменения размера скрипта оказалось интересной задачей.
Например, если мне нужно было удалить проверку if
, то мне приходилось находить способ изменить сравнения таким образом, чтобы они всегда были true
или false
. Один из способов возврата false
проверкой if
заключается в изменении ссылок на объект и токенов байт-кода сравнений, чтобы создать условный оператор вида if (objectA != objectA)
, всегда возвращающий false
(если они не равны null
). Мне нужно найти способ, чтобы в ShouldUseLocalPhysX всегда получался результат true
.
Когда я писал таблицу символов для Megaman Battle Network 3, то научился всегда комментировать всё, что узнал об дизассемблированном коде. Я работал часами, совершенно забывая, что уже сделал, но мог вернуться к своим комментариям, и снова во всём разобраться.
Иногда мои символы/комментарии на отдельных строках, например, названия подпроцедур или таблицы указателей, встречались в других подпроцедурах, давая мне полезный контекст, которого бы я иначе не увидел. Ниже я прокомментировал и пометил несколько элементов, упрощающих чтение этой подпроцедуры.
Патчим худшую в мире проверку boolean
Нам нужно убедиться, что выполнение всегда доходит до нижнего левого блока, при этом мы не должны касаться стека (который запросто может поломать всю программу). Строго говоря, мы можем переписать часть этой подпроцедуры, но мне хотелось бы вносить здесь минимальные изменения. По сути, нам нужно гарантировать, что переход в нижний правый блок никогда не происходит.
В x86 есть удобная однобайтная команда nop
, которая в буквальном смысле не делает ничего, но занимает один байт. Также удобно то, что команда перехода в этот блок занимает 2 байта и состоит из 0x75 (jnz rel8) и 0x19 (относительного смещения).
[ЗАБАВНАЯ ИСТОРИЯ] Увидев это однобайтное смещение, я вспомнил времена, когда я работал над моддингом Megaman Battle Network. Тогда от команд перехода/ветвления зависела возможность моддинга отдельных частей ROM. При написании хука (перенаправляющего счётчик программы к вашему собственному коду) вам нужно найти команду перехода или ветвления, относительное смещение которой можно модифицировать так, чтобы оно указывало на ваш код. Затем нужно записать регистры в стек, запустить код, а затем вернуть стек обратно, чтобы подпроцедура выполняла выход правильным образом.
ARM (а конкретнее THUMB) имеет ограниченные команды ветвления, использующие в качестве относительных смещений разные размеры, которые не всегда могли перейти в любую точку ROM из-за своего местоположения в ROM. Так как игра была написана на ассемблере, находить свободное место временами было сложновато — иногда приходилось соединять в цепочку несколько хуков, пока не удавалось переместить счётчик программы в свободную область, чтобы писать новый ассемблерный код. Этот jnz использует опкод 0x75, что даёт jnz rel8, то есть он может переходить только на расстояние до 128 байт (или, если переход возможен только вперёд, на 255?), что было бы настоящей проблемой, если бы я выполнял моддинг ассемблера так же, как мы работали раньше, когда не было мощных инструментов наподобие IDA и Ghidra. [КОНЕЦ ЗАБАВНОЙ ИСТОРИИ]
После замены nop
-ами этого jnz
наша подпроцедура ShouldUseLocalPhysX выглядит так:
Теперь в блок условия неравенства попасть нельзя. «Проверка» по-прежнему выполняется, но она никогда не возвращает false
. Будет всегда использоваться локальное ядро PhysX.
Недостатки
Файл PhysXLoader.dll подписан Epic Games, поэтому это очевидно разрушает сигнатуру, ведь мы модифицировали файл. Игра не проверяет сигнатуры при загрузке, поэтому это не проблема. Некоторые антивирусы могут жаловаться на сломанные сигнатуры, но со временем обычно перестают. Кроме написания патча внутри памяти (как мы делаем это в загрузчике мода asi), нам нужно будет модифицировать двоичный файл библиотеки.
Получившееся поведение
Благодаря пропатченной dll игра работает как со значением реестра, так и без него, то есть Mass Effect для запуска больше не требуются права администратора. Дизассемблирование этого кода сопровождалось сильной руганью, потому что я не мог смириться с тупостью реализации этой проверки — проверяется не только значение в реестре, но и MAC-адрес. В процессе отладки и пошагового выполнения команд я на самом деле сломал игру, потому что включил VPN и мой MAC-адрес сменился.
Этот процесс оказался хорошим опытом учёбы, я намного больше узнал о Ghidra и IDA, а также о других проблемах в PC-версии Mass Effect. Этот патч автоматически применяется в процессе установки ALOT Installer, поэтому пользователям не придётся беспокоиться о задании ключа enableLocalPhysXCore. Также мы модифицировали исполняемый файл Mass Effect для записи значения enableLocalPhysXCor_, чтобы наши пропатченные версии не записывали значение, портящее игры. Ванильные исполняемые файлы Mass Effect всё равно портят другие игры, но защита программ от криво написанных загрузчиков PhysX уже не входит в мои задачи.
О, а что насчёт EpicLocalDllHack? Ну, оно в буквальном смысле ничего не делает. Абсолютно бесполезное значение, оно никогда не считывается. Единственная возможная причина его существования, которую я могу придумать — сохранение ключа реестра на случай деинсталляции дистрибутива PhysX, потому что оно не находится в списке значений дистрибутива PhysX, но это всё только догадки.
Разве добавление параметра «PreferLocalSDK» для PhysXLoader.dll — это слишком сложно для Epic Games?
Mass Effect: Legendary Edition — ремастер-сборник культовой ролевой серии Mass Effect, в состав которого входят Mass Effect, Mass Effect 2 и Mass Effect 3, вместе со всеми дополнениями. Вместе с новыми текстурами и моделями пришли новые баги и глюки. В этом гайде мы собрали для вас самые распространенные проблемы Mass Effect Legendary Edition, чтобы вы могли их самостоятельно устранить и получить максимальное удовольствие от геймплея.
К сожалению, в играх бывают изъяны: тормоза, низкий FPS, вылеты, зависания, баги и другие мелкие и не очень ошибки. Нередко проблемы начинаются еще до начала игры, когда она не устанавливается, не загружается или даже не скачивается. Да и сам компьютер иногда чудит, и тогда в Mass Effect Legendary Edition вместо картинки черный экран, не работает управление, не слышно звук или что-нибудь еще.
Первое, что стоит сделать при возникновении каких-либо проблем с Mass Effect Legendary Edition, это свериться с системными требованиями. По-хорошему делать это нужно еще до покупки, чтобы не пожалеть о потраченных деньгах.
Минимальные системные требования:
- Операционная система: Windows 10
- Процессор: Intel Core i5 3570 или AMD FX-8350
- Оперативная память: 8 ГБ
- HDD: 120 ГБ на жестком диске
- Видеокарта: GTX 760 или Radeon 7970 / R9280X
Рекомендуемые системные требования:
- Операционная система: Windows 10
- Процессор: Intel Core i7-7700 или AMD Ryzen 7 3700X
- Оперативная память: 16 ГБ
- HDD: 120 ГБ на жестком диске
- Видеокарта: GTX 1070 или Radeon Vega 56
Не запускается игра и появляется чёрный экран
В обновлённой версии Mass Effect Legendary Edition после выбора любой из трёх частей серии игра не запускается. После появления чёрного экрана игрока снова возвращает в меню выбора. Для решения проблемы необходимо выполнить несколько действий. Прежде всего включить Юникод (UTF-8) в настройках региона. Для этого необходимо сделать следующее:
- Щёлкаем правой кнопкой мыши на текущее время в правом нижнем экране и нажимаем «Настройка даты и времени».
- В левом меню открываем «Регион» и используем «Дополнительные параметры даты, времени, региона».
- В открывшемся окне нажимаем на «Региональные стандарты».
- Нажимаем на пункт «Изменить язык системы» и устанавливаем галочку в «Бета-версия: Использовать Юникод (UTF-8) для поддержки языка во всём мире».
- Нажимаем «ОК» для сохранения настроек».
Также рекомендуется проверить имя пользователя системы. Оно должно быть на английском языке без использования каких-либо символов. В некоторых случаях помогает отключение защиты папок OneDrive. Для этого выполните несколько простых действий:
- Откройте OneDrive и перейдите в настройки приложения.
- Переходим во вкладку «Резервное копирование» и открываем окно «Управление резервным копированием».
- Нажимаем на «Остановить резервное копирование» у всех отображающихся папок и нажимаем «ОК» для сохранения изменений.
Также рекомендуется отключить контролируемый доступ к папкам. Для этого:
- Откройте «Параметры» и перейдите в раздел «Обновление и безопасность».
- Нажмите на «Безопасность Windows» и используйте пункт «Защита от вирусов и угроз».
- Нажимаем внизу окна на «Управление защитой от программ-шантажистов» и снимаем флажок с пункта «Контролируемый доступ к папкам».
Помимо использования правильных настроек Windows необходимо проверить работоспособность сторонних антивирусов. Некоторые мощные программы защиты могут блокировать доступ к файлам игры. В этом случае лучше выключить антивирус перед запуском игры. Также отключите Bluetooth на компьютере и удалите аудиоприложение Nahimic audio при его наличии.
Как изменить разрешение
Если не получается изменить разрешение в настройках игры, то необходимо прописать некоторые значения в файлах игры. Проходим по пути: steamapps/common/Mass Effect Legendary Edition/GameME1 и открываем файлы GamerSettings.ini и BIOEngine.ini.
В GamerSettings.ini находим строки ResX и ResY и вписываем необходимое разрешение. Для примера взято разрешение 2560х1440:
ResX=2560 ResY=1440
В BIOEngine.ini изменяем следующее:
StartupResolutionX=2560
StartupResolutionY=1440
ResX=2560
ResY=1440
Не запускается и вылетает (сбои) игра на Xbox
Исправить сбой при запуске игры можно при правильном использовании игровых аксессуаров. Для этого запустите игру по указанной ниже инструкции:
- Отключите все аксессуары Xbox от сети.
- Выключите беспроводную гарнитуру или используйте проводные наушники.
- Запустите Mass Effect Legendary Edition.
- Выберите желаемую версию игры.
- На экране с заголовком игры подключите все необходимые аксессуары обратно.
Выполнение описанных выше шагов не является идеальным решением проблемы. Представлены одни из наиболее простых действий, которые помогут запустить игру без сбоев. Разработчики уже знают о проблеме, поэтому работают над её скорейшим исправлением.
Как запустить игру при использовании VPN
Mass Effect Legendary Edition некорректно работает при использовании VPN. Если применение VPN необходимо, то для успешного запуска игры необходимо сделать следующее:
- Отключитесь от VPN и попробуйте запустить игру.
- При успешном входе в игру перезапустите компьютер и снова проверьте работоспособность игры.
- Переустановите VPN и отключите в диспетчере задач автоматическую загрузку программы при включении компьютера.
- Перезагрузите систему и запустите VPN вручную.
При включении V-Sync блокируется значении FPS на 60 кадрах в секунду
В Mass Effect Legendary Edition для получения отключения блокировки частоты кадров необходимо выключить функцию V-Sync. Стоит учитывать, что все внутриигровые видеоролики показываются при частоте в 60 кадров в секунду. В остальное время значение FPS будет выше.
Очень низкий FPS на PC
Данная проблема связана с оверлеями и подключёнными беспроводными устройствами. Рекомендуется отключить все используемые оверлеи.
Для отключения оверлея в Origin необходимо сделать следующее:
- Наводим мышку на имя пользователя в левом нижнем углу окна и нажимаем на «Настройки приложения».
- Выбираем пункт «Дополнительно» и открываем «Внутриигровой экран Origin».
- Снимаем флажок с пункта «Включить внутриигровой экран Origin» и выходим из настроек.
Для отключения оверлея NVIDIA необходимо выполнить следующие шаги:
- Открываем приложение NVIDIA GeForce Experience и нажимаем на шестерёнку в правом верхнем углу окна рядом с именем пользователя.
- Снимаем флажок с пункта «Внутриигровой оверлей» и выходим из настроек.
Для отключения оверлея в Steam нужно сделать следующее:
- Переходим в настройки программы и выбираем пункт «В игре».
- Снимаем галочку с пункта «Включить оверлей Steam в игре» и нажимаем «ОК» для сохранения изменений.
Помимо выключения игровых оверлеев необходимо отключить любые беспроводные периферийные устройства перед запуском игры. После загрузки игры можно подключить устройства и оверлеи обратно. Также в некоторых случаях потребуется установить режим производительности в параметрах приложения. Для этого необходимо выполнить несколько простых шагов:
- Нажимаем правую кнопку мыши и открываем «Параметры экрана».
- Перемещаемся в самый низ окна и переходим в «Настройки графики».
- Выбираем «Классическое приложение» и нажимаем «Обзор».
- Находим исполняемый exe-файл игры и выбираем его.
- Нажимаем «Параметры».
- Выбираем «Высокая производительность» и используем клавишу «ОК» для сохранения настроек.
Не работает игра после загрузки на PlayStation 4
В редких случаях после загрузки игры отображается звёздное небо с небольшой частью корабля. Для исправления ошибки рекомендуется перезапустить консоль и переустановить игру.
Вылет (сбои) Mass Effect Legendary Edition на PC
Для исправления ошибки чаще всего достаточно отключить мониторинг GPU и CPU, однако в некоторых случаях этих действий будет недостаточно. Ниже указаны все основные шаги, которые помогут решить проблему вылетов в игре:
- Отключите все программы мониторинга GPU/CPU.
- Отключите любой разгон видеокарты.
- Отключите Оверлей Steam и Origin. Для этого воспользуйтесь инструкцией ниже в соответствующем разделе. Если игра была куплена через Steam, то полностью отключить оверлей Origin можно только через удаление или переименование соответствующего файла. Для этого перейдите по пути Program Files (x86)/Origin и удалите файл «igo64.dll» или переименуйте его в «igo64.bak».
- Отключить V-Sync.
- Запустите игру в полноценном полноэкранном режиме и не используйте оконный режим без полей.
- Проверьте целостность файлов в Steam. Для этого перейдите в свойства игры, откройте раздел «Локальные файлы» и нажмите на клавишу «Проверка целостности игровых файлов».
Также для решения проблемы желательно добавить игру в список исключений защитника Windows. Для этого:
- Перейдите в «Параметры» и откройте раздел «Обновление и безопасность».
- Выберите в списке слева «Безопасность Windows» и нажмите на пункт «Защита от вирусов и угроз».
- В разделе «Параметры защиты от вирусов и других угроз» выбираем пункт «Управление настройками».
- Листаем окно вниз и в разделе «Исключения» используем кнопку «Добавление или удаление исключений».
- В открывшемся окне нажимаем на клавишу «Добавить исключение», щёлкаем на «Папка» и выбираем путь до папки с файлами Mass Effect Legendary Edition.
Также игра может вылетать на рабочий стол из-за конфликта между Steam и Origin, поэтому желательно выключить опцию «Оставаться в системе» в настройках Origin. Перед запуском игры через Steam необходимо выйти из Origin, а также отключить функцию автоматического входа Windows в Origin при запуске компьютера.
Mass Effect Legendary Edition не скачивается. Долгое скачивание. Решение
Скорость лично вашего интернет-канала не является единственно определяющей скорость загрузки. Если раздающий сервер работает на скорости, скажем, 5 Мб в секунду, то ваши 100 Мб делу не помогут. Если игра совсем не скачивается, то это может происходить сразу по куче причин: неправильно настроен роутер, проблемы на стороне провайдера, кот погрыз кабель или, в конце концов, упавший сервер на стороне сервиса, откуда скачивается игра.
Mass Effect Legendary Edition не устанавливается. Прекращена установка. Решение
Перед тем, как начать установку Mass Effect Legendary Edition, нужно еще раз обязательно проверить, какой объем она занимает на диске. Если же проблема с наличием свободного места на диске исключена, то следует провести диагностику диска. Возможно, в нем уже накопилось много «битых» секторов, и он банально неисправен?
В Windows есть стандартные средства проверки состояния HDD- и SSD-накопителей, но лучше всего воспользоваться специализированными программами. Но нельзя также исключать и вероятность того, что из-за обрыва соединения загрузка прошла неудачно, такое тоже бывает.
Mass Effect Legendary Edition не запускается. Ошибка при запуске. Решение
Mass Effect Legendary Edition установилась, но попросту отказывается работать. Как быть? Сначала проверьте, выдает ли игра какую-нибудь ошибку после вылета? Если да, то какой у нее текст? Возможно, она не поддерживает вашу видеокарту или какое-то другое оборудование? Или ей не хватает оперативной памяти? Помните, что разработчики сами заинтересованы в том, чтобы встроить в игры систему описания ошибки при сбое. Им это нужно, чтобы понять, почему их проект не запускается при тестировании.
Обязательно запишите текст ошибки. Если вы не владеете иностранным языком, то обратитесь на официальный форум EA Games. Также будет полезно заглянуть в крупные игровые сообщества.
Если Mass Effect Legendary Edition не запускается, мы рекомендуем вам попробовать отключить ваш антивирус или поставить игру в исключения антивируса, а также еще раз проверить соответствие системным требованиям и если что-то из вашей сборки не соответствует, то по возможности улучшить свой ПК, докупив более мощные комплектующие.
В Mass Effect Legendary Edition черный экран, белый экран, цветной экран. Решение
Проблемы с экранами разных цветов можно условно разделить на 2 категории:
Во-первых, они часто связаны с использованием сразу двух видеокарт. Например, если ваша материнская плата имеет встроенную видеокарту, но играете вы на дискретной, то Mass Effect Legendary Edition может в первый раз запускаться на встроенной, при этом самой игры вы не увидите, ведь монитор подключен к дискретной видеокарте.
Во-вторых, цветные экраны бывают при проблемах с выводом изображения на экран. Это может происходить по разным причинам. Например, Mass Effect Legendary Edition не может наладить работу через устаревший драйвер или не поддерживает видеокарту. Также черный/белый экран может выводиться при работе на разрешениях, которые не поддерживаются игрой.
Mass Effect Legendary Edition вылетает. В определенный или случайный момент. Решение
Играете вы себе, играете и тут — бац! — все гаснет, и вот уже перед вами рабочий стол без какого-либо намека на игру. Почему так происходит? Для решения проблемы стоит попробовать разобраться, какой характер имеет проблема.
Если вылет происходит в случайный момент времени без какой-то закономерности, то с вероятностью в 99% можно сказать, что это ошибка самой игры. В таком случае исправить что-то очень трудно, и лучше всего просто отложить Mass Effect Legendary Edition в сторону и дождаться патча. Однако если вы точно знаете, в какие моменты происходит вылет, то можно и продолжить игру, избегая ситуаций, которые провоцируют сбой.
Если вы точно знаете, в какие моменты происходит вылет, то можно и продолжить игру, избегая ситуаций, которые провоцируют сбой. Кроме того, можно скачать сохранение Mass Effect Legendary Edition в нашем файловом архиве и обойти место вылета.
Mass Effect Legendary Edition зависает. Картинка застывает. Решение
Ситуация примерно такая же, как и с вылетами: многие зависания напрямую связаны с самой игрой, а вернее с ошибкой разработчика при ее создании. Впрочем, нередко застывшая картинка может стать отправной точкой для расследования плачевного состояния видеокарты или процессора. Если картинка в Mass Effect Legendary Edition застывает, то воспользуйтесь программами для вывода статистики по загрузке комплектующих. Быть может, ваша видеокарта уже давно исчерпала свой рабочий ресурс или процессор греется до опасных температур?
Проверить загрузку и температуры для видеокарты и процессоров проще всего в программе MSI Afterburner. При желании можно даже выводить эти и многие другие параметры поверх картинки Mass Effect Legendary Edition.
Какие температуры опасны? Процессоры и видеокарты имеют разные рабочие температуры. У видеокарт они обычно составляют 60-80 градусов по Цельсию. У процессоров немного ниже — 40-70 градусов. Если температура процессора выше, то следует проверить состояние термопасты. Возможно, она уже высохла и требует замены. Если греется видеокарта, то стоит воспользоваться драйвером или официальной утилитой от производителя. Нужно увеличить количество оборотов кулеров и проверить, снизится ли рабочая температура.
Mass Effect Legendary Edition тормозит. Низкий FPS. Просадки частоты кадров. Решение
При тормозах и низкой частоте кадров в Mass Effect Legendary Edition первым делом стоит снизить настройки графики. Разумеется, их много, поэтому прежде чем снижать все подряд, стоит узнать, как именно те или иные настройки влияют на производительность.
Разрешение экрана
Если кратко, то это количество точек, из которого складывается картинка игры. Чем больше разрешение, тем выше нагрузка на видеокарту. Впрочем, повышение нагрузки незначительное, поэтому снижать разрешение экрана следует только в самую последнюю очередь, когда все остальное уже не помогает.
Качество текстур
Как правило, этот параметр определяет разрешение файлов текстур. Снизить качество текстур следует в случае если видеокарта обладает небольшим запасом видеопамяти (меньше 4 ГБ) или если используется очень старый жесткий диск, скорость оборотов шпинделя у которого меньше 7200.
Качество моделей (иногда просто детализация)
Эта настройка определяет, какой набор 3D-моделей будет использоваться в игре. Чем выше качество, тем больше полигонов. Соответственно, высоко-полигональные модели требуют большей вычислительной мощности видеокарты (не путать с объемом видеопамяти!), а значит снижать этот параметр следует на видеокартах с низкой частотой ядра или памяти.
Тени
Бывают реализованы по-разному. В одних играх тени создаются динамически, то есть они просчитываются в реальном времени в каждую секунду игры. Такие динамические тени загружают и процессор, и видеокарту. В целях оптимизации разработчики часто отказываются от полноценного рендера и добавляют в игру пре-рендер теней. Они статичные, потому как по сути это просто текстуры, накрадывающиеся поверх основных текстур, а значит загружают они память, а не ядро видеокарты.
Нередко разработчики добавляют дополнительные настройки, связанные с тенями:
- Разрешение теней — определяет, насколько детальной будет тень, отбрасываемая объектом. Если в игре динамические тени, то загружает ядро видеокарты, а если используется заранее созданный рендер, то «ест» видеопамять.
- Мягкие тени — сглаживание неровностей на самих тенях, обычно эта опция дается вместе с динамическими тенями. Вне зависимости от типа теней нагружает видеокарту в реальном времени.
Сглаживание
Позволяет избавиться от некрасивых углов на краях объектов за счет использования специального алгоритма, суть которого обычно сводится к тому, чтобы генерировать сразу несколько изображений и сопоставлять их, высчитывая наиболее «гладкую» картинку. Существует много разных алгоритмов сглаживания, которые отличаются по уровню влияния на быстродействие Mass Effect Legendary Edition.
Например, MSAA работает «в лоб», создавая сразу 2, 4 или 8 рендеров, поэтому частота кадров снижается соответственно в 2, 4 или 8 раз. Такие алгоритмы как FXAA и TAA действуют немного иначе, добиваясь сглаженной картинки путем высчитывания исключительно краев и с помощью некоторых других ухищрений. Благодаря этому они не так сильно снижают производительность.
Освещение
Как и в случае со сглаживанием, существуют разные алгоритмы эффектов освещения: SSAO, HBAO, HDAO. Все они используют ресурсы видеокарты, но делают это по-разному в зависимости от самой видеокарты. Дело в том, что алгоритм HBAO продвигался в основном на видеокартах от Nvidia (линейка GeForce), поэтому лучше всего работает именно на «зеленых». HDAO же, наоборот, оптимизирован под видеокарты от AMD. SSAO — это наиболее простой тип освещения, он потребляет меньше всего ресурсов, поэтому в случае тормозов в Mass Effect Legendary Edition стоит переключиться него.
Что снижать в первую очередь?
Как правило, наибольшую нагрузку вызывают тени, сглаживание и эффекты освещения, так что лучше начать именно с них.
Часто геймерам самим приходится заниматься оптимизацией своих игр. Практически по всем крупным релизам есть различные соответствующие и форумы, где пользователи делятся своими способами повышения производительности. Также есть специальная программа под названием Advanced System Optimizer. Она сделана специально для тех, кто не хочет вручную вычищать компьютер от разных временных файлов, удалять ненужные записи реестра и редактировать список автозагрузки. Advanced System Optimizer сама сделает это, а также проанализирует компьютер, чтобы выявить, как можно улучшить производительность в приложениях и играх.
Mass Effect Legendary Edition лагает. Большая задержка при игре. Решение
Многие путают «тормоза» с «лагами», но эти проблемы имеют совершенно разные причины. Mass Effect Legendary Edition тормозит, когда снижается частота кадров, с которой картинка выводится на монитор, и лагает, когда задержка при обращении к серверу или любому другому хосту слишком высокая.
Именно поэтому «лаги» могут быть только в сетевых играх. Причины разные: плохой сетевой код, физическая удаленность от серверов, загруженность сети, неправильно настроенный роутер, низкая скорость интернет-соединения. Впрочем, последнее бывает реже всего. В онлайн-играх общение клиента и сервера происходит путем обмена относительно короткими сообщениями, поэтому даже 10 Мб в секунду должно хватить за глаза.
В Mass Effect Legendary Edition нет звука. Ничего не слышно. Решение
Mass Effect Legendary Edition работает, но почему-то не звучит — это еще одна проблема, с которой сталкиваются геймеры. Конечно, можно играть и так, но все-таки лучше разобраться, в чем дело.
Сначала нужно определить масштаб проблемы. Где именно нет звука — только в игре или вообще на компьютере? Если только в игре, то, возможно, это обусловлено тем, что звуковая карта очень старая и не поддерживает DirectX. Если же звука нет вообще, то дело однозначно в настройке компьютера. Возможно, неправильно установлены драйвера звуковой карты, а может быть звука нет из-за какой-то специфической ошибки нашей любимой ОС Windows.
Mass Effect Legendary Edition, скачанная с торрента, не работает. Решение
Если дистрибутив игры был загружен через торрент, то никаких гарантий работы быть в принципе не может. Торренты и репаки практически никогда не обновляются через официальные приложения и не работают по сети, потому что по ходу взлома хакеры вырезают из игр все сетевые функции, которые часто используются для проверки лицензии.
Такие версии игр использовать не просто неудобно, а даже опасно, ведь очень часто в них изменены многие файлы. Например, для обхода защиты пираты модифицируют EXE-файл. При этом никто не знает, что они еще с ним делают. Быть может, они встраивают самоисполняющееся программное обеспечение. Например, майнер, который при первом запуске игры встроится в систему и будет использовать ее ресурсы для обеспечения благосостояния хакеров. Или вирус, дающий доступ к компьютеру третьим лицам. Тут никаких гарантий нет и быть не может.
К тому же использование пиратских версий — это, по мнению нашего издания, воровство. Разработчики потратили много времени на создание игры, вкладывали свои собственные средства в надежде на то, что их детище окупится. А каждый труд должен быть оплачен. Поэтому при возникновении каких-либо проблем с играми, скачанными с торрентов или же взломанных с помощью тех или иных средств, следует сразу же удалить «пиратку», почистить компьютер при помощи антивируса и приобрести лицензионную копию игры. Это не только убережет от сомнительного ПО, но и позволит скачивать обновления для игры и получать официальную поддержку от ее создателей.
Mass Effect Legendary Edition выдает ошибку об отсутствии DLL-файла. Решение
Как правило, проблемы, связанные с отсутствием DLL-библиотек, возникают при запуске Mass Effect Legendary Edition, однако иногда игра может обращаться к определенным DLL в процессе и, не найдя их, вылетать самым наглым образом.
Чтобы исправить эту ошибку, нужно найти необходимую библиотеку DLL и установить ее в систему. Проще всего сделать это с помощью программы DLL-fixer, которая сканирует систему и помогает быстро найти недостающие библиотеки.
Если ваша проблема оказалась более специфической или же способ, изложенный в данной статье, не помог, то вы можете спросить у других пользователей в нашей рубрике.
Другие гайды
- Халява: на ПК бесплатно раздадут свыше 30 крутых игр, включая Need for Speed Heat и Mass Effect Legendary Edition
- Фанаты вернули в Mass Effect Legendary Edition то самое утраченное дополнение. Как тебе такое, BioWare?
- BioWare раскрыла самых популярных напарников в Mass Effect Legendary Edition (в первой части)
When I try to start the game the logo flashes up for a brief moment, then it just takes me right back to Origin. No error messages or anything.
I have tried almost every solution I found online and it still won’t work. I’ve tried
- Running it in compatibility mode for every version possible
- Running it as an administrator
- Running Origin as an administrator and launching from there
- Disabling all virus protection software
- Clearing Origin cache
- Repairing the game
- Reinstalling the game
- Reinstalling Origin
- Restoring Windows 10 with a system image backup
- Reinstalling Windows 10
- Installing latest drivers
- Reinstalling Microsoft VC++ (see below)
I can only think of two things that may be related to the crashing. The first is that the masseffectlauncher.exe is not in my game files. I have seen online that other people have had the same problem, but there are never any solutions online. I only have the masseffect.exe and masseffectconfig.exe. The second would be when I try to run the masseffectconfig.exe I get the message
Microsoft Visual C++ Runtime Library
Runtime Error!
Program: C:Program Files (…
This application has requested the Runtime to terminate it in an unusual way. Please contact the application’s support team for more information.
I don’t know if this will be related to the issue of the game not running or not, but that’s all I’ve got. This game worked just fine when I played it on the same computer in June. It just stopped working sometime in between then and now.
When I try to start the game the logo flashes up for a brief moment, then it just takes me right back to Origin. No error messages or anything.
I have tried almost every solution I found online and it still won’t work. I’ve tried
- Running it in compatibility mode for every version possible
- Running it as an administrator
- Running Origin as an administrator and launching from there
- Disabling all virus protection software
- Clearing Origin cache
- Repairing the game
- Reinstalling the game
- Reinstalling Origin
- Restoring Windows 10 with a system image backup
- Reinstalling Windows 10
- Installing latest drivers
- Reinstalling Microsoft VC++ (see below)
I can only think of two things that may be related to the crashing. The first is that the masseffectlauncher.exe is not in my game files. I have seen online that other people have had the same problem, but there are never any solutions online. I only have the masseffect.exe and masseffectconfig.exe. The second would be when I try to run the masseffectconfig.exe I get the message
Microsoft Visual C++ Runtime Library
Runtime Error!
Program: C:Program Files (…
This application has requested the Runtime to terminate it in an unusual way. Please contact the application’s support team for more information.
I don’t know if this will be related to the issue of the game not running or not, but that’s all I’ve got. This game worked just fine when I played it on the same computer in June. It just stopped working sometime in between then and now.
Откалибруйте трилогию.
Легендарное издание Mass Effect работает на ПК некорректно. У многих игроков после выбора нужной части трилогии появляется черный экран, а потом – снова экран выбора игры.
Студия Bioware пока никак не прокомментировала ситуацию, неизвестно, когда выйдет патч. Но есть несколько способов, с помощью которых можно заставить игру работать.
Если у вас не запускаются игры в Mass Effect Legendary Edition, сделайте следующее:
- Убедитесь, что имя пользователя содержит только символы латинского алфавита и числа
- Убедитесь, что у вас скачан клиент Origin
- Проверьте путь к игре
- Включите в параметрах языка системы бету использования Юникода (UTF-8)
Последний способ помогает чаще других.
Имя пользователя
Имя пользователя должно состоять из букв латинского алфавита. Чтобы изменить имя пользователя, откройте «Параметры» в меню «Пуск», выберите «Учетные записи».
Далее вам нужен пункт «Семья и другие пользователи» и кнопка «Добавить пользователя для этого компьютера».
Далее нужно выбрать:
- У меня нет данных для входа этого человека
- Добавить пользователя без учетной записи Microsoft
- Создайте имя пользователя, используя буквы латинского алфавита
Перезагрузите ПК и выберите нужный профиль.
Клиент Origin
Если у вас не работает Mass Effect Legendary Edition, проверьте, есть ли у вас Origin. Если нет, скачайте его с официального сайта Electronic Arts.
Путь к игре
В пути к папке с игрой не должно быть букв кириллицы.
Скорректируйте параметры языка системы
Мне помог именно этот способ. Нужно включить бета-версию Юникода для поддержки языка во всем мире.
Для этого нужно:
- Открыть «Панель управления»
- Выбрать «Часы и регион» и «Региональные стандарты»
- Открыть вкладку «Дополнительно»
- Выбрать «Изменить язык системы»
- Поставить галочку напротив пункта «Бета версия: Использовать Юникод (UTF-8) для поддержки языка во всем мире» и нажать «ОК»
- Перезапустить ПК
Поздравляю, вы восхитительны и можете отправляться на спасение галактики!
* * *
Легчайший тест по трилогии Mass Effect. Его пройдут даже те, кто играл десять лет назад
Первый Mass Effect наконец стал нормальной игрой – в Legendary Edition. Но теперь фанатам делают больно по-другому