mirror of
https://github.com/Ultra-NX/UltraNX.git
synced 2026-04-28 04:53:21 +00:00
Ultra 2.7|R2
This commit is contained in:
parent
164babb735
commit
a7853bf3ac
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
|
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
|
||||||
|
|
||||||
### [UltraNX 2.7|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R1) Поддерживает все HOS до 21.0.1 включительно
|
### [UltraNX 2.7|R2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R2) Поддерживает все HOS до 21.1.0 включительно (21.1.0 в Safe Mode)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
|
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
|
||||||
|
|
||||||
### [UltraNX 2.7|R1](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R1) Supports all HOS up to and including 21.0.1
|
### [UltraNX 2.7|R2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R2) Supports all HOS up to and including 21.1.0 (21.1.0 in Safe Mode)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,16 @@
|
|||||||
|
# Lumo 2 1.0.0.0
|
||||||
|
# BID: 5C2942CCDF0AA6EA
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x6BB0EE8, 0]
|
||||||
|
value_type: uint32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x7BC68D0, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
# Beholder 2 1.0.3
|
||||||
|
# BID: 5D3FE9C0FAA44B4C
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# UnityEngine.Time::fixedDeltaTime
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x4275238, 0x48]
|
||||||
|
value_type: float
|
||||||
|
value: "1 / FPS_TARGET"
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# PROGRESS ORDERS 1.0.3
|
||||||
|
# BID: 33E7D684796F363B
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x7B26958, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x8B1E280, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# 옥토패스 트래블러 0 1.0.2
|
||||||
|
# BID: 6070FC72448EE560
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x6C5C6E8, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x7C7E8E0, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# Combat Forces 1.0.0
|
||||||
|
# BID: 81C9C793B5370E9B
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x604AC78, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x6843A78, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
# Anime vs Evil: Apocalypse 1.0
|
||||||
|
# BID: D2EADA78AA71283E
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.DynamicRes.FrameTimeBudget
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x8DA64D0, 0]
|
||||||
|
value_type: float
|
||||||
|
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x7DE4978, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x8DE1840, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# World At War: Cobra 1.0.0
|
||||||
|
# BID: 7DE262BD1732DBFB
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x604AC78, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x6843A78, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
# King's Bounty II 1.7
|
||||||
|
# BID: 5EAF1BB0E2B89AF4
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.DynamicRes.FrameTimeBudget
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x93CF440, 0]
|
||||||
|
value_type: float
|
||||||
|
value: ["TruncDec(FRAMETIME_TARGET, 2", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x8874BA0, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x93FB7B0, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -5,7 +5,7 @@ ALL_FPS:
|
|||||||
# DynamicResolutionManager_TypeInfo
|
# DynamicResolutionManager_TypeInfo
|
||||||
-
|
-
|
||||||
type: evaluate_write
|
type: evaluate_write
|
||||||
address: [MAIN, 0x84A6F58, 0xB8, 0]
|
address: [MAIN, 0x84A6F58, 0xB8, 8]
|
||||||
address_unsafe: true
|
address_unsafe: true
|
||||||
value_type: double
|
value_type: double
|
||||||
value: [FPS_TARGET, FRAMETIME_TARGET]
|
value: [FPS_TARGET, FRAMETIME_TARGET]
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
# Wasteland 2: Director's Cut 1.0.1
|
||||||
|
# BID: 77009C1234634A4E
|
||||||
|
|
||||||
|
DECLARATIONS:
|
||||||
|
# Dynamic resolution is botched because it relies on whole frame rendering loop time,
|
||||||
|
# which means we cannot set min to 60 FPS because otherwise it will never get back to higher resolutions
|
||||||
|
-
|
||||||
|
type: variable
|
||||||
|
name: dr_fps_min
|
||||||
|
value_type: float
|
||||||
|
default_value: 20
|
||||||
|
evaluate: "0.9 * FPS_TARGET"
|
||||||
|
-
|
||||||
|
type: variable
|
||||||
|
name: dr_fps_max
|
||||||
|
value_type: float
|
||||||
|
default_value: 33
|
||||||
|
evaluate: "FPS_TARGET"
|
||||||
|
-
|
||||||
|
type: code
|
||||||
|
name: getDrFpsTargetMin
|
||||||
|
instructions: [
|
||||||
|
[adrp, x20, $dr_fps_min],
|
||||||
|
[ldr, s1, [x20, $dr_fps_min]],
|
||||||
|
[ret]
|
||||||
|
]
|
||||||
|
MASTER_WRITE:
|
||||||
|
-
|
||||||
|
type: asm_a64
|
||||||
|
main_offset: 0x36EE98
|
||||||
|
instructions: [
|
||||||
|
[bl, _getDrFpsTargetMin()]
|
||||||
|
]
|
||||||
|
-
|
||||||
|
type: asm_a64
|
||||||
|
main_offset: 0x36EEF4
|
||||||
|
instructions: [
|
||||||
|
[adrp, x8, $dr_fps_max],
|
||||||
|
[ldr, s1, [x8, $dr_fps_max]]
|
||||||
|
]
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
# American Arcadia 1.0.3
|
||||||
|
# BID: 2CE51030AF9800A5
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.DynamicRes.FrameTimeBudget (default is 34.5)
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x76908F0, 0]
|
||||||
|
value_type: float
|
||||||
|
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x66B5390, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x76BE650, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# Octopath Traveler 0 1.0.2
|
||||||
|
# BID: FEABC8D141EECCA5
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x6C5A6E8, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x7C7C8E0, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# VARIOUS DAYLIFE 1.0.1
|
||||||
|
# BID: A2DDF741D0E37D15
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x60D56A0, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x68986B0, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
# Wizard of Legend 2 1.1.0b
|
||||||
|
# BID: F8FA82D6A1BFE328
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.DynamicRes.FrameTimeBudget
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x85D8B28, 0]
|
||||||
|
value_type: float
|
||||||
|
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x75EE990, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x86132B8, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
# Super Street: Racer 1.0.1
|
||||||
|
# BID: 8E82D24A9B7504FB
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.DynamicRes.FrameTimeBudget
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x6B6E560, 0]
|
||||||
|
value_type: float
|
||||||
|
value: ["TruncDec(FRAMETIME_TARGET, 2", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x632F270, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x6B930B8, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
# Nice Day for Fishing 1.0.7
|
||||||
|
# BID: 1A371F609F4B6172
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# UnityEngine.Time::fixedDeltaTime
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x4D2C6C0, 0x48]
|
||||||
|
value_type: float
|
||||||
|
value: "1 / FPS_TARGET"
|
||||||
@ -5,7 +5,7 @@ ALL_FPS:
|
|||||||
# DynamicResolutionManager_TypeInfo
|
# DynamicResolutionManager_TypeInfo
|
||||||
-
|
-
|
||||||
type: evaluate_write
|
type: evaluate_write
|
||||||
address: [MAIN, 0x84A6F58, 0xB8, 0]
|
address: [MAIN, 0x84A6F58, 0xB8, 8]
|
||||||
address_unsafe: true
|
address_unsafe: true
|
||||||
value_type: double
|
value_type: double
|
||||||
value: [FPS_TARGET, FRAMETIME_TARGET]
|
value: [FPS_TARGET, FRAMETIME_TARGET]
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
# MudRunner - American Wilds Edition 4.5
|
||||||
|
# BID: 028C5AB881F17582
|
||||||
|
|
||||||
|
DECLARATIONS:
|
||||||
|
-
|
||||||
|
type: variable
|
||||||
|
name: dr_gpu_target_max
|
||||||
|
value_type: float
|
||||||
|
default_value: 21.5
|
||||||
|
evaluate: 0.645 * FRAMETIME_TARGET
|
||||||
|
-
|
||||||
|
type: variable
|
||||||
|
name: dr_gpu_target_min
|
||||||
|
value_type: float
|
||||||
|
default_value: 19.5
|
||||||
|
evaluate: (0.645 * FRAMETIME_TARGET) - 2
|
||||||
|
MASTER_WRITE:
|
||||||
|
# Redirect DR frametime target
|
||||||
|
-
|
||||||
|
type: asm_a64
|
||||||
|
main_offset: 0xA30A0
|
||||||
|
instructions: [
|
||||||
|
[adrp, x9, $dr_gpu_target_max],
|
||||||
|
[ldr, s1, [x9, $dr_gpu_target_max]]
|
||||||
|
]
|
||||||
|
-
|
||||||
|
type: asm_a64
|
||||||
|
main_offset: 0xA30D8
|
||||||
|
instructions: [
|
||||||
|
[adrp, x9, $dr_gpu_target_min],
|
||||||
|
[ldr, s1, [x9, $dr_gpu_target_min]]
|
||||||
|
]
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
# Hannah 1.0.3
|
||||||
|
# BID: 07E20F126ABEFF78
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x60CB978, 0]
|
||||||
|
value_type: uint32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x70C3140, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
# Fruitbus 1.0.2
|
||||||
|
# BID: 2E049E21624484CF
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# UnityEngine.Time::fixedDeltaTime
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x9A7CBF8, 0x48]
|
||||||
|
value_type: float
|
||||||
|
value: "1 / FPS_TARGET"
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Risen 1.0.1
|
||||||
|
# BID: 94EA2A7C7EE32EEF
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# Dynamic Resolution factors
|
||||||
|
# REF: g_GetModuleAdmin<eCGfxAdmin>(void)::s_pAdmin + 0x610
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x41FDEA0, 0x610]
|
||||||
|
value_type: double
|
||||||
|
value: ["5.2 * (FPS_TARGET / 30)", "1.3 * (FPS_TARGET / 30)"]
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
# INAZUMA ELEVEN: Victory Road 1.4.0
|
||||||
|
# BID: 062189E9CF83BA5D
|
||||||
|
|
||||||
|
DECLARATIONS:
|
||||||
|
-
|
||||||
|
type: variable
|
||||||
|
name: fps_target
|
||||||
|
value_type: float
|
||||||
|
default_value: 30
|
||||||
|
evaluate: FPS_TARGET
|
||||||
|
MASTER_WRITE:
|
||||||
|
# Dynamic Resolution FPS Target
|
||||||
|
## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv
|
||||||
|
-
|
||||||
|
type: asm_a64
|
||||||
|
main_offset: 0xC44848
|
||||||
|
instructions: [
|
||||||
|
[adrp, x9, $fps_target],
|
||||||
|
[ldr, s1, [x9, $fps_target]]
|
||||||
|
]
|
||||||
|
ALL_FPS:
|
||||||
|
# Disable FPS Lock
|
||||||
|
## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x374CC29]
|
||||||
|
value_type: uint8
|
||||||
|
value: 0
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# World At War: Normandy 1.0.0
|
||||||
|
# BID: 6114E040846B8E3D
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.VSync
|
||||||
|
-
|
||||||
|
type: write
|
||||||
|
address: [MAIN, 0x604AC78, 0]
|
||||||
|
value_type: int32
|
||||||
|
value: [0, 0]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x6843A78, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
# Beholder 3 1.0.1
|
||||||
|
# BID: A3416631954C56C8
|
||||||
|
|
||||||
|
DECLARATIONS:
|
||||||
|
# Changed math because frametime peaks at 60 FPS
|
||||||
|
-
|
||||||
|
type: variable
|
||||||
|
name: fps_target
|
||||||
|
value_type: uint32
|
||||||
|
default_value: 30
|
||||||
|
evaluate: FPS_TARGET - 5
|
||||||
|
-
|
||||||
|
type: variable
|
||||||
|
name: fps_target_max
|
||||||
|
value_type: uint32
|
||||||
|
default_value: 40
|
||||||
|
evaluate: FPS_TARGET - 1
|
||||||
|
-
|
||||||
|
type: code
|
||||||
|
name: getFpsTarget
|
||||||
|
instructions: [
|
||||||
|
[adrp, x9, $fps_target],
|
||||||
|
[ldr, w9, [x9, $fps_target]],
|
||||||
|
[ret]
|
||||||
|
]
|
||||||
|
-
|
||||||
|
type: code
|
||||||
|
name: getFpsTargetMax
|
||||||
|
instructions: [
|
||||||
|
[adrp, x9, $fps_target_max],
|
||||||
|
[ldr, w9, [x9, $fps_target_max]],
|
||||||
|
[ret]
|
||||||
|
]
|
||||||
|
MASTER_WRITE:
|
||||||
|
# DynamicResolutionURP::Update(), offsets 0x30 and 0x34
|
||||||
|
-
|
||||||
|
type: asm_a64
|
||||||
|
main_offset: 0x2E765DC
|
||||||
|
instructions: [
|
||||||
|
[bl, _getFpsTarget()]
|
||||||
|
]
|
||||||
|
-
|
||||||
|
type: asm_a64
|
||||||
|
main_offset: 0x2E765F8
|
||||||
|
instructions: [
|
||||||
|
[bl, _getFpsTargetMax()]
|
||||||
|
]
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# The Pathless 1.0
|
||||||
|
# BID: 54E89AF3414E549A
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.DynamicRes.FrameTimeBudget
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x74CC188, 0]
|
||||||
|
value_type: float
|
||||||
|
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x74FADF8, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
|
-
|
||||||
|
type: block
|
||||||
|
what: timing
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
# Caravan SandWitch 1.0.8
|
||||||
|
# BID: 2079893CE8402E04
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# r.DynamicRes.FrameTimeBudget
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x7A50210, 0]
|
||||||
|
value_type: float
|
||||||
|
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||||
|
# t.MaxFPS
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x7A89920, 0]
|
||||||
|
value_type: float
|
||||||
|
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
# Card-en-Ciel 1.6.0
|
||||||
|
# BID: 9558FFD5CABC4612
|
||||||
|
# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# Min delta FPS Target
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x2289610, 0x50]
|
||||||
|
value_type: uint32
|
||||||
|
value: FPS_TARGET
|
||||||
|
# Internal FPS Lock
|
||||||
|
# REF: look at nn::os::SleepThread() called in nnMain()
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x2289610, 0x60]
|
||||||
|
value_type: float
|
||||||
|
value: 1 / FPS_LOCK_TARGET
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
# There Is No Light 1.0.3
|
||||||
|
# BID: 76EB8E0320472553
|
||||||
|
|
||||||
|
ALL_FPS:
|
||||||
|
# UnityEngine.Time::fixedDeltaTime
|
||||||
|
-
|
||||||
|
type: evaluate_write
|
||||||
|
address: [MAIN, 0x5E6BCA0, 0x48]
|
||||||
|
value_type: float
|
||||||
|
value: "1 / FPS_TARGET"
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Anbieter",
|
"VENDOR": "Anbieter",
|
||||||
"MODEL": "Modell",
|
"MODEL": "Modell",
|
||||||
"STORAGE": "Speicherplatz",
|
"STORAGE": "Speicherplatz",
|
||||||
"NOTICE": "Hinweis",
|
"INCOMPATIBLE_WARNING": "Inkompatibel mit AMS v1.10+",
|
||||||
"UTILIZES": "Verwendet",
|
|
||||||
"SYSTEM_RAM": "System-RAM",
|
"SYSTEM_RAM": "System-RAM",
|
||||||
"FREE": "frei",
|
"FREE": "frei",
|
||||||
"OVERLAY_MEMORY": "Overlay-Speicher",
|
"OVERLAY_MEMORY": "Overlay-Speicher",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Vendor",
|
"VENDOR": "Vendor",
|
||||||
"MODEL": "Model",
|
"MODEL": "Model",
|
||||||
"STORAGE": "Storage",
|
"STORAGE": "Storage",
|
||||||
"NOTICE": "Notice",
|
"INCOMPATIBLE_WARNING": "Incompatible on AMS v1.10+",
|
||||||
"UTILIZES": "Utilizes",
|
|
||||||
"SYSTEM_RAM": "System RAM",
|
"SYSTEM_RAM": "System RAM",
|
||||||
"FREE": "free",
|
"FREE": "free",
|
||||||
"OVERLAY_MEMORY": "Overlay Memory",
|
"OVERLAY_MEMORY": "Overlay Memory",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Fabricante",
|
"VENDOR": "Fabricante",
|
||||||
"MODEL": "Modelo",
|
"MODEL": "Modelo",
|
||||||
"STORAGE": "Almacenamiento",
|
"STORAGE": "Almacenamiento",
|
||||||
"NOTICE": "Aviso",
|
"INCOMPATIBLE_WARNING": "Incompatible con AMS v1.10+",
|
||||||
"UTILIZES": "Utiliza",
|
|
||||||
"SYSTEM_RAM": "RAM del sistema",
|
"SYSTEM_RAM": "RAM del sistema",
|
||||||
"FREE": "libre",
|
"FREE": "libre",
|
||||||
"OVERLAY_MEMORY": "Memoria superposición",
|
"OVERLAY_MEMORY": "Memoria superposición",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Fabricant",
|
"VENDOR": "Fabricant",
|
||||||
"MODEL": "Modèle",
|
"MODEL": "Modèle",
|
||||||
"STORAGE": "Stockage",
|
"STORAGE": "Stockage",
|
||||||
"NOTICE": "Note",
|
"INCOMPATIBLE_WARNING": "Incompatible avec AMS v1.10+",
|
||||||
"UTILIZES": "Utilise",
|
|
||||||
"SYSTEM_RAM": "RAM système",
|
"SYSTEM_RAM": "RAM système",
|
||||||
"FREE": "libre",
|
"FREE": "libre",
|
||||||
"OVERLAY_MEMORY": "Mémoire superposition",
|
"OVERLAY_MEMORY": "Mémoire superposition",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Fornitore",
|
"VENDOR": "Fornitore",
|
||||||
"MODEL": "Modello",
|
"MODEL": "Modello",
|
||||||
"STORAGE": "Archiviazione",
|
"STORAGE": "Archiviazione",
|
||||||
"NOTICE": "Nota",
|
"INCOMPATIBLE_WARNING": "Incompatibile con AMS v1.10+",
|
||||||
"UTILIZES": "Utilizza",
|
|
||||||
"SYSTEM_RAM": "RAM sistema",
|
"SYSTEM_RAM": "RAM sistema",
|
||||||
"FREE": "libero",
|
"FREE": "libero",
|
||||||
"OVERLAY_MEMORY": "Memoria sovrapposizione",
|
"OVERLAY_MEMORY": "Memoria sovrapposizione",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "ベンダー",
|
"VENDOR": "ベンダー",
|
||||||
"MODEL": "モデル",
|
"MODEL": "モデル",
|
||||||
"STORAGE": "ストレージ",
|
"STORAGE": "ストレージ",
|
||||||
"NOTICE": "通知",
|
"INCOMPATIBLE_WARNING": "AMS v1.10+ と互換性がありません",
|
||||||
"UTILIZES": "使用",
|
|
||||||
"SYSTEM_RAM": "システムRAM",
|
"SYSTEM_RAM": "システムRAM",
|
||||||
"FREE": "空き",
|
"FREE": "空き",
|
||||||
"OVERLAY_MEMORY": "オーバーレイメモリ",
|
"OVERLAY_MEMORY": "オーバーレイメモリ",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "제조사",
|
"VENDOR": "제조사",
|
||||||
"MODEL": "모델",
|
"MODEL": "모델",
|
||||||
"STORAGE": "저장소",
|
"STORAGE": "저장소",
|
||||||
"NOTICE": "공지",
|
"INCOMPATIBLE_WARNING": "AMS v1.10+과 호환되지 않습니다",
|
||||||
"UTILIZES": "사용",
|
|
||||||
"SYSTEM_RAM": "시스템 RAM",
|
"SYSTEM_RAM": "시스템 RAM",
|
||||||
"FREE": "여유",
|
"FREE": "여유",
|
||||||
"OVERLAY_MEMORY": "오버레이 메모리",
|
"OVERLAY_MEMORY": "오버레이 메모리",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Fabrikant",
|
"VENDOR": "Fabrikant",
|
||||||
"MODEL": "Model",
|
"MODEL": "Model",
|
||||||
"STORAGE": "Opslag",
|
"STORAGE": "Opslag",
|
||||||
"NOTICE": "Mededeling",
|
"INCOMPATIBLE_WARNING": "Incompatibel met AMS v1.10+",
|
||||||
"UTILIZES": "Gebruikt",
|
|
||||||
"SYSTEM_RAM": "Systeem-RAM",
|
"SYSTEM_RAM": "Systeem-RAM",
|
||||||
"FREE": "vrij",
|
"FREE": "vrij",
|
||||||
"OVERLAY_MEMORY": "Overlay-geheugen",
|
"OVERLAY_MEMORY": "Overlay-geheugen",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Producent",
|
"VENDOR": "Producent",
|
||||||
"MODEL": "Model",
|
"MODEL": "Model",
|
||||||
"STORAGE": "Pamięć masowa",
|
"STORAGE": "Pamięć masowa",
|
||||||
"NOTICE": "Uwaga",
|
"INCOMPATIBLE_WARNING": "Niezgodny z AMS v1.10+",
|
||||||
"UTILIZES": "Używa",
|
|
||||||
"SYSTEM_RAM": "RAM systemu",
|
"SYSTEM_RAM": "RAM systemu",
|
||||||
"FREE": "wolne",
|
"FREE": "wolne",
|
||||||
"OVERLAY_MEMORY": "Pamięć nakładki",
|
"OVERLAY_MEMORY": "Pamięć nakładki",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Fabricante",
|
"VENDOR": "Fabricante",
|
||||||
"MODEL": "Modelo",
|
"MODEL": "Modelo",
|
||||||
"STORAGE": "Armazenamento",
|
"STORAGE": "Armazenamento",
|
||||||
"NOTICE": "Aviso",
|
"INCOMPATIBLE_WARNING": "Incompatível com AMS v1.10+",
|
||||||
"UTILIZES": "Utiliza",
|
|
||||||
"SYSTEM_RAM": "RAM do sistema",
|
"SYSTEM_RAM": "RAM do sistema",
|
||||||
"FREE": "livre",
|
"FREE": "livre",
|
||||||
"OVERLAY_MEMORY": "Memória de sobreposição",
|
"OVERLAY_MEMORY": "Memória de sobreposição",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Производитель",
|
"VENDOR": "Производитель",
|
||||||
"MODEL": "Модель",
|
"MODEL": "Модель",
|
||||||
"STORAGE": "Хранилище",
|
"STORAGE": "Хранилище",
|
||||||
"NOTICE": "Уведомление",
|
"INCOMPATIBLE_WARNING": "Несовместимо с AMS v1.10+",
|
||||||
"UTILIZES": "Использует",
|
|
||||||
"SYSTEM_RAM": "ОЗУ системы",
|
"SYSTEM_RAM": "ОЗУ системы",
|
||||||
"FREE": "свободно",
|
"FREE": "свободно",
|
||||||
"OVERLAY_MEMORY": "Память оверлея",
|
"OVERLAY_MEMORY": "Память оверлея",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "Виробник",
|
"VENDOR": "Виробник",
|
||||||
"MODEL": "Модель",
|
"MODEL": "Модель",
|
||||||
"STORAGE": "Сховище",
|
"STORAGE": "Сховище",
|
||||||
"NOTICE": "Повідомлення",
|
"INCOMPATIBLE_WARNING": "Несумісно з AMS v1.10+",
|
||||||
"UTILIZES": "Використовує",
|
|
||||||
"SYSTEM_RAM": "ОЗУ системи",
|
"SYSTEM_RAM": "ОЗУ системи",
|
||||||
"FREE": "вільно",
|
"FREE": "вільно",
|
||||||
"OVERLAY_MEMORY": "Пам’ять оверлея",
|
"OVERLAY_MEMORY": "Пам’ять оверлея",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "厂商",
|
"VENDOR": "厂商",
|
||||||
"MODEL": "型号",
|
"MODEL": "型号",
|
||||||
"STORAGE": "存储",
|
"STORAGE": "存储",
|
||||||
"NOTICE": "提示",
|
"INCOMPATIBLE_WARNING": "与 AMS v1.10+ 不兼容",
|
||||||
"UTILIZES": "占用",
|
|
||||||
"SYSTEM_RAM": "系统内存",
|
"SYSTEM_RAM": "系统内存",
|
||||||
"FREE": "剩余",
|
"FREE": "剩余",
|
||||||
"OVERLAY_MEMORY": "插件内存",
|
"OVERLAY_MEMORY": "插件内存",
|
||||||
|
|||||||
@ -75,8 +75,7 @@
|
|||||||
"VENDOR": "廠商",
|
"VENDOR": "廠商",
|
||||||
"MODEL": "型號",
|
"MODEL": "型號",
|
||||||
"STORAGE": "儲存空間",
|
"STORAGE": "儲存空間",
|
||||||
"NOTICE": "提示",
|
"INCOMPATIBLE_WARNING": "與 AMS v1.10+ 不相容",
|
||||||
"UTILIZES": "占用",
|
|
||||||
"SYSTEM_RAM": "系統記憶體",
|
"SYSTEM_RAM": "系統記憶體",
|
||||||
"FREE": "剩餘",
|
"FREE": "剩餘",
|
||||||
"OVERLAY_MEMORY": "外掛記憶體",
|
"OVERLAY_MEMORY": "外掛記憶體",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -75,6 +75,10 @@ del '/SaltySD/plugins/NX-FPS.elf'
|
|||||||
del '/SaltySD/plugins/ReverseNX-RT.elf'
|
del '/SaltySD/plugins/ReverseNX-RT.elf'
|
||||||
|
|
||||||
|
|
||||||
|
del '/tegraexplorer/scripts/DowngradeFix.te'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
del '/switch/kefir-updater/'
|
del '/switch/kefir-updater/'
|
||||||
del '/switch/mhz.nro'
|
del '/switch/mhz.nro'
|
||||||
del '/switch/RaytracingNX.nro'
|
del '/switch/RaytracingNX.nro'
|
||||||
|
|||||||
Binary file not shown.
@ -1,109 +0,0 @@
|
|||||||
#REQUIRE VER 4.0.0
|
|
||||||
#REQUIRE MINERVA
|
|
||||||
#REQUIRE KEYS
|
|
||||||
#REQUIRE SD
|
|
||||||
#Script_by_CostelaBR
|
|
||||||
|
|
||||||
p = println
|
|
||||||
fatal = {
|
|
||||||
color(0xFF0000)
|
|
||||||
p("\n[FATAL]", fatalMsg)
|
|
||||||
pause()
|
|
||||||
exit()
|
|
||||||
}
|
|
||||||
|
|
||||||
wait = {
|
|
||||||
t = timer()
|
|
||||||
while (timer() < (t + tw)) {
|
|
||||||
print("Wait for ", ((t + tw - timer()) / 1000), " seconds \r")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
downgradeFix = {
|
|
||||||
color(0x00FF00)
|
|
||||||
p("Starting Downgrade Fix...")
|
|
||||||
color(0xFFFFFF)
|
|
||||||
|
|
||||||
p("Mounting SYSTEM partition...")
|
|
||||||
if (mount("SYSTEM")) {
|
|
||||||
fatal(fatalMsg = "Failed to mount SYSTEM partition!")
|
|
||||||
}
|
|
||||||
|
|
||||||
targetFile = "bis:/save/8000000000000073"
|
|
||||||
if (!fsexists(targetFile)) {
|
|
||||||
color(0xFFFF00)
|
|
||||||
p("File 8000000000000073 not found in SYSTEM partition.")
|
|
||||||
p("No action needed.")
|
|
||||||
color(0xFFFFFF)
|
|
||||||
pause()
|
|
||||||
exit()
|
|
||||||
}
|
|
||||||
|
|
||||||
color(0xFF0000)
|
|
||||||
p("Deleting 8000000000000073 from SYSTEM partition...")
|
|
||||||
color(0xFFFFFF)
|
|
||||||
|
|
||||||
if (delfile(targetFile)) {
|
|
||||||
fatal(fatalMsg = "Failed to delete 8000000000000073!")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fsexists(targetFile)) {
|
|
||||||
fatal(fatalMsg = "File deletion failed - file still exists!")
|
|
||||||
}
|
|
||||||
|
|
||||||
color(0x00FF00)
|
|
||||||
p("SUCCESS: 8000000000000073 has been deleted!")
|
|
||||||
color(0xFFFFFF)
|
|
||||||
}
|
|
||||||
|
|
||||||
clear()
|
|
||||||
color(0x00FFFF)
|
|
||||||
p("=== Switch Downgrade Fix ===")
|
|
||||||
p("This script will delete the 8000000000000073 save file")
|
|
||||||
p("from the SYSTEM partition to prevent downgrade protection.")
|
|
||||||
p()
|
|
||||||
color(0xFFFFFF)
|
|
||||||
|
|
||||||
p("Select target:")
|
|
||||||
target = menu(["Exit", "Sysmmc", "Emummc"], 0)
|
|
||||||
|
|
||||||
if (target == 0) {
|
|
||||||
exit()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (target == 1) {
|
|
||||||
mount = mountsys
|
|
||||||
mmcType = "Sysmmc"
|
|
||||||
} .else() {
|
|
||||||
mount = mountemu
|
|
||||||
mmcType = "Emummc"
|
|
||||||
}
|
|
||||||
|
|
||||||
clear()
|
|
||||||
color(0x00FFFF)
|
|
||||||
p("=== Downgrade Fix Confirmation ===")
|
|
||||||
color(0xFFFFFF)
|
|
||||||
p("Target:", mmcType)
|
|
||||||
p("Action: Delete 8000000000000073")
|
|
||||||
p()
|
|
||||||
color(0xFFFF00)
|
|
||||||
p("WARNING: This will modify your SYSTEM partition!")
|
|
||||||
p("Make sure you know what you doing before proceeding!")
|
|
||||||
p()
|
|
||||||
color(0xFFFFFF)
|
|
||||||
|
|
||||||
wait(tw = 5000)
|
|
||||||
p("Press POWER to continue, any other key to exit")
|
|
||||||
if (!pause().power) {
|
|
||||||
exit()
|
|
||||||
}
|
|
||||||
|
|
||||||
clear()
|
|
||||||
downgradeFix()
|
|
||||||
|
|
||||||
p()
|
|
||||||
color(0x00FF00)
|
|
||||||
p("Downgrade fix completed successfully!")
|
|
||||||
color(0xFFFFFF)
|
|
||||||
p("Press any key to exit")
|
|
||||||
pause()
|
|
||||||
Loading…
x
Reference in New Issue
Block a user