diff --git a/README.md b/README.md index 0666ed1..065b0c0 100644 --- a/README.md +++ b/README.md @@ -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) - Оверлей-музыкальный плеер, работает в фоне. diff --git a/README_ENG.md b/README_ENG.md index dff9b25..434e148 100644 --- a/README_ENG.md +++ b/README_ENG.md @@ -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. diff --git a/SaltySD/plugins/FPSLocker/patches/010000B0196AA000/005CB235608DCEDD.yaml b/SaltySD/plugins/FPSLocker/patches/010000B0196AA000/005CB235608DCEDD.yaml new file mode 100644 index 0000000..cb035ec --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010000B0196AA000/005CB235608DCEDD.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01000130120EE000/55C51FEEAA71E42D.yaml b/SaltySD/plugins/FPSLocker/patches/01000130120EE000/55C51FEEAA71E42D.yaml new file mode 100644 index 0000000..28cd3ae --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01000130120EE000/55C51FEEAA71E42D.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01000400204FE000/7FB0CED6B8B51B80.yaml b/SaltySD/plugins/FPSLocker/patches/01000400204FE000/7FB0CED6B8B51B80.yaml new file mode 100644 index 0000000..eb522d0 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01000400204FE000/7FB0CED6B8B51B80.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01000400204FE000/E09BC148192342B1.yaml b/SaltySD/plugins/FPSLocker/patches/01000400204FE000/E09BC148192342B1.yaml new file mode 100644 index 0000000..a8c2c35 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01000400204FE000/E09BC148192342B1.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100068018ECC000/8019D7D61A81AF2B.yaml b/SaltySD/plugins/FPSLocker/patches/0100068018ECC000/8019D7D61A81AF2B.yaml new file mode 100644 index 0000000..e6b199f --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100068018ECC000/8019D7D61A81AF2B.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010008801F228000/290D5939C6671566.yaml b/SaltySD/plugins/FPSLocker/patches/010008801F228000/290D5939C6671566.yaml new file mode 100644 index 0000000..6fcb977 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010008801F228000/290D5939C6671566.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010008801F228000/F4DB705AA11D45F3.yaml b/SaltySD/plugins/FPSLocker/patches/010008801F228000/F4DB705AA11D45F3.yaml new file mode 100644 index 0000000..9ff5952 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010008801F228000/F4DB705AA11D45F3.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100092021C80000/AD288DAF31DEEDFD.yaml b/SaltySD/plugins/FPSLocker/patches/0100092021C80000/AD288DAF31DEEDFD.yaml new file mode 100644 index 0000000..830c4c2 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100092021C80000/AD288DAF31DEEDFD.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100092021C80000/F5C3661E4631499D.yaml b/SaltySD/plugins/FPSLocker/patches/0100092021C80000/F5C3661E4631499D.yaml new file mode 100644 index 0000000..71b73ce --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100092021C80000/F5C3661E4631499D.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100727018A10000/2EEE840599DC7021.yaml b/SaltySD/plugins/FPSLocker/patches/0100095023E68000/D91CFC777B9A6E94.yaml similarity index 68% rename from SaltySD/plugins/FPSLocker/patches/0100727018A10000/2EEE840599DC7021.yaml rename to SaltySD/plugins/FPSLocker/patches/0100095023E68000/D91CFC777B9A6E94.yaml index 3eb606f..0cee4d6 100644 --- a/SaltySD/plugins/FPSLocker/patches/0100727018A10000/2EEE840599DC7021.yaml +++ b/SaltySD/plugins/FPSLocker/patches/0100095023E68000/D91CFC777B9A6E94.yaml @@ -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] - diff --git a/SaltySD/plugins/FPSLocker/patches/010009D018A06000/1A6C27F8DCFE45CB.yaml b/SaltySD/plugins/FPSLocker/patches/010009D018A06000/1A6C27F8DCFE45CB.yaml new file mode 100644 index 0000000..a8d6aa5 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010009D018A06000/1A6C27F8DCFE45CB.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010009D018A06000/99252F8F7EE61A81.yaml b/SaltySD/plugins/FPSLocker/patches/010009D018A06000/99252F8F7EE61A81.yaml new file mode 100644 index 0000000..b3d6151 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010009D018A06000/99252F8F7EE61A81.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01000AE01E316000/5CBE310E8D25E740.yaml b/SaltySD/plugins/FPSLocker/patches/01000AE01E316000/5CBE310E8D25E740.yaml new file mode 100644 index 0000000..2a36e34 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01000AE01E316000/5CBE310E8D25E740.yaml @@ -0,0 +1,16 @@ +# Phantom Brave: The Lost Hero 1.24 +# BID: 5CBE310E8D25E740 + +ALL_FPS: + # Adjust DR FPS target + ## REF: Nmpl::Core::CSingleton::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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01000B202041A000/1C0DA03A066F5B51.yaml b/SaltySD/plugins/FPSLocker/patches/01000B202041A000/1C0DA03A066F5B51.yaml new file mode 100644 index 0000000..53227ed --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01000B202041A000/1C0DA03A066F5B51.yaml @@ -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] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/5E6F9D0C5161586B.yaml b/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/5E6F9D0C5161586B.yaml new file mode 100644 index 0000000..ec70156 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/5E6F9D0C5161586B.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/B87B6963DF4DA555.yaml b/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/B87B6963DF4DA555.yaml new file mode 100644 index 0000000..d0c713c --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01000F9020CD4000/B87B6963DF4DA555.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01001300232F4000/C7C4E3FE091EB9A0.yaml b/SaltySD/plugins/FPSLocker/patches/01001300232F4000/C7C4E3FE091EB9A0.yaml new file mode 100644 index 0000000..16609c7 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01001300232F4000/C7C4E3FE091EB9A0.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010015801308E000/61BE54905F0EC450.yaml b/SaltySD/plugins/FPSLocker/patches/010015801308E000/61BE54905F0EC450.yaml new file mode 100644 index 0000000..e3b3d90 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010015801308E000/61BE54905F0EC450.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010019D01D736000/B69833AF0E07CE82.yaml b/SaltySD/plugins/FPSLocker/patches/010019D01D736000/B69833AF0E07CE82.yaml new file mode 100644 index 0000000..3ad9719 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010019D01D736000/B69833AF0E07CE82.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010019D01D736000/C7C39A0A301587DB.yaml b/SaltySD/plugins/FPSLocker/patches/010019D01D736000/C7C39A0A301587DB.yaml new file mode 100644 index 0000000..9e73b4e --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010019D01D736000/C7C39A0A301587DB.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010019D01D736000/FC3A9F0C03C5A198.yaml b/SaltySD/plugins/FPSLocker/patches/010019D01D736000/FC3A9F0C03C5A198.yaml new file mode 100644 index 0000000..6d8f6f0 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010019D01D736000/FC3A9F0C03C5A198.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010019D01D736001/7A45096D29701241.yaml b/SaltySD/plugins/FPSLocker/patches/010019D01D736001/7A45096D29701241.yaml new file mode 100644 index 0000000..22be8be --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010019D01D736001/7A45096D29701241.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010019D01D736001/A5B280E0651240A8.yaml b/SaltySD/plugins/FPSLocker/patches/010019D01D736001/A5B280E0651240A8.yaml new file mode 100644 index 0000000..9e3311c --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010019D01D736001/A5B280E0651240A8.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010019D01D736001/B8722FBDFD482D37.yaml b/SaltySD/plugins/FPSLocker/patches/010019D01D736001/B8722FBDFD482D37.yaml new file mode 100644 index 0000000..7d708ea --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010019D01D736001/B8722FBDFD482D37.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100207021C3C000/E917F319E4233FCD.yaml b/SaltySD/plugins/FPSLocker/patches/0100207021C3C000/E917F319E4233FCD.yaml new file mode 100644 index 0000000..d69011d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100207021C3C000/E917F319E4233FCD.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010021801D014000/3514446FD50DCF95.yaml b/SaltySD/plugins/FPSLocker/patches/010021801D014000/3514446FD50DCF95.yaml new file mode 100644 index 0000000..47afb5a --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010021801D014000/3514446FD50DCF95.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010022A02008C000/02F0B93D14038350.yaml b/SaltySD/plugins/FPSLocker/patches/010022A02008C000/02F0B93D14038350.yaml new file mode 100644 index 0000000..681403a --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010022A02008C000/02F0B93D14038350.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010025A015C62000/1D5A1DA51CA68238.yaml b/SaltySD/plugins/FPSLocker/patches/010025A015C62000/1D5A1DA51CA68238.yaml new file mode 100644 index 0000000..f9f1da0 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010025A015C62000/1D5A1DA51CA68238.yaml @@ -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)" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml b/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml index 1e4c227..0c27df3 100644 --- a/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml +++ b/SaltySD/plugins/FPSLocker/patches/010027400CDC6000/4979B200D53BB282.yaml @@ -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. diff --git a/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/4012D8204AD172B4.yaml b/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/4012D8204AD172B4.yaml new file mode 100644 index 0000000..0b70c28 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/4012D8204AD172B4.yaml @@ -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]] + ] diff --git a/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/53FE298D76C0E507.yaml b/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/53FE298D76C0E507.yaml new file mode 100644 index 0000000..58eb2c8 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/53FE298D76C0E507.yaml @@ -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]] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/9B1B0DA68BEAA765.yaml b/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/9B1B0DA68BEAA765.yaml new file mode 100644 index 0000000..d46f8fd --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01002C101C1AA000/9B1B0DA68BEAA765.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010032200BBC0000/D560C3C55CD23811.yaml b/SaltySD/plugins/FPSLocker/patches/010032200BBC0000/D560C3C55CD23811.yaml new file mode 100644 index 0000000..bd3bc82 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010032200BBC0000/D560C3C55CD23811.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010035F022078000/DBE58459690BA338.yaml b/SaltySD/plugins/FPSLocker/patches/010035F022078000/DBE58459690BA338.yaml new file mode 100644 index 0000000..3831b81 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010035F022078000/DBE58459690BA338.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/02F0B93D14038350.yaml b/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/02F0B93D14038350.yaml new file mode 100644 index 0000000..a6bfd5f --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01003AF0200B0000/02F0B93D14038350.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01003CC01BBA0000/7220F3213BED164A.yaml b/SaltySD/plugins/FPSLocker/patches/01003CC01BBA0000/7220F3213BED164A.yaml new file mode 100644 index 0000000..a373ff7 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01003CC01BBA0000/7220F3213BED164A.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01003E4022A1C000/23E535E2967725BD.yaml b/SaltySD/plugins/FPSLocker/patches/01003E4022A1C000/23E535E2967725BD.yaml new file mode 100644 index 0000000..e0c9d26 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01003E4022A1C000/23E535E2967725BD.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01003E4022A1C000/56CB246F5724B3CC.yaml b/SaltySD/plugins/FPSLocker/patches/01003E4022A1C000/56CB246F5724B3CC.yaml new file mode 100644 index 0000000..b6f87a9 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01003E4022A1C000/56CB246F5724B3CC.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01003F501907A000/2C45FAC26500CBAD.yaml b/SaltySD/plugins/FPSLocker/patches/01003F501907A000/2C45FAC26500CBAD.yaml new file mode 100644 index 0000000..7d9a81d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01003F501907A000/2C45FAC26500CBAD.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01003FD01F22E000/290D5939C6671566.yaml b/SaltySD/plugins/FPSLocker/patches/01003FD01F22E000/290D5939C6671566.yaml new file mode 100644 index 0000000..cbab304 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01003FD01F22E000/290D5939C6671566.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01003FD01F22E000/F4DB705AA11D45F3.yaml b/SaltySD/plugins/FPSLocker/patches/01003FD01F22E000/F4DB705AA11D45F3.yaml new file mode 100644 index 0000000..c0c7119 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01003FD01F22E000/F4DB705AA11D45F3.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100416004C00000/C638A0730217792B.yaml b/SaltySD/plugins/FPSLocker/patches/0100416004C00000/C638A0730217792B.yaml new file mode 100644 index 0000000..c8ece90 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100416004C00000/C638A0730217792B.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/7B51DC4B113F4F52.yaml b/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/7B51DC4B113F4F52.yaml new file mode 100644 index 0000000..3782704 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100422020BC4000/7B51DC4B113F4F52.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01004310229EE000/D3C96553221659B0.yaml b/SaltySD/plugins/FPSLocker/patches/01004310229EE000/D3C96553221659B0.yaml new file mode 100644 index 0000000..3d644d9 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01004310229EE000/D3C96553221659B0.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/EC4ED46BBC4A9EBB.yaml b/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/EC4ED46BBC4A9EBB.yaml new file mode 100644 index 0000000..dcecf28 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100453019AA8000/EC4ED46BBC4A9EBB.yaml @@ -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 + diff --git a/SaltySD/plugins/FPSLocker/patches/0100478018A0E000/1A6C27F8DCFE45CB.yaml b/SaltySD/plugins/FPSLocker/patches/0100478018A0E000/1A6C27F8DCFE45CB.yaml new file mode 100644 index 0000000..1c17d9d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100478018A0E000/1A6C27F8DCFE45CB.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100478018A0E000/99252F8F7EE61A81.yaml b/SaltySD/plugins/FPSLocker/patches/0100478018A0E000/99252F8F7EE61A81.yaml new file mode 100644 index 0000000..0349b44 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100478018A0E000/99252F8F7EE61A81.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01004FF021942000/26E63D318FF5B831.yaml b/SaltySD/plugins/FPSLocker/patches/01004FF021942000/26E63D318FF5B831.yaml new file mode 100644 index 0000000..562b3e3 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01004FF021942000/26E63D318FF5B831.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01004FF021942000/EDE4F70074EC37C7.yaml b/SaltySD/plugins/FPSLocker/patches/01004FF021942000/EDE4F70074EC37C7.yaml new file mode 100644 index 0000000..47623ce --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01004FF021942000/EDE4F70074EC37C7.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01004FF021942000/F8D172BD397ED5DD.yaml b/SaltySD/plugins/FPSLocker/patches/01004FF021942000/F8D172BD397ED5DD.yaml new file mode 100644 index 0000000..fe7dbcc --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01004FF021942000/F8D172BD397ED5DD.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100505021440000/AB06020960EDD828.yaml b/SaltySD/plugins/FPSLocker/patches/0100505021440000/AB06020960EDD828.yaml new file mode 100644 index 0000000..e889b9d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100505021440000/AB06020960EDD828.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010051A020C6E000/2B08D49BD9504E41.yaml b/SaltySD/plugins/FPSLocker/patches/010051A020C6E000/2B08D49BD9504E41.yaml new file mode 100644 index 0000000..0c94552 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010051A020C6E000/2B08D49BD9504E41.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/E99DFFA39354B606.yaml b/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/E99DFFA39354B606.yaml new file mode 100644 index 0000000..f68c283 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010051C0134F8000/E99DFFA39354B606.yaml @@ -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] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01005270232F2000/57C918F08B505771.yaml b/SaltySD/plugins/FPSLocker/patches/01005270232F2000/57C918F08B505771.yaml new file mode 100644 index 0000000..0f9413d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01005270232F2000/57C918F08B505771.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01005270232F2000/9FE60A212CFF9B9A.yaml b/SaltySD/plugins/FPSLocker/patches/01005270232F2000/9FE60A212CFF9B9A.yaml new file mode 100644 index 0000000..6fced64 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01005270232F2000/9FE60A212CFF9B9A.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/3C10EC35C5EF4C36.yaml b/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/3C10EC35C5EF4C36.yaml new file mode 100644 index 0000000..76c356e --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/3C10EC35C5EF4C36.yaml @@ -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]] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml b/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml index d59cd02..b3a532a 100644 --- a/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml +++ b/SaltySD/plugins/FPSLocker/patches/010056B015FE8000/E43525F22282A477.yaml @@ -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]] ] - diff --git a/SaltySD/plugins/FPSLocker/patches/010058301BB98000/89D7333B5443950F.yaml b/SaltySD/plugins/FPSLocker/patches/010058301BB98000/89D7333B5443950F.yaml new file mode 100644 index 0000000..6ae91bd --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010058301BB98000/89D7333B5443950F.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/97EBD09FA8327AFB.yaml b/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/97EBD09FA8327AFB.yaml new file mode 100644 index 0000000..ec840bb --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010058C01F3EE000/97EBD09FA8327AFB.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/7FB0CED6B8B51B80.yaml b/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/7FB0CED6B8B51B80.yaml new file mode 100644 index 0000000..6fc7a33 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/7FB0CED6B8B51B80.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/E09BC148192342B1.yaml b/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/E09BC148192342B1.yaml new file mode 100644 index 0000000..1f4f998 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01005AE0209A8000/E09BC148192342B1.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/C3B9D57C911B17C1.yaml b/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/C3B9D57C911B17C1.yaml new file mode 100644 index 0000000..2daeb30 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010064C01A9BA000/C3B9D57C911B17C1.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010066101A55A000/59B2891BAB23B8AE.yaml b/SaltySD/plugins/FPSLocker/patches/010066101A55A000/59B2891BAB23B8AE.yaml new file mode 100644 index 0000000..c5cf172 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010066101A55A000/59B2891BAB23B8AE.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/A91CF6368FE718E6.yaml b/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/A91CF6368FE718E6.yaml new file mode 100644 index 0000000..c604183 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/A91CF6368FE718E6.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/FCFAE709261C279C.yaml b/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/FCFAE709261C279C.yaml new file mode 100644 index 0000000..741adc9 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010066C024AA8000/FCFAE709261C279C.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/863E4EEF043F6720.yaml b/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/863E4EEF043F6720.yaml new file mode 100644 index 0000000..009fba1 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/863E4EEF043F6720.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/B1140CA4CFDD5B4D.yaml b/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/B1140CA4CFDD5B4D.yaml new file mode 100644 index 0000000..1c79fcc --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/B1140CA4CFDD5B4D.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/B164D111A971694E.yaml b/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/B164D111A971694E.yaml new file mode 100644 index 0000000..13cb84a --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100690020FBE000/B164D111A971694E.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01006AB022E70000/2E7E48804429CB75.yaml b/SaltySD/plugins/FPSLocker/patches/01006AB022E70000/2E7E48804429CB75.yaml new file mode 100644 index 0000000..c64f4d6 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01006AB022E70000/2E7E48804429CB75.yaml @@ -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 diff --git a/SaltySD/plugins/FPSLocker/patches/01006C5012DCE000/C00AA2EBF01D3A48.yaml b/SaltySD/plugins/FPSLocker/patches/01006C5012DCE000/C00AA2EBF01D3A48.yaml new file mode 100644 index 0000000..5ebe26d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01006C5012DCE000/C00AA2EBF01D3A48.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100727018A10000/1A6C27F8DCFE45CB.yaml b/SaltySD/plugins/FPSLocker/patches/0100727018A10000/1A6C27F8DCFE45CB.yaml new file mode 100644 index 0000000..66d56d8 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100727018A10000/1A6C27F8DCFE45CB.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100727018A10000/99252F8F7EE61A81.yaml b/SaltySD/plugins/FPSLocker/patches/0100727018A10000/99252F8F7EE61A81.yaml new file mode 100644 index 0000000..03a0a1d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100727018A10000/99252F8F7EE61A81.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100748021808000/D4A7205845845BCA.yaml b/SaltySD/plugins/FPSLocker/patches/0100748021808000/D4A7205845845BCA.yaml new file mode 100644 index 0000000..f626bc6 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100748021808000/D4A7205845845BCA.yaml @@ -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 diff --git a/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/16DF2D999C7ADAD7.yaml b/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/16DF2D999C7ADAD7.yaml new file mode 100644 index 0000000..cfef09d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/16DF2D999C7ADAD7.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/26CE9F3CC0393826.yaml b/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/26CE9F3CC0393826.yaml new file mode 100644 index 0000000..9da8f38 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/26CE9F3CC0393826.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/56AA31E3C9DFB585.yaml b/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/56AA31E3C9DFB585.yaml new file mode 100644 index 0000000..8647b79 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100755017EE0000/56AA31E3C9DFB585.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/913B4D56415E96FF.yaml b/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/913B4D56415E96FF.yaml new file mode 100644 index 0000000..a5aae90 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100760020BBA000/913B4D56415E96FF.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100781020710000/5CBAF9E303664284.yaml b/SaltySD/plugins/FPSLocker/patches/0100781020710000/5CBAF9E303664284.yaml new file mode 100644 index 0000000..d5c319f --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100781020710000/5CBAF9E303664284.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml b/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml index caffc35..f1ded05 100644 --- a/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml +++ b/SaltySD/plugins/FPSLocker/patches/01007820196A6000/37531419DA7654EC.yaml @@ -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 \ No newline at end of file + + value: VSYNC_TARGET diff --git a/SaltySD/plugins/FPSLocker/patches/010079B0045C2000/972D8BF172E86C18.yaml b/SaltySD/plugins/FPSLocker/patches/010079B0045C2000/972D8BF172E86C18.yaml new file mode 100644 index 0000000..fdfcc89 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010079B0045C2000/972D8BF172E86C18.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010079C01CFA6000/D4A7205845845BCA.yaml b/SaltySD/plugins/FPSLocker/patches/010079C01CFA6000/D4A7205845845BCA.yaml new file mode 100644 index 0000000..5c98809 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010079C01CFA6000/D4A7205845845BCA.yaml @@ -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 diff --git a/SaltySD/plugins/FPSLocker/patches/01007A700A87C000/99349B456BEA3469.yaml b/SaltySD/plugins/FPSLocker/patches/01007A700A87C000/99349B456BEA3469.yaml new file mode 100644 index 0000000..e7bf97b --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01007A700A87C000/99349B456BEA3469.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01007A700A87C001/8CBC566AED7F1095.yaml b/SaltySD/plugins/FPSLocker/patches/01007A700A87C001/8CBC566AED7F1095.yaml new file mode 100644 index 0000000..4915eb5 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01007A700A87C001/8CBC566AED7F1095.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01007B102141A000/11D7F970861DFA66.yaml b/SaltySD/plugins/FPSLocker/patches/01007B102141A000/11D7F970861DFA66.yaml new file mode 100644 index 0000000..2038444 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01007B102141A000/11D7F970861DFA66.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01007B102141A000/A8C6A84FBCF08724.yaml b/SaltySD/plugins/FPSLocker/patches/01007B102141A000/A8C6A84FBCF08724.yaml new file mode 100644 index 0000000..261c7f7 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01007B102141A000/A8C6A84FBCF08724.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01007B4014086000/082815456F5BD744.yaml b/SaltySD/plugins/FPSLocker/patches/01007B4014086000/082815456F5BD744.yaml new file mode 100644 index 0000000..1f1cf0e --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01007B4014086000/082815456F5BD744.yaml @@ -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.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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/CD57B23FA4BBAD65.yaml b/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/CD57B23FA4BBAD65.yaml new file mode 100644 index 0000000..7260618 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01007EF00011E000/CD57B23FA4BBAD65.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100821020BBC000/EB39450B8BEE080B.yaml b/SaltySD/plugins/FPSLocker/patches/0100821020BBC000/EB39450B8BEE080B.yaml new file mode 100644 index 0000000..02028f6 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100821020BBC000/EB39450B8BEE080B.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/01008480187C6000/C57C698B73E75F7E.yaml b/SaltySD/plugins/FPSLocker/patches/01008480187C6000/C57C698B73E75F7E.yaml new file mode 100644 index 0000000..ebbb402 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/01008480187C6000/C57C698B73E75F7E.yaml @@ -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()] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100853015E86000/19EC806A902017D6.yaml b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/19EC806A902017D6.yaml new file mode 100644 index 0000000..751d44f --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/19EC806A902017D6.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100853015E86000/68F13E3406FBAD29.yaml b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/68F13E3406FBAD29.yaml new file mode 100644 index 0000000..d89fdd8 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/68F13E3406FBAD29.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100853015E86000/6A0B389924A77A0B.yaml b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/6A0B389924A77A0B.yaml new file mode 100644 index 0000000..e44f9c5 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/6A0B389924A77A0B.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100853015E86000/8A002EA3F5547393.yaml b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/8A002EA3F5547393.yaml new file mode 100644 index 0000000..b52b8ea --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100853015E86000/8A002EA3F5547393.yaml @@ -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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100890021AE2000/F7B9323BE62441F3.yaml b/SaltySD/plugins/FPSLocker/patches/0100890021AE2000/F7B9323BE62441F3.yaml new file mode 100644 index 0000000..5b8ef17 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100890021AE2000/F7B9323BE62441F3.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010089600FB72000/9D4553105795CD81.yaml b/SaltySD/plugins/FPSLocker/patches/010089600FB72000/9D4553105795CD81.yaml new file mode 100644 index 0000000..9175e5c --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010089600FB72000/9D4553105795CD81.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010090100E334000/AED0F6D2983D00D8.yaml b/SaltySD/plugins/FPSLocker/patches/010090100E334000/AED0F6D2983D00D8.yaml new file mode 100644 index 0000000..4c61854 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010090100E334000/AED0F6D2983D00D8.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010090100E334000/C6F5D7298E0DA0B4.yaml b/SaltySD/plugins/FPSLocker/patches/010090100E334000/C6F5D7298E0DA0B4.yaml new file mode 100644 index 0000000..5706d36 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010090100E334000/C6F5D7298E0DA0B4.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010090100E334000/DB55B89141DFD415.yaml b/SaltySD/plugins/FPSLocker/patches/010090100E334000/DB55B89141DFD415.yaml new file mode 100644 index 0000000..317ddb4 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010090100E334000/DB55B89141DFD415.yaml @@ -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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010091102424A000/FA5ADB594BCE0C88.yaml b/SaltySD/plugins/FPSLocker/patches/010091102424A000/FA5ADB594BCE0C88.yaml new file mode 100644 index 0000000..18d81cd --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010091102424A000/FA5ADB594BCE0C88.yaml @@ -0,0 +1,25 @@ +# Call of the Sea 1.0.0 +# BID: FA5ADB594BCE0C88 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget (Default is 34) + - + type: evaluate_write + address: [MAIN, 0x5E762D8, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # r.VSync + - + type: write + address: [MAIN, 0x56A6E68, 0] + value_type: int32 + value: [0, 0] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x5EA3F98, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010091D00BE38000/4A78D2BCEAC0EA03.yaml b/SaltySD/plugins/FPSLocker/patches/010091D00BE38000/4A78D2BCEAC0EA03.yaml new file mode 100644 index 0000000..28f4445 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010091D00BE38000/4A78D2BCEAC0EA03.yaml @@ -0,0 +1,25 @@ +# Rock of Ages 2: Bigger & Boulder 1.07 +# BID: 4A78D2BCEAC0EA03 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x5EB5560, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x5EDA1A8, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x56761E0, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/D4A7205845845BCA.yaml b/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/D4A7205845845BCA.yaml new file mode 100644 index 0000000..8e2c3ee --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010093C0215B4000/D4A7205845845BCA.yaml @@ -0,0 +1,19 @@ +# The Hundred Line -Last Defense Academy- 1.2.1 +# 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 diff --git a/SaltySD/plugins/FPSLocker/patches/010096000EEBA000/F906DB75DEE0B019.yaml b/SaltySD/plugins/FPSLocker/patches/010096000EEBA000/F906DB75DEE0B019.yaml new file mode 100644 index 0000000..55cfdaf --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010096000EEBA000/F906DB75DEE0B019.yaml @@ -0,0 +1,25 @@ +# Welcome to Hanwell 1.0 +# BID: F906DB75DEE0B019 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x4C36130, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x4C5C9B0, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x43F9950, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010097F018538000/E7F88252816EE27F.yaml b/SaltySD/plugins/FPSLocker/patches/010097F018538000/E7F88252816EE27F.yaml new file mode 100644 index 0000000..287fbb2 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010097F018538000/E7F88252816EE27F.yaml @@ -0,0 +1,10 @@ +# DAVE THE DIVER 1.0.5.1111 +# BID: E7F88252816EE27F + +ALL_FPS: + # UnityEngine.Time::fixedDeltaTime + - + type: evaluate_write + address: [MAIN, 0xDF6EEE8, 0x50] + value_type: uint32 + value: "141120000 / FPS_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010097F018538000/EF119717022013CA.yaml b/SaltySD/plugins/FPSLocker/patches/010097F018538000/EF119717022013CA.yaml new file mode 100644 index 0000000..9ca5102 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010097F018538000/EF119717022013CA.yaml @@ -0,0 +1,10 @@ +# DAVE THE DIVER 1.0.5.1098 +# BID: EF119717022013CA + +ALL_FPS: + # UnityEngine.Time::fixedDeltaTime + - + type: evaluate_write + address: [MAIN, 0xDF6BC68, 0x58] + value_type: uint32 + value: "2352000 * FPS_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/010098A02288A000/0D2C301B9A0C4B8C.yaml b/SaltySD/plugins/FPSLocker/patches/010098A02288A000/0D2C301B9A0C4B8C.yaml new file mode 100644 index 0000000..d2b62c7 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/010098A02288A000/0D2C301B9A0C4B8C.yaml @@ -0,0 +1,25 @@ +# Out of Sight 1.0.4 +# BID: 0D2C301B9A0C4B8C + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x7C0C178, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x7C48870, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x809D310, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100A0D01DB4E000/0050303DBCEF561D.yaml b/SaltySD/plugins/FPSLocker/patches/0100A0D01DB4E000/0050303DBCEF561D.yaml new file mode 100644 index 0000000..0b9996b --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100A0D01DB4E000/0050303DBCEF561D.yaml @@ -0,0 +1,11 @@ +# RAFT SURVIVAL SIMULATOR 1.0.1 +# BID: 0050303DBCEF561D + +ALL_FPS: + # UnityEngine.Time::fixedDeltaTime + # Required for different refresh rates to not jitter + - + type: evaluate_write + address: [MAIN, 0x3F315C0, 0x48] + value_type: float + value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100A0D01DB4E000/99F0F054E0EE7899.yaml b/SaltySD/plugins/FPSLocker/patches/0100A0D01DB4E000/99F0F054E0EE7899.yaml new file mode 100644 index 0000000..a4b3e1c --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100A0D01DB4E000/99F0F054E0EE7899.yaml @@ -0,0 +1,11 @@ +# RAFT SURVIVAL SIMULATOR 1.0.0 +# BID: 99F0F054E0EE7899 + +ALL_FPS: + # UnityEngine.Time::fixedDeltaTime + # Required for different refresh rates to not jitter + - + type: evaluate_write + address: [MAIN, 0x4A39300, 0x48] + value_type: float + value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100A1B00DB36000/73441B8ED18ADA3B.yaml b/SaltySD/plugins/FPSLocker/patches/0100A1B00DB36000/73441B8ED18ADA3B.yaml new file mode 100644 index 0000000..9601ea9 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100A1B00DB36000/73441B8ED18ADA3B.yaml @@ -0,0 +1,25 @@ +# Rock of Ages 3: Make & Break 1.0.3 +# BID: 73441B8ED18ADA3B + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x5B4F468, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x5B796A0, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x4FE6DD8, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing diff --git a/SaltySD/plugins/FPSLocker/patches/0100A78021ADE000/1A7F96143CE7FF25.yaml b/SaltySD/plugins/FPSLocker/patches/0100A78021ADE000/1A7F96143CE7FF25.yaml new file mode 100644 index 0000000..aaffd91 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100A78021ADE000/1A7F96143CE7FF25.yaml @@ -0,0 +1,12 @@ +# Once Upon A KATAMARI EUR 1.0.4 +# BID: 1A7F96143CE7FF25 + +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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100A9D01C446000/AB06020960EDD828.yaml b/SaltySD/plugins/FPSLocker/patches/0100A9D01C446000/AB06020960EDD828.yaml new file mode 100644 index 0000000..1a2dd21 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100A9D01C446000/AB06020960EDD828.yaml @@ -0,0 +1,25 @@ +# DRAGON QUEST 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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/77BC4B22390087B9.yaml b/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/77BC4B22390087B9.yaml new file mode 100644 index 0000000..e5d27cd --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B2002330E000/77BC4B22390087B9.yaml @@ -0,0 +1,25 @@ +# Mandragora: Whispers of the Witch Tree JPN 1.6.2.137153 +# BID: 77BC4B22390087B9 + +ALL_FPS: + # r.VSync + - + type: write + address: [MAIN, 0x5ED6960, 0] + value_type: int32 + value: [0, 0] + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x66A2758, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x66C7FF8, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/06DA764115889906.yaml b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/06DA764115889906.yaml new file mode 100644 index 0000000..6dd3409 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/06DA764115889906.yaml @@ -0,0 +1,28 @@ +# INAZUMA ELEVEN: Victory Road 5.0.0 +# BID: 06DA764115889906 + +DECLARATIONS: + - + type: variable + name: fps_target + value_type: float + default_value: 30 + evaluate: FPS_TARGET +MASTER_WRITE: + # Dynamic Resolution FPS Target + ## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv + - + type: asm_a64 + main_offset: 0xC67588 + instructions: [ + [adrp, x9, $fps_target], + [ldr, s1, [x9, $fps_target]] + ] +ALL_FPS: + # Disable FPS Lock + ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze + - + type: write + address: [MAIN, 0x39E4235] + value_type: uint8 + value: 0 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/14BE72AC54194506.yaml b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/14BE72AC54194506.yaml new file mode 100644 index 0000000..feb588c --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/14BE72AC54194506.yaml @@ -0,0 +1,28 @@ +# INAZUMA ELEVEN: Victory Road 3.1.0 +# BID: 14BE72AC54194506 + +DECLARATIONS: + - + type: variable + name: fps_target + value_type: float + default_value: 30 + evaluate: FPS_TARGET +MASTER_WRITE: + # Dynamic Resolution FPS Target + ## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv + - + type: asm_a64 + main_offset: 0xC711A8 + instructions: [ + [adrp, x9, $fps_target], + [ldr, s1, [x9, $fps_target]] + ] +ALL_FPS: + # Disable FPS Lock + ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze + - + type: write + address: [MAIN, 0x37B337D] + value_type: uint8 + value: 0 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/6AD137442CC7AD68.yaml b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/6AD137442CC7AD68.yaml new file mode 100644 index 0000000..3a356f9 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/6AD137442CC7AD68.yaml @@ -0,0 +1,28 @@ +# INAZUMA ELEVEN: Victory Road 3.0.0 +# BID: 6AD137442CC7AD68 + +DECLARATIONS: + - + type: variable + name: fps_target + value_type: float + default_value: 30 + evaluate: FPS_TARGET +MASTER_WRITE: + # Dynamic Resolution FPS Target + ## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv + - + type: asm_a64 + main_offset: 0xC6F418 + instructions: [ + [adrp, x9, $fps_target], + [ldr, s1, [x9, $fps_target]] + ] +ALL_FPS: + # Disable FPS Lock + ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze + - + type: write + address: [MAIN, 0x37AB02D] + value_type: uint8 + value: 0 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/AF32002DEB480D7B.yaml b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/AF32002DEB480D7B.yaml new file mode 100644 index 0000000..f1be769 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B36008F90000/AF32002DEB480D7B.yaml @@ -0,0 +1,28 @@ +# INAZUMA ELEVEN: Victory Road 4.0.0 +# BID: AF32002DEB480D7B + +DECLARATIONS: + - + type: variable + name: fps_target + value_type: float + default_value: 30 + evaluate: FPS_TARGET +MASTER_WRITE: + # Dynamic Resolution FPS Target + ## REF: 62 02 23 1E 21 18 22 1E, ucvtf + fdiv + - + type: asm_a64 + main_offset: 0xC55EE8 + instructions: [ + [adrp, x9, $fps_target], + [ldr, s1, [x9, $fps_target]] + ] +ALL_FPS: + # Disable FPS Lock + ## REF: 20 01 00 A9 00 01 63 9E, second LDRB below that, IDA will show address after full analyze + - + type: write + address: [MAIN, 0x39BBA3D] + value_type: uint8 + value: 0 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B4D00C76E000/54E9C7460334EEB4.yaml b/SaltySD/plugins/FPSLocker/patches/0100B4D00C76E000/54E9C7460334EEB4.yaml new file mode 100644 index 0000000..728e4c8 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B4D00C76E000/54E9C7460334EEB4.yaml @@ -0,0 +1,25 @@ +# Jumanji 1.0.1 +# BID: 54E9C7460334EEB4 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x5D98940, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # r.VSync + - + type: write + address: [MAIN, 0x556AC88, 0] + value_type: int32 + value: [0, 0] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x5DBCE18, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B4E020CE2000/0D40355807EEC6E0.yaml b/SaltySD/plugins/FPSLocker/patches/0100B4E020CE2000/0D40355807EEC6E0.yaml new file mode 100644 index 0000000..5ae2532 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B4E020CE2000/0D40355807EEC6E0.yaml @@ -0,0 +1,12 @@ +# 진홍의 연금술사와 순백의 수호자 ~레슬레리아나의 아틀리에~ / 紅色的鍊金術士和白色的守護者 ~蕾斯萊莉婭娜的鍊金工房~ 1.4b +# BID: 0D40355807EEC6E0 + +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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/98397A1041989465.yaml b/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/98397A1041989465.yaml new file mode 100644 index 0000000..020075a --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/98397A1041989465.yaml @@ -0,0 +1,57 @@ +# NieR:Automata The End of YoRHa Edition AS 1.0.3 +# BID: 98397A1041989465 + +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: 0x9C07F4 + 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: 0x9C0844 + 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: 0x9C0894 + 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: 0x9C08B8 + instructions: [ + [ldr, s0, [x12, $dr_target_good]] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml b/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml index 3c8e329..a80d61a 100644 --- a/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml +++ b/SaltySD/plugins/FPSLocker/patches/0100B8E016F76000/992787E2B5425994.yaml @@ -1,8 +1,6 @@ # NieR:Automata The End of YoRHa Edition AS 1.0.2 # BID: 992787E2B5425994 -unsafeCheck: true - DECLARATIONS: - type: variable @@ -23,7 +21,8 @@ DECLARATIONS: default_value: 30 evaluate: "0.9 * FRAMETIME_TARGET" MASTER_WRITE: - # Redirect DR timings to MAIN + 0x2BE8F00, [Bad, Optimal, Good] + # Redirect DR timings + ## REF: 8C 46 A8 52 83 01 27 1E - type: asm_a64 main_offset: 0x9C07A4 @@ -31,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: 0x9C07F4 @@ -38,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: 0x9C0844 @@ -47,6 +48,7 @@ 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: 0x9C0868 diff --git a/SaltySD/plugins/FPSLocker/patches/0100BAE01EEA0000/23E535E2967725BD.yaml b/SaltySD/plugins/FPSLocker/patches/0100BAE01EEA0000/23E535E2967725BD.yaml new file mode 100644 index 0000000..5f68cf2 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BAE01EEA0000/23E535E2967725BD.yaml @@ -0,0 +1,19 @@ +# VARLET 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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BAE01EEA0000/56CB246F5724B3CC.yaml b/SaltySD/plugins/FPSLocker/patches/0100BAE01EEA0000/56CB246F5724B3CC.yaml new file mode 100644 index 0000000..e706925 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BAE01EEA0000/56CB246F5724B3CC.yaml @@ -0,0 +1,19 @@ +# VARLET 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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BBB01C7FE000/0A3CBB829DB69221.yaml b/SaltySD/plugins/FPSLocker/patches/0100BBB01C7FE000/0A3CBB829DB69221.yaml new file mode 100644 index 0000000..4633a01 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BBB01C7FE000/0A3CBB829DB69221.yaml @@ -0,0 +1,10 @@ +# Blade Jumper 1.0.0 +# BID: 0A3CBB829DB69221 + +ALL_FPS: + # UnityEngine.Time::fixedDeltaTime + - + type: evaluate_write + address: [MAIN, 0x5D0F000, 0x48] + value_type: float + value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BD501A72E000/A929586A8724C5FE.yaml b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E000/A929586A8724C5FE.yaml new file mode 100644 index 0000000..386757d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E000/A929586A8724C5FE.yaml @@ -0,0 +1,58 @@ +# 三國志8 REMAKE 1.1.2 +# BID: A929586A8724C5FE +# 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: 0x1F8FE5C + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0x88ADD0 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BD501A72E000/EA25D006EF0732C2.yaml b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E000/EA25D006EF0732C2.yaml new file mode 100644 index 0000000..51335ac --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E000/EA25D006EF0732C2.yaml @@ -0,0 +1,58 @@ +# 三國志8 REMAKE 1.1.0 +# BID: EA25D006EF0732C2 +# 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: 0x1F8FE5C + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0x88ADD0 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BD501A72E001/6BD9DA9F0D6AA634.yaml b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E001/6BD9DA9F0D6AA634.yaml new file mode 100644 index 0000000..adb1bab --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E001/6BD9DA9F0D6AA634.yaml @@ -0,0 +1,58 @@ +# 三國志8 REMAKE with パワーアップキット 1.1.2 +# BID: 6BD9DA9F0D6AA634 +# 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: 0x234E56C + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0xAD1740 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BD501A72E001/C9C510630375FFE6.yaml b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E001/C9C510630375FFE6.yaml new file mode 100644 index 0000000..8e1e001 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BD501A72E001/C9C510630375FFE6.yaml @@ -0,0 +1,58 @@ +# 三國志8 REMAKE with パワーアップキット 1.1.0 +# BID: C9C510630375FFE6 +# 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: 0x234D16C + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0xAD0920 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BDF015760000/E64099A8449C88F0.yaml b/SaltySD/plugins/FPSLocker/patches/0100BDF015760000/E64099A8449C88F0.yaml new file mode 100644 index 0000000..781c8d8 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BDF015760000/E64099A8449C88F0.yaml @@ -0,0 +1,25 @@ +# Avatar The Last Airbender: Quest for Balance 0.3.0.29423 +# BID: E64099A8449C88F0 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x8C40678, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x8C6E328, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x8470CE8, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/D476C70749CA9D33.yaml b/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/D476C70749CA9D33.yaml new file mode 100644 index 0000000..cc3fa0d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/D476C70749CA9D33.yaml @@ -0,0 +1,11 @@ +# ワンス・アポン・ア・塊魂 1.1.0 +# BID: D476C70749CA9D33 + +ALL_FPS: + # Dynamic Resolution + ## REF: App.KatamariSin.AppSupport_TypeInfo + - + type: evaluate_write + address: [MAIN, 0x8F889C8, 0xB8, 0x18] + value_type: double + value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/F1B11CCC4381AFCF.yaml b/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/F1B11CCC4381AFCF.yaml new file mode 100644 index 0000000..7628e85 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100BDF0197C8000/F1B11CCC4381AFCF.yaml @@ -0,0 +1,11 @@ +# ワンス・アポン・ア・塊魂 1.1.1 +# BID: F1B11CCC4381AFCF + +ALL_FPS: + # Dynamic Resolution + ## REF: App.KatamariSin.AppSupport_TypeInfo + - + type: evaluate_write + address: [MAIN, 0x8F889C8, 0xB8, 0x18] + value_type: double + value: "0.9 * FRAMETIME_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2801F22C000/290D5939C6671566.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2801F22C000/290D5939C6671566.yaml new file mode 100644 index 0000000..d25d715 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2801F22C000/290D5939C6671566.yaml @@ -0,0 +1,23 @@ +# Tales of Berseria 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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2801F22C000/F4DB705AA11D45F3.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2801F22C000/F4DB705AA11D45F3.yaml new file mode 100644 index 0000000..6e914f3 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2801F22C000/F4DB705AA11D45F3.yaml @@ -0,0 +1,20 @@ +# Tales of Berseria 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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/0DF8AB5EBE689C3C.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/0DF8AB5EBE689C3C.yaml new file mode 100644 index 0000000..c68f28a --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/0DF8AB5EBE689C3C.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE 1.1.0 +# BID: 0DF8AB5EBE689C3C +# 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: 0x1F904BC + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0x88B290 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/3C737E2D67D57D03.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/3C737E2D67D57D03.yaml new file mode 100644 index 0000000..f9459b4 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/3C737E2D67D57D03.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE 1.1.3 +# BID: 3C737E2D67D57D03 +# 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: 0x1F8F8FC + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0x88AC00 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/B2533CB8C27BAFD9.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/B2533CB8C27BAFD9.yaml new file mode 100644 index 0000000..1161e23 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/B2533CB8C27BAFD9.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE 1.1.1 +# BID: B2533CB8C27BAFD9 +# 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: 0x1F904BC + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0x88B290 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/F5CC542C3DA36922.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/F5CC542C3DA36922.yaml new file mode 100644 index 0000000..952de0d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730000/F5CC542C3DA36922.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE 1.1.2 +# BID: F5CC542C3DA36922 +# 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: 0x1F904BC + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0x88B290 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/0E281A7F22377574.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/0E281A7F22377574.yaml new file mode 100644 index 0000000..a3b484d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/0E281A7F22377574.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE with Power Up Kit 1.1.1 +# BID: 0E281A7F22377574 +# 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: 0x234E63C + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0xACFBE0 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/902288852F7A0998.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/902288852F7A0998.yaml new file mode 100644 index 0000000..a86c875 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/902288852F7A0998.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE with Power Up Kit 1.1.3 +# BID: 902288852F7A0998 +# 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: 0x236266C + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0xAD6060 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/AEF9A2F95F5E557D.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/AEF9A2F95F5E557D.yaml new file mode 100644 index 0000000..d24aa6c --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/AEF9A2F95F5E557D.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE with Power Up Kit 1.1.2 +# BID: AEF9A2F95F5E557D +# 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: 0x23503FC + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0xAD0FF0 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/DC65CFC2ABA3C5DF.yaml b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/DC65CFC2ABA3C5DF.yaml new file mode 100644 index 0000000..52e9dfe --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C2A01A730001/DC65CFC2ABA3C5DF.yaml @@ -0,0 +1,58 @@ +# ROMANCE OF THE THREE KINGDOMS 8 REMAKE with Power Up Kit 1.1.0 +# BID: DC65CFC2ABA3C5DF +# 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: 0x234F06C + instructions: [ + [bl, _fpsLock()] + ] + # Redirect game speed, REF: 08 31 9F 9A 20 79 68 BC 68 6E 41 B9 + - + type: asm_a64 + main_offset: 0xAD0240 + instructions: [ + [adrp, x8, $game_speed], + [ldr, s0, [x8, $game_speed]] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C63021ADC000/2C7522B79ADB834B.yaml b/SaltySD/plugins/FPSLocker/patches/0100C63021ADC000/2C7522B79ADB834B.yaml new file mode 100644 index 0000000..1a57586 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C63021ADC000/2C7522B79ADB834B.yaml @@ -0,0 +1,12 @@ +# Once Upon A KATAMARI US 1.0.4 +# BID: 2C7522B79ADB834B + +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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100C6D0205D6000/FC79E853424FBE29.yaml b/SaltySD/plugins/FPSLocker/patches/0100C6D0205D6000/FC79E853424FBE29.yaml new file mode 100644 index 0000000..4ba5d6d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100C6D0205D6000/FC79E853424FBE29.yaml @@ -0,0 +1,26 @@ +# Fuga: Melodies of Steel 3 1.2.1 +# BID: FC79E853424FBE29 + +ALL_FPS: + # Disable bUseFixedFrameRate + - + type: write + address: [MAIN, 0x7B073D8, 0xAA4] + address_unsafe: true + value_type: uint32 + value: 7 + # r.VSync + - + type: write + address: [MAIN, 0x6AE86E8, 0] + value_type: int32 + value: [0, 0] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x7B08930, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing diff --git a/SaltySD/plugins/FPSLocker/patches/0100CA3014ADE000/C13C79B14C33D0E1.yaml b/SaltySD/plugins/FPSLocker/patches/0100CA3014ADE000/C13C79B14C33D0E1.yaml new file mode 100644 index 0000000..290cd50 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100CA3014ADE000/C13C79B14C33D0E1.yaml @@ -0,0 +1,27 @@ +# Umurangi Generation 1.6.9.0 (Cartridge exclusive update) +# BID: C13C79B14C33D0E1 + +DECLARATIONS: + - + type: variable + name: fps_lock + value_type: float + default_value: 0.03333333333 + evaluate: "1 / FPS_TARGET" +MASTER_WRITE: + ## REF: 81 1a 40 bd 02 10 2e 1e + ## REF: FPSTarget.<>d__6::MoveNext() + - + type: asm_a64 + main_offset: 0x1F083A0 + instructions: [ + [adrp, x8, $fps_lock], + [ldr, s1, [x8, $fps_lock]], + [mov, x0, xzr], + [ldr, s0, [x20, 0x24]], + [nop] + ] +ALL_FPS: + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100CC700B2B4000/32B8DF89E535639A.yaml b/SaltySD/plugins/FPSLocker/patches/0100CC700B2B4000/32B8DF89E535639A.yaml new file mode 100644 index 0000000..02c4a1a --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100CC700B2B4000/32B8DF89E535639A.yaml @@ -0,0 +1,25 @@ +# PixARK 1.4.0 +# BID: 32B8DF89E535639A + +ALL_FPS: + # r.DynamicResolution.TargetFPS + - + type: evaluate_write + address: [MAIN, 0x5636B18, 0] + value_type: uint32 + value: [FPS_TARGET, FPS_TARGET] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x573ABA8, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x47B3200, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml b/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml index f0009e0..241a90a 100644 --- a/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml +++ b/SaltySD/plugins/FPSLocker/patches/0100CDC013238000/D626F7A72AF54744.yaml @@ -2,10 +2,9 @@ # BID: D626F7A72AF54744 # Cutscenes don't use Dynamic Resolution -unsafeCheck: true - ALL_FPS: # Dynamic Resolution Frame Target Max in ms (default is 38, so resolution is a priority over framerate) + ## REF: Method$SingletonMonoBehaviour.CheckInstance() - type: evaluate_write address: [MAIN, 0x5F5B610, 0x738, 0x70, 0x38] @@ -16,4 +15,4 @@ ALL_FPS: type: evaluate_write address: [MAIN, 0x5F5B610, 0x738, 0x70, 0x3C] value_type: float - value: "0.96 * FRAMETIME_TARGET" + value: "FRAMETIME_TARGET - 1.5" diff --git a/SaltySD/plugins/FPSLocker/patches/0100CFB01CDCE000/02F0B93D14038350.yaml b/SaltySD/plugins/FPSLocker/patches/0100CFB01CDCE000/02F0B93D14038350.yaml new file mode 100644 index 0000000..6ec9ebc --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100CFB01CDCE000/02F0B93D14038350.yaml @@ -0,0 +1,25 @@ +# Rune Factory: Guardians of Azuma `Cartridge only` 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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/599F2EE3AA6414E8.yaml b/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/599F2EE3AA6414E8.yaml new file mode 100644 index 0000000..2f77119 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100D1202322A000/599F2EE3AA6414E8.yaml @@ -0,0 +1,25 @@ +# Mandragora: Whispers of the Witch Tree 1.6.2.137153 +# BID: 599F2EE3AA6414E8 + +ALL_FPS: + # r.VSync + - + type: write + address: [MAIN, 0x5ED6960, 0] + value_type: int32 + value: [0, 0] + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x66A2758, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x66C7FF8, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100D76006EF8000/C638A0730217792B.yaml b/SaltySD/plugins/FPSLocker/patches/0100D76006EF8000/C638A0730217792B.yaml new file mode 100644 index 0000000..4d61f5d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100D76006EF8000/C638A0730217792B.yaml @@ -0,0 +1,71 @@ +# DOOM `JPN` 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 diff --git a/SaltySD/plugins/FPSLocker/patches/0100D7C01F254000/DDB633241838C090.yaml b/SaltySD/plugins/FPSLocker/patches/0100D7C01F254000/DDB633241838C090.yaml new file mode 100644 index 0000000..c3c4e8f --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100D7C01F254000/DDB633241838C090.yaml @@ -0,0 +1,25 @@ +# DRAGON QUEST I & II HD-2D Remake 1.0.2 +# BID: DDB633241838C090 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x647E5F8, 0] + value_type: float + value: [FRAMETIME_TARGET, FRAMETIME_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x5C913E8, 0] + value_type: int32 + value: [0, 0] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x64AC358, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml b/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml index 82b354d..db5d3dc 100644 --- a/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml +++ b/SaltySD/plugins/FPSLocker/patches/0100D7C021496000/23E85FEDEC96439C.yaml @@ -1,4 +1,4 @@ -# Twilight Monk 1.4.1 +# Twilight Monk 1.4.1/1.5.1 # BID: 23E85FEDEC96439C ALL_FPS: @@ -33,4 +33,4 @@ ALL_FPS: value: [0, 0] - type: block - what: timing \ No newline at end of file + what: timing diff --git a/SaltySD/plugins/FPSLocker/patches/0100D9D021782000/D4A7205845845BCA.yaml b/SaltySD/plugins/FPSLocker/patches/0100D9D021782000/D4A7205845845BCA.yaml new file mode 100644 index 0000000..da17405 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100D9D021782000/D4A7205845845BCA.yaml @@ -0,0 +1,19 @@ +# 百日戰記 -最終防衛學園- 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 diff --git a/SaltySD/plugins/FPSLocker/patches/0100DC601BB9A000/252525232F08D487.yaml b/SaltySD/plugins/FPSLocker/patches/0100DC601BB9A000/252525232F08D487.yaml new file mode 100644 index 0000000..09c3637 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100DC601BB9A000/252525232F08D487.yaml @@ -0,0 +1,74 @@ +# Tales of Xillia Remastered `US` 1.0.3 +# BID: 252525232F08D487 + +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: 0x28F5B7C + instructions: [ + [bl, _applyCustomSpeed()] + ] + - + type: asm_a64 + main_offset: 0x2B30A14 + 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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100DE302439E000/B04455298C6A5BAD.yaml b/SaltySD/plugins/FPSLocker/patches/0100DE302439E000/B04455298C6A5BAD.yaml new file mode 100644 index 0000000..f6cf3e3 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100DE302439E000/B04455298C6A5BAD.yaml @@ -0,0 +1,25 @@ +# INDIKA 1.1 +# BID: B04455298C6A5BAD + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x6C6F0A8, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x6C9D468, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x6499B58, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E0D01F224000/290D5939C6671566.yaml b/SaltySD/plugins/FPSLocker/patches/0100E0D01F224000/290D5939C6671566.yaml new file mode 100644 index 0000000..16b8edc --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E0D01F224000/290D5939C6671566.yaml @@ -0,0 +1,23 @@ +# テイルズ オブ ベルセリア リマスター 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" diff --git a/SaltySD/plugins/FPSLocker/patches/0100E0D01F224000/F4DB705AA11D45F3.yaml b/SaltySD/plugins/FPSLocker/patches/0100E0D01F224000/F4DB705AA11D45F3.yaml new file mode 100644 index 0000000..80f2fb9 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E0D01F224000/F4DB705AA11D45F3.yaml @@ -0,0 +1,20 @@ +# テイルズ オブ ベルセリア リマスター 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" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E2D00FE90000/9893960C8EF852A4.yaml b/SaltySD/plugins/FPSLocker/patches/0100E2D00FE90000/9893960C8EF852A4.yaml new file mode 100644 index 0000000..62ded99 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E2D00FE90000/9893960C8EF852A4.yaml @@ -0,0 +1,25 @@ +# 성검전설3 TRIALS of MANA (한국어판) 1.1.1 +# BID: 9893960C8EF852A4 + +ALL_FPS: + # r.VSync + - + type: write + address: [MAIN, 0x5707B68, 0] + value_type: int32 + value: [0, 0] + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x5F38E40, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x5F5E8B8, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E3901959C000/1320AB8B2F03BEDF.yaml b/SaltySD/plugins/FPSLocker/patches/0100E3901959C000/1320AB8B2F03BEDF.yaml new file mode 100644 index 0000000..09a4450 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E3901959C000/1320AB8B2F03BEDF.yaml @@ -0,0 +1,10 @@ +# Neon Blood 1.0.5 +# BID: 1320AB8B2F03BEDF + +ALL_FPS: + # UnityEngine.Time::fixedDeltaTime + - + type: evaluate_write + address: [MAIN, 0x56865A0, 0x48] + value_type: float + value: "1 / FPS_TARGET" \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E3A024D72000/B04455298C6A5BAD.yaml b/SaltySD/plugins/FPSLocker/patches/0100E3A024D72000/B04455298C6A5BAD.yaml new file mode 100644 index 0000000..5ac0033 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E3A024D72000/B04455298C6A5BAD.yaml @@ -0,0 +1,25 @@ +# INDIKA `Asia` 1.2 +# BID: B04455298C6A5BAD + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x6C6F0A8, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x6C9D468, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x6499B58, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing diff --git a/SaltySD/plugins/FPSLocker/patches/0100E5A0263EE000/B16032F85AE17D36.yaml b/SaltySD/plugins/FPSLocker/patches/0100E5A0263EE000/B16032F85AE17D36.yaml new file mode 100644 index 0000000..0a1c214 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E5A0263EE000/B16032F85AE17D36.yaml @@ -0,0 +1,19 @@ +# Crosak 1.0.1 +# BID: B16032F85AE17D36 + +ALL_FPS: + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x7A9FAA8, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x6A89290, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/6F78917B0BFEFED4.yaml b/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/6F78917B0BFEFED4.yaml new file mode 100644 index 0000000..4dc29ff --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/6F78917B0BFEFED4.yaml @@ -0,0 +1,25 @@ +# ASTRONEER 1.37.4.0 +# BID: 6F78917B0BFEFED4 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0xADE8748, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0xAE165D0, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0xA6191D0, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/C9700DA9F646ED8F.yaml b/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/C9700DA9F646ED8F.yaml new file mode 100644 index 0000000..f75c5af --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E63013E60000/C9700DA9F646ED8F.yaml @@ -0,0 +1,25 @@ +# ASTRONEER 1.38.7.0 +# BID: C9700DA9F646ED8F + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0xAE22748, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0xAE505D0, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0xA652A60, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E6B00DEA4000/B1B728101DD359DA.yaml b/SaltySD/plugins/FPSLocker/patches/0100E6B00DEA4000/B1B728101DD359DA.yaml new file mode 100644 index 0000000..6f46ae4 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E6B00DEA4000/B1B728101DD359DA.yaml @@ -0,0 +1,25 @@ +# Mutant Year Zero: Road to Eden - Deluxe Edition 4.0.23280 +# BID: B1B728101DD359DA + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x595A240, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 1)", "TruncDec(FRAMETIME_TARGET, 1)"] + # r.VSync + - + type: write + address: [MAIN, 0x512A9A8, 0] + value_type: int32 + value: [0, 0] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x5980C50, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/09AB9D97E7EE0034.yaml b/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/09AB9D97E7EE0034.yaml new file mode 100644 index 0000000..4d3edae --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/09AB9D97E7EE0034.yaml @@ -0,0 +1,18 @@ +# Card-en-Ciel 1.8.1 +# BID: 09AB9D97E7EE0034 +# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort + +ALL_FPS: + # Min delta FPS Target + - + type: evaluate_write + address: [MAIN, 0x23A7630, 0x50] + value_type: uint32 + value: FPS_TARGET + # Internal FPS Lock + # REF: look at nn::os::SleepThread() called in nnMain() + - + type: evaluate_write + address: [MAIN, 0x23A7630, 0x60] + value_type: float + value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/79298D0149D1BB03.yaml b/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/79298D0149D1BB03.yaml new file mode 100644 index 0000000..f57a586 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/79298D0149D1BB03.yaml @@ -0,0 +1,18 @@ +# Card-en-Ciel 1.7.0 +# BID: 79298D0149D1BB03 +# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort + +ALL_FPS: + # Min delta FPS Target + - + type: evaluate_write + address: [MAIN, 0x2326610, 0x50] + value_type: uint32 + value: FPS_TARGET + # Internal FPS Lock + # REF: look at nn::os::SleepThread() called in nnMain() + - + type: evaluate_write + address: [MAIN, 0x2326610, 0x60] + value_type: float + value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/D072AD5F9C249041.yaml b/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/D072AD5F9C249041.yaml new file mode 100644 index 0000000..6a3ee56 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100E6B01BD3A000/D072AD5F9C249041.yaml @@ -0,0 +1,18 @@ +# Card-en-Ciel 1.9.1 +# BID: D072AD5F9C249041 +# Buffers are hardcoded line by line and put into fixed size heap allocation, so getting triple buffer requires effort + +ALL_FPS: + # Min delta FPS Target + - + type: evaluate_write + address: [MAIN, 0x23CE638, 0x50] + value_type: uint32 + value: FPS_TARGET + # Internal FPS Lock + # REF: look at nn::os::SleepThread() called in nnMain() + - + type: evaluate_write + address: [MAIN, 0x23CE638, 0x60] + value_type: float + value: 1 / FPS_LOCK_TARGET \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100EA100F516000/FF516B8965730B27.yaml b/SaltySD/plugins/FPSLocker/patches/0100EA100F516000/FF516B8965730B27.yaml new file mode 100644 index 0000000..f9b45b1 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100EA100F516000/FF516B8965730B27.yaml @@ -0,0 +1,19 @@ +# The Turing Test 1.0.0 +# BID: FF516B8965730B27 + +ALL_FPS: + # t.MaxFPS (Defualt value is 45) + - + type: evaluate_write + address: [MAIN, 0x5477B30, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + # r.VSync + - + type: write + address: [MAIN, 0x48B6380, 0] + value_type: uint32 + value: [0, 0] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/33AF1FF02FA47D82.yaml b/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/33AF1FF02FA47D82.yaml new file mode 100644 index 0000000..6f61f96 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/33AF1FF02FA47D82.yaml @@ -0,0 +1,37 @@ +# EVERYBODY'S GOLF: Hot Shots EUR 1.1.8 +# BID: 33AF1FF02FA47D82 +# 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: 0x39EECE8 + 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: 0x39EEDBC + instructions: [ + [adrp, x10, $dr_frametime_min], + [ldr, d1, [x10, $dr_frametime_min]], + [nop], + [nop] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/E6CBBF3CD57FDC9E.yaml b/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/E6CBBF3CD57FDC9E.yaml new file mode 100644 index 0000000..4f2892d --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100EBE020BC0000/E6CBBF3CD57FDC9E.yaml @@ -0,0 +1,37 @@ +# EVERYBODY'S GOLF: Hot Shots EUR 1.1.7 +# BID: E6CBBF3CD57FDC9E +# 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] + ] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100EF00134F4000/5F5D07376E9D78F6.yaml b/SaltySD/plugins/FPSLocker/patches/0100EF00134F4000/5F5D07376E9D78F6.yaml new file mode 100644 index 0000000..ef8e894 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100EF00134F4000/5F5D07376E9D78F6.yaml @@ -0,0 +1,34 @@ +# ドラゴンボールZ KAKAROT + 新たなる覚醒セット 1.70 +# BID: 5F5D07376E9D78F6 + +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] \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/6DB62DBD1CECC235.yaml b/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/6DB62DBD1CECC235.yaml new file mode 100644 index 0000000..f105b7b --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100F1101BB9E000/6DB62DBD1CECC235.yaml @@ -0,0 +1,74 @@ +# Tales of Xillia Remastered 1.0.3 +# BID: 6DB62DBD1CECC235 + +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: 0x28F5DEC + instructions: [ + [bl, _applyCustomSpeed()] + ] + - + type: asm_a64 + main_offset: 0x2B30C84 + 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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100F18023E72000/86D7747720E11817.yaml b/SaltySD/plugins/FPSLocker/patches/0100F18023E72000/86D7747720E11817.yaml new file mode 100644 index 0000000..216b970 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100F18023E72000/86D7747720E11817.yaml @@ -0,0 +1,25 @@ +# System Shock 2.1.0 +# BID: 86D7747720E11817 + +ALL_FPS: + # r.DynamicRes.FrameTimeBudget + - + type: evaluate_write + address: [MAIN, 0x63C9408, 0] + value_type: float + value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"] + # r.VSync + - + type: write + address: [MAIN, 0x5BFA858, 0] + value_type: int32 + value: [0, 0] + # t.MaxFPS + - + type: evaluate_write + address: [MAIN, 0x63F70C8, 0] + value_type: float + value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] + - + type: block + what: timing \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/277178B7DBA1B6D4.yaml b/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/277178B7DBA1B6D4.yaml new file mode 100644 index 0000000..a4f43fc --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100F2C0115B6000/277178B7DBA1B6D4.yaml @@ -0,0 +1,184 @@ +# The Legend of Zelda: Tears of The Kingdom 1.4.3 +# BID: 277178B7DBA1B6D4 + +Addons: + - atmosphere/contents/0100F2C0115B6000/exefs/main.npdm + +DECLARATIONS: + - + type: variable + name: fps_target + value_type: float + default_value: 30 + evaluate: FPS_TARGET + - + type: variable + name: cutscene_flag + value_type: uint8 + default_value: 0 + - + type: variable + name: dr_factor + value_type: float + default_value: 0.001 + evaluate: FPS_TARGET / 30000 + - + type: const + name: nanoseconds_in_s + value: 1000000000 + - + type: code + name: cutscene_1 + instructions: [ + [stp, x29, x30, [sp, -16], "!"], + [mov, x29, sp], + [mov, w2, 1], + [adrp, x3, $cutscene_flag], + [strb, w2, [x3, $cutscene_flag]], + [bl, 0x772FD8], # Jump to original BL + [ldp, x29, x30, [sp], 16], + [ret] + ] + - + type: code + name: cutscene_2 + instructions: [ + [adrp, x3, $cutscene_flag], + [strb, w0, [x3, $cutscene_flag]], + [b, _setUserInactivityDetectionTimeExtended()], + ] + - + type: code + name: blackBackgroundFix + instructions: [ + [fcmp, s1, 0.0], + [b.ne, :goto1], + [ldurh, w8, [x24, -6]], + [cmp, w8, 5], + [b.ne, :goto1], + [ldurh, w8, [x24, -8]], + [cmp, w8, 5], + [b.ne, :goto1], + [fmov, s8, 1.0], + :goto1, [fmadd, s10, s0, s8, s1], + [ret] + ] +MASTER_WRITE: + # Force default 30 FPS Lock + ## REF: nvnWindowBuilderSetPresentInterval, function without UnlockMutex at the end + - + type: asm_a64 + main_offset: 0x1047B2C + instructions: [ + [mov, w1, 2] + ] + # Remove double buffer + ## REF: A0 2A 40 F9 61 A2 40 39 + - + type: asm_a64 + main_offset: 0xBE14A8 + instructions: [ + [mov, w1, 1] + ] + # Code Injected, $x1 + 0xD8 - last frametime without compensation long ticks, $x0 + 0x50 - fps target used for calculation int, + # $x0 + 0x24 - our fps target used for calculation but as float, originally is stored there 30 FPS int that seems to do nothing outside of this function + ## REF: 09 60 41 39 F3 03 01 AA + - + type: asm_a64 + main_offset: 0x2DB18C + instructions: [ + [adrp, x2, $fps_target], + [ldr, s9, [x2, $fps_target]], + [mov, x20, x0], + [mov, x21, x1], + [ldr, x0, [x1, 0xd8]], + [bl, _convertTickToTimeSpan()], + [mov, w2, $nanoseconds_in_s], + [movk, w2, $nanoseconds_in_s, 16], + [ucvtf, s2, w2], + [ucvtf, s1, x0], + [fdiv, s1, s2, s1], + [fcmp, s1, s9], + [fcsel, s1, s9, s1, gt], + [fmov, s9, 15.0], + [fcmp, s1, s9], + [fcsel, s1, s9, s1, lt], + [fcvtzu, w2, s1], + [str, w2, [x20, 0x50]], + [str, s1, [x20, 0x24]], + [b, 0x2DB284] # Jump to the end of function, to where stack is restored + ] + ## Use our fps target + ## REF: 60 52 42 BD 08 4E A8 52 + ### Replace LDR S0, [X22,#0x250] + - + type: asm_a64 + main_offset: 0x2DAA54 + instructions: [ + [ldr, s0, [x19, 0x224]] + ] + ### Replace SCVTF S0, S0 + - + type: asm_a64 + main_offset: 0x2DAA6C + instructions: [ + [nop] + ] + ## REF: 14 01 40 F9 08 4E A8 52 + ### Replace LDR S0, [X22,#0x250] + - + type: asm_a64 + main_offset: 0x3E562C + instructions: [ + [ldr, s0, [x22, 0x224]] + ] + ### Replace SCVTF S0, S0 + - + type: asm_a64 + main_offset: 0x3E5638 + instructions: [ + [nop] + ] + # When prerendered cutscene is active write flag + ## REF: 68 52 40 79 08 01 19 32 68 52 00 79 + ## BL to Code Cave 1 + - + type: asm_a64 + main_offset: 0x2B36100 + instructions: [ + [bl, _cutscene_1()] + ] + ## REF: 68 52 40 79 08 79 18 12 68 52 00 79, inside call + ## B to Code Cave 2 + - + type: asm_a64 + main_offset: 0x2B33918 + instructions: [ + [b, _cutscene_2()] + ] + # Adjust DR timing to factor + # REF: 88 02 15 CB 00 01 23 9E + - + type: asm_a64 + main_offset: 0xA1B94 + instructions: [ + [adrp, x8, $dr_factor], + [ldr, s1, [x8, $dr_factor]] + ] + # Fix black background for D-pad menu + ## REF: 08 20 20 1E 0A 04 08 1F + - + type: asm_a64 + main_offset: 0x1FBC80 + instructions: [ + [bl, _blackBackgroundFix()], # Jump to Code Cave 3 + [fcmp, s0, 0.0] + ] +ALL_FPS: + - + type: compare + compare_address: [VARIABLE, cutscene_flag] + compare_value: 1 + compare_type: "==" + value_type: refresh_rate + value: 30 diff --git a/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/1A6C27F8DCFE45CB.yaml b/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/1A6C27F8DCFE45CB.yaml new file mode 100644 index 0000000..224f721 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/1A6C27F8DCFE45CB.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/99252F8F7EE61A81.yaml b/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/99252F8F7EE61A81.yaml new file mode 100644 index 0000000..2cdf8f8 --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100F85018A14000/99252F8F7EE61A81.yaml @@ -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 \ No newline at end of file diff --git a/SaltySD/plugins/FPSLocker/patches/0100FD70134FA000/816A9DA975E34188.yaml b/SaltySD/plugins/FPSLocker/patches/0100FD70134FA000/816A9DA975E34188.yaml new file mode 100644 index 0000000..c0326cf --- /dev/null +++ b/SaltySD/plugins/FPSLocker/patches/0100FD70134FA000/816A9DA975E34188.yaml @@ -0,0 +1,34 @@ +# 드래곤볼 Z 카카로트 + 새로운 각성 편 1.70 +# BID: 816A9DA975E34188 + +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] \ No newline at end of file diff --git a/SaltySD/saltysd_bootstrap.elf b/SaltySD/saltysd_bootstrap.elf index 6f6a29d..8c4577b 100644 Binary files a/SaltySD/saltysd_bootstrap.elf and b/SaltySD/saltysd_bootstrap.elf differ diff --git a/SaltySD/saltysd_bootstrap32_3k.elf b/SaltySD/saltysd_bootstrap32_3k.elf index a2aa088..25887d5 100644 Binary files a/SaltySD/saltysd_bootstrap32_3k.elf and b/SaltySD/saltysd_bootstrap32_3k.elf differ diff --git a/SaltySD/saltysd_bootstrap32_5k.elf b/SaltySD/saltysd_bootstrap32_5k.elf index 9c27a07..6564afb 100644 Binary files a/SaltySD/saltysd_bootstrap32_5k.elf and b/SaltySD/saltysd_bootstrap32_5k.elf differ diff --git a/SaltySD/saltysd_core.elf b/SaltySD/saltysd_core.elf index 6daba36..d7fcd6f 100644 Binary files a/SaltySD/saltysd_core.elf and b/SaltySD/saltysd_core.elf differ diff --git a/SaltySD/saltysd_core32.elf b/SaltySD/saltysd_core32.elf index a589e4c..e10fee2 100644 Binary files a/SaltySD/saltysd_core32.elf and b/SaltySD/saltysd_core32.elf differ diff --git a/atmosphere/contents/0000000000534C56/exefs.nsp b/atmosphere/contents/0000000000534C56/exefs.nsp index a70d203..b4f13ac 100644 Binary files a/atmosphere/contents/0000000000534C56/exefs.nsp and b/atmosphere/contents/0000000000534C56/exefs.nsp differ diff --git a/atmosphere/contents/0000000000534C56/toolbox.json b/atmosphere/contents/0000000000534C56/toolbox.json index b4df567..a504070 100644 --- a/atmosphere/contents/0000000000534C56/toolbox.json +++ b/atmosphere/contents/0000000000534C56/toolbox.json @@ -2,5 +2,5 @@ "name": "SaltyNX", "tid": "0000000000534C56", "requires_reboot": true, - "version": "1.7.2" + "version": "1.7.5" } diff --git a/atmosphere/contents/010000000000bd00/exefs.nsp b/atmosphere/contents/010000000000bd00/exefs.nsp index d630a41..d015372 100644 Binary files a/atmosphere/contents/010000000000bd00/exefs.nsp and b/atmosphere/contents/010000000000bd00/exefs.nsp differ diff --git a/atmosphere/contents/420000000000000B/exefs.nsp b/atmosphere/contents/420000000000000B/exefs.nsp index ae64ae4..8f24ed7 100644 Binary files a/atmosphere/contents/420000000000000B/exefs.nsp and b/atmosphere/contents/420000000000000B/exefs.nsp differ diff --git a/atmosphere/exefs_patches/bluetooth_patches/6B33C2B7C850A47325F775218C40FCEA2F935A65.ips b/atmosphere/exefs_patches/bluetooth_patches/6B33C2B7C850A47325F775218C40FCEA2F935A65.ips new file mode 100644 index 0000000..b4fa1bd Binary files /dev/null and b/atmosphere/exefs_patches/bluetooth_patches/6B33C2B7C850A47325F775218C40FCEA2F935A65.ips differ diff --git a/atmosphere/exefs_patches/bluetooth_patches/C91C6FC8AA4C39222D6CCFE0FFF468543105E59B.ips b/atmosphere/exefs_patches/bluetooth_patches/C91C6FC8AA4C39222D6CCFE0FFF468543105E59B.ips new file mode 100644 index 0000000..3cf04ee Binary files /dev/null and b/atmosphere/exefs_patches/bluetooth_patches/C91C6FC8AA4C39222D6CCFE0FFF468543105E59B.ips differ diff --git a/atmosphere/exefs_patches/btm_patches/5A2AA468F272E49EBF0FAB8B379CC5B32C1A7409.ips b/atmosphere/exefs_patches/btm_patches/5A2AA468F272E49EBF0FAB8B379CC5B32C1A7409.ips new file mode 100644 index 0000000..b489f60 Binary files /dev/null and b/atmosphere/exefs_patches/btm_patches/5A2AA468F272E49EBF0FAB8B379CC5B32C1A7409.ips differ diff --git a/atmosphere/exefs_patches/hid_patches/765B710D7D40049E06C1326F5B57123B74A2E4AD.ips b/atmosphere/exefs_patches/hid_patches/765B710D7D40049E06C1326F5B57123B74A2E4AD.ips new file mode 100644 index 0000000..6f4d87f Binary files /dev/null and b/atmosphere/exefs_patches/hid_patches/765B710D7D40049E06C1326F5B57123B74A2E4AD.ips differ diff --git a/atmosphere/package3 b/atmosphere/package3 index 99e7206..0ccfbd6 100644 Binary files a/atmosphere/package3 and b/atmosphere/package3 differ diff --git a/atmosphere/reboot_payload.bin b/atmosphere/reboot_payload.bin index 6644b14..4f91a56 100644 Binary files a/atmosphere/reboot_payload.bin and b/atmosphere/reboot_payload.bin differ diff --git a/atmosphere/stratosphere.romfs b/atmosphere/stratosphere.romfs index 068c9c4..6ac0977 100644 Binary files a/atmosphere/stratosphere.romfs and b/atmosphere/stratosphere.romfs differ diff --git a/bootloader/hekate_ipl.ini b/bootloader/hekate_ipl.ini index eb99dfa..ce1ee66 100644 --- a/bootloader/hekate_ipl.ini +++ b/bootloader/hekate_ipl.ini @@ -8,6 +8,7 @@ autohosoff=2 autonogc=0 updater2p=0 bootprotect=0 +memmode=1 [Atmosphere] pkg3=atmosphere/package3 diff --git a/bootloader/payloads/Lockpick_RCM.bin b/bootloader/payloads/Lockpick_RCM.bin index f44b68a..87a85db 100644 Binary files a/bootloader/payloads/Lockpick_RCM.bin and b/bootloader/payloads/Lockpick_RCM.bin differ diff --git a/bootloader/sys/emummc.kipm b/bootloader/sys/emummc.kipm index 45fa938..4e4a951 100644 Binary files a/bootloader/sys/emummc.kipm and b/bootloader/sys/emummc.kipm differ diff --git a/bootloader/sys/l4t/sc7exit_b01.bin b/bootloader/sys/l4t/sc7exit_b01.bin index 0bfcd80..1f67aa0 100644 Binary files a/bootloader/sys/l4t/sc7exit_b01.bin and b/bootloader/sys/l4t/sc7exit_b01.bin differ diff --git a/bootloader/sys/libsys_minerva.bso b/bootloader/sys/libsys_minerva.bso index 448b6a1..19fe2d0 100644 Binary files a/bootloader/sys/libsys_minerva.bso and b/bootloader/sys/libsys_minerva.bso differ diff --git a/bootloader/sys/nyx.bin b/bootloader/sys/nyx.bin index 77dc864..32f7e45 100644 Binary files a/bootloader/sys/nyx.bin and b/bootloader/sys/nyx.bin differ diff --git a/bootloader/sys/res.pak b/bootloader/sys/res.pak index a7b9c8c..3477705 100644 Binary files a/bootloader/sys/res.pak and b/bootloader/sys/res.pak differ diff --git a/bootloader/sys/sc7exit_b01.bin b/bootloader/sys/sc7exit_b01.bin new file mode 100644 index 0000000..1f67aa0 Binary files /dev/null and b/bootloader/sys/sc7exit_b01.bin differ diff --git a/bootloader/update.bin b/bootloader/update.bin index 6644b14..4f91a56 100644 Binary files a/bootloader/update.bin and b/bootloader/update.bin differ diff --git a/config/aio-switch-updater/custom_packs.json b/config/aio-switch-updater/custom_packs.json index ba1271b..496a056 100644 --- a/config/aio-switch-updater/custom_packs.json +++ b/config/aio-switch-updater/custom_packs.json @@ -1,6 +1,7 @@ { "ams": { - "[PACK] UltraNX": "https://github.com/Ultra-NX/Ultra/releases/latest/download/Ultra.zip" + "[PACK] UltraNX 2.7|R3 Stable HOS ≤21.2.0": "https://github.com/Ultra-NX/Ultra/releases/latest/download/Ultra.zip", + "[PACK] UltraNX 2.8|RC1 Test HOS ≤22.0.0": "https://github.com/Ultra-NX/UltraNX/releases/download/2.8-R1/Ultra.zip" }, "misc": { "Refresh AIO": "https://github.com/Ultra-NX/Ultra-Resources/releases/download/Homebrews/AIO.zip" diff --git a/config/sys-con/config.ini b/config/sys-con/config.ini index caf16b7..cf09c45 100644 --- a/config/sys-con/config.ini +++ b/config/sys-con/config.ini @@ -9,11 +9,9 @@ ; For all other controllers, this value doesn't really impact controller responsiveness, so keep it high to avoid high CPU usage. polling_timeout_ms=10 -; thread_priority (0-63) +; thread_priority (0 (highest priority) to 63 (lowest priority)) ; Lower number means higher priority -; 44 is the usual priority of the main thread -; 59 is a special priority on cores 0..2 that enables preemptive multithreading -; 63 is a special priority on core 3 that enables preemptive multithreading +; 44 is the common default for application main threads polling_thread_priority=41 ;log_level Trace=0, Debug=1, Performance=2, Info=3, Warning=4, Error=5 @@ -771,7 +769,7 @@ profile=switch ; Wii controllers ; *************************************** -[057e-0337] ;Wii Controller BX-W201 (USB) +[057e-0337] ;Wii Controller BX-W201 (USB) or WUP-028 profile=wii ;controller_type=gamecube diff --git a/config/ultrahand/lang/de.json b/config/ultrahand/lang/de.json index ee9266b..baae7eb 100644 --- a/config/ultrahand/lang/de.json +++ b/config/ultrahand/lang/de.json @@ -13,7 +13,6 @@ "POLISH": "Polnisch", "SIMPLIFIED_CHINESE": "Vereinfachtes Chinesisch", "TRADITIONAL_CHINESE": "Traditionelles Chinesisch", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Nicht verfügbar", "OVERLAYS": "Overlays", "OVERLAYS_ABBR": "Overlays", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Diverse Optionen", "MENU_SETTINGS": "Menüeinstellungen", "USER_GUIDE": "Hilfe", + "PACKAGES_MENU": "Paket-Menü", "SHOW_HIDDEN": "Versteckte Anzeigen", "SHOW_DELETE": "Löschen Anzeigen", "SHOW_UNSUPPORTED": "Nicht unterstützte anzeigen", @@ -63,9 +63,8 @@ "LAUNCH_MODES": "Startmodi", "LANGUAGE": "Sprache", "OVERLAY_INFO": "Overlay Info", - "SOFTWARE_UPDATE": "Ultrahand Updates", - "UPDATE_ULTRAHAND": "Ultrahand-Ovl Updater", - "UPDATE_LANGUAGES": "Sprachpaket Updater", + "SOFTWARE_UPDATE": "Software aktualisieren", + "UPDATE_ULTRAHAND": "Ultrahand updaten", "SYSTEM": "System", "DEVICE_INFO": "Geräteinformationen", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Hintergrundbild aktiviert", "SOUND_SUPPORT_ENABLED": "Sound aktiviert", "EXIT_OVERLAY_SYSTEM": "Overlay-System beenden", + "ULTRAHAND_ABOUT": "Ultrahand Overlay ist ein anpassbares Überlagerungs-Ökosystem für Befehle, Überlagerungen, Tastenkombinationen und erweiterte Systemsteuerung.", + "ULTRAHAND_CREDITS_START": "Besonderer Dank an ", + "ULTRAHAND_CREDITS_END": " und viele andere. ♥", "LOCAL_IP": "Lokale IP", "WALLPAPER": "Hintergrundbild", - "THEME": "Theme ändern", - "DEFAULT": "Standard Theme", + "THEME": "Thema", + "SOUNDS": "Geräusche", + "DEFAULT": "Standard", "ROOT_PACKAGE": "(Boot-)Skriptbefehle", "SORT_PRIORITY": "LaunchMenü Rangfolge", "OPTIONS": "Optionen", "FAILED_TO_OPEN": "Konnte Paket nicht öffnen", "LAUNCH_COMBOS": "Start-Kombos", - "STARTUP_NOTIFICATION": "Startmitteilung", - "EXTERNAL_NOTIFICATIONS": "Externe Benachrichtigungen", - "SOUND_EFFECTS": "Soundeffekte", + "NOTIFICATIONS": "Benachrichtigungen", + "NOTIFICATION_SETTINGS": "Benachrichtigungen", + "SILENCE_NOTIFICATIONS": "Stummschalten", + "STARTUP_NOTIFICATION": "Startmeldung", + "MAX_SLOTS": "Max. Slots", + "API_NOTIFICATIONS": "API-Benachrichtigungen", + "API_TOGGLE_HOTKEY": "API-Hotkey", + "DISMISS_NOTIFICATION": "Schließen", + "API_TOGGLE": "API umschalten", + "CLICK": "Klick", + "TAP": "Tippen", + "HOLD_FOR_4S": "4s halten", "HAPTIC_FEEDBACK": "Haptisches Feedback", "OPAQUE_SCREENSHOTS": "Undurchsichtige Screenshots", "ON": "AN", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Start Eintrag", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "176", "SETTINGS_MENU": "Options-Menü", "SCRIPT_OVERLAY": "OVL-Skript wählen", "STAR_FAVORITE": "Favorit wählen", diff --git a/config/ultrahand/lang/en.json b/config/ultrahand/lang/en.json index 11ca642..3690a2c 100644 --- a/config/ultrahand/lang/en.json +++ b/config/ultrahand/lang/en.json @@ -13,7 +13,6 @@ "POLISH": "Polish", "SIMPLIFIED_CHINESE": "Simplified Chinese", "TRADITIONAL_CHINESE": "Traditional Chinese", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Not available", "OVERLAYS": "Overlays", "OVERLAYS_ABBR": "Overlays", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Miscellaneous", "MENU_SETTINGS": "Menu Settings", "USER_GUIDE": "User Guide", + "PACKAGES_MENU": "Packages Menu", "SHOW_HIDDEN": "Show Hidden", "SHOW_DELETE": "Show Delete", "SHOW_UNSUPPORTED": "Show Unsupported", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Overlay Info", "SOFTWARE_UPDATE": "Software Update", "UPDATE_ULTRAHAND": "Update Ultrahand", - "UPDATE_LANGUAGES": "Update Languages", "SYSTEM": "System", "DEVICE_INFO": "Device Info", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Wallpaper support enabled.", "SOUND_SUPPORT_ENABLED": "Sound support enabled.", "EXIT_OVERLAY_SYSTEM": "Exit Overlay System", + "ULTRAHAND_ABOUT": "Ultrahand Overlay is a customizable overlay ecosystem for commands, overlays, hotkeys, and advanced system interaction.", + "ULTRAHAND_CREDITS_START": "Special thanks to ", + "ULTRAHAND_CREDITS_END": " and many others. ♥", "LOCAL_IP": "Local IP", "WALLPAPER": "Wallpaper", "THEME": "Theme", + "SOUNDS": "Sounds", "DEFAULT": "default", "ROOT_PACKAGE": "Root Package", "SORT_PRIORITY": "Sort Priority", "OPTIONS": "Options", "FAILED_TO_OPEN": "Failed to open file", "LAUNCH_COMBOS": "Launch Combos", + "NOTIFICATIONS": "Notifications", + "NOTIFICATION_SETTINGS": "Notification Settings", + "SILENCE_NOTIFICATIONS": "Silence Notifications", "STARTUP_NOTIFICATION": "Startup Notification", - "EXTERNAL_NOTIFICATIONS": "External Notifications", - "SOUND_EFFECTS": "Sound Effects", + "MAX_SLOTS": "Max Slots", + "API_NOTIFICATIONS": "API Notifications", + "API_TOGGLE_HOTKEY": "API Toggle Hotkey", + "DISMISS_NOTIFICATION": "Dismiss Notification", + "API_TOGGLE": "API Toggle", + "CLICK": "click", + "TAP": "tap", + "HOLD_FOR_4S": "hold for 4s", "HAPTIC_FEEDBACK": "Haptic Feedback", "OPAQUE_SCREENSHOTS": "Opaque Screenshots", "ON": "On", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Boot Entry", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "177", "SETTINGS_MENU": "Settings Menu", "SCRIPT_OVERLAY": "Script Overlay", "STAR_FAVORITE": "Star/Favorite", diff --git a/config/ultrahand/lang/es.json b/config/ultrahand/lang/es.json index 20f2d87..d0c272b 100644 --- a/config/ultrahand/lang/es.json +++ b/config/ultrahand/lang/es.json @@ -13,7 +13,6 @@ "POLISH": "Polaco", "SIMPLIFIED_CHINESE": "Chino Simplificado", "TRADITIONAL_CHINESE": "Chino Tradicional", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "No disponible", "OVERLAYS": "Superposiciones", "OVERLAYS_ABBR": "Superp.", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Varios", "MENU_SETTINGS": "Configuración del menú", "USER_GUIDE": "Guía del usuario", + "PACKAGES_MENU": "Menú de paquetes", "SHOW_HIDDEN": "Mostrar ocultos", "SHOW_DELETE": "Mostrar eliminar", "SHOW_UNSUPPORTED": "Mostrar no soportados", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Info superposición", "SOFTWARE_UPDATE": "Actualizaciones", "UPDATE_ULTRAHAND": "Actualizar Ultrahand", - "UPDATE_LANGUAGES": "Actualizar idiomas", "SYSTEM": "Sistema", "DEVICE_INFO": "Info del dispositivo", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Fondo activado", "SOUND_SUPPORT_ENABLED": "Sonido activado", "EXIT_OVERLAY_SYSTEM": "Salir del sistema overlay", + "ULTRAHAND_ABOUT": "Ultrahand Overlay es un ecosistema de superposiciones personalizable para comandos, overlays, teclas rápidas e interacción avanzada con el sistema.", + "ULTRAHAND_CREDITS_START": "Agradecimientos especiales a ", + "ULTRAHAND_CREDITS_END": " y muchos más. ♥", "LOCAL_IP": "IP local", "WALLPAPER": "Fondo", "THEME": "Tema", + "SOUNDS": "Sonidos", "DEFAULT": "predeterminado", "ROOT_PACKAGE": "Paquete raíz", "SORT_PRIORITY": "Prioridad de orden", "OPTIONS": "Opciones", "FAILED_TO_OPEN": "No se pudo abrir", "LAUNCH_COMBOS": "Combos de inicio", - "STARTUP_NOTIFICATION": "Notificación de inicio,", - "EXTERNAL_NOTIFICATIONS": "Notificaciones externas,", - "SOUND_EFFECTS": "Efectos de sonido", + "NOTIFICATIONS": "Notificaciones", + "NOTIFICATION_SETTINGS": "Configuración de notificaciones", + "SILENCE_NOTIFICATIONS": "Silenciar notificaciones", + "STARTUP_NOTIFICATION": "Notificación de inicio", + "MAX_SLOTS": "Ranuras máx.", + "API_NOTIFICATIONS": "Notificaciones API", + "API_TOGGLE_HOTKEY": "Tecla rápida API", + "DISMISS_NOTIFICATION": "Descartar", + "API_TOGGLE": "Alternar API", + "CLICK": "clic", + "TAP": "toque", + "HOLD_FOR_4S": "mantener 4s", "HAPTIC_FEEDBACK": "Vibración", "OPAQUE_SCREENSHOTS": "Capturas opacas", "ON": "Encendido", @@ -107,7 +119,7 @@ "_CREATOR": "Creador(es)", "_ABOUT": "Acerca de", "_CREDITS": "Créditos", - "OK": "Aceptar", + "OK": "OK", "BACK": "Atrás", "HIDE": "Ocultar", "CANCEL": "Cancelar", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Entrada de arranque", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "178", "SETTINGS_MENU": "Menú configuración", "SCRIPT_OVERLAY": "Superposición script", "STAR_FAVORITE": "Favorito", diff --git a/config/ultrahand/lang/fr.json b/config/ultrahand/lang/fr.json index f0870f6..9431bd8 100644 --- a/config/ultrahand/lang/fr.json +++ b/config/ultrahand/lang/fr.json @@ -13,7 +13,6 @@ "POLISH": "Polonais", "SIMPLIFIED_CHINESE": "Chinois Simplifié", "TRADITIONAL_CHINESE": "Chinois Traditionnel", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Non disponible", "OVERLAYS": "Superpositions", "OVERLAYS_ABBR": "Superp.", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Divers", "MENU_SETTINGS": "Paramètres du menu", "USER_GUIDE": "Guide utilisateur", + "PACKAGES_MENU": "Menu Paquets", "SHOW_HIDDEN": "Afficher cachés", "SHOW_DELETE": "Afficher supprimer", "SHOW_UNSUPPORTED": "Afficher non supportés", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Info superposition", "SOFTWARE_UPDATE": "Mises à jour", "UPDATE_ULTRAHAND": "MàJ Ultrahand", - "UPDATE_LANGUAGES": "MàJ langues", "SYSTEM": "Système", "DEVICE_INFO": "Infos appareil", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Fond d'écran activé", "SOUND_SUPPORT_ENABLED": "Son activé", "EXIT_OVERLAY_SYSTEM": "Quitter système overlay", + "ULTRAHAND_ABOUT": "Ultrahand Overlay est un écosystème d'overlays personnalisable pour commandes, overlays, raccourcis clavier et interactions avancées avec le système.", + "ULTRAHAND_CREDITS_START": "Remerciements spéciaux à ", + "ULTRAHAND_CREDITS_END": " et bien d'autres. ♥", "LOCAL_IP": "IP locale", "WALLPAPER": "Fond d'écran", "THEME": "Thème", + "SOUNDS": "Sons", "DEFAULT": "par défaut", "ROOT_PACKAGE": "Paquet racine", "SORT_PRIORITY": "Priorité tri", "OPTIONS": "Options", "FAILED_TO_OPEN": "Échec ouverture fichier", "LAUNCH_COMBOS": "Combos lancement", - "STARTUP_NOTIFICATION": "Notification au démarrage,", - "EXTERNAL_NOTIFICATIONS": "Notifications externes,", - "SOUND_EFFECTS": "Effets sonores", + "NOTIFICATIONS": "Notifications", + "NOTIFICATION_SETTINGS": "Réglages notifications", + "SILENCE_NOTIFICATIONS": "Silencer", + "STARTUP_NOTIFICATION": "Notif. démarrage", + "MAX_SLOTS": "Max. emplacements", + "API_NOTIFICATIONS": "Notifs API", + "API_TOGGLE_HOTKEY": "Raccourci API", + "DISMISS_NOTIFICATION": "Ignorer", + "API_TOGGLE": "Basculer API", + "CLICK": "clic", + "TAP": "appui", + "HOLD_FOR_4S": "maintenir 4s", "HAPTIC_FEEDBACK": "Retour haptique", "OPAQUE_SCREENSHOTS": "Captures opaques", "ON": "Activé", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Entrée démarrage", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "151", "SETTINGS_MENU": "Menu paramètres", "SCRIPT_OVERLAY": "Script overlay", "STAR_FAVORITE": "Favori", diff --git a/config/ultrahand/lang/it.json b/config/ultrahand/lang/it.json index bd2fdd2..15ee8a5 100644 --- a/config/ultrahand/lang/it.json +++ b/config/ultrahand/lang/it.json @@ -13,7 +13,6 @@ "POLISH": "Polacco", "SIMPLIFIED_CHINESE": "Cinese Semplificato", "TRADITIONAL_CHINESE": "Cinese Tradizionale", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Non disponibile", "OVERLAYS": "Sovrapposizioni", "OVERLAYS_ABBR": "Sovrap.", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Varie", "MENU_SETTINGS": "Impostazioni menu", "USER_GUIDE": "Guida utente", + "PACKAGES_MENU": "Menu Pacchetti", "SHOW_HIDDEN": "Mostra nascosti", "SHOW_DELETE": "Mostra elimina", "SHOW_UNSUPPORTED": "Mostra non supportati", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Info sovrapposizione", "SOFTWARE_UPDATE": "Aggiornamenti", "UPDATE_ULTRAHAND": "Aggiorna Ultrahand", - "UPDATE_LANGUAGES": "Aggiorna lingue", "SYSTEM": "Sistema", "DEVICE_INFO": "Info dispositivo", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Sfondo attivato", "SOUND_SUPPORT_ENABLED": "Audio attivato", "EXIT_OVERLAY_SYSTEM": "Esci dal sistema overlay", + "ULTRAHAND_ABOUT": "Ultrahand Overlay è un ecosistema di overlay personalizzabile per comandi, overlay, scorciatoie e interazioni avanzate con il sistema.", + "ULTRAHAND_CREDITS_START": "Ringraziamenti speciali a ", + "ULTRAHAND_CREDITS_END": " e molti altri. ♥", "LOCAL_IP": "IP locale", "WALLPAPER": "Sfondo", "THEME": "Tema", + "SOUNDS": "Suoni", "DEFAULT": "predefinito", "ROOT_PACKAGE": "Pacchetto radice", "SORT_PRIORITY": "Priorità ordinamento", "OPTIONS": "Opzioni", "FAILED_TO_OPEN": "Impossibile aprire", "LAUNCH_COMBOS": "Combinazioni avvio", - "STARTUP_NOTIFICATION": "Notifica di avvio,", - "EXTERNAL_NOTIFICATIONS": "Notifiche esterne,", - "SOUND_EFFECTS": "Effetti sonori", + "NOTIFICATIONS": "Notifiche", + "NOTIFICATION_SETTINGS": "Impostazioni notifiche", + "SILENCE_NOTIFICATIONS": "Silenzia notifiche", + "STARTUP_NOTIFICATION": "Notifica all'avvio", + "MAX_SLOTS": "Slot massimi", + "API_NOTIFICATIONS": "Notifiche API", + "API_TOGGLE_HOTKEY": "Tasto API", + "DISMISS_NOTIFICATION": "Ignora", + "API_TOGGLE": "Attiva/Disattiva API", + "CLICK": "clic", + "TAP": "tocco", + "HOLD_FOR_4S": "mantieni 4s", "HAPTIC_FEEDBACK": "Feedback aptico", "OPAQUE_SCREENSHOTS": "Screenshot opachi", "ON": "Acceso", @@ -115,16 +127,15 @@ "REBOOT": "Riavvia", "SHUTDOWN": "Spegni", "BOOT_ENTRY": "Voce avvio", - "GAP_1": " ", + "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "166", "SETTINGS_MENU": "Menu impostazioni", "SCRIPT_OVERLAY": "Script overlay", "STAR_FAVORITE": "Preferito", - "APP_SETTINGS": "Impostazioni pacchetto", + "APP_SETTINGS": "Imp. pacchetto", "ON_MAIN_MENU": "nel menu principale", "ON_A_COMMAND": "su un comando", - "ON_OVERLAY_PACKAGE": "su overlay/pacchetto", + "ON_OVERLAY_PACKAGE": "su sovr./pacchetto", "FEATURES": "Funzionalità", "SWIPE_TO_OPEN": "Scorri per aprire", "THEME_SETTINGS": "Impostazioni tema", diff --git a/config/ultrahand/lang/ja.json b/config/ultrahand/lang/ja.json index e4823cc..548cbf1 100644 --- a/config/ultrahand/lang/ja.json +++ b/config/ultrahand/lang/ja.json @@ -13,7 +13,6 @@ "POLISH": "ポーランド語", "SIMPLIFIED_CHINESE": "簡体中国語", "TRADITIONAL_CHINESE": "繁体中国語", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "利用不可", "OVERLAYS": "オーバーレイ", "OVERLAYS_ABBR": "オーバーレイ", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "その他", "MENU_SETTINGS": "メニュー設定", "USER_GUIDE": "ユーザーガイド", + "PACKAGES_MENU": "パッケージメニュー", "SHOW_HIDDEN": "非表示を表示", "SHOW_DELETE": "削除を表示", "SHOW_UNSUPPORTED": "非対応を表示", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "オーバーレイ情報", "SOFTWARE_UPDATE": "アップデート", "UPDATE_ULTRAHAND": "Ultrahand更新", - "UPDATE_LANGUAGES": "言語更新", "SYSTEM": "システム", "DEVICE_INFO": "デバイス情報", "FIRMWARE": "ファームウェア", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "壁紙オン", "SOUND_SUPPORT_ENABLED": "音効オン", "EXIT_OVERLAY_SYSTEM": "オーバーレイ終了", + "ULTRAHAND_ABOUT": "Ultrahand Overlayは、コマンド、オーバーレイ、ホットキー、高度なシステム操作のためのカスタマイズ可能なオーバーレイエコシステムです。", + "ULTRAHAND_CREDITS_START": "", + "ULTRAHAND_CREDITS_END": " そして多くの方々に特別な感謝を。♥", "LOCAL_IP": "ローカルIP", "WALLPAPER": "壁紙", "THEME": "テーマ", + "SOUNDS": "サウンド", "DEFAULT": "デフォルト", "ROOT_PACKAGE": "ルートパッケージ", "SORT_PRIORITY": "並び順優先度", "OPTIONS": "オプション", "FAILED_TO_OPEN": "開けませんでした", "LAUNCH_COMBOS": "起動コンボ", + "NOTIFICATIONS": "通知", + "NOTIFICATION_SETTINGS": "通知設定", + "SILENCE_NOTIFICATIONS": "通知をミュート", "STARTUP_NOTIFICATION": "起動通知", - "EXTERNAL_NOTIFICATIONS": "外部通知", - "SOUND_EFFECTS": "サウンド", + "MAX_SLOTS": "最大スロット", + "API_NOTIFICATIONS": "API通知", + "API_TOGGLE_HOTKEY": "API切り替えホットキー", + "DISMISS_NOTIFICATION": "通知を閉じる", + "API_TOGGLE": "API切り替え", + "CLICK": "クリック", + "TAP": "タップ", + "HOLD_FOR_4S": "4秒長押し", "HAPTIC_FEEDBACK": "振動フィードバック", "OPAQUE_SCREENSHOTS": "不透明スクショ", "ON": "オン", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "ブート項目", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "198", "SETTINGS_MENU": "設定メニュー", "SCRIPT_OVERLAY": "スクリプトOL", "STAR_FAVORITE": "お気に入り", diff --git a/config/ultrahand/lang/ko.json b/config/ultrahand/lang/ko.json index 5296e25..5e1071e 100644 --- a/config/ultrahand/lang/ko.json +++ b/config/ultrahand/lang/ko.json @@ -13,7 +13,6 @@ "POLISH": "폴란드어", "SIMPLIFIED_CHINESE": "간체 중국어", "TRADITIONAL_CHINESE": "번체 중국어", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "사용 불가", "OVERLAYS": "오버레이", "OVERLAYS_ABBR": "오버레이", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "기타", "MENU_SETTINGS": "메뉴 설정", "USER_GUIDE": "사용 가이드", + "PACKAGES_MENU": "패키지 메뉴", "SHOW_HIDDEN": "숨김 항목 표시", "SHOW_DELETE": "삭제 표시", "SHOW_UNSUPPORTED": "비지원 표시", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "오버레이 정보", "SOFTWARE_UPDATE": "업데이트", "UPDATE_ULTRAHAND": "Ultrahand 업데이트", - "UPDATE_LANGUAGES": "언어 업데이트", "SYSTEM": "시스템", "DEVICE_INFO": "장치 정보", "FIRMWARE": "펌웨어", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "배경화면 켜짐", "SOUND_SUPPORT_ENABLED": "사운드 켜짐", "EXIT_OVERLAY_SYSTEM": "오버레이 시스템 종료", + "ULTRAHAND_ABOUT": "Ultrahand Overlay는 명령, 오버레이, 핫키, 고급 시스템 인터랙션을 위한 맞춤형 오버레이 에코시스템입니다.", + "ULTRAHAND_CREDITS_START": "", + "ULTRAHAND_CREDITS_END": " 및 많은 분들께 특별한 감사 인사를 드립니다. ♥", "LOCAL_IP": "로컬 IP", "WALLPAPER": "배경화면", "THEME": "테마", + "SOUNDS": "사운드", "DEFAULT": "기본", "ROOT_PACKAGE": "루트 패키지", "SORT_PRIORITY": "정렬 우선순위", "OPTIONS": "옵션", "FAILED_TO_OPEN": "파일 열기 실패", "LAUNCH_COMBOS": "실행 콤보", + "NOTIFICATIONS": "알림", + "NOTIFICATION_SETTINGS": "알림 설정", + "SILENCE_NOTIFICATIONS": "알림 무음", "STARTUP_NOTIFICATION": "시작 알림", - "EXTERNAL_NOTIFICATIONS": "외부 알림", - "SOUND_EFFECTS": "사운드 효과", + "MAX_SLOTS": "최대 슬롯", + "API_NOTIFICATIONS": "API 알림", + "API_TOGGLE_HOTKEY": "API 전환 단축키", + "DISMISS_NOTIFICATION": "알림 닫기", + "API_TOGGLE": "API 전환", + "CLICK": "클릭", + "TAP": "탭", + "HOLD_FOR_4S": "4초 길게 누르기", "HAPTIC_FEEDBACK": "진동 피드백", "OPAQUE_SCREENSHOTS": "불투명 캡처", "ON": "켜기", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "부트 항목", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "174", "SETTINGS_MENU": "설정 메뉴", "SCRIPT_OVERLAY": "스크립트 오버레이", "STAR_FAVORITE": "즐겨찾기", diff --git a/config/ultrahand/lang/nl.json b/config/ultrahand/lang/nl.json index ad1e1b9..5e5f9b7 100644 --- a/config/ultrahand/lang/nl.json +++ b/config/ultrahand/lang/nl.json @@ -13,7 +13,6 @@ "POLISH": "Pools", "SIMPLIFIED_CHINESE": "Vereenvoudigd Chinees", "TRADITIONAL_CHINESE": "Traditioneel Chinees", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Niet beschikbaar", "OVERLAYS": "Overlays", "OVERLAYS_ABBR": "Overlays", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Overige", "MENU_SETTINGS": "Menu-instellingen", "USER_GUIDE": "Handleiding", + "PACKAGES_MENU": "Pakkettenmenu", "SHOW_HIDDEN": "Verborgen tonen", "SHOW_DELETE": "Verwijderen tonen", "SHOW_UNSUPPORTED": "Niet-ondersteunde tonen", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Overlay-info", "SOFTWARE_UPDATE": "Updates", "UPDATE_ULTRAHAND": "Ultrahand bijwerken", - "UPDATE_LANGUAGES": "Talen bijwerken", "SYSTEM": "Systeem", "DEVICE_INFO": "Apparaatinformatie", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Achtergrond aan", "SOUND_SUPPORT_ENABLED": "Geluid aan", "EXIT_OVERLAY_SYSTEM": "Overlay-systeem afsluiten", + "ULTRAHAND_ABOUT": "Ultrahand Overlay is een aanpasbaar ecosysteem van overlays voor commando's, overlays, sneltoetsen en geavanceerde systeeminteractie.", + "ULTRAHAND_CREDITS_START": "Speciale dank aan ", + "ULTRAHAND_CREDITS_END": " en vele anderen. ♥", "LOCAL_IP": "Lokale IP", "WALLPAPER": "Achtergrond", "THEME": "Thema", + "SOUNDS": "Geluiden", "DEFAULT": "standaard", "ROOT_PACKAGE": "Hoofdpakket", "SORT_PRIORITY": "Sorteerprioriteit", "OPTIONS": "Opties", "FAILED_TO_OPEN": "Bestand openen mislukt", "LAUNCH_COMBOS": "Startcombinaties", + "NOTIFICATIONS": "Meldingen", + "NOTIFICATION_SETTINGS": "Meldingsinstellingen", + "SILENCE_NOTIFICATIONS": "Meldingen dempen", "STARTUP_NOTIFICATION": "Opstartmelding", - "EXTERNAL_NOTIFICATIONS": "Externe meldingen", - "SOUND_EFFECTS": "Geluidseffecten", + "MAX_SLOTS": "Max. slots", + "API_NOTIFICATIONS": "API-meldingen", + "API_TOGGLE_HOTKEY": "API-schakelaar sneltoets", + "DISMISS_NOTIFICATION": "Melding sluiten", + "API_TOGGLE": "API schakelen", + "CLICK": "klik", + "TAP": "tik", + "HOLD_FOR_4S": "4s vasthouden", "HAPTIC_FEEDBACK": "Haptische feedback", "OPAQUE_SCREENSHOTS": "Ondoorzichtige screenshots", "ON": "Aan", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Opstartitem", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "182", "SETTINGS_MENU": "Instellingenmenu", "SCRIPT_OVERLAY": "Script-overlay", "STAR_FAVORITE": "Favoriet", diff --git a/config/ultrahand/lang/pl.json b/config/ultrahand/lang/pl.json index 52aef54..fd9185f 100644 --- a/config/ultrahand/lang/pl.json +++ b/config/ultrahand/lang/pl.json @@ -13,7 +13,6 @@ "POLISH": "Polski", "SIMPLIFIED_CHINESE": "Chiński uproszczony", "TRADITIONAL_CHINESE": "Chiński tradycyjny", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Niedostępne", "OVERLAYS": "Nakładki", "OVERLAYS_ABBR": "Nakładki", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Różne", "MENU_SETTINGS": "Ustawienia menu", "USER_GUIDE": "Poradnik", + "PACKAGES_MENU": "Menu paczek", "SHOW_HIDDEN": "Pokaż ukryte", "SHOW_DELETE": "Pokaż usuń", "SHOW_UNSUPPORTED": "Pokaż nieobsługiwane", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Info nakładki", "SOFTWARE_UPDATE": "Aktualizacje", "UPDATE_ULTRAHAND": "Aktualizuj Ultrahand", - "UPDATE_LANGUAGES": "Aktualizuj języki", "SYSTEM": "System", "DEVICE_INFO": "Info o urządzeniu", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Tapeta włączona", "SOUND_SUPPORT_ENABLED": "Dźwięk włączony", "EXIT_OVERLAY_SYSTEM": "Wyjdź z systemu nakładek", + "ULTRAHAND_ABOUT": "Ultrahand Overlay jest konfigurowalnym ekosystemem overlayów dla poleceń, overlayów, skrótów klawiszowych i zaawansowanej interakcji z systemem.", + "ULTRAHAND_CREDITS_START": "Specjalne podziękowania dla ", + "ULTRAHAND_CREDITS_END": " i wielu innym. ♥", "LOCAL_IP": "Lokalny IP", "WALLPAPER": "Tapeta", "THEME": "Motyw", + "SOUNDS": "Dźwięki", "DEFAULT": "domyślny", "ROOT_PACKAGE": "Paczka główna", "SORT_PRIORITY": "Priorytet sortowania", "OPTIONS": "Opcje", "FAILED_TO_OPEN": "Nie udało się otworzyć", "LAUNCH_COMBOS": "Kombinacje startowe", + "NOTIFICATIONS": "Powiadomienia", + "NOTIFICATION_SETTINGS": "Ustawienia powiadomień", + "SILENCE_NOTIFICATIONS": "Wycisz powiadomienia", "STARTUP_NOTIFICATION": "Powiadomienie startowe", - "EXTERNAL_NOTIFICATIONS": "Zewnętrzne powiadomienia", - "SOUND_EFFECTS": "Efekty dźwiękowe", + "MAX_SLOTS": "Maks. sloty", + "API_NOTIFICATIONS": "Powiadomienia API", + "API_TOGGLE_HOTKEY": "Skrót przełączania API", + "DISMISS_NOTIFICATION": "Zamknij", + "API_TOGGLE": "Przełącz API", + "CLICK": "klik", + "TAP": "stuknięcie", + "HOLD_FOR_4S": "przytrzymaj 4s", "HAPTIC_FEEDBACK": "Wibracje", "OPAQUE_SCREENSHOTS": "Nieprzezroczyste zrzuty", "ON": "Włącz", @@ -106,7 +118,7 @@ "_VERSION": "Wersja", "_CREATOR": "Autorzy", "_ABOUT": "O programie", - "_CREDITS": "Podziękowania", + "_CREDITS": "Dzięki", "OK": "OK", "BACK": "Wstecz", "HIDE": "Ukryj", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Pozycja startowa", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "173", "SETTINGS_MENU": "Menu ustawień", "SCRIPT_OVERLAY": "Skrypt nakładki", "STAR_FAVORITE": "Ulubione", diff --git a/config/ultrahand/lang/pt.json b/config/ultrahand/lang/pt.json index 2bd2493..3d20dcb 100644 --- a/config/ultrahand/lang/pt.json +++ b/config/ultrahand/lang/pt.json @@ -13,7 +13,6 @@ "POLISH": "Polonês", "SIMPLIFIED_CHINESE": "Chinês Simplificado", "TRADITIONAL_CHINESE": "Chinês Tradicional", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Indisponível", "OVERLAYS": "Sobreposições", "OVERLAYS_ABBR": "Sobrep.", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Diversos", "MENU_SETTINGS": "Configurações do menu", "USER_GUIDE": "Guia do usuário", + "PACKAGES_MENU": "Menu de Pacotes", "SHOW_HIDDEN": "Mostrar ocultos", "SHOW_DELETE": "Mostrar excluir", "SHOW_UNSUPPORTED": "Mostrar não suportados", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Info da sobreposição", "SOFTWARE_UPDATE": "Atualizações", "UPDATE_ULTRAHAND": "Atualizar Ultrahand", - "UPDATE_LANGUAGES": "Atualizar idiomas", "SYSTEM": "Sistema", "DEVICE_INFO": "Info do dispositivo", "FIRMWARE": "Firmware", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Papel de parede ativado", "SOUND_SUPPORT_ENABLED": "Som ativado", "EXIT_OVERLAY_SYSTEM": "Sair do sistema de sobreposição", + "ULTRAHAND_ABOUT": "Ultrahand Overlay é um ecossistema de overlays personalizável para comandos, overlays, atalhos e interação avançada com o sistema.", + "ULTRAHAND_CREDITS_START": "Agradecimentos especiais a ", + "ULTRAHAND_CREDITS_END": " e muitos outros. ♥", "LOCAL_IP": "IP local", "WALLPAPER": "Papel de parede", "THEME": "Tema", + "SOUNDS": "Sons", "DEFAULT": "padrão", "ROOT_PACKAGE": "Pacote raiz", "SORT_PRIORITY": "Prioridade de ordenação", "OPTIONS": "Opções", "FAILED_TO_OPEN": "Falha ao abrir", "LAUNCH_COMBOS": "Combinações de inicialização", + "NOTIFICATIONS": "Notificações", + "NOTIFICATION_SETTINGS": "Configurações de notificações", + "SILENCE_NOTIFICATIONS": "Silenciar notificações", "STARTUP_NOTIFICATION": "Notificação ao iniciar", - "EXTERNAL_NOTIFICATIONS": "Notificações externas", - "SOUND_EFFECTS": "Efeitos sonoros", + "MAX_SLOTS": "Slots máx.", + "API_NOTIFICATIONS": "Notificações API", + "API_TOGGLE_HOTKEY": "Atalho API", + "DISMISS_NOTIFICATION": "Fechar notificação", + "API_TOGGLE": "Alternar API", + "CLICK": "clique", + "TAP": "toque", + "HOLD_FOR_4S": "manter 4s", "HAPTIC_FEEDBACK": "Vibração", "OPAQUE_SCREENSHOTS": "Capturas opacas", "ON": "Ligado", @@ -117,14 +129,13 @@ "BOOT_ENTRY": "Entrada de boot", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "136", - "SETTINGS_MENU": "Menu de configurações", - "SCRIPT_OVERLAY": "Sobreposição de script", + "SETTINGS_MENU": "Menu de config.", + "SCRIPT_OVERLAY": "Sobrep. de script", "STAR_FAVORITE": "Favorito", "APP_SETTINGS": "Config. do pacote", "ON_MAIN_MENU": "no menu principal", "ON_A_COMMAND": "em um comando", - "ON_OVERLAY_PACKAGE": "em sobreposição/pacote", + "ON_OVERLAY_PACKAGE": "em sobrep./pacote", "FEATURES": "Recursos", "SWIPE_TO_OPEN": "Deslize para abrir", "THEME_SETTINGS": "Configurações do tema", diff --git a/config/ultrahand/lang/ru.json b/config/ultrahand/lang/ru.json index d15dbca..024cb0a 100644 --- a/config/ultrahand/lang/ru.json +++ b/config/ultrahand/lang/ru.json @@ -13,7 +13,6 @@ "POLISH": "Польский", "SIMPLIFIED_CHINESE": "Упрощённый китайский", "TRADITIONAL_CHINESE": "Традиционный китайский", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Недоступно", "OVERLAYS": "Оверлеи", "OVERLAYS_ABBR": "Оверлеи", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Прочее", "MENU_SETTINGS": "Настройки меню", "USER_GUIDE": "Руководство", + "PACKAGES_MENU": "Меню пакетов", "SHOW_HIDDEN": "Показать скрытые", "SHOW_DELETE": "Показать удаление", "SHOW_UNSUPPORTED": "Показать неподдерживаемые", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Инфо оверлея", "SOFTWARE_UPDATE": "Обновления", "UPDATE_ULTRAHAND": "Обновить Ultrahand", - "UPDATE_LANGUAGES": "Обновить переводы", "SYSTEM": "Система", "DEVICE_INFO": "О устройстве", "FIRMWARE": "Прошивка", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Обои включены", "SOUND_SUPPORT_ENABLED": "Звук включён", "EXIT_OVERLAY_SYSTEM": "Выйти из оверлеев", + "ULTRAHAND_ABOUT": "Ultrahand Overlay — это настраиваемая экосистема оверлеев для команд, оверлеев, горячих клавиш и расширенного взаимодействия с системой.", + "ULTRAHAND_CREDITS_START": "Особая благодарность ", + "ULTRAHAND_CREDITS_END": " и многим другим. ♥", "LOCAL_IP": "Локальный IP", "WALLPAPER": "Обои", "THEME": "Тема", + "SOUNDS": "Звуки", "DEFAULT": "стандарт", "ROOT_PACKAGE": "Корневой пакет", "SORT_PRIORITY": "Приоритет сортировки", "OPTIONS": "Опции", "FAILED_TO_OPEN": "Не удалось открыть", "LAUNCH_COMBOS": "Комбо запуска", + "NOTIFICATIONS": "Уведомления", + "NOTIFICATION_SETTINGS": "Настройки уведомлений", + "SILENCE_NOTIFICATIONS": "Отключить уведомления", "STARTUP_NOTIFICATION": "Уведомление при запуске", - "EXTERNAL_NOTIFICATIONS": "Внешние уведомления", - "SOUND_EFFECTS": "Звуковые эффекты", + "MAX_SLOTS": "Макс. слоты", + "API_NOTIFICATIONS": "Уведомления API", + "API_TOGGLE_HOTKEY": "Горячая клавиша API", + "DISMISS_NOTIFICATION": "Закрыть уведомление", + "API_TOGGLE": "Переключить API", + "CLICK": "клик", + "TAP": "тап", + "HOLD_FOR_4S": "удерживать 4 с", "HAPTIC_FEEDBACK": "Виброотклик", "OPAQUE_SCREENSHOTS": "Непрозрачные скриншоты", "ON": "Вкл", @@ -105,8 +117,8 @@ "_TITLE": "Название", "_VERSION": "Версия", "_CREATOR": "Автор(ы)", - "_ABOUT": "О программе", - "_CREDITS": "Благодарности", + "_ABOUT": "О прг.", + "_CREDITS": "Спасибо", "OK": "ОК", "BACK": "Назад", "HIDE": "Скрыть", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Запись загрузки", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "177", "SETTINGS_MENU": "Меню настроек", "SCRIPT_OVERLAY": "Скрипт оверлея", "STAR_FAVORITE": "Избранное", diff --git a/config/ultrahand/lang/uk.json b/config/ultrahand/lang/uk.json index 4eb6a01..057e874 100644 --- a/config/ultrahand/lang/uk.json +++ b/config/ultrahand/lang/uk.json @@ -13,7 +13,6 @@ "POLISH": "Польська", "SIMPLIFIED_CHINESE": "Спрощена китайська", "TRADITIONAL_CHINESE": "Традиційна китайська", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "Недоступно", "OVERLAYS": "Оверлеї", "OVERLAYS_ABBR": "Оверлеї", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "Інше", "MENU_SETTINGS": "Налаштування меню", "USER_GUIDE": "Інструкція", + "PACKAGES_MENU": "Меню пакетів", "SHOW_HIDDEN": "Показати приховане", "SHOW_DELETE": "Показати видалення", "SHOW_UNSUPPORTED": "Показати непідтримуване", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "Інфо оверлея", "SOFTWARE_UPDATE": "Оновлення", "UPDATE_ULTRAHAND": "Оновити Ultrahand", - "UPDATE_LANGUAGES": "Оновити переклад", "SYSTEM": "Система", "DEVICE_INFO": "Про пристрій", "FIRMWARE": "Прошивка", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "Шпалери увімкнено", "SOUND_SUPPORT_ENABLED": "Звук увімкнено", "EXIT_OVERLAY_SYSTEM": "Вийти з оверлеїв", + "ULTRAHAND_ABOUT": "Ultrahand Overlay — це налаштовуваний екосистема оверлеїв для команд, оверлеїв, гарячих клавіш та розширеної взаємодії з системою.", + "ULTRAHAND_CREDITS_START": "Особлива подяка ", + "ULTRAHAND_CREDITS_END": " та багатьом іншим. ♥", "LOCAL_IP": "Локальний IP", "WALLPAPER": "Шпалери", "THEME": "Тема", + "SOUNDS": "Звуки", "DEFAULT": "стандарт", "ROOT_PACKAGE": "Кореневий пакет", "SORT_PRIORITY": "Пріоритет сортування", "OPTIONS": "Опції", "FAILED_TO_OPEN": "Не вдалося відкрити", "LAUNCH_COMBOS": "Комбо запуску", + "NOTIFICATIONS": "Сповіщення", + "NOTIFICATION_SETTINGS": "Налаштування сповіщень", + "SILENCE_NOTIFICATIONS": "Вимкнути сповіщення", "STARTUP_NOTIFICATION": "Сповіщення при запуску", - "EXTERNAL_NOTIFICATIONS": "Зовнішні сповіщення", - "SOUND_EFFECTS": "Звукові ефекти", + "MAX_SLOTS": "Макс. слоти", + "API_NOTIFICATIONS": "Сповіщення API", + "API_TOGGLE_HOTKEY": "Гаряча клавіша API", + "DISMISS_NOTIFICATION": "Закрити сповіщення", + "API_TOGGLE": "Перемкнути API", + "CLICK": "клік", + "TAP": "тап", + "HOLD_FOR_4S": "утримувати 4 с", "HAPTIC_FEEDBACK": "Вібровідгук", "OPAQUE_SCREENSHOTS": "Непрозорі скріншоти", "ON": "Увімк", @@ -105,7 +117,7 @@ "_TITLE": "Назва", "_VERSION": "Версія", "_CREATOR": "Автор(и)", - "_ABOUT": "Про програму", + "_ABOUT": "Про нас", "_CREDITS": "Подяки", "OK": "ОК", "BACK": "Назад", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "Запис завантаження", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "184", "SETTINGS_MENU": "Меню налаштувань", "SCRIPT_OVERLAY": "Скрипт оверлея", "STAR_FAVORITE": "Улюблене", diff --git a/config/ultrahand/lang/zh-cn.json b/config/ultrahand/lang/zh-cn.json index cc612dd..2dc3c9f 100644 --- a/config/ultrahand/lang/zh-cn.json +++ b/config/ultrahand/lang/zh-cn.json @@ -13,7 +13,6 @@ "POLISH": "波兰语", "SIMPLIFIED_CHINESE": "简体中文", "TRADITIONAL_CHINESE": "繁体中文", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "暂无选项", "OVERLAYS": "插件", "OVERLAYS_ABBR": "插件", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "其他", "MENU_SETTINGS": "菜单设置", "USER_GUIDE": "使用指南", + "PACKAGES_MENU": "插件包菜单", "SHOW_HIDDEN": "显示隐藏项", "SHOW_DELETE": "显示删除", "SHOW_UNSUPPORTED": "显示不支持项", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "插件信息", "SOFTWARE_UPDATE": "软件更新", "UPDATE_ULTRAHAND": "更新 Ultrahand", - "UPDATE_LANGUAGES": "更新语言包", "SYSTEM": "系统", "DEVICE_INFO": "设备信息", "FIRMWARE": "固件", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "壁纸已开启", "SOUND_SUPPORT_ENABLED": "音效已开启", "EXIT_OVERLAY_SYSTEM": "退出插件系统", + "ULTRAHAND_ABOUT": "Ultrahand Overlay 是一个可自定义的插件生态系统,用于命令、插件、快捷键以及高级系统交互。", + "ULTRAHAND_CREDITS_START": "特别感谢 ", + "ULTRAHAND_CREDITS_END": " 以及许多其他人。♥", "LOCAL_IP": "本地 IP", "WALLPAPER": "壁纸", "THEME": "主题", + "SOUNDS": "声音", "DEFAULT": "默认", "ROOT_PACKAGE": "根目录包", "SORT_PRIORITY": "排序优先级", "OPTIONS": "选项", "FAILED_TO_OPEN": "打开失败", "LAUNCH_COMBOS": "启动组合键", + "NOTIFICATIONS": "通知", + "NOTIFICATION_SETTINGS": "通知设置", + "SILENCE_NOTIFICATIONS": "静音通知", "STARTUP_NOTIFICATION": "启动通知", - "EXTERNAL_NOTIFICATIONS": "外部通知", - "SOUND_EFFECTS": "音效", + "MAX_SLOTS": "最大槽位", + "API_NOTIFICATIONS": "API 通知", + "API_TOGGLE_HOTKEY": "API 切换快捷键", + "DISMISS_NOTIFICATION": "关闭通知", + "API_TOGGLE": "切换 API", + "CLICK": "点击", + "TAP": "轻触", + "HOLD_FOR_4S": "长按 4 秒", "HAPTIC_FEEDBACK": "震动反馈", "OPAQUE_SCREENSHOTS": "不透明截图", "ON": "开", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "启动项", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "150", "SETTINGS_MENU": "设置菜单", "SCRIPT_OVERLAY": "脚本插件", "STAR_FAVORITE": "收藏", diff --git a/config/ultrahand/lang/zh-tw.json b/config/ultrahand/lang/zh-tw.json index 1d52713..340ea37 100644 --- a/config/ultrahand/lang/zh-tw.json +++ b/config/ultrahand/lang/zh-tw.json @@ -13,7 +13,6 @@ "POLISH": "波蘭語", "SIMPLIFIED_CHINESE": "簡體中文", "TRADITIONAL_CHINESE": "繁體中文", - "DEFAULT_CHAR_WIDTH": "0.33", "UNAVAILABLE_SELECTION": "暫無選項", "OVERLAYS": "外掛", "OVERLAYS_ABBR": "外掛", @@ -50,6 +49,7 @@ "MISCELLANEOUS": "其他", "MENU_SETTINGS": "選單設定", "USER_GUIDE": "使用指南", + "PACKAGES_MENU": "外掛包選單", "SHOW_HIDDEN": "顯示隱藏項", "SHOW_DELETE": "顯示刪除", "SHOW_UNSUPPORTED": "顯示不支援", @@ -65,7 +65,6 @@ "OVERLAY_INFO": "外掛資訊", "SOFTWARE_UPDATE": "軟體更新", "UPDATE_ULTRAHAND": "更新 Ultrahand", - "UPDATE_LANGUAGES": "更新語言包", "SYSTEM": "系統", "DEVICE_INFO": "裝置資訊", "FIRMWARE": "韌體", @@ -85,18 +84,31 @@ "WALLPAPER_SUPPORT_ENABLED": "桌布已開啟", "SOUND_SUPPORT_ENABLED": "音效已開啟", "EXIT_OVERLAY_SYSTEM": "退出外掛系統", + "ULTRAHAND_ABOUT": "Ultrahand Overlay 是一個可自訂的插件生態系統,支持命令、插件、快捷鍵和進階系統互動。", + "ULTRAHAND_CREDITS_START": "特別感謝 ", + "ULTRAHAND_CREDITS_END": " 以及許多其他人。♥", "LOCAL_IP": "本地 IP", "WALLPAPER": "桌布", "THEME": "主題", + "SOUNDS": "聲音", "DEFAULT": "預設", "ROOT_PACKAGE": "根目錄包", "SORT_PRIORITY": "排序優先級", "OPTIONS": "選項", "FAILED_TO_OPEN": "開啟失敗", "LAUNCH_COMBOS": "啟動組合鍵", + "NOTIFICATIONS": "通知", + "NOTIFICATION_SETTINGS": "通知設定", + "SILENCE_NOTIFICATIONS": "靜音通知", "STARTUP_NOTIFICATION": "啟動通知", - "EXTERNAL_NOTIFICATIONS": "外部通知", - "SOUND_EFFECTS": "音效", + "MAX_SLOTS": "最大槽位", + "API_NOTIFICATIONS": "API 通知", + "API_TOGGLE_HOTKEY": "API 切換快捷鍵", + "DISMISS_NOTIFICATION": "關閉通知", + "API_TOGGLE": "切換 API", + "CLICK": "點擊", + "TAP": "輕觸", + "HOLD_FOR_4S": "長按 4 秒", "HAPTIC_FEEDBACK": "震動回饋", "OPAQUE_SCREENSHOTS": "不透明截圖", "ON": "開", @@ -117,7 +129,6 @@ "BOOT_ENTRY": "啟動項目", "GAP_1": " ", "GAP_2": " ", - "USERGUIDE_OFFSET": "150", "SETTINGS_MENU": "設定選單", "SCRIPT_OVERLAY": "腳本外掛", "STAR_FAVORITE": "收藏", diff --git a/exosphere.ini b/exosphere.ini index 0cf5dbb..8d6f3bb 100644 --- a/exosphere.ini +++ b/exosphere.ini @@ -48,4 +48,5 @@ [exosphere] blank_prodinfo_sysmmc=1 -blank_prodinfo_emummc=1 \ No newline at end of file +blank_prodinfo_emummc=1 +enable_mem_mode=1 \ No newline at end of file diff --git a/hbmenu.nro b/hbmenu.nro index 92c6786..d234d0b 100644 Binary files a/hbmenu.nro and b/hbmenu.nro differ diff --git a/payload.bin b/payload.bin index 6644b14..4f91a56 100644 Binary files a/payload.bin and b/payload.bin differ diff --git a/switch/.overlays/FPSLocker.ovl b/switch/.overlays/FPSLocker.ovl index d2ee10e..c6bcfdd 100644 Binary files a/switch/.overlays/FPSLocker.ovl and b/switch/.overlays/FPSLocker.ovl differ diff --git a/switch/.overlays/Status-Monitor-Overlay.ovl b/switch/.overlays/Status-Monitor-Overlay.ovl index 8277319..1b9d59c 100644 Binary files a/switch/.overlays/Status-Monitor-Overlay.ovl and b/switch/.overlays/Status-Monitor-Overlay.ovl differ diff --git a/switch/.overlays/ovlSysmodules.ovl b/switch/.overlays/ovlSysmodules.ovl index 01ccfd8..78eb745 100644 Binary files a/switch/.overlays/ovlSysmodules.ovl and b/switch/.overlays/ovlSysmodules.ovl differ diff --git a/switch/.overlays/ovlmenu.ovl b/switch/.overlays/ovlmenu.ovl index dd7d728..cd5fffd 100644 Binary files a/switch/.overlays/ovlmenu.ovl and b/switch/.overlays/ovlmenu.ovl differ diff --git a/switch/.overlays/sys-clk-overlay.ovl b/switch/.overlays/sys-clk-overlay.ovl index b09bc89..d6a319e 100644 Binary files a/switch/.overlays/sys-clk-overlay.ovl and b/switch/.overlays/sys-clk-overlay.ovl differ diff --git a/switch/.packages/boot_package.ini b/switch/.packages/boot_package.ini index d9844ae..9a3cd07 100644 --- a/switch/.packages/boot_package.ini +++ b/switch/.packages/boot_package.ini @@ -1,16 +1,4 @@ [boot] -clear hex_sum_cache - -hex-by-swap /switch/.overlays/sys-clk-overlay.ovl 4D656D6F7279 52414D000000 -hex-by-swap /switch/.overlays/sys-clk-overlay.ovl 4D454D 52414D -hex-by-swap /switch/.overlays/sys-clk-overlay.ovl 446F206E6F74206F76657272696465 44656661756C740000000000000000 -hex-by-swap /switch/.overlays/sys-clk-overlay.ovl 7379732D636C6B2D6F630000000000000000 556C747261204F4320287379732D636C6B29 -hex-by-swap /switch/.overlays/sys-clk-overlay.ovl 7379732D636C6B0000000000000000000000 556C747261204F4320287379732D636C6B29 - - -cp /hbmenu.nro /switch/sphaira/sphaira.nro - - del '/atmosphere/config_templates/' del '/atmosphere/contents/00FF0000636C6BFF/toolbox.json' diff --git a/switch/DBI/DBI.nro b/switch/DBI/DBI.nro index e0349c9..253105b 100644 Binary files a/switch/DBI/DBI.nro and b/switch/DBI/DBI.nro differ diff --git a/switch/DBI/dbi.config b/switch/DBI/dbi.config index 2142677..53b30ef 100644 --- a/switch/DBI/dbi.config +++ b/switch/DBI/dbi.config @@ -56,8 +56,18 @@ DBIUpdateURL=https://github.com/Ultra-NX/Ultra-Resources/releases/download/Homeb DumpForwarders=false ; Do not show folder.jpg in file browser HideFolderJpg=true +ShowFolderImage=true Custom dns servers for http connections ;CustomDNS=8.8.8.8, 1.1.1.1 +; Try to allocate optimal socket buffer size +SmartNetworkConfig=true +; Auto save backup on DBI start interval in days. 0 - disable +AutoSaveBackupInterval=0 + +;Settings for put objects to album +[Album] +; Application for object +ApplicationId=0100000000001000 [Filtering] ; Apply filebrowser filter to directories @@ -65,6 +75,10 @@ FilterFolders=true ; Inherit filter in subfolders InheritFilter=false +[ActivityLog] +; Remove from list play sessions of deleted users +HideUnknownUsers=false + ; Visibility of main menu items [MainMenu] ; Browse and install files from SD card @@ -118,6 +132,10 @@ PatchUAC=false PatchScreenshot=false ; Patch restriction to video recording PatchVideoRec=false +; Patch required system version not only in cache, but also in nca (breaks signature) +ResetRequiredVersionInNCA=false +; Patch Master KeyGeneration if NCA file requires higher than current firmware +PatchMasterKeyGeneration=false ; MTP options [MTP] @@ -143,6 +161,8 @@ BufferSize=512 NewBufferTimeout=2000 ; Send Object_Removed event for files copied to Install storages AutoremoveInstalled=true +; Strict filter MTP devices with class 6/1/1. For some Xiaomi devices this should be set to false +InitiatorStrictClassFiltering=true ; FTP options [FTP] @@ -169,8 +189,7 @@ UseWaitAll=false Port=1234 ; Data read timeout (seconds) Timeout=3 -; Use connection pool -UseConnectionPool=false + ; Access point options [Access point] diff --git a/warmboot_mariko/wb_17.bin b/warmboot_mariko/wb_17.bin new file mode 100644 index 0000000..380aa7e Binary files /dev/null and b/warmboot_mariko/wb_17.bin differ