mirror of
https://github.com/Ultra-NX/UltraNX.git
synced 2024-12-25 18:11:56 +00:00
Ultra 2.3|R2+
This commit is contained in:
parent
b9b4dd45c0
commit
65461efd23
@ -0,0 +1,27 @@
|
||||
# Gori: Cuddly Carnage 1.0.7
|
||||
# BID: A21FFE97D09DCE4E
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A02E68, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A3C938, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6245AA8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,33 @@
|
||||
# Jujutsu Kaisen Cursed Clash US 1.4.0
|
||||
# BID: 7C724F497564C027
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8458A48, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x849BF50, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x77DD548, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x849B7A8, 0x9C4]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.1.3
|
||||
# BID: 3889588A60E1F399
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8EA4728, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8EDF1F0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x86DEEC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# SWORD ART ONLINE Fractured Daydream JAP 1.1.2
|
||||
# BID: 520620FBA0B196A3
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8E95728, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8ED01F0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x86CFEC8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Grand Theft Auto: Vice City - Definitive Edition 1.0.8
|
||||
# BID: 9151E53EE514B03A
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (Default is 36.5 ms)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7608988, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x762D640, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6E7AA00, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -8,17 +8,17 @@ ALL_FPS:
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D15228]
|
||||
value_type: int32
|
||||
value: [FPS_LOCK_TARGET, "1"]
|
||||
value: [FPS_LOCK_TARGET, VSYNC_TARGET]
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D28CB8]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2A88DC0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
value: "VSYNC_TARGET - 1"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
|
@ -0,0 +1,27 @@
|
||||
# Expeditions: A Mudrunner Game 1.12.0.0
|
||||
# BID: 225B47BDEC7C2D4E
|
||||
# REF: 01 04 0C 5E 00 10 2E 1E
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect DR frametime target to MAIN+0x3623F00
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x16AB5C0
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0x9000FBCC
|
||||
- 0xBD4F0182
|
||||
# default value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x3623F00
|
||||
value_type: float
|
||||
value: 33.3333333333
|
||||
ALL_FPS:
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x3623F00]
|
||||
value_type: float
|
||||
value: FRAMETIME_TARGET
|
@ -0,0 +1,33 @@
|
||||
# Jujutsu Kaisen Cursed Clash JP 1.4.0
|
||||
# BID: 7C724F497564C027
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8458A48, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x849BF50, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x77DD548, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x849B7A8, 0x9C4]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -3,22 +3,6 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect reading DR timing in DynamicResolution::UpdateResolution() to MAIN + 0xC88AF00
|
||||
# only for handheld (default handheld: 31.25 ms, docked: 46.875 ms - probably to block DR from working without disabling it)
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x74F5118
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xB0029CA8
|
||||
- 0xB94F0108
|
||||
# Default handheld value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xC88AF00
|
||||
value_type: uint32
|
||||
value: 600000
|
||||
ALL_FPS:
|
||||
# fixedDeltaTime = 1/FPS
|
||||
-
|
||||
@ -31,9 +15,3 @@ ALL_FPS:
|
||||
address: [MAIN, 0xC809DA0, 0x100]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
# Dynamic Resolution Timing = (0.9375/FPS) * 19200000
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xC88AF00]
|
||||
value_type: uint32
|
||||
value: "(0.9375 / FPS_TARGET) * 19200000"
|
||||
|
@ -3,22 +3,6 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect reading DR timing in DynamicResolution::UpdateResolution() to MAIN + 0xC8C2F00
|
||||
# only for handheld (default handheld: 31.25 ms, docked: 46.875 ms - probably to block DR from working without disabling it)
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x74BF438
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xF002A008
|
||||
- 0xB94F0108
|
||||
# Default handheld value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xC8C2F00
|
||||
value_type: uint32
|
||||
value: 600000
|
||||
ALL_FPS:
|
||||
# fixedDeltaTime = 1/FPS
|
||||
-
|
||||
@ -31,9 +15,3 @@ ALL_FPS:
|
||||
address: [MAIN, 0xC841820, 0x100]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
# Dynamic Resolution Timing = (0.9375/FPS) * 19200000
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xC8C2F00]
|
||||
value_type: uint32
|
||||
value: "(0.9375 / FPS_TARGET) * 19200000"
|
||||
|
@ -3,22 +3,6 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect reading DR timing in DynamicResolution::UpdateResolution() to MAIN + 0xC8CBF00
|
||||
# only for handheld (default handheld: 31.25 ms, docked: 46.875 ms - probably to block DR from working without disabling it)
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x74ADA58
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xD002A0E8
|
||||
- 0xB94F0108
|
||||
# Default handheld value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xC8CBF00
|
||||
value_type: uint32
|
||||
value: 600000
|
||||
ALL_FPS:
|
||||
# fixedDeltaTime = 1/FPS
|
||||
-
|
||||
@ -31,9 +15,3 @@ ALL_FPS:
|
||||
address: [MAIN, 0xC84AD60, 0x100]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
# Dynamic Resolution Timing = (0.9375/FPS) * 19200000
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xC8CBF00]
|
||||
value_type: uint32
|
||||
value: "(0.9375 / FPS_TARGET) * 19200000"
|
||||
|
@ -3,22 +3,6 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect reading DR timing in DynamicResolution::UpdateResolution() to MAIN + 0xC8CBF00
|
||||
# only for handheld (default handheld: 31.25 ms, docked: 46.875 ms - probably to block DR from working without disabling it)
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x78910F8
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xD00281C8
|
||||
- 0xB94F0108
|
||||
# Default handheld value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xC8CBF00
|
||||
value_type: uint32
|
||||
value: 600000
|
||||
ALL_FPS:
|
||||
# fixedDeltaTime = 1/FPS
|
||||
-
|
||||
@ -31,9 +15,3 @@ ALL_FPS:
|
||||
address: [MAIN, 0xC84AD20, 0x100]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
# Dynamic Resolution Timing = (0.9375/FPS) * 19200000
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xC8CBF00]
|
||||
value_type: uint32
|
||||
value: "(0.9375 / FPS_TARGET) * 19200000"
|
||||
|
@ -3,22 +3,6 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect reading DR timing in DynamicResolution::UpdateResolution() to MAIN + 0xC8CBF00
|
||||
# only for handheld (default handheld: 31.25 ms, docked: 46.875 ms - probably to block DR from working without disabling it)
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x74AD958
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xD002A0E8
|
||||
- 0xB94F0108
|
||||
# Default handheld value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0xC8CBF00
|
||||
value_type: uint32
|
||||
value: 600000
|
||||
ALL_FPS:
|
||||
# fixedDeltaTime = 1/FPS
|
||||
-
|
||||
@ -31,9 +15,3 @@ ALL_FPS:
|
||||
address: [MAIN, 0xC84AD60, 0x100]
|
||||
value_type: float
|
||||
value: 0.0666666666
|
||||
# Dynamic Resolution Timing = (0.9375/FPS) * 19200000
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xC8CBF00]
|
||||
value_type: uint32
|
||||
value: "(0.9375 / FPS_TARGET) * 19200000"
|
||||
|
@ -0,0 +1,37 @@
|
||||
# REYNATIS (US/EU) 1.0.5
|
||||
# BID: C370209AECC8D2FB
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C0DF00
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x30A752C
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xD0025B34 # to update with newer updates
|
||||
- 0xFD478281 # to update if offset 0xF00 is still not enough
|
||||
- 0x1E612010
|
||||
- 0x2D482269
|
||||
- 0x540002CD # branch possible to update with newer updates
|
||||
- 0xBD40626A
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x30A7594
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xFD478681 # to update if offset 0xF00+8 is still not enough
|
||||
# Default handheld value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x7C0DF00
|
||||
value_type: double
|
||||
value: [31, 29]
|
||||
ALL_FPS:
|
||||
# Dynamic Resolution Timing
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7C0DF00]
|
||||
value_type: double
|
||||
value: ["(0.9 * FRAMETIME_TARGET) + 1", "(0.9 * FRAMETIME_TARGET) - 1"]
|
@ -0,0 +1,12 @@
|
||||
# EA SPORTS FC 25 1.75.48c1
|
||||
# BID: 25636E9F2595CFFD
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Internal FPS Lock
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xCE06A68, 8]
|
||||
value_type: double
|
||||
value: FPS_TARGET
|
@ -0,0 +1,27 @@
|
||||
# Grand Theft Auto: San Andreas - Definitive Edition 1.0.8
|
||||
# BID: B898981D361D0201
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (Default is 36.5 ms)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x79B5988, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x79DA640, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7228260, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,21 @@
|
||||
# Grounded 1.11
|
||||
# BID: F89171E031F95ADC
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8E3C418, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8E62560, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,21 @@
|
||||
# Twilight Survivors 1.0.9
|
||||
# BID: 66FCB9B306005BBA
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6570898, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5D74998, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# F1 Manager 2024 1.9
|
||||
# BID: 1BFD68BCB8481BC9
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7FC8A28, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8002AA0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7805AA8, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,33 @@
|
||||
# Stray 1.6.0
|
||||
# BID: 109D974E180A5AA1
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x5DC7368, 0x7A4]
|
||||
value_type: int32
|
||||
value: 7
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x55CB068, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5D99F08, 0]
|
||||
value_type: float
|
||||
value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5DC7C88, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,47 @@
|
||||
# DRAGON BALL XENOVERSE 2 FOR NINTENDO SWITCH 1.23.00
|
||||
# BID: 1B58983BDFAE165A
|
||||
# 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
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
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, 0x4AE9D78, 0x698]
|
||||
value_type: float
|
||||
value: 0.0
|
||||
# Unknown
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x4AE9D78, 0x6A4]
|
||||
value_type: float
|
||||
value: 0.0
|
||||
# Game Battle Speed Factor
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4AE9D78, 0x6B0]
|
||||
value_type: uint32
|
||||
value: VSYNC_TARGET
|
||||
# Cutscenes Speed Factor
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4AE9D78, 0x6B4]
|
||||
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, 0x24151D0]
|
||||
value_type: float
|
||||
value: "(1 / FPS_TARGET) / VSYNC_TARGET"
|
||||
# Dynamic Resolution FPS Target
|
||||
# REF: 16 4E A8 52 F7 03 60 B2, LDR above that
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x23F53C0, 0x1844]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
@ -3,22 +3,80 @@
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Block updating values
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4F3D68
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4F3D7C
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4F3D8C
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4F3D94
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4D8748
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4D8754
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4D8760
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4D876C
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
# Default 30 FPS values
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1D584F8
|
||||
value_type: int32
|
||||
value: [30, 2]
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1D6BFA0
|
||||
value_type: float
|
||||
value: 30
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x2AEFB30
|
||||
value_type: uint32
|
||||
value: 1
|
||||
ALL_FPS:
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D584F8]
|
||||
value_type: int32
|
||||
value: [FPS_LOCK_TARGET, "1"]
|
||||
value: [FPS_TARGET, VSYNC_TARGET]
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D6BFA0]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2AEFB30]
|
||||
value_type: int32
|
||||
value: 0
|
||||
value: "VSYNC_TARGET - 1"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
|
@ -0,0 +1,32 @@
|
||||
# No Man's Sky 5.2.5
|
||||
# BID: 184D48D1AFF6A941
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect DR frametime target to MAIN+0x4963F00
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1F9BD08
|
||||
value_type: uint32
|
||||
value: 0xD503201F
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x1F9BD14
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0x90014E52
|
||||
- 0xB9400408
|
||||
- 0xBD4F0240
|
||||
# default value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x4963F00
|
||||
value_type: float
|
||||
value: 33.3333333333
|
||||
ALL_FPS:
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x4963F00]
|
||||
value_type: float
|
||||
value: FRAMETIME_TARGET
|
@ -0,0 +1,33 @@
|
||||
# Jujutsu Kaisen Cursed Clash EUR 1.4.0
|
||||
# BID: 7C724F497564C027
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x8458A48, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x849BF50, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x77DD548, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x849B7A8, 0x9C4]
|
||||
value_type: uint32
|
||||
value: 7
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,12 @@
|
||||
# SpongeBob SquarePants: The Patrick Star Game 1.0.2
|
||||
# BID: 222C0A2546723943
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A54CF8, 0x48]
|
||||
value_type: float
|
||||
value: "1 / FPS_TARGET"
|
@ -0,0 +1,12 @@
|
||||
# DAVE THE DIVER 1.0.3.957
|
||||
# BID: 491561854A6DC444
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x97343C0, 0x48]
|
||||
value_type: float
|
||||
value: "1 / FPS_TARGET"
|
@ -8,17 +8,17 @@ ALL_FPS:
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D07538]
|
||||
value_type: int32
|
||||
value: [FPS_LOCK_TARGET, "1"]
|
||||
value: [FPS_TARGET, VSYNC_TARGET]
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x1D1AFC8]
|
||||
value_type: float
|
||||
value: FPS_TARGET
|
||||
-
|
||||
type: write
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x2A7A8D0]
|
||||
value_type: int32
|
||||
value: 0
|
||||
value: "VSYNC_TARGET - 1"
|
||||
-
|
||||
type: block
|
||||
what: timing
|
||||
|
@ -0,0 +1,27 @@
|
||||
# HOT WHEELS UNLEASHED 1.0.14
|
||||
# BID: A7F32A28D882D046
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9A10988, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x9A3E4E0, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x92726B0, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,42 @@
|
||||
# DOOM Eternal 1.15
|
||||
# BID: 3AAA4D3E5A1A0F88
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# rs_force460 (default)
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x78DAC38, 8]
|
||||
value_type: int32
|
||||
value: 1
|
||||
# rs_raiseThreshold = 0.948 * (30/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x78DA3C8, 0xC]
|
||||
value_type: float
|
||||
value: "(30 / FPS_TARGET) * 0.948"
|
||||
# rs_dropThreshold = 0.97 * (30/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x78DA350, 0xC]
|
||||
value_type: float
|
||||
value: "(30 / FPS_TARGET) * 0.97"
|
||||
# rs_raiseMilliseconds = 0.96 * (1000/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x78D9F78, 0xC]
|
||||
value_type: float
|
||||
value: "0.96 * FRAMETIME_TARGET"
|
||||
# rs_dropMilliseconds = 0.99 * (1000/FPS)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x78D9F00, 0xC]
|
||||
value_type: float
|
||||
value: "0.99 * FRAMETIME_TARGET"
|
||||
# com_adaptiveTickMaxHz (default)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x6A12F38, 8]
|
||||
value_type: int32
|
||||
value: FPS_TARGET
|
@ -0,0 +1,21 @@
|
||||
# Life is Strange: Double Exposure 1.0.1
|
||||
# BID: C4DD7E5256163FF1
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x68FCE90, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x790A2E8, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,21 @@
|
||||
# Garden Witch Life 1.0.4
|
||||
# BID: CFC1C6A56575F83A
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x863C140, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x7644978, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,14 @@
|
||||
# Ys X: Nordics US/EU 1.0.3
|
||||
# BID: C55F6B8AEFA54324
|
||||
# Credits to StevensND for finding assembly instruction from which I have derived pointer address
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Used to set min delta timing for various parts of game + DR target
|
||||
# REF: C9 03 80 52 C1 03 80 52 first ADRP above it
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0xC50788, 0x34]
|
||||
value_type: uint32
|
||||
value: FPS_TARGET
|
@ -0,0 +1,33 @@
|
||||
# Poppy Playtime: Chapter 3 1.0.0.2
|
||||
# BID: 5AF163DEF288F098
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# Disable bUseFixedFrameRate
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x778C438, 0xAA4]
|
||||
value_type: int32
|
||||
value: 6
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x676D6E8, 0]
|
||||
value_type: int32
|
||||
value: [0, 0]
|
||||
# r.DynamicRes.FrameTimeBudget
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7754230, 0]
|
||||
value_type: float
|
||||
value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x778D990, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -0,0 +1,27 @@
|
||||
# Grand Theft Auto III - Definitive Edition 1.0.8
|
||||
# BID: BB2DDA80E83D0B2F
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# r.DynamicRes.FrameTimeBudget (Default is 36.5 ms)
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x755F988, 0]
|
||||
value_type: float
|
||||
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
|
||||
# t.MaxFPS
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x7584640, 0]
|
||||
value_type: float
|
||||
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
|
||||
# r.VSync
|
||||
-
|
||||
type: write
|
||||
address: [MAIN, 0x6DD2210, 0]
|
||||
value_type: uint32
|
||||
value: [0, 0]
|
||||
-
|
||||
type: block
|
||||
what: timing
|
@ -1,4 +1,4 @@
|
||||
# Europa 1.3.0
|
||||
# Europa 1.4.0
|
||||
# BID: 3F2E96A4396944A1
|
||||
|
||||
unsafeCheck: true
|
||||
|
@ -0,0 +1,13 @@
|
||||
# Ancient Weapon Holly 1.7.1
|
||||
# BID: 3BBD72F0EB13C1AE
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
ALL_FPS:
|
||||
# UnityEngine.Time::fixedDeltaTime
|
||||
# Required for main character to not have jittery movement
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x5538BA0, 0x48]
|
||||
value_type: float
|
||||
value: "1 / FPS_TARGET"
|
@ -0,0 +1,27 @@
|
||||
# SnowRunner 1.0.35
|
||||
# BID: 9976A5B49537F7D7
|
||||
# Just search for 0x42055555
|
||||
|
||||
unsafeCheck: true
|
||||
|
||||
MASTER_WRITE:
|
||||
# Redirect DR frametime target to MAIN+0x3041F00
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x18F82B4
|
||||
value_type: uint32
|
||||
value:
|
||||
- 0xB000BA4A
|
||||
- 0xBD4F0142
|
||||
# default value
|
||||
-
|
||||
type: bytes
|
||||
main_offset: 0x3041F00
|
||||
value_type: float
|
||||
value: 33.3333333333
|
||||
ALL_FPS:
|
||||
-
|
||||
type: evaluate_write
|
||||
address: [MAIN, 0x3041F00]
|
||||
value_type: float
|
||||
value: FRAMETIME_TARGET
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -3,6 +3,6 @@
|
||||
"[PACK] UltraNX": "https://github.com/Ultra-NX/Ultra/releases/latest/download/Ultra.zip"
|
||||
},
|
||||
"misc": {
|
||||
"Refresh AIO": "https://github.com/Ultra-NX/Ultra/releases/latest/download/AIO.zip"
|
||||
"Refresh AIO": "https://github.com/Ultra-NX/Ultra-Resources/releases/download/Homebrews/AIO.zip"
|
||||
}
|
||||
}
|
@ -9,17 +9,19 @@ click_alpha=7
|
||||
click_color=#00AAFF
|
||||
click_text_color=#000000
|
||||
clock_color=#FFFFFF
|
||||
default_overlay_color=#FFFFFF
|
||||
default_package_color=#00FF00
|
||||
default_script_color=#FF33FF
|
||||
disable_colorful_logo=false
|
||||
disable_selection_bg=true
|
||||
dynamic_logo_color_1=#00AAFF
|
||||
dynamic_logo_color_2=#FFFFFF
|
||||
header_separator_color=#FFFFFF
|
||||
header_text_color=#FFFFFF
|
||||
highlight_color_1=#2288CC
|
||||
highlight_color_2=#88FFFF
|
||||
highlight_color_3=#FFFF45
|
||||
highlight_color_4=#00FF99
|
||||
highlight_color_1=#00AAFF
|
||||
highlight_color_2=#FFFFFF
|
||||
highlight_color_3=#00AAFF
|
||||
highlight_color_4=#FFFFFF
|
||||
inprogress_text_color=#00FF99
|
||||
invalid_text_color=#FF0000
|
||||
invert_bg_click_color=false
|
||||
@ -38,12 +40,12 @@ seperator_color=#777777
|
||||
star_color=#FFFFFF
|
||||
table_bg_alpha=10
|
||||
table_bg_color=#303030
|
||||
table_info_text_color=#00DDFF
|
||||
table_info_text_color=#AADDFF
|
||||
table_section_text_color=#FFFFFF
|
||||
text_color=#FFFFFF
|
||||
trackbar_color=#555555
|
||||
trackbar_empty_color=#404040
|
||||
trackbar_full_color=#00FFDD
|
||||
trackbar_full_color=#AADDFF
|
||||
trackbar_slider_border_color=#505050
|
||||
trackbar_slider_color=#606060
|
||||
trackbar_slider_malleable_color=#A0A0A0
|
||||
|
@ -9,7 +9,9 @@ click_alpha=7
|
||||
click_color=#00AAFF
|
||||
click_text_color=#000000
|
||||
clock_color=#FFFFFF
|
||||
default_overlay_color=#FFFFFF
|
||||
default_package_color=#00FF00
|
||||
default_script_color=#FF33FF
|
||||
disable_colorful_logo=true
|
||||
disable_selection_bg=false
|
||||
dynamic_logo_color_1=#00AAFF
|
||||
@ -18,8 +20,8 @@ header_separator_color=#FFFFFF
|
||||
header_text_color=#FFFFFF
|
||||
highlight_color_1=#2288CC
|
||||
highlight_color_2=#88FFFF
|
||||
highlight_color_3=#FFFF45
|
||||
highlight_color_4=#F7253E
|
||||
highlight_color_3=#FFFFFF
|
||||
highlight_color_4=#88FFFF
|
||||
inprogress_text_color=#FFFF45
|
||||
invalid_text_color=#FF0000
|
||||
invert_bg_click_color=false
|
||||
@ -27,6 +29,8 @@ logo_color_1=#FFFFFF
|
||||
logo_color_2=#FFFFFF
|
||||
off_text_color=#CCAAAA
|
||||
on_text_color=#999999
|
||||
progress_alpha=7
|
||||
progress_color=#777777
|
||||
selection_bg_alpha=13
|
||||
selection_bg_color=#000000
|
||||
selection_star_color=#FFFFFF
|
||||
@ -36,7 +40,7 @@ seperator_color=#777777
|
||||
star_color=#FFFFFF
|
||||
table_bg_alpha=10
|
||||
table_bg_color=#303030
|
||||
table_info_text_color=#999999
|
||||
table_info_text_color=#AAEEFF
|
||||
table_section_text_color=#FFFFFF
|
||||
text_color=#FFFFFF
|
||||
trackbar_color=#555555
|
||||
@ -46,3 +50,4 @@ trackbar_slider_border_color=#505050
|
||||
trackbar_slider_color=#606060
|
||||
trackbar_slider_malleable_color=#A0A0A0
|
||||
version_text_color=#AAAAAA
|
||||
warning_text_color=#FF7777
|
||||
|
@ -9,17 +9,19 @@ click_alpha=7
|
||||
click_color=#00AAFF
|
||||
click_text_color=#000000
|
||||
clock_color=#FFFFFF
|
||||
default_overlay_color=#FFFFFF
|
||||
default_package_color=#00FF00
|
||||
default_script_color=#FF33FF
|
||||
disable_colorful_logo=false
|
||||
disable_selection_bg=true
|
||||
dynamic_logo_color_1=#00AAFF
|
||||
dynamic_logo_color_2=#FFFFFF
|
||||
header_separator_color=#FFFFFF
|
||||
header_text_color=#FFFFFF
|
||||
highlight_color_1=#2288CC
|
||||
highlight_color_2=#88FFFF
|
||||
highlight_color_3=#FFFF45
|
||||
highlight_color_4=#00FF99
|
||||
highlight_color_1=#00AAFF
|
||||
highlight_color_2=#FFFFFF
|
||||
highlight_color_3=#00AAFF
|
||||
highlight_color_4=#FFFFFF
|
||||
inprogress_text_color=#00FF99
|
||||
invalid_text_color=#FF0000
|
||||
invert_bg_click_color=false
|
||||
@ -38,12 +40,12 @@ seperator_color=#777777
|
||||
star_color=#FFFFFF
|
||||
table_bg_alpha=10
|
||||
table_bg_color=#303030
|
||||
table_info_text_color=#00DDFF
|
||||
table_info_text_color=#AADDFF
|
||||
table_section_text_color=#FFFFFF
|
||||
text_color=#FFFFFF
|
||||
trackbar_color=#555555
|
||||
trackbar_empty_color=#404040
|
||||
trackbar_full_color=#00FFDD
|
||||
trackbar_full_color=#AADDFF
|
||||
trackbar_slider_border_color=#505050
|
||||
trackbar_slider_color=#606060
|
||||
trackbar_slider_malleable_color=#A0A0A0
|
||||
|
Binary file not shown.
Binary file not shown.
@ -1,5 +1,24 @@
|
||||
[Reboot]
|
||||
[*Reboot To]
|
||||
[Atmosphere - Auto]
|
||||
set-ini-val /bootloader/hekate_ipl.ini config autoboot 1
|
||||
set-ini-val /bootloader/hekate_ipl.ini config autoboot_list 0
|
||||
reboot
|
||||
|
||||
[Shutdown]
|
||||
[Semi-Stock - Forced]
|
||||
set-ini-val /bootloader/hekate_ipl.ini config autoboot 1
|
||||
set-ini-val /bootloader/hekate_ipl.ini config autoboot_list 1
|
||||
reboot
|
||||
|
||||
[$]
|
||||
;mode=table
|
||||
;background=false
|
||||
;gap=17
|
||||
[Other]
|
||||
;mode=table
|
||||
;header_indent=true
|
||||
;section_text_color=#FFFFFF
|
||||
;gap=20
|
||||
'Other' = ''
|
||||
|
||||
[Shutdown - Power Off]
|
||||
shutdown
|
Loading…
Reference in New Issue
Block a user