28 Commits

Author SHA1 Message Date
0381620f7d prediction, autoshove
fix undefined timing correction;
add shove timing condition;
adjust chainsaw shoving logic.
2024-12-14 07:56:48 +03:00
309a0f2c27 respect Penetrate_Teammates; guaranteed +use 2024-12-13 13:53:38 +03:00
6026914241 better *::Holster detection
m_flTimeAttackQueued is hack to get reload unaffected m_flNextAttack

there are probably false periods before m_flNextSecondaryAttack for Get_Target_Time which isn't critical (with Target_On_Simulation 0) but should be solved eventually
2024-12-12 07:54:57 +03:00
9efc44f17e autoshove during unholstering, use m_Gender instead of m_survivorCharacter
valve uses translator based on s_iSurvivorSet for m_survivorCharacter which is avoidable using m_Gender but potentially unsafe (on modded servers)
2024-12-11 06:54:07 +03:00
02e94e451c m_bInReload check for shotguns, predicted Sequence_Shift
they're using queued attacks.
2024-12-09 06:14:20 +03:00
5d9ab0c46b respect Interpolate_Extra_Commands 2024-12-08 03:59:45 +03:00
6768e29ea6 survivor names
useful for targeted healing/attacks
2024-12-08 02:17:09 +03:00
485ff54642 extend interpolation history; events ordering
intentionally was kept until "something" along with watermark inside of datamap lol

jitters in certain scenarios due to interpolation history not being filled which doesn't bothers anyone (probably) so i've removed "fading"
2024-12-06 03:11:27 +03:00
bd318c5576 Update README.md 2024-11-09 17:50:59 +03:00
82e3a8fd55 nothing 2024-11-09 17:36:57 +03:00
bdf8f51f29 nothing
merged from seg
2024-11-09 15:31:28 +03:00
e462dff4f5 revert to old approach
i've got problem with imagination regarding reliable method of relative correction on networking errors so old approach is preferable for moment

currently focusing on gmod-x64 fork of segregation so probably won't update l4d2 for period of time

[^\S\r\n]+(?=\r?$)
2024-11-05 18:11:13 +03:00
2dc81b9839 adjust special infected shotgun scaling
also explicitly specifying value type seems to be good practice to prevent unintended fraction down-rounding (just what've happened in paint.hpp with color 128 -> 127)
also remove scope check i've competely forgot about in draw_crosshair.hpp
2024-11-01 16:43:34 +03:00
6554d9e04e CTerrorPlayer::IsInvulnerable embryo
i'll get rid of server's timer eventually

also there's bug (i'll take look on later) of "correction accumulation" on tickbase when server is paused which causes memory corruption
2024-10-31 13:33:26 +03:00
68cc187ac7 remove addon restriction
if it doesn't works, probably because i've used magic offset (94)
2024-10-28 12:54:37 +03:00
bc24cea3b5 eliminate m_flStamina induced errors as spitter
for whatever reason m_flStamina inside of C_SpitAbility::UpdateAbility gets pinned at 3000.f (extreme latency concern? or just typo) which in result softlocks C_TerrorPlayer::IsImmobilized for moment ability is updated
it does seems as logic remnant before buffering of 1000.f got implemented (C_TerrorPlayer::IsImmobilized tests for >2000.f) which is needed to keep m_flStamina predicted rather than networked... applying same logic but once solves problem

hopefully i'm not breaking things by omitting m_zombieClass lol

on side note i've thought about adding infinite spit but unfortunately projectiles are using timer-based acceleration

revert: prevent buffer underrun on ack build-up (only for css)
2024-10-28 10:33:10 +03:00
5a7e62dd6f prevent buffer underrun on ack build-up 2024-10-26 16:13:36 +03:00
5420ace13d normalize action value for xor testing 2024-10-25 08:39:34 +03:00
08820dca32 game update, cwitch::getglowcolor 2024-10-25 08:12:24 +03:00
338a781f22 prediction redesignment (details in description)
my plan to use constant buffering to instantize actions (as healing, reviving) turned out ill-fated:
- many things are using server relative timing: rock stuns, lagcompensation and many of interactables (they're all getting delayed by 150*(1/30) seconds)
- there's always undefined behaviour no matter whether i'm constantly buffering or periodically
- implementing logic that prevents buffering on when you're about to get hit by rock or to use something would adjust weapon timings (they're all getting delayed by 150*(1/30) seconds)
thus i've removed some of things i've worked on (as exploits, viewmodel timing correction)

mostly same thing about extra commands up to 21 while exploiting (my old trick doesn't works anymore): it's either undefined behaviour or feature cuttage

but on good note:
- prediction got hardened against timing fluctations
- prediction now respects network timing updates
- speedhacking issued undefined behaviour is significantly mitigated (not completely but i'd prefer to not bloat my code over such rare cases)

i'll be working on features from now, here's potential list (anything that involves guessing is very low priority):
rock prediction (involves guessing, it's not lagcompensated)
tongue cutter (involves guessing)
tongue aimbot/triggerbot (i've actually forgot to adjust lagcompensation for it but i'm not playing versus anyway)
animation cycles prediction (involves guessing, u-rates are synced already so it's just about latency adjustments now)
minigun aimbot (i'd like to work on it but just one thing that it's angle is limited thus impossibility to compensate spread accurately ruins it for me)
visual improvements (such as visually removing m_duckUntilOnGround)
2024-10-24 12:39:44 +03:00
f26e099d55 some more progress on prediction redesignment
don't have much time today. postponing cl_sendmove for tomorrow
2024-10-22 07:00:10 +03:00
924e32b297 some progress on prediction redesignment 2024-10-21 06:13:28 +03:00
cd2b23d069 ensure CPredictionCopy contains correct value for given frame
water? maybe. +20 is to be removed anyway
2024-10-19 03:42:23 +03:00
83ad090b63 overlook (binaries are not affected) 2024-10-18 05:45:58 +03:00
d9bf5dea6d overlook (binaries not affected) 2024-10-18 04:07:32 +03:00
2028a2886b bug fixes, logic fixes 2024-10-18 01:46:40 +03:00
1af4705b49 instant heal (prototype), minor logic fixes
instant revive, rapidfire or anything timer based uses same logic
2024-10-17 05:02:19 +03:00
d174b651c9 infinite charger (https://imgur.com/WXCNAdt) 2024-10-16 04:08:17 +03:00
39 changed files with 831 additions and 1037 deletions

View File

@ -1,6 +1,38 @@
#pragma once
namespace Byte_Manager
{
#include "Byte_Manager_Functions.hpp"
void Set_Bytes(__int8 Writeable, void* Address, unsigned __int32 Size, unsigned __int8 Byte)
{
if (Writeable == 0)
{
DWORD Previous_Access_Rights;
VirtualProtect(Address, Size, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
__builtin_memset(Address, Byte, Size);
VirtualProtect(Address, Size, Previous_Access_Rights, &Previous_Access_Rights);
}
else
{
__builtin_memset(Address, Byte, Size);
}
}
void Copy_Bytes(__int8 Writeable, void* Address, unsigned __int32 Size, void* Bytes)
{
if (Writeable == 0)
{
DWORD Previous_Access_Rights;
VirtualProtect(Address, Size, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
__builtin_memcpy(Address, Bytes, Size);
VirtualProtect(Address, Size, Previous_Access_Rights, &Previous_Access_Rights);
}
else
{
__builtin_memcpy(Address, Bytes, Size);
}
}
};

View File

@ -1,22 +0,0 @@
#pragma once
#ifdef Bits_32
void Copy_Bytes(__int8 Modify_Access_Rights, void* Starting_Location, unsigned __int32 Bytes_Amount, void* Bytes)
#else
void Copy_Bytes(__int8 Modify_Access_Rights, void* Starting_Location, unsigned __int64 Bytes_Amount, void* Bytes)
#endif
{
unsigned long __int32 Previous_Access_Rights;
if (Modify_Access_Rights == 1)
{
VirtualProtect(Starting_Location, Bytes_Amount, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
}
__builtin_memcpy(Starting_Location, Bytes, Bytes_Amount);
if (Modify_Access_Rights == 1)
{
VirtualProtect(Starting_Location, Bytes_Amount, Previous_Access_Rights, &Previous_Access_Rights);
}
}

View File

@ -1,24 +0,0 @@
#pragma once
#ifdef Bits_32
void* Find_Bytes(void* Starting_Location, void* Bytes, unsigned __int32 Bytes_Amount)
#else
void* Find_Bytes(void* Starting_Location, void* Bytes, unsigned __int64 Bytes_Amount)
#endif
{
Compare_Bytes_Label:
{
if (__builtin_memcmp(Starting_Location, Bytes, Bytes_Amount) == 0)
{
return Starting_Location;
}
#ifdef Bits_32
Starting_Location = (void*)((unsigned __int32)Starting_Location + 1);
#else
Starting_Location = (void*)((unsigned __int64)Starting_Location + 1);
#endif
goto Compare_Bytes_Label;
}
}

View File

@ -1,7 +0,0 @@
#pragma once
#include "Byte_Manager_Find_Bytes.hpp"
#include "Byte_Manager_Set_Bytes.hpp"
#include "Byte_Manager_Copy_Bytes.hpp"

View File

@ -1,22 +0,0 @@
#pragma once
#ifdef Bits_32
void Set_Bytes(__int8 Modify_Access_Rights, void* Starting_Location, unsigned __int32 Bytes_Amount, unsigned __int8 Byte)
#else
void Set_Bytes(__int8 Modify_Access_Rights, void* Starting_Location, unsigned __int64 Bytes_Amount, unsigned __int8 Byte)
#endif
{
unsigned long __int32 Previous_Access_Rights;
if (Modify_Access_Rights == 1)
{
VirtualProtect(Starting_Location, Bytes_Amount, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
}
__builtin_memset(Starting_Location, Byte, Bytes_Amount);
if (Modify_Access_Rights == 1)
{
VirtualProtect(Starting_Location, Bytes_Amount, Previous_Access_Rights, &Previous_Access_Rights);
}
}

View File

@ -6,5 +6,5 @@ void __thiscall Redirected_Calculate_View(void* Player, void* Unknown_Parameter_
using Get_Eye_Angles_Type = float*(__thiscall*)(void* Entity);
Byte_Manager::Copy_Bytes(0, Angles, sizeof(float[3]), Get_Eye_Angles_Type((unsigned __int32)Client_Module + 2237296)(Player));
Byte_Manager::Copy_Bytes(1, Angles, sizeof(float[3]), Get_Eye_Angles_Type((unsigned __int32)Client_Module + 2237296)(Player));
}

File diff suppressed because it is too large Load Diff

View File

@ -1,64 +1,67 @@
void Redirected_Draw_Crosshair()
{
if ((*(__int32*)(*(unsigned __int32*)((unsigned __int32)Client_Module + 7498712) + 5008) | 55) == 55)
static float Rotation_Angle;
auto Draw_Storm = [&](__int32 X, __int32 Y, __int32 Additional_Rotation_Angle)
{
static float Rotation_Angle;
using Set_Color_Type = void(__thiscall**)(void* Surface, unsigned __int8 Red, unsigned __int8 Green, unsigned __int8 Blue, unsigned __int8 Alpha);
auto Draw_Storm = [&](__int32 X, __int32 Y, __int32 Additional_Rotation_Angle)
void* Surface = *(void**)((unsigned __int32)Client_Module + 8960244);
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 0, 0, 255);
using Draw_Circle_Type = void(__thiscall**)(void* Surface, __int32 X, __int32 Y, __int32 Radius, __int32 Segments);
X += Interface_Storm_Rotation_Radius.Integer * __builtin_cosf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360.f) * 3.1415927f / 180.f);
Y += Interface_Storm_Rotation_Radius.Integer * __builtin_sinf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360.f) * 3.1415927f / 180.f);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 128, 255, 255);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
};
__int32 Storm_Number = 0;
using Get_Screen_Size_Type = __int32(__cdecl*)(__int32* Width, __int32* Height);
__int32 Screen_Width;
__int32 Screen_Height;
Get_Screen_Size_Type((unsigned __int32)Client_Module + 1780352)(&Screen_Width, &Screen_Height);
Screen_Width /= 2;
Screen_Height /= 2;
Draw_Storm_Label:
{
if (Storm_Number < Interface_Storm_Iterations.Integer)
{
using Set_Color_Type = void(__thiscall**)(void* Surface, unsigned __int8 Red, unsigned __int8 Green, unsigned __int8 Blue, unsigned __int8 Alpha);
Draw_Storm(Screen_Width, Screen_Height, Storm_Number * 360 / Interface_Storm_Iterations.Integer);
void* Surface = *(void**)((unsigned __int32)Client_Module + 8960244);
Storm_Number += 1;
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 0, 0, 255);
using Draw_Circle_Type = void(__thiscall**)(void* Surface, __int32 X, __int32 Y, __int32 Radius, __int32 Segments);
X += Interface_Storm_Rotation_Radius.Integer * __builtin_cosf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360) * 3.1415927f / 180);
Y += Interface_Storm_Rotation_Radius.Integer * __builtin_sinf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360) * 3.1415927f / 180);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 128, 255, 255);
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
};
__int32 Storm_Number = 0;
using Get_Screen_Size_Type = __int32(__cdecl*)();
__int32 Screen_Width = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738576)() / 2;
__int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)() / 2;
Draw_Storm_Label:
{
if (Storm_Number < Interface_Storm_Iterations.Integer)
{
Draw_Storm(Screen_Width, Screen_Height, Storm_Number * 360 / Interface_Storm_Iterations.Integer);
Storm_Number += 1;
goto Draw_Storm_Label;
}
goto Draw_Storm_Label;
}
Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360);
}
Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360.f);
}

View File

@ -4,8 +4,6 @@
#include <cstdio>
#define Bits_32
#include "Byte_Manager/Byte_Manager.hpp"
#include "Redirection_Manager/Redirection_Manager.hpp"
@ -18,6 +16,8 @@ void* Client_Module;
#include "Post_Network_Data_Received.hpp"
#include "Set_Move_Type.hpp"
#include "Interpolate.hpp"
#include "Update_Animations.hpp"
@ -117,7 +117,7 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
}
else
{
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)LoadLibraryW(L"vaudio_speex.dll") + 9440), 1, 195);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)LoadLibraryW(L"vaudio_speex.dll") + 9440), 1, 195);
AllocConsole();
@ -161,16 +161,11 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
GetConsoleScreenBufferInfo(Standard_Output_Handle, &Console_Screen_Buffer_Information);
COORD Top_Left =
{
0,
COORD Top_Left = { };
0
};
DWORD Characters_Written;
DWORD Characters_Written_Count;
FillConsoleOutputAttribute(Standard_Output_Handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE, Console_Screen_Buffer_Information.dwSize.X * Console_Screen_Buffer_Information.dwSize.Y, Top_Left, &Characters_Written_Count);
FillConsoleOutputAttribute(Standard_Output_Handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE, Console_Screen_Buffer_Information.dwSize.X * Console_Screen_Buffer_Information.dwSize.Y, Top_Left, &Characters_Written);
Engine_Module = GetModuleHandleW(L"engine.dll");
@ -183,29 +178,33 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
_putws(L"[ + ] Events");
{
Redirection_Manager::Redirect_Function(Original_Post_Network_Data_Received_Caller, 0, (void*)((unsigned __int32)Client_Module + 1555264), 1, (void*)Redirected_Post_Network_Data_Received);
Original_Post_Network_Data_Received_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1555264), (void*)Redirected_Post_Network_Data_Received);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 316816), 1, 195);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 316816), 1, 195);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Engine_Module + 521741), 1, 235);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Engine_Module + 350575), 1, 94);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Engine_Module + 521741), 1, 235);
*(void**)((unsigned __int32)Client_Module + 7492840) = (void*)Redirected_Set_Move_Type;
}
_putws(L"[ + ] Interpolation");
{
Redirection_Manager::Redirect_Function(Original_Interpolate_Caller, 0, (void*)((unsigned __int32)Client_Module + 214256), 1, (void*)Redirected_Interpolate);
Original_Interpolate_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 214256), (void*)Redirected_Interpolate);
}
_putws(L"[ + ] Animations");
{
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 205296), (void*)Redirected_Update_Animations);
Redirection_Manager::Redirect_Function(Original_Estimate_Velocity_Caller, 0, (void*)((unsigned __int32)Client_Module + 311856), 1, (void*)Redirected_Estimate_Velocity);
Original_Estimate_Velocity_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 311856), (void*)Redirected_Estimate_Velocity);
unsigned __int8 Maintain_Sequence_Transitions_Bytes[3] = { 194, 24, 0 };
Byte_Manager::Copy_Bytes(1, (void*)((unsigned __int32)Client_Module + 245232), sizeof(Maintain_Sequence_Transitions_Bytes), Maintain_Sequence_Transitions_Bytes);
Byte_Manager::Copy_Bytes(0, (void*)((unsigned __int32)Client_Module + 245232), sizeof(Maintain_Sequence_Transitions_Bytes), Maintain_Sequence_Transitions_Bytes);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 3244278), 1, 15);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 3244278), 1, 15);
}
_putws(L"[ + ] Prediction");
@ -224,27 +223,27 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
Prediction_Descriptor->Parent = &Original_Prediction_Descriptor;
Redirection_Manager::Redirect_Function(Original_Spawn_Grenade_Caller, 2, (void*)((unsigned __int32)Client_Module + 2227424), 1, (void*)Redirected_Spawn_Grenade);
Original_Spawn_Grenade_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 2227424), (void*)Redirected_Spawn_Grenade);
Redirection_Manager::Redirect_Function(Original_Update_Caller, 0, (void*)((unsigned __int32)Client_Module + 1554304), 1, (void*)Redirected_Update);
Original_Update_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1554304), (void*)Redirected_Update);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1554528), 1, 235);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1554528), 1, 235);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1557776), 1, 235);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1557776), 1, 235);
Redirection_Manager::Redirect_Function(Original_Run_Command_Caller, 0, (void*)((unsigned __int32)Client_Module + 1553504), 1, (void*)Redirected_Run_Command);
Original_Run_Command_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1553504), (void*)Redirected_Run_Command);
Redirection_Manager::Redirect_Function(Original_Process_Movement_Caller, 2, (void*)((unsigned __int32)Client_Module + 2590832), 1, (void*)Redirected_Process_Movement);
Original_Process_Movement_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 2590832), (void*)Redirected_Process_Movement);
Redirection_Manager::Redirect_Function(Original_Play_Footstep_Sound_Caller, 0, (void*)((unsigned __int32)Client_Module + 978464), 1, (void*)Redirected_Play_Footstep_Sound);
Original_Play_Footstep_Sound_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 978464), (void*)Redirected_Play_Footstep_Sound);
Redirection_Manager::Redirect_Function(Original_Finish_Move_Caller, 2, (void*)((unsigned __int32)Client_Module + 1553264), 1, (void*)Redirected_Finish_Move);
Original_Finish_Move_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 1553264), (void*)Redirected_Finish_Move);
Redirection_Manager::Redirect_Function(Original_Item_Post_Frame_Caller, 3, (void*)((unsigned __int32)Client_Module + 2542896), 1, (void*)Redirected_Item_Post_Frame);
Original_Item_Post_Frame_Caller = Redirection_Manager::Redirect_Function(3, (void*)((unsigned __int32)Client_Module + 2542896), (void*)Redirected_Item_Post_Frame);
*(__int32*)((unsigned __int32)Original_Item_Post_Frame_Caller + 5) = (__int32)((unsigned __int32)Client_Module + 2438551) - (__int32)Original_Item_Post_Frame_Caller;
Redirection_Manager::Redirect_Function(Original_Perform_Trace_Caller, 0, (void*)((unsigned __int32)Client_Module + 3093744), 1, (void*)Redirected_Perform_Trace);
Original_Perform_Trace_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 3093744), (void*)Redirected_Perform_Trace);
Original_Perform_Shove_Trace_Caller = (void*)((unsigned __int32)Client_Module + 3221111);
@ -253,50 +252,52 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
_putws(L"[ + ] Network");
{
Redirection_Manager::Redirect_Function(Original_Read_Packets_Caller, 0, (void*)((unsigned __int32)Engine_Module + 499264), 1, (void*)Redirected_Read_Packets);
Original_Read_Packets_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Engine_Module + 499264), (void*)Redirected_Read_Packets);
Redirection_Manager::Redirect_Function(Original_Move_Caller, 3, (void*)((unsigned __int32)Engine_Module + 512288), 1, (void*)Redirected_Move);
Original_Move_Caller = Redirection_Manager::Redirect_Function(3, (void*)((unsigned __int32)Engine_Module + 512288), (void*)Redirected_Move);
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Engine_Module + 511680), (void*)Redirected_Send_Move);
}
_putws(L"[ + ] Input");
{
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1250629), 3, 144);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1250629), 3, 144);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 417204), 1, 235);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 417204), 1, 235);
Redirection_Manager::Redirect_Function(Original_Copy_Command_Caller, 0, (void*)((unsigned __int32)Client_Module + 1094624), 1, (void*)Redirected_Copy_Command);
Original_Copy_Command_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1094624), (void*)Redirected_Copy_Command);
}
_putws(L"[ + ] Effects");
{
Redirection_Manager::Redirect_Function(Original_Calculate_View_Caller, 0, (void*)((unsigned __int32)Client_Module + 132944), 1, (void*)Redirected_Calculate_View);
Original_Calculate_View_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 132944), (void*)Redirected_Calculate_View);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 133424), 1, 235);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 133424), 1, 235);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 2881566), 1, 246);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 2881566), 1, 246);
Redirection_Manager::Redirect_Function(Original_Draw_Effect_Caller, 0, (void*)((unsigned __int32)Client_Module + 1425888), 1, (void*)Redirected_Draw_Effect);
Original_Draw_Effect_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1425888), (void*)Redirected_Draw_Effect);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1868237), 1, 52);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1868237), 1, 52);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 2655546), 1, 216);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 2655546), 1, 216);
*(void**)((unsigned __int32)Client_Module + 8115120) = (void*)((unsigned __int32)Client_Module + 955708);
}
_putws(L"[ + ] Paint");
{
Redirection_Manager::Redirect_Function(Original_Write_Texture_Caller, 0, (void*)((unsigned __int32)GetModuleHandleW(L"vguimatsurface.dll") + 100560), 1, (void*)Redirected_Write_Texture);
Original_Write_Texture_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)GetModuleHandleW(L"vguimatsurface.dll") + 100592), (void*)Redirected_Write_Texture);
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 2913504), (void*)Redirected_Paint);
Redirection_Manager::Redirect_Function(Original_Get_Glow_Color_Caller, 1, (void*)((unsigned __int32)Client_Module + 2455600), 1, (void*)Redirected_Get_Glow_Color);
Original_Get_Glow_Color_Caller = Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 2455600), (void*)Redirected_Get_Glow_Color);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 3244715), 1, 49);
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 2301184), (void*)Redirected_Draw_Crosshair);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 2930985), 1, 235);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 2930985), 1, 235);
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 3118720), (void*)Redirected_Draw_Crosshair);
}

View File

@ -50,7 +50,7 @@ __int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
{
if (*(__int8*)((unsigned __int32)Entity + 221) == 0)
{
if (*(__int32*)((unsigned __int32)Entity + 572) == 131088)
if ((*(__int32*)((unsigned __int32)Entity + 572) - 131088 & 255) == 0)
{
using Get_Sequence_Name_Type = char*(__thiscall*)(void* Entity, __int32 Sequence);

View File

@ -37,11 +37,11 @@ Interface_Structure Interface_Storm_Speed;
void Implement_Extended_Interface()
{
auto Create_Console_Interface = [](Interface_Structure* Interface, char* Name, char* Value, void* Handler)
auto Create_Interface = [](Interface_Structure* Interface, char* Name, char* Value, void* Handler)
{
using Create_Console_Variable_Type = void(__thiscall*)(Interface_Structure* Interface, char* Name, char* Value, void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Handler);
using Create_Variable_Type = void(__thiscall*)(Interface_Structure* Interface, char* Name, char* Value, void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Handler);
Create_Console_Variable_Type((unsigned __int32)Engine_Module + 2636656)(Interface, Name, Value, nullptr, nullptr, Handler);
Create_Variable_Type((unsigned __int32)Engine_Module + 2636368)(Interface, Name, Value, nullptr, nullptr, Handler);
*(__int32*)((unsigned __int32)Interface + 20) &= ~10;
@ -50,29 +50,29 @@ void Implement_Extended_Interface()
#define Pointer_Name(Interface) &Interface, (char*)#Interface + 10
Create_Console_Interface(Pointer_Name(Interface_Extra_Commands), (char*)"4", nullptr);
Create_Interface(Pointer_Name(Interface_Extra_Commands), (char*)"5", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Interpolate_Extra_Commands), (char*)"1", nullptr);
Create_Interface(Pointer_Name(Interface_Interpolate_Extra_Commands), (char*)"1", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"0", nullptr);
Create_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"0", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Riot_Deprioritize), (char*)"0", nullptr);
Create_Interface(Pointer_Name(Interface_Riot_Deprioritize), (char*)"0", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Penetrate_Teammates), (char*)"0", nullptr);
Create_Interface(Pointer_Name(Interface_Penetrate_Teammates), (char*)"0", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Aim_Intersection), (char*)"1", nullptr);
Create_Interface(Pointer_Name(Interface_Aim_Intersection), (char*)"1", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Penetration_Damage), (char*)"20", nullptr);
Create_Interface(Pointer_Name(Interface_Penetration_Damage), (char*)"12", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Equipment_Distance), (char*)"2048", nullptr);
Create_Interface(Pointer_Name(Interface_Equipment_Distance), (char*)"2048", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Storm_Rotation_Radius), (char*)"24", nullptr);
Create_Interface(Pointer_Name(Interface_Storm_Rotation_Radius), (char*)"24", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Storm_Radius), (char*)"8", nullptr);
Create_Interface(Pointer_Name(Interface_Storm_Radius), (char*)"8", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Storm_Segments), (char*)"12", nullptr);
Create_Interface(Pointer_Name(Interface_Storm_Segments), (char*)"12", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Storm_Iterations), (char*)"16", nullptr);
Create_Interface(Pointer_Name(Interface_Storm_Iterations), (char*)"16", nullptr);
Create_Console_Interface(Pointer_Name(Interface_Storm_Speed), (char*)"512", nullptr);
Create_Interface(Pointer_Name(Interface_Storm_Speed), (char*)"512", nullptr);
}

View File

@ -4,9 +4,9 @@ void __thiscall Redirected_Finish_Move(void* Unknown_Parameter_1, void* Player,
{
float X = *(float*)((unsigned __int32)Move_Data + 76);
if (X > 180)
if (X > 180.f)
{
X -= 360;
X -= 360.f;
}
*(float*)((unsigned __int32)Move_Data + 76) = std::clamp(X, -90.f, 90.f);

View File

@ -2,7 +2,7 @@ void* Original_Get_Glow_Color_Caller;
void __thiscall Redirected_Get_Glow_Color(void* Entity, void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, void* Unknown_Parameter_4)
{
if (Get_Identifier(Entity, 0, 0) != 232)
if (Get_Identifier(Entity, 0, 0) == -1)
{
(decltype(&Redirected_Get_Glow_Color)(Original_Get_Glow_Color_Caller))(Entity, Unknown_Parameter_1, Unknown_Parameter_2, Unknown_Parameter_3, Unknown_Parameter_4);
}

View File

@ -1,27 +1,10 @@
struct Global_Variables_Structure
{
__int8 Additional_Bytes_1[12];
float Current_Time;
float Frame_Time;
__int8 Additional_Bytes_2[8];
float Interval_Per_Tick;
};
void* Original_Interpolate_Caller;
__int8 __thiscall Redirected_Interpolate(void* Entity, float Time)
__int8 __thiscall Redirected_Interpolate(void* Entity, void* Unknown_Parameter)
{
if (Entity == *(void**)((unsigned __int32)Client_Module + 7498712))
{
Time = (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Current_Time;
*(__int32*)((unsigned __int32)Entity + 5328) -= *(__int32*)((unsigned __int32)Entity + 16);
return (decltype(&Redirected_Interpolate)(Original_Interpolate_Caller))(Entity, Time);
return (decltype(&Redirected_Interpolate)(Original_Interpolate_Caller))(Entity, Unknown_Parameter);
}
return 1;

View File

@ -2,7 +2,7 @@ void* Original_Item_Post_Frame_Caller;
void __thiscall Redirected_Item_Post_Frame(void* Player)
{
if (*(void**)((unsigned __int32)__builtin_frame_address(0) + 60) == (void*)((unsigned __int32)Client_Module + 423107))
if (*(void**)((unsigned __int32)__builtin_frame_address(0) + 88) == (void*)((unsigned __int32)Client_Module + 423107))
{
(decltype(&Redirected_Item_Post_Frame)(Original_Item_Post_Frame_Caller))(Player);
}

View File

@ -1,7 +1,7 @@
void* Original_Move_Caller;
__int32 Extra_Commands;
void* Original_Move_Caller;
void Redirected_Move(float Unknown_Parameter, __int8 Final)
{
using Run_Prediction_Type = void(__cdecl*)();
@ -16,6 +16,10 @@ void Redirected_Move(float Unknown_Parameter, __int8 Final)
Update_Animations_Type((unsigned __int32)Client_Module + 205296)();
using Fire_Events_Type = void(__cdecl*)();
Fire_Events_Type((unsigned __int32)Engine_Module + 521648)();
Update_Animation_Time = (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Current_Time;
Update_Animation_Type = 1;
@ -23,10 +27,6 @@ void Redirected_Move(float Unknown_Parameter, __int8 Final)
Update_Animations_Type((unsigned __int32)Client_Module + 205296)();
Update_Animation_Type = 0;
using Fire_Events_Type = void(__cdecl*)();
Fire_Events_Type((unsigned __int32)Engine_Module + 521648)();
}
Extra_Commands = -1;

View File

@ -24,7 +24,7 @@ void __thiscall Redirected_Paint(void* Panel)
{
using Get_Origin_Type = float*(__thiscall*)(void* Entity);
float* Local_Player_Origin = Get_Origin_Type((unsigned __int32)Client_Module + 297584)(Local_Player);
float* Local_Origin = Get_Origin_Type((unsigned __int32)Client_Module + 297584)(Local_Player);
float* Entity_Origin = Get_Origin_Type((unsigned __int32)Client_Module + 297584)(Entity);
@ -36,7 +36,7 @@ void __thiscall Redirected_Paint(void* Panel)
0,
__builtin_powf(Local_Player_Origin[0] - Entity_Origin[0], 2) + __builtin_powf(Local_Player_Origin[1] - Entity_Origin[1], 2) + __builtin_powf(Local_Player_Origin[2] - Entity_Origin[2], 2)
__builtin_powf(Local_Origin[0] - Entity_Origin[0], 2.f) + __builtin_powf(Local_Origin[1] - Entity_Origin[1], 2.f) + __builtin_powf(Local_Origin[2] - Entity_Origin[2], 2.f)
};
if (Identifier >= 0)
@ -106,21 +106,21 @@ void __thiscall Redirected_Paint(void* Panel)
Initialize_Vertices_Label:
{
Hitbox_Vertices[0][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
Hitbox_Vertices[1][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
Hitbox_Vertices[2][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
Hitbox_Vertices[3][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
Hitbox_Vertices[4][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
Hitbox_Vertices[5][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
Hitbox_Vertices[6][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
Hitbox_Vertices[7][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
if (Axis_Number != 2)
{
Axis_Number += 1;
@ -145,9 +145,9 @@ void __thiscall Redirected_Paint(void* Panel)
__int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)();
Screen[0] = Screen[0] / 2 * Screen_Width + Screen_Width / 2;
Screen[0] = Screen[0] / 2.f * Screen_Width + Screen_Width / 2.f;
Screen[1] = -Screen[1] / 2 * Screen_Height + Screen_Height / 2;
Screen[1] = -Screen[1] / 2.f * Screen_Height + Screen_Height / 2.f;
Bounds[0] = min(Bounds[0], Screen[0]);
@ -176,15 +176,15 @@ void __thiscall Redirected_Paint(void* Panel)
}
}
Bounds[0] -= 2;
Bounds[0] -= 2.f;
Bounds[1] += 2;
Bounds[1] += 2.f;
Bounds[2] -= 2;
Bounds[2] -= 2.f;
Bounds[3] += 2;
Bounds[3] += 2.f;
return (Bounds[1] != 2) * (Bounds[3] != 2);
return (Bounds[1] != 2.f) * (Bounds[3] != 2.f);
}
return 0;
@ -217,7 +217,7 @@ void __thiscall Redirected_Paint(void* Panel)
{ 121, { { 255, 255, 255 }, (wchar_t*)L"Pain" } },
{ 232, { { 0, 255, 0 }, (wchar_t*)L"Survivor" } },
{ 232, { { 0, 255, 0 } } },
{ 256, { { 255, 255, 255 }, (wchar_t*)L"Ammo" } },
@ -238,6 +238,13 @@ void __thiscall Redirected_Paint(void* Panel)
Paint_Data_Structure* Paint_Data = &Paint_Data_List[Target->Identifier];
if (Target->Identifier == 232)
{
static wchar_t* Survivors[8] = { (wchar_t*)L"Bill", (wchar_t*)L"Zoey", (wchar_t*)L"Francis", (wchar_t*)L"Louis", (wchar_t*)L"Nick", (wchar_t*)L"Rochelle", (wchar_t*)L"Coach", (wchar_t*)L"Ellis" };
Paint_Data->Name = Survivors[*(__int32*)((unsigned __int32)Target->Self + 52) - 3];
}
__int8 Ghost = 0;
if (*(__int32*)((unsigned __int32)Target->Self + 236) != 0)
@ -270,7 +277,7 @@ void __thiscall Redirected_Paint(void* Panel)
if (Ghost == 0)
{
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, (__int32)(Paint_Data->Color[0] / 2 + 0.5f), (__int32)(Paint_Data->Color[1] / 2 + 0.5f), (__int32)(Paint_Data->Color[2] / 2 + 0.5f), 128);
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, (__int32)(Paint_Data->Color[0] / 2.f + 0.5f), (__int32)(Paint_Data->Color[1] / 2.f + 0.5f), (__int32)(Paint_Data->Color[2] / 2.f + 0.5f), 128);
}
else
{
@ -304,7 +311,7 @@ void __thiscall Redirected_Paint(void* Panel)
Write_Character = Text[0];
Draw_Text_Type((unsigned __int32)Engine_Module + 2219056)(Font, 0, 0, 0, 0, 0, 0, Text);
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, 0, 0, 0, 0, 0, 0, Text);
if (Character != L'~')
{
@ -362,11 +369,11 @@ void __thiscall Redirected_Paint(void* Panel)
if (Ghost == 0)
{
Draw_Text_Type((unsigned __int32)Engine_Module + 2219056)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, Paint_Data->Color[0], Paint_Data->Color[1], Paint_Data->Color[2], 255, Text);
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, Paint_Data->Color[0], Paint_Data->Color[1], Paint_Data->Color[2], 255, Text);
}
else
{
Draw_Text_Type((unsigned __int32)Engine_Module + 2219056)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, 128, 128, 128, 255, Text);
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, 128, 128, 128, 255, Text);
}
Write_Character = 0;

View File

@ -1,6 +1,6 @@
void __thiscall Perform_Shove_Trace(void* Stack)
{
void* Entity = *(void**)((unsigned __int32)Stack - 276);
void* Entity = *(void**)((unsigned __int32)Stack + 332);
if (Entity == Perform_Trace_Target)
{
@ -10,7 +10,7 @@ void __thiscall Perform_Shove_Trace(void* Stack)
void* Original_Perform_Shove_Trace_Caller;
void __declspec(naked) Redirected_Perform_Shove_Trace()
__attribute__((naked)) void Redirected_Perform_Shove_Trace()
{
asm("leal -304(%ebp), %eax");
asm("pushl %eax");

View File

@ -1,21 +1,28 @@
void* Perform_Trace_Target;
float* Get_Center(void* Entity)
{
using Get_Center_Type = float*(__thiscall*)(void* Entity);
return Get_Center_Type((unsigned __int32)Client_Module + 114400)(Entity);
}
float Perform_Trace_Damage;
float Vector_Normalize(float* Vector)
{
using Vector_Normalize_Type = float(__thiscall*)(float* Vector);
return Vector_Normalize_Type((unsigned __int32)Client_Module + 3536176)(Vector);
return Vector_Normalize_Type((unsigned __int32)Client_Module + 3536192)(Vector);
};
void Angle_Vectors(float* Angles, float* Forward, float* Right, float* Up)
{
using Angle_Vectors_Type = void(__cdecl*)(float* Angles, float* Forward, float* Right, float* Up);
Angle_Vectors_Type((unsigned __int32)Client_Module + 3539376)(Angles, Forward, Right, Up);
Angle_Vectors_Type((unsigned __int32)Client_Module + 3539392)(Angles, Forward, Right, Up);
};
float Perform_Trace_Damage;
void __thiscall Perform_Trace(void* Stack)
{
void* Entity = *(void**)((unsigned __int32)Stack + 312);
@ -30,6 +37,10 @@ void __thiscall Perform_Trace(void* Stack)
if (*(__int32*)((unsigned __int32)Entity + 228) == *(__int32*)((unsigned __int32)Local_Player + 228))
{
Perform_Trace_Target = nullptr;
Perform_Trace_Damage = 0.f;
return;
}
}
@ -61,13 +72,13 @@ void __thiscall Perform_Trace(void* Stack)
{
if (Interface_Penetration_Damage.Integer == 0)
{
Perform_Trace_Damage = 1;
Perform_Trace_Damage = 1.f;
}
else
{
float* Start = (float*)((unsigned __int32)Stack + 236);
float Distance = __builtin_sqrtf(__builtin_powf(End[0] - Start[0], 2) + __builtin_powf(End[1] - Start[1], 2) + __builtin_powf(End[2] - Start[2], 2));
float Distance = __builtin_sqrtf(__builtin_powf(End[0] - Start[0], 2.f) + __builtin_powf(End[1] - Start[1], 2.f) + __builtin_powf(End[2] - Start[2], 2.f));
float Damage;
@ -95,7 +106,7 @@ void __thiscall Perform_Trace(void* Stack)
{
using Get_Difficulty_Type = __int32(__cdecl*)();
float Multipliers[3] = { 0.8f, 0.7f, 0.6f };
static float Multipliers[3] = { 0.8f, 0.7f, 0.6f };
Damage *= Multipliers[Get_Difficulty_Type((unsigned __int32)Client_Module + 2650448)()];
};
@ -119,13 +130,11 @@ void __thiscall Perform_Trace(void* Stack)
{
using Get_Bounds_Type = void(__thiscall*)(void* Collision, float* Start, float* Bounds);
using Get_Center_Type = float* (__thiscall*)(void* Entity);
void* Local_Player = *(void**)Trace_Information;
float Bounds[3];
Get_Bounds_Type((unsigned __int32)Client_Module + 878528)((void*)((unsigned __int32)Entity + 540), Get_Center_Type((unsigned __int32)Client_Module + 114400)(Local_Player), Bounds);
Get_Bounds_Type((unsigned __int32)Client_Module + 878528)((void*)((unsigned __int32)Entity + 540), Get_Center(Local_Player), Bounds);
using Calculate_Distance_Type = float(__thiscall*)(void* Collision, float* Bounds);
@ -133,20 +142,15 @@ void __thiscall Perform_Trace(void* Stack)
if (Distance < 100)
{
Damage += 4.f * Damage * __builtin_powf(1.f - Distance / 100.f, 2);
Damage += 4.f * Damage * __builtin_powf(1.f - Distance / 100.f, 2.f);
}
}
}
};
if (Identifier == 277)
if (Identifier == 13)
{
if (Group != 1)
{
Apply_Difficulty_Scaling();
}
Apply_Shotgun_Scaling();
Damage *= *(float*)((unsigned __int32)Entity + 336) - *(float*)((unsigned __int32)Entity + 472) >= 0.5f;
}
else
{
@ -223,7 +227,16 @@ void __thiscall Perform_Trace(void* Stack)
}
else
{
if (Identifier != 13)
if (Identifier == 277)
{
if (Group != 1)
{
Apply_Difficulty_Scaling();
}
Apply_Shotgun_Scaling();
}
else
{
if (Identifier + Bullet_Type == 284)
{
@ -232,9 +245,9 @@ void __thiscall Perform_Trace(void* Stack)
if ((Identifier != 276) + (Upgrade_Type != 1) == 2)
{
float Multipliers[8] = { 1.f, 4.f, 1.f, 1.25f, 1.f, 1.f, 0.75f, 0.75f };
static float Multipliers[8] = { 1.f, 4.f, 1.f, 1.25f, 1.f, 1.f, 0.75f, 0.75f };
Damage *= Multipliers[Group];
Damage *= min(Multipliers[Group], 4.f - 2.75f * Is_Shotgun);
}
if (Get_Identifier(Entity, 1, 0) == 99)
@ -284,9 +297,7 @@ void __thiscall Perform_Trace(void* Stack)
{
float Inflictor_Direction[3];
using Get_Center_Type = float*(__thiscall*)(void* Entity);
float* Start = Get_Center_Type((unsigned __int32)Client_Module + 114400)(*(void**)Trace_Information);
float* Start = Get_Center(*(void**)Trace_Information);
Inflictor_Direction[0] = End[0] - Start[0];
@ -299,7 +310,7 @@ void __thiscall Perform_Trace(void* Stack)
using Get_Attachment_Type = void(__thiscall*)(void* Entity, char* Attachment, float* Origin, float* Angle);
float Origin[3];
float Angle[3];
Get_Attachment_Type((unsigned __int32)Client_Module + 178656)(Entity, (char*)"chest", Origin, Angle);
@ -308,7 +319,7 @@ void __thiscall Perform_Trace(void* Stack)
Angle_Vectors(Angle, Victim_Direction, nullptr, nullptr);
if (Inflictor_Direction[0] * Victim_Direction[0] + Inflictor_Direction[1] * Victim_Direction[1] + Inflictor_Direction[2] * Victim_Direction[2] >= 0)
if (Inflictor_Direction[0] * Victim_Direction[0] + Inflictor_Direction[1] * Victim_Direction[1] + Inflictor_Direction[2] * Victim_Direction[2] >= 0.f)
{
Compute_Damage();
}
@ -322,7 +333,7 @@ void __thiscall Perform_Trace(void* Stack)
void* Original_Perform_Trace_Caller;
void __declspec(naked) Redirected_Perform_Trace()
__attribute__((naked)) void Redirected_Perform_Trace()
{
asm("pushal");
asm("movl %esp, %ecx");

View File

@ -1,22 +1,3 @@
struct Prediction_Field_Structure
{
__int32 Type;
char* Name;
__int32 Offset;
unsigned __int16 Size;
__int8 Additionals_Bytes_1[18];
__int32 Bytes;
__int8 Additionals_Bytes_2[12];
__int32 Flat_Offset[2];
};
struct Prediction_Copy_Structure
{
__int8 Additionals_Bytes_1[8];
@ -37,16 +18,36 @@ struct Prediction_Copy_Structure
Prediction_Copy_Structure Predicton_Copy;
struct Prediction_Field_Structure
{
__int32 Type;
char* Name;
__int32 Offset;
unsigned __int16 Size;
__int8 Additionals_Bytes_1[18];
__int32 Bytes;
__int8 Additionals_Bytes_2[12];
__int32 Flat_Offset[2];
__int8 Additionals_Bytes_3[2];
};
__int8 Consistent_Time;
void Predicton_Copy_Compare(void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, void* Unknown_Parameter_4, void* Unknown_Parameter_5, void* Unknown_Parameter_6, __int8 Within_Tolerance, void* Unknown_Parameter_7)
{
Prediction_Field_Structure* Field = *(Prediction_Field_Structure**)((unsigned __int32)__builtin_frame_address(0) + 60);
if (Field->Flat_Offset[0] == 5324)
if (Field->Flat_Offset[0] * Consistent_Time == 5324)
{
if (*(__int32*)((unsigned __int32)Predicton_Copy.Destination + 20) != 0)
{
goto Copy_Label;
}
goto Copy_Label;
}
if (Within_Tolerance == 1)
@ -55,7 +56,7 @@ void Predicton_Copy_Compare(void* Unknown_Parameter_1, void* Unknown_Parameter_2
{
Copy_Label:
{
Byte_Manager::Copy_Bytes(0, (void*)((unsigned __int32)Predicton_Copy.Destination + Field->Flat_Offset[0]), Field->Bytes, (void*)((unsigned __int32)Predicton_Copy.Source + Field->Flat_Offset[1]));
Byte_Manager::Copy_Bytes(1, (void*)((unsigned __int32)Predicton_Copy.Destination + Field->Flat_Offset[0]), Field->Bytes, (void*)((unsigned __int32)Predicton_Copy.Source + Field->Flat_Offset[1]));
}
}
}
@ -71,7 +72,7 @@ struct Prediction_Descriptor_Structure
Prediction_Descriptor_Structure* Parent;
__int8 Additional_Bytes_2[6];
__int8 Additional_Bytes_2[8];
};
void* Original_Post_Network_Data_Received_Caller;
@ -80,11 +81,13 @@ void __thiscall Redirected_Post_Network_Data_Received(void* Unknown_Parameter, _
{
void* Local_Player = *(void**)((unsigned __int32)Client_Module + 7498712);
void* Result = *(void**)((unsigned __int32)Local_Player + 900 + (150 - ((Commands_Acknowledged - 1) % 150 + 1) * 150 % -~150) * 4);
void* Prediction_Frame = *(void**)((unsigned __int32)Local_Player + 900 + (150 - ((Commands_Acknowledged - 1) % 150 + 1) * 150 % -~150) * 4);
if (Result != nullptr)
if (Prediction_Frame != nullptr)
{
Predicton_Copy.Construct(Local_Player, Result, (void*)Predicton_Copy_Compare);
Predicton_Copy.Construct(Local_Player, Prediction_Frame, (void*)Predicton_Copy_Compare);
Consistent_Time = Commands_Acknowledged > 150;
using Transfer_Data_Type = __int32(__thiscall*)(Prediction_Copy_Structure* Prediction_Copy, void* Unknown_Parameter, __int32 Entity_Number, Prediction_Descriptor_Structure* Descriptor);

View File

@ -2,31 +2,21 @@ void* Original_Process_Movement_Caller;
void __thiscall Redirected_Process_Movement(void* Unknown_Parameter, void* Player, void* Move_Data)
{
__int32 Stunned = *(__int32*)((unsigned __int32)Player + 20);
if (Stunned == 2)
if (*(__int32*)((unsigned __int32)Player + 5324) < 0)
{
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);
Global_Variables->Current_Time *= -1;
*(__int32*)((unsigned __int32)Move_Data + 36) &= ~1564;
if (*(__int8*)((unsigned __int32)Player + 4636) == 1)
{
*(__int32*)((unsigned __int32)Move_Data + 36) |= 4;
}
*(__int32*)((unsigned __int32)Move_Data + 36) |= 4 * *(__int8*)((unsigned __int32)Player + 4636);
*(float*)((unsigned __int32)Move_Data + 44) = 0;
*(float*)((unsigned __int32)Move_Data + 48) = 0;
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);
Global_Variables->Current_Time *= -1;
*(double*)((unsigned __int32)Move_Data + 44) = 0.;
}
else
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);
void* Ability = *(void**)((unsigned __int32)Client_Module + 7644532 + (((*(unsigned __int32*)((unsigned __int32)Player + 7892) & 4095) - 4097) << 4));
if (Ability != nullptr)
{
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);
*(float*)((unsigned __int32)Ability + 1636) = 0.f;
}
}

View File

@ -1,4 +1,4 @@
to achieve least interpolation time: `cl_updaterate -1;cl_interp_ratio 0;cl_interp 0`\
to achieve least interpolation time: `cl_updaterate 100;cl_interp_ratio 0;cl_interp 0`\
to queue extra commands: `bind key +zoom`
```
code: https://github.com/qwertyuiop3/Storm

View File

@ -9,5 +9,5 @@ void Redirected_Read_Packets(__int8 Final)
(decltype(&Redirected_Read_Packets)(Original_Read_Packets_Caller))(Final);
}
Parsed_Packets = __builtin_return_address(0) != (void*)((unsigned __int32)Engine_Module + 1631551);
Parsed_Packets = __builtin_return_address(0) != (void*)((unsigned __int32)Engine_Module + 1631183);
}

View File

@ -1,6 +1,30 @@
#pragma once
namespace Redirection_Manager
{
#include "Redirection_Manager_Functions.hpp"
void Redirect_Function(void* Original_Function, void* Redirected_Function)
{
DWORD Previous_Access_Rights;
VirtualProtect(Original_Function, 6, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
*(__int8*)Original_Function = 104;
*(void**)((unsigned __int32)Original_Function + 1) = Redirected_Function;
*(unsigned __int8*)((unsigned __int32)Original_Function + 5) = 195;
VirtualProtect(Original_Function, 6, Previous_Access_Rights, &Previous_Access_Rights);
}
void* Redirect_Function(unsigned __int32 Offset, void* Original_Function, void* Redirected_Function)
{
void* Original_Function_Caller = VirtualAlloc(nullptr, 12 + Offset, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
__builtin_memcpy(Original_Function_Caller, Original_Function, 6 + Offset);
Redirect_Function((void*)((unsigned __int32)Original_Function_Caller + 6 + Offset), (void*)((unsigned __int32)Original_Function + 6 + Offset));
Redirect_Function(Original_Function, Redirected_Function);
return Original_Function_Caller;
}
};

View File

@ -1,30 +0,0 @@
#pragma once
void* Copy_Table(void* Table_Location)
{
#ifdef Bits_32
unsigned __int32 Functions_Count = 0;
#else
unsigned __int64 Functions_Count = 0;
#endif
Take_Function_Into_Account_Label:
{
#ifdef Bits_32
if (*(void**)((unsigned __int32)Table_Location + Functions_Count) != nullptr)
#else
if (*(void**)((unsigned __int64)Table_Location + Functions_Count) != nullptr)
#endif
{
Functions_Count += sizeof(void*);
goto Take_Function_Into_Account_Label;
}
}
void* Copied_Table_Location = malloc(Functions_Count);
__builtin_memcpy(Copied_Table_Location, Table_Location, Functions_Count);
return Copied_Table_Location;
}

View File

@ -1,15 +0,0 @@
#pragma once
#include "Redirection_Manager_Redirect_Function.hpp"
#include "Redirection_Manager_Restore_Function.hpp"
#include "Redirection_Manager_Restore_Redirection.hpp"
#include "Redirection_Manager_Copy_Table.hpp"
#include "Redirection_Manager_Redirect_Function_In_Table.hpp"
#include "Redirection_Manager_Redirect_Table.hpp"
#include "Redirection_Manager_Restore_Table.hpp"

View File

@ -1,125 +0,0 @@
#pragma once
void Redirect_Function(__int8 Modify_Access_Rights, void* Original_Function_Location, void* Redirected_Function_Location)
{
unsigned long __int32 Previous_Access_Rights;
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#endif
}
#ifdef Bits_32
*(__int8*)Original_Function_Location = 104;
*(void**)((unsigned __int32)Original_Function_Location + 1) = Redirected_Function_Location;
*(unsigned __int8*)((unsigned __int32)Original_Function_Location + 5) = 195;
#else
*(__int8*)Original_Function_Location = 80;
*(unsigned __int16*)((unsigned __int64)Original_Function_Location + 1) = 47176;
*(void**)((unsigned __int64)Original_Function_Location + 3) = Redirected_Function_Location;
*(__int32*)((unsigned __int64)Original_Function_Location + 11) = 604276552;
*(unsigned __int8*)((unsigned __int64)Original_Function_Location + 15) = 195;
#endif
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, Previous_Access_Rights, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, Previous_Access_Rights, &Previous_Access_Rights);
#endif
}
}
#ifdef Bits_32
void Redirect_Function(void*& Original_Function_Caller_Location, unsigned __int32 Original_Function_Caller_Offset, void* Original_Function_Location, __int8 Modify_Access_Rights, void* Redirected_Function_Location)
#else
void Redirect_Function(void*& Original_Function_Caller_Location, unsigned __int64 Original_Function_Caller_Offset, void* Original_Function_Location, __int8 Modify_Access_Rights, void* Redirected_Function_Location)
#endif
{
unsigned long __int32 Previous_Access_Rights;
#ifdef Bits_32
Original_Function_Caller_Location = malloc(12 + Original_Function_Caller_Offset);
*(void**)Original_Function_Caller_Location = *(void**)Original_Function_Location;
*(unsigned __int16*)((unsigned __int32)Original_Function_Caller_Location + 4) = *(unsigned __int16*)((unsigned __int32)Original_Function_Location + 4);
__builtin_memcpy((void*)((unsigned __int32)Original_Function_Caller_Location + 6), (void*)((unsigned __int32)Original_Function_Location + 6), Original_Function_Caller_Offset);
*(__int8*)((unsigned __int32)Original_Function_Caller_Location + 6 + Original_Function_Caller_Offset) = 104;
*(void**)((unsigned __int32)Original_Function_Caller_Location + 7 + Original_Function_Caller_Offset) = (void*)((unsigned __int32)Original_Function_Location + 6 + Original_Function_Caller_Offset);
*(unsigned __int8*)((unsigned __int32)Original_Function_Caller_Location + 11 + Original_Function_Caller_Offset) = 195;
VirtualProtect(Original_Function_Caller_Location, 12 + Original_Function_Caller_Offset, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#else
Original_Function_Caller_Location = malloc(32 + Original_Function_Caller_Offset);
*(void**)Original_Function_Caller_Location = *(void**)Original_Function_Location;
*(void**)((unsigned __int64)Original_Function_Caller_Location + 8) = *(void**)((unsigned __int64)Original_Function_Location + 8);
__builtin_memcpy((void*)((unsigned __int64)Original_Function_Caller_Location + 16), (void*)((unsigned __int64)Original_Function_Location + 16), Original_Function_Caller_Offset);
*(__int8*)((unsigned __int64)Original_Function_Caller_Location + 16 + Original_Function_Caller_Offset) = 80;
*(unsigned __int16*)((unsigned __int64)Original_Function_Caller_Location + 17 + Original_Function_Caller_Offset) = 47176;
*(void**)((unsigned __int64)Original_Function_Caller_Location + 19 + Original_Function_Caller_Offset) = (void*)((unsigned __int64)Original_Function_Location + 16 + Original_Function_Caller_Offset);
*(__int32*)((unsigned __int64)Original_Function_Caller_Location + 27 + Original_Function_Caller_Offset) = 604276552;
*(unsigned __int8*)((unsigned __int64)Original_Function_Caller_Location + 31 + Original_Function_Caller_Offset) = 195;
VirtualProtect(Original_Function_Caller_Location, 32 + Original_Function_Caller_Offset, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#endif
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#endif
}
#ifdef Bits_32
*(__int8*)Original_Function_Location = 104;
*(void**)((unsigned __int32)Original_Function_Location + 1) = Redirected_Function_Location;
*(unsigned __int8*)((unsigned __int32)Original_Function_Location + 5) = 195;
#else
*(__int8*)Original_Function_Location = 80;
*(unsigned __int16*)((unsigned __int64)Original_Function_Location + 1) = 47176;
*(void**)((unsigned __int64)Original_Function_Location + 3) = Redirected_Function_Location;
*(__int32*)((unsigned __int64)Original_Function_Location + 11) = 604276552;
*(unsigned __int8*)((unsigned __int64)Original_Function_Location + 15) = 195;
#endif
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, Previous_Access_Rights, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, Previous_Access_Rights, &Previous_Access_Rights);
#endif
}
}

View File

@ -1,18 +0,0 @@
#pragma once
void Redirect_Function_In_Table(__int8 Modify_Access_Rights, void* Original_Function_In_Table_Location, void* Redirected_Function_Location)
{
unsigned long __int32 Previous_Access_Rights;
if (Modify_Access_Rights == 1)
{
VirtualProtect(Original_Function_In_Table_Location, sizeof(void*), PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
}
*(void**)Original_Function_In_Table_Location = Redirected_Function_Location;
if (Modify_Access_Rights == 1)
{
VirtualProtect(Original_Function_In_Table_Location, sizeof(void*), Previous_Access_Rights, &Previous_Access_Rights);
}
}

View File

@ -1,6 +0,0 @@
#pragma once
void Redirect_Table(void* Original_Table_Container_Location, void* Redirected_Table_Location)
{
*(void**)Original_Table_Container_Location = Redirected_Table_Location;
}

View File

@ -1,39 +0,0 @@
#pragma once
void Restore_Function(__int8 Modify_Access_Rights, void* Original_Function_Location, void* Original_Function_Caller_Location, __int8 Delete_Original_Function_Caller)
{
unsigned long __int32 Previous_Access_Rights;
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#endif
}
#ifdef Bits_32
*(void**)Original_Function_Location = *(void**)Original_Function_Caller_Location;
*(unsigned __int16*)((unsigned __int32)Original_Function_Location + 4) = *(unsigned __int16*)((unsigned __int32)Original_Function_Caller_Location + 4);
#else
*(void**)Original_Function_Location = *(void**)Original_Function_Caller_Location;
*(void**)((unsigned __int64)Original_Function_Location + 8) = *(void**)((unsigned __int64)Original_Function_Caller_Location + 8);
#endif
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, Previous_Access_Rights, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, Previous_Access_Rights, &Previous_Access_Rights);
#endif
}
if (Delete_Original_Function_Caller == 1)
{
free(Original_Function_Caller_Location);
}
}

View File

@ -1,42 +0,0 @@
#pragma once
void Restore_Redirection(__int8 Modify_Access_Rights, void* Original_Function_Location, void* Redirected_Function_Location)
{
unsigned long __int32 Previous_Access_Rights;
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, PAGE_EXECUTE_READWRITE, &Previous_Access_Rights);
#endif
}
#ifdef Bits_32
*(__int8*)Original_Function_Location = 104;
*(void**)((unsigned __int32)Original_Function_Location + 1) = Redirected_Function_Location;
*(unsigned __int8*)((unsigned __int32)Original_Function_Location + 5) = 195;
#else
*(__int8*)Original_Function_Location = 80;
*(unsigned __int16*)((unsigned __int64)Original_Function_Location + 1) = 47176;
*(void**)((unsigned __int64)Original_Function_Location + 3) = Redirected_Function_Location;
*(__int32*)((unsigned __int64)Original_Function_Location + 11) = 604276552;
*(unsigned __int8*)((unsigned __int64)Original_Function_Location + 15) = 195;
#endif
if (Modify_Access_Rights == 1)
{
#ifdef Bits_32
VirtualProtect(Original_Function_Location, 6, Previous_Access_Rights, &Previous_Access_Rights);
#else
VirtualProtect(Original_Function_Location, 16, Previous_Access_Rights, &Previous_Access_Rights);
#endif
}
}

View File

@ -1,11 +0,0 @@
#pragma once
void Restore_Table(void* Original_Table_Container_Location, void* Original_Table_Location, __int8 Delete_Redirected_Table, void* Redirected_Table_Location)
{
*(void**)Original_Table_Container_Location = Original_Table_Location;
if (Delete_Redirected_Table == 1)
{
free(Redirected_Table_Location);
}
}

View File

@ -8,9 +8,7 @@ struct Command_Structure
float Angles[3];
float Move[2];
__int32 Frame_Number;
float Move[3];
__int32 Buttons;
@ -22,17 +20,28 @@ struct Command_Structure
struct Extended_Command_Structure
{
__int32 Extra_Commands;
__int32 Sequence_Shift;
};
Extended_Command_Structure Extended_Commands[150];
void* Original_Run_Command_Caller;
void __thiscall Redirected_Run_Command(void* Prediction, void* Player, Command_Structure* Command, void* Unknown_Parameter)
void __thiscall Redirected_Run_Command(void* Prediction, void* Player, Command_Structure* Command, void* Move_Helper)
{
Extended_Command_Structure* Extended_Command = &Extended_Commands[Command->Frame_Number];
Extended_Command_Structure* Extended_Command = &Extended_Commands[*(__int32*)((unsigned __int32)Player + 5620) % 150];
*(__int32*)((unsigned __int32)Player + 5324) -= Extended_Command->Extra_Commands;
*(__int32*)((unsigned __int32)Player + 5324) -= Extended_Command->Extra_Commands + Extended_Command->Sequence_Shift;
(decltype(&Redirected_Run_Command)(Original_Run_Command_Caller))(Prediction, Player, Command, Unknown_Parameter);
(decltype(&Redirected_Run_Command)(Original_Run_Command_Caller))(Prediction, Player, Command, Move_Helper);
if (__builtin_return_address(0) == (void*)((unsigned __int32)Client_Module + 423107))
{
*(__int32*)((unsigned __int32)Player + 5324) += Extended_Command->Sequence_Shift;
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);
Global_Variables->Current_Time = (*(__int32*)((unsigned __int32)Player + 5324) - 1) * Global_Variables->Interval_Per_Tick;
}
}

View File

@ -6,9 +6,9 @@ void Redirected_Send_Move()
void Construct(__int8* Data, unsigned __int32 Size)
{
Byte_Manager::Set_Bytes(0, Message, sizeof(Message), 0);
Byte_Manager::Set_Bytes(1, Message, sizeof(Message), 0);
*(void**)Message = (void*)((unsigned __int32)Engine_Module + 3501348);
*(void**)Message = (void*)((unsigned __int32)Engine_Module + 3501364);
*(void**)((unsigned __int32)Message + 132) = Data;
@ -64,7 +64,7 @@ void Redirected_Send_Move()
*(__int32*)((unsigned __int32)Network_Channel + 28) -= Extra_Commands_Queue;
using Send_Network_Message_Type = void(__thiscall**)(void* Network_Channel, void* Message, void* Unknown_Parameter_1, void* Unknown_Parameter_2);
using Send_Message_Type = void(__thiscall**)(void* Network_Channel, void* Message, void* Unknown_Parameter_1, void* Unknown_Parameter_2);
(*Send_Network_Message_Type(*(unsigned __int32*)Network_Channel + 164))(Network_Channel, &Message, nullptr, nullptr);
(*Send_Message_Type(*(unsigned __int32*)Network_Channel + 164))(Network_Channel, &Message, nullptr, nullptr);
}

11
Set_Move_Type.hpp Normal file
View File

@ -0,0 +1,11 @@
void Redirected_Set_Move_Type(void* Input, void* Output)
{
if (*(__int8*)((unsigned __int32)Output + 324) == 0)
{
*(float*)((unsigned __int32)Output + 472) = *(float*)((unsigned __int32)Output + 336);
}
*(__int8*)((unsigned __int32)Output + 324) = *(__int8*)((unsigned __int32)Input + 4);
*(__int8*)((unsigned __int32)Output + 325) = 0;
}

View File

@ -6,20 +6,20 @@ void __thiscall Redirected_Spawn_Grenade(void* Entity)
float Minimum[3] =
{
-16,
-16,
-16
-16.f,
-16.f,
-16.f
};
float Maximum[3] =
{
16,
{
16.f,
16,
16.f,
16
16.f
};
Set_Size_Type((unsigned __int32)Client_Module + 281664)(Entity, Minimum, Maximum);

View File

@ -84,6 +84,7 @@
<ItemGroup>
<ClInclude Include="Calculate_View.hpp" />
<ClInclude Include="Process_Movement.hpp" />
<ClInclude Include="Set_Move_Type.hpp" />
<ClInclude Include="Update.hpp" />
<ClInclude Include="Send_Move.hpp" />
<ClInclude Include="Spawn_Grenade.hpp" />

View File

@ -88,5 +88,8 @@
<ClInclude Include="Update_Animations.hpp">
<Filter>Header++</Filter>
</ClInclude>
<ClInclude Include="Set_Move_Type.hpp">
<Filter>Header++</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -1,8 +1,21 @@
struct Global_Variables_Structure
{
__int8 Additional_Bytes_1[12];
float Current_Time;
float Frame_Time;
__int8 Additional_Bytes_2[8];
float Interval_Per_Tick;
};
float Update_Animation_Time;
__int8 Update_Animation_Type;
void __cdecl Redirected_Update_Animations()
void Redirected_Update_Animations()
{
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);