Compare commits

...

6 Commits
2.7-R3 ... main

Author SHA1 Message Date
redraz
c1680930c2 Ultra 2.8|RC2 2026-04-07 07:32:48 +03:00
redraz
c22f86a4fd modified: README.md 2026-04-05 07:49:30 +03:00
redraz
f2b154837e Ultra 2.8|RC1 2026-04-05 07:45:00 +03:00
redraz
8d1b443f87 Update wallets 2026-02-05 18:04:41 +03:00
redraz
6e1a0aaa55 Returned sys-con 2026-01-27 21:32:41 +03:00
redraz
5ed824306d Update README files and some other components 2026-01-27 21:10:27 +03:00
233 changed files with 5874 additions and 162 deletions

View File

@ -8,7 +8,7 @@
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
### [UltraNX 2.7|R3](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R3) Поддерживает все HOS до 21.2.0 включительно (21.2.0 в Safe Mode)
### [UltraNX 2.8|RC2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.8-RC1) Поддерживает все HOS до 22.1.0 включительно (22.1.0 в Safe Mode)
@ -82,7 +82,7 @@
* [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Форк Status Monitor от kantorski.
* [Tetris](https://github.com/ppkantorski/Tetris-Overlay) - Та самая игра в виде оверлея. Работает только на последних версиях Ultrahand.
* [MasterVolume](https://github.com/averne/MasterVolume) - Регулировка глобальной громкости, позволяет поднять громкость выше максимума. Использовать аккуратно!
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) + [NX-FanControl Overlay Fork](https://github.com/ppkantorski/NX-FanControl) - Модуль для ручной регулировки оборотов кулера. Изменения применяются сразу, модуль смотрит на температуру SOC а не Skin, как Атмосфера.
* [BT Audio](https://github.com/masagrator/BT_Audio-ovl) - Оверлей, позволяющий быстро отключаться\подключаться к bluetooth-гарнитуре.
* [Fizeau](https://github.com/averne/Fizeau) - Модуль для изменения цветового профиля экрана.
* [sys-tune](https://github.com/HookedBehemoth/sys-tune) - Оверлей-музыкальный плеер, работает в фоне.
@ -124,13 +124,13 @@
```
СБП (Т-Банк): +79168089980
Альфа : 2200152336577997
Т-Банк : 2200700170486970
Сбер : 2202200513345833
Альфа: 2200152336577997
Т-Банк: 2200700170486970
Сбер: 2202200513345833
TON: UQA9My51bkGZHbYhbdRZfp6B60N7VJfsnKl0sakgw9YhAPct
BTC: 18K6NN8NEavvMJL5Do3VTyJbL8NeZPHo93
USDT TRC20: TUZ5szAmRsnvBuC4rFB8RaAoCbN6Ucy4sL
TON: UQC9p9jHJHLVnm4uXJDoH4GQ76golzgKnG-bEExO2QsotCV5
BTC: bc1q407f2fv3nsdy86y6njfx8updhxfmuwx49erhal
USDT TRC20: TUZ5szAmRsnvBuC4rFB8RaAoCbN6Ucy4sL
```
### Т-Банк QR

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.
### [UltraNX 2.7|R3](https://github.com/Ultra-NX/UltraNX/releases/tag/2.7-R3) Supports all HOS up to and including 21.2.0 (21.2.0 in Safe Mode)
### [UltraNX 2.8|RC2](https://github.com/Ultra-NX/UltraNX/releases/tag/2.8-RC1) Supports all HOS up to and including 22.1.0 (22.1.0 in Safe Mode)
@ -78,7 +78,7 @@
* [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay) - Status Monitor fork from kantorski.
* [Tetris](https://github.com/ppkantorski/Tetris-Overlay/) - "That" game in the form of an overlay. Works only on the latest versions of Ultrahand.
* [MasterVolume](https://github.com/averne/MasterVolume) - Global volume control, allows you to raise the volume above the maximum. Use with care!
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) - Module for manually adjusting the speed of the cooler. The changes are applied immediately, the module works from SOC temperature and not Skin temperature like Atmosphere.
* [NX-FanControl](https://github.com/Insektaure/NX-FanControl) + [NX-FanControl Overlay Fork](https://github.com/ppkantorski/NX-FanControl) - Module for manually adjusting the speed of the cooler. The changes are applied immediately, the module works from SOC temperature and not Skin temperature like Atmosphere.
* [BT Audio](https://github.com/masagrator/BT_Audio-ovl) - An overlay that allows you to quickly disconnect\connect to a bluetooth headset.
* [Fizeau](https://github.com/averne/Fizeau) - Module for changing the screen color profile.
* [sys-tune](https://github.com/HookedBehemoth/sys-tune) - Overlay music player, works in background.
@ -116,7 +116,7 @@ Listed below are the licenses of those programs that have been modified specific
If you like the project and you have a desire to support me with a penny - I will be very grateful.
I have no other income at the moment, so any monetary help is very valuable to me.
```
TON: UQA9My51bkGZHbYhbdRZfp6B60N7VJfsnKl0sakgw9YhAPct
BTC: 18K6NN8NEavvMJL5Do3VTyJbL8NeZPHo93
USDT TRC20: TUZ5szAmRsnvBuC4rFB8RaAoCbN6Ucy4sL
TON: UQC9p9jHJHLVnm4uXJDoH4GQ76golzgKnG-bEExO2QsotCV5
BTC: bc1q407f2fv3nsdy86y6njfx8updhxfmuwx49erhal
USDT TRC20: TUZ5szAmRsnvBuC4rFB8RaAoCbN6Ucy4sL
```

View File

@ -0,0 +1,36 @@
# レッド・デッド・リデンプション 1.0.6-1.0.7
# BID: 005CB235608DCEDD
DECLARATIONS:
-
type: variable
name: dr_frametime_target
value_type: float
default_value: 31.415926
evaluate: "0.94247778 * FRAMETIME_TARGET"
-
type: code
name: getDrTarget
instructions: [
[adrp, x20, $dr_frametime_target],
[ldr, s2, [x20, $dr_frametime_target]],
[ret]
]
MASTER_WRITE:
# REF: 22 BC 22 1E 21 93 45 BD
# sagRenderer::UpdateDynamicResolutionScaling()
-
type: asm_a64
main_offset: 0x139521C
instructions: [
[bl, _getDrTarget()]
]
ALL_FPS:
# rage::grcDevice::sm_FrameLock
# I guess just in case?
## REF: 6A 19 01 B9 EA 17 9F 1A, ADRP X21 + STR below it
-
type: evaluate_write
address: [MAIN, 0x20DAA20]
value_type: uint32
value: VSYNC_TARGET

View File

@ -0,0 +1,26 @@
# Fuga: Melodies of Steel 1.1.8
# BID: 55C51FEEAA71E42D
ALL_FPS:
# Disable bUseFixedFrameRate
-
type: write
address: [MAIN, 0x67285B8, 0x7B8]
address_unsafe: true
value_type: uint32
value: 7
# r.VSync
-
type: write
address: [MAIN, 0x5F60428, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x6728E88, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,75 @@
# 無双アビス 1.8.0
# BID: 7FB0CED6B8B51B80
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: 0x8EEAC0
instructions: [
[adrp, x1, 0x1272000],
[ldr, s1, [x1, 0xE30]]
]
# Redirect DR Targets
-
type: asm_a64
main_offset: 0x8EEB64
instructions: [
[adrp, x9, $dr_target1],
[ldr, s1, [x9, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x8EEB74
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, 0x1272E3C]
value_type: uint32
value: "120 / FPS_LOCK_TARGET"
# Prevent from setting it as 0, otherwise game crashes
-
type: evaluate_compare
compare_address: [MAIN, 0x1272E3C]
compare_type: "=="
compare_value_type: uint32
compare_value: 0
address: [MAIN, 0x1272E3C]
value_type: uint32
value: 1
# Others
-
type: evaluate_write
address: [MAIN, 0x1272E30]
value_type: float
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x1272E34]
value_type: uint32
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x1272E38]
value_type: float
value: "FPS_TARGET"

View File

@ -0,0 +1,75 @@
# 無双アビス 1.7.0
# BID: E09BC148192342B1
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: 0x8EBDC0
instructions: [
[adrp, x1, 0x126D000],
[ldr, s1, [x1, 0xE30]]
]
# Redirect DR Targets
-
type: asm_a64
main_offset: 0x8EBE64
instructions: [
[adrp, x9, $dr_target1],
[ldr, s1, [x9, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x8EBE74
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, 0x126DE3C]
value_type: uint32
value: "120 / FPS_LOCK_TARGET"
# Prevent from setting it as 0, otherwise game crashes
-
type: evaluate_compare
compare_address: [MAIN, 0x126DE3C]
compare_type: "=="
compare_value_type: uint32
compare_value: 0
address: [MAIN, 0x126DE3C]
value_type: uint32
value: 1
# Others
-
type: evaluate_write
address: [MAIN, 0x126DE30]
value_type: float
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x126DE34]
value_type: uint32
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x126DE38]
value_type: float
value: "FPS_TARGET"

View File

@ -0,0 +1,25 @@
# Remorse: The List 1.2
# BID: 8019D7D61A81AF2B
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x6D09F48, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x6D378D8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x653B7D8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,23 @@
# Tales of Berseria Remastered `US` 1.0.4
# BID: 290D5939C6671566
# Known issue: Using barrier devices may not be triggering animation for any other FPS targets than 30, 50, 60, 100, 120.
# Known issue: Opening gate may not happen if you use any other FPS than 30, 60 or 120.
# Solution: when animation doesn't want to progress, change FPS Target to 30, 60 or 120.
ALL_FPS:
# Disable FPS Lock
## REF: 08 69 69 b8 69 ea 41 b9 28 01 08 0b, second result
## Look to which address points ldr w8,[x8, x9, LSL #0x0], this is the interval speed. Substract 4 from offset to get vsync interval and our offset we need to put.
-
type: write
address: [MAIN, 0x44D07A6C]
value_type: uint32
value: [0, 1]
# Speed Factor
## REF: 00 01 3f d6 00 00 22 1e 28 11 91 52 08 91 a7 72
## Find first BLR X8 above search result (ignore BLR X8 in result), then find LDR X8, [X23, #offset]. X23 + offset is our address
-
type: evaluate_write
address: [MAIN, 0x44A926C0, -4]
value_type: float
value: "60 / FPS_TARGET"

View File

@ -0,0 +1,20 @@
# Tales of Berseria Remastered `US` 1.0.2
# BID: F4DB705AA11D45F3
ALL_FPS:
# Disable FPS Lock
## REF: 08 01 40 f9 08 01 09 8b
## X8 from ADD X8, X8, X9, this is the address of vsync interval. 0x4 is interval speed
-
type: write
address: [MAIN, 0x44D039BC]
value_type: uint32
value: [0, 1]
# Speed Factor
## REF: 00 01 3f d6 00 00 22 1e 28 11 91 52 08 91 a7 72
## Find first BLR X8 above search result (ignore BLR X8 in result), then find LDR X8, [X23, #offset]. X23 + offset is our address
-
type: evaluate_write
address: [MAIN, 0x44a8e680, -4]
value_type: float
value: "60 / FPS_TARGET"

View File

@ -0,0 +1,11 @@
# Tomb Raider: Definitive Edition 1.0.2
# BID: AD288DAF31DEEDFD
ALL_FPS:
# Dynamic Resolution Frametime Target
# REF: Search for function that has 4A 1C 80 D2 2A 1C C0 F2, then search instruction with 0x42055555 in that function, it should be written to 2 addresses inside main. Ignore closer address.
-
type: evaluate_write
address: [MAIN, 0x1C32A58]
value_type: float
value: FRAMETIME_TARGET

View File

@ -0,0 +1,11 @@
# Tomb Raider: Definitive Edition 1.0.3
# BID: F5C3661E4631499D
ALL_FPS:
# Dynamic Resolution Frametime Target
# REF: Search for function that has 4A 1C 80 D2 2A 1C C0 F2, then search instruction with 0x42055555 in that function, it should be written to 2 addresses inside main. Ignore closer address.
-
type: evaluate_write
address: [MAIN, 0x1C314D8]
value_type: float
value: FRAMETIME_TARGET

View File

@ -1,23 +1,23 @@
# SWORD ART ONLINE Fractured Daydream EUR 1.5.2.0
# BID: 2EEE840599DC7021
# Wildkeepers Rising 1.01
# BID: D91CFC777B9A6E94
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8676768, 0]
address: [MAIN, 0x8098330, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86B12E0, 0]
address: [MAIN, 0x80D9808, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EB0F88, 0]
address: [MAIN, 0x70C3290, 0]
value_type: uint32
value: [0, 0]
-

View File

@ -0,0 +1,25 @@
# ソードアート・オンライン フラクチュアード デイドリーム 1.6.0.0
# BID: 1A6C27F8DCFE45CB
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x86BE728, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86F92D0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EF8F88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# ソードアート・オンライン フラクチュアード デイドリーム 1.6.1.0
# BID: 99252F8F7EE61A81
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x86AD728, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86E82D0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EE7F88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,16 @@
# Phantom Brave: The Lost Hero 1.24
# BID: 5CBE310E8D25E740
ALL_FPS:
# Adjust DR FPS target
## REF: Nmpl::Core::CSingleton<Nmpl::Gra::CGraMgr>::s_singleton + 0x0, this gives us an address to first function of Nmpl::Gra::CGraMgr vtable in NmplDLL.nro that we need to edit
## Then we search in that NRO Nmpl::Core::System::CPerformCnt::frameRate_ and substract them to get final offset
-
type: evaluate_compare
compare_address: [MAIN, 0xE67160, 0, -0x75A5C0]
compare_type: "=="
compare_value_type: uint64
compare_value: 0x3442AB8D51FBBA4D # BID of NRO
address: [MAIN, 0xE67160, 0, 0xE4FCC]
value_type: int32
value: FPS_TARGET

View File

@ -0,0 +1,10 @@
# DreadOut Remastered Collection 1.0.3
# BID: 1C0DA03A066F5B51
ALL_FPS:
# REF: DynamicResolution::.cctor
-
type: evaluate_write
address: [MAIN, 0x3EAE640, 0, 0xB8, 8]
value_type: double
value: [FPS_TARGET, FRAMETIME_TARGET]

View File

@ -0,0 +1,12 @@
# Atelier Resleriana: The Red Alchemist & the White Guardian 1.4b
# BID: 5E6F9D0C5161586B
ALL_FPS:
# MagicaCloth2.MagicaManager_TypeInfo
## REF: 00 10 2e 1e 01 e4 00 2f 00 21 20 1e, first result, second ADRP+ADD in function
-
type: evaluate_write
address: [MAIN, 0x7791FE8, 0xB8, 0, 0x10, 0x20, 0x10]
address_unsafe: true
value_type: uint32
value: "FPS_TARGET + 5"

View File

@ -0,0 +1,11 @@
# Atelier Resleriana: The Red Alchemist & the White Guardian 1.4a
# BID: B87B6963DF4DA555
ALL_FPS:
# MagicaCloth2.MagicaManager_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x778FFD0, 0xB8, 0, 0x10, 0x20, 0x10]
address_unsafe: true
value_type: uint32
value: "FPS_TARGET + 5"

View File

@ -0,0 +1,19 @@
# 옥토패스 트래블러 0 1.0.4
# BID: C7C4E3FE091EB9A0
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x6C516E8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7C738E0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Conarium 1.0.47
# BID: 61BE54905F0EC450
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x5F412A0, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x5F6BDC8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x57A37E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,58 @@
# 삼국지8 REMAKE 1.1.2
# BID: B69833AF0E07CE82
# Cursor speed is tied to framerate
DECLARATIONS:
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: fps_lock
value_type: uint32
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: fps_lock2
value_type: uint32
default_value: 60
evaluate: FPS_LOCK_TARGET
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
-
type: variable
name: game_speed2
value_type: float
default_value: 0.0166666666
# DON'T PUT ANYTHING BETWEEN - END
-
type: code
name: fpsLock
instructions: [
[adrp, x8, $fps_lock],
[ldr, w8, [x8, $fps_lock]],
[ret]
]
MASTER_WRITE:
# Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0]
-
type: asm_a64
main_offset: 0x1F906DC
instructions: [
[bl, _fpsLock()]
]
# Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9
-
type: asm_a64
main_offset: 0x88B380
instructions: [
[adrp, x8, $game_speed],
[ldr, s0, [x8, $game_speed]]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,58 @@
# 삼국지8 REMAKE 1.1.0
# BID: C7C39A0A301587DB
# Cursor speed is tied to framerate
DECLARATIONS:
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: fps_lock
value_type: uint32
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: fps_lock2
value_type: uint32
default_value: 60
evaluate: FPS_LOCK_TARGET
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
-
type: variable
name: game_speed2
value_type: float
default_value: 0.0166666666
# DON'T PUT ANYTHING BETWEEN - END
-
type: code
name: fpsLock
instructions: [
[adrp, x8, $fps_lock],
[ldr, w8, [x8, $fps_lock]],
[ret]
]
MASTER_WRITE:
# Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0]
-
type: asm_a64
main_offset: 0x1F906DC
instructions: [
[bl, _fpsLock()]
]
# Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9
-
type: asm_a64
main_offset: 0x88B380
instructions: [
[adrp, x8, $game_speed],
[ldr, s0, [x8, $game_speed]]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,58 @@
# 삼국지8 REMAKE 1.1.1
# BID: FC3A9F0C03C5A198
# Cursor speed is tied to framerate
DECLARATIONS:
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: fps_lock
value_type: uint32
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: fps_lock2
value_type: uint32
default_value: 60
evaluate: FPS_LOCK_TARGET
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
-
type: variable
name: game_speed2
value_type: float
default_value: 0.0166666666
# DON'T PUT ANYTHING BETWEEN - END
-
type: code
name: fpsLock
instructions: [
[adrp, x8, $fps_lock],
[ldr, w8, [x8, $fps_lock]],
[ret]
]
MASTER_WRITE:
# Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0]
-
type: asm_a64
main_offset: 0x1F906DC
instructions: [
[bl, _fpsLock()]
]
# Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9
-
type: asm_a64
main_offset: 0x88B380
instructions: [
[adrp, x8, $game_speed],
[ldr, s0, [x8, $game_speed]]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,58 @@
# 삼국지 8 리메이크 with 파워업키트 1.1.1
# BID: 7A45096D29701241
# Cursor speed is tied to framerate
DECLARATIONS:
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: fps_lock
value_type: uint32
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: fps_lock2
value_type: uint32
default_value: 60
evaluate: FPS_LOCK_TARGET
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
-
type: variable
name: game_speed2
value_type: float
default_value: 0.0166666666
# DON'T PUT ANYTHING BETWEEN - END
-
type: code
name: fpsLock
instructions: [
[adrp, x8, $fps_lock],
[ldr, w8, [x8, $fps_lock]],
[ret]
]
MASTER_WRITE:
# Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0]
-
type: asm_a64
main_offset: 0x234A3EC
instructions: [
[bl, _fpsLock()]
]
# Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9
-
type: asm_a64
main_offset: 0xACE970
instructions: [
[adrp, x8, $game_speed],
[ldr, s0, [x8, $game_speed]]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,58 @@
# 삼국지 8 리메이크 with 파워업키트 1.1.0
# BID: A5B280E0651240A8
# Cursor speed is tied to framerate
DECLARATIONS:
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: fps_lock
value_type: uint32
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: fps_lock2
value_type: uint32
default_value: 60
evaluate: FPS_LOCK_TARGET
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
-
type: variable
name: game_speed2
value_type: float
default_value: 0.0166666666
# DON'T PUT ANYTHING BETWEEN - END
-
type: code
name: fpsLock
instructions: [
[adrp, x8, $fps_lock],
[ldr, w8, [x8, $fps_lock]],
[ret]
]
MASTER_WRITE:
# Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0]
-
type: asm_a64
main_offset: 0x234AE0C
instructions: [
[bl, _fpsLock()]
]
# Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9
-
type: asm_a64
main_offset: 0xACEFC0
instructions: [
[adrp, x8, $game_speed],
[ldr, s0, [x8, $game_speed]]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,58 @@
# 삼국지 8 리메이크 with 파워업키트 1.1.2
# BID: B8722FBDFD482D37
# Cursor speed is tied to framerate
DECLARATIONS:
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: fps_lock
value_type: uint32
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: fps_lock2
value_type: uint32
default_value: 60
evaluate: FPS_LOCK_TARGET
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
-
type: variable
name: game_speed2
value_type: float
default_value: 0.0166666666
# DON'T PUT ANYTHING BETWEEN - END
-
type: code
name: fpsLock
instructions: [
[adrp, x8, $fps_lock],
[ldr, w8, [x8, $fps_lock]],
[ret]
]
MASTER_WRITE:
# Redirect FPS Lock, REF: A8 EA 00 B9 08 00 40 B9, LDR W8, [X0]
-
type: asm_a64
main_offset: 0x234C19C
instructions: [
[bl, _fpsLock()]
]
# Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9
-
type: asm_a64
main_offset: 0xACFD80
instructions: [
[adrp, x8, $game_speed],
[ldr, s0, [x8, $game_speed]]
]
ALL_FPS:
-
type: block
what: timing

View File

@ -0,0 +1,17 @@
# Bendy and the Dark Revival 1.6.4s
# BID: E917F319E4233FCD
ALL_FPS:
# PSH.DynamicResolution.DynamicResolutionController_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x3970680, 0xB8, 0]
address_unsafe: true
value_type: double
value: [FPS_TARGET, FRAMETIME_TARGET]
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x3D43700, 0x48]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -0,0 +1,34 @@
# 超次元游汐 戰機少女 Sisters vs Sisters 1.0.0
# BID: 3514446FD50DCF95
DECLARATIONS:
-
type: variable
name: dr_target1
value_type: float
default_value: 33.33
evaluate: "TruncDec(FRAMETIME_TARGET, 2)"
-
type: variable
name: dr_target2
value_type: float
default_value: 28.57
evaluate: "TruncDec(1000 / (FPS_TARGET + 5), 2)"
MASTER_WRITE:
# Redirect DR timing range
-
type: asm_a64
main_offset: 0x3DC5770
instructions: [
[adrp, x8, $dr_target1],
[ldr, s1, [x8, $dr_target1]],
[nop]
]
-
type: asm_a64
main_offset: 0x3DC57DC
instructions: [
[adrp, x8, $dr_target2],
[ldr, s1, [x8, $dr_target2]],
[nop]
]

View File

@ -0,0 +1,25 @@
# Rune Factory: Guardians of Azuma US 1.1.3
# BID: 02F0B93D14038350
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8F63D40, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8F9D470, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7F7C6E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,10 @@
# Little Orpheus 1.0.2
# BID: 1D5A1DA51CA68238
ALL_FPS:
# REF: Search with Edizon double 33, at offset -8 it should be float 0.6
-
type: evaluate_write
address: [MAIN, 0x3A8BD30, 0x2F0, 0x500]
value_type: double
value: "FRAMETIME_TARGET - (1/3)"

View File

@ -1,4 +1,4 @@
# Divinity Original Sin 2 1.0.10-1.0.11
# Divinity Original Sin 2 1.0.10-1.0.12
# BID: 4979B200D53BB282
# 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.

View File

@ -0,0 +1,20 @@
# Expeditions: A Mudrunner Game 1.20.0.0-1.21.0.0
# BID: 4012D8204AD172B4
# 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: 0x1784FA0
instructions: [
[adrp, x13, $dr_target],
[ldr, s2, [x13, $dr_target]]
]

View File

@ -0,0 +1,20 @@
# Expeditions: A Mudrunner Game 1.22.0.0
# BID: 53FE298D76C0E507
# 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: 0x1789100
instructions: [
[adrp, x13, $dr_target],
[ldr, s2, [x13, $dr_target]]
]

View File

@ -0,0 +1,21 @@
# Expeditions: A Mudrunner Game 1.23.0.0
# BID: 9B1B0DA68BEAA765
# 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: 0x1789470
instructions: [
[adrp, x13, $dr_target],
[ldr, s2, [x13, $dr_target]],
[nop]
]

View File

@ -0,0 +1,25 @@
# Ragtag Adventurers 1.1.5.6
# BID: D560C3C55CD23811
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x5B7C530, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1) - 0.1", "TruncDec(FRAMETIME_TARGET, 1) - 0.1"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x5BA1098, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x533B880, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,31 @@
# DRAGON BALL: Sparking! ZERO 2.0.75
# BID: DBE58459690BA338
ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate
-
type: write
address: [MAIN, 0x9A6DA20, 0x9C4]
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, 0x9A6EFF0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x9277B68, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Rune Factory: Guardians of Azuma 1.1.3
# BID: 02F0B93D14038350
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8F63D40, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8F9D470, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7F7C6E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,74 @@
# 테일즈 오브 엑실리아 리마스터 1.0.3
# BID: 7220F3213BED164A
DECLARATIONS:
-
type: variable
name: patch_running
value_type: uint8
default_value: 0
-
type: code
name: applyCustomSpeed
instructions: [
[adrp, x4, $patch_running],
[ldrb, w4, [x4, $patch_running]],
[cbnz, w4, :goto1],
[stp, s0, s1, [x8, 0x6C]],
:goto1, [ret]
]
MASTER_WRITE:
# Block updating game speed
## REF: 00 85 0d 2d
-
type: asm_a64
main_offset: 0x2450394
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x28F5CAC
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x2B30B44
instructions: [
[bl, _applyCustomSpeed()]
]
ALL_FPS:
# Game Speed
## REF: Global_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x82DF380, 0xB8, 0x6C]
value_type: float
value: [FPS_TARGET, "60 / FPS_TARGET"]
# Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS
# UnityEngine.Time::maximumDeltaTime
-
type: write
address: [MAIN, 0x9FE9DB8, 0x100]
value_type: float
value: [0.066666666, 0.066666666]
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x9FE9DB8, 0x48]
value_type: float
value: "1 / FPS_TARGET"
# UnityEngine.Application::targetFrameRate
-
type: evaluate_write
address: [MAIN, 0x84FC2F0]
value_type: uint32
value: FPS_TARGET
-
type: compare
compare_address: [VARIABLE, patch_running]
compare_type: "=="
compare_value: 0
address: [VARIABLE, patch_running]
value: 1

View File

@ -0,0 +1,19 @@
# VARLET `Asia` 1.0.1
# BID: 23E535E2967725BD
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x9019488, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7FFAEE8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,19 @@
# VARLET `Asia` 1.1.0
# BID: 56CB246F5724B3CC
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x901B488, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7FFCEE8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,26 @@
# Fuga: Melodies of Steel 2 1.5.2
# BID: 2C45FAC26500CBAD
ALL_FPS:
# Disable bUseFixedFrameRate
-
type: write
address: [MAIN, 0x7315498, 0x7A4]
address_unsafe: true
value_type: uint32
value: 7
# r.VSync
-
type: write
address: [MAIN, 0x6B1AF58, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7315DB8, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,23 @@
# 테일즈 오브 베르세리아 리마스터 / 緋夜傳奇 Remastered 1.0.4
# BID: 290D5939C6671566
# Known issue: Using barrier devices may not be triggering animation for any other FPS targets than 30, 50, 60, 100, 120.
# Known issue: Opening gate may not happen if you use any other FPS than 30, 60 or 120.
# Solution: when animation doesn't want to progress, change FPS Target to 30, 60 or 120.
ALL_FPS:
# Disable FPS Lock
## REF: 08 69 69 b8 69 ea 41 b9 28 01 08 0b, second result
## Look to which address points ldr w8,[x8, x9, LSL #0x0], this is the interval speed. Substract 4 from offset to get vsync interval and our offset we need to put.
-
type: write
address: [MAIN, 0x44D07A6C]
value_type: uint32
value: [0, 1]
# Speed Factor
## REF: 00 01 3f d6 00 00 22 1e 28 11 91 52 08 91 a7 72
## Find first BLR X8 above search result (ignore BLR X8 in result), then find LDR X8, [X23, #offset]. X23 + offset is our address
-
type: evaluate_write
address: [MAIN, 0x44A926C0, -4]
value_type: float
value: "60 / FPS_TARGET"

View File

@ -0,0 +1,20 @@
# 테일즈 오브 베르세리아 리마스터 / 緋夜傳奇 Remastered 1.0.2
# BID: F4DB705AA11D45F3
ALL_FPS:
# Disable FPS Lock
## REF: 08 01 40 f9 08 01 09 8b
## X8 from ADD X8, X8, X9, this is the address of vsync interval. 0x4 is interval speed
-
type: write
address: [MAIN, 0x44D039BC]
value_type: uint32
value: [0, 1]
# Speed Factor
## REF: 00 01 3f d6 00 00 22 1e 28 11 91 52 08 91 a7 72
## Find first BLR X8 above search result (ignore BLR X8 in result), then find LDR X8, [X23, #offset]. X23 + offset is our address
-
type: evaluate_write
address: [MAIN, 0x44a8e680, -4]
value_type: float
value: "60 / FPS_TARGET"

View File

@ -0,0 +1,71 @@
# DOOM `West` 1.4.1
# BID: C638A0730217792B
ALL_FPS:
# rs_460Threshold (default is 0.285)
-
type: write
address: [MAIN, 0x593E52C]
value_type: float
value: 1
# rs_raiseMilliseconds
-
type: evaluate_write
address: [MAIN, 0x593E9EC]
value_type: float
value: "0.966 * FRAMETIME_TARGET"
# rs_dropMilliseconds
-
type: evaluate_write
address: [MAIN, 0x593E954]
value_type: float
value: "0.99 * FRAMETIME_TARGET"
# com_adaptiveTickMaxHz (default is 30)
-
type: evaluate_write
address: [MAIN, 0x66B3F50]
value_type: int32
value: FPS_TARGET
-
type: evaluate_write
address: [MAIN, 0x66B3F54]
value_type: float
value: FPS_TARGET
# com_adaptiveTickMinHz (default is 30)
-
type: write
address: [MAIN, 0x66B3EB8]
value_type: uint32
value: 15
-
type: write
address: [MAIN, 0x66B3EBC]
value_type: float
value: 15
# With some update devs broke some cutscenes, they apply fixed speed for them. Removing this fixed speed causes myriads of weird issues, that's why I'm locking those cutscenes to 30 FPS.
-
type: compare
compare_address: [MAIN, 0x7377D64]
compare_type: "=="
compare_value_type: uint8
compare_value: 0
value_type: refresh_rate
value: 30
-
type: compare
compare_address: [MAIN, 0x7377D64]
compare_type: "=="
compare_value_type: uint8
compare_value: 0
address: [MAIN, 0x593E9EC]
value_type: float
value: 32.2
-
type: compare
compare_address: [MAIN, 0x7377D64]
compare_type: "=="
compare_value_type: uint8
compare_value: 0
address: [MAIN, 0x593E954]
value_type: float
value: 33

View File

@ -0,0 +1,37 @@
# 모두의 골프 월드 / 全民高爾夫 環球之旅 1.1.7
# BID: 7B51DC4B113F4F52
# Changed frametime target value math formula because default one sucks at 60 FPS target
DECLARATIONS:
-
type: variable
name: dr_frametime_max
value_type: double
default_value: 40
evaluate: "0.9 * FRAMETIME_TARGET"
-
type: variable
name: dr_frametime_min
value_type: double
default_value: 33.3333333333
evaluate: "(0.9 * FRAMETIME_TARGET) - 6"
MASTER_WRITE:
# REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e
-
type: asm_a64
main_offset: 0x39E4938
instructions: [
[adrp, x10, $dr_frametime_max],
[ldr, d1, [x10, $dr_frametime_max]],
[nop]
]
# REF: 00 0d 40 fd 0a 00 b8 d2
-
type: asm_a64
main_offset: 0x39E4A0C
instructions: [
[adrp, x10, $dr_frametime_min],
[ldr, d1, [x10, $dr_frametime_min]],
[nop],
[nop]
]

View File

@ -0,0 +1,25 @@
# Beyond Hanwell 1.0
# BID: D3C96553221659B0
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x7885300, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x78BF860, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x689F6E8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,350 @@
# Xenoblade Chronicles X: Definitive Edition 2.0.0
# BID: EC4ED46BBC4A9EBB
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
-
type: asm_a64
main_offset: 0x95EED8
instructions: [
[bl, _dynamicSpeed()]
]
## Function 1 to speed factor // Usage unknown
-
type: asm_a64
main_offset: 0x286968
instructions: [
[adrp, x21, $speed_factor],
[ldr, x0, [x8, 0xe18]],
[ldr, s10, [x21, $speed_factor]]
]
## Function 3 to speed factor // Usage unknown
-
type: asm_a64
main_offset: 0xA16F00
instructions: [
[adrp, x0, $speed_factor],
[ldr, s8, [x0, $speed_factor]]
]
## Function 4 to FPS // UI Speed
-
type: asm_a64
main_offset: 0xA1F060
instructions: [
[adrp, x0, $current_fps],
[fmov, s0, w8],
[ldr, s0, [x0, $current_fps]]
]
## Function 5 to FPS // Usage unknown
-
type: asm_a64
main_offset: 0x2672DC
instructions: [
[adrp, x0, $current_fps],
[fmov, s0, w8],
[ldrh, w8, [x19, 0x68]],
[ldr, s5, [x0, $current_fps]]
]
## Function 6 to FPS
-
type: asm_a64
main_offset: 0x26DB70
instructions: [
[adrp, x0, $current_fps],
[ldr, s0, [x0, $current_fps]],
[fcvtzu, w0, s0],
[mov, w9, 6],
[udiv, w8, w0, w9]
]
## Function 7 to Frametime in s // Gameplay + cutscene speed
-
type: asm_a64
main_offset: 0x1E2924
instructions: [
[adrp, x9, $current_frametime]
]
-
type: asm_a64
main_offset: 0x1E2938
instructions: [
[ldr, s0, [x9, $current_frametime]]
]
# Adjust various elements related to fighting
-
type: asm_a64
main_offset: 0x1E8F48
instructions: [
[bl, _battleFix()]
]
## Fix gun speed
-
type: asm_a64
main_offset: 0x30FACC
instructions: [
[nop]
]
# Redirect DR Target to MAIN+0x47BEF00
-
type: asm_a64
main_offset: 0x13A90B4
instructions: [
[adrp, x8, $dr_target],
[ldr, s0, [x8, $dr_target]]
]
## Connect function 1
-
type: asm_a64
main_offset: 0x1E17A0
instructions: [
[bl, _cameraRotationFix()]
]
## Connect function 2
-
type: asm_a64
main_offset: 0x1E17B0
instructions: [
[ldp, q1, q0, [x29, -0x60]]
]
-
type: asm_a64
main_offset: 0x1E17BC
instructions: [
[bl, _cameraRotationFix()]
]
# Adjust Field Action gauge bar speed
-
type: asm_a64
main_offset: 0xE5E00
instructions: [
[adrp, x0, $speed_factor],
[adrp, x9, 0x1d54000],
[ldr, s8, [x0, $speed_factor]]
]
## Fix for FN Site
-
type: asm_a64
main_offset: 0xE5858
instructions: [
[bl, _fnSiteFix()]
]
# Fix long jump when not running
-
type: asm_a64
main_offset: 0x23EF70
instructions: [
[bl, _longJumpFix()]
]
# Adjust QTE Speed
## Connect function
-
type: asm_a64
main_offset: 0x5C6280
instructions: [
[bl, _qteFix()]
]
# Fix fog speed
-
type: asm_a64
main_offset: 0x296AE0
instructions: [
[adrp, x8, $speed_factor],
[ldr, s2, [x8, $speed_factor]],
[bl, _fogSpeedFix()]
]
-
type: asm_a64
main_offset: 0x676D4
instructions: [
[bl, _overdriveFix()]
]
ALL_FPS:
# FPS Lock
# ref: 00 01 00 b9 2a 01 00 b9 c0 03 5f d6
-
type: write
address: [MAIN, 0x1D943A0]
value_type: int32
value: [1, 1]
# Lock game to 30 FPS when complex/prerendered cutscene is played
## Adjusts DR target
-
type: compare
compare_address: [MAIN, 0x1FEFAF4]
compare_value_type: uint32
compare_type: ">"
compare_value: 2
address: [VARIABLE, dr_target]
value_type: float
value: 0.03333333333
## Force OS to run at 60 Hz with interval 2
-
type: compare
compare_address: [MAIN, 0x1FEFAF4]
compare_value_type: uint32
compare_type: ">"
compare_value: 2
value_type: refresh_rate
value: 30

View File

@ -0,0 +1,25 @@
# SWORD ART ONLINE Fractured Daydream EUR 1.6.0.0
# BID: 1A6C27F8DCFE45CB
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x86BE728, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86F92D0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EF8F88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# SWORD ART ONLINE Fractured Daydream EUR 1.6.1.0
# BID: 99252F8F7EE61A81
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x86AD728, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86E82D0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EE7F88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,13 @@
# EA SPORTS FC 26 1.83.c362
# BID: 26E63D318FF5B831
ALL_FPS:
# Internal FPS Lock
-
type: evaluate_write
address: [MAIN, 0xC67B718, 8]
value_type: double
value: FPS_TARGET
-
type: block
what: timing

View File

@ -0,0 +1,13 @@
# EA SPORTS FC 26 1.82.4264
# BID: EDE4F70074EC37C7
ALL_FPS:
# Internal FPS Lock
-
type: evaluate_write
address: [MAIN, 0xC667718, 8]
value_type: double
value: FPS_TARGET
-
type: block
what: timing

View File

@ -0,0 +1,13 @@
# EA SPORTS FC 26 1.85.374e
# BID: F8D172BD397ED5DD
ALL_FPS:
# Internal FPS Lock
-
type: evaluate_write
address: [MAIN, 0xC692698, 8]
value_type: double
value: FPS_TARGET
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# 드래곤 퀘스트 VII Reimagined / 勇者鬥惡龍 VII Reimagined 1.1.0
# BID: AB06020960EDD828
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x7F1BE78, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7F41918, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x77430D8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,12 @@
# 紅の錬金術士と白の守護者 ~レスレリアーナのアトリエ~ 1.4b
# BID: 2B08D49BD9504E41
ALL_FPS:
# MagicaCloth2.MagicaManager_TypeInfo
## REF: 00 10 2e 1e 01 e4 00 2f 00 21 20 1e, first result, second ADRP+ADD in function
-
type: evaluate_write
address: [MAIN, 0x7791FE8, 0xB8, 0, 0x10, 0x20, 0x10]
address_unsafe: true
value_type: uint32
value: "FPS_TARGET + 5"

View File

@ -0,0 +1,34 @@
# DRAGON BALL Z: KARAKOT + A NEW POWER AWAKENS SET 1.70
# BID: E99DFFA39354B606
ALL_FPS:
# Disable bUseFixedFrameRate in cutscenes to unlock framerate
-
type: write
address: [MAIN, 0x9D02558, 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:
# bAllowMultiThreadedAnimationUpdate |= 4
# bOptimizeAnimBlueprintMemberVariableAccess |= 2
# bCanBlueprintsTickByDefault |= 1
value: 7
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x9CCD498, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x9D02E08, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x916F698, 0]
value_type: int32
value: [0, 0]

View File

@ -0,0 +1,19 @@
# Octopath Traveler 0 1.0.4
# BID: 57C918F08B505771
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x6C4F6E8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7C718E0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,19 @@
# Octopath Traveler 0 1.0.5
# BID: 9FE60A212CFF9B9A
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x6C516E8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7C738E0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,57 @@
# NieR:Automata The End of YoRHa Edition US/EU 1.0.3
# BID: 3C10EC35C5EF4C36
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
## REF: 8C 46 A8 52 83 01 27 1E
-
type: asm_a64
main_offset: 0x9BF434
instructions: [
[adrp, x12, $dr_target_bad],
[ldr, s3, [x12, $dr_target_bad]]
]
## REF: AC 47 81 52 0C 40 A8 72, first result
-
type: asm_a64
main_offset: 0x9BF484
instructions: [
[adrp, x12, $dr_target_optimal],
[ldr, w12, [x12, $dr_target_optimal]]
]
## REF: AC 47 81 52 0C 40 A8 72, second result
-
type: asm_a64
main_offset: 0x9BF4D4
instructions: [
[fcsel, s3, s4, s0, gt],
[adrp, x12, $dr_target_optimal],
[ldr, s0, [x12, $dr_target_optimal]],
[adrp, x12, $dr_target_good]
]
## REF: 00 D0 27 1E 60 20 20 1E
-
type: asm_a64
main_offset: 0x9BF4F8
instructions: [
[ldr, s0, [x12, $dr_target_good]]
]

View File

@ -22,6 +22,7 @@ DECLARATIONS:
evaluate: "0.9 * FRAMETIME_TARGET"
MASTER_WRITE:
# Redirect DR timings
## REF: 8C 46 A8 52 83 01 27 1E
-
type: asm_a64
main_offset: 0x9BF3E4
@ -29,6 +30,7 @@ MASTER_WRITE:
[adrp, x12, $dr_target_bad],
[ldr, s3, [x12, $dr_target_bad]]
]
## REF: AC 47 81 52 0C 40 A8 72, first result
-
type: asm_a64
main_offset: 0x9BF434
@ -36,6 +38,7 @@ MASTER_WRITE:
[adrp, x12, $dr_target_optimal],
[ldr, w12, [x12, $dr_target_optimal]]
]
## REF: AC 47 81 52 0C 40 A8 72, second result
-
type: asm_a64
main_offset: 0x9BF484
@ -45,10 +48,10 @@ MASTER_WRITE:
[ldr, s0, [x12, $dr_target_optimal]],
[adrp, x12, $dr_target_good]
]
## REF: 00 D0 27 1E 60 20 20 1E
-
type: asm_a64
main_offset: 0x9BF4A8
instructions: [
[ldr, s0, [x12, $dr_target_good]]
]

View File

@ -0,0 +1,74 @@
# テイルズ オブ エクシリア リマスター 1.0.3
# BID: 89D7333B5443950F
DECLARATIONS:
-
type: variable
name: patch_running
value_type: uint8
default_value: 0
-
type: code
name: applyCustomSpeed
instructions: [
[adrp, x4, $patch_running],
[ldrb, w4, [x4, $patch_running]],
[cbnz, w4, :goto1],
[stp, s0, s1, [x8, 0x6C]],
:goto1, [ret]
]
MASTER_WRITE:
# Block updating game speed
## REF: 00 85 0d 2d
-
type: asm_a64
main_offset: 0x2450394
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x28F5A8C
instructions: [
[bl, _applyCustomSpeed()]
]
-
type: asm_a64
main_offset: 0x2B30924
instructions: [
[bl, _applyCustomSpeed()]
]
ALL_FPS:
# Game Speed
## REF: Global_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x82DF380, 0xB8, 0x6C]
value_type: float
value: [FPS_TARGET, "60 / FPS_TARGET"]
# Just in case, dunno if they are used for anything, but all of them were set to target strictly 30 FPS
# UnityEngine.Time::maximumDeltaTime
-
type: write
address: [MAIN, 0x9FE9DB8, 0x100]
value_type: float
value: [0.066666666, 0.066666666]
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x9FE9DB8, 0x48]
value_type: float
value: "1 / FPS_TARGET"
# UnityEngine.Application::targetFrameRate
-
type: evaluate_write
address: [MAIN, 0x84FC2E8]
value_type: uint32
value: FPS_TARGET
-
type: compare
compare_address: [VARIABLE, patch_running]
compare_type: "=="
compare_value: 0
address: [VARIABLE, patch_running]
value: 1

View File

@ -0,0 +1,25 @@
# Upin & Ipin Universe 1.0.3
# BID: 97EBD09FA8327AFB
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x9304098, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x933F5C0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x8320EE8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,75 @@
# WARRIORS: Abyss 1.8.0
# BID: 7FB0CED6B8B51B80
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: 0x8EEAC0
instructions: [
[adrp, x1, 0x1272000],
[ldr, s1, [x1, 0xE30]]
]
# Redirect DR Targets
-
type: asm_a64
main_offset: 0x8EEB64
instructions: [
[adrp, x9, $dr_target1],
[ldr, s1, [x9, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x8EEB74
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, 0x1272E3C]
value_type: uint32
value: "120 / FPS_LOCK_TARGET"
# Prevent from setting it as 0, otherwise game crashes
-
type: evaluate_compare
compare_address: [MAIN, 0x1272E3C]
compare_type: "=="
compare_value_type: uint32
compare_value: 0
address: [MAIN, 0x1272E3C]
value_type: uint32
value: 1
# Others
-
type: evaluate_write
address: [MAIN, 0x1272E30]
value_type: float
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x1272E34]
value_type: uint32
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x1272E38]
value_type: float
value: "FPS_TARGET"

View File

@ -0,0 +1,75 @@
# WARRIORS: Abyss 1.7.0
# BID: E09BC148192342B1
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: 0x8EBDC0
instructions: [
[adrp, x1, 0x126D000],
[ldr, s1, [x1, 0xE30]]
]
# Redirect DR Targets
-
type: asm_a64
main_offset: 0x8EBE64
instructions: [
[adrp, x9, $dr_target1],
[ldr, s1, [x9, $dr_target1]]
]
-
type: asm_a64
main_offset: 0x8EBE74
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, 0x126DE3C]
value_type: uint32
value: "120 / FPS_LOCK_TARGET"
# Prevent from setting it as 0, otherwise game crashes
-
type: evaluate_compare
compare_address: [MAIN, 0x126DE3C]
compare_type: "=="
compare_value_type: uint32
compare_value: 0
address: [MAIN, 0x126DE3C]
value_type: uint32
value: 1
# Others
-
type: evaluate_write
address: [MAIN, 0x126DE30]
value_type: float
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x126DE34]
value_type: uint32
value: "FPS_TARGET"
-
type: evaluate_write
address: [MAIN, 0x126DE38]
value_type: float
value: "FPS_TARGET"

View File

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

View File

@ -0,0 +1,19 @@
# Little Nightmares III 1.0.5
# BID: 59B2891BAB23B8AE
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x7CB4E48, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x74C0210, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,10 @@
# Becastled 1.5
# BID: A91CF6368FE718E6
ALL_FPS:
# DynamicResolution_TypeInfo
-
type: evaluate_write
address: [MAIN, 0xA099BF0, 0xB8, 0, 0x58]
value_type: float
value: "0.96 * FRAMETIME_TARGET"

View File

@ -0,0 +1,10 @@
# Becastled 1.6
# BID: FCFAE709261C279C
ALL_FPS:
# DynamicResolution_TypeInfo
-
type: evaluate_write
address: [MAIN, 0xA09CE00, 0xB8, 0, 0x58]
value_type: float
value: "0.96 * FRAMETIME_TARGET"

View File

@ -0,0 +1,25 @@
# Formula Legends 1.0.11
# BID: 863E4EEF043F6720
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x83BCF68, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# r.VSync
-
type: write
address: [MAIN, 0x73D8EE8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x83F8780, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Formula Legends 1.0.13
# BID: B1140CA4CFDD5B4D
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8403F68, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# r.VSync
-
type: write
address: [MAIN, 0x741FEE8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x843F780, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Formula Legends 1.0.14
# BID: B164D111A971694E
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8414F68, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# r.VSync
-
type: write
address: [MAIN, 0x7430EE8, 0]
value_type: int32
value: [0, 0]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8450780, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# Forgive me Father 2 1.1.2
# BID: 2E7E48804429CB75
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8058DE8, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8093260, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7099970, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,60 @@
# 삼국지14 with 파워업키트 1.0.10
# BID: C00AA2EBF01D3A48
# Cursor speed is tied to framerate, main menu animations speed is not adjusted properly in range from 35 to 55 FPS
DECLARATIONS:
# DON'T PUT ANYTHING BETWEEN - START
-
type: variable
name: fps_lock
value_type: uint32
default_value: 30
evaluate: FPS_LOCK_TARGET
-
type: variable
name: fps_lock2
value_type: uint32
default_value: 60
evaluate: FPS_LOCK_TARGET
# DON'T PUT ANYTHING BETWEEN - END
-
type: variable
name: game_speed
value_type: float
default_value: 0.0333333333
evaluate: "1/FPS_TARGET"
MASTER_WRITE:
# Redirect adjusting game speed to FPS Lock, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, replace ADRP+ADD above
-
type: asm_a64
main_offset: 0xB8EB08
instructions: [
[adrp, x9, $fps_lock],
[add, x9, x9, $fps_lock]
]
# Redirect FPS Lock, REF: C8 32 40 B9 E8 C2 00 B9, below replace LDR W8, [X0] + B
-
type: asm_a64
main_offset: 0x89668C
instructions: [
[adrp, x8, $fps_lock],
[ldr, w8, [x8, $fps_lock]]
]
# Redirect game speed to MAIN + 0x2B92808, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6, replace beginning of function
-
type: asm_a64
main_offset: 0x1112670
instructions: [
[adrp, x8, $game_speed],
[ldr, s0, [x0, 0xa0]],
[ldr, s1, [x8, $game_speed]]
]
ALL_FPS:
- # Adjust max delta for menus, 0 - 30 FPS, 1 - 60 FPS, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E, ADRP X8 + LDR W8 above
type: evaluate_write
address: [MAIN, 0x254DDF0]
value_type: uint32
value: "FPS_TARGET / 60"
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# SWORD ART ONLINE Fractured Daydream US 1.6.0.0
# BID: 1A6C27F8DCFE45CB
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x86BE728, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86F92D0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EF8F88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,25 @@
# SWORD ART ONLINE Fractured Daydream US 1.6.1.0
# BID: 99252F8F7EE61A81
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x86AD728, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x86E82D0, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x7EE7F88, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,19 @@
# The Hundred Line -Last Defense Academy- US 1.2.0
# BID: D4A7205845845BCA
# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS.
ALL_FPS:
# FPS Lock
# REF: 1B 41 00 00
-
type: evaluate_write
address: [MAIN, 0xC97D18]
value_type: uint32
value: FRAMETIME_TARGET * 1000
# Unknown value, but set in the same function as FPS lock, so it may be important
# REF: 3C 00 00 00 01 00 00 00 00 00 00 00
-
type: evaluate_write
address: [MAIN, 0xC97CE4]
value_type: uint32
value: FPS_TARGET

View File

@ -0,0 +1,19 @@
# FANTASY LIFE i: The Girl Who Steals Time 2.1.0
# BID: 16DF2D999C7ADAD7
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0xAF9C938, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x9F7C728, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,19 @@
# FANTASY LIFE i: The Girl Who Steals Time 2.1.2
# BID: 26CE9F3CC0393826
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0xAFA0938, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x9F80728, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,19 @@
# FANTASY LIFE i: The Girl Who Steals Time 2.0.4
# BID: 56AA31E3C9DFB585
ALL_FPS:
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0xB590938, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0xA570728, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,37 @@
# みんなのGOLF WORLD 1.1.7
# BID: 913B4D56415E96FF
# Changed frametime target value math formula because default one sucks at 60 FPS target
DECLARATIONS:
-
type: variable
name: dr_frametime_max
value_type: double
default_value: 40
evaluate: "0.9 * FRAMETIME_TARGET"
-
type: variable
name: dr_frametime_min
value_type: double
default_value: 33.3333333333
evaluate: "(0.9 * FRAMETIME_TARGET) - 6"
MASTER_WRITE:
# REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e
-
type: asm_a64
main_offset: 0x39E48A8
instructions: [
[adrp, x10, $dr_frametime_max],
[ldr, d1, [x10, $dr_frametime_max]],
[nop]
]
-
# REF: 00 0d 40 fd 0a 00 b8 d2
type: asm_a64
main_offset: 0x39E497C
instructions: [
[adrp, x10, $dr_frametime_min],
[ldr, d1, [x10, $dr_frametime_min]],
[nop],
[nop]
]

View File

@ -0,0 +1,10 @@
# NINJA GAIDEN: Ragebound 1.0.7
# BID: 5CBAF9E303664284
ALL_FPS:
# UnityEngine.Time::fixedDeltaTime
-
type: evaluate_write
address: [MAIN, 0x613A2C0, 0x48]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -1,4 +1,4 @@
# Red Dead Redemption 1.0.4-1.0.6
# Red Dead Redemption 1.0.4-1.0.7
# BID: 37531419DA7654EC
DECLARATIONS:
@ -32,4 +32,5 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x20DBA20]
value_type: uint32
value: VSYNC_TARGET
value: VSYNC_TARGET

View File

@ -0,0 +1,41 @@
# ソニックフォース 新価格版 1.3.0
# BID: 972D8BF172E86C18
# Game speed is tied to framerate
MASTER_WRITE:
# Remove double buffer
## REF: E8 37 00 B9 E8 03 1F 32
-
type: asm_a64
main_offset: 0xAD414C
instructions: [
[mov, w8, 3]
]
# Block switching back to 30 FPS mode on loading screens
## REF: 08 10 40 F9 48 00 00 B4, replace STR
-
type: asm_a64
main_offset: 0x6173F8
instructions: [
[nop]
]
ALL_FPS:
# Switch to 60 FPS Mode
## REF: 7F 7E 07 A9 6A A2 01 A9, ADRP + LDR below
-
type: write
address: [MAIN, 0x1CAC518, 0x28, 0x20, 0x14]
value_type: uint32
value: 1
# FPS target
## REF: 00 1D 40 BD 01 D0 37 1E, ADRP + LDR above it
-
type: evaluate_write
address: [MAIN, 0x1C38C28, 0x1C]
value_type: float
value: FPS_TARGET
-
type: evaluate_write
address: [MAIN, 0x1C38C28, 0x14C]
value_type: float
value: FPS_TARGET

View File

@ -0,0 +1,19 @@
# HUNDRED LINE -最終防衛学園- 1.2.0
# BID: D4A7205845845BCA
# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS.
ALL_FPS:
# FPS Lock
# REF: 1B 41 00 00
-
type: evaluate_write
address: [MAIN, 0xC97D18]
value_type: uint32
value: FRAMETIME_TARGET * 1000
# Unknown value, but set in the same function as FPS lock, so it may be important
# REF: 3C 00 00 00 01 00 00 00 00 00 00 00
-
type: evaluate_write
address: [MAIN, 0xC97CE4]
value_type: uint32
value: FPS_TARGET

View File

@ -0,0 +1,15 @@
# The Long Dark 2.51.170901
# BID: 99349B456BEA3469
ALL_FPS:
# TLD.Rendering.DynamicResolutionHelper_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x7886928, 0xB8, 0x48]
value_type: uint32
value: FPS_TARGET
-
type: evaluate_write
address: [MAIN, 0x7886928, 0xB8, 0x50]
value_type: double
value: FRAMETIME_TARGET

View File

@ -0,0 +1,15 @@
# The Long Dark: Tales from the Far Territory 2.51.170901
# BID: 8CBC566AED7F1095
ALL_FPS:
# TLD.Rendering.DynamicResolutionHelper_TypeInfo
-
type: evaluate_write
address: [MAIN, 0x73B7A90, 0xB8, 0x48]
value_type: uint32
value: FPS_TARGET
-
type: evaluate_write
address: [MAIN, 0x73B7A90, 0xB8, 0x50]
value_type: double
value: FRAMETIME_TARGET

View File

@ -0,0 +1,10 @@
# The Legend of Heroes: Trails beyond the Horizon 1.0.6
# BID: 11D7F970861DFA66
ALL_FPS:
# REF: C1 03 80 52 09 35 00 B9, first ADRP + ADD above it
-
type: evaluate_write
address: [MAIN, 0x9FBEA0, 0x34]
value_type: uint32
value: FPS_TARGET

View File

@ -0,0 +1,10 @@
# The Legend of Heroes: Trails beyond the Horizon 1.0.5
# BID: A8C6A84FBCF08724
ALL_FPS:
# REF: C1 03 80 52 09 35 00 B9, first ADRP + ADD above it
-
type: evaluate_write
address: [MAIN, 0x9FBEA0, 0x34]
value_type: uint32
value: FPS_TARGET

View File

@ -0,0 +1,18 @@
# 룬 팩토리 5 / 符文工廠5 1.1.2
# BID: 082815456F5BD744
# Cutscenes don't use Dynamic Resolution
ALL_FPS:
# Dynamic Resolution Frame Target Max in ms (default is 38, so resolution is a priority over framerate)
## REF: Method$SingletonMonoBehaviour<SkyStudioTimeManager>.CheckInstance()
-
type: evaluate_write
address: [MAIN, 0x5ED5E58, 0x738, 0x70, 0x38]
value_type: float
value: "TruncDec(FRAMETIME_TARGET, 1)"
# Dynamic Resolution Frame Target Min in ms (default is 33)
-
type: evaluate_write
address: [MAIN, 0x5ED5E58, 0x738, 0x70, 0x3C]
value_type: float
value: "FRAMETIME_TARGET - 1.5"

View File

@ -0,0 +1,167 @@
# The Legend of Zelda: Breath of the Wild 1.9.0
# BID: CD57B23FA4BBAD65
DECLARATIONS:
-
type: variable
name: game_speed
value_type: float
default_value: 1.0
-
type: variable
name: min_delta
value_type: float
default_value: 1.0
evaluate: 30 / FPS_TARGET
-
type: variable
name: dr_factor
value_type: float
default_value: 100.0
evaluate: (FPS_TARGET / 30) * 100
-
type: variable
name: frame_tick
value_type: uint64
default_value: 0
-
type: const
name: default_frame_nanoseconds
value: 33333333
-
type: code
name: dynamicSpeed
instructions: [
[stp, x29, x30, [sp, -16], "!"],
[mov, x29, sp],
[blr, x8],
[mrs, x2, cntpct_el0],
[adrp, x8, $frame_tick],
[ldr, x1, [x8, $frame_tick]],
[cmp, x1, xzr],
[str, x2, [x8, $frame_tick]],
[b.eq, :goto4],
[sub, x0, x2, x1],
[bl, _convertTickToTimeSpan()],
[ucvtf, s0, x0],
[mov, w0, $default_frame_nanoseconds],
[movk, w0, $default_frame_nanoseconds, 16],
[ucvtf, s1, w0],
[fdiv, s0, s0, s1],
[fmov, s1, 2.0],
[fcmp, s0, s1],
[b.lt, :goto2],
[fmov, s0, s1],
:goto2, [adrp, x8, $min_delta],
[ldr, s1, [x8, $min_delta]],
[fcmp, s0, s1],
[b.gt, :goto3],
[fmov, s0, s1],
:goto3, [adrp, x8, $game_speed],
[str, s0, [x8, $game_speed]],
:goto4, [ldp, x29, x30, [sp], 16],
[ret]
]
-
type: variable
name: cutscene_state
value_type: uint8
default_value: 1
-
type: code
name: signalCutscene
instructions: [
[adrp, x7, $cutscene_state],
[strb, w1, [x7, $cutscene_state]],
[b, 0xD0B208] # Update this to jump to address replaced via "Signal Cutscenes playing"
]
MASTER_WRITE:
# Remove double buffer
## REF: 61 F6 42 39
-
type: asm_a64
main_offset: 0xE93DC8
instructions: [
[mov, w1, 1]
]
# Change pointer of time factor for DR calculations to $dr_factor
## REF: 01 01 27 1E 08 59 A8 52 03 08 21 1E, replace hardcoded 100.0 float
-
type: asm_a64
main_offset: 0x12670A4
instructions: [
[adrp, x8, $dr_factor],
[fmul, s3, s0, s1],
[ldr, s1, [x8, $dr_factor]]
]
# Dynamic speed
## Replace nvnQueuePresentTexture call to code cave _dynamicSpeed()
-
type: asm_a64
main_offset: 0xE9AB7C
instructions: [
[bl, _dynamicSpeed()]
]
## Patch game speed function to use speed from $game_speed
## REF: 00 3C 40 BD 00 40 00 BD, replace CBZ W8 after it
-
type: asm_a64
main_offset: 0x151D448
instructions: [
[b, +12]
]
## REF: 01 01 23 1E 28 00 80 52 42 D8 21 7E, replace FDIV + FMUL after that
-
type: asm_a64
main_offset: 0x151D46C
instructions: [
[adrp, x9, $game_speed],
[ldr, s1, [x9, $game_speed]]
]
## Patch UI speed function to use speeed from $game_speed
## REF: 01 10 2C 1E E0 03 1F 2A
-
type: asm_a64
main_offset: 0x1280ED8
instructions: [
[adrp, x7, $game_speed]
]
## REF: 00 08 21 1E 00 21 0B BD
-
type: asm_a64
main_offset: 0x1280EE4
instructions: [
[ldr, s0, [x7, $game_speed]]
]
# Signal Cutscenes playing
## REF: A8 00 80 52 E0 03 13 AA 68 C2 01 F8, second BL after that, before second BL you should have MOV X0, X19 + MOV W1, 1
-
type: asm_a64
main_offset: 0xD13910
instructions: [
[bl, _signalCutscene()]
]
## REF: 03 1C 40 92 80 82 17 91 E1 03 15 AA, second BL after that
-
type: asm_a64
main_offset: 0xD140D0
instructions: [
[bl, _signalCutscene()]
]
ALL_FPS:
# Scrolling speed
## REF: 68 16 41 B9 D8 22 D5 1A
## ADRP + LDR above it
-
type: evaluate_write
address: [MAIN, 0x1DAD0E0]
value_type: float
value: "30 / FPS_TARGET"
# Prerendered cutscenes must be played at 30 FPS
-
type: compare
compare_address: [VARIABLE, cutscene_state]
compare_type: "=="
compare_value: 0
value_type: refresh_rate
value: 30

View File

@ -0,0 +1,37 @@
# EVERYBODY'S GOLF: Hot Shots US 1.1.7
# BID: EB39450B8BEE080B
# Changed frametime target value math formula because default one sucks at 60 FPS target
DECLARATIONS:
-
type: variable
name: dr_frametime_max
value_type: double
default_value: 40
evaluate: "0.9 * FRAMETIME_TARGET"
-
type: variable
name: dr_frametime_min
value_type: double
default_value: 33.3333333333
evaluate: "(0.9 * FRAMETIME_TARGET) - 6"
MASTER_WRITE:
# REF: 0a 00 a4 d2 8a 08 e8 f2 41 01 67 9e
-
type: asm_a64
main_offset: 0x39E4928
instructions: [
[adrp, x10, $dr_frametime_max],
[ldr, d1, [x10, $dr_frametime_max]],
[nop]
]
# REF: 00 0d 40 fd 0a 00 b8 d2
-
type: asm_a64
main_offset: 0x39E49FC
instructions: [
[adrp, x10, $dr_frametime_min],
[ldr, d1, [x10, $dr_frametime_min]],
[nop],
[nop]
]

View File

@ -0,0 +1,41 @@
# DARQ Ultimate Edition 1.0.3
# BID: C57C698B73E75F7E
DECLARATIONS:
-
type: variable
name: frametime_target
value_type: double
default_value: 33.333332061767578
evaluate: "FRAMETIME_TARGET - 1.0" # Default value is FRAMETIME_TARGET, but it has issues with reaching 60 FPS
-
type: code
name: getFrametimeTarget1
instructions: [
[adrp, x8, $frametime_target],
[ldr, d9, [x8, $frametime_target]],
[ret]
]
-
type: code
name: getFrametimeTarget2
instructions: [
[adrp, x8, $frametime_target],
[ldr, d1, [x8, $frametime_target]],
[ret]
]
MASTER_WRITE:
# REF: 69 26 40 fd
-
type: asm_a64
main_offset: 0x17FE28C
instructions: [
[bl, _getFrametimeTarget1()]
]
# REF: 61 26 40 fd 00 20 61 1e
-
type: asm_a64
main_offset: 0x17FE2B8
instructions: [
[bl, _getFrametimeTarget2()]
]

View File

@ -0,0 +1,21 @@
# No Man's Sky 6.20.0
# BID: 19EC806A902017D6
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 30
evaluate: FPS_TARGET
MASTER_WRITE:
# Redirect DR frametime target
# REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that
-
type: asm_a64
main_offset: 0x2085970
instructions: [
[adrp, x9, $dr_target],
[ldr, s0, [x9, $dr_target]],
[nop]
]

View File

@ -0,0 +1,21 @@
# No Man's Sky 6.23.0
# BID: 68F13E3406FBAD29
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 30
evaluate: FPS_TARGET
MASTER_WRITE:
# Redirect DR frametime target
# REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that
-
type: asm_a64
main_offset: 0x208C840
instructions: [
[adrp, x9, $dr_target],
[ldr, s0, [x9, $dr_target]],
[nop]
]

View File

@ -0,0 +1,21 @@
# No Man's Sky 6.24.0
# BID: 6A0B389924A77A0B
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 30
evaluate: FPS_TARGET
MASTER_WRITE:
# Redirect DR frametime target
# REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that
-
type: asm_a64
main_offset: 0x208E1D0
instructions: [
[adrp, x9, $dr_target],
[ldr, s0, [x9, $dr_target]],
[nop]
]

View File

@ -0,0 +1,21 @@
# No Man's Sky 6.18.0
# BID: 8A002EA3F5547393
DECLARATIONS:
-
type: variable
name: dr_target
value_type: float
default_value: 30
evaluate: FPS_TARGET
MASTER_WRITE:
# Redirect DR frametime target
# REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that
-
type: asm_a64
main_offset: 0x1F9BC40
instructions: [
[adrp, x9, $dr_target],
[ldr, s0, [x9, $dr_target]],
[nop]
]

View File

@ -0,0 +1,12 @@
# 옛날 옛적에 괴혼 / 從前從前有個塊魂 1.0.4
# BID: F7B9323BE62441F3
ALL_FPS:
# Dynamic Resolution
## REF: App.KatamariSin.AppSupport_TypeInfo
## REF: 89 07 80 D2 20 04 00 0F, ADRP X20 above it + LDR below it
-
type: evaluate_write
address: [MAIN, 0x8F86948, 0xB8, 0x18]
value_type: double
value: "0.9 * FRAMETIME_TARGET"

View File

@ -0,0 +1,25 @@
# Trover Saves the Universe 1.0.0.1
# BID: 9D4553105795CD81
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x542B2D8, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x5455528, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x48C0D38, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -0,0 +1,12 @@
# Don't Starve Together 1.27.0
# BID: AED0F6D2983D00D8
ALL_FPS:
# FPS Lock
# REF: Find instruction 36 D9 34 F8, use X9 to find main offset
-
type: evaluate_write
address: [MAIN, 0x91E448, 0, 0x320]
address_unsafe: true
value_type: float
value: "1 / FPS_TARGET"

View File

@ -0,0 +1,12 @@
# Don't Starve Together 1.26.0
# BID: C6F5D7298E0DA0B4
ALL_FPS:
# FPS Lock
# REF: Find instruction 36 D9 34 F8, use X9 to find main offset
-
type: evaluate_write
address: [MAIN, 0x91E448, 0, 0x320]
address_unsafe: true
value_type: float
value: "1 / FPS_TARGET"

View File

@ -0,0 +1,12 @@
# Don't Starve Together 1.25.0
# BID: DB55B89141DFD415
ALL_FPS:
# FPS Lock
# REF: Find instruction 36 D9 34 F8, use X9 to find main offset
-
type: evaluate_write
address: [MAIN, 0x91C448, 0, 0x320]
address_unsafe: true
value_type: float
value: "1 / FPS_TARGET"

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