Display external console
This commit is contained in:
parent
122eedbde0
commit
81df7c9ca2
35
src/game/game.cpp
Normal file
35
src/game/game.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#include <std_include.hpp>
|
||||||
|
#include "game.hpp"
|
||||||
|
|
||||||
|
namespace game
|
||||||
|
{
|
||||||
|
namespace native
|
||||||
|
{
|
||||||
|
Sys_ShowConsole_t Sys_ShowConsole;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
launcher::mode mode = launcher::mode::NONE;
|
||||||
|
|
||||||
|
bool is_mp()
|
||||||
|
{
|
||||||
|
return mode == launcher::mode::MULTIPLAYER;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_sp()
|
||||||
|
{
|
||||||
|
return mode == launcher::mode::SINGLEPLAYER;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_dedi()
|
||||||
|
{
|
||||||
|
return mode == launcher::mode::SERVER;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initialize(const launcher::mode _mode)
|
||||||
|
{
|
||||||
|
mode = _mode;
|
||||||
|
|
||||||
|
native::Sys_ShowConsole = native::Sys_ShowConsole_t(SELECT_VALUE(0x470AF0, 0x5CF590, 0));
|
||||||
|
}
|
||||||
|
}
|
20
src/game/game.hpp
Normal file
20
src/game/game.hpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "launcher/launcher.hpp"
|
||||||
|
|
||||||
|
#define SELECT_VALUE(sp, mp, dedi) (game::is_sp() ? (sp) : (game::is_mp() ? (mp) : (dedi)))
|
||||||
|
|
||||||
|
namespace game
|
||||||
|
{
|
||||||
|
namespace native
|
||||||
|
{
|
||||||
|
typedef void(*Sys_ShowConsole_t)();
|
||||||
|
extern Sys_ShowConsole_t Sys_ShowConsole;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_mp();
|
||||||
|
bool is_sp();
|
||||||
|
bool is_dedi();
|
||||||
|
|
||||||
|
void initialize(launcher::mode mode);
|
||||||
|
}
|
@ -10,6 +10,7 @@ public:
|
|||||||
NONE,
|
NONE,
|
||||||
SINGLEPLAYER,
|
SINGLEPLAYER,
|
||||||
MULTIPLAYER,
|
MULTIPLAYER,
|
||||||
|
SERVER,
|
||||||
};
|
};
|
||||||
|
|
||||||
launcher();
|
launcher();
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#include <std_include.hpp>
|
#include <std_include.hpp>
|
||||||
#include "module_loader.hpp"
|
#include "module_loader.hpp"
|
||||||
|
|
||||||
launcher::mode module_loader::mode_ = launcher::mode::NONE;
|
|
||||||
std::vector<std::unique_ptr<module>>* module_loader::modules_ = nullptr;
|
std::vector<std::unique_ptr<module>>* module_loader::modules_ = nullptr;
|
||||||
|
|
||||||
void module_loader::register_module(std::unique_ptr<module>&& module_)
|
void module_loader::register_module(std::unique_ptr<module>&& module_)
|
||||||
@ -39,16 +38,6 @@ void module_loader::pre_destroy()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
launcher::mode module_loader::get_mode()
|
|
||||||
{
|
|
||||||
return module_loader::mode_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void module_loader::set_mode(const launcher::mode mode)
|
|
||||||
{
|
|
||||||
module_loader::mode_ = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void module_loader::destroy_modules()
|
void module_loader::destroy_modules()
|
||||||
{
|
{
|
||||||
module_loader::pre_destroy();
|
module_loader::pre_destroy();
|
||||||
|
@ -21,11 +21,7 @@ public:
|
|||||||
static void post_load();
|
static void post_load();
|
||||||
static void pre_destroy();
|
static void pre_destroy();
|
||||||
|
|
||||||
static launcher::mode get_mode();
|
|
||||||
static void set_mode(launcher::mode mode);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static launcher::mode mode_;
|
|
||||||
static std::vector<std::unique_ptr<module>>* modules_;
|
static std::vector<std::unique_ptr<module>>* modules_;
|
||||||
|
|
||||||
static void destroy_modules();
|
static void destroy_modules();
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "launcher/launcher.hpp"
|
#include "launcher/launcher.hpp"
|
||||||
#include "loader/loader.hpp"
|
#include "loader/loader.hpp"
|
||||||
#include "loader/module_loader.hpp"
|
#include "loader/module_loader.hpp"
|
||||||
|
#include "game/game.hpp"
|
||||||
|
|
||||||
void exit_hook(const int code)
|
void exit_hook(const int code)
|
||||||
{
|
{
|
||||||
@ -17,8 +18,6 @@ int CALLBACK WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR
|
|||||||
launcher launcher;
|
launcher launcher;
|
||||||
const auto mode = launcher.run();
|
const auto mode = launcher.run();
|
||||||
|
|
||||||
module_loader::set_mode(mode);
|
|
||||||
|
|
||||||
if (mode == launcher::mode::NONE) return 0;
|
if (mode == launcher::mode::NONE) return 0;
|
||||||
|
|
||||||
loader loader(mode);
|
loader loader(mode);
|
||||||
@ -39,6 +38,7 @@ int CALLBACK WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR
|
|||||||
entry_point = loader.load({});
|
entry_point = loader.load({});
|
||||||
if (!entry_point) return 1;
|
if (!entry_point) return 1;
|
||||||
|
|
||||||
|
game::initialize(mode);
|
||||||
module_loader::post_load();
|
module_loader::post_load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <std_include.hpp>
|
#include <std_include.hpp>
|
||||||
#include "loader/module_loader.hpp"
|
#include "loader/module_loader.hpp"
|
||||||
#include "utils/hook.hpp"
|
#include "utils/hook.hpp"
|
||||||
|
#include "game/game.hpp"
|
||||||
|
|
||||||
class ceg final : public module
|
class ceg final : public module
|
||||||
{
|
{
|
||||||
@ -9,7 +10,7 @@ public:
|
|||||||
{
|
{
|
||||||
// Only SP has CEG
|
// Only SP has CEG
|
||||||
// CEG in MP has accidentally been removed due to CVE-2018-10718
|
// CEG in MP has accidentally been removed due to CVE-2018-10718
|
||||||
if(module_loader::get_mode() != launcher::mode::SINGLEPLAYER) return;
|
if(!game::is_sp()) return;
|
||||||
|
|
||||||
utils::hook::signature signature(0x401000, 0x3E1000);
|
utils::hook::signature signature(0x401000, 0x3E1000);
|
||||||
|
|
||||||
|
17
src/module/console.cpp
Normal file
17
src/module/console.cpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include <std_include.hpp>
|
||||||
|
#include "loader/module_loader.hpp"
|
||||||
|
#include "console.hpp"
|
||||||
|
#include "game/game.hpp"
|
||||||
|
|
||||||
|
class console final : public module
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void post_load() override
|
||||||
|
{
|
||||||
|
if (game::is_dedi()) return;
|
||||||
|
|
||||||
|
game::native::Sys_ShowConsole();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
REGISTER_MODULE(console)
|
1
src/module/console.hpp
Normal file
1
src/module/console.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#pragma once
|
@ -1,13 +1,14 @@
|
|||||||
#include <std_include.hpp>
|
#include <std_include.hpp>
|
||||||
#include "loader/module_loader.hpp"
|
#include "loader/module_loader.hpp"
|
||||||
#include "utils/hook.hpp"
|
#include "utils/hook.hpp"
|
||||||
|
#include "game/game.hpp"
|
||||||
|
|
||||||
class stats final : public module
|
class stats final : public module
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void post_load() override
|
void post_load() override
|
||||||
{
|
{
|
||||||
if (module_loader::get_mode() != launcher::mode::SINGLEPLAYER) return;
|
if (!game::is_sp()) return;
|
||||||
|
|
||||||
// Disable remote storage
|
// Disable remote storage
|
||||||
utils::hook::set<BYTE>(0x663B5A, 0xEB);
|
utils::hook::set<BYTE>(0x663B5A, 0xEB);
|
||||||
|
Loading…
Reference in New Issue
Block a user