Skip to content

Commit

Permalink
Alternate version checker for head/controller aiming
Browse files Browse the repository at this point in the history
  • Loading branch information
praydog committed Apr 23, 2023
1 parent 513610c commit 1b382de
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 43 deletions.
32 changes: 32 additions & 0 deletions shared/sdk/Utility.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#include <regex>

#include <utility/Scan.hpp>
#include <utility/Module.hpp>
#include <utility/Emulation.hpp>
Expand Down Expand Up @@ -127,4 +129,34 @@ bool check_file_version(uint32_t ms, uint32_t ls) {

return false;
}

std::optional<std::wstring> search_for_version(const std::wstring& input) {
std::wregex regex_pattern(LR"(\+\+ue[4|5].*([4|5]\.\d+))", std::regex::icase);
std::wsmatch matches;

if (std::regex_search(input, matches, regex_pattern)) {
return matches[1].str();
}

return std::nullopt;
}

std::optional<std::wstring> search_for_version(HMODULE h) {
const auto module_size = utility::get_module_size(h).value_or(0);
const auto module_start = (const wchar_t*)h;

for (size_t i = 0; i < module_size / 2; ++i) try {
const wchar_t* ptr = module_start + i;

if (ptr[0] == L'+' && ptr[1] == L'+') {
if (auto version = search_for_version(ptr)) {
return version;
}
}
} catch(...) {

}

return std::nullopt;
}
}
3 changes: 3 additions & 0 deletions shared/sdk/Utility.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,7 @@ bool is_vfunc_pattern(uintptr_t addr, std::string_view pattern);

VS_FIXEDFILEINFO get_file_version_info();
bool check_file_version(uint32_t ms, uint32_t ls);

std::optional<std::wstring> search_for_version(const std::string& input);
std::optional<std::wstring> search_for_version(HMODULE h);
}
90 changes: 47 additions & 43 deletions src/mods/vr/IXRTrackingSystemHook.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <spdlog/spdlog.h>
#include <utility/Scan.hpp>
#include <utility/Module.hpp>
#include <utility/String.hpp>

#include "utility/Logging.hpp"

Expand All @@ -15,65 +16,66 @@
#include "IXRTrackingSystemHook.hpp"

detail::IXRTrackingSystemVT& get_tracking_system_vtable() {
const auto str_version = utility::narrow(sdk::search_for_version(utility::get_executable()).value_or(L"0.00"));
const auto version = sdk::get_file_version_info();

// >= 5.1
if (version.dwFileVersionMS >= 0x50001) {
if (version.dwFileVersionMS == 0x50001 || str_version.starts_with("5.1")) {
return ue5_1::IXRTrackingSystemVT::get();
}

// >= 5.0
if (version.dwFileVersionMS == 0x50000) {
if (version.dwFileVersionMS == 0x50000 || str_version.starts_with("5.0")) {
return ue5_00::IXRTrackingSystemVT::get();
}

// 4.27
if (version.dwFileVersionMS == 0x4001B) {
if (version.dwFileVersionMS == 0x4001B || str_version.starts_with("4.27")) {
return ue4_27::IXRTrackingSystemVT::get();
}

// 4.26
if (version.dwFileVersionMS == 0x4001A) {
if (version.dwFileVersionMS == 0x4001A || str_version.starts_with("4.26")) {
return ue4_26::IXRTrackingSystemVT::get();
}

// 4.25
if (version.dwFileVersionMS == 0x40019) {
if (version.dwFileVersionMS == 0x40019 || str_version.starts_with("4.25")) {
return ue4_25::IXRTrackingSystemVT::get();
}

// 4.24
if (version.dwFileVersionMS == 0x40018) {
if (version.dwFileVersionMS == 0x40018 || str_version.starts_with("4.24")) {
return ue4_24::IXRTrackingSystemVT::get();
}

// 4.23
if (version.dwFileVersionMS == 0x40017) {
if (version.dwFileVersionMS == 0x40017 || str_version.starts_with("4.23")) {
return ue4_23::IXRTrackingSystemVT::get();
}

// 4.22
if (version.dwFileVersionMS == 0x40016) {
if (version.dwFileVersionMS == 0x40016 || str_version.starts_with("4.22")) {
return ue4_22::IXRTrackingSystemVT::get();
}

// 4.21
if (version.dwFileVersionMS == 0x40015) {
if (version.dwFileVersionMS == 0x40015 || str_version.starts_with("4.21")) {
return ue4_21::IXRTrackingSystemVT::get();
}

// 4.20
if (version.dwFileVersionMS == 0x40014) {
if (version.dwFileVersionMS == 0x40014 || str_version.starts_with("4.20")) {
return ue4_20::IXRTrackingSystemVT::get();
}

// 4.19
if (version.dwFileVersionMS == 0x40013) {
if (version.dwFileVersionMS == 0x40013 || str_version.starts_with("4.19")) {
return ue4_19::IXRTrackingSystemVT::get();
}

// 4.18
if (version.dwFileVersionMS == 0x40012) {
if (version.dwFileVersionMS == 0x40012 || str_version.starts_with("4.18")) {
return ue4_18::IXRTrackingSystemVT::get();
}

Expand All @@ -83,65 +85,66 @@ detail::IXRTrackingSystemVT& get_tracking_system_vtable() {


detail::IXRCameraVT& get_camera_vtable() {
const auto str_version = utility::narrow(sdk::search_for_version(utility::get_executable()).value_or(L"0.00"));
const auto version = sdk::get_file_version_info();

// >= 5.1
if (version.dwFileVersionMS >= 0x50001) {
if (version.dwFileVersionMS == 0x50001 || str_version.starts_with("5.1")) {
return ue5_1::IXRCameraVT::get();
}

// >= 5.0
if (version.dwFileVersionMS == 0x50000) {
if (version.dwFileVersionMS == 0x50000 || str_version.starts_with("5.0")) {
return ue5_00::IXRCameraVT::get();
}

// 4.27
if (version.dwFileVersionMS == 0x4001B) {
if (version.dwFileVersionMS == 0x4001B || str_version.starts_with("4.27")) {
return ue4_27::IXRCameraVT::get();
}

// 4.26
if (version.dwFileVersionMS == 0x4001A) {
if (version.dwFileVersionMS == 0x4001A || str_version.starts_with("4.26")) {
return ue4_26::IXRCameraVT::get();
}

// 4.25
if (version.dwFileVersionMS == 0x40019) {
if (version.dwFileVersionMS == 0x40019 || str_version.starts_with("4.25")) {
return ue4_25::IXRCameraVT::get();
}

// 4.24
if (version.dwFileVersionMS == 0x40018) {
if (version.dwFileVersionMS == 0x40018 || str_version.starts_with("4.24")) {
return ue4_24::IXRCameraVT::get();
}

// 4.23
if (version.dwFileVersionMS == 0x40017) {
if (version.dwFileVersionMS == 0x40017 || str_version.starts_with("4.23")) {
return ue4_23::IXRCameraVT::get();
}

// 4.22
if (version.dwFileVersionMS == 0x40016) {
if (version.dwFileVersionMS == 0x40016 || str_version.starts_with("4.22")) {
return ue4_22::IXRCameraVT::get();
}

// 4.21
if (version.dwFileVersionMS == 0x40015) {
if (version.dwFileVersionMS == 0x40015 || str_version.starts_with("4.21")) {
return ue4_21::IXRCameraVT::get();
}

// 4.20
if (version.dwFileVersionMS == 0x40014) {
if (version.dwFileVersionMS == 0x40014 || str_version.starts_with("4.20")) {
return ue4_20::IXRCameraVT::get();
}

// 4.19
if (version.dwFileVersionMS == 0x40013) {
if (version.dwFileVersionMS == 0x40013 || str_version.starts_with("4.19")) {
return ue4_19::IXRCameraVT::get();
}

// 4.18
if (version.dwFileVersionMS == 0x40012) {
if (version.dwFileVersionMS == 0x40012 || str_version.starts_with("4.18")) {
return ue4_18::IXRCameraVT::get();
}

Expand All @@ -150,100 +153,101 @@ detail::IXRCameraVT& get_camera_vtable() {
}

detail::IHeadMountedDisplayVT& get_hmd_vtable() {
const auto str_version = utility::narrow(sdk::search_for_version(utility::get_executable()).value_or(L"0.00"));
const auto version = sdk::get_file_version_info();

// >= 5.1
if (version.dwFileVersionMS >= 0x50001) {
if (version.dwFileVersionMS == 0x50001 || str_version.starts_with("5.1")) {
return ue5_1::IHeadMountedDisplayVT::get();
}

// >= 5.0
if (version.dwFileVersionMS == 0x50000) {
if (version.dwFileVersionMS == 0x50000 || str_version.starts_with("5.0")) {
return ue5_00::IHeadMountedDisplayVT::get();
}

// 4.27
if (version.dwFileVersionMS == 0x4001B) {
if (version.dwFileVersionMS == 0x4001B || str_version.starts_with("4.27")) {
return ue4_27::IHeadMountedDisplayVT::get();
}

// 4.26
if (version.dwFileVersionMS == 0x4001A) {
if (version.dwFileVersionMS == 0x4001A || str_version.starts_with("4.26")) {
return ue4_26::IHeadMountedDisplayVT::get();
}

// 4.25
if (version.dwFileVersionMS == 0x40019) {
if (version.dwFileVersionMS == 0x40019 || str_version.starts_with("4.25")) {
return ue4_25::IHeadMountedDisplayVT::get();
}

// 4.24
if (version.dwFileVersionMS == 0x40018) {
if (version.dwFileVersionMS == 0x40018 || str_version.starts_with("4.24")) {
return ue4_24::IHeadMountedDisplayVT::get();
}

// 4.23
if (version.dwFileVersionMS == 0x40017) {
if (version.dwFileVersionMS == 0x40017 || str_version.starts_with("4.23")) {
return ue4_23::IHeadMountedDisplayVT::get();
}

// 4.22
if (version.dwFileVersionMS == 0x40016) {
if (version.dwFileVersionMS == 0x40016 || str_version.starts_with("4.22")) {
return ue4_22::IHeadMountedDisplayVT::get();
}

// 4.21
if (version.dwFileVersionMS == 0x40015) {
if (version.dwFileVersionMS == 0x40015 || str_version.starts_with("4.21")) {
return ue4_21::IHeadMountedDisplayVT::get();
}

// 4.20
if (version.dwFileVersionMS == 0x40014) {
if (version.dwFileVersionMS == 0x40014 || str_version.starts_with("4.20")) {
return ue4_20::IHeadMountedDisplayVT::get();
}

// 4.19
if (version.dwFileVersionMS == 0x40013) {
if (version.dwFileVersionMS == 0x40013 || str_version.starts_with("4.19")) {
return ue4_19::IHeadMountedDisplayVT::get();
}

// 4.18
if (version.dwFileVersionMS == 0x40012) {
if (version.dwFileVersionMS == 0x40012 || str_version.starts_with("4.18")) {
return ue4_18::IHeadMountedDisplayVT::get();
}

// 4.17
if (version.dwFileVersionMS == 0x40011) {
if (version.dwFileVersionMS == 0x40011 || str_version.starts_with("4.17")) {
return ue4_17::IHeadMountedDisplayVT::get();
}

// 4.16
if (version.dwFileVersionMS == 0x40010) {
if (version.dwFileVersionMS == 0x40010 || str_version.starts_with("4.16")) {
return ue4_16::IHeadMountedDisplayVT::get();
}

// 4.15
if (version.dwFileVersionMS == 0x4000F) {
if (version.dwFileVersionMS == 0x4000F || str_version.starts_with("4.15")) {
return ue4_15::IHeadMountedDisplayVT::get();
}

// 4.14
if (version.dwFileVersionMS == 0x4000E) {
if (version.dwFileVersionMS == 0x4000E || str_version.starts_with("4.14")) {
return ue4_14::IHeadMountedDisplayVT::get();
}

// 4.13
if (version.dwFileVersionMS == 0x4000D) {
if (version.dwFileVersionMS == 0x4000D || str_version.starts_with("4.13")) {
return ue4_13::IHeadMountedDisplayVT::get();
}

// 4.12
if (version.dwFileVersionMS == 0x4000C) {
if (version.dwFileVersionMS == 0x4000C || str_version.starts_with("4.12")) {
return ue4_12::IHeadMountedDisplayVT::get();
}

// 4.11
if (version.dwFileVersionMS == 0x4000B) {
if (version.dwFileVersionMS == 0x4000B || str_version.starts_with("4.11")) {
return ue4_11::IHeadMountedDisplayVT::get();
}

Expand Down

0 comments on commit 1b382de

Please sign in to comment.