mirror of
https://github.com/Ultra-NX/UltraNX.git
synced 2025-12-13 10:23:57 +00:00
Ultra 2.7|Pre1
This commit is contained in:
parent
589be70874
commit
ad67db0f49
@ -8,7 +8,9 @@
|
||||
|
||||
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
|
||||
|
||||
### [UltraNX](https://github.com/Ultra-NX/UltraNX/releases) Поддерживает все HOS, включая 20.5.0
|
||||
### [UltraNX 2.6|R3](https://github.com/Ultra-NX/UltraNX/releases/tag/2.6-R3) Поддерживает все HOS до 20.5.0 включительно
|
||||
|
||||
### [UltraNX 2.7|Pre1](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R1) Поддерживает все HOS до 21.0.0 включительно. Не полноценный релиз!
|
||||
|
||||
|
||||
|
||||
@ -82,7 +84,7 @@
|
||||
* [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Форк Status Monitor от kantorski.
|
||||
* [Tetris](https://github.com/ppkantorski/Tetris-Overlay) - Та самая игра в виде оверлея. Работает только на последних версиях Ultrahand.
|
||||
* [MasterVolume](https://github.com/averne/MasterVolume) - Регулировка глобальной громкости, позволяет поднять громкость выше максимума. Использовать аккуратно!
|
||||
* [NX-FanControl](https://github.com/Zathawo/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
|
||||
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
|
||||
* [BT Audio](https://github.com/masagrator/BT_Audio-ovl) - Оверлей, позволяющий быстро отключаться\подключаться к bluetooth-гарнитуре.
|
||||
* [Fizeau](https://github.com/averne/Fizeau) - Модуль для изменения цветового профиля экрана.
|
||||
* [sys-tune](https://github.com/HookedBehemoth/sys-tune) - Оверлей-музыкальный плеер, работает в фоне.
|
||||
|
||||
@ -6,7 +6,9 @@
|
||||
#
|
||||
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
|
||||
|
||||
### [UltraNX](https://github.com/Ultra-NX/UltraNX/releases) Supports all HOS, including 20.5.0
|
||||
### [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|Pre1](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R1) Supports all HOS up to and including 21.0.0. Not a full-fledged release!
|
||||
|
||||
|
||||
|
||||
@ -78,7 +80,7 @@
|
||||
* [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Status Monitor fork from kantorski.
|
||||
* [Tetris](https://github.com/ppkantorski/Tetris-Overlay/) - "That" game in the form of an overlay. Works only on the latest versions of Ultrahand.
|
||||
* [MasterVolume](https://github.com/averne/MasterVolume) - Global volume control, allows you to raise the volume above the maximum. Use with care!
|
||||
* [NX-FanControl](https://github.com/Zathawo/NX-FanControl) - Module for manually adjusting the speed of the cooler. The changes are applied immediately, the module works from SOC temperature and not Skin temperature like Atmosphere.
|
||||
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) - Module for manually adjusting the speed of the cooler. The changes are applied immediately, the module works from SOC temperature and not Skin temperature like Atmosphere.
|
||||
* [BT Audio](https://github.com/masagrator/BT_Audio-ovl) - An overlay that allows you to quickly disconnect\connect to a bluetooth headset.
|
||||
* [Fizeau](https://github.com/averne/Fizeau) - Module for changing the screen color profile.
|
||||
* [sys-tune](https://github.com/HookedBehemoth/sys-tune) - Overlay music player, works in background.
|
||||
|
||||
@ -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
|
||||
@ -22,4 +22,4 @@ ALL_FPS:
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
what: timing
|
||||
@ -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"
|
||||
@ -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]
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -1,7 +1,5 @@
|
||||
# The Great Ace Attorney Chronicles 1.0.0
|
||||
# BID: 761CD556AB357C87
|
||||
|
||||
unsafeCheck: true
|
||||
# BID: 1DA748FC9499882F
|
||||
|
||||
ALL_FPS:
|
||||
# FPS lock
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -1,7 +1,5 @@
|
||||
# WRC10 1.1.0
|
||||
# BID: 69CACEEC5F01C418
|
||||
|
||||
unsafeCheck: true
|
||||
# BID: 69CACEEC5F01C41B
|
||||
|
||||
ALL_FPS:
|
||||
# OptimalFrameDuration_ms = (1000/FPS) - (0.07 * (1000/30)
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
-
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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"
|
||||
@ -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
|
||||
@ -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]]
|
||||
]
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -0,0 +1,25 @@
|
||||
# Lynked: Banner of the Spark 1.2.2
|
||||
# BID: 9646E1065A7E897B
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7EAC348, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7EDA028, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x76DD488, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,19 @@
|
||||
# Blue Fire 6.1.0
|
||||
# BID: 2619FF1E39C93BAE
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x60E2D38, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x59178E8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,52 @@
|
||||
# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.25.01
|
||||
# BID: 81E15238E2B6AABD
|
||||
# Double buffer is hardcoded in class, getting triple buffer is hard.
|
||||
# Some graphical effects like aura have wrong speed outside of 15, 20, 30 and 60 FPS
|
||||
|
||||
ALL_FPS:
|
||||
# Search those in Edizon by searching for 1/60 in title menu, then 1/30 when FPS lock is applied.
|
||||
# FPS Lock
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4B26AD8, 0x698]
|
||||
address_unsafe: true
|
||||
value_type: float
|
||||
value: 0.0
|
||||
# Unknown
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4B26AD8, 0x6A4]
|
||||
address_unsafe: true
|
||||
value_type: float
|
||||
value: 0.0
|
||||
# Game Battle Speed Factor
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4B26AD8, 0x6B0]
|
||||
address_unsafe: true
|
||||
value_type: uint32
|
||||
value: VSYNC_TARGET
|
||||
# Cutscenes Speed Factor
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4B26AD8, 0x6B4]
|
||||
address_unsafe: true
|
||||
value_type: uint32
|
||||
value: VSYNC_TARGET
|
||||
# Target Speed
|
||||
# REF: E9 03 00 32 09 01 00 39 C0 03 5F D6, first result, LDR instruction
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x244E090]
|
||||
value_type: float
|
||||
value: "(1 / FPS_TARGET) * VSYNC_TARGET"
|
||||
# Dynamic Resolution FPS Target
|
||||
# REF: 16 4E A8 52 F7 03 60 B2, first ADRP + LDR above it
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x242A3C8, 0x1844]
|
||||
address_unsafe: true
|
||||
value_type: float
|
||||
|
||||
value: "FPS_TARGET"
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
# No Man's Sky 6.10.0
|
||||
# BID: DEA84284F054C693
|
||||
|
||||
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: 0x1F9BC40
|
||||
instructions: [
|
||||
[adrp, x9, $dr_target],
|
||||
[ldr, s0, [x9, $dr_target]],
|
||||
[nop]
|
||||
]
|
||||
@ -1,8 +1,6 @@
|
||||
# LEGO City Undercover 1.0.3
|
||||
# BID: 32C590B064956546
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Block to 30 FPS when prerendered cutscene is played
|
||||
# REF: LegoCutscenes::s_fmvCutsceneAudioInstance
|
||||
@ -12,6 +10,5 @@ ALL_FPS:
|
||||
compare_type: "!="
|
||||
compare_value_type: uint64
|
||||
compare_value: 0
|
||||
address: [MAIN]
|
||||
value_type: refresh_rate
|
||||
value: 30
|
||||
value: 30
|
||||
|
||||
@ -21,9 +21,8 @@ DECLARATIONS:
|
||||
type: code
|
||||
name: designalCutscene
|
||||
instructions: [
|
||||
[mov, w3, wzr],
|
||||
[adrp, x4, $cutscene_flag],
|
||||
[str, w3, [x4, $cutscene_flag]],
|
||||
[adrp, x3, $cutscene_flag],
|
||||
[str, wzr, [x3, $cutscene_flag]],
|
||||
[ret]
|
||||
]
|
||||
MASTER_WRITE:
|
||||
@ -54,3 +53,4 @@ ALL_FPS:
|
||||
compare_address: [VARIABLE, cutscene_flag]
|
||||
value_type: refresh_rate
|
||||
value: 30
|
||||
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
# DAVE THE DIVER 1.0.4.1075
|
||||
# BID: 682B1552A9C571C9
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x98E9540, 0x48]
|
||||
value_type: float
|
||||
value: "1 / FPS_TARGET"
|
||||
@ -1,7 +1,5 @@
|
||||
# Borderlands 3 1.0.3
|
||||
# BID: AFDEB128252898AC
|
||||
|
||||
unsafeCheck: true
|
||||
# BID: AE2768797E3337EE
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
# Dinkum 1.0.2.44
|
||||
# BID: 8B3609ECB49DBBED
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5C65CA0, 0x48]
|
||||
value_type: float
|
||||
value: "1 / FPS_TARGET"
|
||||
@ -2,8 +2,6 @@
|
||||
# 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
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Triple buffer
|
||||
-
|
||||
@ -65,6 +63,7 @@ MASTER_WRITE:
|
||||
- 0xE0800006
|
||||
- 0xED901A00
|
||||
- 0xEAF46ECE
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1B1CF00
|
||||
value_type: float
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
# Pikmin 1 1.1.0
|
||||
# BID: C32B29CB5FBA96D9
|
||||
# BID: 3A8E744D8F65CDEA
|
||||
# Credits to Hazerou for discovering offsets
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Block cutscenes to 30 FPS
|
||||
-
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
# Mandragora: Whispers of the Witch Tree JPN 1.5.4.135908
|
||||
# BID: AF42903B754D4859
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5D56250, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6522698, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6547F28, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,29 @@
|
||||
# INAZUMA ELEVEN: Victory Road 1.2.0
|
||||
# BID: 09AD6947189FC6D9
|
||||
# Thanks to Fl4sh for finding out function responsible for FPS Lock
|
||||
|
||||
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
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xC35488
|
||||
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
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x3294F09]
|
||||
value_type: uint8
|
||||
value: 0
|
||||
@ -0,0 +1,19 @@
|
||||
# Pandemic Shooter 1.0.0
|
||||
# BID: 02D54DEBD40AF215
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x624FF78, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5A8BE30, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -6,6 +6,7 @@ ALL_FPS:
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xCDF1E20, 8]
|
||||
address_unsafe: true
|
||||
value_type: double
|
||||
value: FPS_TARGET
|
||||
-
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
# Once Upon A KATAMARI 1.0.2
|
||||
# BID: FF53171B18C7701A
|
||||
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution
|
||||
## REF: App.KatamariSin.AppSupport_TypeInfo
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8F7C6D8, 0xB8, 0x18]
|
||||
value_type: double
|
||||
value: "0.9 * FRAMETIME_TARGET"
|
||||
@ -0,0 +1,12 @@
|
||||
# Sworn 1.0.2
|
||||
# BID: 87F1CEF6D52392AE
|
||||
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution target
|
||||
## REF: DynamicResolution_TypeInfo
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5F98160, 0xB8, 0]
|
||||
address_unsafe: true
|
||||
value_type: double
|
||||
value: [FPS_TARGET, FRAMETIME_TARGET]
|
||||
@ -0,0 +1,10 @@
|
||||
# PAC-MAN WORLD 2 Re-PAC 1.0.3
|
||||
# BID: B70D6561B718C8E0
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x87DE838, 0x58]
|
||||
value_type: uint32
|
||||
value: "2352000 * FPS_TARGET"
|
||||
@ -2,10 +2,10 @@
|
||||
# BID: 5AD255D6667B6EB5
|
||||
|
||||
ALL_FPS:
|
||||
# fb::Settings<fb::GameRenderSettings>::s_settings + 0x20
|
||||
# REF: fb::Settings<fb::GameRenderSettings>::s_settings
|
||||
# Dynamic Resolution frametime target
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9ED3AA0, 0x20]
|
||||
value_type: float
|
||||
value: "0.93 * FRAMETIME_TARGET"
|
||||
value: "0.93 * FRAMETIME_TARGET"
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
# Unbound: Worlds Apart 1.0.3
|
||||
# BID: 1B98D227021142B1
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x65C4920, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6D886E8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,25 @@
|
||||
# CRISIS CORE -FINAL FANTASY VII- REUNION Asia 1.0.4
|
||||
# BID: 4710B51EB3A3C05C
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) rounded to 1 decimal
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x96CFDA8, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x96FDCD0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8EFC0E8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -22,4 +22,4 @@ ALL_FPS:
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
what: timing
|
||||
@ -1,5 +1,5 @@
|
||||
# 光明之響 龍奏回音 1.0.0
|
||||
# BID: 069E3EFC16365FFD
|
||||
# BID: F5AC009011277359
|
||||
|
||||
MASTER_WRITE:
|
||||
# Triple buffer
|
||||
@ -23,4 +23,4 @@ ALL_FPS:
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xFBEDBC]
|
||||
value_type: float
|
||||
value: "30.0 / FPS_TARGET"
|
||||
value: "30.0 / FPS_TARGET"
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
# Trials of Mana 1.1.1
|
||||
# BID: 92C25172D38DFEDB
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5708B68, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5F39E40, 0]
|
||||
value_type: float
|
||||
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5F5F8B8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,25 @@
|
||||
# DRAGON QUEST I & II HD-2D Remake 1.0.1
|
||||
# BID: 94B4FA4F36E01BE3
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x647E5F8, 0]
|
||||
value_type: float
|
||||
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5C913E8, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x64AC358, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,25 @@
|
||||
# Endling 1.3.0
|
||||
# BID: 33DBE39C8A83F1E6
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7453898, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6C85E08, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7481468, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,19 @@
|
||||
# Hello Neighbor 2 1.1
|
||||
# BID: AB75C103EEC0D5FC
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7B70CE8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x73733F8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,19 @@
|
||||
# HYKE:Northern Light(s) 1.0.1
|
||||
# BID: 2F723E9FD78D184B
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8508958, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9500260, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,19 @@
|
||||
# HYKE:Northern Light(s) 1.0.2
|
||||
# BID: F9248820D4E4406B
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x8507958, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x94FF260, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
@ -0,0 +1,74 @@
|
||||
# Tales of Xillia Remastered 1.0.1
|
||||
# BID: 171806C35E4152E7
|
||||
|
||||
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: 0x28EBC5C
|
||||
instructions: [
|
||||
[bl, _applyCustomSpeed()]
|
||||
]
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x2B26E04
|
||||
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
|
||||
@ -0,0 +1,212 @@
|
||||
# Pokémon Legends: Z-A 1.0.1
|
||||
# BID: 7222E13ECF6ADB32
|
||||
|
||||
DECLARATIONS:
|
||||
-
|
||||
type: variable
|
||||
name: frametick
|
||||
value_type: uint64
|
||||
default_value: 0
|
||||
-
|
||||
type: const
|
||||
name: max_delta
|
||||
value: 66666667
|
||||
-
|
||||
type: variable
|
||||
name: min_delta
|
||||
value_type: uint64
|
||||
default_value: 33333334
|
||||
evaluate: "(FRAMETIME_TARGET * 1000000) + 1"
|
||||
-
|
||||
type: variable
|
||||
name: fps_target
|
||||
value_type: uint32
|
||||
default_value: 30
|
||||
evaluate: FPS_TARGET
|
||||
-
|
||||
type: const
|
||||
name: 60FPSInNanoseconds
|
||||
value: 16666667
|
||||
-
|
||||
type: const
|
||||
name: 30FPSInNanoseconds
|
||||
value: 33333334
|
||||
-
|
||||
type: variable
|
||||
name: frametime
|
||||
value_type: uint64
|
||||
default_value: 0
|
||||
-
|
||||
type: variable
|
||||
name: roll_flag
|
||||
value_type: uint32
|
||||
default_value: 0
|
||||
-
|
||||
type: variable
|
||||
name: interval_pointer
|
||||
value_type: uint64
|
||||
default_value: 0
|
||||
-
|
||||
type: code
|
||||
name: dynamicFPS
|
||||
instructions: [
|
||||
[stp, x29, x30, [sp, -16], "!"],
|
||||
[mov, x29, sp],
|
||||
[blr, x8],
|
||||
[mrs, x11, cntpct_el0],
|
||||
[adrp, x10, $frametick],
|
||||
[ldr, x12, [x10, $frametick]],
|
||||
[str, x11, [x10, $frametick]],
|
||||
[mov, x10, x12],
|
||||
[cbz, x10, :goto1],
|
||||
[sub, x10, x11, x10],
|
||||
[mov, x11, 625],
|
||||
[mul, x10, x10, x11],
|
||||
[mov, x11, 12],
|
||||
[udiv, x10, x10, x11],
|
||||
[mov, x12, $max_delta],
|
||||
[movk, x12, $max_delta, 16],
|
||||
[cmp, x10, x12],
|
||||
[csel, x10, x10, x12, lt],
|
||||
[adrp, x11, $min_delta],
|
||||
[ldr, x11, [x11, $min_delta]],
|
||||
[cmp, x10, x11],
|
||||
[csel, x2, x10, x11, gt],
|
||||
[adrp, x10, $fps_target],
|
||||
[ldr, w10, [x10, $fps_target]],
|
||||
[cmp, w10, 60],
|
||||
[csel, x2, x11, x2, eq],
|
||||
[adrp, x10, $frametime],
|
||||
[str, x2, [x10, $frametime]],
|
||||
[mov, x12, $30FPSInNanoseconds],
|
||||
[movk, x12, $30FPSInNanoseconds, 16],
|
||||
[mov, w13, 0x100],
|
||||
[cmp, x2, x12],
|
||||
[b.lt, :goto1],
|
||||
[mov, w13, 0x101],
|
||||
:goto1, [adrp, x10, $interval_pointer],
|
||||
[ldr, x10, [x10, $interval_pointer]],
|
||||
[strh, w13, [x10]],
|
||||
[adrp, x10, $roll_flag],
|
||||
[ldr, w11, [x10, $roll_flag]],
|
||||
[cmp, w11, 0],
|
||||
[b.eq, :goto2],
|
||||
[sub, w11, w11, 1],
|
||||
[str, w11, [x10, $roll_flag]],
|
||||
:goto2, [ldp, x29, x30, [sp], 16],
|
||||
[ret]
|
||||
]
|
||||
-
|
||||
type: code
|
||||
name: readDynamicFPS
|
||||
instructions: [
|
||||
[adrp, x10, $frametime],
|
||||
[ldr, x11, [x10, $frametime]],
|
||||
[cmp, x11, 0],
|
||||
[csel, x2, x2, x11, eq],
|
||||
[adrp, x10, $roll_flag],
|
||||
[ldr, w10, [x10, $roll_flag]],
|
||||
[cmp, w10, 0],
|
||||
[adrp, x10, $min_delta],
|
||||
[ldr, x10, [x10, $min_delta]],
|
||||
[csel, x2, x2, x10, eq],
|
||||
[adrp, x10, 0x5F0C000],
|
||||
[add, x10, x10, 0x600], # Offset where is written flag when ladder is in use
|
||||
[ldrb, w10, [x10]],
|
||||
[mov, x12, $60FPSInNanoseconds],
|
||||
[movk, x12, $60FPSInNanoseconds, 16], # Climbing animation expects from us animation to be multiplication of 1/60s, otherwise climbing speed is uneven and eventually we fall
|
||||
[mov, x13, $30FPSInNanoseconds],
|
||||
[movk, x13, $30FPSInNanoseconds, 16],
|
||||
[cmp, x11, x13],
|
||||
[csel, x11, x12, x13, lt],
|
||||
[cmp, w10, 0],
|
||||
[csel, x2, x2, x11, eq],
|
||||
[br, x3]
|
||||
]
|
||||
-
|
||||
type: code
|
||||
name: setTo60FPSMode
|
||||
instructions: [
|
||||
[str, x0, [x26, 0x40]],
|
||||
[add, x0, x0, 0x20],
|
||||
[adrp, x8, $interval_pointer],
|
||||
[str, x0, [x8, $interval_pointer]],
|
||||
[mov, w8, 0x101],
|
||||
[strh, w8, [x0]],
|
||||
[sub, x0, x0, 0x20],
|
||||
[ret]
|
||||
]
|
||||
-
|
||||
type: const
|
||||
name: rollFixTiming
|
||||
value: 20000001
|
||||
-
|
||||
type: code
|
||||
name: rollFix
|
||||
instructions: [
|
||||
[ldr, x8, [x0, 0x120]],
|
||||
[tbnz, x8, 1, +8], # Bit 1 = ladder/rolling
|
||||
[b, :goto1],
|
||||
[adrp, x22, $frametime],
|
||||
[ldr, x22, [x22, $frametime]],
|
||||
[mov, x21, $rollFixTiming],
|
||||
[movk, x21, $rollFixTiming, 16],
|
||||
[cmp, x22, x21],
|
||||
[b.gt, :goto1], # If our FPS target is not above 50, don't do anything
|
||||
[mov, w21, 3],
|
||||
[adrp, x22, $fps_target],
|
||||
[ldr, w22, [x22, $fps_target]],
|
||||
[udiv, w22, w22, w21], # Divide FPS target by 3 to get amount of frames necessary for rolling animation to not stuck our character
|
||||
[adrp, x19, $roll_flag],
|
||||
[str, w22, [x19, $roll_flag]],
|
||||
:goto1, [ret]
|
||||
]
|
||||
MASTER_WRITE:
|
||||
# Roll Fix, thanks to Fl4sh9174 for address
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x2962A74
|
||||
instructions: [
|
||||
[bl, _rollFix()]
|
||||
]
|
||||
# Restore original 30 FPS lock
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x175E864
|
||||
instructions: [
|
||||
[mov, w1, 2]
|
||||
]
|
||||
# Dynamic Resolution
|
||||
## REF: 21 D8 61 5E 21 18 68 1E 00 18 61 1E, replace ADRP + ADD + LDR above it
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0xD5AB0
|
||||
instructions: [
|
||||
[adrp, x9, $min_delta],
|
||||
[ldr, d1, [x9, $min_delta]],
|
||||
[nop]
|
||||
]
|
||||
# Calculate frame time by replacing call to nvnQueuePresentTexture
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x175F154
|
||||
instructions: [
|
||||
[bl, _dynamicFPS()]
|
||||
]
|
||||
# Replace reading hardcoded values
|
||||
## REF: 02 D9 62 F8 08 00 40 F9 03 09 40 F9 60 00 1F D6, last REF. Check two other results if anything will go wrong somewhere
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x2891B08
|
||||
instructions: [
|
||||
[b, _readDynamicFPS()]
|
||||
]
|
||||
# Force game to start in 60 FPS mode for better game thread synchronization (writing 0 to 0x20) + enable constantly updating speed (writing 1 to 0x21)
|
||||
## REF: 40 23 00 F9 08 04 40 F9
|
||||
-
|
||||
type: asm_a64
|
||||
main_offset: 0x19DD334
|
||||
instructions: [
|
||||
[bl, _setTo60FPSMode()]
|
||||
]
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
# SnowRunner 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]]
|
||||
]
|
||||
@ -0,0 +1,14 @@
|
||||
# Space Marshals 3 1.0.0
|
||||
# BID: 0AFE1AE664D9AFA1
|
||||
|
||||
ALL_FPS:
|
||||
# FPS Lock
|
||||
## REF: CAppSWITCH xref, 0x10 above address storing pointer
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5E14D0]
|
||||
value_type: double
|
||||
value: "1 / FPS_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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,5 +1 @@
|
||||
{
|
||||
"name" : "sys-con",
|
||||
"tid" : "690000000000000D",
|
||||
"requires_reboot": false
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -9,13 +9,6 @@ autonogc=0
|
||||
updater2p=0
|
||||
bootprotect=0
|
||||
|
||||
[Atmosphere]
|
||||
fss0=atmosphere/package3
|
||||
cal0blank=1
|
||||
kip1=atmosphere/kips/*
|
||||
logopath=bootloader/res/bootscreen.bmp
|
||||
icon=bootloader/res/atmo_cfw.bmp
|
||||
|
||||
[Safe Mode]
|
||||
fss0=atmosphere/package3
|
||||
cal0blank=1
|
||||
|
||||
@ -1,11 +1,3 @@
|
||||
[Semi Stock]
|
||||
fss0=atmosphere/package3
|
||||
emummc_force_disable=1
|
||||
cal0blank=0
|
||||
kip1=atmosphere/kips/*
|
||||
logopath=bootloader/res/bootscreen.bmp
|
||||
icon=bootloader/res/sys_cfw_nobox.bmp
|
||||
|
||||
[Semi Safe]
|
||||
fss0=atmosphere/package3
|
||||
emummc_force_disable=1
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,6 +1,7 @@
|
||||
{
|
||||
"ams": {
|
||||
"[PACK] UltraNX": "https://github.com/Ultra-NX/Ultra/releases/latest/download/Ultra.zip"
|
||||
"[PACK] UltraNX 2.6|R3 Stable HOS ≤20.5.0": "https://github.com/Ultra-NX/Ultra/releases/latest/download/Ultra.zip",
|
||||
"[PACK] UltraNX 2.7|Pre1 Test HOS ≤21.0.0": "https://github.com/Ultra-NX/UltraNX/releases/download/2.7-R1/Ultra.zip"
|
||||
},
|
||||
"misc": {
|
||||
"Refresh AIO": "https://github.com/Ultra-NX/Ultra-Resources/releases/download/Homebrews/AIO.zip"
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
[config]
|
||||
theme=romfs:/themes/oled_black_theme.ini
|
||||
mtp_enabled=1
|
||||
replace_hbmenu=0
|
||||
install_emummc=1
|
||||
install_prompt=0
|
||||
|
||||
[homebrew]
|
||||
layout=1
|
||||
hide_sphaira=0
|
||||
|
||||
[filebrowser]
|
||||
show_hidden=1
|
||||
@ -1,477 +0,0 @@
|
||||
{
|
||||
"[Applet Mode]": "[Режим Applet]",
|
||||
"No Internet": "Нет интернета",
|
||||
"Switch-Handheld!": "Режим Портатива",
|
||||
"Switch-Docked!": "Режим Дока",
|
||||
"Warning! Logs are enabled, Sphaira will run slowly!": "Внимание! Включены логи, Sphaira будет работать медленно!",
|
||||
"Audio disabled due to suspended game": "Звук отключён из-за приостановки игры",
|
||||
"Are you sure you wish to cancel?": "Вы уверены, что хотите отменить?",
|
||||
"An error occurred": "Произошла ошибка",
|
||||
"If this message appears repeatedly, please open an issue.": "Если ошибка появляется неоднократно, пожалуйста, откройте issue",
|
||||
|
||||
"Menu Options": "Опции меню",
|
||||
"Menu": "Меню",
|
||||
"Theme": "Тема",
|
||||
"Theme Options": "Опции темы",
|
||||
"Select Theme": "Выбор темы",
|
||||
"Music": "Музыка",
|
||||
"12 Hour Time": "12-часовое время",
|
||||
"Download Default Music": "Скачать стандартную музыку",
|
||||
"Failed to download default_music.bfstm, please try again": "Не удалось загрузить default_music.bfstm, попробуйте снова",
|
||||
"Overwrite current default music?": "Переписать текущую стандартную музыку?",
|
||||
|
||||
"Network": "Сеть",
|
||||
"Network Options": "Опции сети",
|
||||
"Ftp": "FTP",
|
||||
"Mtp": "MTP",
|
||||
"Nxlink": "NXLink",
|
||||
"Nxlink Connected": "NXLink подключён",
|
||||
"Nxlink Upload": "NXLink отправка",
|
||||
"Nxlink Finished": "NXLink завершено",
|
||||
"Hdd": "HDD",
|
||||
"Hdd write protect": "Защита HDD от записи",
|
||||
|
||||
"Language": "Язык",
|
||||
"Auto": "Авто",
|
||||
"English": "English",
|
||||
"Japanese": "日本語",
|
||||
"French": "Français",
|
||||
"German": "Deutsch",
|
||||
"Italian": "Italiano",
|
||||
"Spanish": "Español",
|
||||
"Chinese": "中文",
|
||||
"Korean": "한국어",
|
||||
"Dutch": "Dutch",
|
||||
"Portuguese": "Português",
|
||||
"Russian": "Русский",
|
||||
"Swedish": "Svenska",
|
||||
"Vietnamese": "Vietnamese",
|
||||
"Ukrainian": "Українська",
|
||||
|
||||
"Misc": "Прочее",
|
||||
"Misc Options": "Прочие опции",
|
||||
"Games": "Игры",
|
||||
"Game Options": "Опции игр",
|
||||
"Hide forwarders": "Скрыть форвардеры",
|
||||
"Launch random game": "Запустить случайную игру",
|
||||
"List meta records": "Список мета-записей",
|
||||
"Entries": "Записи",
|
||||
"Failed to list application meta entries": "Не удалось получить список мета-записей приложений",
|
||||
"No meta entries found...\n": "Мета-записей не найдено...\n",
|
||||
"Updating application record list": "Обновление списка записей приложений",
|
||||
"Dump": "Дамп",
|
||||
"Dump options": "Опции дампа",
|
||||
"Dump Options": "Опции дампа",
|
||||
"Select content to dump": "Выберите содержимое для дампа",
|
||||
"Dump All": "Дамп всего",
|
||||
"Dump Application": "Дамп приложения",
|
||||
"Dump Patch": "Дамп патча",
|
||||
"Dump AddOnContent": "Дамп дополнительного контента",
|
||||
"Dump DataPatch": "Дамп патча данных",
|
||||
"Created nested folder": "Создать вложенную папку",
|
||||
"Append folder with .xci": "Добавить папку с .xci",
|
||||
"Trim XCI": "Обрезать .xci",
|
||||
"Label trimmed XCI": "Пометить обрезанный .xci",
|
||||
"Multi-threaded USB transfer": "Многоядерная USB передача",
|
||||
"Dump All Bins": "Дамп всех BIN-файлов",
|
||||
"Dump XCI": "Дамп XCI",
|
||||
"Dump Card ID Set": "Дамп набора ID карты",
|
||||
"Dump Card UID": "Дамп UID карты",
|
||||
"Dump Certificate": "Дамп сертификата",
|
||||
"Dump Initial Data": "Дамп начальных данных",
|
||||
"Select dump location": "Выберите место для дампа",
|
||||
"microSD card (/dumps/)": "microSD (/dumps/)",
|
||||
"USB transfer (Switch 2 Switch)": "Передача по USB (Switch 2 Switch)",
|
||||
"/dev/null (Speed Test)": "/dev/null (тест скорости)",
|
||||
"Dumping": "Снятие дампа",
|
||||
"Dump successfull!": "Дамп выполнен успешно!",
|
||||
"Dump failed!": "Сбой дампа!",
|
||||
"Delete successfull!": "Удаление успешно!",
|
||||
"Delete failed!": "Ошибка удаления!",
|
||||
"Success": "Успех",
|
||||
"Refresh": "Обновить",
|
||||
"Create contents folder": "Создать папку \"Contents\"",
|
||||
"Create save": "Создать сохранение",
|
||||
"Title cache": "Кэш заголовков",
|
||||
"Delete title cache": "Удалить кэш заголовков",
|
||||
|
||||
"Saves": "Сохранения",
|
||||
"Save Options": "Опции сохранений",
|
||||
"Account": "Пользователь",
|
||||
"Data Type": "Тип данных",
|
||||
"System": "Система",
|
||||
"BCAT": "BCAT",
|
||||
"Device": "Устройство",
|
||||
"Temporary": "Временные",
|
||||
"Cache": "Кэш",
|
||||
"System BCAT": "BCAT (Система)",
|
||||
"Backup": "Сделать бэкап",
|
||||
"Auto backup": "Автоматический бэкап",
|
||||
"Auto backup on restore": "Бэкап при восстановлении",
|
||||
"Compress backup": "Сжимать бэкапы",
|
||||
"Are you sure you want to backup save(s)?": "Вы уверены, что хотите сделать бэкап(ы)?",
|
||||
"No saves found in ": "Сохранения не найдены в ",
|
||||
"Backed up to ": "Бэкап сохранен в ",
|
||||
"Backup successfull!": "Бэкап успешно создан!",
|
||||
"Backup failed!": "Ошибка бэкапа!",
|
||||
"Select backup location": "Выберите место для бэкапа",
|
||||
"Select restore location": "Выберите место для восстановления",
|
||||
"Restore save for: ": "Восстановить сохранение для: ",
|
||||
"Are you sure you want to restore ": "Вы уверены, что хотите восстановить ",
|
||||
"Restore successfull!": "Восстановление успешно!",
|
||||
"Restore failed!": "Ошибка восстановления!",
|
||||
|
||||
"Themezer": "Themezer",
|
||||
"Themezer Options": "Опции Themezer",
|
||||
"Nsfw": "NSFW",
|
||||
"Page": "Страница",
|
||||
"Page %zu / %zu": "Страница %zu / %zu",
|
||||
"Enter Page Number": "Номер страницы",
|
||||
"Bad Page": "Неверная страница",
|
||||
"Download theme?": "Скачать тему?",
|
||||
|
||||
"GitHub": "GitHub",
|
||||
"Downloading json": "Загрузка json",
|
||||
"Select asset to download for ": "Выберите ресурс для загрузки: ",
|
||||
"Failed to download json": "Не удалось загрузить json",
|
||||
"Failed to download app!": "Не удалось загрузить приложение!",
|
||||
|
||||
"FTP Install": "Установка по FTP",
|
||||
"Connection Type: WiFi | Strength: ": "Тип подключения: WiFi | Сигнал: ",
|
||||
"Connection Type: Ethernet": "Тип подключения: Ethernet",
|
||||
"Connection Type: None": "Нет подключения",
|
||||
"Host:": "Хост:",
|
||||
"Port:": "Порт:",
|
||||
"Username:": "Имя пользователя:",
|
||||
"Password:": "Пароль:",
|
||||
"SSID:": "SSID:",
|
||||
"Passphrase:": "Пароль:",
|
||||
"Failed to install, press B to exit...": "Не удалось установить по FTP, нажмите B для выхода...",
|
||||
"Install success!": "Установка по FTP прошла успешно!",
|
||||
"Install failed!": "Сбой установки по FTP!",
|
||||
"MTP Install": "Установка по MTP",
|
||||
"State: %s | Speed: %s": "Состояние: %s | Скорость: %s",
|
||||
"Detached": "Отключено",
|
||||
"Attached": "Подключено",
|
||||
"Powered": "Заряжается",
|
||||
"Default": "По умолчанию",
|
||||
"Address": "Адрес",
|
||||
"Configured": "Настроено",
|
||||
"Suspended": "Приостановлено",
|
||||
"USB 1.0 Low Speed": "USB 1.0",
|
||||
"USB 1.1 Full Speed": "USB 1.1",
|
||||
"USB 2.0 High Speed": "USB 2.0",
|
||||
"USB 3.0 Super Speed": "USB 3.0",
|
||||
"Drag'n'Drop (NSP, XCI, NSZ, XCZ) to the install folder": "Перетащите (NSP, XCI, NSZ, XCZ) в папку установки",
|
||||
"Failed to install via MTP, press B to exit...": "Не удалось установить по MTP, нажмите B для выхода...",
|
||||
"MTP install success!": "Установка по MTP успешна!",
|
||||
"MTP install failed!": "Сбой установки по MTP!",
|
||||
"USB Install": "Установка по USB",
|
||||
"USB": "USB",
|
||||
"Connected, waiting for file list...": "Подключено, ожидание списка файлов...",
|
||||
"Connected, starting transfer...": "Подключено, начало передачи...",
|
||||
"Failed to init usb, press B to exit...": "Не удалось инициализировать USB, нажмите B для выхода...",
|
||||
"Waiting for connection...": "Ожидание подключения...",
|
||||
"Transferring data...": "Передача данных...",
|
||||
"USB connected, sending file list": "USB подключено, отправка списка файлов",
|
||||
"Sent file list, waiting for command...": "Список файлов отправлен, ожидание команды...",
|
||||
"waiting for usb connection...": "ожидание подключения USB...",
|
||||
"Disable MTP for usb install": "MTP отключён для установки по USB",
|
||||
"Re-enabled MTP": "MTP снова включен",
|
||||
"Installed via usb": "Установлено по USB",
|
||||
"Usb install success!": "Установка по USB успешна!",
|
||||
"Usb install failed!": "Сбой установки по USB!",
|
||||
"Press B to exit...": "Нажмите B для выхода...",
|
||||
"GameCard Install": "Установка с картриджа",
|
||||
"GameCard": "Картридж",
|
||||
"GC": "GC",
|
||||
"System memory %.1f GB": "NAND %.1f ГБ",
|
||||
"microSD card %.1f GB": "microSD %.1f ГБ",
|
||||
"Exit": "Выход",
|
||||
"Install disabled...\nPlease enable installing via the install options.": "Установка отключена...\nПожалуйста, включите установку в опциях установки.",
|
||||
"No GameCard inserted": "Картридж не вставлен",
|
||||
"GameCard is already trimmed!": "Картридж уже обрезан!",
|
||||
"WARNING: GameCard is already trimmed!": "ВНИМАНИЕ: Картридж уже обрезан!",
|
||||
"Continue": "Продолжить",
|
||||
"Gc install success!": "Установка с картриджа успешна!",
|
||||
"Gc install failed!": "Сбой установки с картриджа!",
|
||||
|
||||
"IRS (Infrared Joycon Camera)": "IRS (инфракрасная камера JoyCon)",
|
||||
"IRS": "IRS",
|
||||
"Irs": "IRS",
|
||||
"Ambient Noise Level: ": "Уровень фонового шума: ",
|
||||
"Controller": "Контроллер",
|
||||
"Pad ": "Геймпад ",
|
||||
"HandHeld": "Портатив",
|
||||
" (Available)": " (Доступно)",
|
||||
" (Unsupported)": " (Не поддерживается)",
|
||||
" (Unconnected)": " (Не подключено)",
|
||||
"Rotation": "Поворот",
|
||||
"0 (Sideways)": "0 (боком)",
|
||||
"90 (Flat)": "90 (ровно)",
|
||||
"180 (-Sideways)": "180 (-боком)",
|
||||
"270 (Upside down)": "270 (перевернуто)",
|
||||
"Colour": "Цвет",
|
||||
"Grey": "Серый",
|
||||
"Ironbow": "Фьюжн",
|
||||
"Green": "Зеленый",
|
||||
"Red": "Красный",
|
||||
"Blue": "Синий",
|
||||
"Light Target": "Светодиоды",
|
||||
"All leds": "Все",
|
||||
"Bright group": "Яркие",
|
||||
"Dim group": "Тусклые",
|
||||
"None": "Отключены",
|
||||
"Gain": "Яркость",
|
||||
"Negative Image": "Негатив",
|
||||
"Normal image": "Отключён",
|
||||
"Negative image": "Включен",
|
||||
"Format": "Разрешение",
|
||||
"Trimming Format": "Обрезка",
|
||||
"External Light Filter": "Внешний светофильтр",
|
||||
"Load Default": "По умолчанию",
|
||||
|
||||
"Web": "Браузер",
|
||||
"Select URL": "Выберите URL",
|
||||
"Enter custom URL": "Введите свой URL",
|
||||
"Enter URL": "Введите URL",
|
||||
|
||||
"Advanced": "Продвинутые опции",
|
||||
"Advanced Options": "Расширенные опции",
|
||||
"Advanced options": "Расширенные опции",
|
||||
"Logging": "Логи",
|
||||
"Replace hbmenu on exit": "Замена hbmenu при выходе",
|
||||
"Restore hbmenu?": "Восстановить hbmenu?",
|
||||
"Restore": "Восстановить",
|
||||
"Failed to find /switch/hbmenu.nro\nUse the Appstore to re-install hbmenu": "Не удалось найти /switch/hbmenu.nro\nИспользуйте Appstore для переустановки hbmenu",
|
||||
"Failed to restore hbmenu, please re-download hbmenu": "Не удалось восстановить hbmenu, пожалуйста, загрузите его снова",
|
||||
"Failed to restore hbmenu, using sphaira instead": "Не удалось восстановить hbmenu, используется sphaira",
|
||||
"Restored hbmenu, closing sphaira": "hbmenu восстановлен, закрытие sphaira",
|
||||
"Restored hbmenu": "hbmenu восстановлен",
|
||||
"Restart Sphaira?": "Перезапустить Sphaira?",
|
||||
"Press OK to restart Sphaira": "Нажмите OK для перезапуска Sphaira",
|
||||
"Boost CPU during transfer": "Разгон CPU при передаче",
|
||||
"Text scroll speed": "Скорость текста",
|
||||
"Slow": "Медленная",
|
||||
"Normal": "Обычная",
|
||||
"Fast": "Быстрая",
|
||||
"Set left-side menu": "Меню слева",
|
||||
"Set right-side menu": "Меню справа",
|
||||
"Install options": "Опции установки",
|
||||
"Install Options": "Опции установки",
|
||||
"Enable sysmmc": "Включить на сиснанде",
|
||||
"Enable emummc": "Включить на эмунанде",
|
||||
"Show install warning": "Предупрежд. при установке",
|
||||
"Install location": "Место установки",
|
||||
"System memory": "NAND",
|
||||
"microSD card": "microSD",
|
||||
"Allow downgrade": "Разрешить даунгрейд",
|
||||
"Skip if already installed": "Пропуск установленного",
|
||||
"Ticket only": "Только тикет",
|
||||
"Skip base": "Пропустить базу игры",
|
||||
"Skip patch": "Пропустить патч",
|
||||
"Skip dlc": "Пропустить DLC",
|
||||
"Skip data patch": "Пропустить патч данных",
|
||||
"Skip ticket": "Пропустить тикет",
|
||||
"Skip NCA hash verify": "Не проверять NCA hash",
|
||||
"Skip RSA header verify": "Не проверять RSA header",
|
||||
"Skip RSA NPDM verify": "Не проверять RSA NPDM",
|
||||
"Ignore distribution bit": "Игнор. битa распределения",
|
||||
"Convert to common ticket": "Конверт. в общий тикет",
|
||||
"Convert to standard crypto": "Конверт. в стандарт. крипт.",
|
||||
"Lower master key": "Снизить мастер-ключ",
|
||||
"Lower system version": "Снизить версию системы",
|
||||
"Disable erpt_reports": "Отключить \"erpt_reports\"",
|
||||
|
||||
"Homebrew": "Homebrew",
|
||||
"Apps": "Приложения",
|
||||
"Homebrew Options": "Опции Homebrew",
|
||||
"Hide Sphaira": "Скрыть Sphaira",
|
||||
"Install Forwarder": "Установить форвардер",
|
||||
"Hide": "Скрыть",
|
||||
"Show hidden": "Показать скрытые",
|
||||
"WARNING: Installing forwarders will lead to a ban!": "ВНИМАНИЕ: \nУстановка в сиснанд приведет к бану!",
|
||||
"Installing Forwarder": "Установка форвардера",
|
||||
"Creating Program": "Создание программы",
|
||||
"Creating Control": "Создание элемента управления",
|
||||
"Creating Meta": "Создание меты",
|
||||
"Writing Nca": "Запись NCA",
|
||||
"Updating ncm database": "Обновление базы данных NCM",
|
||||
"Pushing application record": "Добавление записи приложения",
|
||||
"Failed to install forwarder": "Не удалось установить форвардер",
|
||||
"Unstar": "Убрать из избранного",
|
||||
"Star": "Добавить в избранное",
|
||||
"Unstarred ": "Удалено из избранного: ",
|
||||
"Starred ": "Добавлено в избранное: ",
|
||||
"Failed to remove old forwarder, please manually remove it!": "Не удалось удалить старый форвардер, удалите его вручную!",
|
||||
|
||||
"AppStore": "AppStore",
|
||||
"Appstore": "AppStore",
|
||||
"Store": "Магазин",
|
||||
"Filter: %s | Sort: %s | Order: %s": "Показывать: %s | Сортировка: %s | Порядок: %s",
|
||||
"AppStore Options": "Опции AppStore",
|
||||
"Info": "Информация",
|
||||
"Changelog": "Список изменений",
|
||||
"Details": "Подробности",
|
||||
"version: %s": "версия: %s",
|
||||
"updated: %s": "обновлено: %s",
|
||||
"category: %s": "категория: %s",
|
||||
"extracted: %.2f MiB": "извлечено: %.2f MiB",
|
||||
"app_dls: %s": "app_dls: %s",
|
||||
"More by Author": "Другое от автора",
|
||||
"Leave Feedback": "Оставить отзыв",
|
||||
"Visit Website": "Посетить сайт",
|
||||
|
||||
"FileBrowser": "Файлы",
|
||||
"Files": "Файлы",
|
||||
"%zd files": "%zd файлы",
|
||||
"%zd dirs": "%zd разделы",
|
||||
"File Options": "Опции файла",
|
||||
"Show Hidden": "Показать скрытые",
|
||||
"Folders First": "Папки в начале",
|
||||
"Hidden Last": "Скрытые в конце",
|
||||
"Split": "Разделить",
|
||||
"Cut": "Вырезать",
|
||||
"Copy": "Копировать",
|
||||
"Copying ": "Копирование ",
|
||||
"Paste": "Вставить",
|
||||
"Paste file(s)?": "Вставить файл(ы)?",
|
||||
"Pasting ": "Вставка ",
|
||||
"Pasting": "Вставка",
|
||||
"Rename": "Переименовать",
|
||||
"Set New File Name": "Задайте новое имя файла",
|
||||
"Failed to delete directory": "Не удалось удалить папку",
|
||||
"Failed to delete file": "Не удалось удалить файл",
|
||||
"Extract zip": "Распаковать .zip",
|
||||
"Extract Options": "Опции распаковки",
|
||||
"Extract here": "Распаковать сюда",
|
||||
"Extract to root": "Распаковать в корень",
|
||||
"Are you sure you want to extract to root?": "Вы уверены, что хотите распаковать в корень?",
|
||||
"Extract to...": "Распаковать в...",
|
||||
"Enter the path to the folder to extract into": "Введите путь к папке для распаковки",
|
||||
"Extracting ": "Распаковка ",
|
||||
"Extract success!": "Распаковка успешна!",
|
||||
"Extract failed!": "Сбой распаковки!",
|
||||
"Compress to zip": "Сжать в .zip",
|
||||
"Compress Options": "Опции сжатия",
|
||||
"Compress": "Сжать",
|
||||
"Compress to...": "Сжать в...",
|
||||
"Compressing ": "Сжатие ",
|
||||
"Compress success!": "Сжатие успешно!",
|
||||
"Compress failed!": "Сбой сжатия!",
|
||||
"Create File": "Создать файл",
|
||||
"Set File Name": "Укажите имя файла",
|
||||
"Create Folder": "Создать папку",
|
||||
"Set Folder Name": "Укажите имя папки",
|
||||
"Creating ": "Создание ",
|
||||
"View as text (unfinished)": "Открыть как текст (не доделано)",
|
||||
"Upload": "Отправить",
|
||||
"Select upload location": "Выберите место загрузки",
|
||||
"No upload locations set!": "Места загрузки не заданы!",
|
||||
"Uploading": "Отправка",
|
||||
"Upload successfull!": "Отправка успешна!",
|
||||
"Upload failed!": "Сбой Отправки!",
|
||||
"Hash": "Хэш",
|
||||
"Hash Options": "Опции хэша",
|
||||
"Hashing": "Вычисление хэша",
|
||||
"Failed to hash file...": "Не удалось вычислить хэш файла...",
|
||||
"Ignore read only": "Игнор. только для чтения",
|
||||
"Mount": "Монтировать",
|
||||
"Sd": "Micro SD",
|
||||
"Image System memory": "Альбом Сиснанда",
|
||||
"Image microSD card": "Альбом Эмунанда",
|
||||
"Empty...": "Пусто...",
|
||||
"Open with DayBreak?": "Открыть с помощью DayBreak?",
|
||||
"Launch ": "Запуск ",
|
||||
"Launch option for: ": "Опции запуска для: ",
|
||||
"Select launcher for: ": "Выберите загрузчик для: ",
|
||||
"Close FileBrowser?": "Закрыть Файлы?",
|
||||
|
||||
"Sort By": "Сортировка",
|
||||
"Sort Options": "Опции сортировки",
|
||||
"Filter": "Показывать",
|
||||
"All": "Всё",
|
||||
"Emulators": "Эмуляторы",
|
||||
"Tools": "Инструменты",
|
||||
"Themes": "Темы",
|
||||
"Legacy": "Легаси",
|
||||
"Sort": "Сортировать",
|
||||
"Size": "По размеру",
|
||||
"Size (Star)": "По размеру (избр.)",
|
||||
"Alphabetical": "По имени",
|
||||
"Alphabetical (Star)": "По имени (избр.)",
|
||||
"Updated": "По дате",
|
||||
"Updated (Star)": "По дате (избр.)",
|
||||
"Downloads": "По загрузкам",
|
||||
"Likes": "По лайкам",
|
||||
"ID": "По ID",
|
||||
"Order": "Порядок",
|
||||
"Descending": "По убыванию",
|
||||
"Descending (down)": "По убыванию",
|
||||
"Desc": "По убыванию",
|
||||
"Ascending": "По возрастанию",
|
||||
"Ascending (Up)": "По возрастанию",
|
||||
"Asc": "По возрастанию",
|
||||
"Layout": "Макет",
|
||||
"List": "Список",
|
||||
"Icon": "Иконки",
|
||||
"Grid": "Сетка",
|
||||
"Search": "Поиск",
|
||||
|
||||
"Options": "Опции",
|
||||
"Split": "Разделить",
|
||||
"OK": "ОК",
|
||||
"Back": "Назад",
|
||||
"Select": "Выбрать",
|
||||
"Open": "Открыть",
|
||||
"Close": "Закрыть",
|
||||
"Launch": "Запуск",
|
||||
"Restart": "Перезапустить",
|
||||
"Next": "Далее",
|
||||
"Prev": "Назад",
|
||||
"Yes": "Да",
|
||||
"No": "Нет",
|
||||
"On": "Вкл",
|
||||
"Off": "Выкл",
|
||||
|
||||
"Install": "Установить",
|
||||
"Install Selected files?": "Установить выбранные файлы?",
|
||||
"Installing ": "Установка ",
|
||||
"Installed ": "Установлено ",
|
||||
"Installed!": "Установлено!",
|
||||
"Trying to load ": "Попытка загрузить ",
|
||||
"Checking MD5": "Проверка MD5",
|
||||
|
||||
"Delete": "Удалить",
|
||||
"Delete Selected files?": "Удалить выбранные файлы?",
|
||||
"Are you sure you want to delete ": "Вы уверены, что хотите удалить ",
|
||||
"Scanning ": "Сканирование ",
|
||||
"Deleting ": "Удаление ",
|
||||
"Deleting": "Удаление",
|
||||
"Remove": "Удалить",
|
||||
"Completely remove ": "Полностью удалить ",
|
||||
"Removing ": "Удаляется ",
|
||||
"Uninstalling ": "Деинсталляция ",
|
||||
"Removed ": "Удалено ",
|
||||
|
||||
"Download": "Скачать",
|
||||
"Downloading ": "Загрузка ",
|
||||
"Downloaded ": "Загружено ",
|
||||
"Download via the Network options!": "Скачайте через: Меню - Сеть",
|
||||
|
||||
"Update": "Обновить",
|
||||
"Update avaliable: ": "Доступно обновление: ",
|
||||
"Download update: ": "Скачать обновление: ",
|
||||
"Updated to ": "Обновлено до ",
|
||||
"Failed to download update": "Не удалось загрузить обновление",
|
||||
|
||||
"%zu hours %zu minutes remaining": "Осталось %zu ч %zu мин",
|
||||
"%zu minutes %zu seconds remaining": "Осталось %zu мин %zu сек",
|
||||
"%zu seconds remaining": "Осталось %zu сек",
|
||||
|
||||
"Loading...": "Загрузка...",
|
||||
"Loading": "Загрузка",
|
||||
"Empty!": "Пусто!",
|
||||
"Not Ready...": "Не готово...",
|
||||
"Error loading page!": "Ошибка загрузки страницы!"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user