Skip to content

Commit d294aa7

Browse files
authored
MHWILDS: Fix pak loading for v1.041 (#1538)
* Fix PAK loading * Up * Up * Remove leftover
1 parent 6e28fb1 commit d294aa7

1 file changed

Lines changed: 37 additions & 3 deletions

File tree

src/mods/IntegrityCheckBypass.cpp

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -649,8 +649,29 @@ void IntegrityCheckBypass::patch_version_hook(safetyhook::Context& context) {
649649
// THEY STORE PATCH VERSION INSIDE SOMEWHERE NOW! And only load until that patch version then dont load no more paks
650650
spdlog::info("[IntegrityCheckBypass]: patch_version_hook called!");
651651

652+
uint64_t current_patch_version = 0;
653+
switch (s_patch_version_reg_index) {
654+
case NDR_RAX: current_patch_version = context.rax; break;
655+
case NDR_RCX: current_patch_version = context.rcx; break;
656+
case NDR_RDX: current_patch_version = context.rdx; break;
657+
case NDR_RBX: current_patch_version = context.rbx; break;
658+
case NDR_RSP: current_patch_version = context.rsp; break;
659+
case NDR_RBP: current_patch_version = context.rbp; break;
660+
case NDR_RSI: current_patch_version = context.rsi; break;
661+
case NDR_RDI: current_patch_version = context.rdi; break;
662+
case NDR_R8: current_patch_version = context.r8; break;
663+
case NDR_R9: current_patch_version = context.r9; break;
664+
case NDR_R10: current_patch_version = context.r10; break;
665+
case NDR_R11: current_patch_version = context.r11; break;
666+
case NDR_R12: current_patch_version = context.r12; break;
667+
case NDR_R13: current_patch_version = context.r13; break;
668+
case NDR_R14: current_patch_version = context.r14; break;
669+
case NDR_R15: current_patch_version = context.r15; break;
670+
default: current_patch_version = context.rax; break; // fallback
671+
}
672+
652673
// Scan for amount of paks. Get exe directory. To be honest set this to 9999 is okay, but i feel like it might take a long time
653-
int file_count_result = std::max<int>(scan_patch_files_count(), context.rax);
674+
int file_count_result = std::max<int>(scan_patch_files_count(), current_patch_version);
654675

655676
switch (s_patch_version_reg_index) {
656677
case NDR_RAX:
@@ -854,7 +875,20 @@ void IntegrityCheckBypass::restore_unencrypted_paks() {
854875

855876
// If this breaks... we'll fix it!
856877
const auto game = utility::get_executable();
857-
const auto sha3_code_start = utility::scan(game, "C5 F8 57 C0 C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 44 24 ? 48");
878+
879+
std::vector<std::string> possible_patterns = {
880+
"C5 F8 57 C0 C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 44 24 ? 48",
881+
"C5 F8 57 C0 C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? C5 FC 11 84 24 ? ? ? ? 48 C1 E9 10", // MHWILDS v1.041
882+
};
883+
884+
std::optional<uintptr_t> sha3_code_start;
885+
886+
for (const auto& pattern : possible_patterns) {
887+
sha3_code_start = utility::scan(game, pattern);
888+
if (sha3_code_start) {
889+
break;
890+
}
891+
}
858892

859893
if (!sha3_code_start) {
860894
spdlog::error("[IntegrityCheckBypass]: Could not find sha3_rsa_code_start!");
@@ -877,7 +911,7 @@ void IntegrityCheckBypass::restore_unencrypted_paks() {
877911

878912
spdlog::info("[IntegrityCheckBypass]: Created sha3_rsa_code_midhook!");
879913

880-
#ifdef MHWILDS
914+
#if defined(MHWILDS) || defined(MHSTORIES3)
881915
const auto pak_load_check_start = utility::scan(game, "41 57 41 56 41 55 41 54 56 57 55 53 48 81 EC ? ? ? ? 48 89 CE 48 8B 05 ? ? ? ? 48 31 E0 48 89 84 24 ? ? ? ? 48 8B 81 ? ? ? ? 48 C1 E8 10");
882916

883917
if (pak_load_check_start) {

0 commit comments

Comments
 (0)