This commit is contained in:
redraz 2025-09-09 16:16:31 +03:00
parent 90908e1cf4
commit 6d87b67c86
193 changed files with 2429 additions and 2484 deletions

View File

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

View File

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

View File

@ -1,8 +1,13 @@
# Tiebreak+: Official Game of the ATP and WTA 1.3.0
# BID: 88CC45A195E0BDA8
unsafeCheck: true
DECLARATIONS:
-
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:
# Triple buffer
# REF: 00 40 00 00 00 04 00 00 00 88 00 00 02 00 00 00
@ -17,20 +22,7 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x147BE04
instructions: [
[adrp, x8, 0x30c3000],
[ldr, s3, [x8, 0xf00]],
[adrp, x8, $dr_target],
[ldr, s3, [x8, $dr_target]],
[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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,43 @@
# Sherlock Holmes: The Devil's Daughter 1.0.0
# BID: 2B37ED2A971948F3
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect Dynamic Resolution timings to MAIN + 0x3189F00
# 38.0
@ -10,47 +45,43 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0xFFEAFC
instructions: [
[adrp, x10, 0x3189000],
[ldr, s1, [x10, 0xf00]]
[adrp, x10, $dr_target1],
[ldr, s1, [x10, $dr_target1]]
]
# 22.0
-
type: asm_a64
main_offset: 0xFFEB0C
instructions: [
[ldr, s1, [x10, 0xf04]]
[ldr, s1, [x10, $dr_target2]]
]
# 43.5
-
type: asm_a64
main_offset: 0xFFEAD4
instructions: [
[adrp, x10, 0x3189000],
[ldr, s1, [x10, 0xf08]]
[adrp, x10, $dr_target3],
[ldr, s1, [x10, $dr_target3]]
]
# 58.0
-
type: asm_a64
main_offset: 0xFFEAE4
instructions: [
[adrp, x10, 0x3189000],
[ldr, s1, [x10, 0xf0c]]
[adrp, x10, $dr_target4],
[ldr, s1, [x10, $dr_target4]]
]
# 47.0 | 34.0
-
type: asm_a64
main_offset: 0xFFEB20
instructions: [
[adrp, x11, 0x3189000],
[ldr, s1, [x11, 0xf10]],
[ldr, w12, [x11, 0xf14]]
[adrp, x11, $dr_target5],
[ldr, s1, [x11, $dr_target5]],
[adrp, x11, $dr_target6],
[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:
# UGameEngine::GetMaxTickRate()
# Bool Lock FPS
@ -59,10 +90,3 @@ ALL_FPS:
address: [MAIN, 0x30D1B7C]
value_type: uint8
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,8 +2,6 @@
# BID: 7A450848CFDEC18E
# Some prerendered cutscenes are still pushed at 30 FPS
unsafeCheck: true
MASTER_WRITE:
# Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52
-
@ -40,10 +38,10 @@ ALL_FPS:
value: FPS_LOCK_TARGET
# Renderer thread delay
-
type: write
type: evaluate_write
address: [MAIN, 0x5704028]
value_type: float
value: 0.01
value: "0.66 / FPS_TARGET"
# DR timings
-
type: evaluate_write
@ -53,4 +51,3 @@ ALL_FPS:
-
type: block
what: timing

View File

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

View File

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

View File

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

View File

@ -3,28 +3,20 @@
# 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.
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_scale
value_type: double
default_value: 1000000
evaluate: "30000000 / FPS_TARGET"
MASTER_WRITE:
# Change location of GPU frametime double divider to MAIN+0x32C6D00
# Change location of GPU frametime double divider
-
type: asm_a64
main_offset: 0x921768
instructions: [
[adrp, x8, 0x32c6000],
[ldr, d1, [x8, 0xd00]]
[adrp, x8, $dr_scale],
[ldr, d1, [x8, $dr_scale]]
]
# 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,8 +2,6 @@
# BID: 799D1061182C1302
# 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:
# Remove FPS Lock
-
@ -23,11 +21,13 @@ ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0xED96A8, 0x30]
address_unsafe: true
value_type: uint32
value: "19200000 / FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0xED96A8, 0x28]
address_unsafe: true
value_type: uint32
value: "1920000 / FPS_TARGET"
# FPS 2D Game Speed Target
@ -42,4 +42,3 @@ ALL_FPS:
address: [MAIN, 0xEFFC60, 0x50]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -2,13 +2,12 @@
# 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.
unsafeCheck: true
ALL_FPS:
# Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
-
type: write
address: [MAIN, 0x5F32908, 0x7B8]
address_unsafe: true
value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained:
@ -31,3 +30,4 @@ ALL_FPS:
-
type: block
what: timing

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,50 +1,48 @@
# Eiyuden Chronicle: Rising 1.02
# BID: 39DC785D9073C22B
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect DynamicResolution$$LowerResSW Max Target in MS to MAIN+0x3BE1200
# Redirect DynamicResolution$$LowerResSW Max Target in MS
-
type: asm_a64
main_offset: 0x2426988
instructions: [
[b, 0x2426a94]
[bl, _drMaxTarget()]
]
-
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
# Redirect DynamicResolution$$LowerResSW Min Target
-
type: asm_a64
main_offset: 0x24269F4
instructions: [
[b, 0x2426ea4]
[bl, _drMinTarget()]
]
-
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,8 +1,6 @@
# Fate/Samurai Remnant 1.3.2
# 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
MASTER_WRITE:
-

View File

@ -4,58 +4,45 @@
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect FPS Lock and Dynamic Resolution target values to MAIN + 0x21036F00
-
type: asm_a64
main_offset: 0x13281C
instructions: [
[adrp, x8, 0x21036000],
[ldr, x8, [x8, 0xf00]]
[adrp, x8, $fps_lock],
[ldr, x8, [x8, $fps_lock]]
]
-
type: asm_a64
main_offset: 0x3E324C
instructions: [
[adrp, x8, 0x21036000],
[ldr, x8, [x8, 0xf00]]
[adrp, x8, $fps_lock],
[ldr, x8, [x8, $fps_lock]]
]
# NOP updating Dynamic Resolution target value
-
type: asm_a64
main_offset: 0x2D94E8
instructions: [
[adrp, x9, 0x21036000],
[ldr, w9, [x9, 0xf08]]
[adrp, x9, $dr_target],
[ldr, w9, [x9, $dr_target]]
]
-
type: asm_a64
main_offset: 0x597C5C
instructions: [
[adrp, x9, 0x21036000],
[ldr, w9, [x9, 0xf08]]
[adrp, x9, $dr_target],
[ldr, w9, [x9, $dr_target]]
]
# 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

@ -2,8 +2,13 @@
# BID: 283095029A5AB467
# Double buffer is reserved line by line inside class array, so requires ton of patching
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 33.333333
evaluate: FRAMETIME_TARGET
MASTER_WRITE:
# Force game to use dynamic speed instead of fixed speed
-
@ -12,25 +17,11 @@ MASTER_WRITE:
instructions: [
[mov, w8, 2]
]
# Redirect DR timing to MAIN + 0x9DBAEB8
# Redirect DR timing
-
type: asm_a64
main_offset: 0xE88250
instructions: [
[adrp, x8, 0x9dba000],
[ldr, s0, [x8, 0xeb8]]
[adrp, x8, $dr_target],
[ldr, s0, [x8, $dr_target]]
]
# 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,8 +1,6 @@
# MotoGP 24 1.0.5
# BID: 1053EA8AD2A50F15
unsafeCheck: false
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-

View File

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

View File

@ -1,10 +1,21 @@
# LEGO Star Wars: The Skywalker Saga 1.10.0
# BID: EC593A5F9552100A
unsafeCheck: true
DECLARATIONS:
-
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:
# redirect reading Dynamic Resolution timing min & max to MAIN + 0xC3C0A50
# redirect reading Dynamic Resolution timing min & max
-
type: asm_a64
main_offset: 0x6171A0
@ -12,33 +23,21 @@ MASTER_WRITE:
[nop],
[ldr, s3, [x11, 0xe04]],
[fadd, s1, s1, s3],
[adrp, x12, 0xc3c0000],
[ldr, s2, [x12, 0xa50]]
[adrp, x12, $dr_target1],
[ldr, s2, [x12, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x6171F0
instructions: [
[adrp, x11, 0xc3c0000],
[ldr, s2, [x11, 0xa54]]
[adrp, x11, $dr_target2],
[ldr, s2, [x11, $dr_target2]]
]
# Default DR timings
-
type: bytes
main_offset: 0xC3C0A50
value_type: float
value: [24, 31]
ALL_FPS:
# g_video_swap_mode
## Setting it to 1 to enable 120 FPS results in resolution range being always forced to docked mode
-
type: write
address: [MAIN, 0xAA62FF0]
value_type: int32
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,8 +1,6 @@
# Hellblade: Senua's Sacrifice 1.1.0
# BID: 9B3DDF2FB9100E51
unsafeCheck: false
ALL_FPS:
# Custom Dynamic Resolution implementation - Frame Time (MAX/MIN)
# MAX = (1/FPS) * 0.95
@ -11,7 +9,7 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x520BBE0, 0x40]
value_type: float
value: ["(1 / FPS_TARGET) * 0.95", "(1 / FPS_TARGET) * 0.9"]
value: ["0.95 / FPS_TARGET", "0.9 / FPS_TARGET"]
# t.MaxFPS
-
type: evaluate_write

View File

@ -1,28 +1,22 @@
# Assassin's Creed The Rebel Collection - Assassin's Creed Rogue 1.0.0
# BID: 3DEF0E36AA8C6592
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_scale
value_type: float
default_value: 1000
evaluate: "30000 / FPS_TARGET"
MASTER_WRITE:
# Patch code to divide last frametime by float scale factor stored in MAIN+0x61EE400
# Patch code to divide last frametime by float scale factor
# To match it to Dynamic Resolution calculations
-
type: asm_a64
main_offset: 0x9F1DDC
instructions: [
[adrp, x8, 0x61ee000],
[ldr, s1, [x8, 0x400]]
[adrp, x8, $dr_scale],
[ldr, s1, [x8, $dr_scale]]
]
# 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

@ -3,6 +3,167 @@
unsafeCheck: true
DECLARATIONS:
-
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:
# Dynamic speed mod for stuff like UI, lipsync, grass and rain
## Redirect nvnQueuePresentTexture call to code cave at MAIN+0x1735050
@ -10,106 +171,51 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x95EED8
instructions: [
[b, 0x1735050]
[bl, _dynamicSpeed()]
]
## 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
-
type: asm_a64
main_offset: 0x286968
instructions: [
[adrp, x21, 0x47be000],
[adrp, x21, $speed_factor],
[ldr, x0, [x8, 0xe18]],
[ldr, s10, [x21, 0x268]]
[ldr, s10, [x21, $speed_factor]]
]
## Function 3 to speed factor // Usage unknown
-
type: asm_a64
main_offset: 0xA16F00
instructions: [
[adrp, x0, 0x47be000],
[ldr, s8, [x0, 0x268]]
[adrp, x0, $speed_factor],
[ldr, s8, [x0, $speed_factor]]
]
## Function 4 to FPS // UI Speed
-
type: asm_a64
main_offset: 0xA1F060
instructions: [
[adrp, x0, 0x47be000],
[adrp, x0, $current_fps],
[fmov, s0, w8],
[ldr, s0, [x0, 0x26c]]
[ldr, s0, [x0, $current_fps]]
]
## Function 5 to FPS // Usage unknown
-
type: asm_a64
main_offset: 0x2672DC
instructions: [
[adrp, x0, 0x47ae000],
[adrp, x0, $current_fps],
[fmov, s0, w8],
[ldrh, w8, [x19, 0x68]],
[ldr, s5, [x0, 0x26c]]
[ldr, s5, [x0, $current_fps]]
]
## Function 6 to FPS
-
type: asm_a64
main_offset: 0x26DB70
instructions: [
[adrp, x0, 0x47be000],
[ldr, s0, [x0, 0x26c]],
[adrp, x0, $current_fps],
[ldr, s0, [x0, $current_fps]],
[fcvtzu, w0, s0],
[mov, w9, 6],
[udiv, w8, w0, w9]
@ -119,29 +225,20 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x1E2924
instructions: [
[adrp, x9, 0x47be000]
[adrp, x9, $current_frametime]
]
-
type: asm_a64
main_offset: 0x1E2938
instructions: [
[ldr, s0, [x9, 0x270]]
[ldr, s0, [x9, $current_frametime]]
]
# Adjust various elements related to fighting
-
type: asm_a64
main_offset: 0x1E8F48
instructions: [
[b, 0x1735174]
]
## Code cave
-
type: asm_a64
main_offset: 0x1735174
instructions: [
[adrp, x9, 0x47be000],
[ldr, s0, [x9, 0x268]],
[b, 0x1e8f4c]
[bl, _battleFix()]
]
## Fix gun speed
-
@ -155,39 +252,15 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x13A90B4
instructions: [
[adrp, x8, 0x47be000],
[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]
[adrp, x8, $dr_target],
[ldr, s0, [x8, $dr_target]]
]
## Connect function 1
-
type: asm_a64
main_offset: 0x1E17A0
instructions: [
[bl, 0x1735108]
[bl, _cameraRotationFix()]
]
## Connect function 2
-
@ -200,139 +273,55 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x1E17BC
instructions: [
[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]
[bl, _cameraRotationFix()]
]
# Adjust Field Action gauge bar speed
-
type: asm_a64
main_offset: 0xE5E00
instructions: [
[adrp, x0, 0x47be000],
[adrp, x0, $speed_factor],
[adrp, x9, 0x1d54000],
[ldr, s8, [x0, 0x268]]
[ldr, s8, [x0, $speed_factor]]
]
## Fix for FN Site
-
type: asm_a64
main_offset: 0xE5858
instructions: [
[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]
[bl, _fnSiteFix()]
]
# Fix long jump when not running
-
type: asm_a64
main_offset: 0x23EF70
instructions: [
[b, 0x17350fc]
]
## Code cave
-
type: asm_a64
main_offset: 0x17350FC
instructions: [
[fmov, s11, 30.0],
[fadd, s11, s11, s11],
[b, 0x23ef74]
[bl, _longJumpFix()]
]
# 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
-
type: asm_a64
main_offset: 0x5C6280
instructions: [
[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]
[bl, _qteFix()]
]
# Fix fog speed
-
type: asm_a64
main_offset: 0x296AE0
instructions: [
[adrp, x8, 0x47be000],
[ldr, s2, [x8, 0x268]],
[bl, 0x17351b4]
[adrp, x8, $speed_factor],
[ldr, s2, [x8, $speed_factor]],
[bl, _fogSpeedFix()]
]
## Code cave
-
type: asm_a64
main_offset: 0x17351B4
main_offset: 0x676D4
instructions: [
[fsqrt, s2, s2],
[fmadd, s0, s1, s2, s0],
[ret]
[bl, _overdriveFix()]
]
ALL_FPS:
# FPS Target
-
type: evaluate_write
address: [MAIN, 0x47BE300]
value_type: uint32
value: "FRAMETIME_TARGET * 1000000"
# FPS Lock
# ref: 00 01 00 b9 2a 01 00 b9 c0 03 5f d6
-
@ -340,12 +329,6 @@ ALL_FPS:
address: [MAIN, 0x1D943A0]
value_type: int32
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
## Adjusts DR target
-
@ -354,7 +337,7 @@ ALL_FPS:
compare_value_type: uint32
compare_type: ">"
compare_value: 2
address: [MAIN, 0x47BEF00]
address: [VARIABLE, dr_target]
value_type: float
value: 0.03333333333
## Force OS to run at 60 Hz with interval 2
@ -364,6 +347,5 @@ ALL_FPS:
compare_value_type: uint32
compare_type: ">"
compare_value: 2
address: [MAIN]
value_type: refresh_rate
value: 30

View File

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

View File

@ -1,13 +1,12 @@
# DRAGON QUEST TREASURES 1.0.1
# BID: 2F81A2EC9B298B37
unsafeCheck: false
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:

View File

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

View File

@ -0,0 +1,106 @@
# 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,8 +2,6 @@
# BID: D9BA7DB72FFAFECD
# Thanks to Hazerou for finding interval offsets
unsafeCheck: false
MASTER_WRITE:
# Remove double buffer
-
@ -84,12 +82,15 @@ ALL_FPS:
-
type: write
address: [MAIN, 0xA72628, 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))
-
type: evaluate_write
address: [MAIN, 0xA726B0, 0x140, 0x1B0, 0x20, 0x34]
address_unsafe: true
value_type: float
value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"]

View File

@ -1,45 +1,44 @@
# Resident Evil 1.0.0
# BID: 6BEC9B23B09DF46C
unsafeCheck: true
DECLARATIONS:
-
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:
# Detect prerendered cutscenes
-
type: asm_a64
main_offset: 0xB1A810
main_offset: 0xB1A818
instructions: [
[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]
[bl, _signalCutscene()]
]
-
type: asm_a64
main_offset: 0xB1A9BC
instructions: [
[b, 0xb31c10]
]
-
type: asm_a64
main_offset: 0xB31C10
instructions: [
[mov, w1, wzr],
[adrp, x2, 0x24e7000],
[str, w1, [x2, 0xff0]],
[b, 0xb24ec0]
[b, _designalCutscene()]
]
ALL_FPS:
# Internal FPS Lock
@ -51,9 +50,7 @@ ALL_FPS:
-
type: compare
compare_type: "=="
compare_value_type: uint32
compare_value: 1
compare_address: [MAIN, 0x24E7FF0]
address: [MAIN]
compare_address: [VARIABLE, cutscene_flag]
value_type: refresh_rate
value: 30

View File

@ -1,17 +1,28 @@
# REYNATIS (US/EU) 1.0.10
# BID: 5F765D2CC4CDEF1C
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C22F00
# Redirect reading DR timing in DynamicResolution::LowerResSW()
# REF: 01 f0 67 1e
-
type: asm_a64
main_offset: 0x38E7ECC
instructions: [
[adrp, x20, 0x7c22000],
[ldr, d1, [x20, 0xf00]],
[adrp, x20, $dr_target1],
[ldr, d1, [x20, $dr_target1]],
[fcmpe, d0, d1],
[ldp, s9, s8, [x19, 0x40]],
[b.le, 0x38e7f34],
@ -21,19 +32,5 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x38E7F34
instructions: [
[ldr, d1, [x20, 0xf08]]
[ldr, d1, [x20, $dr_target2]]
]
# 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,13 +1,12 @@
# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.50
# BID: 20503FA77FA416B7
unsafeCheck: false
ALL_FPS:
# Disable bUseFixedFrameRate in cutscenes to unlock framerate
-
type: write
address: [MAIN, 0x9456538, 0x810]
address_unsafe: true
value_type: uint32
# Default is 0x47 in cutscenes, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained:

View File

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

View File

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

View File

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

View File

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

View File

@ -4,63 +4,50 @@
# Fishing timer is decreasing 2x faster at 60 FPS
# Bike is turning 2x faster at 60 FPS
unsafeCheck: true
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 to MAIN+0x2B31200
# Move loading FPS lock time
-
type: asm_a64
main_offset: 0x511818
instructions: [
[adrp, x9, 0x2b31000],
[ldr, w9, [x9, 0x200]]
[adrp, x9, $fps_lock],
[ldr, w9, [x9, $fps_lock]]
]
# Default value
-
type: bytes
main_offset: 0x2B31200
value_type: uint32
value: 33333333
# Write game's loop time as float to MAIN+0x2B31204
# Write game's loop time as float
-
type: asm_a64
main_offset: 0x511884
instructions: [
[b, 0x5117f4]
[bl, _dynamicSpeed()]
]
-
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
- # Read lowest timing float factor
type: asm_a64
main_offset: 0x5E5EC
instructions: [
[adrp, x8, 0x2b31000],
[adrp, x8, $frame_time],
[fminnm, s1, s1, s2],
[ldr, s2, [x8, 0x204]]
[ldr, s2, [x8, $frame_time]]
]
- # 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,8 +1,6 @@
# Atelier Yumia: The Alchemist of Memories & the Envisioned Land 1.1.0
# BID: 153DB27728D41305
unsafeCheck: false
MASTER_WRITE:
# Redirect DR to MAIN + 0x2F11FF0
# REF: A9 24 89 52 49 A2 A7 72
@ -26,6 +24,7 @@ ALL_FPS:
-
type: write
address: [MAIN, 0x2ED8D10, 0xE0, 0x284]
address_unsafe: true
value_type: uint8
value: 0
# DR Target

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,34 +1,32 @@
# Fire Emblem: Three Houses 1.2.0
# BID: 89048449BA238C8C
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect DR timing targets to MAIN + 0x21E4F30
# Redirect DR timing targets
-
type: asm_a64
main_offset: 0x4C82D0
instructions: [
[adrp, x10, 0x21e4000],
[ldr, s2, [x10, 0xf30]]
[adrp, x10, $dr_target1],
[ldr, s2, [x10, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x4C8300
instructions: [
[adrp, x8, 0x21e4000],
[ldr, s2, [x8, 0xf34]]
[adrp, x8, $dr_target2],
[ldr, s2, [x8, $dr_target2]]
]
# 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,49 +1,54 @@
# NieR:Automata The End of YoRHa Edition US/EU 1.0.2
# BID: E43525F22282A477
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect DR timings to MAIN + 0x2BE6F00, [Bad, Optimal, Good]
# Redirect DR timings
-
type: asm_a64
main_offset: 0x9BF3E4
instructions: [
[adrp, x12, 0x2be6000],
[ldr, s3, [x12, 0xf00]]
[adrp, x12, $dr_target_bad],
[ldr, s3, [x12, $dr_target_bad]]
]
-
type: asm_a64
main_offset: 0x9BF434
instructions: [
[adrp, x12, 0x2be6000],
[ldr, w12, [x12, 0xf04]]
[adrp, x12, $dr_target_optimal],
[ldr, w12, [x12, $dr_target_optimal]]
]
-
type: asm_a64
main_offset: 0x9BF484
instructions: [
[fcsel, s3, s4, s0, gt],
[adrp, x12, 0x2be6000],
[ldr, s0, [x12, 0xf04]],
[nop]
[adrp, x12, $dr_target_optimal],
[ldr, s0, [x12, $dr_target_optimal]],
[adrp, x12, $dr_target_good]
]
-
type: asm_a64
main_offset: 0x9BF4A8
instructions: [
[ldr, s0, [x12, 0xf08]]
[ldr, s0, [x12, $dr_target_good]]
]
# 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,12 +1,11 @@
# A Hat in Time 1.0.4
# BID: 746F0D697EEEE2DD
unsafeCheck: false
ALL_FPS:
# MaxSmoothedFrameRate
-
type: evaluate_write
address: [MAIN, 0x2265248, 0x71C]
address_unsafe: true
value_type: float
value: FPS_LOCK_TARGET

View File

@ -1,8 +1,61 @@
# Crysis 2 Remastered 1.3.0
# BID: B3967105033ACC08
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect Dynamic Resolution Timings to read always not from .text
-
@ -22,63 +75,32 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x2EE9A38
instructions: [
[adrp, x11, 0x453b000]
[adrp, x11, $dr_target1]
]
-
type: asm_a64
main_offset: 0x2EE9A40
instructions: [
[adrp, x12, 0x453b000],
[ldr, s1, [x11, 0x300]],
[ldr, s2, [x12, 0x304]]
[adrp, x12, $dr_target2],
[ldr, s1, [x11, $dr_target1]],
[ldr, s2, [x12, $dr_target2]]
]
-
type: asm_a64
main_offset: 0x2EE9A50
instructions: [
[adrp, x13, 0x453b000],
[add, x13, x13, 0x308]
[adrp, x13, $dr_target3],
[add, x13, x13, $dr_target3]
]
-
type: asm_a64
main_offset: 0x2EE9A7C
instructions: [
[adrp, x9, 0x453b000],
[add, x9, x9, 0x310],
[adrp, x11, 0x453b000],
[add, x11, x11, 0x318]
[adrp, x9, $dr_target5],
[add, x9, x9, $dr_target5],
[adrp, x11, $dr_target7],
[add, x11, x11, $dr_target7]
]
# 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:
# sys_MaxFPS
-
@ -88,40 +110,10 @@ ALL_FPS:
value: FPS_LOCK_TARGET
# Renderer thread delay
-
type: write
type: evaluate_write
address: [MAIN, 0x444A0D8]
value_type: float
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"]
value: "0.66 / FPS_TARGET"
-
type: block
what: timing

View File

@ -1,8 +1,19 @@
# WARRIORS: Abyss 1.4.0
# BID: 36B692C0FA9F6F46
unsafeCheck: true
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
@ -13,27 +24,21 @@ MASTER_WRITE:
[adrp, x1, 0x1021000],
[ldr, s1, [x1, 0xe10]]
]
# Redirect DR Targets to MAIN+0x1477F00
# Redirect DR Targets
-
type: asm_a64
main_offset: 0x6E3B94
instructions: [
[adrp, x9, 0x14bf000],
[ldr, s1, [x9, 0xf00]]
[adrp, x9, $dr_target1],
[ldr, s1, [x9, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x6E3BA4
instructions: [
[adrp, x9, 0x14bf000],
[ldr, s1, [x9, 0xf04]]
[adrp, x9, $dr_target2],
[ldr, s1, [x9, $dr_target2]]
]
# Default values
-
type: bytes
main_offset: 0x14BFF00
value_type: float
value: [50, 40]
ALL_FPS:
# REF: 00 00 F0 42 78 00 00 00 00 00 F0 42 04 00 00 00
# FPS Lock
@ -68,9 +73,3 @@ ALL_FPS:
address: [MAIN, 0x1021E18]
value_type: float
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x14BFF00]
value_type: float
value: ["1.5 * FRAMETIME_TARGET", "1.2 * FRAMETIME_TARGET"]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,29 +1,20 @@
# Nights Of Azure 2: Bride of the New Moon 1.0.1
# BID: 81DA4F9E1E961CA6
unsafeCheck: true
DECLARATIONS:
-
type: code
name: tripleBuffer
instructions: [
[mov, w22, 3],
[str, w22, [x1, 8]],
[b, 0xa305c0]
]
MASTER_WRITE:
# Remove double buffer
-
type: asm_a64
main_offset: 0x7E4ED8
instructions: [
[bl, 0xa31900]
[bl, _tripleBuffer()]
]
-
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

@ -0,0 +1,10 @@
# 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

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

View File

@ -1,8 +1,19 @@
# Sherlock Holmes: Crimes and Punishments 1.0.0
# BID: 789C2939A757C0CD
unsafeCheck: true
DECLARATIONS:
-
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:
# Redirect Dynamic Resolution timings to MAIN + 0x23774F00
# 38.0
@ -10,24 +21,18 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0xF57294
instructions: [
[adrp, x9, 0x23774000],
[adrp, x9, $dr_target1],
[fmul, s0, s0, s1],
[ldr, s1, [x9, 0xf00]]
[ldr, s1, [x9, $dr_target1]]
]
# 32.0
-
type: asm_a64
main_offset: 0xF572B8
instructions: [
[ldr, s1, [x9, 0xf04]],
[nop]
[adrp, x9, $dr_target2],
[ldr, s1, [x9, $dr_target2]]
]
# Default values:
-
type: bytes
main_offset: 0x23774F00
value_type: float
value: [38.0, 32.0]
ALL_FPS:
# UGameEngine::GetMaxTickRate()
# Bool Lock FPS
@ -36,9 +41,3 @@ ALL_FPS:
address: [MAIN, 0x2E61108]
value_type: uint8
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"]

View File

@ -2,30 +2,23 @@
# BID: 824B38A25986B2AB
# Scenes exclusively 2D are tied to framerate, so at 60 FPS they are 2x faster.
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_scale
value_type: float
default_value: 1
evaluate: "FPS_TARGET / 30"
MASTER_WRITE:
# Patch code to multiply last frametime by float scale factor stored in MAIN+0x3B4D800
# Patch code to multiply last frametime by float scale factor
# To match it to Dynamic Resolution calculations
-
type: asm_a64
main_offset: 0xB40638
instructions: [
[adrp, x9, 0x3b4d000],
[ldr, s0, [x9, 0x800]],
[adrp, x9, $dr_scale],
[ldr, s0, [x9, $dr_scale]],
[fmul, s9, s8, s0],
[nop]
]
# Write default dynamic resolution timing factor
-
type: bytes
main_offset: 0x3B4D800
value_type: float
value: 1
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x3B4D800]
value_type: float
value: "FPS_TARGET / 30"

View File

@ -2,17 +2,23 @@
# BID: 2B59D6C677258A2A
# Scenes exclusively 2D are tied to framerate, so at 60 FPS they are 2x faster.
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_scale
value_type: float
default_value: 1
evaluate: "FPS_TARGET / 30"
MASTER_WRITE:
# Patch code to multiply last frametime by float scale factor stored in MAIN+0x4276B00
# Patch code to multiply last frametime by float scale factor
# To match it to Dynamic Resolution calculations
-
type: asm_a64
main_offset: 0xBDBE44
instructions: [
[adrp, x8, 0x4276000],
[ldr, s0, [x8, 0xb00]]
[adrp, x8, $dr_scale],
[ldr, s0, [x8, $dr_scale]]
]
-
type: asm_a64
@ -21,16 +27,3 @@ MASTER_WRITE:
[fmul, s0, s8, s0],
[nop]
]
# Write default dynamic resolution timing factor
-
type: bytes
main_offset: 0x4276B00
value_type: float
value: 1
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x4276B00]
value_type: float
value: "FPS_TARGET / 30"

View File

@ -2,28 +2,20 @@
# BID: 0AE4D1770B196094
# Scenes exclusively 2D are tied to framerate, so at 60 FPS they are 2x faster.
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_scale
value_type: float
default_value: 1000
evaluate: "30000 / FPS_TARGET"
MASTER_WRITE:
# Patch code to divide last frametime by float scale factor stored in MAIN+0x4422800
# Patch code to divide last frametime by float scale factor
# To match it to Dynamic Resolution calculations
-
type: asm_a64
main_offset: 0xAD51A0
instructions: [
[adrp, x8, 0x4422000],
[ldr, s1, [x8, 0x800]]
[adrp, x8, $dr_scale],
[ldr, s1, [x8, $dr_scale]]
]
# Write default dynamic resolution timing factor
-
type: bytes
main_offset: 0x4422800
value_type: float
value: 1000
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x4422800]
value_type: float
value: "(FPS_TARGET / 30) * 1000"

View File

@ -3,8 +3,13 @@
# Some things are still tied to framerate, but nothing game breaking it seems.
# Game is using double buffer, trying to enable triple buffer results in crash.
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
MASTER_WRITE:
# Swap 30 FPS target with 60
-
@ -51,21 +56,15 @@ MASTER_WRITE:
instructions: [
[mov, w21, 2]
]
# Redirect DR timing target to MAIN + 0x1C5DF00
# Redirect DR timing target
-
type: asm_a64
main_offset: 0xA38B18
instructions: [
[adrp, x1, 0x1c5d000],
[ldr, s0, [x1, 0xf00]]
[adrp, x1, $dr_target],
[ldr, s0, [x1, $dr_target]]
]
ALL_FPS:
# DR timing = 1/FPS
-
type: evaluate_write
address: [MAIN, 0x1C5DF00]
value_type: float
value: "1 / FPS_TARGET"
# vsync target
-
type: evaluate_write
@ -73,3 +72,4 @@ ALL_FPS:
value_type: uint32
value: "VSYNC_TARGET - 1"

View File

@ -1,13 +1,12 @@
# Labirynth Of The Demon King 1.81
# BID: DE26B43C3D21B3A3
unsafeCheck: false
ALL_FPS:
# Disable FixedFrameRate
-
type: write
address: [MAIN, 0x59ED248, 0x7A4]
address_unsafe: true
value_type: uint32
value: 7
# t.MaxFPS

View File

@ -1,87 +1,74 @@
# Gear.Club Unlimited 2 1.7.2
# BID: FE757B10B45C3444
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: vsync_target
value_type: uint32
default_value: 2
evaluate: VSYNC_TARGET
-
type: variable
name: dr_target
value_type: float
default_value: 33
evaluate: "1.1 * FPS_TARGET"
-
type: code
name: getVsyncTarget
instructions: [
[adrp, x1, $vsync_target],
[ldr, w1, [x1, $vsync_target]],
[mov, w19, w1],
[ret]
]
-
type: code
name: getDrTarget
instructions: [
[adrp, x0, $dr_target],
[ldr, s0, [x0, $dr_target]],
[ret]
]
MASTER_WRITE:
# Edit Eden.Graphics.IGraphicsQualityProfile::set_VSyncCount to get interval from MAIN + 0x5FBAF20
# Edit Eden.Graphics.IGraphicsQualityProfile::set_VSyncCount
# If not edited, light is flickering at > 30 FPS
-
type: asm_a64
main_offset: 0x14B4990
instructions: [
[adrp, x1, 0x5fba000],
[ldr, w1, [x1, 0xf20]],
[adrp, x1, $vsync_target],
[ldr, w1, [x1, $vsync_target]],
[str, w1, [x0, 0x54]],
[ret]
]
# Edit UnityEngine.QualitySettings::set_vSyncCount to get interval from MAIN + 0x5FBAF20
# Edit UnityEngine.QualitySettings::set_vSyncCount
# If not edited, light is flickering at > 30 FPS
-
type: asm_a64
main_offset: 0x1B46EE4
instructions: [
[adrp, x0, 0x5fba000],
[ldr, w0, [x0, 0xf20]],
[adrp, x0, $vsync_target],
[ldr, w0, [x0, $vsync_target]],
[ldp, x29, x30, [sp, 0x20]],
[ldp, x20, x19, [sp, 0x10]],
[add, sp, sp, 0x30],
[br, x1]
]
# Edit Eden.Graphics.GraphicsQualityManager::SetTargetFrameRate to get interval from MAIN + 0x5FBAF20
# Edit Eden.Graphics.GraphicsQualityManager::SetTargetFrameRate
# If not edited, it locks to 30 FPS
-
type: asm_a64
main_offset: 0x14AB578
instructions: [
[bl, 0x3445ce8]
[bl, _getVsyncTarget()]
]
-
type: asm_a64
main_offset: 0x3445CE8
instructions: [
[adrp, x1, 0x5fba000],
[ldr, w1, [x1, 0xf20]],
[mov, w19, w1],
[ret]
]
# Edit Eden.Graphics.DynamicResolutionScaler::UpdateScaling to get DR target timing from MAIN + 0x5FBAF28
# Edit Eden.Graphics.DynamicResolutionScaler::UpdateScaling
# If not edited, performance is much worse at > 30 FPS
-
type: asm_a64
main_offset: 0x14988BC
instructions: [
[bl, 0x3445cf8]
[bl, _getDrTarget()]
]
-
type: asm_a64
main_offset: 0x3445CF8
instructions: [
[adrp, x0, 0x5fba000],
[ldr, s0, [x0, 0xf28]],
[ret]
]
# Default values
-
type: bytes
main_offset: 0x5FBAF20
value_type: uint32
value: 2
-
type: bytes
main_offset: 0x5FBAF28
value_type: float
value: 33
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x5FBAF20]
value_type: uint32
value: VSYNC_TARGET
-
type: evaluate_write
address: [MAIN, 0x5FBAF28]
value_type: float
value: "1.1 * FPS_TARGET"

View File

@ -1,8 +1,6 @@
# F1 Manager 2024 1.4
# BID: 42350FCC758887D1
unsafeCheck: false
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-

View File

@ -1,8 +1,6 @@
# F1 Manager 2024 1.8
# BID: 53C0F2107412F0E2
unsafeCheck: false
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-

View File

@ -1,8 +1,6 @@
# F1 Manager 2024 1.3
# BID: 645C3BE90D4ED3D5
unsafeCheck: false
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-

View File

@ -1,8 +1,6 @@
# F1 Manager 2024 1.7
# BID: A245DABD986CBC85
unsafeCheck: false
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-

View File

@ -1,8 +1,6 @@
# F1 Manager 2024 1.5
# BID: CA23556FE5EF2EB1
unsafeCheck: false
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-

View File

@ -1,7 +1,13 @@
# Amber Isle 1.0.3
# BID: E8BF195297B63BA2
unsafeCheck: true
DECLARATIONS:
-
type: variable
name: dr_target
value_type: double
default_value: 25.333333333333336
evaluate: "FRAMETIME_TARGET * 0.76"
MASTER_WRITE:
# Redirect all hardcoded doubles in DynamicResolutionHandler::Update to MAIN+0x909EF00
@ -10,48 +16,37 @@ MASTER_WRITE:
type: asm_a64
main_offset: 0x21FE1E4
instructions: [
[adrp, x8, 0x909e000],
[ldr, d0, [x8, 0xf00]]
[adrp, x8, $dr_target],
[ldr, d0, [x8, $dr_target]]
]
-
type: asm_a64
main_offset: 0x21FE3E0
instructions: [
[adrp, x8, 0x909e000],
[ldr, d1, [x8, 0xf00]]
[adrp, x8, $dr_target],
[ldr, d1, [x8, $dr_target]]
]
-
type: asm_a64
main_offset: 0x21FE43C
instructions: [
[adrp, x8, 0x909e000],
[ldr, d1, [x8, 0xf00]]
[adrp, x8, $dr_target],
[ldr, d1, [x8, $dr_target]]
]
-
type: asm_a64
main_offset: 0x21FE7D4
instructions: [
[adrp, x8, 0x909e000],
[ldr, d0, [x8, 0xf00]]
[adrp, x8, $dr_target],
[ldr, d0, [x8, $dr_target]]
]
## REF: c8 aa 8a f2 28 07 f8 f2
-
type: asm_a64
main_offset: 0x21fE550
instructions: [
[adrp, x8, 0x909e000],
[ldr, d0, [x8, 0xf00]],
[adrp, x8, $dr_target],
[ldr, d0, [x8, $dr_target]],
[fneg, d0, d0]
]
# default value
-
type: bytes
main_offset: 0x909EF00
value_type: double
value: 25.333333333333336
ALL_FPS:
-
type: evaluate_write
address: [MAIN, 0x909EF00]
value_type: double
value: "FRAMETIME_TARGET * 0.76"

View File

@ -1,8 +1,6 @@
# The Smurfs 2: The Prisoner of the Green Stone 1.03.03
# The Smurfs 2: The Prisoner of the Green Stone 1.03.03/1.04
# BID: F294A4EBE966E8A9
unsafeCheck: true
ALL_FPS:
# r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 2 decimals
-

View File

@ -1,13 +1,12 @@
# Redemption Reapers 1.4.0
# BID: 955DF07AA5F4497B
unsafeCheck: true
ALL_FPS:
# Disable bUseFixedFrameRate to untie game speed from framerate
-
type: write
address: [MAIN, 0x751C478, 0x7A4]
address_unsafe: true
value_type: uint32
# Default is 0x47, bUseFixedFrameRate |= 0x40
# By writing 7 we are making sure that other flags are maintained:
@ -30,3 +29,4 @@ ALL_FPS:
-
type: block
what: timing

View File

@ -1,41 +1,42 @@
# Xenoblade Chronicles 3 2.2.0/2.2.1
# BID: 82D187FE9EF9BE92
unsafeCheck: false
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 0.0166666666
evaluate: "(1 / FPS_TARGET) / VSYNC_TARGET"
-
type: const
name: default_frametime
value: 0x3d088889
-
type: code
name: etherFix
instructions: [
[ldr, x21, [x0]],
[mov, w8, $default_frametime],
[movk, w8, $default_frametime, 16],
[str, w8, [x21, 0x214]],
[ret]
]
MASTER_WRITE:
# Redirect DR frametime target reading to .bss code cave [MAIN, 0x236AB00]
# Redirect DR frametime target reading
-
type: asm_a64
main_offset: 0x124F518
instructions: [
[adrp, x8, 0x236a000],
[ldr, s0, [x8, 0xb00]]
[adrp, x8, $dr_target],
[ldr, s0, [x8, $dr_target]]
]
# Original DR frametime target
-
type: bytes
main_offset: 0x236AB00
value_type: float
value:
- 0.0166666666
# Fix crash when gathering big amount of ether for > 30 FPS
- # Code cave at 0x1295DA0
-
type: asm_a64
main_offset: 0x67360
instructions: [
[bl, 0x1295da0]
]
- # Push fixed 1/30 float to game speed pointer late enough to not affect it
type: asm_a64
main_offset: 0x1295DA0
instructions: [
[ldr, x21, [x0]],
[fmov, s1, 1.0],
[fmov, s2, 30.0],
[fdiv, s1, s1, s2],
[str, s1, [x21, 0x214]],
[ret]
[bl, _etherFix()]
]
ALL_FPS:
# vsync
@ -44,16 +45,11 @@ ALL_FPS:
address: [MAIN, 0x1B42DB0]
value_type: int32
value: [VSYNC_TARGET, VSYNC_TARGET]
# DR Timing (relative to vsync)
-
type: evaluate_write
address: [MAIN, 0x236AB00]
value_type: float
value: "((1 / FPS_TARGET) / VSYNC_TARGET) * 0.78"
# UI speed
-
type: evaluate_write
address: [MAIN, 0x1BA1A90, 128]
address_unsafe: true
value_type: float
value: "1 / FPS_TARGET"
-
@ -66,30 +62,28 @@ ALL_FPS:
value_type: int32
value: [2, 2]
-
type: evaluate_compare
type: compare
compare_address: [MAIN, 0x1BA1A98]
compare_type: "!="
compare_value_type: int8
compare_value: 0
address: [MAIN, 0x236AB00]
value_type: float
value: "((1 / 30) / 2) * 0.78"
-
type: evaluate_compare
compare_address: [MAIN, 0x1BA1A98]
compare_type: "!="
compare_value_type: int8
compare_value: 0
address: [MAIN, 0x1BA1A90, 128]
value_type: float
value: "1 / 30"
address: [VARIABLE, dr_target]
value: 0.0166666666
-
type: compare
compare_address: [MAIN, 0x1BA1A98]
compare_type: "!="
compare_value_type: int8
compare_value: 0
address: [MAIN, 0x1BA1A90, 128]
address_unsafe: true
value_type: float
value: 0.0333333333
-
type: compare
compare_address: [MAIN, 0x1BA1A98]
compare_type: "!="
compare_value_type: int8
compare_value: 0
address: [MAIN]
value_type: refresh_rate
value: 30

View File

@ -1,13 +1,12 @@
# Stray 1.6.0
# BID: 109D974E180A5AA1
unsafeCheck: false
ALL_FPS:
# Disable bUseFixedFrameRate
-
type: write
address: [MAIN, 0x5DC7368, 0x7A4]
address_unsafe: true
value_type: int32
value: 7
# r.VSync

View File

@ -1,8 +1,6 @@
# FANTASY LIFE i: The Girl Who Steals Time 1.4.0
# BID: 061A7341077C0974
unsafeCheck: true
ALL_FPS:
# t.MaxFPS
-
@ -18,4 +16,4 @@ ALL_FPS:
value: [0, 0]
-
type: block
what: timing
what: timing

View File

@ -1,13 +1,12 @@
# FANTASY LIFE i: The Girl Who Steals Time 1.2.1
# BID: 66BC954F5323014C
unsafeCheck: false
ALL_FPS:
# Disable FixedFrameRate
-
type: write
address: [MAIN, 0xACC63E0, 0xAA4]
address_unsafe: true
value_type: uint32
value: 7
# t.MaxFPS

View File

@ -0,0 +1,19 @@
# FANTASY LIFE i: The Girl Who Steals Time 1.5.0
# BID: 74BCAC96835DB9AE
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0xAE6F938, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x9E4F728, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -1,13 +1,12 @@
# FANTASY LIFE i: The Girl Who Steals Time 1.3.0
# BID: 9DBA6AA32721CAB9
unsafeCheck: false
ALL_FPS:
# Disable FixedFrameRate
-
type: write
address: [MAIN, 0xACF23E0, 0xAA4]
address_unsafe: true
value_type: uint32
value: 7
# t.MaxFPS

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