2025-09-05 17:12:01 +03:00

96 lines
2.2 KiB
YAML

# Xenoblade Chronicles 3 2.2.0/2.2.1
# BID: 82D187FE9EF9BE92
unsafeCheck: false
MASTER_WRITE:
# Redirect DR frametime target reading to .bss code cave [MAIN, 0x236AB00]
-
type: asm_a64
main_offset: 0x124F518
instructions: [
[adrp, x8, 0x236a000],
[ldr, s0, [x8, 0xb00]]
]
# 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]
]
ALL_FPS:
# vsync
-
type: evaluate_write
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]
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: evaluate_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"
-
type: compare
compare_address: [MAIN, 0x1BA1A98]
compare_type: "!="
compare_value_type: int8
compare_value: 0
address: [MAIN]
value_type: refresh_rate
value: 30