mirror of
https://github.com/Ultra-NX/UltraNX.git
synced 2025-08-08 10:32:05 +00:00
Compare commits
87 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
85ffded054 | ||
|
7d6a8eb2b1 | ||
|
69db804029 | ||
|
d18b6d94c4 | ||
|
6c1c55d929 | ||
|
220ef77d17 | ||
|
ece8bc4858 | ||
|
081eaa7c7d | ||
|
eda99e7881 | ||
|
d28855fd34 | ||
|
d0b97525a8 | ||
|
bf48033941 | ||
|
9adc60b135 | ||
|
5153b2d17a | ||
|
9d661b1d18 | ||
|
1fc80bcbdb | ||
|
985a53995a | ||
|
4e42f73191 | ||
|
b144b70918 | ||
|
b546edec8f | ||
|
aacfd99915 | ||
|
da2cbbb2f6 | ||
|
9c3765e08c | ||
|
65461efd23 | ||
|
b9b4dd45c0 | ||
|
e1812455bb | ||
|
73b0904544 | ||
|
d8daa54862 | ||
|
c846ee9fb3 | ||
|
65e6b17a73 | ||
|
09492db032 | ||
|
10e4d13a27 | ||
|
db5b3ab00e | ||
|
5a927b499a | ||
|
a4f670dd3c | ||
|
adf02bc085 | ||
|
cd4b0c933d | ||
|
324f971d50 | ||
|
cafa4e44c6 | ||
|
093c181ec1 | ||
|
fc203edb0f | ||
|
b3de870f9f | ||
|
04d19fe456 | ||
|
fd85e37b2c | ||
|
fd2f17b9b4 | ||
|
ad232cfee7 | ||
|
309c2e7b4f | ||
|
9c7679ce71 | ||
|
a6d8c99bf5 | ||
|
88563d9ce7 | ||
|
53ee94de8c | ||
|
0d8c08c106 | ||
|
a03e86fd9c | ||
|
b468b0f774 | ||
|
c98fa52431 | ||
|
871d1e31d6 | ||
|
ece9e2e9c1 | ||
|
2130c40c4a | ||
|
f50e64c6df | ||
|
eb5aacdaca | ||
|
ebff409684 | ||
|
fa481b883b | ||
|
a72a2aa050 | ||
|
77387097f5 | ||
|
fae194279e | ||
|
4dc2539260 | ||
|
f70735cbe6 | ||
|
a6956b1e92 | ||
|
8fcfd7b731 | ||
|
b620f3fe63 | ||
|
371b8c6e78 | ||
|
f8fa32e628 | ||
|
a322b13f2d | ||
|
1747c0c191 | ||
|
2039eefaf3 | ||
|
ee113b1ec3 | ||
|
c3a49d200b | ||
|
cec136ceaa | ||
|
fc15a34b17 | ||
|
8cc7459ba8 | ||
|
01edc4a983 | ||
|
51bc7784e4 | ||
|
0a8edc9e14 | ||
|
4622dc8bf3 | ||
|
c3f036d122 | ||
|
f30f81fa26 | ||
|
84edb78f08 |
541
README.md
541
README.md
@ -1,440 +1,100 @@
|
||||
# Ultra 1.5 by **[redraz](https://github.com/redraz)**
|
||||
|
||||
### If someone translates the information from this page into English (Possible with GPT-4), I will gladly add README_ENG.md
|
||||
|
||||
[Группа в телеграме](@UltraNX)
|
||||
# UltraNX by **[redraz](https://github.com/redraz)**
|
||||
|
||||

|
||||
|
||||
**ВНИМАНИЕ! Над инструкцией все еще ведется работа! Пулреквесты с исправлениями и дополнениями приветствуются. Пользователям Mac OS, в случае возникновения проблем - прочитать [гайд](https://gbatemp.net/threads/macos-fix-archive-attributes-for-switch-sd-card.545560/)**
|
||||
### За образец инструкции взят репозиторий [4IFIR](https://github.com/rashevskyv/4IFIR)
|
||||
# [English Readme](README_ENG.md)
|
||||
|
||||
Инструкция обширная. Используйте поиск для того, чтобы успешно ей пользоваться.
|
||||
### [Группа в телеграме](https://t.me/UltraNX) | [Wiki](https://github.com/Ultra-NX/Ultra/wiki)
|
||||
|
||||
Сборник модифицированных компонентов, призванный максимально упростить разгон Nintendo Switch, а также улучшить пользовательский опыт за счет дополнительного функционала.
|
||||
Модификация предназначена для тех, кто хотел бы выжать максимум из своей консоли, добиться графики уровня PS4 (рекомендуется использовать в связке с [модами ув. ECLIPSE00074](https://4pda.to/forum/index.php?showuser=176532)), разблокировать 60fps, ускорить загрузки, зафиксировать нативное разрешение, снизить шум системы охлаждения и т.д.
|
||||
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
|
||||
|
||||
В случае с пакетами разгона в Ultra, подразумевается не разблокировка частот в пределах штатных таблиц, а именно что разгон, включающий undervolting/overvolting каждого разгоняемого компонента. Устанавливая пакеты разгона без теоретической подготовки, вы снимаете с автора ответственность за любые возможные последствия, включая выход консоли из строя, и полностью берете риски на себя. Абсолютно безопасным разгон быть не может по определению, вас предупредили. От потенциальных программных проблем вас застрахует использование EmuNand, FAT32 и наличие бекапов. Во-избежание конфликтов, рекомендуется проводить установку начисто.
|
||||
### [Ultra 2.5|R1](https://github.com/Ultra-NX/UltraNX/releases) Поддерживает HOS 20.2.0
|
||||
### [Ultra 2.5|Pre2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.5-R2) Частично поддерживает HOS 20.3.0 (Только Safe Mode)
|
||||
|
||||
## Содержание
|
||||
|
||||
1. [Особенности Ultra](#особенности-ultra)
|
||||
1. [Состав Ultra](#состав-Ultra)
|
||||
1. [Установка](#установка)
|
||||
* [Установка (с кефира, чифира или другой сборки)](#установка-с-кефира-чифира-или-другой-сборки)
|
||||
* [Обновление (переход с предыдущих версий), переустановка начисто](#обновление-переход-с-предыдущих-версий-переустановка-начисто)
|
||||
* [Дополнительные методы](#дополнительные-методы)
|
||||
1. [Как использовать Ultra](#как-использовать-ultra)
|
||||
* [Включение и отключение модулей](#включение-и-отключение-модулей)
|
||||
* [Управление режимом работы консоли (портатив\док, ReverseNX-RT)](#управление-режимом-работы-консоли-портатив--док-reversenx-rt)
|
||||
* [Разгон](#разгон)
|
||||
* [Настройки частот и говернор (governor)](#настройки-частот-и-говернор-governor)
|
||||
* [Конфигуратор Ultra Tuner](#конфигуратор-ultra-tuner)
|
||||
* [Пресеты](#пресеты)
|
||||
* [Выжимаем больше - читы и патчи на улучшение графики](#выжимаем-больше---читы-и-патчи-на-улучшение-графики)
|
||||
* [Читы](#читы)
|
||||
* [Модификации](#модификации)
|
||||
* [FPSLocker](#fpslocker)
|
||||
* [Оптимизация работы, выбор подходящих частот и энергопотребление](#оптимизация-работы-выбор-подходящих-частот-и-энергопотребление)
|
||||
1. [Проблемы и их решения](#проблемы-и-их-решения)
|
||||
* [Проблемы с батареей](#проблемы-с-батареей)
|
||||
* [Батарея начала разряжаться до 1% со 100% за считаные минуты, однако без проблем работает на 1% несколько часов](#батарея-начала-разряжаться-до-1-со-100-за-считаные-минуты-однако-без-проблем-работает-на-1-несколько-часов)
|
||||
* [При игре с включенным разгоном через некоторое время показывается значок пустой батареи](#при-игре-с-включенным-разгоном-через-некоторое-время-показывается-значок-пустой-батареи)
|
||||
* [Игра перестала запускаться и стала вылетать](#игра-перестала-запускаться-и-стала-вылетать)
|
||||
* [FPS в игре всегда показывает 0/254 или ReverseNX не переключает режимы](#fps-в-игре-всегда-показывает-0254-или-reversenx-не-переключает-режимы)
|
||||
1. [FAQ](#faq)
|
||||
1. [Лицензии](#лицензии)
|
||||
1. [Благодарности](#благодарности)
|
||||
1. [Поддержка](#поддержка)
|
||||
|
||||
## Особенности Ultra
|
||||
|
||||
* Выбор между разными пакетами разгона, будь то 4ifir или OC-Suite
|
||||
* Сборка максимально легкая и не нагруженная. В ней нет лишнего, минимум необходимый для разгона и все
|
||||
* Модульная конструкция. В стоке минимум приложений/плагинов/оверлеев, но вы всегда можете поставить еще через комплектный апдейтер
|
||||
* Радикальное снижение шума системы охлаждения
|
||||
* Кастомный Status Monitor Overlay c FPS и системными метриками
|
||||
* Эмуляция док режима
|
||||
* Ускоренная зарядка
|
||||
* Предварительно настроенный OC Switchcraft (Преемник OC-Suite) с пресетами.
|
||||
* По умолчанию уже есть андервольт, который заметно снижает потребление консоли, и небольшой разгон памяти, который сделает игры плавнее.
|
||||
* Лучший кастомизатор разгона для Свитч - [Ultra-Tuner](https://github.com/Ultra-NX/Ultra/wiki/Tuner-RU#Ultra-Tuner), позволяющий настраивать разгон прямо с консоли. Был первым, и остается неповторимым.
|
||||
* Сборка максимально легкая и не нагруженная. В ней нет лишнего, минимум необходимый для разгона и комфортного использования.
|
||||
* Модульная конструкция. В составе минимум приложений/плагинов/оверлеев, но вы всегда можете поставить еще через [Ultra Tuner](https://github.com/Ultra-NX/Ultra/wiki/Tuner-RU#Updater).
|
||||
* Кастомная настройка работы системы охлаждения, и пресеты на выбор.
|
||||
* Регулярные обновления, и активное комьюнити.
|
||||
* DBI с встроенным notUltraNX репозиторием игр, больше не нужно каждый раз искать новый шоп Тинфоила.
|
||||
* Подробная [Wiki](https://github.com/Ultra-NX/Ultra/wiki) в которой есть ответы почти на все вопросы.
|
||||
* [Форки](https://github.com/Ultra-NX/Ultra-Resources/tree/main/patches) (свои модификации) программ и компонентов, нужные для удобства, безопасности и расширения возможностей:
|
||||
* Форк Атмосферы с прописанной версией Ультры в информации о системе, и отключенными репортами, обычно засоряющими сд карту, тратящими ее ресурс и ломающими файловую систему. Так же исправлена работа старых форвардеров (важно для хоумбрю игр/эмуляторов).
|
||||
* Форк Mission Control, с вырезанной "пасхалкой", делающей джойконы жовто-блакитными.
|
||||
|
||||
|
||||
### Плюсы систем разгона 4ifir/Suite
|
||||
* Разгон вплоть до значений в 2907+ Mhz для CPU, 1305 Mhz для GPU, 29xx Mhz для RAM (точный потолок значения индивидуален для каждой консоли)
|
||||
* Автоматический андервольтинг/овервольтинг
|
||||
* Автоматический буст при загрузке игры
|
||||
* Поддержка говернора - снижения потребления ресурсов когда они не требуются консоли
|
||||
|
||||
## Состав Ultra
|
||||
|
||||
1. **[Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)**
|
||||
1. **[Сигпатчи](https://sigmapatches.coomer.party)**
|
||||
1. **[Hekate](https://github.com/CTCaer/hekate)**
|
||||
1. **[Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)** - Atmosphère, кастомная прошивка для Nintendo Switch.
|
||||
1. **[Hekate](https://github.com/CTCaer/hekate)** - Пользовательский графический загрузчик Nintendo Switch, патчер прошивки, инструментарий и многое другое.
|
||||
1. **[Ultra Tuner](https://github.com/Ultra-NX/Ultra-Tuner)** - Пакет для Ultrahand, позволяющий произвести тонкую настройку параметров под свою консоль. В случае нестабильной работы разгона, или при желании увеличить производительность консоли, Ultra Tuner - Ваш незаменимый помощник.
|
||||
1. **[OC-Switchcraft](https://github.com/halop/OC-Switchcraft-EOS/releases)**, форк **[OC-Suite](https://github.com/hanai3Bi/Switch-OC-Suite/)** - Лоадер атмосферы с разгоном от B3711, позволяет выжать из N.Switch мощность Xbox One. Вовремя обновляется для поддержки новых возможностей Атмосферы.
|
||||
|
||||
|
||||
1. **Установленные пейлоады**:
|
||||
* [Lockpick_RCM](https://github.com/shchmue/Lockpick_RCM) - программа для дампинга ключей консоли.
|
||||
* [TegraExplorer](https://github.com/rashevskyv/TegraExplorer/) - низкоуровневый файловый менеджер для работы с системой.
|
||||
1. **Установленное Homebrew**
|
||||
* [AiO Switch Updater](https://github.com/HamletDuFromage/aio-switch-updater) - программа для обновления Ultra до актуальной версии, а так же для скачивания читов.
|
||||
* [DBI](https://github.com/rashevskyv/dbi) - лучший файловый менеджер, менеджер сохранений и установщик программ на консоль.
|
||||
1. **Доступные для скачивания Homebrew**
|
||||
* [Homebrew App Store](https://github.com/fortheusers/hb-appstore) - магазин приложений
|
||||
* [Linkalho](https://github.com/rdmrocha/linkalho) - программа для привязки аккаунта.
|
||||
* [Battery Desync Fix](https://github.com/CTCaer/battery_desync_fix_nx) - программа для сброса контроллера батареи. Не используйте просто так!
|
||||
* [Daybreak](https://github.com/Atmosphere-NX/Atmosphere/tree/master/troposphere/daybreak) - программа для обновления системного ПО.
|
||||
* [SysDVR](https://github.com/exelix11/SysDVR) - программа для передачи изображения с консоли на ПК или другие устройства.
|
||||
* [sys-ftpd](https://github.com/cathery/sys-ftpd) - FTP сервер, работающий в фоне.
|
||||
* MicroMemBench - бенчмарк памяти. Результат сильно зависит от разгона CPU. В версии 0.5.0 нету принудительного авторазгона CPU, в 0.5.1 - есть.
|
||||
* MicroMemTest - тест памяти. Проводить только с максимальным разгоном CPU. Если ошибки на Loop ниже 20 - значит с разгоном RAM точно проблемы.
|
||||
* mhz - программа показывающая честную максимальную частоту цпу.
|
||||
* RaytracingNX - бенчмарк цпу.
|
||||
* [Lockpick RCM](https://github.com/impeeza/Lockpick_RCMDecScots) - Программа для снятия ключей консоли.
|
||||
* [TegraExplorer](https://github.com/suchmememanyskill/TegraExplorer) - Низкоуровневый файловый менеджер для работы с системой.
|
||||
|
||||
|
||||
1. **Установленные Homebrew**
|
||||
* [Sphaira](https://github.com/ITotalJustice/sphaira) - Современное Хоумбрю Меню, аналог nx-hbmenu
|
||||
* [AiO Switch Updater](https://github.com/HamletDuFromage/aio-switch-updater) - Программа для обновления Ultra до актуальной версии, а так же для скачивания читов.
|
||||
* [Daybreak](https://github.com/Atmosphere-NX/Atmosphere) - Программа для обновления системного ПО.
|
||||
* [DBI](https://4pda.to/forum/index.php?showtopic=939714&st=1100#entry86288632) - Лучший файловый менеджер, менеджер сохранений и установщик программ на консоль.
|
||||
|
||||
|
||||
1. **Установленные модули**
|
||||
* [SaltyNX](https://github.com/masagrator/SaltyNX) - фоновый модуль, позволяющий модифицировать файлы\процессы в консоли, поддерживает плагины. Не совместим с 32-х битными играми (список на гитхабе проекта).
|
||||
* [ReverseNX-Tool](https://github.com/masagrator/ReverseNX-Tool) - (Теперь вшита в SaltyNX) программа, которая принудительно меняет режимы работы консоли на докстанцию и портатив, вне зависимости от того находится консоль в доке или нет. Потенциально улучшает картинку в портативе за счет того, что рендерит изображение так, как будто консоль в докстанции.
|
||||
* [Ultra](https://github.com/Ultra-NX/Ultra-Overlay), форк [sys-clk-oc](https://github.com/hanai3Bi/Switch-OC-Suite) - модуль отвечающий за разгон процессора, памяти и видеочипа, для лучшей производительности. Используется сразу несколько вариаций от разных авторов, все модифицированные. Оригинальные авторы: Meha/hanai3Bi, lineon, p-sam.
|
||||
* [nx-ovlloader](https://github.com/WerWolv/nx-ovlloader/) - с помощью этого модуля осуществляется переключение установленных модулей.
|
||||
* [sys-patch](https://github.com/ITotalJustice/sys-patch/) - создает/обновляет патчи при запуске системы. Не заменяет сигпатчи, но избавляет от регулярного ручного обновления патчей системы после каждой микрообновы системы.
|
||||
* [Ultra Paw Overlay](https://github.com/Ultra-NX/Ultra-Paw-Overlay), форк [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) - специальное оверлей-меню для взаимодействия с системой: разгон, управление режимами через ReverseNX, включение читов, прочее. Так же позволяет использовать самописные пакеты, как - Ultra Tuner.
|
||||
- [FPSLocker](https://github.com/masagrator/FPSLocker) - оверлей, позволяющий разблокировать 60 FPS в играх.
|
||||
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay/releases) - оверлей для использования читов.
|
||||
- [ovlSysmodules](https://github.com/WerWolv/ovl-sysmodules/) - оверлей для включения и отключения установленных системных модулей.
|
||||
- [InfoNX-ovl](https://github.com/renA21/InfoNX/) - оверлей, показывающий информацию о батарее/CPU/GPU/RAM.
|
||||
- [Ultra-Status-Monitor](https://github.com/Ultra-NX/Ultra-Status-Monitor), форк [Status-Monitor-Overlay](https://github.com/masagrator/Status-Monitor-Overlay) - модуль для контроля параметров консоли в реальном времени. Может выступать в качестве счетчика FPS.
|
||||
1. **Пакеты Разгона**
|
||||
* [OC-Suite](https://github.com/hanai3Bi/Switch-OC-Suite/) - Пакет разгона от Meha/hanai3Bi, открытые исходники (Были до недавнего времени) гарантируют надежность и отсутствие скрытых гадостей. Вовремя обновляется для поддержки новых возможностей Атмосферы. Используется модифицированный loader.kip от B3711
|
||||
* [4ifir](https://github.com/rashevskyv/4IFIR/) - Пакет разгона от Cooler3D, закрытые исходники, [спорная](https://www.youtube.com/watch?v=0ECmCChjnK0) личность автора. Зато систему разгона делает отличную, версия 1.7 не считая фейковых частот RAM (+200мгц) работает очень хорошо, а вот 1.8 - сломана, не рекомендуется к использованию.
|
||||
* [SaltyNX](https://github.com/masagrator/SaltyNX) - Фоновый модуль, позволяющий модифицировать файлы\процессы в консоли, поддерживает плагины. Не совместим с 32-х битными играми (список на гитхабе проекта).
|
||||
* [sys-clk](https://github.com/ppkantorski/sys-clk) - Модуль отвечающий за разгон процессора, памяти и видеочипа - для лучшей производительности. Периодически меняю версии от разных авторов. Оригинальные авторы: Meha/hanai3Bi, lineon, p-sam.
|
||||
* [nx-ovlloader](https://github.com/ppkantorski/nx-ovlloader) - С помощью этого модуля осуществляется переключение установленных модулей.
|
||||
* [sys-patch](https://github.com/impeeza/sys-patch) - Патчит систему на работу неподписанного софта вместо сигпатчей.
|
||||
* [Mission Control](https://github.com/ndeadly/MissionControl) - Модуль, позволяющий подключать практически любые геймпады к консоли по Bluetooth.
|
||||
* [sys-con](https://github.com/o0Zz/sys-con) - Модуль, позволяющий подключать практически любые геймпады к консоли по USB.
|
||||
* [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) - Специальное оверлей-меню для взаимодействия с системой: разгон, управление режимами через ReverseNX, включение читов, прочее. Так же позволяет использовать самописные пакеты, например - Ultra Tuner.
|
||||
- **`Ultra OC (sys-clk)`**, мод [sys-clk](https://github.com/ppkantorski/sys-clk) - Оверлей для управления модулем sys-clk. Немного изменен мной, но без копания в исходниках (Так как они закрыты).
|
||||
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay), форк [Status Monitor](https://github.com/hanai3Bi/Status-Monitor-Overlay) - Оверлей позволяющий следить за параметрами консоли в реальном времени. Может выступать в качестве счетчика FPS. Сменить пресет Micro-оверлея можно в Updater.
|
||||
- [FPSLocker](https://github.com/masagrator/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх.
|
||||
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - Оверлей для использования читов.
|
||||
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - Оверлей для управления ReverseNX.
|
||||
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Оверлей для включения и отключения установленных системных модулей.
|
||||
|
||||
|
||||
1. **Доступные для скачивания через [Ultra Tuner](https://github.com/Ultra-NX/UltraNX/wiki/Tuner-RU#ultra-tuner)**
|
||||
* Homebrews:
|
||||
* [DBI](https://4pda.to/forum/index.php?showtopic=939714&st=1100#entry86288632) - Здесь можно скачать DBI или обновить имеющийся.
|
||||
* [Linkalho](https://gbatemp.net/download/linkalho.38822) - Программа для привязки аккаунта.
|
||||
* [HB App Store](https://github.com/fortheusers/hb-appstore) - Бесплатный магазин для скачивания Homebrew приложений.
|
||||
* [PPSSPP](https://gbatemp.net/threads/ppsspp-switch-standalone-beta.544071/post-10492671) - Эмулятор PSP.
|
||||
* [Moonlight](https://github.com/XITRIX/Moonlight-Switch) - Клиент Moonlight, позволяет транслировать на консоль игры с PC.
|
||||
* [ThemezerNX](https://github.com/suchmememanyskill/themezer-nx) + [NXThemes Installer](https://github.com/exelix11/SwitchThemeInjector) + [Theme Patches](https://github.com/exelix11/theme-patches) - Поиск и установка тем на свитч.
|
||||
* [Battery Desync Fix](https://github.com/CTCaer/battery_desync_fix_nx) - Программа для сброса контроллера батареи. Не используйте просто так!
|
||||
* [MemToolkitNX](https://discord.com/channels/854839758815363072/1173171845139288114/1324099100202766408) - Бенчмарк и Тестер памяти. Результат сильно зависит от разгона CPU.
|
||||
* [MemToolkitNX OLD](https://discord.com/channels/854839758815363072/1173171845139288114/1276196700750479480) - Бенчмарк и Тестер памяти. Результат сильно зависит от разгона CPU. Старая версия, которая многим нравится больше новой.
|
||||
* [MicroMemBench](https://github.com/rashevskyv/4IFIR) - Бенчмарк. Результат сильно зависит от разгона CPU. Версия из Чифира которая в реальном времени тестирует CPU Copy, что позволяет быстро узнать результат после изменения таймингов.
|
||||
|
||||
* Overlays:
|
||||
* [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Форк Status Monitor от kantorski.
|
||||
* [Tetris](https://github.com/ppkantorski/Tetris-Overlay) - Та самая игра в виде оверлея. Работает только на последних версиях Ultrahand.
|
||||
* [MasterVolume](https://github.com/averne/MasterVolume) - Регулировка глобальной громкости, позволяет поднять громкость выше максимума. Использовать аккуратно!
|
||||
* [NX-FanControl](https://github.com/Zathawo/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
|
||||
* [BT Audio](https://github.com/masagrator/BT_Audio-ovl) - Оверлей, позволяющий быстро отключаться/подключаться к bluetooth-гарнитуре.
|
||||
* [Fizeau](https://github.com/averne/Fizeau) - Модуль для изменения цветового профиля экрана.
|
||||
* [sys-tune](https://github.com/HookedBehemoth/sys-tune) - Оверлей-музыкальный плеер, работает в фоне.
|
||||
|
||||
* Other:
|
||||
* [FPSLocker Patches](https://github.com/masagrator/FPSLocker-Warehouse) - Патчи для FPSLocker, что бы не качать отдельно патч для каждой игры через оверлей.
|
||||
* [DVR Patches](https://github.com/exelix11/dvr-patches) - Патчи SysDVR, работают и без системного модуля, активируя фоновую запись в играх, где это изначально запрещено.
|
||||
* [Mod Alchemist](https://github.com/ppkantorski/Mod-Alchemist) - Пакет для скачивания, установки и управления модами для игр.
|
||||
* [sys-ftpd](https://github.com/tomvita/sys-ftpd-light) - FTP сервер, работающий на фоне.
|
||||
|
||||
## Установка
|
||||
|
||||
**ВАЖНО! Строго следуйте инструкции и не отклоняйтесь от нее. В случае возникновения проблем, вернитесь к инструкции и переустановите Ультру начисто.**
|
||||
|
||||
### Установка (с кефира, чифира или другой сборки)
|
||||
1. Распакуйте [All in One Updater с конфигом Ultra](https://github.com/Ultra-NX/Ultra-Resources/raw/main/aio/config.zip) на карту памяти консоли
|
||||
1. Запустите [**Homebrew Launcher**] (Зажав R зайти в игру/альбом) > **All in One Updater**
|
||||
* Если вместо запуска приложения вы получаете черный экран, перекачайте приложение вручную из его [репозитория](https://github.com/HamletDuFromage/aio-switch-updater) и вручную пропишите в Custom downloads > Add custom link этот адрес `https://github.com/Ultra-NX/Ultra-Resources/raw/main/aio/config.zip`, после чего перезапустите приложение
|
||||
1. Перейдите в **Custom Downloads** > **Ultra 1.5** > **Continue**, на запрос о перезаписи `ini`, выберите **Yes**, консоль перезагрузится
|
||||
|
||||
### Обновление (переход с предыдущих версий), переустановка начисто
|
||||
1. Запустите [**Homebrew Launcher**] (Зажав R зайти в игру/альбом) > **All in One Updater**
|
||||
* Если вместо запуска приложения вы получаете черный экран, перекачайте приложение вручную из его [репозитория](https://github.com/HamletDuFromage/aio-switch-updater) и вручную пропишите в Custom downloads > Add custom link этот адрес `https://github.com/Ultra-NX/Ultra-Resources/raw/main/aio/config.zip`, после чего перезапустите приложение
|
||||
1. Перейдите в **Custom Downloads** > **Ultra 1.5** > **Continue**, на запрос о перезаписи `ini`, выберите **Yes**, консоль перезагрузится
|
||||
|
||||
### Дополнительные методы
|
||||
* **Установка с нуля** нужна _только_ тем, у кого не стоит никакой системы вообще, но уже есть возможность запустить её с карты памяти (например, установлен чип).
|
||||
* **Отладочная установка** это метод, который следует использовать _только_ тогда, когда понимаете, что делаете, или если об этом вас попросил [компетентный человек](https://t.me/redraz).
|
||||
|
||||
#### Установка с нуля
|
||||
1. Распакуйте [Ultra](https://github.com/Ultra-NX/Ultra/releases/latest/download/Ultra.zip) на карту памяти консоли
|
||||
* Карта должна быть в [FAT32]
|
||||
* Работать с картой памяти рекомендуется через картридер, не через консоль.
|
||||
1. Вставить карту в консоль и включить
|
||||
|
||||
#### Отладочная установка
|
||||
**Выполняйте только в случае проблем с методами выше**
|
||||
1. Удалите с карты памяти всё, кроме папки Nintendo и emuMMC (если есть) (Папку с бекапами сохранений, например JKSV, тоже не стоит удалять)
|
||||
* Карта должна быть в [FAT32]
|
||||
* Работать с картой памяти рекомендуется через картридер, не через консоль.
|
||||
2. Распакуйте [Ultra](https://github.com/Ultra-NX/Ultra/releases/latest/download/Ultra.zip) на карту памяти консоли
|
||||
3. Вставить карту в консоль и включить
|
||||
|
||||
## Как использовать Ultra
|
||||
|
||||
Все настройки осуществляются через Ultra Paw меню, которое вызывается сочетанием клавиш (L)+(R)+(▲), где (L) - верхний бампер левого джойкона, (R) - верхний бампер правого джойкона, а (▲) - кнопка вверх на "крестовине".
|
||||
|
||||
**Можете установить любую комбинацию с помощью Ultra Tuner, или просто удалить файл `/config/ultrapaw/config.ini`, в таком случае вернется комбинация по умолчанию.**
|
||||
|
||||
После одновременного нажатия этих трех кнопок появится Ultra Paw меню со следующими пунктами:
|
||||
|
||||
* **Ultra Overlay** - модуль для управления профилями разгона
|
||||
* **Status Monitor** - модуль, показывающий метрики работы системы в реальном времени поверх экрана, не отбирая управление у игры. Есть много режимов работы, в том числе режим, позволяющий вывести счетчики частот и FPS в левом верхнем углу экрана
|
||||
* **FPSLocker** - модуль для разблокировки 60 fps в играх
|
||||
* **InfoNX** - модуль, показывающий расширенную информацию о потреблении энергии консоль
|
||||
* **ReverseNX-RT** - модуль, позволяющий принудительно выбрать режим работы консоли (портативный или докстаниця)
|
||||
* **EdiZon** - модуль для управления читами
|
||||
* **Sysmodules** - модуль, для управления модулями. Позволяет включать\отключать установленные модули
|
||||
|
||||
Нажав **(A)** на пункте, вы откроете его персональное меню.
|
||||
|
||||
### Включение и отключение модулей
|
||||
|
||||
Модуль **Sysmodules** позволяет включать и выключать выбранные модули, а так же управлять их автозагрузкой. Имейте ввиду, что некоторые модули можно включать и выключать без перезагрузки, однако ряд модулей после включения требуют перезагрузки консоли.
|
||||
|
||||
Справа от названия модуля указано его состояние, например **On | х**, где On говорит о текущем состоянии модуля (On - включен, Off - выключен), а **х** о том стоит ли модуль в автозагрузке (**х** - не стоит, **иконка домика** - стоит).
|
||||
|
||||
Кнопкой **(A)** можно включить или выключить модуль. Кнопка (Y) включает или выключает автозагрузку модуля. Если при нажатии на кнопку (A) модуль не меняет своё состояние, значит им можно управлять только перезапуском консоли. Включите автозагрузку модуля и перезагрузите консоль, чтобы он начал работать, или выключите и перезагрузите, чтобы перестал.
|
||||
|
||||
Модули, которые можно включать в любой момент сгруппированы сверху в группу **Dynamic**, а те, что требуют перезагрузки в группу **Static**.
|
||||
|
||||
### Сортировка и скрытие оверлеев
|
||||
|
||||
Кнопкой **(Y)** можно открыть настройки сортировки конкретного оверлея, где вы сможете его скрыть, что перенесет его в отдельное подменю скрытых оверлеев, либо выбрать цифру приоритета. Чем ниже цифра, тем выше в списке будет конкретный оверлей.
|
||||
|
||||
### Управление режимом работы консоли (портатив \ док, ReverseNX-RT)
|
||||
|
||||
Модуль **ReverseNX-RT** позволяет принудительно включать режим докстанции при игре в портативе и наоборот. С помощью кнопки **Change system control** нужно включить принудительное управление сменой режимов (отображается в строке **Controlled by system**, положение **No** означает, что можно менять режимы вручную). После чего можно переключать режимы кнопкой Change mode (отображается в строке **Mode**, где **Docked** - режим докстанции, **Handheld** - портатив).
|
||||
|
||||
Важно понимать, что в режиме докстанции консоль принудительно повышает частоты работы процессора, в следствии чего картинка становится более качественной, но и быстрее расходуется батарея.
|
||||
|
||||
### Разгон
|
||||
|
||||
В Ultra на выбор предоставляется несколько пакетов разгона, и у каждого свои преимущества.
|
||||
4ifir проще для новичка, при использовании этого пакета вам доступны заранее подготовленные пресеты настроек разгона системы, благодаря чему вам не придется долго мучаться с цифрами таймингов и вольтажами. Но из-за своей закрытости у Чифира есть куча проблем, которые невозможно никак решить извне, а автор не спешит что-то делать, просто игнорируя проблемы.
|
||||
Suite уже сложнее, заранее подготовленных пресетов нету, зато благодаря открытым исходникам и работе целого сообщество над ним - он работает стабильнее и эффективнее чифира.
|
||||
|
||||
Не забывайте, что после настройки/выбора пресета в Тюнере - нужно перезагрузить консоль и включить этот самый разгон для каждой игру отдельно через Ultra Overlay (#настройки-частот-и-говернор-governor)
|
||||
|
||||
#### Настройки частот и говернор (governor)
|
||||
|
||||
Настройка разгона осуществляется через модуль Ultra Overlay.
|
||||
|
||||
В заголовке располагаются следующие параметры:
|
||||
* **App ID** - показывает titleid запущенной игры
|
||||
* **Profile** - параметр синхронизирован с настройками ReverseNX-RT (если включена соответствующая настройка в параметрах) и показывает в каком режиме сейчас работает консоль (**Docked** - режим докстанции, **Handheld** - портатив)
|
||||
* **CPU** - текущая частота процессора
|
||||
* **GPU** - текущая частота ядра видеопроцессора
|
||||
* **RAM** - текущая частота памяти
|
||||
* **SOC** - температура процессора (SoC - система на чипе, означает, что на одном чипе находится и видеоядро и центральный процессор, потому температура у них одна на двоих)
|
||||
* **PCB** - температура контроллера питания акумулятора
|
||||
* **Skin** - температура платы консоли
|
||||
|
||||
* **Enable** - отвечает за активацию разгона. On - включен, Off - отключен
|
||||
* **Edit app Profile** - настройка профиля разгона для запущенного приложения. Указанные настройки будут автоматически применяться при запуске приложения. Имеют средний приоритет.
|
||||
|
||||
* Advanced
|
||||
* **Temporary overrides** - настройки разгона для всех приложений. Указанные настройки применяются для всех запускаемых приложений и действуют до перезагрузки приставки. Имеют наивысший приоритет.
|
||||
* **Global profile** - настройки разгона для всех приложений. Указанные настройки применяются для всех запускаемых приложений. Имеют самый низкий приоритет.
|
||||
* **Miscellaneous** - дополнительные настройки консоли, например, ограничение вольтажа зарядки, автобуст, ограничение процента зарядки и другие. Подробнее будет рассмотрено отдельно.
|
||||
|
||||
Разгон осуществляется с помощью смены максимальной частоты для CPU/GPU/RAM через настройки разгона **Global profile**/**Edit app Profile**/**Temporary overrides**. Причем настройки будут применяться в зависимости от приоритета (**Temporary overrides** -> **Edit app Profile** -> **Global profile**). Наивысший приоритет у **Temporary overrides**, если там не указано никаких настроек, то программа смотрит в настройки из **Edit app Profile**, если там пусто, то применяются настройки из **Global profile**. И если уже там ничего нет, то ставятся настройки системы по-умолчанию (**Default**).
|
||||
|
||||
**Global profile** и **Edit app Profile** содержат разделение на профили:
|
||||
* **Docked**
|
||||
* **Handheld**
|
||||
* **Charging**
|
||||
* **Official Charging**
|
||||
* **USB Charger**
|
||||
|
||||
Профили имеют так же свой приоритет. От наивысшего к низшему: **Docked** -> **Official Charging** / **USB Charger** -> **Charging** -> **Handheld**. Принцип применения ровно такой же. Режим **Docked** имеет наивысший приоритет и перезаписывает значения профилей с приоритетом ниже. **Official Charging** или **USB Charger** имеют одинаковый приоритет и перезаписывают значения профилей **Charging** и **Handheld**, и так далее.
|
||||
|
||||
Профили **Docked** и **Handheld** синхронизированы с настройками Reverse-NX (можно отключить в **Miscellaneous** модуля **Ultra Overlay**) и зависят от режима работы консоли (док/портатив). Профиль **Charging** включается при подключении любой зарядки к консоли. Профиль **Official Charger** включается при подключении оригинальной зарядки, или любой другой, но с поддержкой протокола Power Delivery. Профиль **USB Charger**, при подключении любой другой зарядки. То есть, вы можете настроить отдельный профиль разгона для зарядки от любого источника и отдельно для мощного или маломощного, причем последние имеют приоритет выше.
|
||||
|
||||
**Edit app Profile** содержит в себе управление говернорами
|
||||
|
||||
Говернор (англ. governor) в контексте управления частотами процессора - это программа или механизм, который контролирует частоту работы процессора и его потребление энергии.
|
||||
|
||||
Суть работы говернора заключается в том, чтобы определить оптимальную частоту работы процессора в зависимости от нагрузки на него. Если процессор не нагружен, говернор может снизить его частоту, чтобы снизить потребление энергии и уменьшить тепловыделение. Если же процессор получает высокую нагрузку, говернор может увеличить его частоту, чтобы обеспечить высокую производительность.
|
||||
|
||||
* **CPU Freq Governor** - включить или выключить управление частотой **центрального** процессора
|
||||
* **GPU Freq Governor** - включить или выключить управление частотой **графического** процессора
|
||||
|
||||
Оба эти пункта будут доступны только если в **Miscellaneous** активировано значение **Frequency Governor**
|
||||
|
||||
Включенный говернор GPU в ряде игр может привести к подтормаживанию или снижению FPS (например, Metroid Prime Remastered иногда сбрасывает FPS до 30 при выходе из карты в игру). Если в вашей игре наблюдается такое, отключите говернор для GPU.
|
||||
|
||||
Каждый из профилей содержат в себе отдельные пункты для разгона **CPU**, **GPU** и **RAM**. Что за что отвечает легко понять по названию. В каждом из этих пунктов есть значение **Default**, которое отвечает за значение по-умолчанию, которое берется из предыдущей по приоритету настройки разгона (Temporary/App/Global/Системное значение) из профиля, соответствующего приоритета. Рабочие частоты подбираются индивидуально для каждой конкретной игры на каждой конкретной консоли. Подробнее про подбор частот будет ниже.
|
||||
|
||||
* **Miscellaneous** - раздел с дополнительными настройками. Содержит в себе следующие опции:
|
||||
* **Auto CPU Boost** - активный слой автобуста. Повышает частоту CPU при нагрузке на системное ядро, что обычно означает подгрузку данных, стриминг текстур, локаций и т. п. На Erista лучше отключать, поскольку влияет на время работы от батареи
|
||||
* **Sync ReverseNX Mode** - настройка, синхронизирующая состояние значения ReverseNX с профилем Ultra Overlay. То есть, если в реверсе стоит **Handheld**, то активный профиль в Ultra Overlay будет **Handheld**, если **Docked**, то **Docked** соответственно
|
||||
* **Frequency Governor** - включает говерноры в **Edit app Profile**
|
||||
* **Charging Current** - ограничение тока зарядки
|
||||
* **Charging Limit** - ограничение до которого приставка будет заряжаться
|
||||
* **Force Disable Charging** - опция, позволяющая не заряжать батарею при работе от зарядки. То есть, батарея не будет садиться, но и фактически не будет заряжаться тоже. Позволяет избежать проблем с десинхронизацией батареи
|
||||
* **Screen Backlight** - отключает подсветку экрана. Полезно в связке с sys-dvr
|
||||
* **Info** - различные метрики:
|
||||
* **Charger** - тип зарядного устройства, подключенного к консоли. Показывается вольтаж и ампераж, а так же мощность в Ваттах
|
||||
* **Battery** - напряжение на батарее и её температура
|
||||
* **Current Limit** -
|
||||
* **Charging Limit** - значение, указанное в **Charging current**
|
||||
* **Raw Charge** - Заряд батареи, который отдает контроллер зарядки
|
||||
* **Battery Age** - "здоровье" батареи
|
||||
* **Power Role** -
|
||||
* **Current Flow** - текущее потребление
|
||||
* **CPU Volt** - вольтаж CPU
|
||||
* **GPU Volt** - вольтаж GPU
|
||||
* **DRAM Volt** - вольтажи памяти
|
||||
|
||||
#### Конфигуратор Ultra Tuner
|
||||
|
||||
**Ultra Tuner** - это пакет, позволяющий произвести тонкую настройку параметров под свою консоль. В случае нестабильной работы пакетов разгона, или при желании увеличить производительность консоли, Ultra Tuner - Ваш незаменимый помощник.
|
||||
|
||||
Чтобы попасть в Ultra Tuner - откройте Ultra Paw меню комбинацией **(L)+(R)+(▲)**, после чего нажмите **(►)** чтобы попасть в меню пакетов, и выберите Ultra Tuner.
|
||||
|
||||
Внутри доступны следующие Страницы:
|
||||
* **Tuner** - основное меню конфигурации, пресетов и бэкапов.
|
||||
* **Updater** - меню скачивания обновлений, приложений, модов и бонусом - изменения системных настроек атмосферы.
|
||||
|
||||
|
||||
В Tuner находятся три основных раздела:
|
||||
* **CPU** - настройки процессора:
|
||||
* **Maximum MHz** - настройка максимальной частоты CPU. Не гарантирует, что в реальности ваш процессор будет держать такую частоту, что бы узнать реальную производительность, воспользуйтесь homebrew **mhz**
|
||||
* **Voltage Limit** - настройка максимального допустимого вольтажа CPU. Чем выше мощность - тем выше максимальная доступная частота процессора, однако выше и потребление. Рекомендуется повышать при нехватке максимальной мощности для загружающих процессор игр.
|
||||
* **Undervolt Mode** - настройка, позволяющая задать глобальные параметры питания для CPU. Чем выше цифра, тем ниже потребление процессора, но могут возникнуть проблемы
|
||||
* **GPU** - настройки видео-ядра:
|
||||
* **Undervolt Mode** - настройка, позволяющая задать глобальные параметры питания для видео-ядра. Сущетсвует три режима:
|
||||
* Overvolt - увеличенное потребление видео-ядра. Позволяет добиться стабильности на более высоких частотах GPU/RAM, однако уменьшает автономность.
|
||||
* Base - стандартный режим Ultra.
|
||||
* Undervolt - режим экономного потребления видео-ядра. Увеличивает автономность, однако может быть нестабильным на некоторых консолях.
|
||||
* **Частоты GPU** - здесь представлены все частоты GPU, доступные в Ultra Overlay. Выбирая частоту, Вам на выбор будет предоставлен набор напряжений для этой частоты. Данная настройка позволяет тонко регулировать энергопотребление на конкретных частотах, давая возможность снизить потребление на низких частотах или повысить напряжение, если Вашей консоли не хватает стандартных настроек питания.
|
||||
**ВАЖНО:** при выставлении фиксированного напряжения на частоту, GPU Undervolt Mode будет неприменим к этой частоте.
|
||||
Внутри каждой частоты есть пункт Default, позволяющая Вам сбросить настройки на значения по умолчанию.
|
||||
* **RAM** - настройки оперативной памяти:
|
||||
* **Maximum MHz** - настройка максимальной частоты памяти. При изменении данного параметра, частота выставляемая пунктом RAM Maximum будет заменена на выбранную. Чем выше частота - тем выше производительность, однако более высокие частоты могут привести к артефактам и вылетам при неправильной настройке сопутствующих параметров.
|
||||
* **Vddq Voltage** - первичный вольтаж памяти. Более высокие значения могут повысить стабильность на высоких частотах, оказывая минимальное влияние на энергопотребление. Только для Марико.
|
||||
* **Vdd2 Voltage** - вторичный вольтаж памяти. Более высокие значения также могут повысить стабильность на высоких частотах, оказывая минимальное влияние на энергопотребление. Для Эрист отвечает так же и за Vddq.
|
||||
* **EMC DVB Table** - таблица питания контроллера памяти. Гарантировано повышая стабильность на высоких частотах памяти. Чем выше значение - тем выше потребление. Рекомендуется повышать в первую очередь если у вас проблемы с разгоном RAM.
|
||||
* **Timing [1-6 (7 сьют)]** - настройки таймингов. Каждый пункт отвечает за свой набор таймингов, позволяя производить индивидуальную подгонку. Чем выше значение, тем выше производительность, однако слишком высокие значения могут привести к вылетам в зависимости от модели памяти. Для тонкой настройки - понизьте все значения до 1, после повышайте каждый параметр на единицу (с последующей перезагрузкой), проверяя стабильность. В случае вылета или артефактов - понизьте это значение на 1 и двигайтесь к следующему Core Timings пункту.
|
||||
Иногда вы можете видеть подобные обозначения таймингов: 365532. Каждая цифра соответсвует настройке тайминга. Например, для случая выше: Timing 1 установлен на 3, Timing 2 - на 6 и так далее.
|
||||
|
||||
**ВАЖНО:** чтобы применить изменения - перезагрузите консоль.
|
||||
|
||||
В Ultra Tuner доступен механизм создания бекапов Ваших конфигураций. Для того чтобы управлять бекапами - зайдите в Backup Manager в главном меню Тюнера.
|
||||
Внутри доступны три пункта:
|
||||
* **Backup** - позволяет Вам создать новый бекап из текущей конфигурации. Бекапы расположены по пути */atmosphere/kips/.bak*. Новый бекап заменяет собой предыдущий
|
||||
* **Restore** - восстановить конфигурацию из бекапа.
|
||||
* **Delete** - удалить бекап файл.
|
||||
|
||||
#### Пресеты
|
||||
|
||||
Чем круче пресет, тем агрессивнее оптимизация таймингов/значений андервольтинга. Тем быстрее и энергоэффективнее игровая консоль. Стоковый 4ifir/Suite должен работать на почти любой консоли. Вероятность того, что у Вас заработают Mega/MK-4 и выше, зависит от [удачности процессорного бининга](https://www.computerra.ru/285384/dzhekpot-kremnievoj-loterei-chto-takoe-binning-protsessory/) конкретно вашей консоли.
|
||||
|
||||
Пресеты располагаются так: Core < Mega < Ultra < Red > Green > Blue > Gray
|
||||
Пресеты Core/Mega/Ultra аналогичны стейджам Base/ST/ST+ из оригинального Чифира, только более оптимизированные, и идущие у большего числа людей.
|
||||
Пресеты Gray/Blue/Green/Red - эксклюзив Ultra, и тоже своего рода представляют аналоги стейджей Чифира, но со своими особенностями.
|
||||
Gray - самый слабый пресет, если у вас не идет даже Core, но разгон использовать хочется - это ваш выбор.
|
||||
Blue и Green аналоги ST и ST+, но с таймингами под Micron/Hynix
|
||||
Red - самый крутой пресет, потому, что RED GOEZ FASTA!
|
||||
|
||||
Для выбора стабильного пресета нужно тестировать консоль следующим образом:
|
||||
|
||||
**ВНИМАНИЕ!!!** Если на каком-либо из этапов при тестировании стейджа произошло зависание, либо игра зависла, либо на экране появились артефакты, либо проявилось какое-либо неожиданное поведение консоли, понижайте пресет. Текущий ваша консоль не тянет!
|
||||
|
||||
1. Выберите максимальный из доступных пресетов в Тюнере, перезагрузитесь
|
||||
1. Отключите говерноры (**Ultra Overlay** > **Frequency Governor** > **Off**)
|
||||
1. Выберите максимально доступную частоту памяти в **Temporary overrides**.
|
||||
1. Если консоль не зависла, выберите максимально доступную частоту GPU в **Temporary overrides**
|
||||
1. Если консоль не зависла, выберите максимально доступную частоту CPU в **Temporary overrides**
|
||||
1. Если консоль не зависла, запустите любую тяжелую игру и протестируйте с ней минут 10-15.
|
||||
1. Если никаких глюков/глитчей/зависаний/артефактов не обнаружено, поздравляем, ваша консоль выиграла в кремниевой лотерее.
|
||||
|
||||
Вы можете добиться стабильной работы стейджа понизив частоты памяти или GPU.
|
||||
|
||||
### Выжимаем больше - читы и патчи на улучшение графики
|
||||
|
||||
#### Читы
|
||||
|
||||
Помимо возможности включить режим докстанции при игре в портативе, можно дополнительно установить графические модификации для игр. Некоторые из них активируют большую частоту кадров, некоторые позволяют использовать производительность разогнанной консоли для улучшения отображаемой картинки, некоторые наоборот, улучшают производительность игры для стабильной работы на частотах без разгона.
|
||||
|
||||
Читы для разблокировки 60FPS в некоторых играх можно взять в **AiO Updater** > **Download cheats** > **Download graphics enhancing cheats**. Если для установленных игр есть соответствующие читы, то они будут установлены автоматически. Помните что если для этих игр у вас уже были установлены читы, то установка читов для разблокировки удалит уже имеющиеся читы. Однако, если у вас есть читы для разблокировки FPS, то установка обычных читов через апдейтер просто добавит их, при этом сохранив читы на разблокировку.
|
||||
|
||||
Активация читов проводится через меню **Tesla** > **EdiZon** > **Cheats** во включенной игре. В появившемся меню активируйте необходимый чит. После перезапуска игры, читы, что вы активировали ранее так же будут активны!
|
||||
|
||||
#### Модификации
|
||||
|
||||
Моды для улучшения картинки нужно искать [на 4PDA](https://4pda.to/forum/index.php?act=findpost&pid=81825647&anchor=Spoil-81825647-8) или в телеграм-боте [Switch_library_bot](https://t.me/Switch_library_bot) по запросу `/mods` (пароль для бота - `alabama`).
|
||||
|
||||
Установка мода различается в зависимости от того как именно он сделан.
|
||||
|
||||
* Если мод идет в виде LayeredFS папки, то его нужно класть в `/atmosphere/contents/%TitleID%/romfs`, где TitleID - title id вашей игры, состоящий из 16 символов в 16-тиричной системе исчисления (например, 01002CC003FE6000). Отнеситесь внимательно к тому как именно такая модификация распространяется и не допустите вложенности папок. Например, если вы видите что в архиве с модом папка `atmosphere`, то просто распакуйте ее в корень карты памяти и согласитесь на замену файлов. Если в архиве лежит папка с title id игры, поместите ее в папку `/atmosphere/contents/`. Убедитесь, что папка не дублируется (например `/atmosphere/contents/01002CC003FE6000/romfs` - правильно, а `/atmosphere/contents/01002CC003FE6000/01002CC003FE6000/romfs` или `/atmosphere/atmosphere/contents/01002CC003FE6000/romfs` - не правильно), иначе мод не будет работать.
|
||||
* Если мод идёт в виде IPS-патча, то есть в виде файла или файлов с расширением `*.ips`, то поместите его в папку `atmosphere/exefs_patches`. В папке `atmosphere/exefs_patches` можете создать папку с названием мода, это допускается. Если в архиве с модом есть просто папка `exefs_patches`, то поместите её с заменой в папку `atmosphere`. Часто моды могут комбинировать оба способа, тогда нужно понять что именно и куда копировать. Если вам что-то не понятно, попробуйте поискать информацию там, где вы эти моды качали или в текстовом файле, который может распространяться вместо с модом.
|
||||
|
||||
Модификации установленные таким образом автоматически активируются при запуске игры.
|
||||
|
||||
Помните, что важна версия игры для которой делалась модификация. Мод, сделанный для одной версии игры может не заработать на другой.
|
||||
|
||||
Не стесняйтесь играть с частотами и использовать Status Monitor для достижения наилучшего стабильного результата!
|
||||
|
||||
#### FPSLocker
|
||||
|
||||
С помощью этого плагина можно разлочить частоту кадров в некоторых играх без использования читов.
|
||||
|
||||
Метрики в заголовке:
|
||||
* **Большое число справа** - показывает, сколько кадров прошло за последнюю секунду для запущенной игры. Позволяет убедиться, что программа работает верно
|
||||
* **Interval Mode** - внутреннее значение игрового движка на базе NVN API, может принимать значение **0**, **1** или ****2****. Меняя это значение мы можем изменить максимальное количество FPS в игре. **2** - 30 FPS, **1** - 60 FPS, **0 - значить у игры нет ограничения на количество FPS, либо используется другое API.
|
||||
* **Custom FPS Target** - показывает максимальное количество FPS для данной игры. Если игра использует собственные ограничения FPS движка, а не стандартное, то может быть невозможно разблокировать более 30 FPS без дополнительных патчей
|
||||
|
||||
Переключатели:
|
||||
* **Increase/Decrease FPS target** - изменить целевое количество кадров в секунду с шагом в 5 FPS. **Минимум** - 15 FPS, **Максимум** - 60 FPS. Если FPS установлено более 30, то **Interval Mode** устанавливается на 1. В противном случае ставится 2.
|
||||
* **Disable custom FPS target** - убирает ограничение FPS в зависимости от установленного **Interval Mode**. Если **Interval Mode** 2, то игра будет упираться в 30 FPS, если 1, то в 60.
|
||||
* **Sync Wait (!)** - это опасная настройка, которая в большинстве случаев будет приводить к падению игры (например, Witcher 3 и Breath of The Wild), но в некоторых случаях может принести пользу отключив двойную буферизацию, привнеся небольшие графические артефакты (например, Xenoblade Chronicles 3). Используйте с осторожностью. Рекомендуется держать **включенной**.
|
||||
* **Save settings** - сохранить профиль для текущей запущенной игры, который будет автоматически загружен плагином при запуске в следующий раз. Не используйте эту функцию, если вы отключили синхронизацию (Sync Wait Off) и не проверили ее на безопасность, чтобы не пришлось вручную удалять сохраненный профиль. Профиль сохраняется в `SaltySD/plugins/FPSLocker/TITLEID.dat`
|
||||
|
||||
### Оптимизация работы, выбор подходящих частот и энергопотребление
|
||||
|
||||
Чтобы достичь оптимальной производительности и избежать излишнего расхода энергии на вашем устройстве, нужно подобрать такие параметры частот, чтобы игра не тормозила и не более. Для этого рекомендуется использовать Status Monitor - инструмент, который позволяет отслеживать загрузку компонентов вашего устройства.
|
||||
|
||||
Для того, чтобы найти оптимальный баланс между производительностью и энергопотреблением, вы можете понизить (или повысить) частоты настройки в соответствии с результатами загрузки компонентов в Status Monitor. Найдите точку, где железо не загружено на 100%, но находится близко к этому уровню. Помните, что на свитче "узким горлышком" является память, при этом гонится она фактически бесплатно, то есть ее можно ставить на максимум при котором устройство работает стабильно, и это не повлияет на расход батареи. Чем выше стейдж, тем "дешевле" для консоли разгон памяти и тем он эффективнее. Гнать CPU обычно толку мало (но бывают и исключения). Поэтому, оптимальным вариантом с которого стоило бы начать, является максимальный разгон памяти и разгон CPU\GPU где-то на середину. Говерноры при этом рекомендуется отключить. Если игра при таком варианте тормозит, добавьте частоту GPU и делайте это до тех пор, пока тормоза не уйдут совсем. После этого включите говерноры. Если наблюдаются просадки FPS после их включения, отключите говернор GPU, поскольку часто именно он может приводить к просадкам.
|
||||
|
||||
Не гонитесь за частотами и цифрами. Единственным мерилом удачного разгона является ваш комфорт при игре. Частоты не отражают фактической производительности, и тем более энергопотребления. Обратите внимание, что каждое устройство имеет уникальные характеристики, поэтому необходимо настраивать частоты в соответствии с конкретной моделью вашего устройства и играми, которые вы собираетесь запускать на нем. А каждая игра имеет уникальные требования.
|
||||
|
||||
С помощью модуля **InfoNX** можно следить за энергопотреблением консоли. Замеряйте потребление в тестируемой игре без разгона и с разгоном, а после найдите баланс между производительностью и энергопотреблением. Не забывайте, что чем выше потребление энергии, тем быстрее сядет батарея в портативном режиме. Для работы в докстанции или от зарядки, энергопотребление не так уж и важно.
|
||||
|
||||
## Проблемы и их решения
|
||||
|
||||
### Проблемы с батареей
|
||||
|
||||
Аккумулятор не деградирует от силы тока, а только при достижении определенной температуры. Однако, встроенные механизмы защиты, основанные на законах физики, разрывают цепь питания, задолго до того, как достигнутые температуры успевают навредить аккумулятору, чтобы предотвратить деградацию химических свойств ячеек.
|
||||
|
||||
MARIKO оснащен контроллером PMIC MAX77812 рассчитанного на токи до 6A CPU / 12A GPU. Достиг лимита = ушел в защиту.
|
||||
ERISTA оснащена более мощным контроллером PMICs MAX77621 на 16A CPU / 16A GPU.
|
||||
|
||||
Нагрузка свыше 15 ватт (примерно; точные значения лимитов тока для разных моделей консоли указаны в спецификациях производителя) может привести к снижению оценки остаточной ёмкости аккумулятора в консоли Nintendo Switch. Контроллер питания консоли сравнивает фактические показания с показаниями, которые были вбиты с завода, и в случае превышения дергает аварийное отключение. Консоль может считать, что аккумулятор не вывез, и снижает оценку его остаточной ёмкости, на 1% при каждом сбое. Это может привести к тому, что индикатор заряда консоли начинает мгновенно опускаться до 1% заряда, когда дается нагрузка на аккумулятор. Battery Desync Fix, может позволить вернуть списанную по ошибке ёмкость аккумулятора.
|
||||
|
||||
#### Батарея начала разряжаться до 1% со 100% за считаные минуты, однако без проблем работает на 1% несколько часов
|
||||
|
||||
Контроллер питания рассчитан на пиковое потребление энергии примерно в 15W, если оно будет превышено, то консоль аварийно активирует защиту и выключится. Вам нужно снизить аппетиты, поскольку это влияет на данные калибровки контроллера. Консоль может считать, что аккумулятор не вывез, и снизить оценку его остаточной ёмкости, на 1% при каждом сбое. Это может привести к тому, что индикатор заряда консоли начинает мгновенно опускаться до 1% заряда, когда дается нагрузка на аккумулятор. Для решения этой проблемы существует [Battery Desync Fix NX](https://github.com/CTCaer/battery_desync_fix_nx).
|
||||
|
||||
**ВНИМАНИЕ!!!** Не запускайте [Battery Desync Fix NX](https://github.com/CTCaer/battery_desync_fix_nx), если у вас нет проблем с батареей, иначе они появятся! Вам нужно будет делать отдельную калибровку для стока и каждого вашего эмунанда отдельно, поскольку данные о калибровке хранятся отдельно в каждом из них!
|
||||
|
||||
Для сброса статистика батареи:
|
||||
1. Разрядите батарею до выключения приставки, и включите ее обратно (можно от кабеля)
|
||||
* Если приставка засыпает из-за низкого заряда, будите её, пока не увидите красный значок батареи
|
||||
1. Запустите [Battery Desync Fix NX](https://github.com/CTCaer/battery_desync_fix_nx)
|
||||
1. Нажмите (X), чтобы сбросить статистику
|
||||
1. Нажмите (B), чтобы выйти из приложения
|
||||
1. Полностью зарядите и разрядите приставку дважды
|
||||
* Под полной разрядкой подразумевается уровень зарадя батареи в пределах 3205-3210mV, посмотреть можно в InfoNX ([подробнее..](https://t.me/kefir_switch/48074/172575))
|
||||
* Не переключайтесь между сиснандом и эмунандами пока не закончите два цикла зарядки\разрядки, поскольку прошивка восстановит прежние значения калибровки батареи, что нам не нужно, и придется начинать все с начала
|
||||
* Если приставка выключилась из-за низкой батареи (перестает просыпаться от нажатия на кнопку питания), подключите к ней зарядник. Если приставка после этого висит на черном экране со значком батареи, отключите\подключите зарядку. Делайте так, пока не сможете снова зайти в прошивку и уже в ней заряжайте приставку до 100%, после чего повторите цикл разрядка\зарядка еще раз
|
||||
* Не оставляйте приставку заряжаться в черном экране со значком батареи, иначе прошивка восстановит прежние значения калибровки батареи, что нам не нужно, и придется начинать все с начала
|
||||
1. После того как вы откалибровали батарею в эмунанде, проделайте все так же для сиснанда.
|
||||
|
||||
#### При игре с включенным разгоном через некоторое время показывается значок пустой батареи
|
||||
|
||||
Контроллер питания рассчитан на пиковое потребление энергии примерно в 15W, если оно будет превышено, то консоль аварийно активирует защиту и выключится. Это и происходит. Вероятно, вы привысили установленный в контроллере порог. Умерьте пыл и сбавьте значения частот.
|
||||
|
||||
#### Игра перестала запускаться и стала вылетать
|
||||
|
||||
Первым делом попробуйте удалить профиль этой игры от FPSLocker, вероятно вы отключили Sync Wait не убедившись в его безопасности. Профиль находится в `SaltySD/plugins/FPSLocker/TITLEID.dat`. Title игры можно посмотреть в **DBI** > **Browse Installed**
|
||||
|
||||
#### Не запускается Ведьмак 3/Resident Evil Revelations
|
||||
|
||||
**HB Menu** > **SysDVR** > **DVR-Patches** > **Uninstall** > **Reboot**
|
||||
Если нету SysDVR-conf, его можно скачать в Updater
|
||||
|
||||
#### FPS в игре всегда показывает 0/254 или ReverseNX не переключает режимы
|
||||
|
||||
Вероятна ваша игра не совместима с **SaltyNX**, который отвечает за работу эти функций. Список несовместимых игр находится [здесь](https://github.com/masagrator/SaltyNX#list-of-titles-not-compatible-with-pluginspatches)
|
||||
|
||||
## FAQ
|
||||
|
||||
**В**: Как использование разгона влияет на срок службы батареи
|
||||
**О**: Если коротко, то никак.
|
||||
|
||||
**В**: Моя батарея деградировала
|
||||
**О**: Она не деградировала. У нее сбилась калибровка. Вернуть заводскую емкость батареи можно по инструкции выше
|
||||
|
||||
**В**: Свитч выключается при использовании разгона
|
||||
**О**: Вероятно, у вас не тянет значения, которые вы задали. Пробуйте их понизить
|
||||
|
||||
**В**: Свитч разряжается до 1% со 100 за 10 минут
|
||||
**О**: Смотрите выше в разделе Проблемы и решения
|
||||
|
||||
**В**: Нет говернора
|
||||
**О**: Откройте **Ultra Overlay** > **Miscellaneous** > **Frequency Governor**, тогда оба говернора появятся в **Ultra Overlay** > **Edit app Profile**
|
||||
|
||||
**В**: Частоты прыгают
|
||||
**О**: При работе говернора так и должно быть
|
||||
|
||||
**В**: Не могу удалить аккаунт
|
||||
**О**: **DBI** > **Tools** > **Delete account...**
|
||||
|
||||
|
||||
## Лицензии
|
||||
@ -443,27 +103,40 @@ ERISTA оснащена более мощным контроллером PMICs M
|
||||
|
||||
[GPL 2.0](https://github.com/Atmosphere-NX/Atmosphere/blob/master/LICENSE):
|
||||
* [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)
|
||||
* [Hekate](https://github.com/CTCaer/hekate)
|
||||
* [Status-Monitor-Overlay](https://github.com/masagrator/Status-Monitor-Overlay)
|
||||
* [Switch-OC-Suite](https://github.com/hanai3Bi/Switch-OC-Suite)
|
||||
|
||||
[CC-BY-NC-4.0 License](https://github.com/ppkantorski/Ultrahand-Overlay/blob/main/LICENSE)
|
||||
* [Ultrahand-Overlay](https://github.com/ppkantorski/Ultrahand-Overlay)
|
||||
[MIT License](https://github.com/masagrator/FPSLocker/blob/main/LICENSE)
|
||||
* [FPSLocker](https://github.com/masagrator/FPSLocker)
|
||||
|
||||
|
||||
|
||||
|
||||
## Благодарности
|
||||
|
||||
* Cooler3D
|
||||
* Efosamark
|
||||
* rashevskyv/хНЯ
|
||||
* snupt/Catcher In The Grain Field
|
||||
* ppkantorski/b0rd2dEAth
|
||||
* hanai3Bi/Meha
|
||||
* 4PDA
|
||||
* B3711
|
||||
* ppkantorski
|
||||
* Meha
|
||||
* duckbill
|
||||
* snupt
|
||||
#### А так же - отдельная благодарность администрации и участникам Ultra Group
|
||||
|
||||
|
||||
|
||||
## Поддержка
|
||||
|
||||
Если вам понравились результаты моих стараний, и у вас появилось желание закинуть мне на шаурму - я буду очень благодарен.
|
||||
* Сделать это можно через @wallet telegram, на мой аккаунт @redraz
|
||||
* Либо через Сбер: 2202200513345833
|
||||
* Так же по QR через Tinkoff
|
||||

|
||||
Если вам нравится проект, и у вас появилось желание поддержать меня копеечкой - я буду очень благодарен.
|
||||
У меня в данный момент нет других заработков, так что любая денежная помощь очень ценна для меня.
|
||||
```
|
||||
СБП : +79168089980
|
||||
|
||||
Альфа : 2200152336577997
|
||||
Tinkoff : 2200700170486970
|
||||
Сбер : 2202200513345833
|
||||
|
||||
TON: UQA9My51bkGZHbYhbdRZfp6B60N7VJfsnKl0sakgw9YhAPct
|
||||
BTC: 18K6NN8NEavvMJL5Do3VTyJbL8NeZPHo93
|
||||
USDT TRC20: TUZ5szAmRsnvBuC4rFB8RaAoCbN6Ucy4sL
|
||||
```
|
||||
|
||||
### Tinkoff QR
|
||||

|
127
README_ENG.md
Normal file
127
README_ENG.md
Normal file
@ -0,0 +1,127 @@
|
||||
# UltraNX by **[redraz](https://github.com/redraz)**
|
||||
|
||||

|
||||
|
||||
### [Telegram group](https://t.me/UltraNX) - Don't be afraid to write in English, we will understand everything and answer you!
|
||||
#
|
||||
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
|
||||
|
||||
### [Ultra 2.5|R1](https://github.com/Ultra-NX/UltraNX/releases) Supports HOS 20.2.0
|
||||
### [Ultra 2.5|Pre2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.5-R2) Partially supports HOS 20.3.0 (Safe Mode Only)
|
||||
|
||||
|
||||
|
||||
## Features of Ultra
|
||||
|
||||
* Pre-configured OC Switchcraft (Successor to OC-Suite) with presets.
|
||||
* By default, there's already an undervolt that noticeably reduces the console's consumption, and a slight memory overclock that will make games smoother.
|
||||
* The best overclocking customizer for Switch - Ultra-Tuner, that allows you to customize overclocking right from the console. It was the first, and remains unique.
|
||||
* The CFW is as light as possible. There are no unnecessary things in it, only minimum necessary for overclocking and comfortable use.
|
||||
* Modular design. A minimum of applications/plugins/overlays are included, but you can always add more via the Ultra Tuner.
|
||||
* Manual adjustment of cooling system curves, and presets.
|
||||
* Regular updates, and an active community.
|
||||
* [Forks](https://github.com/Ultra-NX/Ultra-Resources/tree/main/patches) (own modifications) of programs and components needed for convenience, security and empowerment:
|
||||
* Atmosphere fork with Ultra version in system information, and disabled reports, which usually clogs up the SD card, wastes its resource and breaks the file system.
|
||||
* Mission Control fork, with the “easter egg” cut out, making the joycons yellow-blue.
|
||||
|
||||
|
||||
|
||||
## Content of Ultra
|
||||
|
||||
1. **[Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)** - Atmosphère, custom firmware for the Nintendo Switch.
|
||||
1. **[Hekate](https://github.com/CTCaer/hekate)** - Custom Nintendo Switch graphical bootloader, firmware patcher, toolkit and more.
|
||||
1. **[Ultra Tuner](https://github.com/Ultra-NX/Ultra-Tuner)** - Package for Ultrahand, which allows you to fine-tune the OC parameters for your console. In case of unstable overclocking, or if you want to increase the performance of your console, Ultra Tuner is your indispensable assistant.
|
||||
1. **[OC-Switchcraft](https://github.com/halop/OC-Switchcraft-EOS/releases)**, a fork of **[OC-Suite](https://github.com/hanai3Bi/Switch-OC-Suite/)** - Atmosphere Loader with overclocking from B3711, allows you to reach from N.Switch power Xbox One. Updated in time to support new Atmosphere features.
|
||||
|
||||
|
||||
1. **Installed Payloads**:
|
||||
* [Lockpick RCM](https://github.com/impeeza/Lockpick_RCMDecScots) - Program for dumping console keys.
|
||||
* [TegraExplorer](https://github.com/suchmememanyskill/TegraExplorer) - A low-level file manager for working with the system.
|
||||
|
||||
|
||||
1. **Installed Homebrew**
|
||||
* [Sphaira](https://github.com/ITotalJustice/sphaira) - Modern Homebrew Menu, analogous to nx-hbmenu
|
||||
* [AiO Switch Updater](https://github.com/HamletDuFromage/aio-switch-updater) - Program to update Ultra to the current version, as well as to download cheats.
|
||||
* [Daybreak](https://github.com/Atmosphere-NX/Atmosphere) - A program for updating OS.
|
||||
* [DBI](https://4pda.to/forum/index.php?showtopic=939714&st=1100#entry86288632) - The best file manager, save manager and program installer on the console.
|
||||
|
||||
|
||||
1. **Installed Modules**
|
||||
* [SaltyNX](https://github.com/masagrator/SaltyNX) - Background module allowing to modify files/processes in console, supports plugins. Not compatible with 32-bit games (list on the project's github).
|
||||
* [sys-clk](https://github.com/ppkantorski/sys-clk) - Module responsible for overclocking CPU, memory and GPU - for better performance. I change versions from different authors from time to time. Original authors: Meha/hanai3Bi, lineon, p-sam.
|
||||
* [nx-ovlloader](https://github.com/ppkantorski/nx-ovlloader) - This module is used to switch the installed modules.
|
||||
* [sys-patch](https://github.com/impeeza/sys-patch) - Patches the system to run unsigned software instead of sigpatches.
|
||||
* [Mission Control](https://github.com/ndeadly/MissionControl) - A module that allows you to connect almost any gamepads to the console via bluetooth.
|
||||
* [sys-con](https://github.com/o0Zz/sys-con) - A module that allows you to connect almost any gamepads to the console via USB.
|
||||
* [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) - Special overlay-menu for interacting with the system: overclocking, controlling modes via ReverseNX, enabling cheats, etc. Also allows to use your own packages, for example, Ultra Tuner.
|
||||
- **`Ultra OC (sys-clk)`**, a mod of [sys-clk](https://github.com/ppkantorski/sys-clk) - Overlay for controlling sys-clk module. Slightly modified by me, but without digging into sources (Since they're closed).
|
||||
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay), a fork of [Status Monitor](https://github.com/masagrator/Status-Monitor-Overlay) - Overlay that allows you to monitor console parameters in real time. It can act as an FPS counter. You change preset of Micro-overlay appearance in Updater.
|
||||
- [FPSLocker](https://github.com/masagrator/FPSLocker) - An overlay that allows you to unlock 60 FPS in games.
|
||||
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - An overlay for using cheats.
|
||||
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - ReverseNX control overlay.
|
||||
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Overlay for enabling and disabling installed system modules.
|
||||
|
||||
|
||||
1. **Available for download via [Updater](https://github.com/Ultra-NX/Ultra/wiki/Tuner-RU#Updater)**
|
||||
* Homebrews:
|
||||
* [DBI](https://4pda.to/forum/index.php?showtopic=939714&st=1100#entry86288632) - Here you can download a DBI or update an existing one.
|
||||
* [Linkalho](https://gbatemp.net/download/linkalho.38822/) - Account linking program.
|
||||
* [HB App Store](https://github.com/fortheusers/hb-appstore) - A free store for downloading Homebrew apps.
|
||||
* [PPSSPP](https://gbatemp.net/threads/ppsspp-switch-standalone-beta.544071/post-10492671) - PSP emulator.
|
||||
* [Moonlight](https://github.com/XITRIX/Moonlight-Switch) - Moonlight client, allows to stream games from PC.
|
||||
* [ThemezerNX](https://github.com/suchmememanyskill/themezer-nx) + [NXThemes Installer](https://github.com/exelix11/SwitchThemeInjector) + [Theme Patches](https://github.com/exelix11/theme-patches) - Searching and installing themes on Switch.
|
||||
* [Battery Desync Fix](https://github.com/CTCaer/battery_desync_fix_nx) - Program to reset the battery controller. Do not use unnecessarily!
|
||||
* [MemToolkitNX](https://discord.com/channels/854839758815363072/1173171845139288114/1324099100202766408) - Benchmark and Memory Tester. The result is highly dependent on CPU overclocking.
|
||||
* [MemToolkitNX OLD](https://discord.com/channels/854839758815363072/1173171845139288114/1276196700750479480) - Benchmark and Memory Tester. The result is highly dependent on CPU overclocking. The old version, which many people like better than the new one.
|
||||
* [MicroMemBench](https://github.com/rashevskyv/4IFIR) - Benchmark. The result is highly dependent on CPU overclocking. A version from 4ifir that tests CPU Copy in real time, which allows you to quickly find out the result after changing timings.
|
||||
|
||||
* Overlays:
|
||||
* [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Status Monitor fork from kantorski.
|
||||
* [Tetris](https://github.com/ppkantorski/Tetris-Overlay/) - "That" game in the form of an overlay. Works only on the latest versions of Ultrahand.
|
||||
* [MasterVolume](https://github.com/averne/MasterVolume) - Global volume control, allows you to raise the volume above the maximum. Use with care!
|
||||
* [NX-FanControl](https://github.com/Zathawo/NX-FanControl) - Module for manually adjusting the speed of the cooler. The changes are applied immediately, the module works from SOC temperature and not Skin temperature like Atmosphere.
|
||||
* [BT Audio](https://github.com/masagrator/BT_Audio-ovl) - An overlay that allows you to quickly disconnect/connect to a bluetooth headset.
|
||||
* [Fizeau](https://github.com/averne/Fizeau) - Module for changing the screen color profile.
|
||||
* [sys-tune](https://github.com/HookedBehemoth/sys-tune) - Overlay music player, works in background.
|
||||
|
||||
* Other:
|
||||
* [FPSLocker Patches](https://github.com/masagrator/FPSLocker-Warehouse) - Patches for FPSLocker, so you don't have to download a separate patch for each game through the overlay.
|
||||
* [DVR Patches](https://github.com/exelix11/dvr-patches) - SysDVR patches, work without the system module, activating background recording in games where it is initially prohibited.
|
||||
* [Mod Alchemist](https://github.com/ppkantorski/Mod-Alchemist) - A package for downloading, installing, and managing mods for games.
|
||||
* [sys-ftpd](https://github.com/cathery/sys-ftpd) - FTP server running in background.
|
||||
|
||||
|
||||
|
||||
## License
|
||||
|
||||
Listed below are the licenses of those programs that have been modified specifically for Ultra. Following the provisions of these licenses, all code in the modifications is distributed under the same license
|
||||
|
||||
[GPL 2.0](https://github.com/Atmosphere-NX/Atmosphere/blob/master/LICENSE):
|
||||
* [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)
|
||||
* [Status-Monitor-Overlay](https://github.com/masagrator/Status-Monitor-Overlay)
|
||||
|
||||
[MIT License](https://github.com/masagrator/FPSLocker/blob/main/LICENSE)
|
||||
* [FPSLocker](https://github.com/masagrator/FPSLocker)
|
||||
|
||||
|
||||
|
||||
## Credits
|
||||
|
||||
* B3711
|
||||
* ppkantorski
|
||||
* Meha
|
||||
* duckbill
|
||||
* snupt
|
||||
#### And also - a special thanks to the administration and members of Ultra Group
|
||||
|
||||
|
||||
|
||||
## Support
|
||||
|
||||
If you like the project and you have a desire to support me with a penny - I will be very grateful.
|
||||
I have no other income at the moment, so any monetary help is very valuable to me.
|
||||
```
|
||||
TON: UQA9My51bkGZHbYhbdRZfp6B60N7VJfsnKl0sakgw9YhAPct
|
||||
BTC: 18K6NN8NEavvMJL5Do3VTyJbL8NeZPHo93
|
||||
USDT TRC20: TUZ5szAmRsnvBuC4rFB8RaAoCbN6Ucy4sL
|
||||
```
|
@ -14,10 +14,6 @@ X01003A400C3DA000
|
||||
;1.1_46609 - 1.1.4_60709 crash on first loading
|
||||
010075D00E8BA000
|
||||
|
||||
;Grandia Collection
|
||||
;Only launcher is 64-bit, games are 32-bit
|
||||
0100E0600BBC8000
|
||||
|
||||
;Immortals Fenyx Rising
|
||||
;1.0.3, 1.3.4 crash
|
||||
01004A600EC0A000
|
||||
@ -28,7 +24,7 @@ X0100964012528000
|
||||
|
||||
;Olympic Games Tokyo 2020 – The Official Video Game
|
||||
;1.0.0 crash on boot
|
||||
010034B00E14C000
|
||||
X010034B00E14C000
|
||||
|
||||
;Mario Strikers: Battle League
|
||||
;1.0.0 crash on boot
|
||||
@ -44,9 +40,21 @@ X0100964012528000
|
||||
0100C56010FD8000
|
||||
|
||||
;EA SPORTS FC 24
|
||||
;1.0.0 - v1.53.dd6d crash
|
||||
;1.0.0 - v1.55.bc14 crash
|
||||
0100BDB01A0E6000
|
||||
|
||||
;Company of Heroes Collection
|
||||
;1.5_66915 crash on boot
|
||||
;1.5_66915 crashes
|
||||
0100ABD0156F8000
|
||||
|
||||
;Donkey Kong Country: Tropical Freeze
|
||||
;Crash at second level
|
||||
X0100C1F0051B6000
|
||||
|
||||
;Death Road to Canada
|
||||
;1.0.8 crash
|
||||
X0100423009358000
|
||||
|
||||
;Splatoon 3
|
||||
;10.0.0 upwards crashes after online match
|
||||
X0100C2500FC20000
|
||||
|
@ -0,0 +1,27 @@
|
||||
# Horizon Chase 2 1.6.6
|
||||
# BID: D60A7F43A98034BE
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x833A760, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8B27A30, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8B02598, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Horizon Chase 2 1.6.9
|
||||
# BID: E13F632FC2A66EEB
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8349850, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8B36A30, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8B11598, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Horizon Chase 2 1.6.3
|
||||
# BID: F80EEC237D0963EE
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8325D00, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8B13A30, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.DynamicRes.FrameTimeBudget = 0.978 * (1000/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8AEE598, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(0.978 * FRAMETIME_TARGET, 1)", "TruncDec(0.978 * FRAMETIME_TARGET, 1)"]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,73 +3,10 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# OptimalFrameDuration_ms = 0.96 * (1000/FPS)
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 64
|
||||
20FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 48
|
||||
25FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 38.4
|
||||
30FPS:
|
||||
# OptimalFrameDuration_ms (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 32
|
||||
35FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 27.42
|
||||
40FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 24
|
||||
45FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 21.333333
|
||||
50FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 19.2
|
||||
55FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 17.454545
|
||||
60FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2153CFC]
|
||||
value_type: float
|
||||
value: 16
|
||||
value: "0.96 * FRAMETIME_TARGET"
|
||||
|
@ -1,99 +1,16 @@
|
||||
# Rad Rogers: Radical Edition 1.2.0
|
||||
# Rad Rodgers: Radical Edition 1.2.0
|
||||
# BID: 78885A1CA987C04C
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# t.MaxFPS (100 to ensure than NVN itself will handle 60 FPS while not enabling SmoothedFrameRateRange)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x579C208, 0]
|
||||
value_type: float
|
||||
value: [100, 100]
|
||||
|
||||
|
@ -0,0 +1,27 @@
|
||||
# Gori: Cuddly Carnage 1.0.6
|
||||
# BID: 1146A5AA87A93969
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A02E68, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A3C938, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6245AA8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Gori: Cuddly Carnage 1.0.7
|
||||
# BID: A21FFE97D09DCE4E
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A02E68, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A3C938, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6245AA8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Gori: Cuddly Carnage 1.0.5
|
||||
# BID: EEE598377C0A5966
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69FDE68, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A37938, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6240AA8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,33 @@
|
||||
# Jujutsu Kaisen Cursed Clash US 1.3.0
|
||||
# BID: 2E7487767D0CA0EE
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x81A5A48, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x81E8F50, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x752A248, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x81E87A8, 0x9C4]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,33 @@
|
||||
# Jujutsu Kaisen Cursed Clash US 1.2.0
|
||||
# BID: 2F33996FD9C81253
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8069A48, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x80ACF50, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x73EE7C8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x80AC7A8, 0x9C4]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,33 @@
|
||||
# Jujutsu Kaisen Cursed Clash US 1.4.0
|
||||
# BID: 7C724F497564C027
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8458A48, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x849BF50, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x77DD548, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x849B7A8, 0x9C4]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,33 @@
|
||||
# Jujutsu Kaisen Cursed Clash US 1.1.0
|
||||
# BID: 95761555A341B190
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8036A48, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8079F50, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x73BB0C8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x80797A8, 0x9C4]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,12 @@
|
||||
# Agatha Christie - Hercule Poirot: The First Cases 1.0.3
|
||||
# BID: 1570FE23108B93C4
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4B3E500, 0x48]
|
||||
value_type: float
|
||||
value: "FRAMETIME_TARGET / 1000"
|
@ -0,0 +1,88 @@
|
||||
# Batman - The Telltale Series 1.0.4
|
||||
# BID: A3A998AF3252D110
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Remove double buffer
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x6440
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0x52800062
|
||||
- 0x9B022501
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xC5A6D8
|
||||
value_type: uint32
|
||||
value: 0x188CC50
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1758A90
|
||||
value_type: uint32
|
||||
value: 0x188CC50
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xC56550
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xF9400B40
|
||||
- 0xB40000C0
|
||||
- 0xD0005808
|
||||
- 0xF9404908
|
||||
- 0xF9400108
|
||||
- 0xD63F0100
|
||||
- 0x14000004
|
||||
- 0x321A07E0
|
||||
- 0x97EB7BC4
|
||||
- 0xF9000B40
|
||||
- 0xF9400376
|
||||
- 0xB000581B
|
||||
- 0xF9400335
|
||||
- 0xF9479F7B
|
||||
- 0xD0005817
|
||||
- 0xF9400368
|
||||
- 0xF9453AF7
|
||||
- 0xAA1703E0
|
||||
- 0xD63F0100
|
||||
- 0xAA0003E2
|
||||
- 0xAA1503E0
|
||||
- 0xAA1603E1
|
||||
- 0x97CEAD3A
|
||||
- 0xAA0003F5
|
||||
- 0xF9400320
|
||||
- 0x97CEAD47
|
||||
- 0xF9400388
|
||||
- 0xAA0003E1
|
||||
- 0xAA1703E0
|
||||
- 0xAA1503E2
|
||||
- 0xD63F0100
|
||||
- 0xF9400B40
|
||||
- 0xF9400308
|
||||
- 0xAA1703E1
|
||||
- 0xD63F0100
|
||||
- 0xD0005816
|
||||
- 0x17CEBE43
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x5EE8
|
||||
value_type: uint32
|
||||
value: 0x1431419A
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x5FC0
|
||||
value_type: uint32
|
||||
value: 0x52800061
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x5F8C
|
||||
value_type: uint32
|
||||
value: 0xD2A032A2
|
||||
ALL_FPS:
|
||||
# dummy
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x188CF00]
|
||||
value_type: uint8
|
||||
value: 0
|
@ -3,105 +3,20 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
# t.VSync (default value) - game really struggles to get 60 FPS with this turned on
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [1, 1]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.VSync (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [1, 1]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.VSync (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [1, 1]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
# t.VSync (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [1, 1]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [28.51, 28.51]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
# t.VSync
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
@ -110,110 +25,3 @@ unsafeCheck: true
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
# t.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
# t.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69B8C78, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69AEE10, 0]
|
||||
value_type: float
|
||||
value: [60, 60]
|
||||
# t.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6220790, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
|
@ -3,73 +3,10 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30)
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 64.333333
|
||||
20FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 47.666666
|
||||
25FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 37.666666
|
||||
30FPS:
|
||||
# OptimalFrameDuration_ms (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 31
|
||||
35FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 26.238095
|
||||
40FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 22.666666
|
||||
45FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 19.888888
|
||||
50FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 17.666666
|
||||
55FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 15.848484
|
||||
60FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D5A83C]
|
||||
value_type: float
|
||||
value: 14.333333
|
||||
value: "FRAMETIME_TARGET - (0.07 * (1000/30))"
|
||||
|
@ -0,0 +1,22 @@
|
||||
# Gal*Gun Returns 1.0.4
|
||||
# BID: 7E65E5BC3564BE46
|
||||
# Buffers are hardcoded into fixed size class, so it's hard to get triple buffer
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# FPS Target + FPS Lock
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x16CE8A8, 0x20]
|
||||
value_type: float
|
||||
value: "60 / FPS_TARGET"
|
||||
# Lipsync fix
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1BA0A1C]
|
||||
value_type: uint32
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,28 @@
|
||||
# TRANSFORMERS: EARTHSPARK - Expedition 1.0.5
|
||||
# BID: F87BEAF2C5CE13E3
|
||||
# Game is using double frontbuffer and single backbuffer, everything is hardcoded
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6B9BDD8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6BD58A8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x63DCAE8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,73 +3,10 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# Dynamic Resolution frame time target = (32.3/(1000/30)) * (1000/FPS)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 64.6
|
||||
20FPS:
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 48.45
|
||||
25FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 38.76
|
||||
30FPS:
|
||||
# Dynamic Resolution frame time target (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 32.3
|
||||
35FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 27.68
|
||||
40FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 24.225
|
||||
45FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 21.53
|
||||
50FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 19.38
|
||||
55FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 17.61
|
||||
60FPS:
|
||||
# Dynamic Resolution frame time target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2D7A974]
|
||||
value_type: float
|
||||
value: 16.15
|
||||
value: "0.969 * FRAMETIME_TARGET"
|
||||
|
@ -0,0 +1,36 @@
|
||||
# Tiebreak+: Official Game of the ATP and WTA 1.1.0
|
||||
# BID: 2A5244CCB17B44AC
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Triple buffer
|
||||
# REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1A81E6C
|
||||
value_type: uint32
|
||||
value: 3
|
||||
# Redirect Dynamic Resolution target reading to MAIN + 0x30C2F00
|
||||
# REF: 0C 9A 88 52 0C 6B A7 72
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x147AA94
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0x9000E248 # ADRP X8, 0x30C2000
|
||||
- 0xBD4F0103 # LDR S3, [X8, 0xF00]
|
||||
- 0xD503201F # NOP
|
||||
## Default values
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x30C2F00
|
||||
value_type: float
|
||||
value: 0.03333333333
|
||||
ALL_FPS:
|
||||
# Adjust Dynamic Resolution target, we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x30C2F00]
|
||||
value_type: float
|
||||
value: "0.8 / FPS_TARGET"
|
@ -0,0 +1,36 @@
|
||||
# Tiebreak+: Official Game of the ATP and WTA 1.2.0
|
||||
# BID: 5BCA5C20C8F8A9B4
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Triple buffer
|
||||
# REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1A82EAC
|
||||
value_type: uint32
|
||||
value: 3
|
||||
# Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00
|
||||
# REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x147B474
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0x9000E248 # ADRP X8, 0x30C3000
|
||||
- 0xBD4F0103 # LDR S3, [X8, 0xF00]
|
||||
- 0xD503201F # NOP
|
||||
## Default values
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x30C3F00
|
||||
value_type: float
|
||||
value: 0.03333333333
|
||||
ALL_FPS:
|
||||
# Adjust Dynamic Resolution target, we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x30C3F00]
|
||||
value_type: float
|
||||
value: "0.8 / FPS_TARGET"
|
@ -0,0 +1,36 @@
|
||||
# Tiebreak+: Official Game of the ATP and WTA 1.3.0
|
||||
# BID: 88CC45A195E0BDA8
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Triple buffer
|
||||
# REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1A82F0C
|
||||
value_type: uint32
|
||||
value: 3
|
||||
# Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00
|
||||
# REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x147BE04
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0x9000E248 # ADRP X8, 0x30C3000
|
||||
- 0xBD4F0103 # LDR S3, [X8, 0xF00]
|
||||
- 0xD503201F # NOP
|
||||
## Default values
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x30C3F00
|
||||
value_type: float
|
||||
value: 0.03333333333
|
||||
ALL_FPS:
|
||||
# Adjust Dynamic Resolution target, we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x30C3F00]
|
||||
value_type: float
|
||||
value: "0.8 / FPS_TARGET"
|
@ -0,0 +1,30 @@
|
||||
# S.T.A.L.K.E.R.: Call of Prypiat 1.0.1
|
||||
# BID: 823FE359B4A99A4D
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# psLoadedFrameLimitFps
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x17DD77C]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
# psCurrentFrameLimitFps
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x17FA8A0]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
# psCurrentFrameLimitMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1A6490C]
|
||||
value_type: float
|
||||
value: "1000 / FPS_LOCK_TARGET"
|
||||
# ResolutionInfo::sDynresGPUBudgetMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x17DD758]
|
||||
value_type: float
|
||||
value: "0.99 * FRAMETIME_TARGET"
|
@ -0,0 +1,30 @@
|
||||
# S.T.A.L.K.E.R.: Call of Prypiat 1.0.3
|
||||
# BID: AD4CBC4878008E1E
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# psLoadedFrameLimitFps
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x17F9784]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
# psCurrentFrameLimitFps
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x18168A0]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
# psCurrentFrameLimitMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1A8490C]
|
||||
value_type: float
|
||||
value: "1000 / FPS_LOCK_TARGET"
|
||||
# ResolutionInfo::sDynresGPUBudgetMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x17F9760]
|
||||
value_type: float
|
||||
value: "FRAMETIME_TARGET - (1/30)"
|
@ -0,0 +1,30 @@
|
||||
# S.T.A.L.K.E.R.: Call of Prypiat 1.0.2
|
||||
# BID: BBA39C65C1CC6463
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# psLoadedFrameLimitFps
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x17F9784]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
# psCurrentFrameLimitFps
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x18168A0]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
# psCurrentFrameLimitMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1A8490C]
|
||||
value_type: float
|
||||
value: "1000 / FPS_LOCK_TARGET"
|
||||
# ResolutionInfo::sDynresGPUBudgetMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x17F9760]
|
||||
value_type: float
|
||||
value: "0.99 * FRAMETIME_TARGET"
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.2.2
|
||||
# BID: 012A8C2C413E79B8
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8F57748, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8F92210, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8791EC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.2.1
|
||||
# BID: 26C1E658E9B5B612
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8F41748, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8F7C210, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x877BEC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.1.3
|
||||
# BID: 3889588A60E1F399
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8EA4728, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8EDF1F0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x86DEEC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream 1.1.1
|
||||
# BID: 3AAA28C9CB8367B9
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8E90728, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8ECB1F0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x86CAEC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.2.0
|
||||
# BID: 46094C03E2EC668B
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8F3C748, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8F77210, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8776EC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.1.2
|
||||
# BID: 520620FBA0B196A3
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8E95728, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8ED01F0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x86CFEC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.3.0
|
||||
# BID: C2F2C4B700B30598
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8FD6748, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9011290, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8810F08, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,18 @@
|
||||
# The Elder Scrolls V: Skyrim 1.1.392.3925134
|
||||
# BID: 4F7995092FAA5DC0
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x3356FC8]
|
||||
value_type: float
|
||||
value: "0.9 * FRAMETIME_TARGET"
|
||||
# Dynamic Resolution Frame Time Max = 0.99 * (1000/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x3356FB0]
|
||||
value_type: float
|
||||
value: "0.99 * FRAMETIME_TARGET"
|
@ -1,135 +0,0 @@
|
||||
# The Elder Scrolls V: Skyrim 1.1.177.3285177
|
||||
# BID: 771BDFB65F8D0AF7
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 60
|
||||
# Dynamic Resolution Frame Time Max = 0.99 * (1000/FPS)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 66
|
||||
20FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 45
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 49.5
|
||||
25FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 36
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 39.6
|
||||
30FPS:
|
||||
# Dynamic Resolution Frame Time Min (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 30
|
||||
# Dynamic Resolution Frame Time Max (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 33
|
||||
35FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 25.71
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 28.28
|
||||
40FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 22.5
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 24.75
|
||||
45FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 20
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 22
|
||||
50FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 18
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 19.8
|
||||
55FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 16.36
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 18
|
||||
60FPS:
|
||||
# Dynamic Resolution Frame Time Min
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178C8]
|
||||
value_type: float
|
||||
value: 15
|
||||
# Dynamic Resolution Frame Time Max
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x33178B0]
|
||||
value_type: float
|
||||
value: 16.5
|
@ -0,0 +1,27 @@
|
||||
# Breathedge 1.0.2
|
||||
# BID: B26DE1669B729335
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x55CB668, 0x7F0]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x55CBDE0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4E6A7B8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,24 @@
|
||||
# Chernobylite 1.1
|
||||
# BID: 2D2065AEBF94F9AE
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x641EAB8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x644C838, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5C83700, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
@ -0,0 +1,24 @@
|
||||
# Chernobylite 1.2
|
||||
# BID: 657F40EEBD955F31
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x641EAB8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x644C838, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5C83700, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
@ -0,0 +1,27 @@
|
||||
# Tony Hawk's Pro Skater 3 + 4 1.05
|
||||
# BID: 65A9705A4BB35AA2
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x77DD4B8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x780B6A0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7006068, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Tony Hawk's Pro Skater 3 + 4 1.0.3
|
||||
# BID: A31FE9B8AF1156D4
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x77CF4B8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x77FD6A0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6FF83C8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,12 @@
|
||||
# DreadOut Remastered Collection 1.0.2
|
||||
# BID: 725731C74E4CA6A9
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# REF: DynamicResolution::.cctor
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x3E01640, 0, 0xB8, 8]
|
||||
value_type: double
|
||||
value: [FPS_TARGET, FRAMETIME_TARGET]
|
@ -0,0 +1,27 @@
|
||||
# The Witcher 3: Wild Hund - Complete Edition 4.04b
|
||||
# BID: 4BC4A8A814FD46A4
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: "0.945 * FRAMETIME_TARGET"
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: "0.945 * FRAMETIME_TARGET"
|
||||
# LimitFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: FPS_LOCK_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -1,224 +0,0 @@
|
||||
# The Witcher 3 3.7
|
||||
# BID: 4FFB62F1CD9E17F8
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
15FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 63
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 63
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 15
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 20
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 25
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# DRGameTargetFrameTimeInMs (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# LimitFPS (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
|
||||
# For 35-60 FPS check if cutscene is played. If it is, set 30 FPS lock. If not, disable it.
|
||||
35FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 27
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 27
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 35
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 40
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 21
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 21
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 45
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 50
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 55
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -1,224 +0,0 @@
|
||||
# The Witcher 3: Wild Hund - Complete Edition 4.04b
|
||||
# BID: D27FD8A515077F34
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 63
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 63
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 15
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 20
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 25
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# DRGameTargetFrameTimeInMs (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# LimitFPS (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
|
||||
# For 35-60 FPS check if cutscene is played. If it is, set 30 FPS lock. If not, disable it.
|
||||
35FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 27
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 27
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 35
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 40
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 21
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 21
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 45
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 50
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 55
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,157 +3,19 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [15, 15]
|
||||
value: [FPS_TARGET, FPS_TARGET]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynResTargetFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [30, 30]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [35, 35]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [45, 45]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [55, 55]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynResTargetFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71A31F8, 0]
|
||||
value_type: int32
|
||||
value: [60, 60]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71B2BD0, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
@ -3,73 +3,10 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 15
|
||||
20FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 20
|
||||
25FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 25
|
||||
30FPS:
|
||||
# Dynamic Resolution FPS Target (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 30
|
||||
35FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 35
|
||||
40FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 40
|
||||
45FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 45
|
||||
50FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 50
|
||||
55FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 55
|
||||
60FPS:
|
||||
# Dynamic Resolution FPS Target
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x179EF64]
|
||||
value_type: float
|
||||
value: 60
|
||||
value: FPS_TARGET
|
||||
|
@ -0,0 +1,17 @@
|
||||
# The LEGO NINJAGO Movie Video Game 1.0.3
|
||||
# BID: 346959B36CD9F14D
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Block to 30 FPS when prerendered cutscene is played
|
||||
# REF: LegoCutscenes::s_fmvCutsceneAudioInstance
|
||||
-
|
||||
type: compare
|
||||
compare_address: [MAIN, 0x44C3468]
|
||||
compare_type: "!="
|
||||
compare_value_type: uint64
|
||||
compare_value: 0
|
||||
address: [MAIN]
|
||||
value_type: refresh_rate
|
||||
value: 30
|
@ -0,0 +1,15 @@
|
||||
# OCTOPATH TRAVELER 歧路旅人 1.0.5
|
||||
# BID: 9E6B0D0023F9DB3B
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x50B5698, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,12 @@
|
||||
# The Forest Quartet 4.0.2
|
||||
# BID: 47A022F858BA09B1
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# DynamicResolution_TypeInfo
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4B320A0, 0xB8, 0]
|
||||
value_type: double
|
||||
value: ["0.96 * FRAMETIME_TARGET", "(0.96 * FRAMETIME_TARGET) - 0.75"]
|
@ -3,157 +3,19 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [28.51, 28.51]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B461B8, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6B3C330, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
@ -3,337 +3,37 @@
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.MaxGPUTime ((1000/FPS) * 0.93)
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [62, 62]
|
||||
value: ["0.93 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"]
|
||||
# r.DynamicRes.MinGPUTime ((1000/FPS) * 0.87)
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [58, 58]
|
||||
value: ["0.87 * FRAMETIME_TARGET", "0.87 * FRAMETIME_TARGET"]
|
||||
# r.DynamicRes.MaxGPUTimeStill ((1000/FPS) * 0.945)
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [63, 63]
|
||||
value: ["0.945 * FRAMETIME_TARGET", "0.945 * FRAMETIME_TARGET"]
|
||||
# r.DynamicRes.MinGPUTimeStill ((1000/FPS) * 0.93)
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [62, 62]
|
||||
value: ["0.93 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [46.5, 46.5]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [43.5, 43.5]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [47.25, 47.25]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [46.25, 46.25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [37.2, 37.2]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [34.2, 34.2]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [37.8, 37.8]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [37.2, 37.2]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.MaxGPUTime (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [31, 31]
|
||||
# r.DynamicRes.MinGPUTime (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [29, 29]
|
||||
# r.DynamicRes.MaxGPUTimeStill (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [31.5, 31.5]
|
||||
# r.DynamicRes.MinGPUTimeStill (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [31, 31]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [26.57, 26.57]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [24.85, 24.85]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [27, 27]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [26.57, 26.57]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [23.25, 23.25]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [21.75, 21.75]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [23.625, 23.625]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [23.25, 23.25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [20.66, 20.66]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [19.33, 19.33]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [21, 21]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [20.66, 20.66]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [18.6, 18.6]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [17.4, 17.4]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [18.9, 18.9]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [18.6, 18.6]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [16.9, 16.9]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [15.81, 15.81]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [17.18, 17.18]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [16.9, 16.9]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.MaxGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23AF0, 0]
|
||||
value_type: float
|
||||
value: [15.5, 15.5]
|
||||
# r.DynamicRes.MinGPUTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B08, 0]
|
||||
value_type: float
|
||||
value: [14.5, 14.5]
|
||||
# r.DynamicRes.MaxGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B20, 0]
|
||||
value_type: float
|
||||
value: [15.75, 15.75]
|
||||
# r.DynamicRes.MinGPUTimeStill
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E23B38, 0]
|
||||
value_type: float
|
||||
value: [15.5, 15.5]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7E46698, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
|
@ -0,0 +1,37 @@
|
||||
# SONIC FORCES 1.1.0
|
||||
# BID: 6D9EA94F8AAC00A8
|
||||
# Game speed is tied to framerate
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Remove double buffer
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xAD40FC
|
||||
value_type: uint32
|
||||
value: 0x52800068
|
||||
# Block switching back to 30 FPS mode on loading screens
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x6173B0
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
ALL_FPS:
|
||||
# Switch to 60 FPS Mode
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1CAC518, 0x28, 0x20, 0x14]
|
||||
value_type: uint32
|
||||
value: 1
|
||||
# FPS target
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1C38C28, 0x1C]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1C38C28, 0x14C]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
@ -0,0 +1,37 @@
|
||||
# SONIC FORCES 1.1.0
|
||||
# BID: 6D9EA94F8AAC00A8
|
||||
# Game speed is tied to framerate
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Remove double buffer
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xAD40FC
|
||||
value_type: uint32
|
||||
value: 0x52800068
|
||||
# Block switching back to 30 FPS mode on loading screens
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x6173B0
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
ALL_FPS:
|
||||
# Switch to 60 FPS Mode
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1CAC518, 0x28, 0x20, 0x14]
|
||||
value_type: uint32
|
||||
value: 1
|
||||
# FPS target
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1C38C28, 0x1C]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1C38C28, 0x14C]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
@ -0,0 +1,21 @@
|
||||
# Master Detective Archives: RAIN CODE 1.4.0 US
|
||||
# BID: B9E42653FB44EF2B
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8001888, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7806CC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,21 @@
|
||||
# Mortal Shell 1.2.0
|
||||
# BID: 6D9F6C7B79F5197F
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -1,159 +0,0 @@
|
||||
# Mortal Shell 1.0.1
|
||||
# BID: BE2D1A84420113EC
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [28.51, 28.51]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6ACCBD8, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6AEF760, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
@ -1,135 +0,0 @@
|
||||
# From Space 1.0.357
|
||||
# BID: 593BD545295A65FB
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# vSyncCount (we are resetting it to 0 so game will calculate Dynamic Resolution for specified FPS target)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 15
|
||||
20FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 20
|
||||
25FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 25
|
||||
30FPS:
|
||||
# vSyncCount (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 2
|
||||
# targetFrameRate (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 0
|
||||
35FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 35
|
||||
40FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 40
|
||||
45FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 45
|
||||
50FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 50
|
||||
55FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 0
|
||||
# targetFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 55
|
||||
60FPS:
|
||||
# vSyncCount
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68A9828, 0x210, 0x68]
|
||||
value_type: int32
|
||||
value: 1
|
||||
# targetFrameRate (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6483A70]
|
||||
value_type: int32
|
||||
value: 0
|
@ -0,0 +1,12 @@
|
||||
# From Space 1.3.480
|
||||
# BID: 9806FB67CE24E904
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Application::targetFrameRate (to adjust Dynamic Resolution)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6F3F760]
|
||||
value_type: int32
|
||||
value: FPS_TARGET
|
@ -1,66 +1,83 @@
|
||||
# WARRIORS OROCHI 4 1.0.13
|
||||
# BID: 5C9CCD358BE85FC9
|
||||
# Credits to Hazerou for figuring out the offset
|
||||
# Main offset stores address to start of .bss of NRO
|
||||
## REF: 02 00 00 00 3C 00 00 00
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# Without DLC Ultimate Edition installed
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 2
|
||||
20FPS:
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "=="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x934A8]
|
||||
value_type: uint32
|
||||
value: [VSYNC_TARGET, FPS_TARGET]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 2
|
||||
25FPS:
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "=="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x934A0]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 2
|
||||
30FPS:
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "=="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x9349C]
|
||||
value_type: uint32
|
||||
value: [VSYNC_TARGET, FPS_TARGET]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 2
|
||||
35FPS:
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "=="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x93494]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
# With DLC Ultimate Edition installed
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 1
|
||||
40FPS:
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "!="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x93200]
|
||||
value_type: uint32
|
||||
value: [VSYNC_TARGET, FPS_TARGET]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 1
|
||||
45FPS:
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "!="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x931F8]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: write
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "!="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 1
|
||||
50FPS:
|
||||
value_type: uint32
|
||||
value: [VSYNC_TARGET, FPS_TARGET]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 1
|
||||
55FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 1
|
||||
60FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3AF80, -0x931F4]
|
||||
value_type: int32
|
||||
value: 1
|
||||
type: evaluate_compare
|
||||
compare_value_type: uint64
|
||||
compare_type: "!="
|
||||
compare_value: 0xE2CFDAC9EAC20398
|
||||
compare_address: [MAIN, 0x3AF80, -0x1A92FC0]
|
||||
address: [MAIN, 0x3AF80, -0x931EC]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
|
@ -0,0 +1,25 @@
|
||||
# Jojo's Bizarre Adventure: All-Star Battle R 2.3.3
|
||||
# BID: 3D4E3A9252AA6C63
|
||||
# There are small issues with animations in cutscenes at higher framerates
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Internal FPS Lock, pointer ref: 00 01 40 F9 E5 03 04 2A
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2AEDA08, 704]
|
||||
value_type: uint32
|
||||
value: VSYNC_TARGET
|
||||
# Game Speed, pointer ref: F3 03 00 AA 20 00 80 52 F4 03 01 AA
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2AEF6D0, 1360]
|
||||
value_type: uint32
|
||||
value: VSYNC_TARGET
|
||||
# UI Speed
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2AEF6D0, 2554]
|
||||
value_type: uint8
|
||||
value: FPS_TARGET
|
@ -3,157 +3,19 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [66.6, 66.6]
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value is 36.5, obviously we don't want it)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [33.3, 33.3]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [30, 30]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [28.5, 28.5]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [22.2, 22.2]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [18.1, 18.1]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7565298, 0]
|
||||
value_type: float
|
||||
value: [16.6, 16.6]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7589FE0, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
@ -0,0 +1,27 @@
|
||||
# Grand Theft Auto: Vice City - Definitive Edition 1.0.8
|
||||
# BID: 9151E53EE514B03A
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (Default is 36.5 ms)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7608988, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x762D640, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6E7AA00, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,32 @@
|
||||
# Bakery Simulator 1.1.0
|
||||
# BID: 31A37D73E22F1059
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5F9B6A8, 0x7A4]
|
||||
value_type: uint32
|
||||
# Default is 0x47, bUseFixedFrameRate |= 0x40
|
||||
# By writing 7 we are making sure that other flags are maintained:
|
||||
# bAllowMultiThreadedAnimationUpdate |= 4
|
||||
# bOptimizeAnimBlueprintMemberVariableAccess |= 2
|
||||
# bCanBlueprintsTickByDefault |= 1
|
||||
value: 7
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x57A0B58, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5F9BFC8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Gigantosaurus: Dino Kart 1.1.0
|
||||
# BID: 512FB8C2D12C4F36
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6D186C8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6581EB0, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6D45C58, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,157 +3,19 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default is 30)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [28.51, 28.51]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D196C8, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6D46C58, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
|
@ -3,157 +3,19 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default value is 30)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [28.51, 28.51]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D46658, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7D73FF8, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
|
@ -0,0 +1,13 @@
|
||||
# Cel Damage HD 1.0.0
|
||||
# BID: 03B058B1F6BE7195
|
||||
# Credit to Hazerou for finding offset
|
||||
# His note: 60 FPS may cause some Graphical Glitches like huge shadow and flashing light/colors appearing out of nowhere.
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x32EE1C]
|
||||
value_type: float
|
||||
value: ["1/FPS_TARGET", "FPS_TARGET"]
|
@ -0,0 +1,27 @@
|
||||
# The Witcher 3: Wild Hund - Complete Edition 4.04b
|
||||
# BID: 4BC4A8A814FD46A4
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: "0.945 * FRAMETIME_TARGET"
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: "0.945 * FRAMETIME_TARGET"
|
||||
# LimitFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: FPS_LOCK_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -1,224 +0,0 @@
|
||||
# The Witcher 3 3.7
|
||||
# BID: 4FFB62F1CD9E17F8
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
15FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 63
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 63
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 15
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 20
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 25
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# DRGameTargetFrameTimeInMs (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# LimitFPS (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
|
||||
# For 35-60 FPS check if cutscene is played. If it is, set 30 FPS lock. If not, disable it.
|
||||
35FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 27
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 27
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 35
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 40
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 21
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 21
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 45
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 50
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 55
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA8F4]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FDA924]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4C983EC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -1,224 +0,0 @@
|
||||
# The Witcher 3: Wild Hund - Complete Edition 4.04b
|
||||
# BID: D27FD8A515077F34
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 63
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 63
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 15
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 47.25
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 20
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 37.8
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 25
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# DRGameTargetFrameTimeInMs (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 31.5
|
||||
# LimitFPS (original value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
|
||||
# For 35-60 FPS check if cutscene is played. If it is, set 30 FPS lock. If not, disable it.
|
||||
35FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 27
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 27
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 35
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 23.625
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 40
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 21
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 21
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 45
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 18.9
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 50
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 17.1818181818
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 55
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# DRGameTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312B4]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# DRCinematicTargetFrameTimeInMs
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x41312E4]
|
||||
value_type: float
|
||||
value: 15.75
|
||||
# LimitFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x411DCFC]
|
||||
value_type: int32
|
||||
value: 60
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,73 +3,10 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30)
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 64.333333
|
||||
20FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 47.666666
|
||||
25FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 37.666666
|
||||
30FPS:
|
||||
# OptimalFrameDuration_ms (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 31
|
||||
35FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 26.238095
|
||||
40FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 22.666666
|
||||
45FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 19.888888
|
||||
50FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 17.666666
|
||||
55FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 15.848484
|
||||
60FPS:
|
||||
# OptimalFrameDuration_ms
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x27C4B0C]
|
||||
value_type: float
|
||||
value: 14.333333
|
||||
value: "FRAMETIME_TARGET - (0.07 * (1000/30))"
|
||||
|
@ -0,0 +1,19 @@
|
||||
# Fate/EXTELLA LINK 1.0.2
|
||||
# BID: 97FC79E063E26C9B
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Remove double buffer
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x6B41E4
|
||||
value_type: uint32
|
||||
value: 0xB20007E8
|
||||
ALL_FPS:
|
||||
# DUMMY
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4740500]
|
||||
value_type: uint8
|
||||
value: 0
|
@ -1,159 +0,0 @@
|
||||
# Bright Memory: Infinite Gold Edition 1.2
|
||||
# BID: 323631B628A32D84
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [28.51, 28.51]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69CE1D8, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x69FBA78, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
@ -0,0 +1,27 @@
|
||||
# Bright Memory: Infinite Gold Edition 1.3
|
||||
# BID: DD425ECC07C305DF
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6B031D8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6B30A78, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x63376C8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,32 @@
|
||||
# Hot Wheels Unleashed 2 1.0.9
|
||||
# BID: C95F34910CE1CDC0
|
||||
|
||||
# It is recommended to disable FSR. When FSR is enabled,
|
||||
# Dynamic Resolution is also disabled and it has worse performance
|
||||
# at higher FPS, and quality wise it compares to dynamic resolution
|
||||
# set to lowest res
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xB58F090, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xB633E08, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xAD75A78, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# HOT WHEELS UNLEASHED 2 1.0.10
|
||||
# BID: E1F81DC590FDE0B5
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xAD74458, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xB58E090, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xB632E08, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# HOT WHEELS UNLEASHED 2 1.0.11
|
||||
# BID: FE78C7B94C4E791A
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xAD73888, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xB58D090, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xB631E08, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,190 +3,22 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [15, 2]
|
||||
value: [FPS_LOCK_TARGET, VSYNC_TARGET]
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 15
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 1
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [20, 2]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 20
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 1
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [25, 2]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 25
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 1
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [30, 2]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 30
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 1
|
||||
35FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [35, 1]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 35
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [40, 1]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 40
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [45, 1]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 45
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [50, 1]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 50
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [55, 1]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 55
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [60, 1]
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: 60
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
value: "VSYNC_TARGET - 1"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
|
@ -0,0 +1,19 @@
|
||||
# GOD EATER 3 2.5.1
|
||||
# BID: C0F144F5139F542E
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Remove double buffer
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xEA22EC
|
||||
value_type: uint32
|
||||
value: 0xB20007E8
|
||||
ALL_FPS:
|
||||
# DUMMY
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xA7FA900]
|
||||
value_type: uint8
|
||||
value: 0
|
@ -0,0 +1,27 @@
|
||||
# Goat Simulator 3 1.0.7.1
|
||||
# BID: 0DE3020411F4232B
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x934C2F8, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9371F70, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8B7C198, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Goat Simulator 3 1.0.7.3
|
||||
# BID: 26AB1CB54DD4508D
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x934D2F8, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9372F70, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8B7D1C8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Goat Simulator 3 1.0.7.7
|
||||
# BID: 504EBEAB62E802AD
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x99DC468, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9A02290, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x920CBF8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Goat Simulator 3 1.0.7.6
|
||||
# BID: 8D4FD57DB7D63120
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x99DD468, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9A03290, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x920DB48, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Goat Simulator 3 1.0.7.8
|
||||
# BID: A45BCB8A63C50DC8
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x99DC468, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9A02290, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x920CBF8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Goat Simulator 3 1.0.7.4
|
||||
# BID: A5DA93E6537350D8
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x92FE2F8, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9323F60, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8B2E1E8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Goat Simulator 3 1.0.7.5
|
||||
# BID: C606C7DC1C0EC88F
|
||||
|
||||
unsafeCheck: false
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x954E2F8, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9573F60, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8D7E218, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,157 +3,19 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget = (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [28.51, 28.51]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x680CAB8, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x683A358, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
|
@ -0,0 +1,27 @@
|
||||
# Astor: Blade of the Monolith 1.0.2
|
||||
# BID: 6133D5CC14F51B7A
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x61F0828, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69BEAD8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69EC478, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Astor: Blade of the Monolith 1.0.0 / 1.0.1
|
||||
# BID: C26E93197DEB4004
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x61EE768, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69BCAD8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69EA478, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Astor: Blade of the Monolith 1.0.3
|
||||
# BID: E2AFE5A73F5C0803
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x61F0828, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69BEAD8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x69EC478, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,15 @@
|
||||
# Farming Simulator 23 Nintendo Switch Edition 1.6.0.0/1.7.0.0
|
||||
# BID: 17F37A56B17DD9CC
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Internal FPS lock
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xFAD7AC]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -1,91 +0,0 @@
|
||||
# Farming Simulator 23 Nintendo Switch Edition 1.1.0.0
|
||||
# BID: 1C38F0E269ED4438
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
# Internal FPS lock
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 15
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 20
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 25
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# default value
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 30
|
||||
35FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 35
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 40
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 45
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 50
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 55
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xFAC7AC]
|
||||
value_type: float
|
||||
value: 60
|
@ -3,157 +3,19 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to two decimals
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [66.66, 66.66]
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [15, 15]
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
20FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
25FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
30FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [33.33, 33.33]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
||||
35FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [28.57, 28.57]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [35, 35]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
40FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [25, 25]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [40, 40]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
45FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [22.22, 22.22]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [45, 45]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
50FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [20, 20]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [50, 50]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
55FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [18.18, 18.18]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [55, 55]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
60FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x71331A8, 0]
|
||||
value_type: float
|
||||
value: [16.66, 16.66]
|
||||
# t.MaxFPS (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7160D78, 0]
|
||||
value_type: float
|
||||
value: [0, 0]
|
@ -4,273 +4,30 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
15FPS:
|
||||
ALL_FPS:
|
||||
# fixedDeltaTime = 1/FPS
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
value: "1 / FPS_TARGET"
|
||||
- # maximumParticleDeltaTime = 1/FPS
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
value: "1 / FPS_TARGET"
|
||||
- # maximumDeltaTime = 6 * (1/FPS)
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.4
|
||||
value: "(1 / FPS_TARGET) * 6"
|
||||
- # DS.Tech.Networking.Clock_TypeInfo = 1/FPS
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
value: "1 / FPS_TARGET"
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo => every 15 FPS jump += 1
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 1
|
||||
20FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.05
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.05
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.3
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.05
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 1
|
||||
25FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.04
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.04
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.24
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.04
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 1
|
||||
30FPS:
|
||||
# fixedDeltaTime (default value)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.0333333333
|
||||
- # maximumParticleDeltaTime (default value)
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.0333333333
|
||||
- # maximumDeltaTime (default value)
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.2
|
||||
- # DS.Tech.Networking.Clock_TypeInfo (default value)
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.0333333333
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo (default value)
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 2
|
||||
35FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.0285714
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.0285714
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.17142857142
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.0285714
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo (default value)
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 2
|
||||
40FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.025
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.025
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.15
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.025
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo (default value)
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 2
|
||||
45FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.0222222222
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.0222222222
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.1333333333
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.0222222222
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 3
|
||||
50FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.02
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.02
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.12
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.02
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 3
|
||||
55FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.0181818181
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.0181818181
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.109090909
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.0181818181
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 3
|
||||
60FPS:
|
||||
# fixedDeltaTime
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x48]
|
||||
value_type: float
|
||||
value: 0.0166666666
|
||||
- # maximumParticleDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x104]
|
||||
value_type: float
|
||||
value: 0.0166666666
|
||||
- # maximumDeltaTime
|
||||
type: write
|
||||
address: [MAIN, 0x52BD280, 0x100]
|
||||
value_type: float
|
||||
value: 0.1
|
||||
- # DS.Tech.Networking.Clock_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABAE0, 0xB8, 0]
|
||||
value_type: float
|
||||
value: 0.0166666666
|
||||
- # DS.Tech.Networking.ClientInterpolator_TypeInfo
|
||||
type: write
|
||||
address: [MAIN, 0x4EABA98, 0xB8, 0]
|
||||
value_type: int32
|
||||
value: 4
|
||||
value: "FPS_TARGET / 15"
|
||||
|
@ -0,0 +1,67 @@
|
||||
# Sherlock Holmes: The Devil's Daughter 1.0.0
|
||||
# BID: 2B37ED2A971948F3
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect Dynamic Resolution timings to MAIN + 0x3189F00
|
||||
# 38.0
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xFFEAFC
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xF0010C4A
|
||||
- 0xBD4F0141
|
||||
# 22.0
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xFFEB0C
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xBD4F0541
|
||||
# 43.5
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xFFEAD4
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xF0010C4A
|
||||
- 0xBD4F0941
|
||||
# 58.0
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xFFEAE4
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xF0010C4A
|
||||
- 0xBD4F0D41
|
||||
# 47.0 | 34.0
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xFFEB20
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xF0010C4B
|
||||
- 0xBD4F1161
|
||||
- 0xB94F156C
|
||||
# Default values:
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x3189F00
|
||||
value_type: float
|
||||
value: [38.0, 22.0, 43.5, 58.0, 47.0, 34.0]
|
||||
ALL_FPS:
|
||||
# UGameEngine::GetMaxTickRate()
|
||||
# Bool Lock FPS
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x30D1B7C]
|
||||
value_type: uint8
|
||||
value: 0
|
||||
# Dynamic Resolution
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x3189F00]
|
||||
value_type: float
|
||||
value: ["(38.0 / (1000/30)) * FRAMETIME_TARGET", "(22.0 / (1000/30)) * FRAMETIME_TARGET", "(43.5 / (1000/30)) * FRAMETIME_TARGET", "(58.0 / (1000/30)) * FRAMETIME_TARGET", "(47.0 / (1000/30)) * FRAMETIME_TARGET", "(34.0 / (1000/30)) * FRAMETIME_TARGET"]
|
@ -0,0 +1,53 @@
|
||||
# Kingdom Come: Deliverance - Royal Edition JP 1.9.6H
|
||||
# BID: 7A450848CFDEC18E
|
||||
# Some prerendered cutscenes are still pushed at 30 FPS
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1CA806C
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1CA8074
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1CA8094
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xD503201F
|
||||
- 0xD503201F
|
||||
# Write default DR timings
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x56FF9C8
|
||||
value_type: float
|
||||
value: [32.5, 30.5, 31.5, 28.5, 33.5]
|
||||
ALL_FPS:
|
||||
# sys_MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x56FD1C8]
|
||||
value_type: int32
|
||||
value: FPS_LOCK_TARGET
|
||||
# Renderer thread delay
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5704028]
|
||||
value_type: float
|
||||
value: 0.01
|
||||
# DR timings
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x56FF9C8]
|
||||
value_type: float
|
||||
value: ["FRAMETIME_TARGET * 0.975", "FRAMETIME_TARGET * 0.915", "FRAMETIME_TARGET * 0.945", "FRAMETIME_TARGET * 0.855", "FRAMETIME_TARGET * 1.005"]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,51 @@
|
||||
# Momotaro Dentetsu: Showa, Heisei, Reiwa mo Teiban! Asia Edition 1.0.1
|
||||
# BID: B2D4462B71536EC6
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Remove double buffer
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1B630
|
||||
value_type: uint32
|
||||
value: 0x52800061
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x5774C
|
||||
value_type: uint32
|
||||
value: 0x52800061
|
||||
ALL_FPS:
|
||||
# REF: 20 59 60 BC
|
||||
# Internal FPS Lock
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xFF7090]
|
||||
value_type: float
|
||||
value: [FPS_TARGET, "60 / FPS_TARGET"]
|
||||
# Blocking game to max 60 FPS because setting game speed ratio below 1 causes glitches
|
||||
-
|
||||
type: evaluate_compare
|
||||
compare_address: [MAIN, 0xFF7090]
|
||||
compare_type: ">"
|
||||
compare_value_type: float
|
||||
compare_value: 60
|
||||
address: [MAIN, 0xFF7090]
|
||||
value_type: float
|
||||
value: 60
|
||||
-
|
||||
type: evaluate_compare
|
||||
compare_address: [MAIN, 0xFF7090]
|
||||
compare_type: "=="
|
||||
compare_value_type: float
|
||||
compare_value: 60
|
||||
address: [MAIN, 0xFF7094]
|
||||
value_type: float
|
||||
value: 1
|
||||
# Unknown value that is set based on FPS Lock function argument, 0 = 60 FPS, 1 = 30 FPS, 2 = 20 FPS, 3 = 15 FPS
|
||||
# According to IDA is not used at all, but writing this anyway
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x10D8028]
|
||||
value_type: uint32
|
||||
value: "VSYNC_TARGET - 1"
|
@ -0,0 +1,27 @@
|
||||
# Session: Skate Sim 1.1.3
|
||||
# BID: D40B81867A121EB0
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget = 0.81 * (1000/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7249868, 0]
|
||||
value_type: float
|
||||
value: ["0.81 * FRAMETIME_TARGET", "0.81 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7277438, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6A7D0C8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user