2018-12-01 09:42:29 -05:00
|
|
|
#include <std_include.hpp>
|
2018-12-23 07:17:08 -05:00
|
|
|
#include "launcher/launcher.hpp"
|
2018-12-23 16:15:32 -05:00
|
|
|
#include "loader/loader.hpp"
|
2018-12-24 13:54:44 -05:00
|
|
|
#include "loader/module_loader.hpp"
|
2018-12-24 17:22:56 -05:00
|
|
|
#include "game/game.hpp"
|
2018-12-26 10:28:16 -05:00
|
|
|
#include "loader/binary_loader.hpp"
|
|
|
|
|
|
|
|
//#define GENERATE_DIFFS
|
2018-12-24 13:54:44 -05:00
|
|
|
|
|
|
|
void exit_hook(const int code)
|
|
|
|
{
|
|
|
|
module_loader::pre_destroy();
|
|
|
|
exit(code);
|
|
|
|
}
|
2018-12-01 09:42:29 -05:00
|
|
|
|
2018-12-23 07:17:08 -05:00
|
|
|
int CALLBACK WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nCmdShow*/)
|
2018-12-01 09:42:29 -05:00
|
|
|
{
|
2018-12-23 16:15:32 -05:00
|
|
|
FARPROC entry_point = nullptr;
|
2018-12-23 12:25:22 -05:00
|
|
|
|
2018-12-26 10:28:16 -05:00
|
|
|
try
|
2018-12-23 12:25:22 -05:00
|
|
|
{
|
2018-12-26 10:28:16 -05:00
|
|
|
#ifdef GENERATE_DIFFS
|
|
|
|
binary_loader::create();
|
|
|
|
return 0;
|
|
|
|
#endif
|
|
|
|
|
2018-12-23 16:15:32 -05:00
|
|
|
launcher launcher;
|
|
|
|
const auto mode = launcher.run();
|
|
|
|
|
2018-12-26 10:28:16 -05:00
|
|
|
if (mode == launcher::mode::none) return 0;
|
2018-12-23 16:15:32 -05:00
|
|
|
|
|
|
|
loader loader(mode);
|
|
|
|
loader.set_import_resolver([](const std::string& module, const std::string& function) -> FARPROC
|
|
|
|
{
|
|
|
|
if (module == "steam_api.dll")
|
|
|
|
{
|
|
|
|
return utils::nt::module().get_proc<FARPROC>(function);
|
|
|
|
}
|
|
|
|
else if (function == "ExitProcess")
|
|
|
|
{
|
2018-12-24 13:54:44 -05:00
|
|
|
return FARPROC(exit_hook);
|
2018-12-23 16:15:32 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
});
|
|
|
|
|
|
|
|
entry_point = loader.load({});
|
2018-12-26 10:28:16 -05:00
|
|
|
if (!entry_point) throw std::runtime_error("Unable to load inject binary into memory");
|
2018-12-23 16:15:32 -05:00
|
|
|
|
2018-12-24 17:22:56 -05:00
|
|
|
game::initialize(mode);
|
2018-12-24 13:54:44 -05:00
|
|
|
module_loader::post_load();
|
2018-12-23 12:25:22 -05:00
|
|
|
}
|
2018-12-26 10:28:16 -05:00
|
|
|
catch (std::exception e)
|
|
|
|
{
|
|
|
|
MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR);
|
|
|
|
return 1;
|
|
|
|
}
|
2018-12-23 12:25:22 -05:00
|
|
|
|
2018-12-23 16:15:32 -05:00
|
|
|
return entry_point();
|
2018-12-01 09:42:29 -05:00
|
|
|
}
|