UltraNX 3.0|R3x

This commit is contained in:
redraz 2026-08-15 04:05:34 +03:00
parent 5b016a714f
commit 1c296e9ff5
64 changed files with 1166 additions and 149 deletions

View File

@ -1,4 +1,4 @@
# Subnautica Below Zero 1.21.49397-1.22.54460
# Subnautica Below Zero 1.21.49397-1.23.55063
# BID: 5B050C55B8264040
ALL_FPS:

View File

@ -0,0 +1,34 @@
# Kingdom Rush Frontiers 3.2.23
# BID: B1C0E2F9DBF2ADFB
MASTER_WRITE:
- # REF: vtable with string "getAverageDelta", search inside that vtable "sleep", it's above actual function, patch BLX X1 inside that function
type: bytes
main_offset: 0xF5514
value_type: uint32
value: 0xEB069E4D # BL 0x29CE50
-
type: bytes
main_offset: 0x29CE50 # Code cave
value_type: uint32
value:
- 0xE24F2008 # SUB R2, PC, #8
- 0xE30931A8 # MOVW R3, #0x91A8
- 0xE3403076 # MOVT R3, #0x0076
- 0xE0822003 # ADD R2, R2, R3 - 0x29CE50 + 0x7691A8 = 0xA05FF8
- 0xED921B00 # VLDR D1, [R2]
- 0xEEB51B40 # VCMP.F64 D1, #0.0
- 0xEEF1FA10 # VMRS APSR_nzcv, FPSCR
- 0x1EB00B41 # VMOVNE.F64 D0, D1
- 0xE12FFF11 # BX R1
-
type: bytes
main_offset: 0xA05FF8
value_type: double
value: 0
ALL_FPS:
-
type: write
address: [MAIN, 0xA05FF8]
value_type: double
value: 0.001

View File

@ -0,0 +1,19 @@
# 고스트러너 1.7
# BID: F05A2BD2BD050256
ALL_FPS:
# r.DynamicRes.FrameTimeBudget = 0.93 * (1000/FPS)
-
type: evaluate_write
address: [MAIN, 0x6B0C480, 0]
value_type: float
value: ["0.93 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x6B35A08, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,82 @@
# The Lord of the Rings: War in the North - Legacy Edition 1.0.1
# BID: B18F4EAC4D5148A1
# INFO: RenderThreadWaitOnGPU blocks game to 59 FPS and causes CPU cores to rampage if not adjusted, but if adjusted to allow perfect 60 FPS image starts tearing, so i decided to not change it
DECLARATIONS:
-
type: variable
name: frametime
value_type: uint32
default_value: 33333
evaluate: 1000000 / FPS_LOCK_TARGET
-
type: variable
name: half_frametime
value_type: float
default_value: 0.01665
evaluate: 0.999 * (1 / FPS_TARGET)
-
type: code
name: sleep
instructions: [
[adrp, x26, $frametime],
[ldr, w26, [x26, $frametime]],
[sub, w24, w26, 1],
[cmp, x0, x24],
[b, 0x1B6DD8]
]
-
type: code
name: sleep2
instructions: [
[adrp, x26, $frametime],
[ldr, w26, [x26, $frametime]],
[sub, w24, w26, 1],
[cmp, x0, x24],
[b, 0x1B6D30]
]
-
type: code
name: gpuSleep
instructions: [
[mov, x0, -2],
[svc, 0xB],
[mov, x0, 10000],
[svc, 0xB],
[ret]
]
MASTER_WRITE:
# RenderThreadWaitOnMainThread, main FPS lock
# REF: 98 46 90 52 BA 46 90 52, search for CMP X0, X24
-
type: asm_a64
main_offset: 0x1B6DD4
instructions: [
[b, _sleep()]
]
-
type: asm_a64
main_offset: 0x1B6D2C
instructions: [
[b, _sleep2()]
]
# RenderThreadWaitOnGPU
# REF: A8 B2 8C 52 08 91 A7 72
-
type: asm_a64
main_offset: 0x25C998
instructions: [
[adrp, x8, $half_frametime],
[ldr, w8, [x8, $half_frametime]]
]
# Stabilize CPU usage
-
type: asm_a64
main_offset: 0x25C9B0
instructions: [
[bl, _gpuSleep()]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,13 @@
# EA SPORTS FC 26 1.8a.e1b8
# BID: C4D335206D970E73
ALL_FPS:
# Internal FPS Lock
-
type: evaluate_write
address: [MAIN, 0xC713938, 8]
value_type: double
value: FPS_TARGET
-
type: block
what: timing

View File

@ -0,0 +1,30 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.7.0
# BID: B7431B2671E05764
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 0.035714287 # Basically = 1/28
evaluate: "1.01 / FPS_TARGET"
MASTER_WRITE:
# Redirect DR
# REF: A9 24 89 52 49 A2 A7 72, second REF
-
type: asm_a64
main_offset: 0x10F7B74
instructions: [
[adrp, x9, $dr_target],
[ldr, s1, [x9, $dr_target]],
[nop]
]
ALL_FPS:
# Disable FPS Lock
# REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it
-
type: write
address: [MAIN, 0x2FEBCD0, 0xE0, 0x294]
address_unsafe: true
value_type: uint8
value: 0

View File

@ -0,0 +1,10 @@
# Tamagotchi Plaza 1.0.9
# BID: 74908F08D86477CB
ALL_FPS:
# UnityEngine.Rendering.OnDemandRendering_TypeInfo
-
type: write
address: [MAIN, 0x7109700, 0xB8, 0]
value_type: int32
value: -1

View File

@ -0,0 +1,19 @@
# Little Nightmares III 1.1.1
# BID: 138F11463DE5DFE7
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7D55E48, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7561210, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,37 @@
# みんなのGOLF WORLD 1.1.11
# BID: CE703129D86CA47E
# Changed frametime target value math formula because default one sucks at 60 FPS target
DECLARATIONS:
-
type: variable
name: dr_frametime_max
value_type: double
default_value: 40
evaluate: "0.9 * FRAMETIME_TARGET"
-
type: variable
name: dr_frametime_min
value_type: double
default_value: 33.3333333333
evaluate: "(0.9 * FRAMETIME_TARGET) - 6"
MASTER_WRITE:
# REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e
-
type: asm_a64
main_offset: 0x39A2048
instructions: [
[adrp, x10, $dr_frametime_max],
[ldr, d1, [x10, $dr_frametime_max]],
[nop]
]
-
# REF: 00 0d 40 fd 0a 00 b8 d2, result offset + 4
type: asm_a64
main_offset: 0x39A211C
instructions: [
[adrp, x10, $dr_frametime_min],
[ldr, d1, [x10, $dr_frametime_min]],
[nop],
[nop]
]

View File

@ -0,0 +1,50 @@
# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.26.01
# BID: D3B3F636A2BF3628
# 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, 0x4B80AD8, 0x698]
address_unsafe: true
value_type: float
value: 0.0
# Unknown
-
type: write
address: [MAIN, 0x4B80AD8, 0x6A4]
address_unsafe: true
value_type: float
value: 0.0
# Game Battle Speed Factor
-
type: evaluate_write
address: [MAIN, 0x4B80AD8, 0x6B0]
address_unsafe: true
value_type: uint32
value: VSYNC_TARGET
# Cutscenes Speed Factor
-
type: evaluate_write
address: [MAIN, 0x4B80AD8, 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, 0x24A86D0]
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, 0x24843C8, 0x1844]
address_unsafe: true
value_type: float
value: "FPS_TARGET"

View File

@ -0,0 +1,37 @@
# 信長の野望・新生 1.1.7
# BID: DAE8585805CE94AC
# Cursor speed is tied to framerate
DECLARATIONS:
-
type: variable
name: fps_target
value_type: uint32
default_value: 30
evaluate: FPS_TARGET
-
type: variable
name: frametime_target
value_type: uint32
default_value: 33
evaluate: 1000 / FPS_LOCK_TARGET
-
type: variable
name: lock30
value_type: uint32
default_value: 1
evaluate: VSYNC_TARGET - 1
MASTER_WRITE:
# Min delta based on vsync + fps lock outside of cutscenes
# REF: 28 00 80 52 68 CE 00 B9 C8 03 80 D2 28 04 C0 F2
# 2nd REF: Search immediate 0x210000001E and main_offset is MOV W8, #1 above
-
type: asm_a64
main_offset: 0x12AFA18
instructions: [
[adrp, x8, $fps_target],
[ldr, w1, [x8, $lock30]],
[ldp, w8, w9, [x8]],
[str, w1, [x19, 0xCC]],
[stp, w8, w9, [x21]]
]

View File

@ -0,0 +1,37 @@
# 信長の野望・新生 with パワーアップキット 1.1.7
# BID: 91D5134A1EA382D0
# Cursor speed is tied to framerate
DECLARATIONS:
-
type: variable
name: fps_target
value_type: uint32
default_value: 30
evaluate: FPS_TARGET
-
type: variable
name: frametime_target
value_type: uint32
default_value: 33
evaluate: 1000 / FPS_LOCK_TARGET
-
type: variable
name: lock30
value_type: uint32
default_value: 1
evaluate: VSYNC_TARGET - 1
MASTER_WRITE:
# Min delta based on vsync + fps lock outside of cutscenes
# REF: 28 00 80 52 68 D2 00 B9 C8 03 80 D2 28 04 C0 F2
# 2nd REF: Search immediate 0x210000001E and main_offset is MOV W8, #1 above
-
type: asm_a64
main_offset: 0x184469C
instructions: [
[adrp, x8, $fps_target],
[ldr, w1, [x8, $lock30]],
[ldp, w8, w9, [x8]],
[str, w1, [x19, 0xD0]],
[stp, w8, w9, [x21]]
]

View File

@ -1,8 +1,6 @@
# Ghostrunner 1.8
# BID: D3DD5B220DCEB626
unsafeCheck: true
ALL_FPS:
# r.DynamicRes.FrameTimeBudget = 0.93 * (1000/FPS)
-

View File

@ -0,0 +1,10 @@
# DAVE THE DIVER 1.0.6.1224
# BID: 5D158A80EEC25473
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0xA475028, 0x50]
value_type: uint32
value: "141120000 / FPS_TARGET"

View File

@ -0,0 +1,10 @@
# DAVE THE DIVER 1.0.6.1243
# BID: D26FA1059AE0B629
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0xA475028, 0x50]
value_type: uint32
value: "141120000 / FPS_TARGET"

View File

@ -0,0 +1,18 @@
# Deer & Boy 1.3.2
# BID: 3E5F01690365FBF4
ALL_FPS:
# Vsync
# Ref: 01 00 00 00 03 00 00 00 00 00 00 08
-
type: evaluate_write
address: [MAIN, 0x9ADEAB8]
value_type: int32
value: VSYNC_TARGET
# fixedDeltaTime
# Fixes an issue with game animation targeting always 25 FPS
-
type: evaluate_write
address: [MAIN, 0x9E03A68, 0x50]
value_type: uint32
value: "141120000 / FPS_TARGET"

View File

@ -0,0 +1,34 @@
# Kingdom Rush 5.6.10
# BID: 11813C311AF1737F
MASTER_WRITE:
- # REF: vtable with string "getAverageDelta", search inside that vtable "sleep", it's above actual function, patch BLX X1 inside that function
type: bytes
main_offset: 0xF5514
value_type: uint32
value: 0xEB069E4D # BL 0x29CE50
-
type: bytes
main_offset: 0x29CE50 # Code cave
value_type: uint32
value:
- 0xE24F2008 # SUB R2, PC, #8
- 0xE30931A8 # MOVW R3, #0x91A8
- 0xE3403076 # MOVT R3, #0x0076
- 0xE0822003 # ADD R2, R2, R3 - 0x29CE50 + 0x7691A8 = 0xA05FF8
- 0xED921B00 # VLDR D1, [R2]
- 0xEEB51B40 # VCMP.F64 D1, #0.0
- 0xEEF1FA10 # VMRS APSR_nzcv, FPSCR
- 0x1EB00B41 # VMOVNE.F64 D0, D1
- 0xE12FFF11 # BX R1
-
type: bytes
main_offset: 0xA05FF8
value_type: double
value: 0
ALL_FPS:
-
type: write
address: [MAIN, 0xA05FF8]
value_type: double
value: 0.001

View File

@ -0,0 +1,34 @@
# Kingdom Rush Origins 4.2.27.1
# BID: C1A74A28CBF48C3C
MASTER_WRITE:
- # REF: vtable with string "getAverageDelta", search inside that vtable "sleep", it's above actual function, patch BLX X1 inside that function
type: bytes
main_offset: 0xF5514
value_type: uint32
value: 0xEB069E4D # BL 0x29CE50
-
type: bytes
main_offset: 0x29CE50 # Code cave
value_type: uint32
value:
- 0xE24F2008 # SUB R2, PC, #8
- 0xE30931A8 # MOVW R3, #0x91A8
- 0xE3403076 # MOVT R3, #0x0076
- 0xE0822003 # ADD R2, R2, R3 - 0x29CE50 + 0x7691A8 = 0xA05FF8
- 0xED921B00 # VLDR D1, [R2]
- 0xEEB51B40 # VCMP.F64 D1, #0.0
- 0xEEF1FA10 # VMRS APSR_nzcv, FPSCR
- 0x1EB00B41 # VMOVNE.F64 D0, D1
- 0xE12FFF11 # BX R1
-
type: bytes
main_offset: 0xA05FF8
value_type: double
value: 0
ALL_FPS:
-
type: write
address: [MAIN, 0xA05FF8]
value_type: double
value: 0.001

View File

@ -0,0 +1,28 @@
# INAZUMA ELEVEN: Victory Road 7.1.0
# BID: E97CE4B17DED638D
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: 0xCC3308
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, 0x3C34237]
value_type: uint8
value: 0

View File

@ -0,0 +1,28 @@
# INAZUMA ELEVEN: Victory Road 7.1.2
# BID: FC6538F6244CA7D5
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: 0xCC4238
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, 0x3C35237]
value_type: uint8
value: 0

View File

@ -0,0 +1,11 @@
# 亰都ザナドゥ -桜花幻舞- 1.0.4
# BID: E9E041CDF870F33C
ALL_FPS:
# Used to set min delta timing for various parts of game
# REF: C9 03 80 52 first result, look where is written
-
type: evaluate_write
address: [MAIN, 0x7E4810, 0x2C]
value_type: uint32
value: FPS_TARGET

View File

@ -0,0 +1,11 @@
# 쿄토 재너두 -앵화환무- 1.0.3
# BID: 45BFC9E681BE8A02
ALL_FPS:
# Used to set min delta timing for various parts of game
# REF: C9 03 80 52 first result, look where is written
-
type: evaluate_write
address: [MAIN, 0x7DB820, 0x2C]
value_type: uint32
value: FPS_TARGET

View File

@ -0,0 +1,168 @@
# Xenoblade Chronicles 2 3.0.0
# BID: 12A2634F01346F21
DECLARATIONS:
-
type: variable
name: last_tick
value_type: uint64
default_value: 0
-
type: variable
name: game_speed
value_type: float
default_value: 0.03333333333
-
type: variable
name: min_delta
value_type: float
default_value: 0.03333333333
evaluate: "1 / FPS_TARGET"
-
type: variable
name: max_delta
value_type: float
default_value: 30
evaluate: "FPS_TARGET / 2"
-
type: variable
name: dr_target
value_type: float
default_value: 0.0166666666
evaluate: "(1 / FPS_TARGET) / VSYNC_TARGET * 0.96"
-
type: const
name: microseconds_in_sec
value: 1000000
-
type: const
name: nano_in_micro
value: 1000
-
type: code
name: dynamicSpeed
instructions: [
[stp, x29, x30, [sp, -16], "!"],
[mov, x29, sp],
[mrs, x0, cntpct_el0],
[adrp, x2, $last_tick],
[ldr, x1, [x2, $last_tick]],
[str, x0, [x2, $last_tick]],
[cbz, x1, :goto3],
[sub, x0, x0, x1],
[bl, _convertTickToTimeSpan()],
[adrp, x1, $max_delta],
[ldr, s2, [x1, $max_delta]],
[mov, w1, $nano_in_micro],
[udiv, x0, x0, x1],
[ucvtf, s0, x0],
[mov, w1, $microseconds_in_sec],
[movk, w1, $microseconds_in_sec, 16],
[ucvtf, s1, w1],
[b, :goto2],
:goto4, [adrp, x0, 0xb90000],
[ldr, x0, [x0, 0xd0]], # REF: F4 03 00 AA 88 22 47 39 09 12 80 52, adrp + ldr below it
[cbz, x0, :goto3],
[str, s0, [x0, 0x78]],
[str, s0, [x0, 0x7c]],
[adrp, x0, 0xc23000], # REF: 29 01 40 F9 1F 01 00 F1 24 19 40 FA, two results, the one that has no RET soon after this, look at first adrp + ldr above it
[ldr, x0, [x0, 0x2c8]],
[str, s0, [x0, 0x80]],
[adrp, x0, $game_speed],
[str, s0, [x0, $game_speed]],
[b, :goto3],
:goto5, [fmov, s1, 1.0],
[fdiv, s2, s1, s2],
[fcmp, s0, s2],
[b.lt, :goto6],
[fmov, s0, s2],
[b, :goto4],
:goto6, [adrp, x0, $min_delta],
[ldr, s2, [x0, $min_delta]],
[fcmp, s0, s2],
[b.hi, :goto4],
[fmov, s0, s2],
[b, :goto4],
:goto2, [fdiv, s0, s0, s1],
[b, :goto5],
:goto3, [mov, w8, 0x21a0],
[ldp, x29, x30, [sp], 16],
[ret],
]
MASTER_WRITE:
# Dynamic speed
# Jump before pushing frame
-
type: asm_a64
main_offset: 0x7009E4
instructions: [
[bl, _dynamicSpeed()]
]
# Patch wind speed to take game speed
# REF: C6 09 26 1E C8 08 23 1E C9 08 21 1E CA 08 22 1E, adrp + ldr above
-
type: asm_a64
main_offset: 0x748658
instructions: [
[adrp, x8, $game_speed],
[ldr, s6, [x8, $game_speed]]
]
# Redirect DR timing
# REF: 74 02 40 B9 08 FD 66 D3 08 01 23 1E, LDR X8, [X8,#0xD0] below it
-
type: asm_a64
main_offset: 0x6AAABC
instructions: [
[adrp, x8, $dr_target],
[ldr, s0, [x8, $dr_target]]
]
ALL_FPS:
# REF: 0A 01 40 B9 00 01 00 B9, adrp + ldr above
-
type: evaluate_write
address: [MAIN, 0xB75C40]
value_type: uint32
value: ["VSYNC_TARGET", "VSYNC_TARGET"]
# Cutscenes in 30 FPS
# REF: 09 41 00 91 08 E1 00 91 3F D8 09 A9, any result, first STR XZR above is the offset we want
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
value_type: refresh_rate
value: 60
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [VARIABLE, min_delta]
value: 0.0333333333
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [VARIABLE, max_delta]
value: 30
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [MAIN, 0xB75C40] # VSYNC TARGET
value_type: uint32
value: [2, 2]
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [VARIABLE, dr_target]
value: 0.0166666666

View File

@ -0,0 +1,37 @@
# EVERYBODY'S GOLF: Hot Shots EUR 1.1.11
# BID: E27471D00147BA8C
# Changed frametime target value math formula because default one sucks at 60 FPS target
DECLARATIONS:
-
type: variable
name: dr_frametime_max
value_type: double
default_value: 40
evaluate: "0.9 * FRAMETIME_TARGET"
-
type: variable
name: dr_frametime_min
value_type: double
default_value: 33.3333333333
evaluate: "(0.9 * FRAMETIME_TARGET) - 6"
MASTER_WRITE:
# REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e
-
type: asm_a64
main_offset: 0x39A2058
instructions: [
[adrp, x10, $dr_frametime_max],
[ldr, d1, [x10, $dr_frametime_max]],
[nop]
]
# REF: 00 0d 40 fd 0a 00 b8 d2, result offset + 4
-
type: asm_a64
main_offset: 0x39A212C
instructions: [
[adrp, x10, $dr_frametime_min],
[ldr, d1, [x10, $dr_frametime_min]],
[nop],
[nop]
]

View File

@ -0,0 +1,168 @@
# Xenoblade2 3.0.0
# BID: FEEE7AFA8A1541BD
DECLARATIONS:
-
type: variable
name: last_tick
value_type: uint64
default_value: 0
-
type: variable
name: game_speed
value_type: float
default_value: 0.03333333333
-
type: variable
name: min_delta
value_type: float
default_value: 0.03333333333
evaluate: "1 / FPS_TARGET"
-
type: variable
name: max_delta
value_type: float
default_value: 30
evaluate: "FPS_TARGET / 2"
-
type: variable
name: dr_target
value_type: float
default_value: 0.0166666666
evaluate: "(1 / FPS_TARGET) / VSYNC_TARGET * 0.96"
-
type: const
name: microseconds_in_sec
value: 1000000
-
type: const
name: nano_in_micro
value: 1000
-
type: code
name: dynamicSpeed
instructions: [
[stp, x29, x30, [sp, -16], "!"],
[mov, x29, sp],
[mrs, x0, cntpct_el0],
[adrp, x2, $last_tick],
[ldr, x1, [x2, $last_tick]],
[str, x0, [x2, $last_tick]],
[cbz, x1, :goto3],
[sub, x0, x0, x1],
[bl, _convertTickToTimeSpan()],
[adrp, x1, $max_delta],
[ldr, s2, [x1, $max_delta]],
[mov, w1, $nano_in_micro],
[udiv, x0, x0, x1],
[ucvtf, s0, x0],
[mov, w1, $microseconds_in_sec],
[movk, w1, $microseconds_in_sec, 16],
[ucvtf, s1, w1],
[b, :goto2],
:goto4, [adrp, x0, 0xb90000],
[ldr, x0, [x0, 0xd0]], # REF: F4 03 00 AA 88 22 47 39 09 12 80 52, adrp + ldr below it
[cbz, x0, :goto3],
[str, s0, [x0, 0x78]],
[str, s0, [x0, 0x7c]],
[adrp, x0, 0xc23000], # REF: 29 01 40 F9 1F 01 00 F1 24 19 40 FA, two results, the one that has no RET soon after this, look at first adrp + ldr above it
[ldr, x0, [x0, 0x2c8]],
[str, s0, [x0, 0x80]],
[adrp, x0, $game_speed],
[str, s0, [x0, $game_speed]],
[b, :goto3],
:goto5, [fmov, s1, 1.0],
[fdiv, s2, s1, s2],
[fcmp, s0, s2],
[b.lt, :goto6],
[fmov, s0, s2],
[b, :goto4],
:goto6, [adrp, x0, $min_delta],
[ldr, s2, [x0, $min_delta]],
[fcmp, s0, s2],
[b.hi, :goto4],
[fmov, s0, s2],
[b, :goto4],
:goto2, [fdiv, s0, s0, s1],
[b, :goto5],
:goto3, [mov, w8, 0x21a0],
[ldp, x29, x30, [sp], 16],
[ret],
]
MASTER_WRITE:
# Dynamic speed
# REF: 08 34 84 52 75 02 08 8B 08 1A 84 52
-
type: asm_a64
main_offset: 0x7009E4
instructions: [
[bl, _dynamicSpeed()]
]
# Patch wind speed to take game speed
# REF: C6 09 26 1E C8 08 23 1E C9 08 21 1E CA 08 22 1E, adrp + ldr above
-
type: asm_a64
main_offset: 0x748658
instructions: [
[adrp, x8, $game_speed],
[ldr, s6, [x8, $game_speed]]
]
# Redirect DR timing
# REF: 74 02 40 B9 08 FD 66 D3 08 01 23 1E, LDR X8, [X8,#0xD0] below it
-
type: asm_a64
main_offset: 0x6AAABC
instructions: [
[adrp, x8, $dr_target],
[ldr, s0, [x8, $dr_target]]
]
ALL_FPS:
# REF: 0A 01 40 B9 00 01 00 B9, adrp + ldr above
-
type: evaluate_write
address: [MAIN, 0xB75C40]
value_type: uint32
value: ["VSYNC_TARGET", "VSYNC_TARGET"]
# Cutscenes in 30 FPS
# REF: 09 41 00 91 08 E1 00 91 3F D8 09 A9, any result, first STR XZR above is the offset we want
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
value_type: refresh_rate
value: 60
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [VARIABLE, min_delta]
value: 0.0333333333
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [VARIABLE, max_delta]
value: 30
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [MAIN, 0xB75C40] # VSYNC TARGET
value_type: uint32
value: [2, 2]
-
type: compare
compare_type: "=="
compare_value_type: uint8
compare_value: 1
compare_address: [MAIN, 0xBD8F40]
address: [VARIABLE, dr_target]
value: 0.0166666666

View File

@ -0,0 +1,36 @@
# Nobunaga's Ambition: Awakening 1.1.1
# BID: EB53655DBA49C6C8
# Cursor speed is tied to framerate
DECLARATIONS:
-
type: variable
name: fps_target
value_type: uint32
default_value: 30
evaluate: FPS_TARGET
-
type: variable
name: frametime_target
value_type: uint32
default_value: 33
evaluate: 1000 / FPS_LOCK_TARGET
-
type: variable
name: lock30
value_type: uint32
default_value: 1
evaluate: VSYNC_TARGET - 1
MASTER_WRITE:
# Min delta based on vsync + fps lock outside of cutscenes
# REF: 28 00 80 52 68 D2 00 B9 C8 03 80 D2 28 04 C0 F2
-
type: asm_a64
main_offset: 0x1991950
instructions: [
[adrp, x8, $fps_target],
[ldr, w1, [x8, $lock30]],
[ldp, w8, w9, [x8]],
[str, w1, [x19, 0xD0]],
[stp, w8, w9, [x21]]
]

Binary file not shown.

BIN
SaltySD/saltynx_core.elf Normal file

Binary file not shown.

BIN
SaltySD/saltynx_core32.elf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,6 @@
{
"ams": {
"[PACK] UltraNX 3.0|R2": "https://github.com/Ultra-NX/UltraNX/releases/latest/download/Ultra.zip"
"[PACK] UltraNX 3.0|R3+": "https://github.com/Ultra-NX/UltraNX/releases/latest/download/Ultra.zip"
},
"misc": {
"Refresh AIO": "https://github.com/Ultra-NX/Ultra-Resources/releases/download/Homebrews/AIO.zip"

View File

@ -1,14 +1,14 @@
{
"Status Monitor": "Status Monitor",
"Modes": "Режимы",
"Modes   Configure": "Режимы   Настроить",
"Modes   Configure": "Режимы   Настройка",
"Full": "Полный",
"Mini": "Мини",
"Micro": "Микро",
"FPS Graph": "График FPS",
"FPS Counter": "Счётчик FPS",
"Game Resolutions": "Разрешения игры",
"Other": "Прочее",
"Other": "Другое",
"Battery/Charger": "Аккумулятор/Зарядка",
"Miscellaneous": "Разное",
"CPU Usage": "Загрузка CPU",
@ -21,33 +21,33 @@
"Core 2 ": "Ядро 2 ",
"Core 3 ": "Ядро 3 ",
"Load": "Нагрузка",
"Total\nApplication\nApplet\nSystem\nSystem Unsafe": "Всего\nПриложение\nАпплет\nСистема\nСистема (небезопасно)",
"Total\nApplication\nApplet\nSystem\nSystem Unsafe": "Общая\nПриложение\nАпплет\nСистема\nСистем. (небез.)",
"Board": "Плата",
"Battery Power Flow": "Поток энергии аккумулятора",
"Battery Power Flow": "Мощность аккумулятора",
"\nTemperatures": "\nТемпературы",
"SoC\nPCB\nSkin": "SoC\nPCB\nSkin",
"Fan Rotation Level": "Уровень вращения вентилятора",
"Fan Rotation Level": "Скорость вентилятора",
"Game": "Игра",
"PFPS ": "PFPS ",
"FPS ": "FPS ",
"Resolutions ": "Разрешения ",
"Resolutions ": "Разрешение ",
"Read Speed ": "Скорость чтения ",
"Press ": "Нажмите ",
" to Exit": " для выхода",
"Depth": "Глубина",
"Viewport": "Viewport",
"Viewport": "Вывод",
"Game is not running\nor it's incompatible.": "Игра не запущена\nили несовместима.",
"Battery Stats": "Статистика аккумулятора",
"Actual Capacity": "Фактическая ёмкость",
"Designed Capacity": "Номинальная ёмкость",
"Battery Stats": "Состояние аккумулятора",
"Actual Capacity": "Текущая ёмкость",
"Designed Capacity": "Расчётная ёмкость",
"Temperature": "Температура",
"Raw Charge": "Сырой заряд",
"Age": "Возраст",
"Raw Charge": "Заряд (сырой)",
"Age": "Износ",
"Voltage": "Напряжение",
"Current Flow": "Ток",
"Current Flow": "Сила тока",
"Power Flow": "Мощность",
"Remaining Time": "Оставшееся время",
"Charger Stats": "Статистика зарядки",
"Charger Stats": "Состояние зарядки",
"Input Current Limit": "Лимит входного тока",
"VBUS Current Limit": "Лимит тока VBUS",
"Voltage Limit": "Лимит напряжения",
@ -61,61 +61,64 @@
"NVJPG": "NVJPG",
"Network": "Сеть",
"Type: Wi-Fi": "Тип: Wi-Fi",
"Press Y to show password": "Нажмите Y, чтобы показать пароль",
"Press Y to show password": "Нажмите Y для показа пароля",
"Type: Ethernet": "Тип: Ethernet",
"Type: Not connected": "Тип: Не подключено",
"CPU\nGPU\nRAM\nSOC\nPCB\nSKN": "CPU\nGPU\nRAM\nSOC\nPCB\nSKN",
"Elements   Move Down   Move Up": "Элементы   Вниз   Вверх",
"Elements   Move Down   Move Up": "Элементы   Вниз   Вверх",
"Transparent": "Прозрачный",
"Opaque": "Непрозрачный",
"Alpha": "Альфа",
"Alpha": "Альфа-канал",
"Pretty": "Красивый",
"Compact": "Компактный",
"FileSafe": "FileSafe",
"FileSafe": "Безопасный",
"Day+Time": "День+Время",
"Date+Time(s)": "Дата+Время(с)",
"Date+Time AM/PM": "Дата+Время AM/PM",
"Date+Time(s) AM/PM": "Дата+Время(с) AM/PM",
"Date+Time EU": "Дата+Время EU",
"Date+Time EU AM/PM": "Дата+Время EU AM/PM",
"Date+Time(s) EU AM/PM": "Дата+Время(с) EU AM/PM",
"Date+Time EU": "Дата+Время (EU)",
"Date+Time EU AM/PM": "Дата+Время (EU) AM/PM",
"Date+Time(s) EU AM/PM": "Дата+Время(с) (EU) AM/PM",
"Date+Time ISO": "Дата+Время ISO",
"Time 24h": "Время 24ч",
"Time AM/PM": "Время AM/PM",
"Time(s) 24h": "Время(с) 24ч",
"Time(s) AM/PM": "Время(с) AM/PM",
"Date US": "Дата US",
"Date EU": "Дата EU",
"Date US": "Дата (US)",
"Date EU": "Дата (EU)",
"Date ISO": "Дата ISO",
"Date Short": "Краткая дата",
"Date Short": "Короткая дата",
"DTC Format": "Формат DTC",
"Toggles": "Переключатели",
"Info": "Показать информацию",
"Disable Screenshots": "Отключить скриншоты",
"Real Freqs": "Реальные частоты",
"Deltas": "Дельты",
"Target Freqs": "Целевые частоты",
"Info": "Показывать инфо",
"Disable Screenshots": "Откл. скриншоты",
"Real Freqs": "Реал. частоты",
"Deltas": "Дельта",
"Target Freqs": "Цел. частоты",
"FPS": "FPS",
"RES": "РАЗР.",
"RES": "RES",
"Read Speed": "Скорость чтения",
"Real Frequencies": "Реальные частоты",
"Real Voltages": "Реальные напряжения",
"Full CPU": "Полный CPU",
"VDDQ": "VDDQ",
"VDD2": "VDD2",
"Stacked VDD2/VDDQ": "VDD2/VDDQ (стек)",
"Full Resolution": "Полное разрешение",
"SOC Voltage": "Напряжение SOC",
"RAM Load CPU/GPU": "Нагрузка RAM CPU/GPU",
"Use DTC Symbol": "Использовать символ DTC",
"Use Dynamic Colors": "Использовать динамические цвета",
"Stacked Fan/SOC": "Вентилятор/SOC (стек)",
"RAM Load CPU/GPU": "Загрузка RAM CPU/GPU",
"Stacked RAM Load CPU/GPU": "Загрузка RAM CPU/GPU (стек)",
"Use DTC Symbol": "Исп. символ DTC",
"Use Dynamic Colors": "Исп. динамические цвета",
"Sleep Exit": "Выход из сна",
"Configuration": "Конфигурация",
"Refresh Rate": "Частота обновления",
"Frame Padding": "Отступ кадра",
"Frame Padding": "Отступ рамки",
" Font Size": " Размер шрифта",
"Font Sizes": "Размеры шрифта",
"Handheld Font Size": "Размер шрифта в портативном режиме",
"Docked Font Size": "Размер шрифта в док-режиме",
"Handheld Font Size": "Шрифт (портативный)",
"Docked Font Size": "Шрифт (в доке)",
"Black": "Чёрный",
"Dark Gray": "Тёмно-серый",
"Gray": "Серый",
@ -137,13 +140,13 @@
"Dark Purple": "Тёмно-фиолетовый",
"Purple": "Фиолетовый",
"Light Purple": "Светло-фиолетовый",
"Violet": "Фиолетовый",
"Violet": "Лиловый",
"Orange": "Оранжевый",
"Yellow": "Жёлтый",
"Light Yellow": "Светло-жёлтый",
"Teal": "Бирюзовый",
"Cyan": "Голубой",
"Light Cyan": "Светло-голубой",
"Cyan": "Циан",
"Light Cyan": "Светлый циан",
"Magenta": "Пурпурный",
"Hot Pink": "Ярко-розовый",
"Brown": "Коричневый",
@ -162,29 +165,29 @@
"Rounded Line": "Скруглённая линия",
"Perfect Line": "Идеальная линия",
" Color": " Цвет",
" Alpha": " Прозрачность",
" Alpha": " Альфа",
"Category Color": "Цвет категории",
"Category Color 1": "Цвет категории 1",
"Category Color 2": "Цвет категории 2",
"Separator Color": "Цвет разделителя",
"Elements": "Элементы",
"Text Alignment": "Выравнивание текста",
"Vertical Position": "Вертикальная позиция",
"Horizontal Position": "Горизонтальная позиция",
"Left": "Слева",
"Right": "Справа",
"Vertical Position": "Вертикальное положение",
"Horizontal Position": "Горизонтальное положение",
"Left": "По левому краю",
"Right": "По правому краю",
"Top": "Сверху",
"Center": "По центру",
"Bottom": "Снизу",
"FPS Counter Color": "Цвет счётчика FPS",
"FPS Counter Alpha": "Прозрачность счётчика FPS",
"Border Color": "Цвет границы",
"Dashed Line Color": "Цвет пунктирной линии",
"Dashed Line Alpha": "Прозрачность пунктирной линии",
"Max FPS Text Color": "Цвет текста макс. FPS",
"Min FPS Text Color": "Цвет текста мин. FPS",
"Dashed Line Color": "Цвет пунктира",
"Dashed Line Alpha": "Прозрачность пунктира",
"Max FPS Text Color": "Цвет макс. FPS",
"Min FPS Text Color": "Цвет мин. FPS",
"Main Line Color": "Цвет основной линии",
"Rounded Line Color": "Цвет скруглённой линии",
"Rounded Line Color": "Цвет скругл. линии",
"Perfect Line Color": "Цвет идеальной линии",
"CPU": "CPU",
"GPU": "GPU",
@ -202,66 +205,66 @@
"PCB ": "PCB ",
"Skin ": "Skin ",
"Border Thickness": "Толщина границы",
"Corner Radius": "Радиус угла",
"Element Padding": "Отступ элемента",
"Horizontal Padding": "Горизонтальный отступ",
"Vertical Padding": "Вертикальный отступ",
"Corner Radius": "Скругление углов",
"Element Padding": "Внутр. отступ эл-та",
"Horizontal Padding": "Гориз. отступ",
"Vertical Padding": "Вертик. отступ",
"Label Padding": "Отступ метки",
"Paddings": "Отступы",
"Spacing": "Интервал",
"Stacked Spacing": "Интервал стека",
"Spacing": "Промежутки",
"Stacked Spacing": "Промежуток (стек)",
"Sample Rate": "Частота выборки",
"Touch Move Delay": "Задержка перем. касанием",
"Button Move Delay": "Задержка перем. кнопкой",
"Mode Combo": "Комбинация режима",
"Touch Move Delay": "Задержка касания",
"Button Move Delay": "Задержка кнопок",
"Mode Combo": "Комб. режима",
"None": "Нет",
"Global": "Общие",
"Global": "Глобальный",
"Temperatures": "Температуры",
"System": "Система",
"DTC Format 1": "Формат DTC 1",
"DTC Format 2": "Формат DTC 2",
"DTC Format 1": "DTC Формат 1",
"DTC Format 2": "DTC Формат 2",
"Target Frequencies": "Целевые частоты",
"Frequency Deltas": "Дельты частот",
"Frequency Deltas": "Дельта частот",
"Labels": "Метки",
"Stacked": "Стопкой",
"Stacked": "Стек",
"Handheld": "Портативный",
"Docked": "Док-режим",
"1080p Docked": "1080p док",
"Docked": "В доке",
"1080p Docked": "В доке (1080p)",
"Integer FPS": "Целочисленный FPS",
"Use FPS Graph": "Использовать график FPS",
"Use FPS Graph": "Исп. график FPS",
"Graph": "График",
"Graph Background": "Фон графика",
"Graph Border": "Граница графика",
"CW Border Flow": "Поток границы по часовой",
"CW Border Flow": "Поток границы (по ЧС)",
"Dynamic Border": "Динамическая граница",
"Border Wheel 1": "Колесо границы 1",
"Border Wheel 2": "Колесо границы 2",
"Border Wheel 3": "Колесо границы 3",
"Border Wheel 3 Deep": "Колесо границы 3 глубокий",
"Border Wheel 3 Deep": "Колесо границы 3 (глуб.)",
"Border Wheel 4": "Колесо границы 4",
"Border Wheel 4 Deep": "Колесо границы 4 глубокий",
"Border Wheel 4 Deep": "Колесо границы 4 (глуб.)",
"Dynamic Temps": "Динамические темп.",
"Stacked Temps": "Температуры стопкой",
"Stacked Temps": "Темп. (стек)",
"CPU/GPU/RAM Temps": "Темп. CPU/GPU/RAM",
"SOC/PCB/Skin Temps": "Темп. SOC/PCB/Skin",
"SOC/PCB/Skin Temps": "Темп. SOC/Плата/Корпус",
"CPU Temp": "Темп. CPU",
"GPU Temp": "Темп. GPU",
"RAM Temp": "Темп. RAM",
"Stacked CPU Temp": "Темп. CPU стопкой",
"Stacked GPU Temp": "Темп. GPU стопкой",
"Stacked RAM Temp": "Темп. RAM стопкой",
"Stacked Full CPU": "Полный CPU стопкой",
"Full CPU Max Core 0-2": "Полный CPU макс. ядро 0-2",
"Stacked CPU Temp": "Темп. CPU (стек)",
"Stacked GPU Temp": "Темп. GPU (стек)",
"Stacked RAM Temp": "Темп. RAM (стек)",
"Stacked Full CPU": "Полный CPU (стек)",
"Full CPU Max Core 0-2": "Полный CPU макс. ядра 0-2",
"RAM Bandwidth": "Пропускная способность RAM",
"Stacked RAM Bandwidth": "Пропускная способность RAM стопкой",
"Invert Battery Display": "Инвертировать показ батареи",
"Stacked RAM Bandwidth": "Проп. RAM (стек)",
"Invert Battery Display": "Инвертировать элемент аккумулятора",
"Voltage At End": "Напряжение в конце",
"Primary Only": "Только основное",
"Charcoal": "Угольный",
"Cool Gray": "Холодный серый",
"Off-White": "Молочно-белый",
"Warm White": "Тёплый белый",
"Slate": "Грифельный",
"Slate": "Свинцовый",
"Burgundy": "Бордовый",
"Maroon": "Тёмно-бордовый",
"Crimson": "Малиновый",
@ -278,7 +281,7 @@
"Peach": "Персиковый",
"Caramel": "Карамельный",
"Sienna": "Сиена",
"Tan": "Рыжевато-коричневый",
"Tan": "Бежевый",
"Taupe": "Серо-коричневый",
"Sand": "Песочный",
"Wheat": "Пшеничный",
@ -297,42 +300,42 @@
"Bright Green": "Ярко-зелёный",
"Sage": "Шалфейный",
"Seafoam": "Морская пена",
"Seafoam Green": "Зеленоватая пена",
"Seafoam Green": "Зелёная морская пена",
"Pale Green": "Бледно-зелёный",
"Mint": "Мятный",
"Chartreuse": "Шартрёз",
"Dark Teal": "Тёмно-бирюзовый",
"Dark Cyan": "Тёмно-голубой",
"Dark Cyan": "Тёмно-циановый",
"Cerulean": "Церулеум",
"Aqua": "Аквамарин",
"Steel Cyan": "Стальной голубой",
"Steel Cyan": "Стальной циановый",
"Navy": "Морской синий",
"Cobalt": "Кобальтовый",
"Denim": "Джинсовый",
"Slate Navy": "Грифельно-синий",
"Slate Navy": "Свинцовый синий",
"Steel Blue": "Стальной синий",
"Royal Blue": "Королевский синий",
"Azure": "Лазурно-синий",
"Azure": "Лазурный",
"Cornflower": "Васильковый",
"Ice Blue": "Ледяной голубой",
"Powder Blue": ыльно-голубой",
"Powder Blue": удрово-голубой",
"Indigo": "Индиго",
"Indigo Blue": "Индигово-синий",
"Indigo Blue": "Индиго-синий",
"Violet Blue": "Сине-фиолетовый",
"Deep Purple": "Насыщенный фиолетовый",
"Deep Purple": "Тёмно-фиолетовый",
"Periwinkle": "Барвинковый",
"Light Periwinkle": "Светло-барвинковый",
"Amethyst": "Аметистовый",
"Mauve": "Розовато-лиловый",
"Muted Mauve": "Приглушённый лиловый",
"Mauve": "Лиловый",
"Muted Mauve": "Приглуш. лиловый",
"Lavender": "Лавандовый",
"Orchid": "Орхидея",
"Plum": "Сливовый",
"Thistle": "Чертополоховый",
"Thistle": "Чертополох",
"Dark Magenta": "Тёмно-пурпурный",
"Fuchsia": "Фуксия",
"Rose": "Розово-красный",
"Dusty Rose": "Пыльная роза",
"Rose": "Розовый",
"Dusty Rose": "Пыльно-розовый",
"Baby Pink": "Нежно-розовый",
"Light Pink": "Светло-розовый",
"Petal": "Лепестковый",
@ -348,16 +351,16 @@
"Date EU Dash": "Дата EU (-)",
"Date EU Slash": "Дата EU (/)",
"Date ISO Slash": "Дата ISO (/)",
"Date Short US": "Краткая дата US",
"Date Short EU": "Краткая дата EU",
"Date Short US": "Короткая дата US",
"Date Short EU": "Короткая дата EU",
"Date Compact": "Компактная дата",
"Day + Date Short": "День недели + Краткая дата",
"Day + Date Full": "День недели + Полная дата",
"Weekday Short": "День недели кратко",
"Weekday Full": "День недели полностью",
"Month Short": "Месяц кратко",
"Month Full": "Месяц полностью",
"Month + Year": "Месяц + Год",
"Day of Year": "День года",
"Day + Date Short": "День + короткая дата",
"Day + Date Full": "День + полная дата",
"Weekday Short": "День недели (корот.)",
"Weekday Full": "День недели (полн.)",
"Month Short": "Месяц (корот.)",
"Month Full": "Месяц (полн.)",
"Month + Year": "Месяц и год",
"Day of Year": "День в году",
"Stop Watch": "Секундомер"
}

View File

@ -449,6 +449,28 @@ home=13
lstick_click=11
rstick_click=12
#[0f0d-00c1] ;Retro-bit SEGA Saturn Wireless 8-Button Arcade
#;Preserves correct Mega Drive 6-button layout in Nintendo Switch Online Mega Drive
#;Keeps NSO suspend menu accessible via Saturn L+R
#;Provides a sensible default for NSO SNES/GBA/GB/NES without per-game remapping:
#; X
#; Switch Y A becomes Saturn L X R
#; B Y B A
#b=2
#a=8
#x=1
#y=3
#l=4
#r=7
#zl=5
#zr=6
#minus=9
#plus=10
#capture=14
#home=13
#lstick_click=11
#rstick_click=12
#[0f0d-00c1] ; KIWITATA N64 USB Mini Controller
#a=3,10
#l=5
@ -639,6 +661,20 @@ r=6
minus=7
plus=8
[0d22-0c20] ;MSI GC20
b=2
a=3
x=4
y=1
l=5
r=6
zl=7
zr=8
minus=9
plus=10
lstick_click=11
rstick_click=12
[0d22-0c31] ; MSI GC30 V2 USB cable
b=2
a=3
@ -749,6 +785,22 @@ rstick_right=Z
rstick_up=Rz
rstick_down=-Rz
[06f7-0001] ;Adaptoid
a=1
b=4
l=7
r=8
plus=9
zl=10
dpad_up=11
dpad_down=12
dpad_left=13
dpad_right=14
rstick_up=2
rstick_down=6
rstick_left=5
rstick_right=3
[18d1-9400] ;Google Stadia Controller
b=1
a=2
@ -762,6 +814,8 @@ minus=11
plus=12
capture=17
home=18
lstick_click=14
rstick_click=15
[2dc8-301c] ;8bitdo Ultimate 2C Wireless Dongle
A=1

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,6 @@
[ultrahand]
clean_version_labels=false
current_sounds=official
current_theme=Ultra Paw
datetime_format='%a %T'
default_lang=en

View File

@ -24,10 +24,10 @@
"HIDDEN": "Скрыто",
"HIDE_OVERLAY": "Скрыть оверлей",
"HIDE_PACKAGE": "Скрыть пакет",
"LAUNCH_ARGUMENTS": "Параметры запуска",
"LAUNCH_ARGUMENTS": "Аргументы запуска",
"FORCE_AMS110_SUPPORT": "Форсировать AMS110+",
"QUICK_LAUNCH": "Быстрый запуск",
"BOOT_COMMANDS": "Команды загрузки",
"BOOT_COMMANDS": "Команды запуска",
"EXIT_COMMANDS": "Команды выхода",
"ERROR_LOGGING": "Журнал ошибок",
"COMMANDS": "Команды",
@ -40,73 +40,73 @@
"WIDGET_SETTINGS": "Настройки виджета",
"CLOCK": "Часы",
"BATTERY": "Аккумулятор",
"SOC_TEMPERATURE": "Темп. SOC",
"PCB_TEMPERATURE": "Темп. PCB",
"SOC_TEMPERATURE": "Температура SOC",
"PCB_TEMPERATURE": "Температура PCB",
"BACKDROP": "Фон",
"BORDER": "Граница",
"DYNAMIC_BORDER": "Динамическая граница",
"DYNAMIC_TEMPS": "Динамические температуры",
"CENTER_ALIGNMENT": "По центру",
"CENTER_ALIGNMENT": "Выравнивание по центру",
"EXTENDED_BACKDROP": "Расширенный фон",
"MISCELLANEOUS": "Прочее",
"MISCELLANEOUS": "Разное",
"INPUT_SETTINGS": "Настройки ввода",
"LAUNCH_COMBOS": "Комбо запуска",
"SWIPE_TO_OPEN": "Свайп для открытия",
"HAPTIC_FEEDBACK": "Виброотклик",
"STICK_NAVIGATION": "Навигация стиком",
"HOLD_DURATION": "Время удержания",
"LAUNCH_COMBOS": "Комбинации запуска",
"SWIPE_TO_OPEN": "Открытие свайпом",
"HAPTIC_FEEDBACK": "Тактильная отдача",
"STICK_NAVIGATION": "Навигация стиками",
"HOLD_DURATION": "Длительность удержания",
"FEATURE_SETTINGS": "Настройки функций",
"OPAQUE_SCREENSHOTS": "Непрозрачные скриншоты",
"RIGHT_SIDE_MODE": "Режим справа",
"NTP_SYNC_DOWNLOADS": "Загрузки NTP Sync",
"RIGHT_SIDE_MODE": "Режим с правой стороны",
"NTP_SYNC_DOWNLOADS": "Синхронизация NTP при загрузках",
"MENU_SETTINGS": "Настройки меню",
"PACKAGES_MENU": "Меню пакетов",
"USER_GUIDE": "Руководство",
"SHOW_HIDDEN": "Показать скрытые",
"SHOW_DELETE": "Показать удаление",
"SHOW_UNSUPPORTED": "Показать неподдерживаемые",
"SHOW_HIDDEN": "Показывать скрытые",
"SHOW_DELETE": "Показывать удаление",
"SHOW_UNSUPPORTED": "Показывать неподдерживаемые",
"PAGE_SWAP": "Смена страницы",
"OVERLAY_VERSIONS": "Версии оверлеев",
"PACKAGE_VERSIONS": "Версии пакетов",
"CLEAN_VERSIONS": "Скрыть (v)",
"CLEAN_VERSIONS": "Чистые версии",
"THEME_SETTINGS": "Настройки темы",
"SWITCH_2_STYLE": "Стиль Switch 2",
"DYNAMIC_LOGO": "Динамический логотип",
"DYNAMIC_TABLES": "Динамические таблицы",
"SELECTION_BACKGROUND": "Фон выделения",
"SELECTION_TEXT": "Текст выделения",
"SELECTION_VALUE": "Значение",
"SELECTION_VALUE": "Значение выделения",
"LIBULTRAHAND_TITLES": "Заголовки libultrahand",
"LIBULTRAHAND_VERSIONS": "Версии libultrahand",
"PACKAGE_TITLES": "Заголовки пакетов",
"IN_PACKAGE_TITLES": "Внутрипакетные заголовки",
"KEY_COMBO": "Комбинация",
"IN_PACKAGE_TITLES": "Заголовки внутри пакетов",
"KEY_COMBO": "Комб. клавиш",
"MODE": "Режим",
"LAUNCH_MODES": "Режимы запуска",
"LANGUAGE": "Язык",
"OVERLAY_INFO": "Инфо оверлея",
"SOFTWARE_UPDATE": "Обновления",
"OVERLAY_INFO": "Информация об оверлее",
"SOFTWARE_UPDATE": "Обновление ПО",
"UPDATE_ULTRAHAND": "Обновить Ultrahand",
"SYSTEM": "Система",
"DEVICE_INFO": "О устройстве",
"DEVICE_INFO": "Информация об устройстве",
"FIRMWARE": "Прошивка",
"BOOTLOADER": "Загрузчик",
"HARDWARE": "Оборудование",
"MEMORY": "Память",
"VENDOR": "Производитель",
"MODEL": "Модель",
"STORAGE": "Хранилище",
"STORAGE": "Накопитель",
"INCOMPATIBLE_WARNING": "Несовместимо с AMS v1.10+",
"OVERLAY_DOES_NOT_EXIST": "Оверлей не найден!",
"SYSTEM_RAM": "ОЗУ системы",
"FREE": "свободно",
"SYSTEM_RAM": "Системная RAM",
"FREE": "FREE",
"OVERLAY_MEMORY": "Память оверлея",
"NOT_ENOUGH_MEMORY": "Недостаточно памяти",
"WALLPAPER_SUPPORT_DISABLED": "Обои выключены",
"SOUND_SUPPORT_DISABLED": "Звук выключен",
"WALLPAPER_SUPPORT_ENABLED": "Обои включены",
"SOUND_SUPPORT_ENABLED": "Звук включён",
"EXIT_OVERLAY_SYSTEM": "Выйти из оверлеев",
"NOT_ENOUGH_MEMORY": "Недостаточно памяти.",
"WALLPAPER_SUPPORT_DISABLED": "Поддержка обоев отключена",
"SOUND_SUPPORT_DISABLED": "Поддержка звука отключена",
"WALLPAPER_SUPPORT_ENABLED": "Поддержка обоев включена",
"SOUND_SUPPORT_ENABLED": "Поддержка звука включена",
"EXIT_OVERLAY_SYSTEM": "Выйти из системы оверлеев",
"ULTRAHAND_ABOUT": "Ultrahand Overlay — это настраиваемая экосистема оверлеев для команд, оверлеев, горячих клавиш и расширенного взаимодействия с системой.",
"ULTRAHAND_CREDITS_START": "Особая благодарность ",
"ULTRAHAND_CREDITS_END": " и многим другим. ♥",
@ -114,7 +114,7 @@
"WALLPAPER": "Обои",
"THEME": "Тема",
"SOUNDS": "Звуки",
"DEFAULT": "стандарт",
"DEFAULT": "по умолчанию",
"ROOT_PACKAGE": "Корневой пакет",
"SORT_PRIORITY": "Приоритет сортировки",
"OPTIONS": "Опции",
@ -123,21 +123,21 @@
"NOTIFICATION_SETTINGS": "Настройки уведомлений",
"SILENCE_NOTIFICATIONS": "Отключить уведомления",
"STARTUP_NOTIFICATION": "Уведомление при запуске",
"MAX_SLOTS": "Макс. слоты",
"MAX_SLOTS": "Макс. слотов",
"API_NOTIFICATIONS": "Уведомления API",
"API_TOGGLE_HOTKEY": "Горячая клавиша API",
"DISMISS_NOTIFICATION": "Закрыть уведомление",
"DISMISS_NOTIFICATION": "Отклонить уведомление",
"API_TOGGLE": "Переключить API",
"CLICK": "клик",
"TAP": "тап",
"HOLD_FOR_4S": "удерживать 4 с",
"HOLD_FOR_4S": "удерживать 4с",
"ON": "Вкл",
"OFF": "Выкл",
"PACKAGE_INFO": "Инфо пакета",
"PACKAGE_INFO": "Информация о пакете",
"_TITLE": "Название",
"_VERSION": "Версия",
"_CREATOR": "Автор(ы)",
"_ABOUT": "О прг.",
"_ABOUT": "О прогр.",
"_CREDITS": "Спасибо",
"OK": "ОК",
"BACK": "Назад",
@ -163,7 +163,7 @@
"DELETE_PACKAGE": "Удалить пакет",
"DELETE_OVERLAY": "Удалить оверлей",
"SELECTION_IS_EMPTY": "Выбор пуст!",
"FORCED_SUPPORT_WARNING": "Принудительная поддержка опасна",
"FORCED_SUPPORT_WARNING": "Принудительная поддержка может быть опасна.",
"TASK_IS_COMPLETE": "Задача выполнена!",
"TASK_HAS_FAILED": "Задача провалена",
"SUNDAY": "Воскресенье",

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.