-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
2,372 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
msvc10/.vs | ||
msvc10/Release - CS GO | ||
Release.csgo | ||
libtier0.so | ||
libvstdlib.so |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,229 @@ | ||
# (C)2004-2010 Metamod:Source Development Team | ||
# Makefile written by David "BAILOPAN" Anderson | ||
|
||
########################################### | ||
### EDIT THESE PATHS FOR YOUR OWN SETUP ### | ||
########################################### | ||
|
||
HL2SDK_ORIG = ../../hl2sdk | ||
HL2SDK_OB = ../../hl2sdk-ob | ||
HL2SDK_CSS = ../../hl2sdk-css | ||
HL2SDK_OB_VALVE = ../../hl2sdk-ob-valve | ||
HL2SDK_L4D = ../../hl2sdk-l4d | ||
HL2SDK_L4D2 = ../../hl2sdk-l4d2 | ||
HL2SDK_CSGO = ../../hl2sdk-csgo | ||
MMSOURCE19 = .. | ||
|
||
##################################### | ||
### EDIT BELOW FOR OTHER PROJECTS ### | ||
##################################### | ||
|
||
PROJECT = MovementUnlocker | ||
OBJECTS = MovementUnlocker.cpp | ||
|
||
############################################## | ||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### | ||
############################################## | ||
|
||
OPT_FLAGS = -O3 -funroll-loops -pipe | ||
GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 | ||
DEBUG_FLAGS = -g -ggdb3 -D_DEBUG | ||
CPP = gcc | ||
CPP_OSX = clang | ||
|
||
########################## | ||
### SDK CONFIGURATIONS ### | ||
########################## | ||
|
||
override ENGSET = false | ||
|
||
# Check for valid list of engines | ||
ifneq (,$(filter original orangebox orangeboxvalve css left4dead left4dead2 csgo,$(ENGINE))) | ||
override ENGSET = true | ||
endif | ||
|
||
ifeq "$(ENGINE)" "original" | ||
HL2SDK = $(HL2SDK_ORIG) | ||
CFLAGS += -DSOURCE_ENGINE=1 | ||
endif | ||
ifeq "$(ENGINE)" "orangebox" | ||
HL2SDK = $(HL2SDK_OB) | ||
CFLAGS += -DSOURCE_ENGINE=3 | ||
endif | ||
ifeq "$(ENGINE)" "css" | ||
HL2SDK = $(HL2SDK_CSS) | ||
CFLAGS += -DSOURCE_ENGINE=6 | ||
endif | ||
ifeq "$(ENGINE)" "orangeboxvalve" | ||
HL2SDK = $(HL2SDK_OB_VALVE) | ||
CFLAGS += -DSOURCE_ENGINE=7 | ||
endif | ||
ifeq "$(ENGINE)" "left4dead" | ||
HL2SDK = $(HL2SDK_L4D) | ||
CFLAGS += -DSOURCE_ENGINE=8 | ||
endif | ||
ifeq "$(ENGINE)" "left4dead2" | ||
HL2SDK = $(HL2SDK_L4D2) | ||
CFLAGS += -DSOURCE_ENGINE=9 | ||
endif | ||
ifeq "$(ENGINE)" "csgo" | ||
HL2SDK = $(HL2SDK_CSGO) | ||
CFLAGS += -DSOURCE_ENGINE=12 | ||
endif | ||
|
||
HL2PUB = $(HL2SDK)/public | ||
|
||
ifeq "$(ENGINE)" "original" | ||
INCLUDE += -I$(HL2SDK)/public/dlls | ||
METAMOD = $(MMSOURCE19)/core-legacy | ||
else | ||
INCLUDE += -I$(HL2SDK)/public/game/server | ||
METAMOD = $(MMSOURCE19)/core | ||
endif | ||
|
||
OS := $(shell uname -s) | ||
|
||
ifeq "$(OS)" "Darwin" | ||
LIB_EXT = dylib | ||
ifeq "$(ENGINE)" "csgo" | ||
HL2LIB = $(HL2SDK)/lib/osx64 | ||
else | ||
HL2LIB = $(HL2SDK)/lib/mac | ||
endif | ||
else | ||
LIB_EXT = so | ||
ifeq "$(ENGINE)" "original" | ||
HL2LIB = $(HL2SDK)/linux_sdk | ||
else | ||
HL2LIB = $(HL2SDK)/lib/linux | ||
endif | ||
endif | ||
|
||
# if ENGINE is original or OB | ||
ifneq (,$(filter original orangebox,$(ENGINE))) | ||
LIB_SUFFIX = _i486.$(LIB_EXT) | ||
else | ||
LIB_PREFIX = lib | ||
ifneq (,$(filter orangeboxvalve css left4dead2,$(ENGINE))) | ||
ifneq "$(OS)" "Darwin" | ||
LIB_SUFFIX = _srv.$(LIB_EXT) | ||
else | ||
LIB_SUFFIX = .$(LIB_EXT) | ||
endif | ||
else | ||
LIB_SUFFIX = .$(LIB_EXT) | ||
endif | ||
endif | ||
|
||
ifeq "$(OS)" "Darwin" | ||
ifeq "$(ENGINE)" "csgo" | ||
STATIC_SUFFIX = | ||
else | ||
STATIC_SUFFIX = _i486 | ||
endif | ||
else | ||
STATIC_SUFFIX = _i486 | ||
endif | ||
|
||
CFLAGS += -DSE_EPISODEONE=1 -DSE_DARKMESSIAH=2 -DSE_ORANGEBOX=3 -DSE_BLOODYGOODTIME=4 -DSE_EYE=5 \ | ||
-DSE_CSS=6 -DSE_ORANGEBOXVALVE=7 -DSE_LEFT4DEAD=8 -DSE_LEFT4DEAD2=9 -DSE_ALIENSWARM=10 \ | ||
-DSE_PORTAL2=11 -DSE_CSGO=12 | ||
|
||
LINK += $(HL2LIB)/tier1$(STATIC_SUFFIX).a $(LIB_PREFIX)vstdlib$(LIB_SUFFIX) $(LIB_PREFIX)tier0$(LIB_SUFFIX) | ||
|
||
ifeq "$(ENGINE)" "csgo" | ||
LINK += $(HL2LIB)/interfaces$(STATIC_SUFFIX).a | ||
endif | ||
|
||
INCLUDE += -I. -I.. -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/mathlib -I$(HL2PUB)/vstdlib \ | ||
-I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 -I. -I$(METAMOD) -I$(METAMOD)/sourcehook | ||
|
||
################################################ | ||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### | ||
################################################ | ||
|
||
BINARY = $(PROJECT).$(LIB_EXT) | ||
|
||
ifeq "$(DEBUG)" "true" | ||
BIN_DIR = Debug.$(ENGINE) | ||
CFLAGS += $(DEBUG_FLAGS) | ||
else | ||
BIN_DIR = Release.$(ENGINE) | ||
CFLAGS += $(OPT_FLAGS) | ||
endif | ||
|
||
ifeq "$(OS)" "Darwin" | ||
CPP = $(CPP_OSX) | ||
LIB_EXT = dylib | ||
CFLAGS += -DOSX -D_OSX -mmacosx-version-min=10.9 | ||
LINK += -dynamiclib -lc++ -mmacosx-version-min=10.9 | ||
ifeq "$(ENGINE)" "csgo" | ||
CFLAGS += -m64 -DX64BITS -DPLATFORM_64BITS | ||
LINK += -m64 | ||
else | ||
CFLAGS += -m32 | ||
LINK += -m32 | ||
endif | ||
else | ||
LIB_EXT = so | ||
CFLAGS += -D_LINUX -m32 | ||
LINK += -shared -m32 | ||
endif | ||
|
||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") | ||
|
||
ifeq "$(IS_CLANG)" "1" | ||
CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") | ||
CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") | ||
else | ||
CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) | ||
CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) | ||
endif | ||
|
||
CFLAGS += -DPOSIX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp \ | ||
-Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca \ | ||
-Dstrcmpi=strcasecmp -DCOMPILER_GCC -Wall -Wno-non-virtual-dtor -Wno-overloaded-virtual \ | ||
-fPIC -fno-exceptions -fno-rtti -msse -fno-strict-aliasing | ||
|
||
# Clang || GCC >= 4 | ||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" | ||
CFLAGS += $(GCC4_FLAGS) | ||
endif | ||
|
||
# Clang >= 3 || GCC >= 4.7 | ||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" | ||
CFLAGS += -Wno-delete-non-virtual-dtor -Wno-unused-private-field -Wno-deprecated-register | ||
endif | ||
|
||
# OS is Linux and not using clang | ||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" | ||
LINK += -static-libgcc | ||
endif | ||
|
||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) | ||
|
||
$(BIN_DIR)/%.o: %.cpp | ||
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< | ||
|
||
all: check | ||
mkdir -p $(BIN_DIR) | ||
ln -sf $(HL2LIB)/$(LIB_PREFIX)vstdlib$(LIB_SUFFIX) | ||
ln -sf $(HL2LIB)/$(LIB_PREFIX)tier0$(LIB_SUFFIX) | ||
$(MAKE) -f Makefile MovementUnlocker | ||
|
||
check: | ||
if [ "$(ENGSET)" = "false" ]; then \ | ||
echo "You must supply one of the following values for ENGINE:"; \ | ||
echo "csgo, left4dead2, left4dead, css, orangeboxvalve, orangebox, or original"; \ | ||
exit 1; \ | ||
fi | ||
|
||
MovementUnlocker: check $(OBJ_BIN) | ||
$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -ldl -lm -o $(BIN_DIR)/$(BINARY) | ||
|
||
default: all | ||
|
||
clean: check | ||
rm -rf $(BIN_DIR)/*.o | ||
rm -rf $(BIN_DIR)/$(BINARY) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
#include <stdio.h> | ||
#include "MovementUnlocker.h" | ||
#include <cstdint> | ||
#include <sh_memory.h> | ||
#ifdef _WIN32 | ||
#include <Windows.h> | ||
#endif | ||
|
||
MovementUnlocker g_MovementUnlocker; | ||
|
||
#ifdef _WIN32 | ||
const unsigned char *pPatchSignature = (unsigned char *)"\x76\x58\xF3\x0F\x10\x40\x44\xF3\x0F\x10\x50\x40"; | ||
const char *pPatchPattern = "x?xxxxxxxxxx"; | ||
#elif __linux__ | ||
unsigned char * pPatchSignature = (unsigned char *)"\x76\x45\xF3\x0F\x11\x9D\x4C\xFF\xFF\xFF"; | ||
const char* pPatchPattern = "x?xxxxxxxx"; | ||
#endif | ||
|
||
// From https://git.botox.bz/CSSZombieEscape/sm-ext-PhysHooks | ||
uintptr_t FindPattern(uintptr_t BaseAddr, const unsigned char* pData, const char* pPattern, size_t MaxSize, bool Reverse) | ||
{ | ||
unsigned char* pMemory; | ||
uintptr_t PatternLen = strlen(pPattern); | ||
|
||
pMemory = reinterpret_cast<unsigned char*>(BaseAddr); | ||
|
||
if (!Reverse) | ||
for (uintptr_t i = 0; i < MaxSize; i++) | ||
{ | ||
uintptr_t Matches = 0; | ||
while (*(pMemory + i + Matches) == pData[Matches] || pPattern[Matches] != 'x') | ||
{ | ||
Matches++; | ||
if (Matches == PatternLen) | ||
return (uintptr_t)(pMemory + i); | ||
} | ||
} | ||
else | ||
for (uintptr_t i = 0; i < MaxSize; i++) | ||
{ | ||
uintptr_t Matches = 0; | ||
while (*(pMemory - i + Matches) == pData[Matches] || pPattern[Matches] != 'x') | ||
{ | ||
Matches++; | ||
if (Matches == PatternLen) | ||
return (uintptr_t)(pMemory - i); | ||
} | ||
} | ||
|
||
return 0x00; | ||
} | ||
|
||
PLUGIN_EXPOSE(MovementUnlocker, g_MovementUnlocker); | ||
bool MovementUnlocker::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) | ||
{ | ||
PLUGIN_SAVEVARS(); | ||
int PatchLen = strlen(pPatchPattern); | ||
#ifdef _WIN32 | ||
char *pBinPath = "csgo/bin/server.dll"; | ||
auto *pBin = LoadLibrary(pBinPath); | ||
#elif __linux__ | ||
char * pBinPath = "csgo/bin/server.so"; | ||
auto *pBin = dlopen(pBinPath, RTLD_NOW); | ||
#endif | ||
|
||
if (!pBin) | ||
{ | ||
snprintf(error, maxlen, "Could not open %s", pBinPath); | ||
return false; | ||
} | ||
|
||
#ifdef _WIN32 | ||
uintptr_t pPatchAddress = (uintptr_t)GetProcAddress(pBin, "CreateInterface"); | ||
#elif __linux__ | ||
uintptr_t pPatchAddress = (uintptr_t)dlsym(pBin, "CreateInterface"); | ||
#endif | ||
|
||
pPatchAddress = FindPattern(pPatchAddress, pPatchSignature, pPatchPattern, ULLONG_MAX, true); | ||
|
||
if (!pPatchAddress) | ||
{ | ||
snprintf(error, maxlen, "Could not find WalkMove patch signature!"); | ||
return false; | ||
} | ||
|
||
SourceHook::SetMemAccess((void*)pPatchAddress, PatchLen, SH_MEM_READ | SH_MEM_WRITE | SH_MEM_EXEC); | ||
*(unsigned char*)(pPatchAddress) = ((unsigned char*)"\xEB")[0]; | ||
SourceHook::SetMemAccess((void*)pPatchAddress, PatchLen, SH_MEM_READ | SH_MEM_EXEC); | ||
|
||
return true; | ||
} | ||
|
||
bool MovementUnlocker::Unload(char *error, size_t maxlen) | ||
{ | ||
return true; | ||
} | ||
|
||
void MovementUnlocker::AllPluginsLoaded() | ||
{ | ||
} | ||
|
||
bool MovementUnlocker::Pause(char *error, size_t maxlen) | ||
{ | ||
return true; | ||
} | ||
|
||
bool MovementUnlocker::Unpause(char *error, size_t maxlen) | ||
{ | ||
return true; | ||
} | ||
|
||
const char *MovementUnlocker::GetLicense() | ||
{ | ||
return "GNU General Public License v3.0"; | ||
} | ||
|
||
const char *MovementUnlocker::GetVersion() | ||
{ | ||
return "1.0"; | ||
} | ||
|
||
const char *MovementUnlocker::GetDate() | ||
{ | ||
return __DATE__; | ||
} | ||
|
||
const char *MovementUnlocker::GetLogTag() | ||
{ | ||
return "MOVEMENTUNLOCKER"; | ||
} | ||
|
||
const char *MovementUnlocker::GetAuthor() | ||
{ | ||
return "Vauff"; | ||
} | ||
|
||
const char *MovementUnlocker::GetDescription() | ||
{ | ||
return "CS2 MM:S port of Movement Unlocker, removes max speed limitation from players on the ground."; | ||
} | ||
|
||
const char *MovementUnlocker::GetName() | ||
{ | ||
return "Movement Unlocker"; | ||
} | ||
|
||
const char *MovementUnlocker::GetURL() | ||
{ | ||
return "https://github.com/Source2ZE/MovementUnlocker"; | ||
} |
Oops, something went wrong.