xenia_patches.toml здесь — это не признак работы через эмулятор, а готовый конфиг с инструкциями по модификации исходного бинарника. Рекомпилятор использует формат Xenia просто как общепринятый стандарт описания патчей для игр Xbox 360.
Сообщество эмулятора Xenia годами исследовало исполняемый файл Silent Hill: Downpour (default.xex для Xbox 360). В формате xenia_patches.toml записаны точные адреса памяти (в адресном пространстве PowerPC) и байты, которые нужно заменить, чтобы:
Разблокировать частоту кадров (убрать лок в 30 FPS до 60+ FPS);
Отключить тяжелый или багованный пост-процессинг (Motion Blur, Depth of Field);
Исправить соотношение сторон (Aspect Ratio / FOV);
Обойти известные краши или бесконечные циклы, специфичные для архитектуры консоли.
Вместо того чтобы вручную искать эти места в миллионах строк сгенерированного C/C++ кода, проект использует уже готовые адреса из базы Xenia.
Анализ самого файла
Анализ конкретного содержимого этого файла окончательно расставляет всё по местам. Перед нами конфигурационный файл графических улучшений (Quality of Life) и разблокировки лимитов консоли, взятый напрямую из репозитория Xenia.
Игра Silent Hill: Downpour разработана на движке Unreal Engine 3, и в коде Xbox 360 зашиты жёсткие ограничения, рассчитанные на слабое железо 2012 года.
Вот что конкретно делает каждый патч из вашего файла и зачем он нужен нативному порту/рекомпиляции:
1. Unlock FPS (Разблокировка частоты кадров)
toml
[[patch.be32]]
address = 0x825c64c8
value = 0x60000000
Зачем: На Xbox 360 игра залочена на 30 FPS (а часто проседала и до 20). При рекомпиляции на ПК игра по умолчанию попытается воспроизвести это же поведение и лок.
Как работает: По адресу 0x825c64c8 вставляется 0x60000000 — в архитектуре PowerPC это машинная инструкция nop (No Operation), затирающая вызов внутренней функции ограничения кадров. Байт 0x01 по второму адресу включает внутренний флаг разблокировки тикрейта.
2. Disable FXAA & MLAA (Отключение мыльного сглаживания)
toml
address = 0x82a04ba0 # SHGame.MLAAPostProcess
value = 0x38600000 # li r3, 0x0
address = 0x82a10964 # Engine.GlobalPostProcessSettings.ForceFXAA
value = 0x39600000 # li r11, 0x0
Зачем: На консолях использовалось раннее полноэкранное сглаживание FXAA и MLAA, чтобы скрыть "лесенки" при низком разрешении (720p). На ПК при рендере в 1080p, 2K или 4K это сглаживание превращает картинку в кошмарное мыло, особенно если вы захотите использовать FSR/DLSS.
Как работает: Обратите внимание на комментарии (SHGame, Engine.GlobalPostProcessSettings). Инструкции li r3, 0x0 принудительно передают аргумент 0 (False/Отключено) прямо в системные функции рендера Unreal Engine 3. Игра рекомпилируется уже с вырезанным мылом.
3. 16x Anisotropic Filtering (Анизотропная фильтрация текстур)
toml
address = 0x829d342c
value = 0x38a00010 # 0x10 в шестнадцатеричной системе = 16 в десятичной
Зачем: Из-за нехватки пропускной способности памяти на Xbox 360 текстуры под углом (например, асфальт или пол) сильно размывались. На современных ПК фильтрация текстур 16x практически бесплатна по ресурсам видеокарты.
Как работает: Заменяет внутреннюю переменную дискретизации семплера в коде рендера на значение 16 (Hex: 0x10). Картинка становится значительно четче.
4. Show FPS (Встроенный счетчик кадров)
toml
address = 0x837a9b14
value = 0x01
Зачем: В Unreal Engine 3 есть скрытый служебный отладочный оверлей с отображением FPS и времени кадра (Frametime), который разработчики оставили в коде, но отключили (выставили флаг в 0). Этот патч принудительно выставляет 1 (true), активируя встроенный в движок счетчик без необходимости подключать сторонние утилиты вроде RTSS.
Почему везде стоит is_enabled = false?
В репозитории этот файл лежит в состоянии «по умолчанию» (vanilla):
Чтобы обеспечить максимальную стабильность и аутентичность базовой сборки. (Если запустить рекомпиляцию с разлоченным FPS сразу, из-за физики UE3 могут сломаться тайминги скриптов или камера — о чем честно предупреждает комментарий: "Camera movement slows down over 60 FPS").
Разработчик порта (или пользователь, компилирующий билд) может просто открыть этот файл, изменить нужные пункты на is_enabled = true, и тулчейн автоматически пересоберет игру уже с этими улучшениями.
Итог
Этот файл — набор готовых твиков движка игры. Вместо того чтобы переписывать код рендерера и логики в тысячах C++ файлов проекта, рекомпилятор использует этот стандартизированный файл для точечного изменения поведения движка.