mirror of
https://github.com/Ultra-NX/UltraNX.git
synced 2026-10-14 15:34:47 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44d23b73da | ||
|
|
391c549b2d | ||
|
|
af22b662fd |
15
README.md
15
README.md
@ -8,7 +8,7 @@
|
||||
|
||||
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
|
||||
|
||||
### [UltraNX 3.1|RC1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Поддерживает все HOS до 23.0.0 включительно
|
||||
### [UltraNX 3.1|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Поддерживает все HOS до 23.0.1 включительно
|
||||
|
||||
|
||||
|
||||
@ -54,10 +54,11 @@
|
||||
* [sys-patch](https://github.com/borntohonk/sys-patch) - Патчит систему на работу неподписанного софта вместо сигпатчей.
|
||||
* [Mission Control](https://github.com/ndeadly/MissionControl) - Модуль, позволяющий подключать практически любые геймпады к консоли по Bluetooth.
|
||||
* [sys-con](https://github.com/o0Zz/sys-con) - Модуль, позволяющий подключать практически любые геймпады к консоли по USB.
|
||||
* [disable remap dialog](https://github.com/ndeadly/disable_remap_dialog) - Модуль, убирающий предупреждение о переназначенных кнопках при каждом заходе в игры.
|
||||
* [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) - Специальное оверлей-меню для взаимодействия с системой: разгон, управление режимами через ReverseNX, включение читов, прочее. Также позволяет использовать самописные пакеты, например - Ultra Tuner.
|
||||
- [Horizon OC](https://github.com/Horizon-OC/Horizon-OC) - Оверлей для управления модулем sys-clk.
|
||||
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Оверлей позволяющий следить за параметрами консоли в реальном времени. Может выступать в качестве счетчика FPS. Сменить пресет Micro-оверлея можно в Tuner.
|
||||
- [FPSLocker](https://github.com/ppkantorski/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх.
|
||||
- [FPSLocker](https://github.com/masagrator/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх.
|
||||
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - Оверлей для использования читов, включая графические.
|
||||
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх.
|
||||
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Оверлей для включения\отключения установленных системных модулей.
|
||||
@ -68,8 +69,8 @@
|
||||
* [DBI](https://4pda.to/forum/index.php?showtopic=939714&st=1100#entry86288632) - Здесь можно скачать DBI или обновить имеющийся.
|
||||
* [AIO](https://github.com/HamletDuFromage/aio-switch-updater) - Скачивает настроенный AIO для UltraNX.
|
||||
* [Linkalho](https://gbatemp.net/download/linkalho.38822) - Программа для привязки аккаунта. Без привязки не будут работать некоторые игры.
|
||||
* [PPSSPP](https://gbatemp.net/threads/ppsspp-switch-standalone-beta.544071/post-10805015) - Эмулятор PSP.
|
||||
* [DuckStation](https://gbatemp.net/threads/duckstation-for-switch.654484/page-7#post-10768042) - Эмулятор PS1.
|
||||
* [PPSSPP](https://github.com/NaGaa95/ppsspp-nx) - Эмулятор PSP.
|
||||
* [DuckStation](https://github.com/shooterspps/duckstation) - Эмулятор PS1.
|
||||
* [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) - Программа для сброса контроллера батареи. Не используйте просто так!
|
||||
@ -82,7 +83,7 @@
|
||||
* [sys-dock](https://github.com/masagrator/sys-dock) - Модуль позволяющий изменять частоту подключенного экрана через Док.
|
||||
* [Tetris](https://github.com/ppkantorski/Tetris-Overlay) - Та самая игра в виде оверлея. Работает только на последних версиях Ultrahand.
|
||||
* [MasterVolume](https://github.com/averne/MasterVolume) - Регулировка глобальной громкости, позволяет поднять громкость выше максимума. Использовать аккуратно!
|
||||
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) + [NX-FanControl Overlay Fork](https://github.com/ppkantorski/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
|
||||
* [NX-FanControl](https://github.com/Lightos1/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
|
||||
* [BT Audio](https://github.com/masagrator/BT_Audio-ovl) - Оверлей, позволяющий быстро отключаться\подключаться к bluetooth-гарнитуре.
|
||||
* [Fizeau](https://github.com/averne/Fizeau) + [Fizeau Overlay Fork](https://github.com/ppkantorski/Fizeau) - Модуль для изменения цветового профиля экрана.
|
||||
* [sys-tune](https://github.com/ppkantorski/sys-tune) - Оверлей-музыкальный плеер, работает в фоне.
|
||||
@ -102,6 +103,7 @@
|
||||
|
||||
[GPL 2.0](https://github.com/Atmosphere-NX/Atmosphere/blob/master/LICENSE):
|
||||
* [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)
|
||||
* [Mission Control](https://github.com/ndeadly/MissionControl)
|
||||
|
||||
|
||||
|
||||
@ -109,10 +111,9 @@
|
||||
## Благодарности
|
||||
|
||||
* Souldbminer
|
||||
* B3711
|
||||
* ppkantorski
|
||||
* Meha
|
||||
* duckbill
|
||||
* B3711
|
||||
* snupt
|
||||
#### А так же - отдельная благодарность администрации и участникам Ultra Group
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
#
|
||||
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
|
||||
|
||||
### [UltraNX 3.1|RC1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Supports all HOS up to and including 23.0.0
|
||||
### [UltraNX 3.1|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Supports all HOS up to and including 23.0.1
|
||||
|
||||
|
||||
|
||||
@ -50,10 +50,11 @@
|
||||
* [sys-patch](https://github.com/borntohonk/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.
|
||||
* [disable remap dialog](https://github.com/ndeadly/disable_remap_dialog) - A module that removes the warning about reconfigured buttons every time you enter the game.
|
||||
* [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.
|
||||
- [Horizon OC](https://github.com/Horizon-OC/Horizon-OC) - Overlay for controlling sys-clk module.
|
||||
- [Status Monitor](https://github.com/ppkantorski/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 Tuner.
|
||||
- [FPSLocker](https://github.com/ppkantorski/FPSLocker) - An overlay that allows you to unlock 60 FPS in games.
|
||||
- [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) - An overlay for switching a running game to a handheld\dock mode, which changes the graphics and resolution settings in games.
|
||||
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Overlay for enabling\disabling installed system modules.
|
||||
@ -64,8 +65,8 @@
|
||||
* [DBI](https://4pda.to/forum/index.php?showtopic=939714&st=1100#entry86288632) - Here you can download a DBI or update an existing one.
|
||||
* [AIO](https://github.com/HamletDuFromage/aio-switch-updater) - Downloads the configured AIO for UltraNX.
|
||||
* [Linkalho](https://gbatemp.net/download/linkalho.38822/) - Account linking program. Some games won't work without the link.=
|
||||
* [PPSSPP](https://gbatemp.net/threads/ppsspp-switch-standalone-beta.544071/post-10805015) - PSP emulator.
|
||||
* [DuckStation](https://gbatemp.net/threads/duckstation-for-switch.654484/page-7#post-10768042) - PS1 emulator.
|
||||
* [PPSSPP](https://github.com/NaGaa95/ppsspp-nx) - PSP emulator.
|
||||
* [DuckStation](https://github.com/shooterspps/duckstation) - PS1 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!
|
||||
@ -78,7 +79,7 @@
|
||||
* [sys-dock](https://github.com/masagrator/sys-dock) - A module that allows you to change the frequency of your connected screen via the Dock.
|
||||
* [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/Insektaure/NX-FanControl) + [NX-FanControl Overlay Fork](https://github.com/ppkantorski/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.
|
||||
* [NX-FanControl](https://github.com/Lightos1/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) + [Fizeau Overlay Fork](https://github.com/ppkantorski/Fizeau) - Module for changing the screen color profile.
|
||||
* [sys-tune](https://github.com/ppkantorski/sys-tune) - Overlay music player, works in background.
|
||||
@ -97,16 +98,16 @@ Listed below are the licenses of those programs that have been modified specific
|
||||
|
||||
[GPL 2.0](https://github.com/Atmosphere-NX/Atmosphere/blob/master/LICENSE):
|
||||
* [Atmosphere](https://github.com/Atmosphere-NX/Atmosphere)
|
||||
* [Mission Control](https://github.com/ndeadly/MissionControl)
|
||||
|
||||
|
||||
|
||||
## Credits
|
||||
|
||||
* Souldbminer
|
||||
* B3711
|
||||
* ppkantorski
|
||||
* Meha
|
||||
* duckbill
|
||||
* B3711
|
||||
* snupt
|
||||
#### And also - a special thanks to the administration and members of Ultra Group
|
||||
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
# Graveyard Keeper 2 1.0.2
|
||||
# BID: D8AEEEB4E7F1AB63
|
||||
|
||||
ALL_FPS:
|
||||
# Vsync
|
||||
# Ref: 01 00 00 00 01 00 00 00 00 00 00 08
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7A9FA98]
|
||||
value_type: int32
|
||||
value: VSYNC_TARGET
|
||||
# FPS lock
|
||||
# Ref: 89 88 88 3C 03 00 00 00
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7A9FAA4]
|
||||
value_type: float
|
||||
value: "1 / FPS_LOCK_TARGET"
|
||||
@ -0,0 +1,28 @@
|
||||
# Tiebreak+: Official Game of the ATP and WTA 1.5.0
|
||||
# BID: FEDCF99FA055B68A
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: dr_target
|
||||
value_type: float
|
||||
default_value: 0.03333333333
|
||||
evaluate: "0.8 / FPS_TARGET" # we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET
|
||||
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: 0x1A4CB8C
|
||||
value_type: uint32
|
||||
value: 3
|
||||
# Redirect Dynamic Resolution target
|
||||
# REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x1444614
|
||||
instructions: [
|
||||
[adrp, x8, $dr_target],
|
||||
[ldr, s3, [x8, $dr_target]],
|
||||
[nop]
|
||||
]
|
||||
@ -0,0 +1,25 @@
|
||||
# ウィッチャー3 ワイルドハント コンプリートエディション 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,52 @@
|
||||
# 《心之城堡:重述》 1.0.5
|
||||
# BID: E902A297D1544CCF
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: limiter_sleep_threshold
|
||||
value_type: int64
|
||||
default_value: 319999
|
||||
evaluate: "(10000000 / FPS_TARGET) - 13001"
|
||||
-
|
||||
type: variable
|
||||
name: limiter_sleep_target
|
||||
value_type: int64
|
||||
default_value: 330000
|
||||
evaluate: "(10000000 / FPS_TARGET) - 3000"
|
||||
MASTER_WRITE:
|
||||
# FPS lock
|
||||
## REF: e8 3f 9c 52 88 00 a0 72
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x2490648
|
||||
instructions: [
|
||||
[adrp, x8, $limiter_sleep_threshold],
|
||||
[ldr, x8, [x8, $limiter_sleep_threshold]]
|
||||
]
|
||||
## REF: 14 22 81 52 b4 00 a0 72
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x2490654
|
||||
instructions: [
|
||||
[adrp, x20, $limiter_sleep_target],
|
||||
[ldr, x20, [x20, $limiter_sleep_target]]
|
||||
]
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution
|
||||
## REF: e9 11 e8 f2 20 01 67 9e 00 18 68 1e 08 01 00 6d, look at adrp + ldr x0 above
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8360C68, 0xB8, 0x0]
|
||||
address_unsafe: true
|
||||
value_type: double
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8360C68, 0xB8, 0x8]
|
||||
address_unsafe: true
|
||||
value_type: double
|
||||
value: FRAMETIME_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - The Complete Edition `Cartridge only 2` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,25 @@
|
||||
# 《巫師 3:狂獵》-完全版 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,11 @@
|
||||
# 영웅전설 시작의 궤적 1.0.5
|
||||
# BID: 60568AFC961E0F51
|
||||
|
||||
ALL_FPS:
|
||||
# Set game to 60 FPS mode
|
||||
# REF: find xref of "PhyreFrameworkApplication" string, look at first LDR above it
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4FBDA80, 0x20A4]
|
||||
value_type: uint32
|
||||
value: 0
|
||||
@ -0,0 +1,20 @@
|
||||
# 空の軌跡 the 2nd 1.0.3
|
||||
# BID: 6994C555B7D6B642
|
||||
|
||||
ALL_FPS:
|
||||
# Min Delta
|
||||
## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it
|
||||
# By default 60
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x877890, 0x2C]
|
||||
value_type: uint32
|
||||
value: FPS_TARGET
|
||||
# Dynamic Resolution
|
||||
## REF: First function in .init_array section, ADRP + ADD + 0x228 (default float: 2.3)
|
||||
## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS without it
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8773D8]
|
||||
value_type: float
|
||||
value: 0.95
|
||||
@ -0,0 +1,19 @@
|
||||
# Hyrule Warriors: Age of Calamity 1.4.1
|
||||
# BID: E5F275B5D0889899
|
||||
# Non-prerenderd cutscenes are tied to framerate
|
||||
|
||||
ALL_FPS:
|
||||
# REF: 1e 00 00 00 02 00 00 00 1e 00 00 00
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x26A2280]
|
||||
value_type: int32
|
||||
value: [FPS_TARGET, VSYNC_TARGET, FPS_TARGET]
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x26A228C]
|
||||
value_type: float
|
||||
value: FPS_LOCK_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - Complete Edition `PL/CZ/HU/SK/SL` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,24 @@
|
||||
# Castle of Heart 1.3.0
|
||||
# BID: 38E31B826DE0764C
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: limiter_frametime
|
||||
value_type: double
|
||||
default_value: 0.033
|
||||
evaluate: "TruncDec(1 / FPS_TARGET, 3)"
|
||||
MASTER_WRITE:
|
||||
# FPS lock
|
||||
## REF: 00 20 68 1e 4b fd ff 54 74 d6 01 a9, look at adrp x8 + ldr d8, [x8, #0x98] above
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x72165C
|
||||
instructions: [
|
||||
[adrp, x8, $limiter_frametime],
|
||||
[ldr, d8, [x8, $limiter_frametime]]
|
||||
]
|
||||
ALL_FPS:
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - Complete Edition `West EUR/CY` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,25 @@
|
||||
# ウィッチャー3 ワイルドハント 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,19 @@
|
||||
# Dragon Quest Heroes: Torneko's Mystery Dungeon -Classic HD- 1.0.1
|
||||
# BID: 724C36A143F3F225
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5E703C8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4E63150, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,19 @@
|
||||
# Dragon Quest Heroes: Torneko's Mystery Dungeon -Classic HD- 1.0.2
|
||||
# BID: F3A70AEAAF0810B9
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5E703C8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4E63150, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,83 @@
|
||||
# The Lord of the Rings: War in the North - Legacy Edition 1.0.2
|
||||
# BID: D70341137DAA544C
|
||||
# INFO: RenderThreadWaitOnGPU blocks game to 59 FPS and causes CPU cores to rampage if not adjusted, but if adjusted to allow perfect 60 FPS image starts tearing, so i decided to not change it
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: frametime
|
||||
value_type: uint32
|
||||
default_value: 33333
|
||||
evaluate: 1000000 / FPS_LOCK_TARGET
|
||||
-
|
||||
type: variable
|
||||
name: refresh_rate
|
||||
value_type: float
|
||||
default_value: 0.01665
|
||||
evaluate: 0.999 * (1 / REFRESH_RATE)
|
||||
-
|
||||
type: code
|
||||
name: sleep
|
||||
instructions: [
|
||||
[adrp, x26, $frametime],
|
||||
[ldr, w26, [x26, $frametime]],
|
||||
[sub, w24, w26, 1],
|
||||
[cmp, x0, x24],
|
||||
[b, 0x1B7190]
|
||||
]
|
||||
-
|
||||
type: code
|
||||
name: sleep2
|
||||
instructions: [
|
||||
[adrp, x26, $frametime],
|
||||
[ldr, w26, [x26, $frametime]],
|
||||
[sub, w24, w26, 1],
|
||||
[cmp, x0, x24],
|
||||
[b, 0x1B7238]
|
||||
]
|
||||
-
|
||||
type: code
|
||||
name: gpuSleep
|
||||
instructions: [
|
||||
[mov, x0, -2],
|
||||
[svc, 0xB],
|
||||
[mov, x0, 10000],
|
||||
[svc, 0xB],
|
||||
[ret]
|
||||
]
|
||||
MASTER_WRITE:
|
||||
# RenderThreadWaitOnMainThread, main FPS lock
|
||||
# REF: 98 46 90 52 BA 46 90 52, search for CMP X0, X24
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x1B718C
|
||||
instructions: [
|
||||
[b, _sleep()]
|
||||
]
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x1B7234
|
||||
instructions: [
|
||||
[b, _sleep2()]
|
||||
]
|
||||
# RenderThreadWaitOnGPU
|
||||
# REF: A8 B2 8C 52 08 91 A7 72
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x25CDD8
|
||||
instructions: [
|
||||
[adrp, x8, $refresh_rate],
|
||||
[ldr, w8, [x8, $refresh_rate]]
|
||||
]
|
||||
# Stabilize CPU usage
|
||||
# patch YieldThread below
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x25CDF0
|
||||
instructions: [
|
||||
[bl, _gpuSleep()]
|
||||
]
|
||||
ALL_FPS:
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,60 @@
|
||||
# 三國志14 1.1.1
|
||||
# BID: E76B23E5AB278083
|
||||
# Cursor speed is tied to framerate, main menu animations speed is not adjusted properly in range from 35 to 55 FPS
|
||||
|
||||
DECLARATIONS:
|
||||
# DON'T PUT ANYTHING BETWEEN - START
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock
|
||||
value_type: uint32
|
||||
default_value: 30
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock2
|
||||
value_type: uint32
|
||||
default_value: 60
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
# DON'T PUT ANYTHING BETWEEN - END
|
||||
-
|
||||
type: variable
|
||||
name: game_speed
|
||||
value_type: float
|
||||
default_value: 0.0333333333
|
||||
evaluate: "1/FPS_TARGET"
|
||||
MASTER_WRITE:
|
||||
# Redirect adjusting game speed to FPS Lock, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, patch ADRP + ADD above it
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xBA86B4
|
||||
instructions: [
|
||||
[adrp, x9, $fps_lock],
|
||||
[add, x9, x9, $fps_lock]
|
||||
]
|
||||
# Redirect FPS Lock, REF: C8 32 40 B9 E8 C2 00 B9, patch CBNZ + LDR
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x896B90
|
||||
instructions: [
|
||||
[adrp, x8, $fps_lock],
|
||||
[ldr, w8, [x8, $fps_lock]]
|
||||
]
|
||||
# Redirect game speed, REF: 00 28 21 1E 00 A8 00 BD C0 03 5F D6
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x119A6FC
|
||||
instructions: [
|
||||
[adrp, x8, $game_speed],
|
||||
[ldr, s0, [x0, 0xa8]],
|
||||
[ldr, s1, [x8, $game_speed]]
|
||||
]
|
||||
ALL_FPS:
|
||||
- # Adjust min delta for menus, 0 - 30 FPS, 1 - 60 FPS, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, ADRP + LDR above
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x27BFED0]
|
||||
value_type: uint32
|
||||
value: "FPS_TARGET / 60"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,60 @@
|
||||
# 三國志14 with パワーアップキット 1.1.1
|
||||
# BID: 0C5CBA5E5DED6FDD
|
||||
# Cursor speed is tied to framerate, main menu animations speed is not adjusted properly in range from 35 to 55 FPS
|
||||
|
||||
DECLARATIONS:
|
||||
# DON'T PUT ANYTHING BETWEEN - START
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock
|
||||
value_type: uint32
|
||||
default_value: 30
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock2
|
||||
value_type: uint32
|
||||
default_value: 60
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
# DON'T PUT ANYTHING BETWEEN - END
|
||||
-
|
||||
type: variable
|
||||
name: game_speed
|
||||
value_type: float
|
||||
default_value: 0.0333333333
|
||||
evaluate: "1/FPS_TARGET"
|
||||
MASTER_WRITE:
|
||||
# Redirect adjusting game speed to FPS Lock, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, patch ADRP + ADD above it
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xB8F878
|
||||
instructions: [
|
||||
[adrp, x9, $fps_lock],
|
||||
[add, x9, x9, $fps_lock]
|
||||
]
|
||||
# Redirect FPS Lock, REF: C8 32 40 B9 E8 C2 00 B9, patch CBNZ + LDR
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x896D70
|
||||
instructions: [
|
||||
[adrp, x8, $fps_lock],
|
||||
[ldr, w8, [x8, $fps_lock]]
|
||||
]
|
||||
# Redirect game speed, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x111198C
|
||||
instructions: [
|
||||
[adrp, x8, $game_speed],
|
||||
[ldr, s0, [x0, 0xa0]],
|
||||
[ldr, s1, [x8, $game_speed]]
|
||||
]
|
||||
ALL_FPS:
|
||||
- # Adjust min delta for menus, 0 - 30 FPS, 1 - 60 FPS, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, ADRP + LDR above
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x25512A0]
|
||||
value_type: uint32
|
||||
value: "FPS_TARGET / 60"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,18 @@
|
||||
# Artis Impact 1.0.1
|
||||
# BID: DB412FE4CA2393DA
|
||||
|
||||
ALL_FPS:
|
||||
# Vsync
|
||||
# Ref: 01 00 00 00 01 00 00 00 00 00 00 08
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6F32BD8]
|
||||
value_type: int32
|
||||
value: VSYNC_TARGET
|
||||
# FPS lock
|
||||
# Ref: 89 88 88 3C 03 00 00 00
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6F32BE4]
|
||||
value_type: float
|
||||
value: "1 / FPS_LOCK_TARGET"
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - Complete Edition `RO/BG/AU/ZA/NZ` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,37 @@
|
||||
# みんなのGOLF WORLD 1.1.12
|
||||
# BID: FF38BCAE307364E0
|
||||
# Changed frametime target value math formula because default one sucks at 60 FPS target
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: dr_frametime_max
|
||||
value_type: double
|
||||
default_value: 40
|
||||
evaluate: "0.9 * FRAMETIME_TARGET"
|
||||
-
|
||||
type: variable
|
||||
name: dr_frametime_min
|
||||
value_type: double
|
||||
default_value: 33.3333333333
|
||||
evaluate: "(0.9 * FRAMETIME_TARGET) - 6"
|
||||
MASTER_WRITE:
|
||||
# REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x39A98B8
|
||||
instructions: [
|
||||
[adrp, x10, $dr_frametime_max],
|
||||
[ldr, d1, [x10, $dr_frametime_max]],
|
||||
[nop]
|
||||
]
|
||||
-
|
||||
# REF: 00 0d 40 fd 0a 00 b8 d2, result offset + 4
|
||||
type: asm_a64
|
||||
main_offset: 0x39A998C
|
||||
instructions: [
|
||||
[adrp, x10, $dr_frametime_min],
|
||||
[ldr, d1, [x10, $dr_frametime_min]],
|
||||
[nop],
|
||||
[nop]
|
||||
]
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - Complete Edition `DE/AT` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,20 @@
|
||||
# Trails in the Sky 2nd Chapter 1.0.3
|
||||
# BID: 5EA394E096752EE3
|
||||
|
||||
ALL_FPS:
|
||||
# Min Delta
|
||||
## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it
|
||||
# By default 60
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x879890, 0x2C]
|
||||
value_type: uint32
|
||||
value: FPS_TARGET
|
||||
# Dynamic Resolution
|
||||
## REF: First function in .init_array section, ADRP + ADD + 0x228 (default float: 2.3)
|
||||
## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS without it
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8793D8]
|
||||
value_type: float
|
||||
value: 0.95
|
||||
@ -0,0 +1,21 @@
|
||||
# No Man's Sky 7.3.0
|
||||
# BID: 97C71E2471E850BD
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: dr_target
|
||||
value_type: float
|
||||
default_value: 30
|
||||
evaluate: FPS_TARGET
|
||||
MASTER_WRITE:
|
||||
# Redirect DR frametime target
|
||||
# REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x24319A4
|
||||
instructions: [
|
||||
[adrp, x9, $dr_target],
|
||||
[ldr, s0, [x9, $dr_target]],
|
||||
[nop]
|
||||
]
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - Complete Edition `KOR` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,32 @@
|
||||
# It Takes Two 1.0.3
|
||||
# BID: 104DB32FD10E7538
|
||||
|
||||
MASTER_WRITE:
|
||||
# Set Triple Buffer
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x8AA8780
|
||||
value_type: int8
|
||||
value: 0x53
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget = 0.87 * (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xACCA3D8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(0.87 * FRAMETIME_TARGET, 2)", "TruncDec(0.87 * FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xACF8130, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xA515EC0, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,10 @@
|
||||
# DAVE THE DIVER 1.0.6.1259
|
||||
# BID: 187FF14300662592
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xA5352E8, 0x50]
|
||||
value_type: uint32
|
||||
value: "141120000 / FPS_TARGET"
|
||||
@ -0,0 +1,10 @@
|
||||
# DAVE THE DIVER 1.0.6.1267
|
||||
# BID: F74B633E480E4E16
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xA5477E8, 0x50]
|
||||
value_type: uint32
|
||||
value: "141120000 / FPS_TARGET"
|
||||
@ -0,0 +1,25 @@
|
||||
# ウィッチャー3 ワイルドハント コンプリートエディション `Cartridge only` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - Complete Edition `LV/LT/EST/RU` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,52 @@
|
||||
# Castle of Heart: Retold 1.0.5
|
||||
# BID: E902A297D1544CCF
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: limiter_sleep_threshold
|
||||
value_type: int64
|
||||
default_value: 319999
|
||||
evaluate: "(10000000 / FPS_TARGET) - 13001"
|
||||
-
|
||||
type: variable
|
||||
name: limiter_sleep_target
|
||||
value_type: int64
|
||||
default_value: 330000
|
||||
evaluate: "(10000000 / FPS_TARGET) - 3000"
|
||||
MASTER_WRITE:
|
||||
# FPS lock
|
||||
## REF: e8 3f 9c 52 88 00 a0 72
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x2490648
|
||||
instructions: [
|
||||
[adrp, x8, $limiter_sleep_threshold],
|
||||
[ldr, x8, [x8, $limiter_sleep_threshold]]
|
||||
]
|
||||
## REF: 14 22 81 52 b4 00 a0 72
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x2490654
|
||||
instructions: [
|
||||
[adrp, x20, $limiter_sleep_target],
|
||||
[ldr, x20, [x20, $limiter_sleep_target]]
|
||||
]
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution
|
||||
## REF: e9 11 e8 f2 20 01 67 9e 00 18 68 1e 08 01 00 6d, look at adrp + ldr x0 above
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8360C68, 0xB8, 0x0]
|
||||
address_unsafe: true
|
||||
value_type: double
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8360C68, 0xB8, 0x8]
|
||||
address_unsafe: true
|
||||
value_type: double
|
||||
value: FRAMETIME_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,18 @@
|
||||
# Deer & Boy 1.4.2
|
||||
# BID: 59DE1E422C2B1463
|
||||
|
||||
ALL_FPS:
|
||||
# Vsync
|
||||
# Ref: 01 00 00 00 03 00 00 00 00 00 00 08
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9ADEAE8]
|
||||
value_type: int32
|
||||
value: VSYNC_TARGET
|
||||
# fixedDeltaTime
|
||||
# Fixes an issue with game animation targeting always 25 FPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9E03AA8, 0x50]
|
||||
value_type: uint32
|
||||
value: "141120000 / FPS_TARGET"
|
||||
@ -0,0 +1,25 @@
|
||||
# Minecraft Dungeons II 1.1.1.0
|
||||
# BID: 9E9D887D59F7F7DB
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xADD15C8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xAE22510, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x9DC6310, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -2,75 +2,70 @@
|
||||
# BID: 33463E11899166BB
|
||||
# What is still not adjusted: movement speed in cutscenes, 2D animations speed (it includes UI and 2D effects on 3D objects), none of them uses 1/30 nor 1/60 float
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: gameSpeed
|
||||
value_type: float
|
||||
default_value: 0.033333333
|
||||
evaluate: "1 / FPS_TARGET"
|
||||
-
|
||||
type: code
|
||||
name: animationSpeed
|
||||
instructions: [
|
||||
[movw, r0, $gameSpeed],
|
||||
[movt, r0, $gameSpeed],
|
||||
[vldr, s18, [r0]],
|
||||
[bx, lr]
|
||||
]
|
||||
-
|
||||
type: code
|
||||
name: movementSpeed
|
||||
instructions: [
|
||||
[movw, r0, $gameSpeed],
|
||||
[movt, r0, $gameSpeed],
|
||||
[vldr, s2, [r0]],
|
||||
[bx, lr]
|
||||
]
|
||||
MASTER_WRITE:
|
||||
# Triple buffer
|
||||
-
|
||||
type: bytes
|
||||
type: asm_a32
|
||||
main_offset: 0x2F3CD8
|
||||
value_type: uint32
|
||||
value: 0xE3A01003
|
||||
instructions: [
|
||||
[mov, r1, 3]
|
||||
]
|
||||
-
|
||||
type: bytes
|
||||
type: asm_a32
|
||||
main_offset: 0x35C218
|
||||
value_type: uint32
|
||||
value: 0xE3A00003
|
||||
instructions: [
|
||||
[mov, r0, 3]
|
||||
]
|
||||
-
|
||||
type: bytes
|
||||
type: asm_a32
|
||||
main_offset: 0x35C2C0
|
||||
value_type: uint32
|
||||
value: 0xE3A02003
|
||||
instructions: [
|
||||
[mov, r2, 3]
|
||||
]
|
||||
-
|
||||
type: bytes
|
||||
type: asm_a32
|
||||
main_offset: 0x35C2D0
|
||||
value_type: uint32
|
||||
value: 0xE3A02003
|
||||
# Code Cave, read speed from MAIN + 0x1B1CF00
|
||||
instructions: [
|
||||
[mov, r2, 3]
|
||||
]
|
||||
# Animation speed
|
||||
# Jump to MAIN + 0x4EFBE0
|
||||
-
|
||||
type: bytes
|
||||
type: asm_a32
|
||||
main_offset: 0x1CE4B4
|
||||
value_type: uint32
|
||||
value: 0xEA0C85C9
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4EFBE0
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xE28F0616
|
||||
- 0xE30D1318
|
||||
- 0xE0800001
|
||||
- 0xE3A01802
|
||||
- 0xE0800001
|
||||
- 0xED909A00
|
||||
- 0xEAF37A2E
|
||||
instructions: [
|
||||
[bl, _animationSpeed()]
|
||||
]
|
||||
# Movement speed
|
||||
# Jump to MAIN + 0x4EFBFC
|
||||
-
|
||||
type: bytes
|
||||
type: asm_a32
|
||||
main_offset: 0x20B750
|
||||
value_type: uint32
|
||||
value: 0xEA0B9129
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4EFBFC
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xE28F0616
|
||||
- 0xE30D62FC
|
||||
- 0xE0800006
|
||||
- 0xE3A06802
|
||||
- 0xE0800006
|
||||
- 0xED901A00
|
||||
- 0xEAF46ECE
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1B1CF00
|
||||
value_type: float
|
||||
value: 0.0333333333
|
||||
ALL_FPS:
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1B1CF00]
|
||||
value_type: float
|
||||
value: 1 / FPS_TARGET
|
||||
instructions: [
|
||||
[bl, _movementSpeed()]
|
||||
]
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
# Animal Shelter Simulator 1.1.0
|
||||
# BID: AB9EFB08DB5FE4F1
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
# Required for different refresh rates to not jitter
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x48A9F40, 0x48]
|
||||
value_type: float
|
||||
value: "1 / FPS_TARGET"
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt - Complete Edition `US` 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,58 @@
|
||||
# EA SPORTS FC 27 1.8c.fd45
|
||||
# BID: 9636BCD68E2EF2C8
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
value_type: uint32
|
||||
name: hasStarted
|
||||
default_value: 0
|
||||
-
|
||||
type: variable
|
||||
value_type: float
|
||||
name: dr_target
|
||||
default_value: 33.333333
|
||||
evaluate: FRAMETIME_TARGET
|
||||
MASTER_WRITE:
|
||||
# Dynamic Resolution regulator
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x97F21D8
|
||||
instructions: [
|
||||
[ldr, s8, [x0, 248]],
|
||||
[ldr, s9, [x0, 324]],
|
||||
[ldr, s10, [x0, 388]],
|
||||
[ldr, s12, [x0, 472]],
|
||||
[ldrb, w20, [x0, 576]],
|
||||
[ldr, s0, [x0, 164]],
|
||||
[adrp, x9, $hasStarted],
|
||||
[ldr, w9, [x9, $hasStarted]],
|
||||
[cbz, w9, +16],
|
||||
[adrp, x9, $dr_target],
|
||||
[ldr, s8, [x9, $dr_target]],
|
||||
[fmov, s9, s8],
|
||||
[nop],
|
||||
[nop],
|
||||
[nop],
|
||||
[nop]
|
||||
]
|
||||
ALL_FPS:
|
||||
-
|
||||
type: write
|
||||
address: [VARIABLE, hasStarted]
|
||||
value: 1
|
||||
# FPS lock
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xDA1EE38, 8]
|
||||
value_type: double
|
||||
value: FPS_TARGET
|
||||
# Dynamic resolution
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xDE81DA0, 0x14C8, 0xC]
|
||||
value_type: float
|
||||
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,13 @@
|
||||
# EA SPORTS FC 27 1.8c.cab1
|
||||
# BID: FB81983AA1CC3A2E
|
||||
|
||||
ALL_FPS:
|
||||
# Internal FPS Lock
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xDA19E38, 8]
|
||||
value_type: double
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,11 @@
|
||||
# Another Code: Recollection 1.0.0
|
||||
# BID: DED0F920799151BE
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
# Fixes issues with popups animations
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x624b160, 0x48]
|
||||
value_type: float
|
||||
value: "1 / FPS_TARGET"
|
||||
@ -0,0 +1,60 @@
|
||||
# 三國志14 1.1.1
|
||||
# BID: 33E595CFF4FCB981
|
||||
# Cursor speed is tied to framerate, main menu animations speed is not adjusted properly in range from 35 to 55 FPS
|
||||
|
||||
DECLARATIONS:
|
||||
# DON'T PUT ANYTHING BETWEEN - START
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock
|
||||
value_type: uint32
|
||||
default_value: 30
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock2
|
||||
value_type: uint32
|
||||
default_value: 60
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
# DON'T PUT ANYTHING BETWEEN - END
|
||||
-
|
||||
type: variable
|
||||
name: game_speed
|
||||
value_type: float
|
||||
default_value: 0.0333333333
|
||||
evaluate: "1/FPS_TARGET"
|
||||
MASTER_WRITE:
|
||||
# Redirect adjusting game speed to FPS Lock, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, patch ADRP + ADD above it
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xBA82E4
|
||||
instructions: [
|
||||
[adrp, x9, $fps_lock],
|
||||
[add, x9, x9, $fps_lock]
|
||||
]
|
||||
# Redirect FPS Lock, REF: C8 32 40 B9 E8 C2 00 B9, patch CBNZ + LDR
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x896C70
|
||||
instructions: [
|
||||
[adrp, x8, $fps_lock],
|
||||
[ldr, w8, [x8, $fps_lock]]
|
||||
]
|
||||
# Redirect game speed, REF: 00 28 21 1E 00 A8 00 BD C0 03 5F D6
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x11A002C
|
||||
instructions: [
|
||||
[adrp, x8, $game_speed],
|
||||
[ldr, s0, [x0, 0xa8]],
|
||||
[ldr, s1, [x8, $game_speed]]
|
||||
]
|
||||
ALL_FPS:
|
||||
- # Adjust min delta for menus, 0 - 30 FPS, 1 - 60 FPS, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, ADRP + LDR above
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x27C16E0]
|
||||
value_type: uint32
|
||||
value: "FPS_TARGET / 60"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,60 @@
|
||||
# 三國志14 with 威力加強版 1.1.1
|
||||
# BID: DA1527A7E3B3DD17
|
||||
# Cursor speed is tied to framerate, main menu animations speed is not adjusted properly in range from 35 to 55 FPS
|
||||
|
||||
DECLARATIONS:
|
||||
# DON'T PUT ANYTHING BETWEEN - START
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock
|
||||
value_type: uint32
|
||||
default_value: 30
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
-
|
||||
type: variable
|
||||
name: fps_lock2
|
||||
value_type: uint32
|
||||
default_value: 60
|
||||
evaluate: FPS_LOCK_TARGET
|
||||
# DON'T PUT ANYTHING BETWEEN - END
|
||||
-
|
||||
type: variable
|
||||
name: game_speed
|
||||
value_type: float
|
||||
default_value: 0.0333333333
|
||||
evaluate: "1/FPS_TARGET"
|
||||
MASTER_WRITE:
|
||||
# Redirect adjusting game speed to FPS Lock, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, patch ADRP + ADD above it
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xB8F568
|
||||
instructions: [
|
||||
[adrp, x9, $fps_lock],
|
||||
[add, x9, x9, $fps_lock]
|
||||
]
|
||||
# Redirect FPS Lock, REF: C8 32 40 B9 E8 C2 00 B9, patch CBNZ + LDR
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x896DE0
|
||||
instructions: [
|
||||
[adrp, x8, $fps_lock],
|
||||
[ldr, w8, [x8, $fps_lock]]
|
||||
]
|
||||
# Redirect game speed, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x1116D8C
|
||||
instructions: [
|
||||
[adrp, x8, $game_speed],
|
||||
[ldr, s0, [x0, 0xa0]],
|
||||
[ldr, s1, [x8, $game_speed]]
|
||||
]
|
||||
ALL_FPS:
|
||||
- # Adjust min delta for menus, 0 - 30 FPS, 1 - 60 FPS, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, ADRP + LDR above
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2552AD0]
|
||||
value_type: uint32
|
||||
value: "FPS_TARGET / 60"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,75 @@
|
||||
# Blades of Time 1.2.200127
|
||||
# BID: 679B5FC4F46F5DB7
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: act_step
|
||||
value_type: float
|
||||
default_value: 0.0333333333
|
||||
evaluate: "1 / FPS_TARGET"
|
||||
-
|
||||
type: variable
|
||||
name: act_threshold
|
||||
value_type: float
|
||||
default_value: 0.0333333333
|
||||
evaluate: "0.95 / FPS_TARGET"
|
||||
-
|
||||
type: variable
|
||||
name: act_catchup
|
||||
value_type: float
|
||||
default_value: 0.0666666667
|
||||
evaluate: "2 / FPS_TARGET"
|
||||
-
|
||||
type: code
|
||||
name: getFixedActTime
|
||||
instructions: [
|
||||
[ldr, w8, [x20, 0x20]],
|
||||
[mov, w9, 0x8889],
|
||||
[movk, w9, 0x3d08, 16],
|
||||
[cmp, w8, w9],
|
||||
[b.ne, :keep],
|
||||
[adrp, x8, $act_step],
|
||||
[ldr, w8, [x8, $act_step]],
|
||||
:keep, [ret]
|
||||
]
|
||||
MASTER_WRITE:
|
||||
# REF: TpsGameScene::actScene() - skip-frame threshold (was 1/30 from 0x13A1E20)
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xA5FA0
|
||||
instructions: [
|
||||
[adrp, x8, $act_threshold],
|
||||
[ldr, s9, [x8, $act_threshold]]
|
||||
]
|
||||
# REF: catch-up threshold (was 1/15 from 0x13A1E24)
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xA5FD0
|
||||
instructions: [
|
||||
[adrp, x8, $act_catchup]
|
||||
]
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xA5FD8
|
||||
instructions: [
|
||||
[ldr, s2, [x8, $act_catchup]]
|
||||
]
|
||||
# REF: accumulator -= step, dt = step (was -1/30 and 0x3D088889)
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xA6038
|
||||
instructions: [
|
||||
[adrp, x8, $act_step],
|
||||
[ldr, s1, [x8, $act_step]],
|
||||
[fsub, s0, s0, s1],
|
||||
[ldr, w21, [x8, $act_step]],
|
||||
[nop]
|
||||
]
|
||||
# REF: fixed physics act time passed to PhysicsThread::act (scene+0x20, 1/30 when vsync30fps)
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xA627C
|
||||
instructions: [
|
||||
[bl, _getFixedActTime()]
|
||||
]
|
||||
@ -0,0 +1,10 @@
|
||||
# SENRAN KAGURA Peach Ball `US` 1.0.2
|
||||
# BID: 7F8AF4380449F13D
|
||||
|
||||
ALL_FPS:
|
||||
# CRendSpanMgr:[SpanType_30FPS] = 1, CRendSpanMgr:[SpanType_60FPS] = 0
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x62D8CC]
|
||||
value_type: int32
|
||||
value: 0
|
||||
@ -0,0 +1,25 @@
|
||||
# The Entropy Centre 1.0.1
|
||||
# BID: 7AF502E140C13759
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7052288, 0]
|
||||
value_type: float
|
||||
value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x707FF48, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6E838E8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,10 @@
|
||||
# 영웅전설 여의 궤적 1.0.1
|
||||
# BID: 5A225D8AE0943744
|
||||
|
||||
ALL_FPS:
|
||||
# REF: 68 EA 50 B9 E0 03 1F 2A 7F B2 00 F9
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5510B0, 0x34]
|
||||
value_type: uint32
|
||||
value: FPS_LOCK_TARGET
|
||||
@ -0,0 +1,25 @@
|
||||
# ASTRONEER 1.44.3.0
|
||||
# BID: 35DD08251AEDF2D2
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xAE85748, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xAEB35D0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0xA6B6430, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,25 @@
|
||||
# The Witcher 3: Wild Hunt 4.04d
|
||||
# BID: C0AD3CC6D7866578
|
||||
|
||||
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
|
||||
@ -0,0 +1,20 @@
|
||||
# 하늘의 궤적 the 2nd / 空之軌跡 the 2nd 1.0.3a
|
||||
# BID: 7E1DE35BFA52F4A8
|
||||
|
||||
ALL_FPS:
|
||||
# Min Delta
|
||||
## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it
|
||||
# By default 60
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x878890, 0x2C]
|
||||
value_type: uint32
|
||||
value: FPS_TARGET
|
||||
# Dynamic Resolution
|
||||
## REF: First function in .init_array section, ADRP + ADD + 0x228 (default float: 2.3)
|
||||
## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS without it
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8783D8]
|
||||
value_type: float
|
||||
value: 0.95
|
||||
@ -81,7 +81,77 @@ DECLARATIONS:
|
||||
:goto3, [mov, w8, 0x21a0],
|
||||
[ret],
|
||||
]
|
||||
-
|
||||
type: code
|
||||
name: effectSpeed
|
||||
instructions: [
|
||||
[ldr, s0, [x20, 4]],
|
||||
[fmov, s1, 30.0],
|
||||
[fmul, s0, s0, s1],
|
||||
[str, s0, [x27, 856]],
|
||||
[ret]
|
||||
]
|
||||
-
|
||||
type: code
|
||||
name: menuWaitFrames
|
||||
instructions: [
|
||||
[adrp, x0, $game_speed],
|
||||
[ldr, s0, [x0, $game_speed]],
|
||||
[fmov, s2, 30.0],
|
||||
[fmul, s0, s0, s2],
|
||||
[ucvtf, s1, w8],
|
||||
[fdiv, s1, s1, s0],
|
||||
[fmov, s2, 0.5],
|
||||
[fadd, s1, s1, s2],
|
||||
[fcvtzu, w8, s1],
|
||||
[mov, w0, wzr],
|
||||
[ret]
|
||||
]
|
||||
MASTER_WRITE:
|
||||
# Quest log (quest title, "Received", quest completed): menu sequence "wait" step counts frames, scale wait length by 1 / (frame time * 30)
|
||||
# GfMenuObjQuestLog sequence wait, start of wait branch (ldr w8,[x19,#392]; str w8,[x19,#948]; orr w8,wzr,#1; mov w0,wzr; strb w8,[x19,#944])
|
||||
# Title sequence pushes wait 20 -> fade in -> wait 119 -> fade out
|
||||
# REF: 68 DA 43 F9 08 05 00 91 68 DA 03 F9 F3 03 00 32, patch at REF+0x248
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x46E1D4
|
||||
instructions: [
|
||||
[ldr, w8, [x19, 392]],
|
||||
[bl, _menuWaitFrames()],
|
||||
[str, w8, [x19, 948]],
|
||||
[mov, w8, 1],
|
||||
[strb, w8, [x19, 944]]
|
||||
]
|
||||
# Quest "Received" / quest completed / task sequences (second sequence of GfMenuObjQuestLog, pushes wait 55, 75, 45, 54...)
|
||||
# Same wait code, other template instance (ldr w8,[x19,#264]; str w8,[x19,#644]; orr w8,wzr,#1; mov w0,wzr; strb w8,[x19,#640])
|
||||
# REF: 68 DA 43 F9 08 05 00 91 68 DA 03 F9 F3 03 00 32, patch at REF+0x174
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x46E100
|
||||
instructions: [
|
||||
[ldr, w8, [x19, 264]],
|
||||
[bl, _menuWaitFrames()],
|
||||
[str, w8, [x19, 644]],
|
||||
[mov, w8, 1],
|
||||
[strb, w8, [x19, 640]]
|
||||
]
|
||||
# Effects speed (aura, fire etc.): game feeds effect system with layer speed (1.0) per frame, scale it by frame time * 30
|
||||
# REF: 88 0A 40 B9 68 5B 03 B9 (ldr w8,[x20,#8]; str w8,[x27,#856]), patch at REF
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x17794C
|
||||
instructions: [
|
||||
[bl, _effectSpeed()],
|
||||
[nop]
|
||||
]
|
||||
# QTE rings: speed factor already includes frame time * 30 and menu multiplies it again by frame time, force factor to 1.0
|
||||
# REF: A0 06 40 BD 01 D0 27 1E 08 08 21 1E, patch at REF+8 (fmul s8,s0,s1 -> fmov s8,#1.0)
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x1D0C4
|
||||
instructions: [
|
||||
[fmov, s8, 1.0]
|
||||
]
|
||||
# Dynamic speed
|
||||
# Jump before pushing frame
|
||||
-
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
# EVERYBODY'S GOLF: Hot Shots EUR 1.1.12
|
||||
# BID: 1EF3CBAA97A8DA7B
|
||||
# Changed frametime target value math formula because default one sucks at 60 FPS target
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: dr_frametime_max
|
||||
value_type: double
|
||||
default_value: 40
|
||||
evaluate: "0.9 * FRAMETIME_TARGET"
|
||||
-
|
||||
type: variable
|
||||
name: dr_frametime_min
|
||||
value_type: double
|
||||
default_value: 33.3333333333
|
||||
evaluate: "(0.9 * FRAMETIME_TARGET) - 6"
|
||||
MASTER_WRITE:
|
||||
# REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x39A98C8
|
||||
instructions: [
|
||||
[adrp, x10, $dr_frametime_max],
|
||||
[ldr, d1, [x10, $dr_frametime_max]],
|
||||
[nop]
|
||||
]
|
||||
# REF: 00 0d 40 fd 0a 00 b8 d2, result offset + 4
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x39A999C
|
||||
instructions: [
|
||||
[adrp, x10, $dr_frametime_min],
|
||||
[ldr, d1, [x10, $dr_frametime_min]],
|
||||
[nop],
|
||||
[nop]
|
||||
]
|
||||
@ -0,0 +1,17 @@
|
||||
# Another Eden Begins 1.1.0
|
||||
# BID: F09FD343105D328B
|
||||
|
||||
ALL_FPS:
|
||||
# Vsync
|
||||
# Ref: 01 00 00 00 89 88 88 3C
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xEA787E0]
|
||||
value_type: int32
|
||||
value: VSYNC_TARGET
|
||||
# FPS Lock
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xEA787E4]
|
||||
value_type: float
|
||||
value: "1 / FPS_LOCK_TARGET"
|
||||
@ -0,0 +1,12 @@
|
||||
# 이스 X -노딕스- 무삭제판 1.0.5
|
||||
# BID: D5C2734C0F14D43D
|
||||
# Credits to StevensND for finding assembly instruction from which I have derived pointer address
|
||||
|
||||
ALL_FPS:
|
||||
# Used to set min delta timing for various parts of game + DR target
|
||||
# REF: 00 10 2C 1E 01 E4 00 2F 09 85 9A 52 29 00 A0 72 E1 03 1F 2A first ADRP above it
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xBDA228, 0x34]
|
||||
value_type: uint32
|
||||
value: FPS_TARGET
|
||||
@ -0,0 +1,33 @@
|
||||
# 진・여신전생5 Vengeance 1.0.3
|
||||
# BID: C60BBEE6786A16DB
|
||||
|
||||
MASTER_WRITE:
|
||||
# Block from reapplying t.MaxFPS by game, REF: 01 E4 00 2F 00 AC 21 1E 08 00 40 F9 08 75 41 F9, nop BLR X8 after LDR X8, [X8,#0x2E8]
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x3780C40
|
||||
instructions: [
|
||||
[nop]
|
||||
]
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7AAFBB8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7273AD0, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7AD5858, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
Binary file not shown.
BIN
SaltySD/saltynx_bootstrap32.elf
Normal file
BIN
SaltySD/saltynx_bootstrap32.elf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -2,5 +2,5 @@
|
||||
"name": "SaltyNX",
|
||||
"tid": "0000000000534C56",
|
||||
"requires_reboot": true,
|
||||
"version": "2.0.0"
|
||||
"version": "2.1.2"
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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