UltraNX 3.1|R1

This commit is contained in:
redraz 2026-10-09 17:19:53 +03:00
parent a4b56c45d4
commit af22b662fd
105 changed files with 1586 additions and 59 deletions

View File

@ -8,7 +8,7 @@
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
### [UltraNX 3.1|RC1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Поддерживает все HOS до 23.0.0 включительно
### [UltraNX 3.1|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Поддерживает все HOS до 23.0.1 включительно
@ -54,10 +54,11 @@
* [sys-patch](https://github.com/borntohonk/sys-patch) - Патчит систему на работу неподписанного софта вместо сигпатчей.
* [Mission Control](https://github.com/ndeadly/MissionControl) - Модуль, позволяющий подключать практически любые геймпады к консоли по Bluetooth.
* [sys-con](https://github.com/o0Zz/sys-con) - Модуль, позволяющий подключать практически любые геймпады к консоли по USB.
* [disable remap dialog](https://github.com/ndeadly/disable_remap_dialog) - Модуль, убирающий предупреждение о переназначенных кнопках при каждом заходе в игры.
* [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) - Специальное оверлей-меню для взаимодействия с системой: разгон, управление режимами через ReverseNX, включение читов, прочее. Также позволяет использовать самописные пакеты, например - Ultra Tuner.
- [Horizon OC](https://github.com/Horizon-OC/Horizon-OC) - Оверлей для управления модулем sys-clk.
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Оверлей позволяющий следить за параметрами консоли в реальном времени. Может выступать в качестве счетчика FPS. Сменить пресет Micro-оверлея можно в Tuner.
- [FPSLocker](https://github.com/ppkantorski/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх.
- [FPSLocker](https://github.com/masagrator/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх.
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - Оверлей для использования читов, включая графические.
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх.
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Оверлей для включения\отключения установленных системных модулей.

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|RC1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Supports all HOS up to and including 23.0.0
### [UltraNX 3.1|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/3.1-R1) Supports all HOS up to and including 23.0.1
@ -50,10 +50,11 @@
* [sys-patch](https://github.com/borntohonk/sys-patch) - Patches the system to run unsigned software instead of sigpatches.
* [Mission Control](https://github.com/ndeadly/MissionControl) - A module that allows you to connect almost any gamepads to the console via bluetooth.
* [sys-con](https://github.com/o0Zz/sys-con) - A module that allows you to connect almost any gamepads to the console via USB.
* [disable remap dialog](https://github.com/ndeadly/disable_remap_dialog) - A module that removes the warning about reconfigured buttons every time you enter the game.
* [Ultrahand Overlay](https://github.com/ppkantorski/Ultrahand-Overlay) - Special overlay-menu for interacting with the system: overclocking, controlling modes via ReverseNX, enabling cheats, etc. Also allows to use your own packages, for example, Ultra Tuner.
- [Horizon OC](https://github.com/Horizon-OC/Horizon-OC) - Overlay for controlling sys-clk module.
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Overlay that allows you to monitor console parameters in real time. It can act as an FPS counter. You change preset of Micro-overlay appearance in Tuner.
- [FPSLocker](https://github.com/ppkantorski/FPSLocker) - An overlay that allows you to unlock 60 FPS in games.
- [FPSLocker](https://github.com/masagrator/FPSLocker) - An overlay that allows you to unlock 60 FPS in games.
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - An overlay for using cheats.
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - An overlay for switching a running game to a handheld\dock mode, which changes the graphics and resolution settings in games.
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Overlay for enabling\disabling installed system modules.

View File

@ -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"

View File

@ -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]
]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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]
]

View File

@ -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

View File

@ -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

View File

@ -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]
]

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -2,75 +2,70 @@
# BID: 33463E11899166BB
# What is still not adjusted: movement speed in cutscenes, 2D animations speed (it includes UI and 2D effects on 3D objects), none of them uses 1/30 nor 1/60 float
DECLARATIONS:
-
type: variable
name: gameSpeed
value_type: float
default_value: 0.033333333
evaluate: "1 / FPS_TARGET"
-
type: code
name: animationSpeed
instructions: [
[movw, r0, $gameSpeed],
[movt, r0, $gameSpeed],
[vldr, s18, [r0]],
[bx, lr]
]
-
type: code
name: movementSpeed
instructions: [
[movw, r0, $gameSpeed],
[movt, r0, $gameSpeed],
[vldr, s2, [r0]],
[bx, lr]
]
MASTER_WRITE:
# Triple buffer
-
type: bytes
type: asm_a32
main_offset: 0x2F3CD8
value_type: uint32
value: 0xE3A01003
instructions: [
[mov, r1, 3]
]
-
type: bytes
type: asm_a32
main_offset: 0x35C218
value_type: uint32
value: 0xE3A00003
instructions: [
[mov, r0, 3]
]
-
type: bytes
type: asm_a32
main_offset: 0x35C2C0
value_type: uint32
value: 0xE3A02003
instructions: [
[mov, r2, 3]
]
-
type: bytes
type: asm_a32
main_offset: 0x35C2D0
value_type: uint32
value: 0xE3A02003
# Code Cave, read speed from MAIN + 0x1B1CF00
instructions: [
[mov, r2, 3]
]
# Animation speed
# Jump to MAIN + 0x4EFBE0
-
type: bytes
type: asm_a32
main_offset: 0x1CE4B4
value_type: uint32
value: 0xEA0C85C9
-
type: bytes
main_offset: 0x4EFBE0
value_type: uint32
value:
- 0xE28F0616
- 0xE30D1318
- 0xE0800001
- 0xE3A01802
- 0xE0800001
- 0xED909A00
- 0xEAF37A2E
instructions: [
[bl, _animationSpeed()]
]
# Movement speed
# Jump to MAIN + 0x4EFBFC
-
type: bytes
type: asm_a32
main_offset: 0x20B750
value_type: uint32
value: 0xEA0B9129
-
type: bytes
main_offset: 0x4EFBFC
value_type: uint32
value:
- 0xE28F0616
- 0xE30D62FC
- 0xE0800006
- 0xE3A06802
- 0xE0800006
- 0xED901A00
- 0xEAF46ECE
-
type: bytes
main_offset: 0x1B1CF00
value_type: float
value: 0.0333333333
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x1B1CF00]
value_type: float
value: 1 / FPS_TARGET
instructions: [
[bl, _movementSpeed()]
]

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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()]
]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -81,7 +81,77 @@ DECLARATIONS:
:goto3, [mov, w8, 0x21a0],
[ret],
]
-
type: code
name: effectSpeed
instructions: [
[ldr, s0, [x20, 4]],
[fmov, s1, 30.0],
[fmul, s0, s0, s1],
[str, s0, [x27, 856]],
[ret]
]
-
type: code
name: menuWaitFrames
instructions: [
[adrp, x0, $game_speed],
[ldr, s0, [x0, $game_speed]],
[fmov, s2, 30.0],
[fmul, s0, s0, s2],
[ucvtf, s1, w8],
[fdiv, s1, s1, s0],
[fmov, s2, 0.5],
[fadd, s1, s1, s2],
[fcvtzu, w8, s1],
[mov, w0, wzr],
[ret]
]
MASTER_WRITE:
# Quest log (quest title, "Received", quest completed): menu sequence "wait" step counts frames, scale wait length by 1 / (frame time * 30)
# GfMenuObjQuestLog sequence wait, start of wait branch (ldr w8,[x19,#392]; str w8,[x19,#948]; orr w8,wzr,#1; mov w0,wzr; strb w8,[x19,#944])
# Title sequence pushes wait 20 -> fade in -> wait 119 -> fade out
# REF: 68 DA 43 F9 08 05 00 91 68 DA 03 F9 F3 03 00 32, patch at REF+0x248
-
type: asm_a64
main_offset: 0x46E1D4
instructions: [
[ldr, w8, [x19, 392]],
[bl, _menuWaitFrames()],
[str, w8, [x19, 948]],
[mov, w8, 1],
[strb, w8, [x19, 944]]
]
# Quest "Received" / quest completed / task sequences (second sequence of GfMenuObjQuestLog, pushes wait 55, 75, 45, 54...)
# Same wait code, other template instance (ldr w8,[x19,#264]; str w8,[x19,#644]; orr w8,wzr,#1; mov w0,wzr; strb w8,[x19,#640])
# REF: 68 DA 43 F9 08 05 00 91 68 DA 03 F9 F3 03 00 32, patch at REF+0x174
-
type: asm_a64
main_offset: 0x46E100
instructions: [
[ldr, w8, [x19, 264]],
[bl, _menuWaitFrames()],
[str, w8, [x19, 644]],
[mov, w8, 1],
[strb, w8, [x19, 640]]
]
# Effects speed (aura, fire etc.): game feeds effect system with layer speed (1.0) per frame, scale it by frame time * 30
# REF: 88 0A 40 B9 68 5B 03 B9 (ldr w8,[x20,#8]; str w8,[x27,#856]), patch at REF
-
type: asm_a64
main_offset: 0x17794C
instructions: [
[bl, _effectSpeed()],
[nop]
]
# QTE rings: speed factor already includes frame time * 30 and menu multiplies it again by frame time, force factor to 1.0
# REF: A0 06 40 BD 01 D0 27 1E 08 08 21 1E, patch at REF+8 (fmul s8,s0,s1 -> fmov s8,#1.0)
-
type: asm_a64
main_offset: 0x1D0C4
instructions: [
[fmov, s8, 1.0]
]
# Dynamic speed
# Jump before pushing frame
-

View File

@ -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]
]

View File

@ -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"

View File

@ -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

View File

@ -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.

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.0.0"
"version": "2.1.2"
}

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