Skip to content
Permalink
Browse files

Merge pull request #893 from nullworks/lightcat

Fix signature
  • Loading branch information
BenCat07 committed Jan 4, 2020
2 parents da9c46d + e5d7589 commit 17efa24e1a444da6ac6cb84254a4d326d91b91b9
@@ -30,6 +30,7 @@ enum SharedObjects
engine,
steamapi,
vstd,
launcher,
// Whatever you do, keep this one last
entry_count
};
@@ -43,6 +44,7 @@ class CSignature
static uintptr_t GetSignature(const char *chPattern, sharedobj::SharedObject &obj, int idx);
static uintptr_t GetClientSignature(const char *chPattern);
static uintptr_t GetEngineSignature(const char *chPattern);
static uintptr_t GetLauncherSignature(const char *chaPattern);
static uintptr_t GetSteamAPISignature(const char *chPattern);
static uintptr_t GetVstdSignature(const char *chPattern);
};
@@ -42,6 +42,7 @@ SharedObject &serverbrowser();
SharedObject &steamclient();
SharedObject &client();
SharedObject &engine();
SharedObject &launcher();
SharedObject &steamapi();
SharedObject &vstdlib();
SharedObject &tier0();
@@ -212,6 +212,11 @@ uintptr_t CSignature::GetEngineSignature(const char *chPattern)
return GetSignature(chPattern, sharedobj::engine(), CSignature_space::engine);
}
//===================================================================================
uintptr_t CSignature::GetLauncherSignature(const char *chPattern)
{
return GetSignature(chPattern, sharedobj::launcher(), CSignature_space::launcher);
}
//===================================================================================
uintptr_t CSignature::GetSteamAPISignature(const char *chPattern)
{
return GetSignature(chPattern, sharedobj::steamapi(), CSignature_space::steamapi);
@@ -99,6 +99,7 @@ void LoadEarlyObjects()
try
{
engine().Load();
launcher().Load();
filesystem_stdio().Load();
tier0().Load();
materialsystem().Load();
@@ -146,6 +147,7 @@ void UnloadAllSharedObjects()
studiorender().Unload();
libsdl().Unload();
#endif
launcher().Unload();
engine().Unload();
filesystem_stdio().Unload();
tier0().Unload();
@@ -172,6 +174,11 @@ SharedObject &engine()
static SharedObject obj("engine.so", true);
return obj;
}
SharedObject &launcher()
{
static SharedObject obj("launcher.so", true);
return obj;
}
SharedObject &vstdlib()
{
static SharedObject obj("libvstdlib.so", true);
@@ -247,6 +247,7 @@ static void ReduceRamUsage()
* cannot play on error.mdl
*/
}

if (g_IBaseClient)
{
static BytePatch playSequence{ gSignatures.GetClientSignature, "55 89 E5 57 56 53 83 EC ? 8B 75 0C 8B 5D 08 85 F6 74 ? 83 BB", 0x00, { 0xC3 } };
@@ -270,17 +271,44 @@ static void UnHookFs()
if (g_IBaseClient)
g_IBaseClient->InvalidateMdlCache();
}

#if ENABLE_TEXTMODE
static InitRoutineEarly nullify_textmode([]() {
ReduceRamUsage();
static auto addr1 = e8call_direct(gSignatures.GetEngineSignature("E8 ? ? ? ? 8B 93 ? ? ? ? 85 D2 0F 84 ? ? ? ?")) + 0x18;
static auto addr2 = sharedobj::materialsystem().Pointer(0x3EC08);
// SDL_CreateWindow has a "flag" parameter. We simply give it HIDDEN as a flag
static auto addr1 = gSignatures.GetLauncherSignature("C7 43 ? ? ? ? ? C7 44 24 ? ? ? ? ? C7 44 24") + 0xb;
// All of these are needed so tf2 doesn't just unhide the window
static auto addr2 = gSignatures.GetLauncherSignature("E8 ? ? ? ? C6 43 25 01 83 C4 5C");
static auto addr3 = gSignatures.GetLauncherSignature("E8 ? ? ? ? 8B 43 14 89 04 24 E8 ? ? ? ? C6 43 25 01 83 C4 1C");
static auto addr4 = gSignatures.GetLauncherSignature("89 14 24 E8 ? ? ? ? 8B 45 B4") + 0x3;

// 0x8 = SDL_HIDDEN
static BytePatch patch1(addr1, { 0x8 });

static BytePatch patch1(addr1, { 0x81, 0xC4, 0x6C, 0x20, 0x00, 0x00, 0x5B, 0x5E, 0x5F, 0x5D, 0xC3 });
static BytePatch patch2(addr2, { 0x83, 0xC4, 0x50, 0x5B, 0x5E, 0x5D, 0xC3 });
// all are the same size so use same patch for all
std::vector<unsigned char> patch_arr = { 0x90, 0x90, 0x90, 0x90, 0x90 };

static BytePatch patch2(addr2, patch_arr);
static BytePatch patch3(addr3, patch_arr);
static BytePatch patch4(addr4, patch_arr);

patch1.Patch();
patch2.Patch();
patch3.Patch();
patch4.Patch();

ReduceRamUsage();
// CVideoMode_Common::Init SetupStartupGraphic
static auto addr5 = e8call_direct(gSignatures.GetEngineSignature("E8 ? ? ? ? 8B 93 ? ? ? ? 85 D2 0F 84")) + 0x18;
// make materials illegal
static auto addr6 = sharedobj::materialsystem().Pointer(0x3EC08);

// Make SetupStartupGraphic instantly return
static BytePatch patch5(addr5, { 0x81, 0xC4, 0x6C, 0x20, 0x00, 0x00, 0x5B, 0x5E, 0x5F, 0x5D, 0xC3 });
// materials are gone :crab:
static BytePatch patch6(addr6, { 0x83, 0xC4, 0x50, 0x5B, 0x5E, 0x5D, 0xC3 });

patch5.Patch();
patch6.Patch();
});
#endif

@@ -296,8 +324,10 @@ static InitRoutine nullifiy_textmode2([]() {
UnHookFs();
});
#if ENABLE_TEXTMODE
auto addr = gSignatures.GetEngineSignature("E8 ? ? ? ? C7 04 24 ? ? ? ? E8 ? ? ? ? C7 04 24 ? ? ? ? E8 ? ? ? ? E8 ? ? ? ?");
addr = e8call_direct(addr);
// Catbots still hit properly, this just makes it easier to Stub stuff not needed in textmode
bool *g_bTextMode_ptr = *((bool **) (gSignatures.GetEngineSignature("A2 ? ? ? ? 8B 43 04") + 0x1));
*g_bTextMode_ptr = true;
/*auto addr = gSignatures.GetEngineSignature("55 89 E5 57 56 53 81 EC ? ? ? ? C7 45 ? ? ? ? ? A1 ? ? ? ? C7 45 ? ? ? ? ? 8B 75 08 85 C0 0F 84 ? ? ? ? 8D 55 88 89 04 24 31 DB 89 54 24 04");
static BytePatch patch(addr, { 0x31, 0xc0, 0xc3 });
patch.Patch();
EC::Register(
@@ -307,11 +337,11 @@ static InitRoutine nullifiy_textmode2([]() {
return;
if (CE_GOOD(LOCAL_E))
return;
static auto addr = e8call_direct(gSignatures.GetEngineSignature("E8 ? ? ? ? 8B 85 ? ? ? ? 89 C7 E9 ? ? ? ? "));
static auto addr = e8call_direct(gSignatures.GetEngineSignature("E8 ? ? ? ? 8B 85 ? ? ? ? 89 C7 E9"));
typedef void (*SendFinishedSync_t)(CBaseClientState *);
static SendFinishedSync_t SendFinishedSync_fn = SendFinishedSync_t(addr);
SendFinishedSync_fn(g_IBaseClientState);
},
"nographics_cm");
"nographics_cm");*/
#endif
});
@@ -106,23 +106,21 @@ bool re::CTFPartyClient::BInQueueForStandby()
char re::CTFPartyClient::RequestLeaveForMatch(int type)
{
typedef char (*RequestLeaveForMatch_t)(re::CTFPartyClient *, int);
static uintptr_t addr = gSignatures.GetClientSignature("55 89 E5 57 56 53 83 EC ? 8B 45 ? 89 44 24 ? 8B 45 ? 89 04 24 E8 ? ? "
"? ? 84 C0 89 C6 75");
static uintptr_t addr = e8call_direct(gSignatures.GetClientSignature("E8 ? ? ? ? 90 8B 45 E4"));
static RequestLeaveForMatch_t RequestLeaveForMatch_fn = RequestLeaveForMatch_t(addr);

return RequestLeaveForMatch_fn(this, type);
}
int re::CTFPartyClient::BInvitePlayerToParty(CSteamID steamid)
{
typedef int (*BInvitePlayerToParty_t)(re::CTFPartyClient *, CSteamID, bool);
static uintptr_t addr = gSignatures.GetClientSignature("55 89 E5 57 56 53 81 EC ? ? ? ? 8B 45 ? 8B 5D ? 8B 55 ? 89 85 ? ? ? ? "
static uintptr_t addr = gSignatures.GetClientSignature("55 89 E5 57 56 53 81 EC ? ? ? ? 8B 45 ? 8B 5D ? 8B 55 ? 89 85"
"65 A1 ? ? ? ? 89 45 ? 31 C0 8B 45");
static BInvitePlayerToParty_t BInvitePlayerToParty_fn = BInvitePlayerToParty_t(addr);
return BInvitePlayerToParty_fn(this, steamid, false);
}
int re::CTFPartyClient::BRequestJoinPlayer(CSteamID steamid)
{
// 55 89 E5 57 56 53 81 EC 8C 00 00 00 8B 45 14 8B 55 10 89 45 A4 8B 45 0C
typedef int (*BRequestJoinPlayer_t)(re::CTFPartyClient *, CSteamID, bool);
static uintptr_t addr = gSignatures.GetClientSignature("55 89 E5 57 56 53 81 EC ? ? ? ? 8B 45 14 8B 55 ? 89 45 ? 8B");
static BRequestJoinPlayer_t BRequestJoinPlayer_fn = BRequestJoinPlayer_t(addr);
@@ -12,7 +12,7 @@ C_MannVsMachineStats *C_MannVsMachineStats::G_MannVsMachineStats()
{
typedef C_MannVsMachineStats *(*G_MannVsMachineStats_t)();
static uintptr_t addr = gSignatures.GetClientSignature("55 A1 ? ? ? ? 89 E5 5D C3 8D B6 00 00 00 00 55 89 E5 53 83 EC ? 8B 5D "
"? C7 83 ? ? ? ? ? ? ? ?");
"? C7 83");
static G_MannVsMachineStats_t G_MannVsMachineStats_fn = G_MannVsMachineStats_t(addr);

return G_MannVsMachineStats_fn();
@@ -22,7 +22,7 @@ int *C_MannVsMachineStats::AddLocalPlayerUpgrade(int id, int &a3)
typedef int *(*AddLocalPlayerUpgrade_t)(C_MannVsMachineStats *, int, int);
static uintptr_t addr = gSignatures.GetClientSignature("55 89 E5 57 56 53 83 EC ? 8B 5D ? 8B 75 ? 8B 7D ? 8B 43 ? 8B 53 ? 83 "
"C0 ? 39 D0 7E ? 29 D0 89 1C 24 89 44 24 ? E8 ? ? ? ? 8B 43 ? 83 C0 ? "
"8B 13 89 43 ? 29 F0 83 E8 ? 89 F1 C1 E1 ?");
"8B 13 89 43 ? 29 F0 83 E8 ? 89 F1 C1 E1");
static AddLocalPlayerUpgrade_t AddLocalPlayerUpgrade_fn = AddLocalPlayerUpgrade_t(addr);

return AddLocalPlayerUpgrade_fn(this, id, a3);

0 comments on commit 17efa24

Please sign in to comment.
You can’t perform that action at this time.