Ultra 2.7|R1

This commit is contained in:
redraz 2025-12-02 18:33:48 +03:00
parent ef2146f5c4
commit 2e2398427c
298 changed files with 5827 additions and 1049 deletions

View File

@ -8,9 +8,7 @@
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
### [UltraNX 2.6|R3](https://github.com/Ultra-NX/UltraNX/releases/tag/2.6-R3) Поддерживает все HOS до 20.5.0 включительно
### [UltraNX 2.7|Pre2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-Pre2) Поддерживает все HOS до 21.0.1 включительно. Не полноценный релиз!
### [UltraNX 2.7|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R1) Поддерживает все HOS до 21.0.1 включительно
@ -93,7 +91,7 @@
* [FPSLocker Patches](https://github.com/masagrator/FPSLocker-Warehouse) - Пакет патчей для FPSLocker, позволяет обновить все патчи сразу, вместо скачивания по одному через оверлей FPSLocker'а. В Ультре по умолчанию всегда последние патчи, так что достаточно своевременно обновлять сборку.
* [DVR Patches](https://github.com/exelix11/dvr-patches) - Патчи SysDVR, работают и без системного модуля, активируя фоновую запись в играх, где это изначально запрещено.
* [Mod Alchemist](https://github.com/ppkantorski/Mod-Alchemist) - Пакет для скачивания, установки и управления модами для игр.
* [sys-ftpd](https://github.com/tomvita/sys-ftpd-light) - FTP сервер, работающий на фоне.
* [sys-ftpd](https://github.com/ELY3M/sys-ftpd) - FTP сервер, работающий на фоне.

View File

@ -6,9 +6,7 @@
#
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
### [UltraNX 2.6|R3](https://github.com/Ultra-NX/UltraNX/releases/tag/2.6-R3) Supports all HOS up to and including 20.5.0
### [UltraNX 2.7|Pre2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-Pre2) Supports all HOS up to and including 21.0.1. Not a full-fledged release!
### [UltraNX 2.7|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R1) Supports all HOS up to and including 21.0.1
@ -89,7 +87,7 @@
* [FPSLocker Patches](https://github.com/masagrator/FPSLocker-Warehouse) - The patch package for FPSLocker allows you to update all patches at once, instead of downloading one at a time through the FPSLocker overlay. UltraNX always has the latest patches by default, so it's enough to update the CFW in a timely manner.
* [DVR Patches](https://github.com/exelix11/dvr-patches) - SysDVR patches, work without the system module, activating background recording in games where it is initially prohibited.
* [Mod Alchemist](https://github.com/ppkantorski/Mod-Alchemist) - A package for downloading, installing, and managing mods for games.
* [sys-ftpd](https://github.com/cathery/sys-ftpd) - FTP server running in background.
* [sys-ftpd](https://github.com/ELY3M/sys-ftpd) - FTP server running in background.

View File

@ -1,8 +1,6 @@
# Gori: Cuddly Carnage 1.0.7
# BID: A21FFE97D09DCE4E
unsafeCheck: true
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
@ -24,4 +22,4 @@ ALL_FPS:
value: [0, 0]
-
type: block
what: timing
what: timing

View File

@ -0,0 +1,75 @@
# 無双アビス 1.4.2
# BID: 2D22A87AE49C75AA
DECLARATIONS:
-
type: variable
name: dr_target1
value_type: float
default_value: 50
evaluate: "1.5 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: float
default_value: 40
evaluate: "1.2 * FRAMETIME_TARGET"
MASTER_WRITE:
# REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E
# Use FPS Target instead of vsync value for Dynamic Resolution max delta
-
type: asm_a64
main_offset: 0x6E3B50
instructions: [
[adrp, x1, 0x1021000],
[ldr, s1, [x1, 0xe10]]
]
# Redirect DR Targets
-
type: asm_a64
main_offset: 0x6E3BF4
instructions: [
[adrp, x9, $dr_target1],
[ldr, s1, [x9, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x6E3C04
instructions: [
[adrp, x9, $dr_target2],
[ldr, s1, [x9, $dr_target2]]
]
ALL_FPS:
# REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00
# FPS Lock
-
type: evaluate_write
address: [MAIN, 0x1021E1C]
value_type: uint32
value: "120 / FPS_LOCK_TARGET"
# Prevent from setting it as 0, otherwise game crashes
-
type: evaluate_compare
compare_address: [MAIN, 0x1021E1C]
compare_type: "=="
compare_value_type: uint32
compare_value: 0
address: [MAIN, 0x1021E1C]
value_type: uint32
value: 1
# Others
-
type: evaluate_write
address: [MAIN, 0x1021E10]
value_type: float
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x1021E14]
value_type: uint32
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x1021E18]
value_type: float
value: "FPS_TARGET"

View File

@ -1,8 +1,6 @@
# WRC Generations 1.2.2
# BID: B8BE1CFAE53CAEBE
unsafeCheck: true
ALL_FPS:
# OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30)
-

View File

@ -1,9 +1,7 @@
# Gal*Gun Returns 1.0.4
# ぎゃる☆がん りたーんず 1.0.4
# BID: 7E65E5BC3564BE46
# Buffers are hardcoded into fixed size class, so it's hard to get triple buffer
unsafeCheck: true
ALL_FPS:
# FPS Target + FPS Lock
-

View File

@ -0,0 +1,26 @@
# Borderlands: The Pre-Sequel Ultimate Edition 1.0.1
# BID: 090B1F7F7AF35D00
DECLARATIONS:
-
type: variable
name: dr_frametime_max
value_type: float
default_value: 33.3
evaluate: "0.999 * FRAMETIME_TARGET"
-
type: variable
name: dr_frametime_min
value_type: float
default_value: 29.97
evaluate: "0.8991 * FRAMETIME_TARGET"
MASTER_WRITE:
-
type: asm_a64
main_offset: 0xEA60B8
instructions: [
[adrp, x9, $dr_frametime_max],
[ldr, s11, [x9, $dr_frametime_max]],
[adrp, x9, $dr_frametime_min],
[ldr, s12, [x9, $dr_frametime_min]]
]

View File

@ -1,8 +1,6 @@
# Sniper Elite 4 1.0.3
# BID: 4EEA2970DF38ECE1
unsafeCheck: true
ALL_FPS:
# Dynamic Resolution frame time target
-

View File

@ -0,0 +1,46 @@
# Life is Strange: Before the Storm Remastered 1.0
# BID: 30B812AB1BA3D447
DECLARATIONS:
-
type: variable
name: dr_frametime_max
value_type: float
default_value: 30
evaluate: "0.9 * FRAMETIME_TARGET"
-
type: variable
name: dr_frametime_min
value_type: float
default_value: 25
evaluate: "0.75 * FRAMETIME_TARGET"
-
type: code
name: getDrFrametimeMax
instructions: [
[adrp, x8, $dr_frametime_max],
[ldr, s1, [x8, $dr_frametime_max]],
[ret]
]
-
type: code
name: getDrFrametimeMin
instructions: [
[adrp, x8, $dr_frametime_min],
[ldr, s1, [x8, $dr_frametime_min]],
[ret]
]
MASTER_WRITE:
# REF: 60 2e 40 bd 01 d0 27 1e 00 20 21 1e
-
type: asm_a64
main_offset: 0x14FD210
instructions: [
[bl, _getDrFrametimeMax()]
]
-
type: asm_a64
main_offset: 0x14FD23C
instructions: [
[bl, _getDrFrametimeMin()]
]

View File

@ -0,0 +1,11 @@
# Tomb Raider: Definitive Edition 1.0.1
# BID: 2A4A71E176DAA356
ALL_FPS:
# Dynamic Resolution Frametime Target
# REF: E9 F3 00 B2 A9 40 A8 F2 A9 40 E8 F2
-
type: evaluate_write
address: [MAIN, 0x1C2BB00]
value_type: float
value: FRAMETIME_TARGET

View File

@ -0,0 +1,25 @@
# ソードアート・オンライン フラクチュアード デイドリーム 1.5.2.0
# BID: 2EEE840599DC7021
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8676768, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86B12E0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EB0F88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -1,8 +1,6 @@
# The Elder Scrolls V: Skyrim 1.1.392.3925134
# BID: 4F7995092FAA5DC0
unsafeCheck: true
ALL_FPS:
# Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS)
-

View File

@ -1,8 +1,6 @@
# The Witcher 3: Wild Hund - Complete Edition 4.04b
# ウィッチャー3 ワイルドハント コンプリートエディション 4.04b
# BID: 4BC4A8A814FD46A4
unsafeCheck: true
ALL_FPS:
# DRGameTargetFrameTimeInMs
-

View File

@ -1,8 +1,6 @@
# Zombie Army 4: Dead War 1.1.1
# BID: 12024D08CCFD25EB
unsafeCheck: true
ALL_FPS:
# Dynamic Resolution FPS Target
-

View File

@ -0,0 +1,18 @@
# Fate/Samurai Remnant `JPN` 1.3.2
# BID: 6C46135714ABB870
# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8
MASTER_WRITE:
-
type: asm_a64
main_offset: 0x5DB12C
instructions: [
[mov, w25, 3]
]
ALL_FPS:
# interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72
-
type: evaluate_write
address: [MAIN, 0x3412388]
value_type: int32
value: VSYNC_TARGET

View File

@ -0,0 +1,25 @@
# リマザード:ブロークン ポーセリン 2.0.0
# BID: 5EFAB20F5C1F0F68
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimals
-
type: evaluate_write
address: [MAIN, 0x58210E8, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x584D710, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x4CB8880, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Remothered: Broken Porcelain 修道院:破碎的瓷器 2.0.0
# BID: 5EFAB20F5C1F0F68
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimals
-
type: evaluate_write
address: [MAIN, 0x58210E8, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x584D710, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x4CB8880, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,11 @@
# Atelier Resleriana: The Red Alchemist & the White Guardian 1.4
# BID: 8593E6008F5A883D
ALL_FPS:
# MagicaCloth2.MagicaManager_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x778EF80, 0xB8, 0, 0x10, 0x20, 0x10]
address_unsafe: true
value_type: uint32
value: "FPS_TARGET + 5"

View File

@ -0,0 +1,11 @@
# Atelier Resleriana: The Red Alchemist & the White Guardian 1.3
# BID: F140F141FDC4C331
ALL_FPS:
# MagicaCloth2.MagicaManager_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x7760D60, 0xB8, 0, 0x10, 0x20, 0x10]
address_unsafe: true
value_type: uint32
value: "FPS_TARGET + 5"

View File

@ -0,0 +1,10 @@
# 60 Parsecs! 1.0.10
# BID: 12F93E2DBBCFA54F
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x393D5F8, 0x48]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -0,0 +1,31 @@
# Dusk Diver 酉閃町 -ダスクダイバー ユウセンチョウ- 1.0.6
# BID: FAD1AF4EDC6DB267
ALL_FPS:
# Disable bSmoothFrameRate and bUseFixedFrameRate to untie game speed from framerate and unlock FPS
-
type: write
address: [MAIN, 0x5379338, 0x780]
address_unsafe: true
value_type: uint32
# Default is 0x67, bSmoothFrameRate |= 0x20, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained:
# bAllowMultiThreadedAnimationUpdate |= 4
# bOptimizeAnimBlueprintMemberVariableAccess |= 2
# bCanBlueprintsTickByDefault |= 1
value: 7
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal
-
type: evaluate_write
address: [MAIN, 0x5354210, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x537A880, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -1,11 +1,10 @@
# SONIC FORCES 1.1.0
# SONIC FORCES 1.1.0/1.2.0
# BID: 6D9EA94F8AAC00A8
# Game speed is tied to framerate
unsafeCheck: true
MASTER_WRITE:
# Remove double buffer
## REF: E8 37 00 B9 E8 03 1F 32
-
type: asm_a64
main_offset: 0xAD40FC
@ -13,6 +12,7 @@ MASTER_WRITE:
[mov, w8, 3]
]
# Block switching back to 30 FPS mode on loading screens
## REF: 08 10 40 F9 48 00 00 B4, replace STR
-
type: asm_a64
main_offset: 0x6173B0
@ -21,12 +21,14 @@ MASTER_WRITE:
]
ALL_FPS:
# Switch to 60 FPS Mode
## REF: 7F 7E 07 A9 6A A2 01 A9, ADRP + LDR below
-
type: write
address: [MAIN, 0x1CAC518, 0x28, 0x20, 0x14]
value_type: uint32
value: 1
# FPS target
## REF: 00 1D 40 BD 01 D0 37 1E, ADRP + LDR above it
-
type: evaluate_write
address: [MAIN, 0x1C38C28, 0x1C]

View File

@ -0,0 +1,10 @@
# V-Rally 4 JPN 1.2.0
# BID: EB8A679B5DDD0060
ALL_FPS:
# OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30)
-
type: evaluate_write
address: [MAIN, 0x20A0E44]
value_type: float
value: "FRAMETIME_TARGET - (0.07 * (1000/30))"

View File

@ -2,8 +2,6 @@
# BID: 3D4E3A9252AA6C63
# There are small issues with animations in cutscenes at higher framerates
unsafeCheck: true
ALL_FPS:
# Internal FPS Lock, pointer ref: 00 01 40 F9 E5 03 04 2A
-

View File

@ -1,8 +1,6 @@
# The Witcher 3: Wild Hund - Complete Edition 4.04b
# 《巫師 3狂獵》完全版 4.04b
# BID: 4BC4A8A814FD46A4
unsafeCheck: true
ALL_FPS:
# DRGameTargetFrameTimeInMs
-

View File

@ -0,0 +1,19 @@
# CRYMACHINA 慟哭奇機 / 크라이마키나 1.2.0
# BID: E196E389FD9E0364
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x7538918, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7D33D38, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -1,8 +1,6 @@
# HOT WHEELS UNLEASHED 2 1.0.11
# BID: FE78C7B94C4E791A
unsafeCheck: true
ALL_FPS:
# r.VSync
-
@ -24,4 +22,4 @@ ALL_FPS:
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing
what: timing

View File

@ -0,0 +1,25 @@
# スター・オーバードライブ 1.0.10
# BID: 6D05923E7005E182
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x674C6E8, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-
type: evaluate_write
address: [MAIN, 0x77322F0, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x776C850, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,43 @@
# 하늘의 궤적 the 1st 1.0.6.1
# BID: 6656BA1B5B8AC30A
DECLARATIONS:
# Lock Max Handheld Resolution to 720p instead of 900p
-
type: code
name: adjustDrResToNativeInHH
instructions: [
[cmp, w10, 1280],
[b.le, :goto1],
[adrp, x21, 0x730000],
[ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain
[cbnz, w21, :goto1],
[mov, w10, 1280],
[mov, w8, 720],
:goto1, [stp, w10, w8, [x19, 0x10]],
[ret]
]
MASTER_WRITE:
## REF: 88 C2 88 1A 6A 22 02 29
-
type: asm_a64
main_offset: 0x2CF7B4
instructions: [
[bl, _adjustDrResToNativeInHH()]
]
ALL_FPS:
# Min Delta
## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it
-
type: evaluate_write
address: [MAIN, 0x730850, 0x2C]
value_type: uint32
value: FPS_TARGET
# Dynamic Resolution
## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2)
## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0
-
type: write
address: [MAIN, 0x7303D0]
value_type: float
value: 0.95

View File

@ -0,0 +1,43 @@
# 하늘의 궤적 the 1st 1.0.5
# BID: 8CFF66758D7BD507
DECLARATIONS:
# Lock Max Handheld Resolution to 720p instead of 900p
-
type: code
name: adjustDrResToNativeInHH
instructions: [
[cmp, w9, 1280],
[b.le, :goto1],
[adrp, x21, 0x65F000],
[ldr, w21, [x21, 0x830]], ## REF: nn::oe::GetOperationMode in nnMain
[cbnz, w21, :goto1],
[mov, w9, 1280],
[mov, w8, 720],
:goto1, [stp, w9, w8, [x19, 0x10]],
[ret]
]
MASTER_WRITE:
## REF: 69 22 02 29
-
type: asm_a64
main_offset: 0x2380A4
instructions: [
[bl, _adjustDrResToNativeInHH()]
]
ALL_FPS:
# Min Delta
## REF: 88 01 80 52 C1 03 80 52 28 4D 28 9B 29 00 80 52, first ADRP + ADD below it
-
type: evaluate_write
address: [MAIN, 0x65F860, 0x2C]
value_type: uint32
value: FPS_TARGET
# Dynamic Resolution
## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2)
## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS with 1.0
-
type: write
address: [MAIN, 0x65F378]
value_type: float
value: 0.95

View File

@ -0,0 +1,17 @@
# Bendy and the Dark Revival 1.6.3s
# BID: 2C2D599E55912C6C
ALL_FPS:
# PSH.DynamicResolution.DynamicResolutionController_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x396F660, 0xB8, 0]
address_unsafe: true
value_type: double
value: [FPS_TARGET, FRAMETIME_TARGET]
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x3D42700, 0x48]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -0,0 +1,19 @@
# 셜록 홈즈 어웨이큰드 1.0.1
# BID: A1E1EFBA68B846A9
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7D81968, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x75811D8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Rune Factory: Guardians of Azuma US 1.1.1
# BID: F678FD2BB197125B
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8F68D40, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8FA2470, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7F816E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,12 @@
# Hellpoint 1.0.2.0
# BID: 3776E7BBC7C01E43
ALL_FPS:
# Manager<DynamicResolutionManager>_TypeInfo
# Using different scales than original (0.78, 1.14) because they seem to not be good for targeting 60 FPS
-
type: evaluate_write
address: [MAIN, 0x5357390, 0xB8, 0, 0x20, 0x20]
address_unsafe: true
value_type: float
value: ["0.6 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"]

View File

@ -0,0 +1,10 @@
# Zombie Army 4: Dead War `Asia` 1.1.1
# BID: 12024D08CCFD25EB
ALL_FPS:
# Dynamic Resolution FPS Target
-
type: evaluate_write
address: [MAIN, 0x179EF64]
value_type: float
value: FPS_TARGET

View File

@ -0,0 +1,19 @@
# Caligula Overdose/カリギュラ オーバードーズ 1.01
# BID: A953B35A45BEA33D
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to one decimal
-
type: evaluate_write
address: [MAIN, 0x5CF2530, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x5D170A8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,38 @@
# 鬼滅の刃 ヒノカミ血風譚 1.53
# BID: 14C878ECCA9D7CB5
ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate
-
type: write
address: [MAIN, 0xB314540, 0x7F8]
address_unsafe: true
value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained:
# bAllowMultiThreadedAnimationUpdate |= 4
# bOptimizeAnimBlueprintMemberVariableAccess |= 2
# bCanBlueprintsTickByDefault |= 1
value: 7
# Disable CustomTimeStep
-
type: write
address: [MAIN, 0xB314540, 0x810]
value_type: uint8
value: 0
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0xB314830, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0xAB49110, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,26 @@
# The Beast Inside 1.2.0
# BID: EB58D577539E9151
ALL_FPS:
# Disable bUseFixedFrameRate
-
type: write
address: [MAIN, 0x64AD448, 0x7A4]
address_unsafe: true
value_type: uint32
value: 7
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x64ADD48, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x5CE8100, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,16 @@
# The Elder Scrolls V: Skyrim JPN 1.1.392.3925134
# BID: 4F7995092FAA5DC0
ALL_FPS:
# Dynamic Resolution Frame Time Min = 0.9 * (1000/FPS)
-
type: evaluate_write
address: [MAIN, 0x3356FC8]
value_type: float
value: "0.9 * FRAMETIME_TARGET"
# Dynamic Resolution Frame Time Max = 0.99 * (1000/FPS)
-
type: evaluate_write
address: [MAIN, 0x3356FB0]
value_type: float
value: "0.99 * FRAMETIME_TARGET"

View File

@ -0,0 +1,19 @@
# Storm Lancers 1.0.1.72
# BID: 99519C9259122E4F
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7ED0D60, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x6EB2F28, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,36 @@
# Tennis World Tour 2 1.3.0
# BID: D1B29E1ABDCD955E
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 0.03333333333
evaluate: "1 / FPS_TARGET"
-
type: code
name: tripleBuffer
instructions: [
[mov, w9, 3],
[str, w9, [x8, 0x1A0]],
[mov, w8, w9],
[ret]
]
MASTER_WRITE:
-
type: asm_a64
main_offset: 0x726338
instructions: [
[bl, _tripleBuffer()]
]
# Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00
# REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E
-
type: asm_a64
main_offset: 0x1896448
instructions: [
[adrp, x12, $dr_target],
[ldr, s17, [x12, $dr_target]],
[nop]
]

View File

@ -0,0 +1,20 @@
# Expeditions: A Mudrunner Game 1.19.0.0
# BID: 0F7616E6F5EE08CE
# REF: 01 04 0C 5E 00 10 2E 1E
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 33.333333
evaluate: FRAMETIME_TARGET
MASTER_WRITE:
# Redirect DR frametime target
-
type: asm_a64
main_offset: 0x177D4A4
instructions: [
[adrp, x13, $dr_target],
[ldr, s2, [x13, $dr_target]]
]

View File

@ -0,0 +1,43 @@
# Trails in the Sky 1st Chapter 1.0.6
# BID: 2B18130BD191CAC5
DECLARATIONS:
# Lock Max Handheld Resolution to 720p instead of 900p
-
type: code
name: adjustDrResToNativeInHH
instructions: [
[cmp, w10, 1280],
[b.le, :goto1],
[adrp, x21, 0x732000],
[ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain
[cbnz, w21, :goto1],
[mov, w10, 1280],
[mov, w8, 720],
:goto1, [stp, w10, w8, [x19, 0x10]],
[ret]
]
MASTER_WRITE:
## REF: 88 C2 88 1A 6A 22 02 29
-
type: asm_a64
main_offset: 0x2D07B4
instructions: [
[bl, _adjustDrResToNativeInHH()]
]
ALL_FPS:
# Min Delta
## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it
-
type: evaluate_write
address: [MAIN, 0x732850, 0x2C]
value_type: uint32
value: FPS_TARGET
# Dynamic Resolution
## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2)
## Adding there 0.9 by myself because game seems to have issues with reaching 60 FPS without it
-
type: write
address: [MAIN, 0x7323D0]
value_type: float
value: 0.95

View File

@ -0,0 +1,42 @@
# 魂斗羅 ローグ コープス 1.3.0
# BID: 4CCD2F6D331DD104
DECLARATIONS:
-
type: variable
name: dr_factor
value_type: float
default_value: 1000000
evaluate: "30000000 / FPS_TARGET"
-
type: code
name: fpsTarget
instructions: [
[adrp, x8, 0xd94000],
[ldr, w8, [x8, 0x628]],
[ret]
]
MASTER_WRITE:
# Read FPS target from code cave
-
type: asm_a64
main_offset: 0x2004
instructions: [
[bl, _fpsTarget()]
]
# Redirect DR time factor
-
type: asm_a64
main_offset: 0x2140
instructions: [
[adrp, x8, $dr_factor],
[ldr, s9, [x8, $dr_factor]]
]
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0xD94628]
value_type: uint32
value: FPS_TARGET

View File

@ -0,0 +1,19 @@
# Moto Racer 4 1.0.3
# BID: 31F61EC3A4FEFDF7
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x52ADD30, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x5B3BAB8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Five Nights at Freddy's: Help Wanted 2 0.3
# BID: DE7B50B9FEF89856
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x686AE48, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x7036778, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x705C0F0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Five Nights at Freddy's: Help Wanted 2 0.1-0.2
# BID: F7EB23F0D8E5A933
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x53F45F8, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x5BC3628, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x5BF1308, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,21 @@
# スノーランナー 1.0.42
# BID: 8C7A99CBD1AEA208
# Just search for 0x42055555 in case of REF not working
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 33.333333
evaluate: FRAMETIME_TARGET
MASTER_WRITE:
# Redirect DR frametime target
## REF: 01 04 0C 5E 00 10 2E 1E
-
type: asm_a64
main_offset: 0x1944154
instructions: [
[adrp, x10, $dr_target],
[ldr, s2, [x10, $dr_target]]
]

View File

@ -0,0 +1,31 @@
# DRAGON BALL: Sparking! ZERO 2.0.73
# BID: 7B53433FA04477FC
ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate
-
type: write
address: [MAIN, 0x9A2EA20, 0x9C4]
address_unsafe: true
value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained:
# bAllowMultiThreadedAnimationUpdate |= 4
# bOptimizeAnimBlueprintMemberVariableAccess |= 2
# bCanBlueprintsTickByDefault |= 1
value: 7
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x9A2FFF0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x9238B68, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -1,7 +1,5 @@
# The Great Ace Attorney Chronicles 1.0.0
# BID: 761CD556AB357C87
unsafeCheck: true
# BID: 1DA748FC9499882F
ALL_FPS:
# FPS lock

View File

@ -0,0 +1,25 @@
# Platform 8 1.0.4
# BID: 42A0B64E45AD9ABA
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x7910200, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7949910, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x69296E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# DreamWorks All-Star Kart Racing 0.1.0.11740
# BID: 3C3A2E68DBD1BBEC
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x7F0F6B8, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# r.VSync
-
type: write
address: [MAIN, 0x7740598, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7F3D368, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,18 @@
# Hitman Absolution 1.2.2RC1
# BID: 96B7F9BD973D298E
ALL_FPS:
# IdleFPS/ResponsiveFPS
# REF: 68 22 40 39 1F 01 00 71 A2 02 94 1A, first ADRP + ADD, add to it 0x38
-
type: evaluate_write
address: [MAIN, 0x2E7DA10, 0x70]
value_type: uint32
value: [FPS_TARGET, FPS_TARGET]
# DynamicResolutionScaling/FPSTarget
# REF: E0 1E 40 BD 01 10 2E 1E 00 20 21 1E, any result, first ADRP+ADD above that
-
type: evaluate_write
address: [MAIN, 0x2B7B328, 0x2C]
value_type: float
value: FPS_TARGET

View File

@ -0,0 +1,19 @@
# 真・女神轉生Ⅴ HK 1.0.2
# BID: 019FBFE7738EA314
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-
type: evaluate_write
address: [MAIN, 0x75F81D0, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7621D70, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -1,8 +1,6 @@
# The Witcher 3: Wild Hund - Complete Edition 4.04b
# The Witcher 3: Wild Hunt - Complete Edition 4.04b
# BID: D27FD8A515077F34
unsafeCheck: true
ALL_FPS:
# DRGameTargetFrameTimeInMs
-

View File

@ -0,0 +1,11 @@
# Wobbly Life 1.0.0.3
# BID: B174F363C2823CBE
ALL_FPS:
# DynamicResolutionManager_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x84A6F58, 0xB8, 0]
address_unsafe: true
value_type: double
value: [FPS_TARGET, FRAMETIME_TARGET]

View File

@ -1,4 +1,4 @@
# Dusk Diver 2 1.0.1
# Dusk Diver 2 `US` 1.0.1
# BID: 217C9ECF258C0312
ALL_FPS:
@ -29,4 +29,3 @@ ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Rune Factory: Guardians of Azuma 1.1.1
# BID: F678FD2BB197125B
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8F68D40, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8FA2470, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7F816E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Nickelodeon Kart Racers 3: Slime Speedway 0.3.2.15969
# BID: EF2694EA89E001DB
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x7F32158, 0]
value_type: float
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7764D78, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7F5FD48, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -1,8 +1,6 @@
# Wolfenstein: Youngblood 1.5
# BID: 8B40EBBA7244C94A
unsafeCheck: true
ALL_FPS:
# rs_force460
-
@ -24,7 +22,7 @@ ALL_FPS:
value: "(30 / FPS_TARGET) * 0.984"
# com_adaptiveTickMaxHz
-
type: write
type: evaluate_write
address: [MAIN, 0x85F74E0]
value_type: int32
value: FPS_LOCK_TARGET

View File

@ -0,0 +1,25 @@
# The Exit 8 1.0.9
# BID: 5346BDF1EEC2BA4C
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x7614450, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x764DB60, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x66356E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,74 @@
# 테일즈 오브 엑실리아 리마스터 1.0.1
# BID: D64B8283BD5CEA63
DECLARATIONS:
-
type: variable
name: patch_running
value_type: uint8
default_value: 0
-
type: code
name: applyCustomSpeed
instructions: [
[adrp, x4, $patch_running],
[ldrb, w4, [x4, $patch_running]],
[cbnz, w4, :goto1],
[stp, s0, s1, [x8, 0x6C]],
:goto1, [ret]
]
MASTER_WRITE:
# Block updating game speed
## REF: 00 85 0d 2d
-
type: asm_a64
main_offset: 0x244A5F4
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x28EBB1C
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x2B26CC4
instructions: [
[bl, _applyCustomSpeed()]
]
ALL_FPS:
# Game Speed
## REF: Global_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x82C50C0, 0xB8, 0x6C]
value_type: float
value: [FPS_TARGET, "60 / FPS_TARGET"]
# Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS
# UnityEngine.Time::maximumDeltaTime
-
type: write
address: [MAIN, 0x9FCFBF8, 0x100]
value_type: float
value: [0.066666666, 0.066666666]
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x9FCFBF8, 0x48]
value_type: float
value: "1 / FPS_TARGET"
# UnityEngine.Application::targetFrameRate
-
type: evaluate_write
address: [MAIN, 0x84E1EB0]
value_type: uint32
value: FPS_TARGET
-
type: compare
compare_address: [VARIABLE, patch_running]
compare_type: "=="
compare_value: 0
address: [VARIABLE, patch_running]
value: 1

View File

@ -1,8 +1,6 @@
# The Witcher 3: Wild Hund - Complete Edition 4.04b
# The Witcher 3: Wild Hunt - Complete Edition 4.04b
# BID: 4BC4A8A814FD46A4
unsafeCheck: true
ALL_FPS:
# DRGameTargetFrameTimeInMs
-

View File

@ -1,7 +1,5 @@
# WRC10 1.1.0
# BID: 69CACEEC5F01C418
unsafeCheck: true
# BID: 69CACEEC5F01C41B
ALL_FPS:
# OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30)

View File

@ -0,0 +1,25 @@
# ウィッチャー3 ワイルドハント 4.04b
# BID: D27FD8A515077F34
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,8 +1,6 @@
# DOOM 1.4
# DOOM `West` 1.4
# BID: 2847991952B3D7AB
unsafeCheck: true
ALL_FPS:
# rs_460Threshold (default is 0.285)
-

View File

@ -0,0 +1,36 @@
# 모두의 골프 월드 / 全民高爾夫 環球之旅 1.1.3
# BID: A179DD4F4BFB3A04
# 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: DynamicResolution::Compute()
-
type: asm_a64
main_offset: 0x3925918
instructions: [
[adrp, x10, $dr_frametime_max],
[ldr, d1, [x10, $dr_frametime_max]],
[nop]
]
-
type: asm_a64
main_offset: 0x39259EC
instructions: [
[adrp, x10, $dr_frametime_min],
[ldr, d1, [x10, $dr_frametime_min]],
[nop],
[nop]
]

View File

@ -0,0 +1,35 @@
# AO Tennis 2 1.7.0
# BID: 01EB7A6DE827BFD9
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 0.03333333333
evaluate: "1 / FPS_TARGET"
-
type: code
name: tripleBuffer
instructions: [
[mov, w9, 3],
[str, w9, [x21, 0x1A0]],
[mov, w8, w9],
[ret]
]
MASTER_WRITE:
-
type: asm_a64
main_offset: 0x3DBAFC
instructions: [
[bl, _tripleBuffer()]
]
# Redirect Dynamic Resolution target
# REF: EC AF 40 B9 EB 07 9F 1A, first adrp + ldr below
-
type: asm_a64
main_offset: 0x131922C
instructions: [
[adrp, x12, $dr_target],
[ldr, s18, [x12, $dr_target]]
]

View File

@ -1,8 +1,6 @@
# Star Overdrive 1.0.10
# BID: 6D05923E7005E182
unsafeCheck: true
ALL_FPS:
# r.VSync
-

View File

@ -0,0 +1,16 @@
# Hob: The Definitive Edition 1.1.3
# BID: 4E7978E35F9D7490
ALL_FPS:
# r_dynamicResGPUTimeDrop
-
type: evaluate_write
address: [MAIN, 0x2F8A248]
value_type: float
value: ["0.96 * FRAMETIME_TARGET", "0.96 * FRAMETIME_TARGET"]
# r_dynamicResGPUTimeRaise
-
type: evaluate_write
address: [MAIN, 0x2F8A268]
value_type: float
value: ["0.84 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"]

View File

@ -0,0 +1,38 @@
# 귀멸의 칼날 히노카미 혈풍담 1.53
# BID: 14C878ECCA9D7CB5
ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate
-
type: write
address: [MAIN, 0xB314540, 0x7F8]
address_unsafe: true
value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained:
# bAllowMultiThreadedAnimationUpdate |= 4
# bOptimizeAnimBlueprintMemberVariableAccess |= 2
# bCanBlueprintsTickByDefault |= 1
value: 7
# Disable CustomTimeStep
-
type: write
address: [MAIN, 0xB314540, 0x810]
value_type: uint8
value: 0
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0xB314830, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0xAB49110, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,43 @@
# 空の軌跡 the 1st 1.0.6
# BID: 4583D73E326FFE7B
DECLARATIONS:
# Lock Max Handheld Resolution to 720p instead of 900p
-
type: code
name: adjustDrResToNativeInHH
instructions: [
[cmp, w10, 1280],
[b.le, :goto1],
[adrp, x21, 0x730000],
[ldr, w21, [x21, 0x820]], ## REF: nn::oe::GetOperationMode in nnMain
[cbnz, w21, :goto1],
[mov, w10, 1280],
[mov, w8, 720],
:goto1, [stp, w10, w8, [x19, 0x10]],
[ret]
]
MASTER_WRITE:
## REF: 6A 22 02 29, second result
-
type: asm_a64
main_offset: 0x2CF6E4
instructions: [
[bl, _adjustDrResToNativeInHH()]
]
ALL_FPS:
# Min Delta
## REF: C1 03 80 52 28 4D 28 9B, first ADRP + ADD below it
-
type: evaluate_write
address: [MAIN, 0x730850, 0x2C]
value_type: uint32
value: FPS_TARGET
# Dynamic Resolution
## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2)
## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS without it
-
type: write
address: [MAIN, 0x7303D0]
value_type: float
value: 0.95

View File

@ -35,9 +35,9 @@ ALL_FPS:
value: FPS_TARGET
# Dynamic Resolution
## REF: First function in .init_array section, ADRP + ADD + 0x220 (default float: 2)
## Adding there 0.9 by myself because game seems to have issues with reaching 60 FPS without it
## Adding there 0.95 by myself because game seems to have issues with reaching 60 FPS at 1.0
-
type: write
address: [MAIN, 0x72F3D0]
value_type: float
value: 0.95
value: 0.95

View File

@ -2,91 +2,6 @@
# BID: A6CE40DC3AEDB1BE
# Thanks to Hazerou for finding interval offsets
MASTER_WRITE:
# Remove double buffer
## REF: 08 07 40 B9 49 00 80 52
-
type: asm_a64
main_offset: 0x747C04
instructions: [
[mov, w9, 3]
]
# Fix helper functions to not corrupt stack
## REF: 42 00 80 52 BF FF 30 A9
-
type: asm_a64
main_offset: 0x747CE0
instructions: [
[mov, w2, 3]
]
## REF: 08 65 45 F9 42 00 80 52, first result
-
type: asm_a64
main_offset: 0x75ADFC
instructions: [
[mov, w2, 3]
]
## REF: 09 C0 9D 52 09 01 A0 72 E1 03 00 91 F6 03 00 91, beginning of function
-
type: asm_a64
main_offset: 0x676AC8
instructions: [
[sub, sp, sp, 0x50],
[stp, x22, x21, [sp, 0x20]],
[stp, x20, x19, [sp, 0x30]],
[stp, x29, x30, [sp, 0x40]],
[add, x29, sp, 0x40]
]
## REF: 00 61 00 91 42 00 80 52
-
type: asm_a64
main_offset: 0x676B1C
instructions: [
[mov, w2, 3]
]
## REF: End of function from code above, first ldp x29 x30
-
type: asm_a64
main_offset: 0x676B40
instructions: [
[ldp, x29, x30, [sp, 0x40]],
[ldp, x20, x19, [sp, 0x30]],
[ldp, x22, x21, [sp, 0x20]],
[add, sp, sp, 0x50]
]
## REF: 42 00 80 52 F6 03 00 91
-
type: asm_a64
main_offset: 0x74C280
instructions: [
[mov, w2, 3]
]
## REF: 42 00 80 52 16 69 69 F8, second result
-
type: asm_a64
main_offset: 0x75AE68
instructions: [
[mov, w2, 3]
]
## REF: 42 00 80 52 08 05 40 F9
-
type: asm_a64
main_offset: 0x7C2E64
instructions: [
[mov, w2, 3]
]
# Block transparency in some 2D elements to avoid issue with flickering at triple buffer
## REF: 49 91 89 B9 4A 41 48 B9
-
type: asm_a64
main_offset: 0x6A757C
instructions: [
[mov, x9, 0x102],
[ldr, w10, [x10, 0x840]],
[add, x20, x8, 0x820],
[lsl, x12, x10, 3],
[str, x9, [x20]]
]
ALL_FPS:
# Interval (Setting it to 0 unlocks framerate and sets dynamic game speed)
## REF: 17 6C 90 52 57 01 A0 72 08 7C 01 A9, first STR above it

View File

@ -2,81 +2,6 @@
# BID: D9BA7DB72FFAFECD
# Thanks to Hazerou for finding interval offsets
MASTER_WRITE:
# Remove double buffer
-
type: asm_a64
main_offset: 0x745E94
instructions: [
[mov, w9, 3]
]
# Fix helper functions to not corrupt stack
-
type: asm_a64
main_offset: 0x745F70
instructions: [
[mov, w2, 3]
]
-
type: asm_a64
main_offset: 0x75908C
instructions: [
[mov, w2, 3]
]
-
type: asm_a64
main_offset: 0x675198
instructions: [
[sub, sp, sp, 0x50],
[stp, x22, x21, [sp, 0x20]],
[stp, x20, x19, [sp, 0x30]],
[stp, x29, x30, [sp, 0x40]],
[add, x29, sp, 0x40]
]
-
type: asm_a64
main_offset: 0x6751EC
instructions: [
[mov, w2, 3]
]
-
type: asm_a64
main_offset: 0x675210
instructions: [
[ldp, x29, x30, [sp, 0x40]],
[ldp, x20, x19, [sp, 0x30]],
[ldp, x22, x21, [sp, 0x20]],
[add, sp, sp, 0x50]
]
-
type: asm_a64
main_offset: 0x74A510
instructions: [
[mov, w2, 3]
]
-
type: asm_a64
main_offset: 0x7590F8
instructions: [
[mov, w2, 3]
]
-
type: asm_a64
main_offset: 0x7BDCD4
instructions: [
[mov, w2, 3]
]
# Block transparency in some 2D elements to avoid issue with flickering at triple buffer
-
type: asm_a64
main_offset: 0x6A58C8
instructions: [
[mov, x9, 0x102],
[ldr, w10, [x10, 0x840]],
[add, x20, x8, 0x820],
[lsl, x12, x10, 3],
[str, x9, [x20]]
]
ALL_FPS:
# Interval (Setting it to 0 unlocks framerate and sets dynamic game speed)
-

View File

@ -0,0 +1,25 @@
# Disney Epic Mickey: Rebrushed 1.0.4
# BID: D334BC060F1FA3AE
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x6E35A58, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x6E636F8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x6666668, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,13 @@
# EA SPORTS FC 26 1.81.fdc
# BID: EBFF3A6C8EA30490
ALL_FPS:
# Internal FPS Lock
-
type: evaluate_write
address: [MAIN, 0xC63C6F8, 8]
value_type: double
value: FPS_TARGET
-
type: block
what: timing

View File

@ -21,9 +21,8 @@ DECLARATIONS:
type: code
name: designalCutscene
instructions: [
[mov, w1, wzr],
[adrp, x2, $cutscene_flag],
[str, w1, [x2, $cutscene_flag]],
[adrp, x1, $cutscene_flag],
[str, wzr, [x1, $cutscene_flag]],
[ret]
]
MASTER_WRITE:
@ -54,3 +53,4 @@ ALL_FPS:
compare_address: [VARIABLE, cutscene_flag]
value_type: refresh_rate
value: 30

View File

@ -0,0 +1,55 @@
# トラインぜんまい仕掛けの陰謀Trine 5: A Clockwork Conspiracy 1.0.5
# BID: 8322528255D2CC63
# To update dynamic resolution offsets look at fb::renderer::ResolutionScaler::update
DECLARATIONS:
-
type: variable
name: dr_target_max
value_type: double
default_value: 34
evaluate: "1.02 * FRAMETIME_TARGET"
-
type: variable
name: dr_target_min
value_type: double
default_value: 32
evaluate: "0.96 * FRAMETIME_TARGET"
MASTER_WRITE:
# Change double buffer to triple buffer
-
type: asm_a64
main_offset: 0x138A024
instructions: [
[mov, w8, 3]
]
# Allow changing dynamic resolution timings
# Max
-
type: asm_a64
main_offset: 0x25992CC
instructions: [
[adrp, x8, $dr_target_max],
[adrp, x22, 0x5ddf000],
[ldr, d2, [x8, $dr_target_max]]
]
# Min - changed address to MAIN + 0x7D05208
-
type: asm_a64
main_offset: 0x2599344
instructions: [
[adrp, x10, $dr_target_min],
[ldr, d5, [x10, $dr_target_min]]
]
-
type: asm_a64
main_offset: 0x2599380
instructions: [
[adrp, x10, $dr_target_min]
]
-
type: asm_a64
main_offset: 0x2599390
instructions: [
[ldr, d6, [x10, $dr_target_min]]
]

View File

@ -0,0 +1,10 @@
# Little Noah: Scion of Paradise 1.41
# BID: 8CCC67A5A75CB8E5
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x3D2E180, 0x48]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -0,0 +1,43 @@
# ドラゴンクエストXI 過ぎ去りし時を求めて S 1.0.4
# BID: 325E49E94A030B7E
ALL_FPS:
# r.DynamicResolution.MaxTimeBudget = 0.99 * (1000/FPS)
-
type: evaluate_write
address: [MAIN, 0x84EBDD8, 0]
value_type: float
value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"]
# r.DynamicResolution.MinTimeBudget = 0.9 * (1000/FPS)
-
type: evaluate_write
address: [MAIN, 0x84EBDF0, 0]
value_type: float
value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"]
# r.DynamicResolution.HeavyTimeBudget = 1.05 * (1000/FPS)
-
type: evaluate_write
address: [MAIN, 0x84EBE08, 0]
value_type: float
value: ["1.05 * FRAMETIME_TARGET", "1.05 * FRAMETIME_TARGET"]
# r.DynamicResolution.LightTimeBudget = 0.9 * (1000/FPS)
-
type: evaluate_write
address: [MAIN, 0x84EBE20, 0]
value_type: float
value: ["0.9 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8500C48, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7878500, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,40 @@
# Trine 4: The Nightmare Prince 1.0.3
# BID: B70F06EAC87FA2AF
# REF: 00 00 00 00 00 00 41 40, its xref
DECLARATIONS:
-
type: variable
name: dr_target_max
value_type: double
default_value: 34
evaluate: "1.02 * FRAMETIME_TARGET"
-
type: variable
name: dr_target_min
value_type: double
default_value: 33
evaluate: "0.99 * FRAMETIME_TARGET"
MASTER_WRITE:
# Allow changing dynamic resolution timings
# Max
-
type: asm_a64
main_offset: 0x16DC3B8
instructions: [
[adrp, x8, $dr_target_max],
[ldr, d2, [x8, $dr_target_max]]
]
# Min
-
type: asm_a64
main_offset: 0x16DC404
instructions: [
[adrp, x10, $dr_target_min]
]
-
type: asm_a64
main_offset: 0x16DC418
instructions: [
[ldr, d4, [x10, $dr_target_min]]
]

View File

@ -0,0 +1,75 @@
# テイルズ オブ エクシリア リマスター 1.0.1
# BID: 4779B3A56B655418
DECLARATIONS:
-
type: variable
name: patch_running
value_type: uint8
default_value: 0
-
type: code
name: applyCustomSpeed
instructions: [
[adrp, x4, $patch_running],
[ldrb, w4, [x4, $patch_running]],
[cbnz, w4, :goto1],
[stp, s0, s1, [x8, 0x6C]],
:goto1, [ret]
]
MASTER_WRITE:
# Block updating game speed
## REF: 00 85 0d 2d
-
type: asm_a64
main_offset: 0x244A5F4
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x28EB8FC
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x2B26AA4
instructions: [
[bl, _applyCustomSpeed()]
]
ALL_FPS:
# Game Speed
## REF: Global_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x82C50C0, 0xB8, 0x6C]
value_type: float
value: [FPS_TARGET, "60 / FPS_TARGET"]
# Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS
# UnityEngine.Time::maximumDeltaTime
-
type: write
address: [MAIN, 0x9FCFBF8, 0x100]
value_type: float
value: [0.066666666, 0.066666666]
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x9FCFBF8, 0x48]
value_type: float
value: "1 / FPS_TARGET"
# UnityEngine.Application::targetFrameRate
-
type: evaluate_write
address: [MAIN, 0x84E1EA8]
value_type: uint32
value: FPS_TARGET
-
type: compare
compare_address: [VARIABLE, patch_running]
compare_type: "=="
compare_value: 0
address: [VARIABLE, patch_running]
value: 1

View File

@ -0,0 +1,25 @@
# Upin & Ipin Universe 1.0.2
# BID: 301E4A1FB0BA1575
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x9302098, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x933D5C0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x831EEE8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Upin & Ipin Universe 1.0.1
# BID: A15393F630A9767F
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x986C098, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x98A8790, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x8886110, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Funko Fusion 3.4.1
# BID: 4CD22960CFB56AB4
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x7C58A68, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-
type: evaluate_write
address: [MAIN, 0x8C34078, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8C61F60, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,19 @@
# Unbox: Newbie's Adventure 1.0.3
# BID: 83A6B710A3F3F4F9
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x585F3A8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x4FBBEA0, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,10 @@
# World's End Club 1.0.6
# BID: F00EFE6846627B4A
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x6AC31C0, 0x48]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -0,0 +1,32 @@
# Made in Abyss: Binary Star Falling into Darkness 1.0.3
# BID: DFC7E8979528DE44
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x657D2C8, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x6D2E330, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# r.DynamicRes.TargetedGPUHeadRoomPercentage
# Because game is using 5.0 while default is 10.0 and with their value reaching target FPS above 30 is hard
-
type: write
address: [MAIN, 0x6D2E348, 0]
value_type: float
value: [10.0, 10.0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x6D58E68, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -1,8 +1,6 @@
# V-Rally 4 1.2.0
# BID: EB8A679B5DDD0060
unsafeCheck: true
ALL_FPS:
# OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30)
-

View File

@ -0,0 +1,10 @@
# Tamagotchi Plaza 1.0.6
# BID: E73AB32BD1B16098
ALL_FPS:
# UnityEngine.Rendering.OnDemandRendering_TypeInfo
-
type: write
address: [MAIN, 0x68B81F8, 0xB8, 0]
value_type: int32
value: -1

View File

@ -0,0 +1,10 @@
# パックマンワールド2 リ・パック 1.0.3
# BID: B70D6561B718C8E0
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x87DE838, 0x58]
value_type: uint32
value: "2352000 * FPS_TARGET"

View File

@ -0,0 +1,19 @@
# Little Nightmares III 1.0.4
# BID: 911284C45A26DD34
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7CB0E48, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x74BC210, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,19 @@
# Little Nightmares III 1.0.3
# BID: F3FFA17B5E56809F
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7CADE48, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x74B9210, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,27 @@
# ウムランギジェネレーション 1.6.6.0
# BID: 372AB37327DB2C31
DECLARATIONS:
-
type: variable
name: fps_lock
value_type: float
default_value: 0.03333333333
evaluate: "1 / FPS_TARGET"
MASTER_WRITE:
# Read FPS Lock from MAIN+0x49FCFF0
## REF: 81 1a 40 bd 02 10 2e 1e
## REF: FPSTarget.<>d__6::MoveNext()
-
type: asm_a64
main_offset: 0x2DF1E60
instructions: [
[adrp, x8, $fps_lock],
[ldr, s1, [x8, $fps_lock]],
[nop]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Formula Legends 1.0.5
# BID: 2735E564A9BD3DA3
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x73BDEE8, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x83A1F68, 0]
value_type: float
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x83DD780, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Formula Legends 1.0.7
# BID: 349E9751D50B3B88
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x839AF68, 0]
value_type: float
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x73B6EE8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x83D6780, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Formula Legends 1.0.6
# BID: 84C1B1AE29550FC8
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x73B5EE8, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8399F68, 0]
value_type: float
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x83D5780, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Formula Legends 1.0.8
# BID: C26EE97D7ECDE83B
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x83C8F68, 0]
value_type: float
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x73E4EE8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8404780, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

Some files were not shown because too many files have changed in this diff Show More