diff options
author | BobTheBob <32057864+BobTheBob9@users.noreply.github.com> | 2021-10-25 02:43:34 +0100 |
---|---|---|
committer | BobTheBob <32057864+BobTheBob9@users.noreply.github.com> | 2021-10-25 02:43:34 +0100 |
commit | ce9cb0134fefaa2bf5a3da0f9de15f013ab7dd27 (patch) | |
tree | 2a5f1a212c17677bb9166b7d4739bb730c2a9a67 /NorthstarDedicatedTest | |
parent | 7e1f1d8270dbdfbe2374e9da664cea2e00dfd465 (diff) | |
download | NorthstarLauncher-ce9cb0134fefaa2bf5a3da0f9de15f013ab7dd27.tar.gz NorthstarLauncher-ce9cb0134fefaa2bf5a3da0f9de15f013ab7dd27.zip |
changes to materialsystem patches, still don't fully work
Diffstat (limited to 'NorthstarDedicatedTest')
-rw-r--r-- | NorthstarDedicatedTest/dedicatedmaterialsystem.cpp | 46 |
1 files changed, 12 insertions, 34 deletions
diff --git a/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp b/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp index 67e5db94..327f2c1f 100644 --- a/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp +++ b/NorthstarDedicatedTest/dedicatedmaterialsystem.cpp @@ -66,46 +66,24 @@ void InitialiseDedicatedMaterialSystem(HMODULE baseAddress) // these don't work, they cause game to hang on rpak init, needs reworking { // materialsystem rpak type: texture - char* ptr = (char*)baseAddress + 0x2B00; + char* ptr = (char*)baseAddress + 0x2B3A; TempReadWrite rw(ptr); - // make it return 0 - // mov rax,0 - *ptr = 0x48; - *(ptr + 1) = (char)0xB8; - *(ptr + 2) = (char)0x00; + // je=>jmp + *ptr = (char)0xE9; + *(ptr + 1) = (char)0x48; + *(ptr + 2) = (char)0x02; *(ptr + 3) = (char)0x00; *(ptr + 4) = (char)0x00; - *(ptr + 5) = (char)0x00; - *(ptr + 6) = (char)0x00; - *(ptr + 7) = (char)0x00; - *(ptr + 8) = (char)0x00; - *(ptr + 9) = (char)0x00; - - // ret - *(ptr + 10) = (char)0xC3; } { // materialsystem rpak type: material - char* ptr = (char*)baseAddress + 0x50AA0; + char* ptr = (char*)baseAddress + 0x50AD4; TempReadWrite rw(ptr); - // make it return 0 - // mov rax,0 - *ptr = 0x48; - *(ptr + 1) = (char)0xB8; - *(ptr + 2) = (char)0x00; - *(ptr + 3) = (char)0x00; - *(ptr + 4) = (char)0x00; - *(ptr + 5) = (char)0x00; - *(ptr + 6) = (char)0x00; - *(ptr + 7) = (char)0x00; - *(ptr + 8) = (char)0x00; - *(ptr + 9) = (char)0x00; - - // ret - *(ptr + 10) = (char)0xC3; + // je=>jmp + *ptr = (char)0xEB; } { @@ -161,13 +139,13 @@ void* RegisterRpakTypeHook(RpakTypeDefinition* rpakStruct, unsigned int a1, unsi // make sure this prints right char magicName[5]; memcpy(magicName, &rpakStruct->magic, 4); - magicName[4] = 0; + magicName[4] = 0; // null terminator - spdlog::info("rpak type {} {} registered {} {}", magicName, rpakStruct->longName, a1, a2); + spdlog::info("rpak type {} {} registered", magicName, rpakStruct->longName); // reregister rpak types that aren't registered on a windowless dedi - if (IsDedicated() && DisableDedicatedWindowCreation() && rpakStruct->magic == 0x64636C72) // rlcd, this one is registered last - ((RegisterMaterialSystemRpakTypes)((char*)GetModuleHandleA("materialsystem_dx11.dll") + 0x22A0))(); // slightly hellish call + if (IsDedicated() && DisableDedicatedWindowCreation() && rpakStruct->magic == 0x64636C72) // rlcd magic, this one is registered last + ((RegisterMaterialSystemRpakTypes)((char*)GetModuleHandleA("materialsystem_dx11.dll") + 0x22A0))(); // slightly hellish call, registers materialsystem rpak types return RegisterRpakType(rpakStruct, a1, a2); } |