From f9bc3c9d1834cb8bd5f872b749b057c33e8b0102 Mon Sep 17 00:00:00 2001
From: BobTheBob <32057864+BobTheBob9@users.noreply.github.com>
Date: Wed, 24 Aug 2022 00:32:31 +0100
Subject: Adjust folder structure (#242)
* Adjust folder structure
* change launcher directory name
---
LauncherInjector/LauncherInjector.vcxproj | 104 ------
LauncherInjector/LauncherInjector.vcxproj.filters | 37 --
LauncherInjector/main.cpp | 407 ----------------------
LauncherInjector/ns_icon.ico | Bin 1441814 -> 0 bytes
LauncherInjector/resource1.h | 16 -
LauncherInjector/resources.rc | 111 ------
6 files changed, 675 deletions(-)
delete mode 100644 LauncherInjector/LauncherInjector.vcxproj
delete mode 100644 LauncherInjector/LauncherInjector.vcxproj.filters
delete mode 100644 LauncherInjector/main.cpp
delete mode 100644 LauncherInjector/ns_icon.ico
delete mode 100644 LauncherInjector/resource1.h
delete mode 100644 LauncherInjector/resources.rc
(limited to 'LauncherInjector')
diff --git a/LauncherInjector/LauncherInjector.vcxproj b/LauncherInjector/LauncherInjector.vcxproj
deleted file mode 100644
index ae49b165..00000000
--- a/LauncherInjector/LauncherInjector.vcxproj
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- 16.0
- Win32Proj
- {0ea82cb0-53fe-4d4c-96df-47fa970513d0}
- LauncherInjector
- 10.0
- NorthstarLauncher
-
-
-
- Application
- true
- v143
- Unicode
-
-
- Application
- false
- v143
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
- false
-
-
-
- Level3
- true
- _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- stdcpp20
- /F8000000 %(AdditionalOptions)
-
-
- Console
- true
- shlwapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- 8000000
-
-
-
-
- Level3
- true
- true
- true
- NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- stdcpp20
- /F8000000 %(AdditionalOptions)
-
-
- Console
- true
- true
- true
- shlwapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- 8000000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/LauncherInjector/LauncherInjector.vcxproj.filters b/LauncherInjector/LauncherInjector.vcxproj.filters
deleted file mode 100644
index 87e25fa8..00000000
--- a/LauncherInjector/LauncherInjector.vcxproj.filters
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- Source Files
-
-
-
-
- Header Files
-
-
-
-
- Resource Files
-
-
-
-
- Resource Files
-
-
-
\ No newline at end of file
diff --git a/LauncherInjector/main.cpp b/LauncherInjector/main.cpp
deleted file mode 100644
index 1311759d..00000000
--- a/LauncherInjector/main.cpp
+++ /dev/null
@@ -1,407 +0,0 @@
-#define WIN32_LEAN_AND_MEAN
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-namespace fs = std::filesystem;
-
-extern "C"
-{
- __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
- __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
-}
-
-HMODULE hLauncherModule;
-HMODULE hHookModule;
-HMODULE hTier0Module;
-
-wchar_t exePath[4096];
-wchar_t buffer[8192];
-
-bool noLoadPlugins = false;
-
-DWORD GetProcessByName(std::wstring processName)
-{
- HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
-
- PROCESSENTRY32 processSnapshotEntry = {0};
- processSnapshotEntry.dwSize = sizeof(PROCESSENTRY32);
-
- if (snapshot == INVALID_HANDLE_VALUE)
- return 0;
-
- if (!Process32First(snapshot, &processSnapshotEntry))
- return 0;
-
- while (Process32Next(snapshot, &processSnapshotEntry))
- {
- if (!wcscmp(processSnapshotEntry.szExeFile, processName.c_str()))
- {
- CloseHandle(snapshot);
- return processSnapshotEntry.th32ProcessID;
- }
- }
-
- CloseHandle(snapshot);
- return 0;
-}
-
-bool GetExePathWide(wchar_t* dest, DWORD destSize)
-{
- if (!dest)
- return NULL;
- if (destSize < MAX_PATH)
- return NULL;
-
- DWORD length = GetModuleFileNameW(NULL, dest, destSize);
- return length && PathRemoveFileSpecW(dest);
-}
-
-FARPROC GetLauncherMain()
-{
- static FARPROC Launcher_LauncherMain;
- if (!Launcher_LauncherMain)
- Launcher_LauncherMain = GetProcAddress(hLauncherModule, "LauncherMain");
- return Launcher_LauncherMain;
-}
-
-void LibraryLoadError(DWORD dwMessageId, const wchar_t* libName, const wchar_t* location)
-{
- char text[8192];
- std::string message = std::system_category().message(dwMessageId);
-
- sprintf_s(
- text,
- "Failed to load the %ls at \"%ls\" (%lu):\n\n%hs\n\nMake sure you followed the Northstar installation instructions carefully "
- "before reaching out for help.",
- libName,
- location,
- dwMessageId,
- message.c_str());
-
- if (dwMessageId == 126 && std::filesystem::exists(location))
- {
- sprintf_s(
- text,
- "%s\n\nThe file at the specified location DOES exist, so this error indicates that one of its *dependencies* failed to be "
- "found.\n\nTry the following steps:\n1. Install Visual C++ 2022 Redistributable: "
- "https://aka.ms/vs/17/release/vc_redist.x64.exe\n2. Repair game files",
- text);
- }
- else if (!fs::exists("Titanfall2.exe") && (fs::exists("..\\Titanfall2.exe") || fs::exists("..\\..\\Titanfall2.exe")))
- {
- auto curDir = std::filesystem::current_path().filename().string();
- auto aboveDir = std::filesystem::current_path().parent_path().filename().string();
- sprintf_s(
- text,
- "%s\n\nWe detected that in your case you have extracted the files into a *subdirectory* of your Titanfall 2 "
- "installation.\nPlease move all the files and folders from current folder (\"%s\") into the Titanfall 2 installation directory "
- "just above (\"%s\").\n\nPlease try out the above steps by yourself before reaching out to the community for support.",
- text,
- curDir.c_str(),
- aboveDir.c_str());
- }
- else if (!fs::exists("Titanfall2.exe"))
- {
- sprintf_s(
- text,
- "%s\n\nRemember: you need to unpack the contents of this archive into your Titanfall 2 game installation directory, not just "
- "to any random folder.",
- text);
- }
- else if (fs::exists("Titanfall2.exe"))
- {
- sprintf_s(
- text,
- "%s\n\nTitanfall2.exe has been found in the current directory: is the game installation corrupted or did you not unpack all "
- "Northstar files here?",
- text);
- }
-
- MessageBoxA(GetForegroundWindow(), text, "Northstar Launcher Error", 0);
-}
-
-void EnsureOriginStarted()
-{
- if (GetProcessByName(L"Origin.exe") || GetProcessByName(L"EADesktop.exe"))
- return; // already started
-
- // unpacked exe will crash if origin isn't open on launch, so launch it
- // get origin path from registry, code here is reversed from OriginSDK.dll
- HKEY key;
- if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Origin", 0, KEY_READ, &key) != ERROR_SUCCESS)
- {
- MessageBoxA(0, "Error: failed reading Origin path!", "Northstar Launcher Error", MB_OK);
- return;
- }
-
- char originPath[520];
- DWORD originPathLength = 520;
- if (RegQueryValueExA(key, "ClientPath", 0, 0, (LPBYTE)&originPath, &originPathLength) != ERROR_SUCCESS)
- {
- MessageBoxA(0, "Error: failed reading Origin path!", "Northstar Launcher Error", MB_OK);
- return;
- }
-
- printf("[*] Starting Origin...\n");
-
- PROCESS_INFORMATION pi;
- memset(&pi, 0, sizeof(pi));
- STARTUPINFO si;
- memset(&si, 0, sizeof(si));
- si.cb = sizeof(STARTUPINFO);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_MINIMIZE;
- CreateProcessA(
- originPath,
- (char*)"",
- NULL,
- NULL,
- false,
- CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_PROCESS_GROUP,
- NULL,
- NULL,
- (LPSTARTUPINFOA)&si,
- &pi);
-
- printf("[*] Waiting for Origin...\n");
-
- // wait for origin to be ready, this process is created when origin is ready enough to launch game without any errors
- while (!GetProcessByName(L"OriginClientService.exe") && !GetProcessByName(L"EADesktop.exe"))
- Sleep(200);
-
- CloseHandle(pi.hProcess);
- CloseHandle(pi.hThread);
-}
-
-void PrependPath()
-{
- wchar_t* pPath;
- size_t len;
- errno_t err = _wdupenv_s(&pPath, &len, L"PATH");
- if (!err)
- {
- swprintf_s(buffer, L"PATH=%s\\bin\\x64_retail\\;%s", exePath, pPath);
- auto result = _wputenv(buffer);
- if (result == -1)
- {
- MessageBoxW(
- GetForegroundWindow(),
- L"Warning: could not prepend the current directory to app's PATH environment variable. Something may break because of "
- L"that.",
- L"Northstar Launcher Warning",
- 0);
- }
- free(pPath);
- }
- else
- {
- MessageBoxW(
- GetForegroundWindow(),
- L"Warning: could not get current PATH environment variable in order to prepend the current directory to it. Something may "
- L"break because of that.",
- L"Northstar Launcher Warning",
- 0);
- }
-}
-
-bool ShouldLoadNorthstar(int argc, char* argv[])
-{
- bool loadNorthstar = true;
- for (int i = 0; i < argc; i++)
- if (!strcmp(argv[i], "-vanilla"))
- loadNorthstar = false;
-
- if (!loadNorthstar)
- return loadNorthstar;
-
- auto runNorthstarFile = std::ifstream("run_northstar.txt");
- if (runNorthstarFile)
- {
- std::stringstream runNorthstarFileBuffer;
- runNorthstarFileBuffer << runNorthstarFile.rdbuf();
- runNorthstarFile.close();
- if (runNorthstarFileBuffer.str().starts_with("0"))
- loadNorthstar = false;
- }
- return loadNorthstar;
-}
-
-bool LoadNorthstar()
-{
- FARPROC Hook_Init = nullptr;
- {
- swprintf_s(buffer, L"%s\\Northstar.dll", exePath);
- hHookModule = LoadLibraryExW(buffer, 0, 8u);
- if (hHookModule)
- Hook_Init = GetProcAddress(hHookModule, "InitialiseNorthstar");
- if (!hHookModule || Hook_Init == nullptr)
- {
- LibraryLoadError(GetLastError(), L"Northstar.dll", buffer);
- return false;
- }
- }
- ((bool (*)())Hook_Init)();
-
- FARPROC LoadPlugins = nullptr;
- if (!noLoadPlugins)
- {
- LoadPlugins = GetProcAddress(hHookModule, "LoadPlugins");
- if (!hHookModule || LoadPlugins == nullptr)
- {
- printf("Failed to get function pointer to LoadPlugins of Northstar.dll\n");
- LibraryLoadError(GetLastError(), L"Northstar.dll", buffer);
- return false;
- }
- ((bool (*)())LoadPlugins)();
- }
-
- return true;
-}
-
-HMODULE LoadDediStub(const char* name)
-{
- // this works because materialsystem_dx11.dll uses relative imports, and even a DLL loaded with an absolute path will take precedence
- printf("[*] Loading %s\n", name);
- swprintf_s(buffer, L"%s\\bin\\x64_dedi\\%hs", exePath, name);
- HMODULE h = LoadLibraryExW(buffer, 0, LOAD_WITH_ALTERED_SEARCH_PATH);
- if (!h)
- {
- wprintf(L"[*] Failed to load stub %hs from \"%ls\": %hs\n", name, buffer, std::system_category().message(GetLastError()).c_str());
- }
- return h;
-}
-
-int main(int argc, char* argv[])
-{
-
- if (!GetExePathWide(exePath, sizeof(exePath)))
- {
- MessageBoxA(
- GetForegroundWindow(),
- "Failed getting game directory.\nThe game cannot continue and has to exit.",
- "Northstar Launcher Error",
- 0);
- return 1;
- }
-
- bool noOriginStartup = false;
- bool dedicated = false;
- bool nostubs = false;
-
- for (int i = 0; i < argc; i++)
- if (!strcmp(argv[i], "-noOriginStartup"))
- noOriginStartup = true;
- else if (!strcmp(argv[i], "-dedicated")) // also checked by Northstar.dll
- dedicated = true;
- else if (!strcmp(argv[i], "-nostubs"))
- nostubs = true;
- else if (!strcmp(argv[i], "-noplugins"))
- noLoadPlugins = true;
-
- if (!noOriginStartup && !dedicated)
- {
- EnsureOriginStarted();
- }
-
- if (dedicated && !nostubs)
- {
- printf("[*] Loading stubs\n");
- HMODULE gssao, gtxaa, d3d11;
- if (!(gssao = GetModuleHandleA("GFSDK_SSAO.win64.dll")) && !(gtxaa = GetModuleHandleA("GFSDK_TXAA.win64.dll")) &&
- !(d3d11 = GetModuleHandleA("d3d11.dll")))
- {
- if (!(gssao = LoadDediStub("GFSDK_SSAO.win64.dll")) || !(gtxaa = LoadDediStub("GFSDK_TXAA.win64.dll")) ||
- !(d3d11 = LoadDediStub("d3d11.dll")))
- {
- if ((!gssao || FreeLibrary(gssao)) && (!gtxaa || FreeLibrary(gtxaa)) && (!d3d11 || FreeLibrary(d3d11)))
- {
- printf("[*] WARNING: Failed to load d3d11/gfsdk stubs from bin/x64_dedi. "
- "The stubs have been unloaded and the original libraries will be used instead.\n");
- }
- else
- {
- // this is highly unlikely
- MessageBoxA(
- GetForegroundWindow(),
- "Failed to load one or more stubs, but could not unload them either.\n"
- "The game cannot continue and has to exit.",
- "Northstar Launcher Error",
- 0);
- return 1;
- }
- }
- }
- else
- {
- // this should never happen
- printf("[*] WARNING: Failed to load stubs because conflicting modules are already loaded, so those will be used instead "
- "(did Northstar initialize too late?).\n");
- }
- }
-
- {
- PrependPath();
-
- if (!fs::exists("ns_startup_args.txt"))
- {
- std::ofstream file("ns_startup_args.txt");
- std::string defaultArgs = "-multiple";
- file.write(defaultArgs.c_str(), defaultArgs.length());
- file.close();
- }
- if (!fs::exists("ns_startup_args_dedi.txt"))
- {
- std::ofstream file("ns_startup_args_dedi.txt");
- std::string defaultArgs = "+setplaylist private_match";
- file.write(defaultArgs.c_str(), defaultArgs.length());
- file.close();
- }
-
- printf("[*] Loading tier0.dll\n");
- swprintf_s(buffer, L"%s\\bin\\x64_retail\\tier0.dll", exePath);
- hTier0Module = LoadLibraryExW(buffer, 0, LOAD_WITH_ALTERED_SEARCH_PATH);
- if (!hTier0Module)
- {
- LibraryLoadError(GetLastError(), L"tier0.dll", buffer);
- return 1;
- }
-
- bool loadNorthstar = ShouldLoadNorthstar(argc, argv);
- if (loadNorthstar)
- {
- printf("[*] Loading Northstar\n");
- if (!LoadNorthstar())
- return 1;
- }
- else
- printf("[*] Going to load the vanilla game\n");
-
- printf("[*] Loading launcher.dll\n");
- swprintf_s(buffer, L"%s\\bin\\x64_retail\\launcher.dll", exePath);
- hLauncherModule = LoadLibraryExW(buffer, 0, LOAD_WITH_ALTERED_SEARCH_PATH);
- if (!hLauncherModule)
- {
- LibraryLoadError(GetLastError(), L"launcher.dll", buffer);
- return 1;
- }
- }
-
- printf("[*] Launching the game...\n");
- auto LauncherMain = GetLauncherMain();
- if (!LauncherMain)
- MessageBoxA(
- GetForegroundWindow(),
- "Failed loading launcher.dll.\nThe game cannot continue and has to exit.",
- "Northstar Launcher Error",
- 0);
- // auto result = ((__int64(__fastcall*)())LauncherMain)();
- // auto result = ((signed __int64(__fastcall*)(__int64))LauncherMain)(0i64);
-
- return ((int(/*__fastcall*/*)(HINSTANCE, HINSTANCE, LPSTR, int))LauncherMain)(
- NULL, NULL, NULL, 0); // the parameters aren't really used anyways
-}
diff --git a/LauncherInjector/ns_icon.ico b/LauncherInjector/ns_icon.ico
deleted file mode 100644
index fc9ad166..00000000
Binary files a/LauncherInjector/ns_icon.ico and /dev/null differ
diff --git a/LauncherInjector/resource1.h b/LauncherInjector/resource1.h
deleted file mode 100644
index bb584502..00000000
--- a/LauncherInjector/resource1.h
+++ /dev/null
@@ -1,16 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by resources.rc
-//
-#define IDI_ICON1 101
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 102
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/LauncherInjector/resources.rc b/LauncherInjector/resources.rc
deleted file mode 100644
index de16250b..00000000
--- a/LauncherInjector/resources.rc
+++ /dev/null
@@ -1,111 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource1.h"
-#include "../NorthstarDedicatedTest/ns_version.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "winres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (United Kingdom) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
-#pragma code_page(1252)
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource1.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""winres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_ICON1 ICON "ns_icon.ico"
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION NORTHSTAR_VERSION
- PRODUCTVERSION NORTHSTAR_VERSION
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "080904b0"
- BEGIN
- VALUE "CompanyName", "Northstar Developers"
- VALUE "FileDescription", "Northstar Launcher"
- VALUE "FileVersion", "DEV"
- VALUE "InternalName", "NorthstarLauncher.exe"
- VALUE "LegalCopyright", "Copyright (C) 2021"
- VALUE "OriginalFilename", "NorthstarLauncher.exe"
- VALUE "ProductName", "Northstar Launcher"
- VALUE "ProductVersion", "DEV"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x809, 1200
- END
-END
-
-#endif // English (United Kingdom) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
--
cgit v1.2.3