Compare commits

..

No commits in common. "main" and "2.6-R1" have entirely different histories.
main ... 2.6-R1

284 changed files with 2623 additions and 3679 deletions

View File

@ -8,7 +8,7 @@
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт. ### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
### [Ultra 2.6|R2](https://github.com/Ultra-NX/UltraNX/releases) Поддерживает все HOS, включая 20.5.0 ### [Ultra 2.6|R1](https://github.com/Ultra-NX/UltraNX/releases) Поддерживает все HOS, включая 20.4.0

View File

@ -6,7 +6,7 @@
# #
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience. ### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
### [Ultra 2.6|R2](https://github.com/Ultra-NX/UltraNX/releases) Supports all HOS, including 20.5.0 ### [Ultra 2.6|R1](https://github.com/Ultra-NX/UltraNX/releases) Supports all HOS, including 20.4.0

View File

@ -8,7 +8,7 @@
;YouTube ;YouTube
;Stucks in infinite loop ;Stucks in infinite loop
01003A400C3DA000 X01003A400C3DA000
;Alien: Isolation ;Alien: Isolation
;1.1_46609 - 1.1.4_60709 crash on first loading ;1.1_46609 - 1.1.4_60709 crash on first loading
@ -19,14 +19,12 @@
01004A600EC0A000 01004A600EC0A000
;Stubbs the Zombie in Rebel Without a Pulse ;Stubbs the Zombie in Rebel Without a Pulse
;1.0.0 - 1.0.3 crash on boot ;1.0.0 - 1.0.2 crash on boot
0100964012528000 X0100964012528000
;Olympic Games Tokyo 2020 The Official Video Game ;Olympic Games Tokyo 2020 The Official Video Game
;1.0.0-1.0.2 crash on boot ;1.0.0 crash on boot
;1.0.9 crash on boot X010034B00E14C000
010034B00E14C000
01004CE00AAE2000
;Mario Strikers: Battle League ;Mario Strikers: Battle League
;1.0.0 crash on boot ;1.0.0 crash on boot
@ -48,3 +46,19 @@
;Company of Heroes Collection ;Company of Heroes Collection
;1.5_66915 crashes ;1.5_66915 crashes
0100ABD0156F8000 0100ABD0156F8000
;Donkey Kong Country: Tropical Freeze
;Crash at second level
X0100C1F0051B6000
;Death Road to Canada
;1.0.8 crash
X0100423009358000
;Splatoon 3
;10.0.0 upwards crashes after online match
X0100C2500FC20000
;Hollow Knight: Silksong
;1.0.28324 crash on boot
X010013C00E930000

View File

@ -1,6 +1,8 @@
# Jujutsu Kaisen Cursed Clash US 1.4.0 # Jujutsu Kaisen Cursed Clash US 1.4.0
# BID: 7C724F497564C027 # BID: 7C724F497564C027
unsafeCheck: true
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -
@ -24,10 +26,8 @@ ALL_FPS:
- -
type: write type: write
address: [MAIN, 0x849B7A8, 0x9C4] address: [MAIN, 0x849B7A8, 0x9C4]
address_unsafe: true
value_type: uint32 value_type: uint32
value: 7 value: 7
- -
type: block type: block
what: timing what: timing

View File

@ -1,24 +1,42 @@
# Batman - The Telltale Series 1.0.4 # Batman - The Telltale Series 1.0.4
# BID: A3A998AF3252D110 # BID: A3A998AF3252D110
DECLARATIONS: unsafeCheck: true
MASTER_WRITE:
# Remove double buffer
- -
type: code type: asm_a64
name: tripleBuffer main_offset: 0x6440
instructions: [
[mov, w2, 3],
[madd, x1, x8, x2, x9]
]
-
type: bytes
main_offset: 0xC5A6D8
value_type: uint32
value: 0x188CC50
-
type: bytes
main_offset: 0x1758A90
value_type: uint32
value: 0x188CC50
-
type: asm_a64
main_offset: 0xC56550
instructions: [ instructions: [
[stp, x29, x30, [sp, -16], "!"],
[mov, x29, sp],
[ldr, x0, [x26, 0x10]], [ldr, x0, [x26, 0x10]],
[cbz, x0, :goto1], [cbz, x0, +24],
[adrp, x8, 0x1758000], [adrp, x8, 0x1758000],
[ldr, x8, [x8, 0x90]], [ldr, x8, [x8, 0x90]],
[ldr, x8, [x8]], [ldr, x8, [x8]],
[blr, x8], [blr, x8],
[b, :goto2], [b, +16],
:goto1, [mov, w0, 0xc0], [mov, w0, 0xc0],
[bl, 0x735480], [bl, 0x735480],
[str, x0, [x26, 0x10]], [str, x0, [x26, 0x10]],
:goto2, [ldr, x22, [x27]], [ldr, x22, [x27]],
[adrp, x27, 0x1757000], [adrp, x27, 0x1757000],
[ldr, x21, [x25]], [ldr, x21, [x25]],
[ldr, x27, [x27, 0xf38]], [ldr, x27, [x27, 0xf38]],
@ -44,34 +62,13 @@ DECLARATIONS:
[mov, x1, x23], [mov, x1, x23],
[blr, x8], [blr, x8],
[adrp, x22, 0x1758000], [adrp, x22, 0x1758000],
[ldp, x29, x30, [sp], 16], [b, 0x5eec]
[ret]
]
MASTER_WRITE:
# Remove double buffer
-
type: asm_a64
main_offset: 0x6440
instructions: [
[mov, w2, 3],
[madd, x1, x8, x2, x9]
] ]
-
type: bytes
main_offset: 0xC5A6D8
value_type: uint32
value: 0x188CC50
-
type: bytes
main_offset: 0x1758A90
value_type: uint32
value: 0x188CC50
- -
type: asm_a64 type: asm_a64
main_offset: 0x5EE8 main_offset: 0x5EE8
instructions: [ instructions: [
[bl, _tripleBuffer()] [b, 0xc56550]
] ]
- -
type: asm_a64 type: asm_a64
@ -85,4 +82,10 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, x2, 0x1950000] [mov, x2, 0x1950000]
] ]
ALL_FPS:
# dummy
-
type: write
address: [MAIN, 0x188CF00]
value_type: uint8
value: 0

View File

@ -1,13 +1,8 @@
# Tiebreak+: Official Game of the ATP and WTA 1.3.0 # Tiebreak+: Official Game of the ATP and WTA 1.3.0
# BID: 88CC45A195E0BDA8 # BID: 88CC45A195E0BDA8
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target
value_type: float
default_value: 0.03333333333
evaluate: "0.8 / FPS_TARGET" # we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET
MASTER_WRITE: MASTER_WRITE:
# Triple buffer # Triple buffer
# REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00 # REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00
@ -22,7 +17,20 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x147BE04 main_offset: 0x147BE04
instructions: [ instructions: [
[adrp, x8, $dr_target], [adrp, x8, 0x30c3000],
[ldr, s3, [x8, $dr_target]], [ldr, s3, [x8, 0xf00]],
[nop] [nop]
] ]
## Default values
-
type: bytes
main_offset: 0x30C3F00
value_type: float
value: 0.03333333333
ALL_FPS:
# Adjust Dynamic Resolution target, we are using this trick because function is overengineered and it's not easy to just use standard 1 / FPS_TARGET
-
type: evaluate_write
address: [MAIN, 0x30C3F00]
value_type: float
value: "0.8 / FPS_TARGET"

View File

@ -1,25 +0,0 @@
# SWORD ART ONLINE Fractured Daydream JAP 1.4.1.1
# BID: 33614E4F6B3267B3
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x90A0758, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x90DB2B0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x88DAF88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -1,6 +1,8 @@
# SWORD ART ONLINE Fractured Daydream JAP 1.3.0 # SWORD ART ONLINE Fractured Daydream JAP 1.3.0
# BID: C2F2C4B700B30598 # BID: C2F2C4B700B30598
unsafeCheck: true
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -
@ -22,4 +24,4 @@ ALL_FPS:
value: [0, 0] value: [0, 0]
- -
type: block type: block
what: timing what: timing

View File

@ -1,12 +1,13 @@
# Breathedge 1.0.2 # Breathedge 1.0.2
# BID: B26DE1669B729335 # BID: B26DE1669B729335
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate # Disable bUseFixedFrameRate
- -
type: write type: write
address: [MAIN, 0x55CB668, 0x7F0] address: [MAIN, 0x55CB668, 0x7F0]
address_unsafe: true
value_type: uint32 value_type: uint32
value: 7 value: 7
# t.MaxFPS # t.MaxFPS

View File

@ -1,6 +1,8 @@
# Chernobylite 1.2 # Chernobylite 1.2
# BID: 657F40EEBD955F31 # BID: 657F40EEBD955F31
unsafeCheck: true
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -
@ -19,7 +21,4 @@ ALL_FPS:
type: write type: write
address: [MAIN, 0x5C83700, 0] address: [MAIN, 0x5C83700, 0]
value_type: int32 value_type: int32
value: [0, 0] value: [0, 0]
-
type: block
what: timing

View File

@ -1,25 +0,0 @@
# Tony Hawk's Pro Skater 3 + 4 1.06
# BID: 505069EBC0B82A6F
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x77EC4B8, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x781A6A0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7014598, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -1,25 +0,0 @@
# Tony Hawk's Pro Skater 3 + 4 1.07
# BID: 52DA46C0166A8643
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x77F8148, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7826330, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7020598, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -1,11 +1,12 @@
# DreadOut Remastered Collection 1.0.2 # DreadOut Remastered Collection 1.0.2
# BID: 725731C74E4CA6A9 # BID: 725731C74E4CA6A9
unsafeCheck: false
ALL_FPS: ALL_FPS:
# REF: DynamicResolution::.cctor # REF: DynamicResolution::.cctor
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0x3E01640, 0, 0xB8, 8] address: [MAIN, 0x3E01640, 0, 0xB8, 8]
address_unsafe: true
value_type: double value_type: double
value: [FPS_TARGET, FRAMETIME_TARGET] value: [FPS_TARGET, FRAMETIME_TARGET]

View File

@ -1,6 +1,8 @@
# The LEGO NINJAGO Movie Video Game 1.0.3 # The LEGO NINJAGO Movie Video Game 1.0.3
# BID: 346959B36CD9F14D # BID: 346959B36CD9F14D
unsafeCheck: true
ALL_FPS: ALL_FPS:
# Block to 30 FPS when prerendered cutscene is played # Block to 30 FPS when prerendered cutscene is played
# REF: LegoCutscenes::s_fmvCutsceneAudioInstance # REF: LegoCutscenes::s_fmvCutsceneAudioInstance
@ -10,5 +12,6 @@ ALL_FPS:
compare_type: "!=" compare_type: "!="
compare_value_type: uint64 compare_value_type: uint64
compare_value: 0 compare_value: 0
address: [MAIN]
value_type: refresh_rate value_type: refresh_rate
value: 30 value: 30

View File

@ -1,19 +0,0 @@
# Troublemaker 1.0.2
# BID: 336E56D09501A52E
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x5E26958, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x562A778, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -1,11 +1,12 @@
# The Forest Quartet 4.0.2 # The Forest Quartet 4.0.2
# BID: 47A022F858BA09B1 # BID: 47A022F858BA09B1
unsafeCheck: false
ALL_FPS: ALL_FPS:
# DynamicResolution_TypeInfo # DynamicResolution_TypeInfo
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0x4B320A0, 0xB8, 0] address: [MAIN, 0x4B320A0, 0xB8, 0]
address_unsafe: true
value_type: double value_type: double
value: ["0.96 * FRAMETIME_TARGET", "(0.96 * FRAMETIME_TARGET) - 0.75"] value: ["0.96 * FRAMETIME_TARGET", "(0.96 * FRAMETIME_TARGET) - 0.75"]

View File

@ -1,6 +1,8 @@
# Remnant: From The Ashes 1.0.1 # Remnant: From The Ashes 1.0.1
# BID: 49CF6B0B0A62F9E2 # BID: 49CF6B0B0A62F9E2
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.MaxGPUTime ((1000/FPS) * 0.93) # r.DynamicRes.MaxGPUTime ((1000/FPS) * 0.93)
- -

View File

@ -1,12 +1,13 @@
# Bakery Simulator 1.1.0 # Bakery Simulator 1.1.0
# BID: 31A37D73E22F1059 # BID: 31A37D73E22F1059
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
- -
type: write type: write
address: [MAIN, 0x5F9B6A8, 0x7A4] address: [MAIN, 0x5F9B6A8, 0x7A4]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -1,6 +1,8 @@
# Fate/EXTELLA LINK 1.0.2 # Fate/EXTELLA LINK 1.0.2
# BID: 97FC79E063E26C9B # BID: 97FC79E063E26C9B
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
@ -9,3 +11,11 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, x8, 0x300000003] [mov, x8, 0x300000003]
] ]
ALL_FPS:
# DUMMY
-
type: write
address: [MAIN, 0x4740500]
value_type: uint8
value: 0

View File

@ -1,6 +1,8 @@
# GOD EATER 3 2.5.1 # GOD EATER 3 2.5.1
# BID: C0F144F5139F542E # BID: C0F144F5139F542E
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
@ -9,3 +11,10 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, x8, 0x300000003] [mov, x8, 0x300000003]
] ]
ALL_FPS:
# DUMMY
-
type: write
address: [MAIN, 0xA7FA900]
value_type: uint8
value: 0

View File

@ -1,6 +1,8 @@
# Goat Simulator 3 1.0.7.3 # Goat Simulator 3 1.0.7.3
# BID: 26AB1CB54DD4508D # BID: 26AB1CB54DD4508D
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -

View File

@ -1,6 +1,8 @@
# Goat Simulator 3 1.0.7.6 # Goat Simulator 3 1.0.7.6
# BID: 8D4FD57DB7D63120 # BID: 8D4FD57DB7D63120
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -

View File

@ -1,6 +1,8 @@
# Goat Simulator 3 1.0.7.4 # Goat Simulator 3 1.0.7.4
# BID: A5DA93E6537350D8 # BID: A5DA93E6537350D8
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -

View File

@ -1,6 +1,8 @@
# Goat Simulator 3 1.0.7.5 # Goat Simulator 3 1.0.7.5
# BID: C606C7DC1C0EC88F # BID: C606C7DC1C0EC88F
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -

View File

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

View File

@ -1,43 +0,0 @@
# 하늘의 궤적 the 1st 1.0.3
# BID: 4FC3CB13E1D3292E
DECLARATIONS:
# Lock Max Handheld Resolution to 720p instead of 900p
-
type: code
name: adjustDrResToNativeInHH
instructions: [
[cmp, w9, 1280],
[b.le, :goto1],
[adrp, x21, 0x65D000],
[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: 0x236744
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, 0x65D860, 0x2C]
value_type: uint32
value: FPS_TARGET
# Dynamic Resolution and Min Delta multiplier (some UI elements are not adjusted by it, that's why I'm using both values)
## 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, 0x65D378]
value_type: float
value: 0.95

View File

@ -1,43 +1,8 @@
# Sherlock Holmes: The Devil's Daughter 1.0.0 # Sherlock Holmes: The Devil's Daughter 1.0.0
# BID: 2B37ED2A971948F3 # BID: 2B37ED2A971948F3
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: float
default_value: 38
evaluate: "1.14 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: float
default_value: 22
evaluate: "0.66 * FRAMETIME_TARGET"
-
type: variable
name: dr_target3
value_type: float
default_value: 43.5
evaluate: "1.305 * FRAMETIME_TARGET"
-
type: variable
name: dr_target4
value_type: float
default_value: 58
evaluate: "1.74 * FRAMETIME_TARGET"
-
type: variable
name: dr_target5
value_type: float
default_value: 47
evaluate: "1.41 * FRAMETIME_TARGET"
-
type: variable
name: dr_target6
value_type: float
default_value: 34
evaluate: "1.02 * FRAMETIME_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect Dynamic Resolution timings to MAIN + 0x3189F00 # Redirect Dynamic Resolution timings to MAIN + 0x3189F00
# 38.0 # 38.0
@ -45,43 +10,47 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0xFFEAFC main_offset: 0xFFEAFC
instructions: [ instructions: [
[adrp, x10, $dr_target1], [adrp, x10, 0x3189000],
[ldr, s1, [x10, $dr_target1]] [ldr, s1, [x10, 0xf00]]
] ]
# 22.0 # 22.0
- -
type: asm_a64 type: asm_a64
main_offset: 0xFFEB0C main_offset: 0xFFEB0C
instructions: [ instructions: [
[ldr, s1, [x10, $dr_target2]] [ldr, s1, [x10, 0xf04]]
] ]
# 43.5 # 43.5
- -
type: asm_a64 type: asm_a64
main_offset: 0xFFEAD4 main_offset: 0xFFEAD4
instructions: [ instructions: [
[adrp, x10, $dr_target3], [adrp, x10, 0x3189000],
[ldr, s1, [x10, $dr_target3]] [ldr, s1, [x10, 0xf08]]
] ]
# 58.0 # 58.0
- -
type: asm_a64 type: asm_a64
main_offset: 0xFFEAE4 main_offset: 0xFFEAE4
instructions: [ instructions: [
[adrp, x10, $dr_target4], [adrp, x10, 0x3189000],
[ldr, s1, [x10, $dr_target4]] [ldr, s1, [x10, 0xf0c]]
] ]
# 47.0 | 34.0 # 47.0 | 34.0
- -
type: asm_a64 type: asm_a64
main_offset: 0xFFEB20 main_offset: 0xFFEB20
instructions: [ instructions: [
[adrp, x11, $dr_target5], [adrp, x11, 0x3189000],
[ldr, s1, [x11, $dr_target5]], [ldr, s1, [x11, 0xf10]],
[adrp, x11, $dr_target6], [ldr, w12, [x11, 0xf14]]
[fcmp, s0, s1],
[ldr, s1, [x11, $dr_target6]]
] ]
# Default values:
-
type: bytes
main_offset: 0x3189F00
value_type: float
value: [38.0, 22.0, 43.5, 58.0, 47.0, 34.0]
ALL_FPS: ALL_FPS:
# UGameEngine::GetMaxTickRate() # UGameEngine::GetMaxTickRate()
# Bool Lock FPS # Bool Lock FPS
@ -90,3 +59,10 @@ ALL_FPS:
address: [MAIN, 0x30D1B7C] address: [MAIN, 0x30D1B7C]
value_type: uint8 value_type: uint8
value: 0 value: 0
# Dynamic Resolution
-
type: evaluate_write
address: [MAIN, 0x3189F00]
value_type: float
value: ["(38.0 / (1000/30)) * FRAMETIME_TARGET", "(22.0 / (1000/30)) * FRAMETIME_TARGET", "(43.5 / (1000/30)) * FRAMETIME_TARGET", "(58.0 / (1000/30)) * FRAMETIME_TARGET", "(47.0 / (1000/30)) * FRAMETIME_TARGET", "(34.0 / (1000/30)) * FRAMETIME_TARGET"]

View File

@ -2,6 +2,8 @@
# BID: 7A450848CFDEC18E # BID: 7A450848CFDEC18E
# Some prerendered cutscenes are still pushed at 30 FPS # Some prerendered cutscenes are still pushed at 30 FPS
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52 # Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52
- -
@ -38,10 +40,10 @@ ALL_FPS:
value: FPS_LOCK_TARGET value: FPS_LOCK_TARGET
# Renderer thread delay # Renderer thread delay
- -
type: evaluate_write type: write
address: [MAIN, 0x5704028] address: [MAIN, 0x5704028]
value_type: float value_type: float
value: "0.66 / FPS_TARGET" value: 0.01
# DR timings # DR timings
- -
type: evaluate_write type: evaluate_write
@ -51,3 +53,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -1,25 +0,0 @@
# DRAGON QUEST TREASURES 1.0.1
# BID: 2F81A2EC9B298B37
ALL_FPS:
# Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
-
type: write
address: [MAIN, 0x7E110D8, 0x7C0]
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, 0x7E119A8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -1,6 +1,8 @@
# Gal*Gun 2 1.0.4 # Gal*Gun 2 1.0.4
# BID: 9CDFB0CD24CAE030 # BID: 9CDFB0CD24CAE030
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.VSync # r.VSync
- -
@ -18,7 +20,6 @@ ALL_FPS:
- -
type: write type: write
address: [MAIN, 0x44E6030, 0x764] address: [MAIN, 0x44E6030, 0x764]
address_unsafe: true
value_type: float value_type: float
value: 0 value: 0
- -

View File

@ -1,6 +1,8 @@
# GUNDAM BREAKER 4 1.9.0 # GUNDAM BREAKER 4 1.9.0
# BID: 0CC82881FF112C6D # BID: 0CC82881FF112C6D
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -

View File

@ -1,6 +1,8 @@
# GUNDAM BREAKER 4 1.5.0 # GUNDAM BREAKER 4 1.5.0
# BID: F898CCE9C3A291AF # BID: F898CCE9C3A291AF
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -

View File

@ -3,20 +3,28 @@
# Game is using double buffer, buffers are not allocated in loop. # Game is using double buffer, buffers are not allocated in loop.
# So it's not possible to get stable FPS lock between 30 and 60 without changing refresh rate. # So it's not possible to get stable FPS lock between 30 and 60 without changing refresh rate.
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_scale
value_type: double
default_value: 1000000
evaluate: "30000000 / FPS_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Change location of GPU frametime double divider # Change location of GPU frametime double divider to MAIN+0x32C6D00
- -
type: asm_a64 type: asm_a64
main_offset: 0x921768 main_offset: 0x921768
instructions: [ instructions: [
[adrp, x8, $dr_scale], [adrp, x8, 0x32c6000],
[ldr, d1, [x8, $dr_scale]] [ldr, d1, [x8, 0xd00]]
] ]
# Default value
-
type: bytes
main_offset: 0x32C6D00
value_type: double
value: 1000000
ALL_FPS:
# GPU Frametime divider = (30/FPS) * 1000000
-
type: evaluate_write
address: [MAIN, 0x32C6D00]
value_type: double
value: "(30 / FPS_TARGET) * 1000000"

View File

@ -2,6 +2,8 @@
# BID: 799D1061182C1302 # BID: 799D1061182C1302
# Thanks to theboy181 for finding instruction responsible for calculating frame time which I used to find where is FPS target stored # Thanks to theboy181 for finding instruction responsible for calculating frame time which I used to find where is FPS target stored
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove FPS Lock # Remove FPS Lock
- -
@ -21,13 +23,11 @@ ALL_FPS:
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0xED96A8, 0x30] address: [MAIN, 0xED96A8, 0x30]
address_unsafe: true
value_type: uint32 value_type: uint32
value: "19200000 / FPS_TARGET" value: "19200000 / FPS_TARGET"
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0xED96A8, 0x28] address: [MAIN, 0xED96A8, 0x28]
address_unsafe: true
value_type: uint32 value_type: uint32
value: "1920000 / FPS_TARGET" value: "1920000 / FPS_TARGET"
# FPS 2D Game Speed Target # FPS 2D Game Speed Target
@ -42,3 +42,4 @@ ALL_FPS:
address: [MAIN, 0xEFFC60, 0x50] address: [MAIN, 0xEFFC60, 0x50]
value_type: float value_type: float
value: "1 / FPS_TARGET" value: "1 / FPS_TARGET"

View File

@ -1,23 +0,0 @@
# 真・三國無双8 Empires 1.0.1
# BID: 6C3F685C62070885
ALL_FPS:
## REF: 02 00 00 00 3C 00 00 00
-
type: evaluate_write
address: [MAIN, 0x2111728]
value_type: int32
value: [VSYNC_TARGET, FPS_TARGET]
-
type: evaluate_write
address: [MAIN, 0x2111730]
value_type: float
value: FPS_TARGET
-
type: evaluate_write
address: [MAIN, 0x34DF954]
value_type: float
value: "1 / FPS_TARGET"
-
type: block
what: timing

View File

@ -2,12 +2,13 @@
# BID: 3A3C781930CB8201 # BID: 3A3C781930CB8201
# WARNING: Enemy Movement Speed is not scaling properly to framerate. At 60 FPS it's multiple times slower, looking like enemies are practically walking in place. # WARNING: Enemy Movement Speed is not scaling properly to framerate. At 60 FPS it's multiple times slower, looking like enemies are practically walking in place.
unsafeCheck: true
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
- -
type: write type: write
address: [MAIN, 0x5F32908, 0x7B8] address: [MAIN, 0x5F32908, 0x7B8]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:
@ -30,4 +31,3 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -2,19 +2,27 @@
# BID: 471546458FD9E43D # BID: 471546458FD9E43D
# REF: 01 04 0C 5E 00 10 2E 1E # REF: 01 04 0C 5E 00 10 2E 1E
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target
value_type: float
default_value: 33.333333
evaluate: FRAMETIME_TARGET
MASTER_WRITE: MASTER_WRITE:
# Redirect DR frametime target # Redirect DR frametime target to MAIN+0x36D4F00
- -
type: asm_a64 type: asm_a64
main_offset: 0x17358B4 main_offset: 0x17358B4
instructions: [ instructions: [
[adrp, x13, $dr_target], [adrp, x13, 0x36d4000],
[ldr, s2, [x13, $dr_target]] [ldr, s2, [x13, 0xf00]]
] ]
# default value
-
type: bytes
main_offset: 0x36D4F00
value_type: float
value: 33.3333333333
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x36D4F00]
value_type: float
value: FRAMETIME_TARGET

View File

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

View File

@ -1,43 +0,0 @@
# Trails in the Sky 1st Chapter 1.0.4
# BID: 2AD8CC7892EBF9FA
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, 0x820]], ## 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: 0x238D24
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, 0x65F850, 0x2C]
value_type: uint32
value: FPS_TARGET
# Dynamic Resolution and Min Delta multiplier (some UI elements are not adjusted by it, that's why I'm using both values)
## 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, 0x65F368]
value_type: float
value: 0.95

View File

@ -1,6 +1,8 @@
# Jujutsu Kaisen Cursed Clash JP 1.4.0 # Jujutsu Kaisen Cursed Clash JP 1.4.0
# BID: 7C724F497564C027 # BID: 7C724F497564C027
unsafeCheck: true
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -
@ -24,10 +26,8 @@ ALL_FPS:
- -
type: write type: write
address: [MAIN, 0x849B7A8, 0x9C4] address: [MAIN, 0x849B7A8, 0x9C4]
address_unsafe: true
value_type: uint32 value_type: uint32
value: 7 value: 7
- -
type: block type: block
what: timing what: timing

View File

@ -1,12 +1,13 @@
# Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles 1.53 # Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles 1.53
# BID: 14C878ECCA9D7CB5 # BID: 14C878ECCA9D7CB5
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate # Disable bUseFixedFrameRate to unlock framerate
- -
type: write type: write
address: [MAIN, 0xB314540, 0x7F8] address: [MAIN, 0xB314540, 0x7F8]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -1,13 +1,15 @@
# Hammerwatch Anniversary Edition 1.0.3 # Hammerwatch Anniversary Edition 1.0.3
# BID: D147CAEF2BC74574 # BID: D147CAEF2BC74574
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Rewrite "v_fps_limit 30" to 99 # Rewrite "v_fps_limit 30" to 62
- -
type: bytes type: bytes
main_offset: 0xE028B5 main_offset: 0xE028B5
value_type: uint16 value_type: uint16
value: 0x3939 value: 0x3236
# Change egl Interval to lock game by default to 30 FPS # Change egl Interval to lock game by default to 30 FPS
- -
type: asm_a64 type: asm_a64
@ -21,3 +23,11 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, w1, 2] [mov, w1, 2]
] ]
ALL_FPS:
# DUMMY
-
type: write
address: [MAIN, 0x15ABF3C0]
value_type: uint8
value: 0

View File

@ -1,13 +1,15 @@
# Hammerwatch 2 1.0.4 # Hammerwatch 2 1.0.4
# BID: 38896FEC1B4ADB1C # BID: 38896FEC1B4ADB1C
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Rewrite "v_fps_limit 30" to 99 # Rewrite "v_fps_limit 30" to 62
- -
type: bytes type: bytes
main_offset: 0x7C7597 main_offset: 0x7C7597
value_type: uint16 value_type: uint16
value: 0x3939 value: 0x3236
# Change egl Interval to lock game by default to 30 FPS # Change egl Interval to lock game by default to 30 FPS
- -
type: asm_a64 type: asm_a64
@ -21,3 +23,11 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, w1, 2] [mov, w1, 2]
] ]
ALL_FPS:
# DUMMY
-
type: write
address: [MAIN, 0x161BCF8]
value_type: uint8
value: 0

View File

@ -1,12 +1,13 @@
# Dusk Diver 2 1.0.1 # Dusk Diver 2 1.0.1
# BID: 217C9ECF258C0312 # BID: 217C9ECF258C0312
unsafeCheck: true
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
- -
type: write type: write
address: [MAIN, 0x77C7098, 0x7A4] address: [MAIN, 0x77C7098, 0x7A4]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:
@ -29,4 +30,3 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -1,10 +0,0 @@
# ABYSS SEEKER――What Do You See Deep in Abyss 1.3.0.105
# BID: 820EF220126FF10A
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x7B04500, 0x48]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -1,48 +1,50 @@
# Eiyuden Chronicle: Rising 1.02 # Eiyuden Chronicle: Rising 1.02
# BID: 39DC785D9073C22B # BID: 39DC785D9073C22B
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: double
default_value: 31
evaluate: "0.93 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: double
default_value: 29
evaluate: "0.87 * FRAMETIME_TARGET"
-
type: code
name: drMaxTarget
instructions: [
[adrp, x19, $dr_target1],
[ldr, d1, [x19, $dr_target1]],
[ret]
]
-
type: code
name: drMinTarget
instructions: [
[adrp, x8, $dr_target2],
[ldr, d1, [x8, $dr_target2]],
[ret]
]
MASTER_WRITE: MASTER_WRITE:
# Redirect DynamicResolution$$LowerResSW Max Target in MS # Redirect DynamicResolution$$LowerResSW Max Target in MS to MAIN+0x3BE1200
- -
type: asm_a64 type: asm_a64
main_offset: 0x2426988 main_offset: 0x2426988
instructions: [ instructions: [
[bl, _drMaxTarget()] [b, 0x2426a94]
] ]
# Redirect DynamicResolution$$LowerResSW Min Target
-
type: asm_a64
main_offset: 0x2426A94
instructions: [
[adrp, x19, 0x3be1000],
[ldr, d1, [x19, 0x200]],
[b, 0x242698c]
]
# Redirect DynamicResolution$$LowerResSW Min Target in MS to MAIN+0x3BE1208
- -
type: asm_a64 type: asm_a64
main_offset: 0x24269F4 main_offset: 0x24269F4
instructions: [ instructions: [
[bl, _drMinTarget()] [b, 0x2426ea4]
] ]
-
type: asm_a64
main_offset: 0x2426EA4
instructions: [
[adrp, x8, 0x3be1000],
[ldr, d1, [x8, 0x208]],
[b, 0x24269f8]
]
# Write default values
-
type: bytes
main_offset: 0x3BE1200
value_type: double
value: [31, 29]
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x3BE1200]
value_type: double
value: ["0.93 * FRAMETIME_TARGET", "0.87 * FRAMETIME_TARGET"]

View File

@ -1,6 +1,8 @@
# Fate/Samurai Remnant 1.3.2 # Fate/Samurai Remnant 1.3.2
# BID: 6C46135714ABB870 # BID: 6C46135714ABB870
unsafeCheck: true
# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8 # Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8
MASTER_WRITE: MASTER_WRITE:
- -

View File

@ -2,46 +2,60 @@
# BID: F6FB99E54347E740 # BID: F6FB99E54347E740
# Double buffer is hardcoded line by line, it's hard to make it triple # Double buffer is hardcoded line by line, it's hard to make it triple
DECLARATIONS: unsafeCheck: true
-
type: variable
name: fps_lock
value_type: double
default_value: 0.03333333333333333
evaluate: "1 / FPS_TARGET"
-
type: variable
name: dr_target
value_type: float
default_value: 33.333333
evaluate: FRAMETIME_TARGET
MASTER_WRITE: MASTER_WRITE:
# Redirect FPS Lock and Dynamic Resolution target values to MAIN + 0x21036F00
- -
type: asm_a64 type: asm_a64
main_offset: 0x13281C main_offset: 0x13281C
instructions: [ instructions: [
[adrp, x8, $fps_lock], [adrp, x8, 0x21036000],
[ldr, x8, [x8, $fps_lock]] [ldr, x8, [x8, 0xf00]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x3E324C main_offset: 0x3E324C
instructions: [ instructions: [
[adrp, x8, $fps_lock], [adrp, x8, 0x21036000],
[ldr, x8, [x8, $fps_lock]] [ldr, x8, [x8, 0xf00]]
] ]
# NOP updating Dynamic Resolution target value
- -
type: asm_a64 type: asm_a64
main_offset: 0x2D94E8 main_offset: 0x2D94E8
instructions: [ instructions: [
[adrp, x9, $dr_target], [adrp, x9, 0x21036000],
[ldr, w9, [x9, $dr_target]] [ldr, w9, [x9, 0xf08]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x597C5C main_offset: 0x597C5C
instructions: [ instructions: [
[adrp, x9, $dr_target], [adrp, x9, 0x21036000],
[ldr, w9, [x9, $dr_target]] [ldr, w9, [x9, 0xf08]]
] ]
# Default values
-
type: bytes
main_offset: 0x21036F00
value_type: double
value: 0.03333333333333333
-
type: bytes
main_offset: 0x21036F08
value_type: float
value: 33.333333333333
ALL_FPS:
# FPS Lock
-
type: evaluate_write
address: [MAIN, 0x21036F00]
value_type: double
value: "1 / FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x21036F08]
value_type: float
value: FRAMETIME_TARGET

View File

@ -1,25 +0,0 @@
# DRAGON QUEST III HD-2D Remake 1.1.2
# BID: A6BD61CFB142E663
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x5AB93E8, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x62A5E28, 0]
value_type: float
value: [FRAMETIME_TARGET, FRAMETIME_TARGET]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x62D3B68, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -2,13 +2,8 @@
# BID: 283095029A5AB467 # BID: 283095029A5AB467
# Double buffer is reserved line by line inside class array, so requires ton of patching # Double buffer is reserved line by line inside class array, so requires ton of patching
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target
value_type: float
default_value: 33.333333
evaluate: FRAMETIME_TARGET
MASTER_WRITE: MASTER_WRITE:
# Force game to use dynamic speed instead of fixed speed # Force game to use dynamic speed instead of fixed speed
- -
@ -17,11 +12,25 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, w8, 2] [mov, w8, 2]
] ]
# Redirect DR timing # Redirect DR timing to MAIN + 0x9DBAEB8
- -
type: asm_a64 type: asm_a64
main_offset: 0xE88250 main_offset: 0xE88250
instructions: [ instructions: [
[adrp, x8, $dr_target], [adrp, x8, 0x9dba000],
[ldr, s0, [x8, $dr_target]] [ldr, s0, [x8, 0xeb8]]
] ]
# Default value
-
type: bytes
main_offset: 0x9DBAEB8
value_type: float
value: 33.3333333333
ALL_FPS:
# DR timing
-
type: evaluate_write
address: [MAIN, 0x9DBAEB8]
value_type: float
value: FRAMETIME_TARGET

View File

@ -1,6 +1,8 @@
# MotoGP 24 1.0.5 # MotoGP 24 1.0.5
# BID: 1053EA8AD2A50F15 # BID: 1053EA8AD2A50F15
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
- -

View File

@ -1,10 +1,12 @@
# たまごっちのプチプチおみせっち おまちど~さま! 1.0.2 # Tamagotchi Plaza 1.0.2
# BID: 9ACE779510EC93C9 # BID: 9ACE779510EC93C9
unsafeCheck: true
ALL_FPS: ALL_FPS:
# UnityEngine.Rendering.OnDemandRendering_TypeInfo # UnityEngine.Rendering.OnDemandRendering_TypeInfo
- -
type: write type: write
address: [MAIN, 0x683BB20, 0xB8, 0] address: [MAIN, 0x683BB20, 0xB8, 0]
value_type: int32 value_type: int32
value: -1 value: -1

View File

@ -1,21 +1,10 @@
# LEGO Star Wars: The Skywalker Saga 1.10.0 # LEGO Star Wars: The Skywalker Saga 1.10.0
# BID: EC593A5F9552100A # BID: EC593A5F9552100A
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: float
default_value: 24
evaluate: "0.72 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: float
default_value: 31
evaluate: "0.93 * FRAMETIME_TARGET"
MASTER_WRITE: MASTER_WRITE:
# redirect reading Dynamic Resolution timing min & max # redirect reading Dynamic Resolution timing min & max to MAIN + 0xC3C0A50
- -
type: asm_a64 type: asm_a64
main_offset: 0x6171A0 main_offset: 0x6171A0
@ -23,21 +12,33 @@ MASTER_WRITE:
[nop], [nop],
[ldr, s3, [x11, 0xe04]], [ldr, s3, [x11, 0xe04]],
[fadd, s1, s1, s3], [fadd, s1, s1, s3],
[adrp, x12, $dr_target1], [adrp, x12, 0xc3c0000],
[ldr, s2, [x12, $dr_target1]] [ldr, s2, [x12, 0xa50]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x6171F0 main_offset: 0x6171F0
instructions: [ instructions: [
[adrp, x11, $dr_target2], [adrp, x11, 0xc3c0000],
[ldr, s2, [x11, $dr_target2]] [ldr, s2, [x11, 0xa54]]
] ]
# Default DR timings
-
type: bytes
main_offset: 0xC3C0A50
value_type: float
value: [24, 31]
ALL_FPS: ALL_FPS:
# g_video_swap_mode # g_video_swap_mode
## Setting it to 1 to enable 120 FPS results in resolution range being always forced to docked mode
- -
type: write type: write
address: [MAIN, 0xAA62FF0] address: [MAIN, 0xAA62FF0]
value_type: int32 value_type: int32
value: 2 value: 2
# Min + max dynamic resolution timing in ms
-
type: evaluate_write
address: [MAIN, 0xC3C0A50]
value_type: float
value: ["0.72 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"]

View File

@ -1,6 +1,8 @@
# Hellblade: Senua's Sacrifice 1.1.0 # Hellblade: Senua's Sacrifice 1.1.0
# BID: 9B3DDF2FB9100E51 # BID: 9B3DDF2FB9100E51
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Custom Dynamic Resolution implementation - Frame Time (MAX/MIN) # Custom Dynamic Resolution implementation - Frame Time (MAX/MIN)
# MAX = (1/FPS) * 0.95 # MAX = (1/FPS) * 0.95
@ -9,7 +11,7 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x520BBE0, 0x40] address: [MAIN, 0x520BBE0, 0x40]
value_type: float value_type: float
value: ["0.95 / FPS_TARGET", "0.9 / FPS_TARGET"] value: ["(1 / FPS_TARGET) * 0.95", "(1 / FPS_TARGET) * 0.9"]
# t.MaxFPS # t.MaxFPS
- -
type: evaluate_write type: evaluate_write

View File

@ -1,22 +1,28 @@
# Assassin's Creed The Rebel Collection - Assassin's Creed Rogue 1.0.0 # Assassin's Creed The Rebel Collection - Assassin's Creed Rogue 1.0.0
# BID: 3DEF0E36AA8C6592 # BID: 3DEF0E36AA8C6592
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_scale
value_type: float
default_value: 1000
evaluate: "30000 / FPS_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Patch code to divide last frametime by float scale factor # Patch code to divide last frametime by float scale factor stored in MAIN+0x61EE400
# To match it to Dynamic Resolution calculations # To match it to Dynamic Resolution calculations
- -
type: asm_a64 type: asm_a64
main_offset: 0x9F1DDC main_offset: 0x9F1DDC
instructions: [ instructions: [
[adrp, x8, $dr_scale], [adrp, x8, 0x61ee000],
[ldr, s1, [x8, $dr_scale]] [ldr, s1, [x8, 0x400]]
] ]
# Write default dynamic resolution timing factor
-
type: bytes
main_offset: 0x61EE400
value_type: float
value: 1000
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x61EE400]
value_type: float
value: "(FPS_TARGET / 30) * 1000"

View File

@ -1,56 +0,0 @@
# 英雄傳說 閃之軌跡III 1.0.0
# BID: 37C3FAEFC9A4C374
# Button polling is 2x more sensitive to holding any button at 60 FPS
# Fishing timer is decreasing 2x faster at 60 FPS
# Bike is turning 2x faster at 60 FPS
DECLARATIONS:
-
type: variable
name: fps_lock
value_type: uint32
default_value: 33333333
evaluate: "FRAMETIME_TARGET * 930000"
-
type: variable
name: frame_time
value_type: float
default_value: 0.0333333333
-
type: code
name: dynamicSpeed
instructions: [
[str, d0, [x8, 0x20]],
[fcvt, s4, d0],
[adrp, x8, $frame_time],
[str, s4, [x8, $frame_time]],
[ret]
]
MASTER_WRITE:
# Move loading FPS lock time
## REF: MOV with 0x1FCA055
-
type: asm_a64
main_offset: 0x4FEC28
instructions: [
[adrp, x9, $fps_lock],
[ldr, w9, [x9, $fps_lock]]
]
# Write game's loop time as float
## Ref: Replace STR D0, [X8,#0x20] below
-
type: asm_a64
main_offset: 0x4FEC94
instructions: [
[bl, _dynamicSpeed()]
]
# Read lowest timing float factor
## REF: 20 20 22 1E EA 03 00 32, replace ADRP + FMINM + LDR
-
type: asm_a64
main_offset: 0x5E4AC
instructions: [
[adrp, x8, $frame_time],
[fminnm, s1, s1, s2],
[ldr, s2, [x8, $frame_time]]
]

View File

@ -1,167 +1,8 @@
# Xenoblade Chronicles X: Definitive Edition 1.0.2 # Xenoblade Chronicles X: Definitive Edition 1.0.2
# BID: 2A720C7CE5C84905 # BID: 2A720C7CE5C84905
DECLARATIONS: unsafeCheck: true
-
type: variable
name: last_tick
value_type: uint64
default_value: 0
-
type: variable
name: frame_target
value_type: uint32
default_value: 33333333
evaluate: "FRAMETIME_TARGET * 1000000"
-
type: variable
name: speed_factor
value_type: float
default_value: 1.0
-
type: variable
name: current_fps
value_type: float
default_value: 30.0
-
type: variable
name: current_frametime
value_type: float
default_value: 0.0333333333
-
type: variable
name: dr_target
value_type: float
default_value: 0.0333333333
evaluate: "1 / FPS_TARGET"
-
type: const
name: nanoseconds_in_sec
value: 1000000000
-
type: const
name: max_delta
value: 66666666
-
type: variable
name: microseconds_in_sec
value_type: double
default_value: 1000000.0
-
type: code
name: dynamicSpeed
instructions: [
[stp, x29, x30, [sp, -16], "!"],
[mov, x29, sp],
[blr, x8],
[mrs, x0, cntpct_el0],
[adrp, x8, $last_tick],
[ldr, x7, [x8, $last_tick]],
[str, x0, [x8, $last_tick]],
[cbz, x7, :goto1],
[sub, x0, x0, x7],
[bl, _convertTickToTimeSpan()],
[adrp, x8, $frame_target],
[ldr, w1, [x8, $frame_target]],
[cmp, x1, x0],
[b.lt, :goto2],
[mov, x0, x1],
:goto2, [mov, x1, $max_delta],
[movk, x1, $max_delta, 16],
[cmp, x1, x0],
[b.gt, :goto3],
[mov, x0, x1],
:goto3, [ucvtf, d0, x0],
[adrp, x0, $microseconds_in_sec],
[ldr, d1, [x0, $microseconds_in_sec]],
[fdiv, d0, d0, d1],
[mov, x0, 1000],
[ucvtf, d1, x0],
[fdiv, d1, d1, d0],
[adrp, x0, $current_fps],
[fcvt, s1, d1],
[str, s1, [x0, $current_fps]],
[fmov, s2, 30.0],
[fdiv, s2, s2, s1],
[adrp, x0, $speed_factor],
[str, s2, [x0, $speed_factor]],
[mov, x1, 1000],
[ucvtf, d1, x1],
[fdiv, d1, d0, d1],
[fcvt, s1, d1],
[adrp, x0, $current_frametime],
[str, s1, [x0, $current_frametime]],
:goto1, [ldp, x29, x30, [sp], 16],
[ret]
]
-
type: code
name: battleFix
instructions: [
[adrp, x9, $speed_factor],
[ldr, s0, [x9, $speed_factor]],
[ret]
]
-
type: code
name: cameraRotationFix
instructions: [
[adrp, x8, $speed_factor],
[ldr, s8, [x8, $speed_factor]],
[fmul, s0, s8, s0],
[fcmp, s0, 0.0],
[b.ge, :goto1],
[fneg, s0, s0],
[fsqrt, s0, s0],
[fneg, s0, s0],
[ret],
:goto1, [fsqrt, s0, s0],
[ret]
]
-
type: code
name: fnSiteFix
instructions: [
[ldr, s0, [x19, 0xd0]],
[adrp, x0, $speed_factor],
[ldr, s1, [x0, $speed_factor]],
[fmul, s0, s0, s1],
[ret]
]
-
type: code
name: longJumpFix
instructions: [
[fmov, s11, 30.0],
[fadd, s11, s11, s11],
[ret]
]
-
type: code
name: qteFix
instructions: [
[adrp, x20, $speed_factor],
[ldr, s1, [x20, $speed_factor]],
[ldr, s2, [x19, 0x120]],
[fmul, s1, s2, s1],
[ret]
]
-
type: code
name: fogSpeedFix
instructions: [
[fsqrt, s2, s2],
[fmadd, s0, s1, s2, s0],
[ret]
]
-
type: code
name: overdriveFix
instructions: [
[adrp, x0, $current_frametime],
[ldr, s0, [x0, $current_frametime]],
[ret]
]
MASTER_WRITE: MASTER_WRITE:
# Dynamic speed mod for stuff like UI, lipsync, grass and rain # Dynamic speed mod for stuff like UI, lipsync, grass and rain
## Redirect nvnQueuePresentTexture call to code cave at MAIN+0x1735050 ## Redirect nvnQueuePresentTexture call to code cave at MAIN+0x1735050
@ -169,51 +10,106 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x95EED8 main_offset: 0x95EED8
instructions: [ instructions: [
[bl, _dynamicSpeed()] [b, 0x1735050]
] ]
## Code Cave (save floats for speed factor to MAIN+0x47BE268, frametime as FPS in MAIN+0x47BE26C, frametime in s in MAIN+0x47BE270)
-
type: asm_a64
main_offset: 0x1735050
instructions: [
[blr, x8],
[bl, 0x1732500],
[adrp, x8, 0x47be000],
[ldr, x7, [x8, 0x260]],
[str, x0, [x8, 0x260]],
[cbnz, x7, +8],
[b, 0x95eedc],
[sub, x0, x0, x7],
[bl, 0x1732510],
[adrp, x8, 0x47be000],
[ldr, w1, [x8, 0x300]],
[cmp, x1, x0],
[b.lt, +8],
[mov, x0, x1],
[mov, x1, 0x40aa],
[movk, x1, 0x3f9, 16],
[cmp, x1, x0],
[b.gt, +8],
[mov, x0, x1],
[ucvtf, d0, x0],
[adrp, x0, 0x17eb000],
[ldr, d1, [x0, 0xd58]],
[fdiv, d0, d0, d1],
[mov, x0, 1000],
[ucvtf, d1, x0],
[fdiv, d1, d1, d0],
[adrp, x0, 0x47be000],
[fcvt, s1, d1],
[str, s1, [x0, 0x26c]],
[fmov, s2, 30.0],
[fdiv, s2, s2, s1],
[str, s2, [x0, 0x268]],
[mov, x1, 1000],
[ucvtf, d1, x1],
[fdiv, d1, d0, d1],
[fcvt, s1, d1],
[str, s1, [x0, 0x270]],
[b, 0x95eedc]
]
## Default values for code cave
-
type: bytes
main_offset: 0x47BE268
value_type: float
value: [1.0, 30.0, 0.033333333333]
-
type: bytes
main_offset: 0x47BE300
value_type: uint32
value: 33333333
## Function 1 to speed factor // Usage unknown ## Function 1 to speed factor // Usage unknown
- -
type: asm_a64 type: asm_a64
main_offset: 0x286968 main_offset: 0x286968
instructions: [ instructions: [
[adrp, x21, $speed_factor], [adrp, x21, 0x47be000],
[ldr, x0, [x8, 0xe18]], [ldr, x0, [x8, 0xe18]],
[ldr, s10, [x21, $speed_factor]] [ldr, s10, [x21, 0x268]]
] ]
## Function 3 to speed factor // Usage unknown ## Function 3 to speed factor // Usage unknown
- -
type: asm_a64 type: asm_a64
main_offset: 0xA16F00 main_offset: 0xA16F00
instructions: [ instructions: [
[adrp, x0, $speed_factor], [adrp, x0, 0x47be000],
[ldr, s8, [x0, $speed_factor]] [ldr, s8, [x0, 0x268]]
] ]
## Function 4 to FPS // UI Speed ## Function 4 to FPS // UI Speed
- -
type: asm_a64 type: asm_a64
main_offset: 0xA1F060 main_offset: 0xA1F060
instructions: [ instructions: [
[adrp, x0, $current_fps], [adrp, x0, 0x47be000],
[fmov, s0, w8], [fmov, s0, w8],
[ldr, s0, [x0, $current_fps]] [ldr, s0, [x0, 0x26c]]
] ]
## Function 5 to FPS // Usage unknown ## Function 5 to FPS // Usage unknown
- -
type: asm_a64 type: asm_a64
main_offset: 0x2672DC main_offset: 0x2672DC
instructions: [ instructions: [
[adrp, x0, $current_fps], [adrp, x0, 0x47ae000],
[fmov, s0, w8], [fmov, s0, w8],
[ldrh, w8, [x19, 0x68]], [ldrh, w8, [x19, 0x68]],
[ldr, s5, [x0, $current_fps]] [ldr, s5, [x0, 0x26c]]
] ]
## Function 6 to FPS ## Function 6 to FPS
- -
type: asm_a64 type: asm_a64
main_offset: 0x26DB70 main_offset: 0x26DB70
instructions: [ instructions: [
[adrp, x0, $current_fps], [adrp, x0, 0x47be000],
[ldr, s0, [x0, $current_fps]], [ldr, s0, [x0, 0x26c]],
[fcvtzu, w0, s0], [fcvtzu, w0, s0],
[mov, w9, 6], [mov, w9, 6],
[udiv, w8, w0, w9] [udiv, w8, w0, w9]
@ -223,20 +119,29 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x1E2924 main_offset: 0x1E2924
instructions: [ instructions: [
[adrp, x9, $current_frametime] [adrp, x9, 0x47be000]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x1E2938 main_offset: 0x1E2938
instructions: [ instructions: [
[ldr, s0, [x9, $current_frametime]] [ldr, s0, [x9, 0x270]]
] ]
# Adjust various elements related to fighting # Adjust various elements related to fighting
- -
type: asm_a64 type: asm_a64
main_offset: 0x1E8F48 main_offset: 0x1E8F48
instructions: [ instructions: [
[bl, _battleFix()] [b, 0x1735174]
]
## Code cave
-
type: asm_a64
main_offset: 0x1735174
instructions: [
[adrp, x9, 0x47be000],
[ldr, s0, [x9, 0x268]],
[b, 0x1e8f4c]
] ]
## Fix gun speed ## Fix gun speed
- -
@ -250,15 +155,39 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x13A90B4 main_offset: 0x13A90B4
instructions: [ instructions: [
[adrp, x8, $dr_target], [adrp, x8, 0x47be000],
[ldr, s0, [x8, $dr_target]] [ldr, s0, [x8, 0xf00]]
]
## Default value
-
type: bytes
main_offset: 0x47BEF00
value_type: float
value: 0.01666666666
# Adjust camera speed rotation dynamically
## Code cave
-
type: asm_a64
main_offset: 0x1735108
instructions: [
[adrp, x8, 0x47be000],
[ldr, s8, [x8, 0x268]],
[fmul, s0, s8, s0],
[fcmp, s0, 0.0],
[b.ge, +20],
[fneg, s0, s0],
[fsqrt, s0, s0],
[fneg, s0, s0],
[ret],
[fsqrt, s0, s0],
[ret]
] ]
## Connect function 1 ## Connect function 1
- -
type: asm_a64 type: asm_a64
main_offset: 0x1E17A0 main_offset: 0x1E17A0
instructions: [ instructions: [
[bl, _cameraRotationFix()] [bl, 0x1735108]
] ]
## Connect function 2 ## Connect function 2
- -
@ -271,55 +200,139 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x1E17BC main_offset: 0x1E17BC
instructions: [ instructions: [
[bl, _cameraRotationFix()] [bl, 0x1735108]
]
# Force 1s sleep to synchronize audio if cutscene detected
## Use function responsible for writing type 4 of cutscene
-
type: asm_a64
main_offset: 0x2FB0D8
instructions: [
[b, 0x1735158]
]
### Code cave
-
type: asm_a64
main_offset: 0x1735158
instructions: [
[mov, w20, 4],
[adrp, x0, 0x1fef000],
[str, w20, [x0, 0xaf4]],
[mov, x0, 0xca00],
[movk, x0, 0x3b9a, 16],
[bl, 0x17320d0],
[b, 0x2fb0dc]
] ]
# Adjust Field Action gauge bar speed # Adjust Field Action gauge bar speed
- -
type: asm_a64 type: asm_a64
main_offset: 0xE5E00 main_offset: 0xE5E00
instructions: [ instructions: [
[adrp, x0, $speed_factor], [adrp, x0, 0x47be000],
[adrp, x9, 0x1d54000], [adrp, x9, 0x1d54000],
[ldr, s8, [x0, $speed_factor]] [ldr, s8, [x0, 0x268]]
] ]
## Fix for FN Site ## Fix for FN Site
- -
type: asm_a64 type: asm_a64
main_offset: 0xE5858 main_offset: 0xE5858
instructions: [ instructions: [
[bl, _fnSiteFix()] [b, 0x17350e8]
]
### Code cave
-
type: asm_a64
main_offset: 0x17350E8
instructions: [
[ldr, s0, [x19, 0xd0]],
[adrp, x0, 0x47be000],
[ldr, s1, [x0, 0x268]],
[fmul, s0, s0, s1],
[b, 0xe585c]
] ]
# Fix long jump when not running # Fix long jump when not running
- -
type: asm_a64 type: asm_a64
main_offset: 0x23EF70 main_offset: 0x23EF70
instructions: [ instructions: [
[bl, _longJumpFix()] [b, 0x17350fc]
]
## Code cave
-
type: asm_a64
main_offset: 0x17350FC
instructions: [
[fmov, s11, 30.0],
[fadd, s11, s11, s11],
[b, 0x23ef74]
] ]
# Adjust QTE Speed # Adjust QTE Speed
## Code cave
-
type: asm_a64
main_offset: 0x1735134
instructions: [
[adrp, x20, 0x47be000],
[ldr, s1, [x20, 0x268]],
[b, 0x17351a8]
]
-
type: asm_a64
main_offset: 0x17351A8
instructions: [
[ldr, s2, [x19, 0x120]],
[fmul, s1, s2, s1],
[b, 0x5c6284]
]
## Connect function ## Connect function
- -
type: asm_a64 type: asm_a64
main_offset: 0x5C6280 main_offset: 0x5C6280
instructions: [ instructions: [
[bl, _qteFix()] [b, 0x1735134]
]
# Adjust Overdrive counter, Follow Ball speed
## Code cave
-
type: asm_a64
main_offset: 0x1735180
instructions: [
[adrp, x0, 0x47be000],
[ldr, s0, [x0, 0x270]],
[ret]
]
## Connect function
-
type: asm_a64
main_offset: 0x67354
instructions: [
[bl, 0x1734e00]
] ]
# Fix fog speed # Fix fog speed
- -
type: asm_a64 type: asm_a64
main_offset: 0x296AE0 main_offset: 0x296AE0
instructions: [ instructions: [
[adrp, x8, $speed_factor], [adrp, x8, 0x47be000],
[ldr, s2, [x8, $speed_factor]], [ldr, s2, [x8, 0x268]],
[bl, _fogSpeedFix()] [bl, 0x17351b4]
] ]
## Code cave
- -
type: asm_a64 type: asm_a64
main_offset: 0x676D4 main_offset: 0x17351B4
instructions: [ instructions: [
[bl, _overdriveFix()] [fsqrt, s2, s2],
[fmadd, s0, s1, s2, s0],
[ret]
] ]
ALL_FPS: ALL_FPS:
# FPS Target
-
type: evaluate_write
address: [MAIN, 0x47BE300]
value_type: uint32
value: "FRAMETIME_TARGET * 1000000"
# FPS Lock # FPS Lock
# ref: 00 01 00 b9 2a 01 00 b9 c0 03 5f d6 # ref: 00 01 00 b9 2a 01 00 b9 c0 03 5f d6
- -
@ -327,6 +340,12 @@ ALL_FPS:
address: [MAIN, 0x1D943A0] address: [MAIN, 0x1D943A0]
value_type: int32 value_type: int32
value: [1, 1] value: [1, 1]
# DR Target
-
type: evaluate_write
address: [MAIN, 0x47BEF00]
value_type: float
value: "1 / FPS_TARGET"
# Lock game to 30 FPS when complex/prerendered cutscene is played # Lock game to 30 FPS when complex/prerendered cutscene is played
## Adjusts DR target ## Adjusts DR target
- -
@ -335,7 +354,7 @@ ALL_FPS:
compare_value_type: uint32 compare_value_type: uint32
compare_type: ">" compare_type: ">"
compare_value: 2 compare_value: 2
address: [VARIABLE, dr_target] address: [MAIN, 0x47BEF00]
value_type: float value_type: float
value: 0.03333333333 value: 0.03333333333
## Force OS to run at 60 Hz with interval 2 ## Force OS to run at 60 Hz with interval 2
@ -345,6 +364,6 @@ ALL_FPS:
compare_value_type: uint32 compare_value_type: uint32
compare_type: ">" compare_type: ">"
compare_value: 2 compare_value: 2
address: [MAIN]
value_type: refresh_rate value_type: refresh_rate
value: 30 value: 30

View File

@ -1,6 +1,8 @@
# Deliver Us The Moon 1.0.0 # Deliver Us The Moon 1.0.0
# BID: 928AF9461536F5E3 # BID: 928AF9461536F5E3
unsafeCheck: false
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
- -

View File

@ -1,12 +1,13 @@
# DRAGON QUEST TREASURES 1.0.1 # DRAGON QUEST TREASURES 1.0.1
# BID: 2F81A2EC9B298B37 # BID: 2F81A2EC9B298B37
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
- -
type: write type: write
address: [MAIN, 0x7E110D8, 0x7C0] address: [MAIN, 0x7E110D8, 0x7C0]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -1,19 +1,7 @@
# Dark Souls Remastered 1.0.3 # Dark Souls Remastered 1.0.3
# BID: DF3766A2BB651A3E # BID: DF3766A2BB651A3E
DECLARATIONS: unsafeCheck: false
-
type: variable
name: fps_target
value_type: double
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect FPS target to MAIN+0x55E9A00 # Redirect FPS target to MAIN+0x55E9A00
@ -21,41 +9,63 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x706FA4 main_offset: 0x706FA4
instructions: [ instructions: [
[adrp, x1, $fps_target] [adrp, x1, 0x55e9000]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x7070B0 main_offset: 0x7070B0
instructions: [ instructions: [
[ldr, d0, [x1, $fps_target]] [ldr, d0, [x1, 0xa00]]
] ]
# Redirect game speed to MAIN+0x55E9A08 # Redirect game speed to MAIN+0x55E9A08
- -
type: asm_a64 type: asm_a64
main_offset: 0x667900 main_offset: 0x667900
instructions: [ instructions: [
[adrp, x8, $game_speed], [adrp, x8, 0x55e9000],
[ldr, s8, [x8, $game_speed]] [ldr, s8, [x8, 0xa08]]
] ]
# Write default value
-
type: bytes
main_offset: 0x55E9A00
value_type: double
value: 30
-
type: bytes
main_offset: 0x55E9A08
value_type: float
value: 0.0333333333
ALL_FPS: ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x55E9A00]
value_type: double
value: FPS_LOCK_TARGET
-
type: evaluate_write
address: [MAIN, 0x55E9A08]
value_type: float
value: "1/FPS_TARGET"
- -
type: compare type: compare
compare_address: [MAIN, 0x4543788, 0x470] compare_address: [MAIN, 0x4543788, 0x470]
compare_address_unsafe: true
compare_type: "==" compare_type: "=="
compare_value_type: int32 compare_value_type: int32
compare_value: 1 compare_value: 1
address: [VARIABLE, fps_target] address: [MAIN, 0x55E9A00]
value_type: double
value: 30 value: 30
- -
type: compare type: compare
compare_address: [MAIN, 0x4543788, 0x470] compare_address: [MAIN, 0x4543788, 0x470]
compare_address_unsafe: true
compare_type: "==" compare_type: "=="
compare_value_type: int32 compare_value_type: int32
compare_value: 1 compare_value: 1
address: [VARIABLE, game_speed] address: [MAIN, 0x55E9A08]
value_type: float
value: 0.0333333333 value: 0.0333333333
- -
type: block type: block
what: timing what: timing

View File

@ -1,43 +0,0 @@
# 空の軌跡 the 1st 1.0.4
# BID: 6DE3725465A43249
DECLARATIONS:
# Lock Max Handheld Resolution to 720p instead of 900p
-
type: code
name: adjustDrResToNativeInHH
instructions: [
[cmp, w9, 1280],
[b.le, :goto1],
[adrp, x21, 0x65E000],
[ldr, w21, [x21, 0x820]], ## 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: 0x237E54
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, 0x65E850, 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, 0x65E368]
value_type: float
value: 0.95

View File

@ -1,106 +0,0 @@
# Kirby and the Forgotten Land 1.1.0
# 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
-
type: write
address: [MAIN, 0xA76728, 0x50]
address_unsafe: true
value_type: int32
value: 0
# Dynamic Resolution GPU Frametiming Max / Min (Max = 1.95 * (30/FPS), Min = 1.7 * (30/FPS))
## REF: 88 F2 80 B9 F3 03 00 AA 1F 05 00 71, last result, first STR above it
-
type: evaluate_write
address: [MAIN, 0xA767B0, 0x140, 0x1B0, 0x20, 0x34]
address_unsafe: true
value_type: float
value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"]

View File

@ -2,6 +2,8 @@
# BID: D9BA7DB72FFAFECD # BID: D9BA7DB72FFAFECD
# Thanks to Hazerou for finding interval offsets # Thanks to Hazerou for finding interval offsets
unsafeCheck: false
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
@ -82,15 +84,12 @@ ALL_FPS:
- -
type: write type: write
address: [MAIN, 0xA72628, 0x50] address: [MAIN, 0xA72628, 0x50]
address_unsafe: true
value_type: int32 value_type: int32
value: 0 value: 0
# Dynamic Resolution GPU Frametiming Max / Min (Max = 1.95 * (30/FPS), Min = 1.7 * (30/FPS)) # Dynamic Resolution GPU Frametiming Max / Min (Max = 1.95 * (30/FPS), Min = 1.7 * (30/FPS))
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0xA726B0, 0x140, 0x1B0, 0x20, 0x34] address: [MAIN, 0xA726B0, 0x140, 0x1B0, 0x20, 0x34]
address_unsafe: true
value_type: float value_type: float
value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"] value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"]

View File

@ -1,10 +0,0 @@
# EA SPORTS FC 26 1.80.11a0
# BID: 5D738626CE19A40F
ALL_FPS:
# Internal FPS Lock
-
type: evaluate_write
address: [MAIN, 0xC5CC448, 8]
value_type: double
value: FPS_TARGET

View File

@ -1,44 +1,45 @@
# Resident Evil 1.0.0 # Resident Evil 1.0.0
# BID: 6BEC9B23B09DF46C # BID: 6BEC9B23B09DF46C
DECLARATIONS: unsafeCheck: true
-
type: variable
name: cutscene_flag
value_type: uint32
default_value: 0
-
type: code
name: signalCutscene
instructions: [
[add, x29, sp, 0x10],
[mov, w1, 1],
[adrp, x19, $cutscene_flag],
[str, w1, [x19, $cutscene_flag]],
[ret]
]
-
type: code
name: designalCutscene
instructions: [
[mov, w1, wzr],
[adrp, x2, $cutscene_flag],
[str, w1, [x2, $cutscene_flag]],
[ret]
]
MASTER_WRITE: MASTER_WRITE:
# Detect prerendered cutscenes # Detect prerendered cutscenes
- -
type: asm_a64 type: asm_a64
main_offset: 0xB1A818 main_offset: 0xB1A810
instructions: [ instructions: [
[bl, _signalCutscene()] [b, 0xb31be8]
]
-
type: asm_a64
main_offset: 0xB31BE8
instructions: [
[str, x19, [sp, -0x20], "!"],
[mov, w1, 1],
[adrp, x19, 0x24e7000],
[str, w1, [x19, 0xff0]],
[mov, x19, x0],
[mov, w0, 0xca00],
[movk, w0, 0x3b9a, 16],
[svc, 0xb],
[mov, x0, x19],
[b, 0xb1a814]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0xB1A9BC main_offset: 0xB1A9BC
instructions: [ instructions: [
[b, _designalCutscene()] [b, 0xb31c10]
]
-
type: asm_a64
main_offset: 0xB31C10
instructions: [
[mov, w1, wzr],
[adrp, x2, 0x24e7000],
[str, w1, [x2, 0xff0]],
[b, 0xb24ec0]
] ]
ALL_FPS: ALL_FPS:
# Internal FPS Lock # Internal FPS Lock
@ -50,7 +51,9 @@ ALL_FPS:
- -
type: compare type: compare
compare_type: "==" compare_type: "=="
compare_value_type: uint32
compare_value: 1 compare_value: 1
compare_address: [VARIABLE, cutscene_flag] compare_address: [MAIN, 0x24E7FF0]
address: [MAIN]
value_type: refresh_rate value_type: refresh_rate
value: 30 value: 30

View File

@ -1,28 +1,17 @@
# REYNATIS (US/EU) 1.0.10 # REYNATIS (US/EU) 1.0.10
# BID: 5F765D2CC4CDEF1C # BID: 5F765D2CC4CDEF1C
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: double
default_value: 31
evaluate: "0.93 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: double
default_value: 29
evaluate: "(0.93 * FRAMETIME_TARGET) - 2"
MASTER_WRITE: MASTER_WRITE:
# Redirect reading DR timing in DynamicResolution::LowerResSW() # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C22F00
# REF: 01 f0 67 1e # REF: 01 f0 67 1e
- -
type: asm_a64 type: asm_a64
main_offset: 0x38E7ECC main_offset: 0x38E7ECC
instructions: [ instructions: [
[adrp, x20, $dr_target1], [adrp, x20, 0x7c22000],
[ldr, d1, [x20, $dr_target1]], [ldr, d1, [x20, 0xf00]],
[fcmpe, d0, d1], [fcmpe, d0, d1],
[ldp, s9, s8, [x19, 0x40]], [ldp, s9, s8, [x19, 0x40]],
[b.le, 0x38e7f34], [b.le, 0x38e7f34],
@ -32,5 +21,19 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x38E7F34 main_offset: 0x38E7F34
instructions: [ instructions: [
[ldr, d1, [x20, $dr_target2]] [ldr, d1, [x20, 0xf08]]
] ]
# Default handheld value
-
type: bytes
main_offset: 0x7C22F00
value_type: double
value: [31, 29]
ALL_FPS:
# Dynamic Resolution Timing
-
type: evaluate_write
address: [MAIN, 0x7C22F00]
value_type: double
value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"]

View File

@ -1,12 +1,13 @@
# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.50 # DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.50
# BID: 20503FA77FA416B7 # BID: 20503FA77FA416B7
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate in cutscenes to unlock framerate # Disable bUseFixedFrameRate in cutscenes to unlock framerate
- -
type: write type: write
address: [MAIN, 0x9456538, 0x810] address: [MAIN, 0x9456538, 0x810]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -1,12 +1,13 @@
# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.51 # DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.51
# BID: 389E38618E93A5E0 # BID: 389E38618E93A5E0
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate in cutscenes to unlock framerate # Disable bUseFixedFrameRate in cutscenes to unlock framerate
- -
type: write type: write
address: [MAIN, 0x9456538, 0x810] address: [MAIN, 0x9456538, 0x810]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -1,12 +1,13 @@
# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.52 # DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.52
# BID: 72F6F8B54276185C # BID: 72F6F8B54276185C
unsafeCheck: true
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate in cutscenes to unlock framerate # Disable bUseFixedFrameRate in cutscenes to unlock framerate
- -
type: write type: write
address: [MAIN, 0x945A538, 0x810] address: [MAIN, 0x945A538, 0x810]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:
@ -31,4 +32,4 @@ ALL_FPS:
type: write type: write
address: [MAIN, 0x88C6FD8, 0] address: [MAIN, 0x88C6FD8, 0]
value_type: int32 value_type: int32
value: [0, 0] value: [0, 0]

View File

@ -1,12 +1,13 @@
# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.60 # DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.60
# BID: BC99D4D0A9474360 # BID: BC99D4D0A9474360
unsafeCheck: true
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate in cutscenes to unlock framerate # Disable bUseFixedFrameRate in cutscenes to unlock framerate
- -
type: write type: write
address: [MAIN, 0x996A558, 0x810] address: [MAIN, 0x996A558, 0x810]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40 # Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:
@ -31,7 +32,4 @@ ALL_FPS:
type: write type: write
address: [MAIN, 0x8DD7418, 0] address: [MAIN, 0x8DD7418, 0]
value_type: int32 value_type: int32
value: [0, 0] value: [0, 0]
-
type: block
what: timing

View File

@ -2,6 +2,8 @@
# BID: 76EC789B99A25BA5 # BID: 76EC789B99A25BA5
# REF: aql::GraphicsContext::initialize # REF: aql::GraphicsContext::initialize
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
@ -10,3 +12,10 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, x8, 3] [mov, x8, 3]
] ]
ALL_FPS:
# DUMMY
-
type: write
address: [MAIN, 0x25CCF00]
value_type: uint8
value: 0

View File

@ -4,50 +4,63 @@
# Fishing timer is decreasing 2x faster at 60 FPS # Fishing timer is decreasing 2x faster at 60 FPS
# Bike is turning 2x faster at 60 FPS # Bike is turning 2x faster at 60 FPS
DECLARATIONS: unsafeCheck: true
-
type: variable
name: fps_lock
value_type: uint32
default_value: 33333333
evaluate: "FRAMETIME_TARGET * 930000"
-
type: variable
name: frame_time
value_type: float
default_value: 0.0333333333
-
type: code
name: dynamicSpeed
instructions: [
[str, d0, [x8, 0x20]],
[fcvt, s4, d0],
[adrp, x8, $frame_time],
[str, s4, [x8, $frame_time]],
[ret]
]
MASTER_WRITE: MASTER_WRITE:
# Move loading FPS lock time # Move loading FPS lock time to MAIN+0x2B31200
- -
type: asm_a64 type: asm_a64
main_offset: 0x511818 main_offset: 0x511818
instructions: [ instructions: [
[adrp, x9, $fps_lock], [adrp, x9, 0x2b31000],
[ldr, w9, [x9, $fps_lock]] [ldr, w9, [x9, 0x200]]
] ]
# Write game's loop time as float # Default value
-
type: bytes
main_offset: 0x2B31200
value_type: uint32
value: 33333333
# Write game's loop time as float to MAIN+0x2B31204
- -
type: asm_a64 type: asm_a64
main_offset: 0x511884 main_offset: 0x511884
instructions: [ instructions: [
[bl, _dynamicSpeed()] [b, 0x5117f4]
] ]
- # Read lowest timing float factor -
type: asm_a64
main_offset: 0x5117F4
instructions: [
[str, d0, [x8, 0x20]],
[fcvt, s4, d0],
[b, 0x511a84]
]
-
type: asm_a64
main_offset: 0x511A84
instructions: [
[adrp, x8, 0x2b31000],
[str, s4, [x8, 0x204]],
[b, 0x511888]
]
- # Read lowest timing float factor from MAIN+0x2B31204
type: asm_a64 type: asm_a64
main_offset: 0x5E5EC main_offset: 0x5E5EC
instructions: [ instructions: [
[adrp, x8, $frame_time], [adrp, x8, 0x2b31000],
[fminnm, s1, s1, s2], [fminnm, s1, s1, s2],
[ldr, s2, [x8, $frame_time]] [ldr, s2, [x8, 0x204]]
] ]
- # Default value
type: bytes
main_offset: 0x2B31204
value_type: float
value: 0.0333333333
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x2B31200]
value_type: uint32
value: 11111111

View File

@ -1,6 +1,8 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.1.0 # Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.1.0
# BID: 153DB27728D41305 # BID: 153DB27728D41305
unsafeCheck: false
MASTER_WRITE: MASTER_WRITE:
# Redirect DR to MAIN + 0x2F11FF0 # Redirect DR to MAIN + 0x2F11FF0
# REF: A9 24 89 52 49 A2 A7 72 # REF: A9 24 89 52 49 A2 A7 72
@ -24,7 +26,6 @@ ALL_FPS:
- -
type: write type: write
address: [MAIN, 0x2ED8D10, 0xE0, 0x284] address: [MAIN, 0x2ED8D10, 0xE0, 0x284]
address_unsafe: true
value_type: uint8 value_type: uint8
value: 0 value: 0
# DR Target # DR Target

View File

@ -1,31 +1,37 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.3.0 # Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.3.0
# BID: 1CEA83A1E6684665 # BID: 1CEA83A1E6684665
DECLARATIONS: unsafeCheck: false
-
type: variable
name: dr_target
value_type: float
default_value: 0.035714
evaluate: "1.01 / FPS_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect DR # Redirect DR to MAIN + 0x2F5CFF0
# REF: A9 24 89 52 49 A2 A7 72, second REF # REF: A9 24 89 52 49 A2 A7 72, second REF
- -
type: asm_a64 type: asm_a64
main_offset: 0x10AAEE4 main_offset: 0x10AAEE4
instructions: [ instructions: [
[adrp, x9, $dr_target], [adrp, x9, 0x2f5c000],
[ldr, s1, [x9, $dr_target]], [ldr, s1, [x9, 0xff0]],
[nop] [nop]
] ]
## Default value
-
type: bytes
main_offset: 0x2F5CFF0
value_type: float
value: 0.035714
ALL_FPS: ALL_FPS:
# Disable FPS Lock # Disable FPS Lock
# REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it
- -
type: write type: write
address: [MAIN, 0x2F23C00, 0xE0, 0x294] address: [MAIN, 0x2F23C00, 0xE0, 0x294]
address_unsafe: true
value_type: uint8 value_type: uint8
value: 0 value: 0
# DR Target
-
type: evaluate_write
address: [MAIN, 0x2F5CFF0]
value_type: float
value: "1.01 / FPS_TARGET"

View File

@ -1,6 +1,8 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.2.0 # Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.2.0
# BID: 29F67D61B0AD1500 # BID: 29F67D61B0AD1500
unsafeCheck: false
MASTER_WRITE: MASTER_WRITE:
# Redirect DR to MAIN + 0x2F4CFF0 # Redirect DR to MAIN + 0x2F4CFF0
# REF: A9 24 89 52 49 A2 A7 72, second REF # REF: A9 24 89 52 49 A2 A7 72, second REF
@ -24,7 +26,6 @@ ALL_FPS:
- -
type: write type: write
address: [MAIN, 0x2F13D80, 0xE0, 0x284] address: [MAIN, 0x2F13D80, 0xE0, 0x284]
address_unsafe: true
value_type: uint8 value_type: uint8
value: 0 value: 0
# DR Target # DR Target

View File

@ -1,6 +1,8 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.2.1 # Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.2.1
# BID: 3B2CB1C8865E7B1E # BID: 3B2CB1C8865E7B1E
unsafeCheck: false
MASTER_WRITE: MASTER_WRITE:
# Redirect DR to MAIN + 0x2F4CFF0 # Redirect DR to MAIN + 0x2F4CFF0
# REF: A9 24 89 52 49 A2 A7 72, second REF # REF: A9 24 89 52 49 A2 A7 72, second REF
@ -24,7 +26,6 @@ ALL_FPS:
- -
type: write type: write
address: [MAIN, 0x2F13D80, 0xE0, 0x284] address: [MAIN, 0x2F13D80, 0xE0, 0x284]
address_unsafe: true
value_type: uint8 value_type: uint8
value: 0 value: 0
# DR Target # DR Target

View File

@ -1,12 +1,13 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.0.2 # Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.0.2
# BID: 5E43788065113530 # BID: 5E43788065113530
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable FPS Lock # Disable FPS Lock
# REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it
- -
type: write type: write
address: [MAIN, 0x2E8DCF0, 0xE0, 0x284] address: [MAIN, 0x2E8DCF0, 0xE0, 0x284]
address_unsafe: true
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -1,30 +0,0 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.4.2
# BID: 9B9CCD97EB6EF789
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 0.035714
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: 0x10EC6A4
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, 0x2FC3CB0, 0xE0, 0x294]
address_unsafe: true
value_type: uint8
value: 0

View File

@ -1,12 +1,13 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.0.1 # Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.0.1
# BID: A947DDE7826A3562 # BID: A947DDE7826A3562
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable FPS Lock # Disable FPS Lock
# REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it
- -
type: write type: write
address: [MAIN, 0x2E8AB00, 0xE0, 0x284] address: [MAIN, 0x2E8AB00, 0xE0, 0x284]
address_unsafe: true
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -1,31 +1,38 @@
# 유미아의 아틀리에 ~추억의 연금술사와 창환의 땅~ 1.3.0 # 유미아의 아틀리에 ~추억의 연금술사와 창환의 땅~ 1.3.0
# BID: 6CB3E54C5F648410 # BID: 6CB3E54C5F648410
DECLARATIONS: unsafeCheck: false
-
type: variable
name: dr_target
value_type: float
default_value: 0.035714
evaluate: "1.01 / FPS_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect DR # Redirect DR to MAIN + 0x2F5CFF0
# REF: A9 24 89 52 49 A2 A7 72, second REF # REF: A9 24 89 52 49 A2 A7 72, second REF
- -
type: asm_a64 type: asm_a64
main_offset: 0x10AAEE4 main_offset: 0x10AAEE4
instructions: [ instructions: [
[adrp, x9, $dr_target], [adrp, x9, 0x2f5c000],
[ldr, s1, [x9, $dr_target]], [ldr, s1, [x9, 0xff0]],
[nop] [nop]
] ]
## Default value
-
type: bytes
main_offset: 0x2F5CFF0
value_type: float
value: 0.035714
ALL_FPS: ALL_FPS:
# Disable FPS Lock # Disable FPS Lock
# REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it # REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it
- -
type: write type: write
address: [MAIN, 0x2F23C00, 0xE0, 0x294] address: [MAIN, 0x2F23C00, 0xE0, 0x294]
address_unsafe: true
value_type: uint8 value_type: uint8
value: 0 value: 0
# DR Target
-
type: evaluate_write
address: [MAIN, 0x2F5CFF0]
value_type: float
value: "1.01 / FPS_TARGET"

View File

@ -1,30 +0,0 @@
# 優米雅的鍊金工房 ~追憶之鍊金術士與幻創之地~ 1.4.2
# BID: EF85880A244D33EC
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 0.035714
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: 0x10EC6A4
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, 0x2FC3CB0, 0xE0, 0x294]
address_unsafe: true
value_type: uint8
value: 0

View File

@ -1,12 +1,13 @@
# Monster Hunter Rise JP 16.02 # Monster Hunter Rise JP 16.02
# BID: D2FD97779381FB9A # BID: D2FD97779381FB9A
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Internal FPS lock # Internal FPS lock
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0x12B2E5C8, 0x434] address: [MAIN, 0x12B2E5C8, 0x434]
address_unsafe: true
value_type: float value_type: float
value: FPS_LOCK_TARGET value: FPS_LOCK_TARGET
- -

View File

@ -1,32 +1,34 @@
# Fire Emblem: Three Houses 1.2.0 # Fire Emblem: Three Houses 1.2.0
# BID: 89048449BA238C8C # BID: 89048449BA238C8C
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: float
default_value: 34
evaluate: "0.99 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: float
default_value: 25
evaluate: "0.84 * FRAMETIME_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect DR timing targets # Redirect DR timing targets to MAIN + 0x21E4F30
- -
type: asm_a64 type: asm_a64
main_offset: 0x4C82D0 main_offset: 0x4C82D0
instructions: [ instructions: [
[adrp, x10, $dr_target1], [adrp, x10, 0x21e4000],
[ldr, s2, [x10, $dr_target1]] [ldr, s2, [x10, 0xf30]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x4C8300 main_offset: 0x4C8300
instructions: [ instructions: [
[adrp, x8, $dr_target2], [adrp, x8, 0x21e4000],
[ldr, s2, [x8, $dr_target2]] [ldr, s2, [x8, 0xf34]]
] ]
# Default values
-
type: bytes
main_offset: 0x21E4F30
value_type: float
value: [34, 25]
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x21E4F30]
value_type: float
value: ["0.99 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"]

View File

@ -1,54 +1,49 @@
# NieR:Automata The End of YoRHa Edition US/EU 1.0.2 # NieR:Automata The End of YoRHa Edition US/EU 1.0.2
# BID: E43525F22282A477 # BID: E43525F22282A477
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target_bad
value_type: float
default_value: 45
evaluate: "1.35 * FRAMETIME_TARGET"
-
type: variable
name: dr_target_optimal
value_type: float
default_value: 32.01
evaluate: "0.9603 * FRAMETIME_TARGET"
-
type: variable
name: dr_target_good
value_type: float
default_value: 30
evaluate: "0.9 * FRAMETIME_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect DR timings # Redirect DR timings to MAIN + 0x2BE6F00, [Bad, Optimal, Good]
- -
type: asm_a64 type: asm_a64
main_offset: 0x9BF3E4 main_offset: 0x9BF3E4
instructions: [ instructions: [
[adrp, x12, $dr_target_bad], [adrp, x12, 0x2be6000],
[ldr, s3, [x12, $dr_target_bad]] [ldr, s3, [x12, 0xf00]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x9BF434 main_offset: 0x9BF434
instructions: [ instructions: [
[adrp, x12, $dr_target_optimal], [adrp, x12, 0x2be6000],
[ldr, w12, [x12, $dr_target_optimal]] [ldr, w12, [x12, 0xf04]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x9BF484 main_offset: 0x9BF484
instructions: [ instructions: [
[fcsel, s3, s4, s0, gt], [fcsel, s3, s4, s0, gt],
[adrp, x12, $dr_target_optimal], [adrp, x12, 0x2be6000],
[ldr, s0, [x12, $dr_target_optimal]], [ldr, s0, [x12, 0xf04]],
[adrp, x12, $dr_target_good] [nop]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x9BF4A8 main_offset: 0x9BF4A8
instructions: [ instructions: [
[ldr, s0, [x12, $dr_target_good]] [ldr, s0, [x12, 0xf08]]
] ]
# Default values
-
type: bytes
main_offset: 0x2BE6F00
value_type: float
value: [45, 32.01, 30]
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x2BE6F00]
value_type: float
value: ["1.35 * FRAMETIME_TARGET", "0.9603 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"]

View File

@ -1,11 +1,12 @@
# A Hat in Time 1.0.4 # A Hat in Time 1.0.4
# BID: 746F0D697EEEE2DD # BID: 746F0D697EEEE2DD
unsafeCheck: false
ALL_FPS: ALL_FPS:
# MaxSmoothedFrameRate # MaxSmoothedFrameRate
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0x2265248, 0x71C] address: [MAIN, 0x2265248, 0x71C]
address_unsafe: true
value_type: float value_type: float
value: FPS_LOCK_TARGET value: FPS_LOCK_TARGET

View File

@ -1,61 +1,8 @@
# Crysis 2 Remastered 1.3.0 # Crysis 2 Remastered 1.3.0
# BID: B3967105033ACC08 # BID: B3967105033ACC08
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: float
default_value: 31.5
evaluate: "0.945 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: float
default_value: 32.5
evaluate: "0.975 * FRAMETIME_TARGET"
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: dr_target3
value_type: float
default_value: 33
evaluate: "0.99 * FRAMETIME_TARGET"
-
type: variable
name: dr_target4
value_type: float
default_value: 35
evaluate: "0.99 * FRAMETIME_TARGET"
# DON'T PUT ANYTHING BETWEEN - END
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: dr_target5
value_type: float
default_value: 32
evaluate: "0.96 * FRAMETIME_TARGET"
-
type: variable
name: dr_target6
value_type: float
default_value: 33.5
evaluate: "0.96 * FRAMETIME_TARGET"
# DON'T PUT ANYTHING BETWEEN - END
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: dr_target7
value_type: float
default_value: 28.75
evaluate: "0.8625 * FRAMETIME_TARGET"
-
type: variable
name: dr_target8
value_type: float
default_value: 29.75
evaluate: "0.8625 * FRAMETIME_TARGET"
# DON'T PUT ANYTHING BETWEEN - END
MASTER_WRITE: MASTER_WRITE:
# Redirect Dynamic Resolution Timings to read always not from .text # Redirect Dynamic Resolution Timings to read always not from .text
- -
@ -75,32 +22,63 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0x2EE9A38 main_offset: 0x2EE9A38
instructions: [ instructions: [
[adrp, x11, $dr_target1] [adrp, x11, 0x453b000]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x2EE9A40 main_offset: 0x2EE9A40
instructions: [ instructions: [
[adrp, x12, $dr_target2], [adrp, x12, 0x453b000],
[ldr, s1, [x11, $dr_target1]], [ldr, s1, [x11, 0x300]],
[ldr, s2, [x12, $dr_target2]] [ldr, s2, [x12, 0x304]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x2EE9A50 main_offset: 0x2EE9A50
instructions: [ instructions: [
[adrp, x13, $dr_target3], [adrp, x13, 0x453b000],
[add, x13, x13, $dr_target3] [add, x13, x13, 0x308]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x2EE9A7C main_offset: 0x2EE9A7C
instructions: [ instructions: [
[adrp, x9, $dr_target5], [adrp, x9, 0x453b000],
[add, x9, x9, $dr_target5], [add, x9, x9, 0x310],
[adrp, x11, $dr_target7], [adrp, x11, 0x453b000],
[add, x11, x11, $dr_target7] [add, x11, x11, 0x318]
] ]
# Write default values
# MAIN + 0x333FAFC
-
type: bytes
main_offset: 0x453B300
value_type: float
value: 31.5
# MAIN + 0x333F844
-
type: bytes
main_offset: 0x453B304
value_type: float
value: 32.5
# MAIN + 0x333E360
-
type: bytes
main_offset: 0x453B308
value_type: float
value: [33, 35]
# MAIN + 0x333E258
-
type: bytes
main_offset: 0x453B310
value_type: float
value: [32, 33.5]
# MAIN + 0x333E9F8
-
type: bytes
main_offset: 0x453B318
value_type: float
value: [28.75, 29.75]
ALL_FPS: ALL_FPS:
# sys_MaxFPS # sys_MaxFPS
- -
@ -110,10 +88,40 @@ ALL_FPS:
value: FPS_LOCK_TARGET value: FPS_LOCK_TARGET
# Renderer thread delay # Renderer thread delay
- -
type: evaluate_write type: write
address: [MAIN, 0x444A0D8] address: [MAIN, 0x444A0D8]
value_type: float value_type: float
value: "0.66 / FPS_TARGET" value: 0.01
# MAIN + 0x333FAFC
-
type: evaluate_write
address: [MAIN, 0x453B300]
value_type: float
value: "0.945 * FRAMETIME_TARGET"
# MAIN + 0x333F844
-
type: evaluate_write
address: [MAIN, 0x453B304]
value_type: float
value: "0.975 * FRAMETIME_TARGET"
# MAIN + 0x333E360
-
type: evaluate_write
address: [MAIN, 0x453B308]
value_type: float
value: ["0.99 * FRAMETIME_TARGET", "0.99 * FRAMETIME_TARGET"]
# MAIN + 0x333E258
-
type: evaluate_write
address: [MAIN, 0x453B310]
value_type: float
value: ["0.96 * FRAMETIME_TARGET", "0.96 * FRAMETIME_TARGET"]
# MAIN + 0x333E9F8
-
type: evaluate_write
address: [MAIN, 0x453B318]
value_type: float
value: ["0.8625 * FRAMETIME_TARGET", "0.8625 * FRAMETIME_TARGET"]
- -
type: block type: block
what: timing what: timing

View File

@ -1,36 +0,0 @@
# Empire of Sin 1.10.0
# BID: BD5F1ED30FDBA245
DECLARATIONS:
-
type: variable
name: dr_target_min
value_type: double
default_value: 28.5714282989502
evaluate: "999.9996 / (FPS_TARGET + 5)"
-
type: variable
name: dr_target_max
value_type: double
default_value: 33.33333206176758
evaluate: "0.9999996 * FRAMETIME_TARGET"
MASTER_WRITE:
# REF: RomeroGames.DynamicResolutionService::UpdateService()
-
type: asm_a64
main_offset: 0x17B8A3C
instructions: [
[nop],
[nop],
[adrp, x9, $dr_target_max],
[ldr, d0, [x9, $dr_target_max]]
]
-
type: asm_a64
main_offset: 0x17B8C00
instructions: [
[nop],
[nop],
[adrp, x8, $dr_target_min],
[ldr, d1, [x8, $dr_target_min]]
]

View File

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

View File

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

View File

@ -1,19 +1,8 @@
# WARRIORS: Abyss 1.4.0 # WARRIORS: Abyss 1.4.0
# BID: 36B692C0FA9F6F46 # BID: 36B692C0FA9F6F46
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: float
default_value: 50
evaluate: "1.5 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: float
default_value: 40
evaluate: "1.2 * FRAMETIME_TARGET"
MASTER_WRITE: MASTER_WRITE:
# REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E
# Use FPS Target instead of vsync value for Dynamic Resolution max delta # Use FPS Target instead of vsync value for Dynamic Resolution max delta
@ -24,21 +13,27 @@ MASTER_WRITE:
[adrp, x1, 0x1021000], [adrp, x1, 0x1021000],
[ldr, s1, [x1, 0xe10]] [ldr, s1, [x1, 0xe10]]
] ]
# Redirect DR Targets # Redirect DR Targets to MAIN+0x1477F00
- -
type: asm_a64 type: asm_a64
main_offset: 0x6E3B94 main_offset: 0x6E3B94
instructions: [ instructions: [
[adrp, x9, $dr_target1], [adrp, x9, 0x14bf000],
[ldr, s1, [x9, $dr_target1]] [ldr, s1, [x9, 0xf00]]
] ]
- -
type: asm_a64 type: asm_a64
main_offset: 0x6E3BA4 main_offset: 0x6E3BA4
instructions: [ instructions: [
[adrp, x9, $dr_target2], [adrp, x9, 0x14bf000],
[ldr, s1, [x9, $dr_target2]] [ldr, s1, [x9, 0xf04]]
] ]
# Default values
-
type: bytes
main_offset: 0x14BFF00
value_type: float
value: [50, 40]
ALL_FPS: ALL_FPS:
# REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00 # REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00
# FPS Lock # FPS Lock
@ -73,3 +68,9 @@ ALL_FPS:
address: [MAIN, 0x1021E18] address: [MAIN, 0x1021E18]
value_type: float value_type: float
value: "FPS_TARGET" value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x14BFF00]
value_type: float
value: ["1.5 * FRAMETIME_TARGET", "1.2 * FRAMETIME_TARGET"]

View File

@ -1,6 +1,8 @@
# SONIC GENERATIONS 1.0.1/1.1.0 # SONIC GENERATIONS 1.0.1/1.1.0
# BID: D91C67509C6AED8D # BID: D91C67509C6AED8D
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# NOP internal FPS Lock # NOP internal FPS Lock
# REF: 00 00 23 1E E1 02 27 1E 00 08 21 1E # REF: 00 00 23 1E E1 02 27 1E 00 08 21 1E
@ -18,3 +20,11 @@ MASTER_WRITE:
instructions: [ instructions: [
[mov, w20, 2] [mov, w20, 2]
] ]
ALL_FPS:
# DUMMY
-
type: write
address: [MAIN, 0x5226F00]
value_type: uint8
value: 0

View File

@ -1,12 +1,13 @@
# Warhammer 40,000: Boltgun 1.0.0.7 # Warhammer 40,000: Boltgun 1.0.0.7
# BID: 3E961285846C72A5 # BID: 3E961285846C72A5
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate # Disable bUseFixedFrameRate to unlock framerate
- -
type: write type: write
address: [MAIN, 0x63A69F8, 0x7A4] address: [MAIN, 0x63A69F8, 0x7A4]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -1,12 +1,13 @@
# Warhammer 40,000: Boltgun 1.0.0.3 # Warhammer 40,000: Boltgun 1.0.0.3
# BID: 7C992B6A003C599F # BID: 7C992B6A003C599F
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate # Disable bUseFixedFrameRate to unlock framerate
- -
type: write type: write
address: [MAIN, 0x710C9C8, 0x7A4] address: [MAIN, 0x710C9C8, 0x7A4]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -1,12 +1,13 @@
# Warhammer 40,000: Boltgun 1.0.0.6 # Warhammer 40,000: Boltgun 1.0.0.6
# BID: B8630C6EE3A22FE8 # BID: B8630C6EE3A22FE8
unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate # Disable bUseFixedFrameRate to unlock framerate
- -
type: write type: write
address: [MAIN, 0x63A69F8, 0x7A4] address: [MAIN, 0x63A69F8, 0x7A4]
address_unsafe: true
value_type: uint32 value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40 # Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained: # By writing 7 we are making sure that other flags are maintained:

View File

@ -2,24 +2,25 @@
# BID: E853C44FDF18B88F # BID: E853C44FDF18B88F
# Credits to Hazerou for finding offsets for FPS lock and speed # Credits to Hazerou for finding offsets for FPS lock and speed
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target
value_type: float
default_value: 0.0166666666
evaluate: "0.5 / FPS_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect reading DR GPU time factor to MAIN + 0x4FC0E00 # Redirect reading DR GPU time factor to MAIN + 0x4FC0E00
- -
type: asm_a64 type: asm_a64
main_offset: 0x470E80 main_offset: 0x470E80
instructions: [ instructions: [
[adrp, x9, $dr_target], [adrp, x9, 0x4fc0000],
[ldr, s2, [x9, $dr_target]] [ldr, s2, [x9, 0xe00]]
] ]
# Default value (= 0.5 / FPS)
-
type: bytes
main_offset: 0x4FC0E00
value_type: float
value: 0.0166666666
ALL_FPS: ALL_FPS:
# Internal Vsync # Internal Vsync (default value)
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0x45A7410] address: [MAIN, 0x45A7410]
@ -31,3 +32,10 @@ ALL_FPS:
address: [MAIN, 0x45A71F0] address: [MAIN, 0x45A71F0]
value_type: float value_type: float
value: FPS_TARGET value: FPS_TARGET
# DR GPU time factor
-
type: evaluate_write
address: [MAIN, 0x4FC0E00]
value_type: float
value: "0.5 / FPS_TARGET"

View File

@ -1,20 +1,29 @@
# Nights Of Azure 2: Bride of the New Moon 1.0.1 # Nights Of Azure 2: Bride of the New Moon 1.0.1
# BID: 81DA4F9E1E961CA6 # BID: 81DA4F9E1E961CA6
DECLARATIONS: unsafeCheck: true
-
type: code
name: tripleBuffer
instructions: [
[mov, w22, 3],
[str, w22, [x1, 8]],
[b, 0xa305c0]
]
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: asm_a64 type: asm_a64
main_offset: 0x7E4ED8 main_offset: 0x7E4ED8
instructions: [ instructions: [
[bl, _tripleBuffer()] [bl, 0xa31900]
] ]
-
type: asm_a64
main_offset: 0xA31900
instructions: [
[mov, w22, 3],
[str, w22, [x1, 8]],
[b, 0xa305c0]
]
ALL_FPS:
# DUMMY
-
type: write
address: [MAIN, 0x13E5400]
value_type: uint8
value: 0

View File

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

View File

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

View File

@ -2,6 +2,8 @@
# BID: 7A450848CFDEC18E # BID: 7A450848CFDEC18E
# Some prerendered cutscenes are still pushed at 30 FPS # Some prerendered cutscenes are still pushed at 30 FPS
unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52 # Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52
- -
@ -38,10 +40,10 @@ ALL_FPS:
value: FPS_LOCK_TARGET value: FPS_LOCK_TARGET
# Renderer thread delay # Renderer thread delay
- -
type: evaluate_write type: write
address: [MAIN, 0x5704028] address: [MAIN, 0x5704028]
value_type: float value_type: float
value: "0.66 / FPS_TARGET" value: 0.01
# DR timings # DR timings
- -
type: evaluate_write type: evaluate_write

View File

@ -1,19 +1,8 @@
# Sherlock Holmes: Crimes and Punishments 1.0.0 # Sherlock Holmes: Crimes and Punishments 1.0.0
# BID: 789C2939A757C0CD # BID: 789C2939A757C0CD
DECLARATIONS: unsafeCheck: true
-
type: variable
name: dr_target1
value_type: float
default_value: 38
evaluate: "1.14 * FRAMETIME_TARGET"
-
type: variable
name: dr_target2
value_type: float
default_value: 32
evaluate: "0.96 * FRAMETIME_TARGET"
MASTER_WRITE: MASTER_WRITE:
# Redirect Dynamic Resolution timings to MAIN + 0x23774F00 # Redirect Dynamic Resolution timings to MAIN + 0x23774F00
# 38.0 # 38.0
@ -21,18 +10,24 @@ MASTER_WRITE:
type: asm_a64 type: asm_a64
main_offset: 0xF57294 main_offset: 0xF57294
instructions: [ instructions: [
[adrp, x9, $dr_target1], [adrp, x9, 0x23774000],
[fmul, s0, s0, s1], [fmul, s0, s0, s1],
[ldr, s1, [x9, $dr_target1]] [ldr, s1, [x9, 0xf00]]
] ]
# 32.0 # 32.0
- -
type: asm_a64 type: asm_a64
main_offset: 0xF572B8 main_offset: 0xF572B8
instructions: [ instructions: [
[adrp, x9, $dr_target2], [ldr, s1, [x9, 0xf04]],
[ldr, s1, [x9, $dr_target2]] [nop]
] ]
# Default values:
-
type: bytes
main_offset: 0x23774F00
value_type: float
value: [38.0, 32.0]
ALL_FPS: ALL_FPS:
# UGameEngine::GetMaxTickRate() # UGameEngine::GetMaxTickRate()
# Bool Lock FPS # Bool Lock FPS
@ -41,3 +36,9 @@ ALL_FPS:
address: [MAIN, 0x2E61108] address: [MAIN, 0x2E61108]
value_type: uint8 value_type: uint8
value: 0 value: 0
# Dynamic Resolution
-
type: evaluate_write
address: [MAIN, 0x23774F00]
value_type: float
value: ["(38.0 / (1000/30)) * FRAMETIME_TARGET", "(32.0 / (1000/30)) * FRAMETIME_TARGET"]

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