mirror of
https://github.com/Ultra-NX/UltraNX.git
synced 2026-10-14 07:24:49 +00:00
UltraNX 3.1|R1
This commit is contained in:
parent
a4b56c45d4
commit
af22b662fd
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
|
### 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) - Патчит систему на работу неподписанного софта вместо сигпатчей.
|
* [sys-patch](https://github.com/borntohonk/sys-patch) - Патчит систему на работу неподписанного софта вместо сигпатчей.
|
||||||
* [Mission Control](https://github.com/ndeadly/MissionControl) - Модуль, позволяющий подключать практически любые геймпады к консоли по Bluetooth.
|
* [Mission Control](https://github.com/ndeadly/MissionControl) - Модуль, позволяющий подключать практически любые геймпады к консоли по Bluetooth.
|
||||||
* [sys-con](https://github.com/o0Zz/sys-con) - Модуль, позволяющий подключать практически любые геймпады к консоли по USB.
|
* [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.
|
* [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) - Специальное оверлей-меню для взаимодействия с системой: разгон, управление режимами через ReverseNX, включение читов, прочее. Также позволяет использовать самописные пакеты, например - Ultra Tuner.
|
||||||
- [Horizon OC](https://github.com/Horizon-OC/Horizon-OC) - Оверлей для управления модулем sys-clk.
|
- [Horizon OC](https://github.com/Horizon-OC/Horizon-OC) - Оверлей для управления модулем sys-clk.
|
||||||
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Оверлей позволяющий следить за параметрами консоли в реальном времени. Может выступать в качестве счетчика FPS. Сменить пресет Micro-оверлея можно в Tuner.
|
- [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) - Оверлей для использования читов, включая графические.
|
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - Оверлей для использования читов, включая графические.
|
||||||
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх.
|
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх.
|
||||||
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Оверлей для включения\отключения установленных системных модулей.
|
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Оверлей для включения\отключения установленных системных модулей.
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
|
### 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.
|
* [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.
|
* [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.
|
* [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.
|
* [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.
|
- [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.
|
- [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.
|
- [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.
|
- [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.
|
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Overlay for enabling\disabling installed system modules.
|
||||||
|
|||||||
@ -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
|
# 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
|
# 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:
|
MASTER_WRITE:
|
||||||
# Triple buffer
|
# Triple buffer
|
||||||
-
|
-
|
||||||
type: bytes
|
type: asm_a32
|
||||||
main_offset: 0x2F3CD8
|
main_offset: 0x2F3CD8
|
||||||
value_type: uint32
|
instructions: [
|
||||||
value: 0xE3A01003
|
[mov, r1, 3]
|
||||||
|
]
|
||||||
-
|
-
|
||||||
type: bytes
|
type: asm_a32
|
||||||
main_offset: 0x35C218
|
main_offset: 0x35C218
|
||||||
value_type: uint32
|
instructions: [
|
||||||
value: 0xE3A00003
|
[mov, r0, 3]
|
||||||
|
]
|
||||||
-
|
-
|
||||||
type: bytes
|
type: asm_a32
|
||||||
main_offset: 0x35C2C0
|
main_offset: 0x35C2C0
|
||||||
value_type: uint32
|
instructions: [
|
||||||
value: 0xE3A02003
|
[mov, r2, 3]
|
||||||
|
]
|
||||||
-
|
-
|
||||||
type: bytes
|
type: asm_a32
|
||||||
main_offset: 0x35C2D0
|
main_offset: 0x35C2D0
|
||||||
value_type: uint32
|
instructions: [
|
||||||
value: 0xE3A02003
|
[mov, r2, 3]
|
||||||
# Code Cave, read speed from MAIN + 0x1B1CF00
|
]
|
||||||
# Animation speed
|
# Animation speed
|
||||||
# Jump to MAIN + 0x4EFBE0
|
# Jump to MAIN + 0x4EFBE0
|
||||||
-
|
-
|
||||||
type: bytes
|
type: asm_a32
|
||||||
main_offset: 0x1CE4B4
|
main_offset: 0x1CE4B4
|
||||||
value_type: uint32
|
instructions: [
|
||||||
value: 0xEA0C85C9
|
[bl, _animationSpeed()]
|
||||||
-
|
]
|
||||||
type: bytes
|
|
||||||
main_offset: 0x4EFBE0
|
|
||||||
value_type: uint32
|
|
||||||
value:
|
|
||||||
- 0xE28F0616
|
|
||||||
- 0xE30D1318
|
|
||||||
- 0xE0800001
|
|
||||||
- 0xE3A01802
|
|
||||||
- 0xE0800001
|
|
||||||
- 0xED909A00
|
|
||||||
- 0xEAF37A2E
|
|
||||||
# Movement speed
|
# Movement speed
|
||||||
# Jump to MAIN + 0x4EFBFC
|
# Jump to MAIN + 0x4EFBFC
|
||||||
-
|
-
|
||||||
type: bytes
|
type: asm_a32
|
||||||
main_offset: 0x20B750
|
main_offset: 0x20B750
|
||||||
value_type: uint32
|
instructions: [
|
||||||
value: 0xEA0B9129
|
[bl, _movementSpeed()]
|
||||||
-
|
]
|
||||||
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
|
|
||||||
|
|||||||
@ -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],
|
:goto3, [mov, w8, 0x21a0],
|
||||||
[ret],
|
[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:
|
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
|
# Dynamic speed
|
||||||
# Jump before pushing frame
|
# 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",
|
"name": "SaltyNX",
|
||||||
"tid": "0000000000534C56",
|
"tid": "0000000000534C56",
|
||||||
"requires_reboot": true,
|
"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