Skip to content

Commit 6f0e8d6

Browse files
committed
added no recoil
1 parent 4518a93 commit 6f0e8d6

File tree

10 files changed

+66
-2
lines changed

10 files changed

+66
-2
lines changed

AssaultCube-Multihack.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,9 @@
215215
<ClCompile Include="src\hacks\Crosshair.cpp" />
216216
<ClCompile Include="src\hacks\ESP_Box.cpp" />
217217
<ClCompile Include="src\hacks\ESP_Snaplines.cpp" />
218+
<ClCompile Include="src\hacks\NoRecoil.cpp" />
218219
<ClCompile Include="src\hacks\Teleport.cpp" />
220+
<ClCompile Include="src\hooks\attackphysics.cpp" />
219221
<ClCompile Include="src\hooks\c2sinfo.cpp" />
220222
<ClCompile Include="src\hooks\drawcrosshair.cpp" />
221223
<ClCompile Include="src\hooks\hooks.cpp" />

AssaultCube-Multihack.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@
8787
<ClCompile Include="src\hacks\ESP_Box.cpp">
8888
<Filter>Source Files</Filter>
8989
</ClCompile>
90+
<ClCompile Include="src\hooks\attackphysics.cpp">
91+
<Filter>Source Files</Filter>
92+
</ClCompile>
93+
<ClCompile Include="src\hacks\NoRecoil.cpp">
94+
<Filter>Source Files</Filter>
95+
</ClCompile>
9096
</ItemGroup>
9197
<ItemGroup>
9298
<ClInclude Include="src\pch.h">

src/base.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,23 @@ mem::voidptr_t Base::Data::p_c2sinfo = nullptr;
1515
mem::voidptr_t Base::Data::p_servertoclient = nullptr;
1616
mem::voidptr_t Base::Data::p_movelocalplayer = nullptr;
1717
mem::voidptr_t Base::Data::p_drawcrosshair = nullptr;
18+
mem::voidptr_t Base::Data::p_attackphysics = nullptr;
19+
mem::voidptr_t Base::Data::p_attackphysics_ret = nullptr;
1820
SwapBuffers_t Base::Data::oSwapBuffers = nullptr;
1921
WndProc_t Base::Data::oWndProc = nullptr;
2022
ShowCursor_t Base::Data::oShowCursor = nullptr;
2123
c2sinfo_t Base::Data::o_c2sinfo = nullptr;
2224
servertoclient_t Base::Data::o_servertoclient = nullptr;
2325
movelocalplayer_t Base::Data::o_movelocalplayer = nullptr;
2426
drawcrosshair_t Base::Data::o_drawcrosshair = nullptr;
27+
attackphysics_t Base::Data::o_attackphysics = nullptr;
2528
mem::size_t Base::Data::szSwapBuffers = 5;
2629
mem::size_t Base::Data::szShowCursor = 5;
2730
mem::size_t Base::Data::sz_c2sinfo = 5;
2831
mem::size_t Base::Data::sz_servertoclient = 6;
2932
mem::size_t Base::Data::sz_movelocalplayer = 8;
3033
mem::size_t Base::Data::sz_drawcrosshair = 5;
34+
mem::size_t Base::Data::sz_attackphysics = 10;
3135
UINT Base::Data::WMKeys[0xFE];
3236
bool Base::Data::InitSwapBuffers = false;
3337
bool Base::Data::IsUnloaded = false;
@@ -71,6 +75,8 @@ bool Base::Data::Settings::TeleportSaveQueued = false;
7175
float Base::Data::Settings::TeleportPosition[3] = { 0.0f, 0.0f, 0.0f };
7276
bool Base::Data::Settings::TeleportForce[3] = { false, false, false };
7377

78+
bool Base::Data::Settings::EnableNoRecoil = false;
79+
7480
DWORD WINAPI ExitThread(LPVOID lpReserved);
7581

7682
void Base::Init(HMODULE hMod)
@@ -87,6 +93,8 @@ void Base::Init(HMODULE hMod)
8793
Data::p_servertoclient = (mem::voidptr_t)Data::game.servertoclient;
8894
Data::p_movelocalplayer = (mem::voidptr_t)Data::game.movelocalplayer;
8995
Data::p_drawcrosshair = (mem::voidptr_t)Data::game.drawcrosshair;
96+
Data::p_attackphysics = (mem::voidptr_t)Data::game.attackphysics;
97+
Data::p_attackphysics_ret = (mem::voidptr_t)(&((char*)Data::p_attackphysics)[Data::sz_attackphysics]);
9098
Hooks::Init();
9199
}
92100

src/base.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,23 @@ namespace Base
3333
extern mem::voidptr_t p_servertoclient;
3434
extern mem::voidptr_t p_movelocalplayer;
3535
extern mem::voidptr_t p_drawcrosshair;
36+
extern mem::voidptr_t p_attackphysics;
37+
extern mem::voidptr_t p_attackphysics_ret;
3638
extern SwapBuffers_t oSwapBuffers;
3739
extern ShowCursor_t oShowCursor;
3840
extern WndProc_t oWndProc;
3941
extern c2sinfo_t o_c2sinfo;
4042
extern servertoclient_t o_servertoclient;
4143
extern movelocalplayer_t o_movelocalplayer;
4244
extern drawcrosshair_t o_drawcrosshair;
45+
extern attackphysics_t o_attackphysics;
4346
extern mem::size_t szSwapBuffers;
4447
extern mem::size_t szShowCursor;
4548
extern mem::size_t sz_c2sinfo;
4649
extern mem::size_t sz_servertoclient;
4750
extern mem::size_t sz_movelocalplayer;
4851
extern mem::size_t sz_drawcrosshair;
52+
extern mem::size_t sz_attackphysics;
4953
extern UINT WMKeys[0xFE];
5054
extern bool InitSwapBuffers;
5155
extern bool IsUnloaded;
@@ -90,6 +94,8 @@ namespace Base
9094
extern bool TeleportSaveQueued;
9195
extern float TeleportPosition[3];
9296
extern bool TeleportForce[3];
97+
98+
extern bool EnableNoRecoil;
9399
}
94100

95101
namespace Keys
@@ -105,6 +111,7 @@ namespace Base
105111
void Crosshair();
106112
void ESP_Snaplines(playerinfo_t* p_info);
107113
void ESP_Box(playerinfo_t* p_info);
114+
void NoRecoil();
108115
}
109116

110117
namespace Hooks
@@ -118,6 +125,7 @@ namespace Base
118125
void servertoclient(int chan, uchar* buf, int len, bool demo);
119126
void movelocalplayer();
120127
//void drawcrosshair(playerent* p, int n, struct color* c, float size);
121-
void drawcrosshair();
128+
void drawcrosshair(void);
129+
void attackphysics(void);
122130
}
123131
}

src/game.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ typedef void(* updateworld_t)(int curtime, int lastmillis);
1010
typedef void(* c2sinfo_t)(playerent* d);
1111
typedef void(* movelocalplayer_t)(void);
1212
typedef void(* drawcrosshair_t)(playerent* p, int n, struct color* c, float size);
13+
typedef void(* midfunction_t)(void);
14+
typedef midfunction_t attackphysics_t;
1315

1416
bool WorldToScreen(vec pos3D, vec* pos2D);
1517

@@ -27,6 +29,7 @@ class AC_Client
2729
c2sinfo_t c2sinfo = nullptr;
2830
movelocalplayer_t movelocalplayer = nullptr;
2931
drawcrosshair_t drawcrosshair = nullptr;
32+
attackphysics_t attackphysics = nullptr;
3033
public:
3134
inline AC_Client()
3235
{
@@ -56,6 +59,7 @@ class AC_Client
5659
this->c2sinfo = (c2sinfo_t) GAME_OFFSET(0x20720);
5760
this->movelocalplayer = (movelocalplayer_t) GAME_OFFSET(0x25770);
5861
this->drawcrosshair = (drawcrosshair_t) GAME_OFFSET(0x8660);
62+
this->attackphysics = (attackphysics_t) GAME_OFFSET(0x63786);
5963
this->Updated = true;
6064
}
6165
};

src/hacks/ESP_Snaplines.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ void Base::Hacks::ESP_Snaplines(playerinfo_t* p_info)
3333
else
3434
LineColor = ImColor(Data::Settings::EspSnaplinesColorEnemy[0], Data::Settings::EspSnaplinesColorEnemy[1], Data::Settings::EspSnaplinesColorEnemy[2], Data::Settings::EspSnaplinesColorEnemy[3]);
3535

36-
BYTE tm = *(BYTE*)(&((char*)p_info->ent)[0x32C]);
3736
Draw->AddLine(LineOrigin, LineEnd, LineColor, LineThickness);
3837
}
3938
}

src/hacks/NoRecoil.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include <pch.h>
2+
#include <base.h>
3+
4+
__declspec(naked) void Base::Hacks::NoRecoil()
5+
{
6+
/*
7+
* This function is symbolic
8+
* The entire NoRecoil hack is
9+
* handled inside the 'attackphysics' hook.
10+
* This function only continues the code execution
11+
*/
12+
13+
__asm
14+
{
15+
jmp Data::p_attackphysics_ret
16+
}
17+
}

src/hooks/SwapBuffers.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ BOOL __stdcall Base::Hooks::SwapBuffers(_In_ HDC hdc)
5656
ImGui::Begin("ImGui Window");
5757
ImGui::Text("Test ImGUI Window");
5858

59+
ImGui::Checkbox("No Recoil", &Data::Settings::EnableNoRecoil);
60+
5961
ImGui::Checkbox("Enable ESP Box", &Data::Settings::EnableEspBox);
6062
if (Data::Settings::EnableEspBox)
6163
{

src/hooks/attackphysics.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include <pch.h>
2+
#include <base.h>
3+
4+
__declspec(naked) void Base::Hooks::attackphysics(void)
5+
{
6+
__asm
7+
{
8+
test Data::Settings::EnableNoRecoil, 0x1
9+
jne ignore_recoil
10+
orig_code:
11+
jmp Data::o_attackphysics
12+
13+
ignore_recoil:
14+
jmp Hacks::NoRecoil
15+
}
16+
}

src/hooks/hooks.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ void Base::Hooks::Init()
99
//Data::o_servertoclient = (servertoclient_t)mem::in::detour_trampoline(Data::p_servertoclient, (mem::voidptr_t)Hooks::servertoclient, Data::sz_servertoclient, mem::MEM_DT_M1);
1010
//Data::o_movelocalplayer = (movelocalplayer_t)mem::in::detour_trampoline(Data::p_movelocalplayer, (mem::voidptr_t)Hooks::movelocalplayer, Data::sz_movelocalplayer);
1111
Data::o_drawcrosshair = (drawcrosshair_t)mem::in::detour_trampoline(Data::p_drawcrosshair, (mem::voidptr_t)Hooks::drawcrosshair, Data::sz_drawcrosshair, mem::MEM_DT_M1);
12+
Data::o_attackphysics = (attackphysics_t)mem::in::detour_trampoline(Data::p_attackphysics, (mem::voidptr_t)Hooks::attackphysics, Data::sz_attackphysics, mem::MEM_DT_M1);
1213
}
1314

1415
void Base::Hooks::Shutdown()
1516
{
1617
SetWindowLongPtr(Data::hWindow, GWL_WNDPROC, (LONG_PTR)Data::oWndProc);
18+
mem::in::detour_restore(Data::p_attackphysics, (mem::byte_t*)Data::o_attackphysics, Data::sz_attackphysics);
1719
mem::in::detour_restore(Data::p_drawcrosshair, (mem::byte_t*)Data::o_drawcrosshair, Data::sz_drawcrosshair);
1820
//mem::in::detour_restore(Data::p_movelocalplayer, (mem::byte_t*)Data::o_movelocalplayer, Data::sz_movelocalplayer);
1921
//mem::in::detour_restore(Data::p_servertoclient, (mem::byte_t*)Data::o_servertoclient, Data::sz_servertoclient);

0 commit comments

Comments
 (0)