2025-09-09 16:16:31 +03:00

90 lines
1.9 KiB
YAML

# Xenoblade Chronicles 3 2.2.0/2.2.1
# BID: 82D187FE9EF9BE92
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
-
type: asm_a64
main_offset: 0x124F518
instructions: [
[adrp, x8, $dr_target],
[ldr, s0, [x8, $dr_target]]
]
# Fix crash when gathering big amount of ether for > 30 FPS
-
type: asm_a64
main_offset: 0x67360
instructions: [
[bl, _etherFix()]
]
ALL_FPS:
# vsync
-
type: evaluate_write
address: [MAIN, 0x1B42DB0]
value_type: int32
value: [VSYNC_TARGET, VSYNC_TARGET]
# UI speed
-
type: evaluate_write
address: [MAIN, 0x1BA1A90, 128]
address_unsafe: true
value_type: float
value: "1 / FPS_TARGET"
-
type: compare
compare_address: [MAIN, 0x1BA1A98]
compare_type: "!="
compare_value_type: int8
compare_value: 0
address: [MAIN, 0x1B42DB0]
value_type: int32
value: [2, 2]
-
type: compare
compare_address: [MAIN, 0x1BA1A98]
compare_type: "!="
compare_value_type: int8
compare_value: 0
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
value_type: refresh_rate
value: 30