Compare commits

..

No commits in common. "main" and "3.1-RC1" have entirely different histories.

106 changed files with 73 additions and 1599 deletions

View File

@ -8,7 +8,7 @@
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
### [UltraNX 3.1|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Поддерживает все HOS до 23.0.1 включительно
### [UltraNX 3.1|RC1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Поддерживает все HOS до 23.0.0 включительно
@ -54,11 +54,10 @@
* [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/masagrator/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх.
- [FPSLocker](https://github.com/ppkantorski/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) - Оверлей для включения\отключения установленных системных модулей.
@ -69,8 +68,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://github.com/NaGaa95/ppsspp-nx) - Эмулятор PSP.
* [DuckStation](https://github.com/shooterspps/duckstation) - Эмулятор PS1.
* [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.
* [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) - Программа для сброса контроллера батареи. Не используйте просто так!
@ -83,7 +82,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/Lightos1/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) + [NX-FanControl Overlay Fork](https://github.com/ppkantorski/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) - Оверлей-музыкальный плеер, работает в фоне.
@ -103,7 +102,6 @@
[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)
@ -111,9 +109,10 @@
## Благодарности
* Souldbminer
* ppkantorski
* duckbill
* B3711
* ppkantorski
* Meha
* duckbill
* snupt
#### А так же - отдельная благодарность администрации и участникам Ultra Group

View File

@ -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|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Supports all HOS up to and including 23.0.1
### [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
@ -50,11 +50,10 @@
* [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/masagrator/FPSLocker) - An overlay that allows you to unlock 60 FPS in games.
- [FPSLocker](https://github.com/ppkantorski/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.
@ -65,8 +64,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://github.com/NaGaa95/ppsspp-nx) - PSP emulator.
* [DuckStation](https://github.com/shooterspps/duckstation) - PS1 emulator.
* [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.
* [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!
@ -79,7 +78,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/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.
* [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.
* [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.
@ -98,16 +97,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
* ppkantorski
* duckbill
* B3711
* ppkantorski
* Meha
* duckbill
* snupt
#### And also - a special thanks to the administration and members of Ultra Group

View File

@ -1,18 +0,0 @@
# 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"

View File

@ -1,28 +0,0 @@
# 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]
]

View File

@ -1,25 +0,0 @@
# ウィッチャー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

View File

@ -1,52 +0,0 @@
# 《心之城堡:重述》 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

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,25 +0,0 @@
# 《巫師 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

View File

@ -1,11 +0,0 @@
# 영웅전설 시작의 궤적 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

View File

@ -1,20 +0,0 @@
# 空の軌跡 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

View File

@ -1,19 +0,0 @@
# 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

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,24 +0,0 @@
# 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

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,25 +0,0 @@
# ウィッチャー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

View File

@ -1,19 +0,0 @@
# 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

View File

@ -1,19 +0,0 @@
# 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

View File

@ -1,83 +0,0 @@
# 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

View File

@ -1,60 +0,0 @@
# 三國志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

View File

@ -1,60 +0,0 @@
# 三國志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

View File

@ -1,18 +0,0 @@
# 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"

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,37 +0,0 @@
# みんなの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]
]

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,20 +0,0 @@
# 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

View File

@ -1,21 +0,0 @@
# 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]
]

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,32 +0,0 @@
# 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

View File

@ -1,10 +0,0 @@
# 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"

View File

@ -1,10 +0,0 @@
# 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"

View File

@ -1,25 +0,0 @@
# ウィッチャー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

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,52 +0,0 @@
# 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

View File

@ -1,18 +0,0 @@
# 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"

View File

@ -1,25 +0,0 @@
# 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

View File

@ -2,70 +2,75 @@
# 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: asm_a32
type: bytes
main_offset: 0x2F3CD8
instructions: [
[mov, r1, 3]
]
value_type: uint32
value: 0xE3A01003
-
type: asm_a32
type: bytes
main_offset: 0x35C218
instructions: [
[mov, r0, 3]
]
value_type: uint32
value: 0xE3A00003
-
type: asm_a32
type: bytes
main_offset: 0x35C2C0
instructions: [
[mov, r2, 3]
]
value_type: uint32
value: 0xE3A02003
-
type: asm_a32
type: bytes
main_offset: 0x35C2D0
instructions: [
[mov, r2, 3]
]
value_type: uint32
value: 0xE3A02003
# Code Cave, read speed from MAIN + 0x1B1CF00
# Animation speed
# Jump to MAIN + 0x4EFBE0
-
type: asm_a32
type: bytes
main_offset: 0x1CE4B4
instructions: [
[bl, _animationSpeed()]
]
value_type: uint32
value: 0xEA0C85C9
-
type: bytes
main_offset: 0x4EFBE0
value_type: uint32
value:
- 0xE28F0616
- 0xE30D1318
- 0xE0800001
- 0xE3A01802
- 0xE0800001
- 0xED909A00
- 0xEAF37A2E
# Movement speed
# Jump to MAIN + 0x4EFBFC
-
type: asm_a32
type: bytes
main_offset: 0x20B750
instructions: [
[bl, _movementSpeed()]
]
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

View File

@ -1,11 +0,0 @@
# 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"

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,58 +0,0 @@
# 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

View File

@ -1,13 +0,0 @@
# 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

View File

@ -1,11 +0,0 @@
# 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"

View File

@ -1,60 +0,0 @@
# 三國志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

View File

@ -1,60 +0,0 @@
# 三國志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

View File

@ -1,75 +0,0 @@
# 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()]
]

View File

@ -1,10 +0,0 @@
# 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

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,10 +0,0 @@
# 영웅전설 여의 궤적 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

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,25 +0,0 @@
# 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

View File

@ -1,20 +0,0 @@
# 하늘의 궤적 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

View File

@ -81,77 +81,7 @@ 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
-

View File

@ -1,37 +0,0 @@
# 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]
]

View File

@ -1,17 +0,0 @@
# 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"

View File

@ -1,12 +0,0 @@
# 이스 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

View File

@ -1,33 +0,0 @@
# 진・여신전생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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -2,5 +2,5 @@
"name": "SaltyNX",
"tid": "0000000000534C56",
"requires_reboot": true,
"version": "2.1.2"
"version": "2.0.0"
}

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