10 Commits

Author SHA1 Message Date
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
34 changed files with 366 additions and 639 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));
}

View File

@ -45,21 +45,30 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
if (Extra_Commands == -1)
{
*(float*)((unsigned __int32)Local_Player + 16) = Global_Variables->Interval_Per_Tick;
*(__int32*)((unsigned __int32)Local_Player + 20) = Command->Command_Number;
void* Prediction_Frame = *(void**)((unsigned __int32)Local_Player + 1500);
if (Prediction_Frame != nullptr)
{
if ((Command->Buttons & 524288) == 524288)
{
Extended_Command->Extra_Commands = max(0, Extra_Commands = std::clamp(Interface_Extra_Commands.Integer, (__int32)(0.06f / Global_Variables->Interval_Per_Tick + 0.5f), 14));
*(__int32*)Prediction_Frame = min(*(__int32*)Prediction_Frame + 1, Extended_Command->Extra_Commands * Interface_Interpolate_Extra_Commands.Integer);
*(float*)((unsigned __int32)Local_Player + 16) *= 1.f + Extended_Command->Extra_Commands;
}
else
__int32 Variable_Number = 0;
Traverse_Variables_Label:
{
*(__int32*)Prediction_Frame = max(0, *(__int32*)Prediction_Frame - 1);
void* Variable = *(void**)(*(unsigned __int32*)((unsigned __int32)Local_Player + 24) + Variable_Number * 12 + 8);
*(float*)((unsigned __int32)Variable + 36) = *(float*)((unsigned __int32)Local_Player + 16);
Variable_Number += 1;
if (Variable_Number != *(__int32*)((unsigned __int32)Local_Player + 36))
{
goto Traverse_Variables_Label;
}
}
}
@ -70,43 +79,41 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{
Command->Angles[0],
Command->Angles[1],
0
Command->Angles[1]
};
static float Previous_Move_Angle_Y;
if ((Command->Buttons & 2) == 2)
if ((Command->Buttons & 2) + *(__int8*)((unsigned __int32)Local_Player + 324) == 4)
{
Command->Move[0] = 0;
if (*(__int32*)((unsigned __int32)Local_Player + 316) == -1)
if (*(void**)((unsigned __int32)Local_Player + 316) == INVALID_HANDLE_VALUE)
{
Command->Buttons &= ~(*(__int8*)((unsigned __int32)Local_Player + 324) & 2);
Command->Buttons &= ~2;
}
else
{
Command->Buttons &= ~(*(__int32*)((unsigned __int32)Local_Player + 5028) & 2);
}
float Difference = __builtin_remainderf(Move_Angles[1] - Previous_Move_Angle_Y, 360);
float Difference = __builtin_remainderf(Move_Angles[1] - Previous_Move_Angle_Y, 360.f);
Previous_Move_Angle_Y = Move_Angles[1];
float* Velocity = (float*)((unsigned __int32)Local_Player + 256);
if (__builtin_fabsf(Difference) < __builtin_atan2f(30, __builtin_hypotf(Velocity[0], Velocity[1])) * 180 / 3.1415927f)
if (__builtin_fabsf(Difference) < __builtin_atan2f(30.f, __builtin_hypotf(Velocity[0], Velocity[1])) * 180.f / 3.1415927f)
{
float Strafe_Angle = __builtin_remainderf(Move_Angles[1] - __builtin_atan2f(Velocity[1], Velocity[0]) * 180 / 3.1415927f, 360);
float Strafe_Angle = __builtin_remainderf(Move_Angles[1] - __builtin_atan2f(Velocity[1], Velocity[0]) * 180.f / 3.1415927f, 360.f);
if (__builtin_signbitf(Strafe_Angle) == 0)
{
Command->Move[1] = -400;
Command->Move[1] = -400.f;
}
else
{
Command->Move[1] = 400;
Command->Move[1] = 400.f;
}
Move_Angles[1] -= Strafe_Angle;
@ -115,11 +122,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{
if (__builtin_signbitf(Difference) == 0)
{
Command->Move[1] = -400;
Command->Move[1] = -400.f;
}
else
{
Command->Move[1] = 400;
Command->Move[1] = 400.f;
}
}
}
@ -130,7 +137,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
float Previous_Move[2];
Byte_Manager::Copy_Bytes(0, Previous_Move, sizeof(Previous_Move), Command->Move);
Byte_Manager::Copy_Bytes(1, Previous_Move, sizeof(Previous_Move), Command->Move);
float Desired_Move_Forward[3];
@ -138,11 +145,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
Angle_Vectors(Move_Angles, Desired_Move_Forward, Desired_Move_Right, nullptr);
Desired_Move_Forward[2] = 0;
Desired_Move_Forward[2] = 0.f;
Vector_Normalize(Desired_Move_Forward);
Desired_Move_Right[2] = 0;
Desired_Move_Right[2] = 0.f;
Vector_Normalize(Desired_Move_Right);
@ -161,11 +168,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
Angle_Vectors(Command->Angles, Move_Forward, Move_Right, nullptr);
Move_Forward[2] = 0;
Move_Forward[2] = 0.f;
Vector_Normalize(Move_Forward);
Move_Right[2] = 0;
Move_Right[2] = 0.f;
Vector_Normalize(Move_Right);
@ -180,7 +187,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
void* Network_Channel = *(void**)(*(unsigned __int32*)((unsigned __int32)Engine_Module + 4352236) + 24);
auto Sequence_Shift = [&](__int32 Reserve)
auto Sequence_Shift = [&](__int32 Reserve) -> void
{
if (Extended_Commands[*(__int32*)((unsigned __int32)Local_Player + 20) % 150].Sequence_Shift == 0)
{
@ -230,7 +237,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
}
else
{
if ((*(float*)((unsigned __int32)Local_Player + 4604) + 800 * Global_Variables->Interval_Per_Tick >= 560) + *(__int8*)((unsigned __int32)Local_Player + 8068) + *(__int8*)((unsigned __int32)Local_Player + 9708) != 0)
if ((*(float*)((unsigned __int32)Local_Player + 4604) + 800.f * Global_Variables->Interval_Per_Tick >= 560.f) + *(__int8*)((unsigned __int32)Local_Player + 8068) + *(__int8*)((unsigned __int32)Local_Player + 9708) != 0)
{
Sequence_Shift(2);
}
@ -303,7 +310,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{
if (*(__int32*)((unsigned __int32)Entity + 228) % 2 != *(__int32*)((unsigned __int32)Local_Player + 228) % 2)
{
float* Local_Player_Origin = (float*)((unsigned __int32)Local_Player + 292);
float* Local_Origin = (float*)((unsigned __int32)Local_Player + 292);
float* Entity_Origin = (float*)((unsigned __int32)Entity + 292);
@ -317,7 +324,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
(__int8)(Identifier == 270 ? *(void**)((unsigned __int32)Entity + 8040) == *(void**)((unsigned __int32)Local_Player + 376) : 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),
(__int32)(Time / Global_Variables->Interval_Per_Tick + 0.5f)
};
@ -326,7 +333,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{
if (Identifier == 277)
{
if (*(float*)((unsigned __int32)Entity + 4844) == 1)
if (*(float*)((unsigned __int32)Entity + 4844) == 1.f)
{
Sorted_Target_List.push_back(Target);
}
@ -376,7 +383,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
__int8 Is_Melee = *(__int32*)((unsigned __int32)Weapon_Data + 352) * (*(__int32*)((unsigned __int32)Weapon_Data + 348) ^ 1) <= 1;
__int32 Action = *(__int32*)((unsigned __int32)Local_Player + 7080) != 0;
__int8 Action = *(__int32*)((unsigned __int32)Local_Player + 7080) != 0;
__int8 Reviving = *(void**)((unsigned __int32)Local_Player + 8076) != INVALID_HANDLE_VALUE;
@ -441,7 +448,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
Vector_Normalize(Direction);
*(float*)((unsigned __int32)Weapon + 2724) = 75;
*(float*)((unsigned __int32)Weapon + 2724) = 75.f;
*(__int32*)((unsigned __int32)Weapon + 3248) = 0;
@ -459,19 +466,19 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{
Command->Tick_Number = Target->Tick_Number;
Command->Angles[0] = __builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180 / 3.1415927f;
Command->Angles[0] = __builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180.f / 3.1415927f;
Command->Angles[1] = __builtin_atan2f(Direction[1], Direction[0]) * 180 / 3.1415927f;
Command->Angles[1] = __builtin_atan2f(Direction[1], Direction[0]) * 180.f / 3.1415927f;
if (Cancelable_Shove == 1)
{
float Shove_Multiplier = min((Global_Variables->Current_Time - *(float*)((unsigned __int32)Weapon + 2704) + *(float*)((unsigned __int32)Weapon + 2700)) / *(float*)((unsigned __int32)Weapon + 2700), 1.f);
Command->Angles[1] += -45 * Shove_Multiplier + 45 * (1 - Shove_Multiplier);
Command->Angles[1] += -45.f * Shove_Multiplier + 45.f * (1.f - Shove_Multiplier);
}
else
{
Command->Angles[1] += 45;
Command->Angles[1] += 45.f;
}
Command->Buttons |= 2048;
@ -535,7 +542,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{
if (Weapon_Identifier == 153)
{
if (*(float*)((unsigned __int32)Weapon + 3392) + *(float*)((unsigned __int32)Weapon + 3396) != 0)
if (*(double*)((unsigned __int32)Weapon + 3392) != 0.)
{
Compensate_Burst = 1;
@ -656,11 +663,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
float Hitbox_Center[3]
{
(Hitbox_Minimum[0] + Hitbox_Maximum[0]) / 2,
(Hitbox_Minimum[0] + Hitbox_Maximum[0]) / 2.f,
(Hitbox_Minimum[1] + Hitbox_Maximum[1]) / 2,
(Hitbox_Minimum[1] + Hitbox_Maximum[1]) / 2.f,
(Hitbox_Minimum[2] + Hitbox_Maximum[2]) / 2
(Hitbox_Minimum[2] + Hitbox_Maximum[2]) / 2.f
};
float Target_Origin[3] =
@ -685,18 +692,16 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
float Angles[3] =
{
__builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180 / 3.1415927f,
__builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180.f / 3.1415927f,
__builtin_atan2f(Direction[1], Direction[0]) * 180 / 3.1415927f,
0
__builtin_atan2f(Direction[1], Direction[0]) * 180.f / 3.1415927f
};
if (Perform_Trace(Angles) == 1)
{
Command->Tick_Number = Target->Tick_Number;
Byte_Manager::Copy_Bytes(0, Command->Angles, sizeof(Angles), Angles);
Byte_Manager::Copy_Bytes(1, Command->Angles, sizeof(Angles), Angles);
Command->Buttons |= 1;
@ -722,7 +727,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{
if (Shove_Target != nullptr)
{
*(float*)((unsigned __int32)Shove_Target->Self + 16) = 0;
*(float*)((unsigned __int32)Shove_Target->Self + 16) = 0.f;
if (Aim_Target != nullptr)
{
@ -763,7 +768,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
Command->Buttons &= ~Block_Buttons;
Byte_Manager::Copy_Bytes(0, Command->Move, sizeof(Previous_Move), Previous_Move);
Byte_Manager::Copy_Bytes(1, Command->Move, sizeof(Previous_Move), Previous_Move);
Correct_Movement();

View File

@ -1,7 +1,5 @@
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)
@ -14,9 +12,9 @@ void Redirected_Draw_Crosshair()
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);
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) * 3.1415927f / 180);
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);
@ -41,11 +39,17 @@ void Redirected_Draw_Crosshair()
__int32 Storm_Number = 0;
using Get_Screen_Size_Type = __int32(__cdecl*)();
using Get_Screen_Size_Type = __int32(__cdecl*)(__int32* Width, __int32* Height);
__int32 Screen_Width = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738576)() / 2;
__int32 Screen_Width;
__int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)() / 2;
__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:
{
@ -59,6 +63,5 @@ void Redirected_Draw_Crosshair()
}
}
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,75 +178,72 @@ __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");
{
auto Add_Prediction_Fields = [](Prediction_Descriptor_Structure* Descriptor, Prediction_Field_Structure* Fields, __int32 Size) -> void
{
Prediction_Descriptor_Structure* Original_Descriptor = (Prediction_Descriptor_Structure*)malloc(sizeof(Prediction_Descriptor_Structure));
static Prediction_Descriptor_Structure Original_Prediction_Descriptor;
Byte_Manager::Copy_Bytes(0, Original_Descriptor, sizeof(Prediction_Descriptor_Structure), Descriptor);
Prediction_Descriptor_Structure* Prediction_Descriptor = (Prediction_Descriptor_Structure*)((unsigned __int32)Client_Module + 7290836);
Descriptor->Fields = Fields;
Byte_Manager::Copy_Bytes(0, &Original_Prediction_Descriptor, sizeof(Prediction_Descriptor_Structure), Prediction_Descriptor);
Descriptor->Size = Size;
static Prediction_Field_Structure Prediction_Fields = { 1, (char*)"m_fMaxSpread", 3340, 1, { }, sizeof(float) };
Descriptor->Parent = Original_Descriptor;
};
Prediction_Descriptor->Fields = &Prediction_Fields;
static Prediction_Field_Structure Player_Fields = { 5, (char*)(*(unsigned __int32*)((unsigned __int32)GetModuleHandleW(L"vphysics.dll") + 1701868) + 2226), 16, 1, { }, sizeof(__int32) };
Prediction_Descriptor->Size = sizeof(Prediction_Fields) / sizeof(Prediction_Field_Structure);
Add_Prediction_Fields((Prediction_Descriptor_Structure*)((unsigned __int32)Client_Module + 7236480), &Player_Fields, sizeof(Player_Fields) / sizeof(Prediction_Field_Structure));
Prediction_Descriptor->Parent = &Original_Prediction_Descriptor;
static Prediction_Field_Structure Weapon_Fields = { 1, (char*)"m_fMaxSpread", 3340, 1, { }, sizeof(float) };
Original_Spawn_Grenade_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 2227424), (void*)Redirected_Spawn_Grenade);
Add_Prediction_Fields((Prediction_Descriptor_Structure*)((unsigned __int32)Client_Module + 7290836), &Weapon_Fields, sizeof(Weapon_Fields) / sizeof(Prediction_Field_Structure));
Original_Update_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1554304), (void*)Redirected_Update);
Redirection_Manager::Redirect_Function(Original_Spawn_Grenade_Caller, 2, (void*)((unsigned __int32)Client_Module + 2227424), 1, (void*)Redirected_Spawn_Grenade);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1554528), 1, 235);
Redirection_Manager::Redirect_Function(Original_Update_Caller, 0, (void*)((unsigned __int32)Client_Module + 1554304), 1, (void*)Redirected_Update);
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1557776), 1, 235);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1554528), 1, 235);
Original_Run_Command_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1553504), (void*)Redirected_Run_Command);
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1557776), 1, 235);
Original_Process_Movement_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 2590832), (void*)Redirected_Process_Movement);
Redirection_Manager::Redirect_Function(Original_Run_Command_Caller, 0, (void*)((unsigned __int32)Client_Module + 1553504), 1, (void*)Redirected_Run_Command);
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_Process_Movement_Caller, 2, (void*)((unsigned __int32)Client_Module + 2590832), 1, (void*)Redirected_Process_Movement);
Original_Finish_Move_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 1553264), (void*)Redirected_Finish_Move);
Redirection_Manager::Redirect_Function(Original_Play_Footstep_Sound_Caller, 0, (void*)((unsigned __int32)Client_Module + 978464), 1, (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);
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);
@ -260,52 +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") + 100592), 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(1, (void*)((unsigned __int32)Client_Module + 3244715), 1, 49);
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

@ -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 + 2636368)(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*)"12", 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

@ -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

@ -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)
@ -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;
@ -270,7 +270,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
{

View File

@ -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

@ -74,7 +74,7 @@ void __thiscall Perform_Trace(void* Stack)
{
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;
@ -102,7 +102,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)()];
};
@ -138,20 +138,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
{
@ -228,7 +223,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)
{
@ -237,9 +241,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)
@ -311,7 +315,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();
}
@ -325,7 +329,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,3 +1,23 @@
struct Prediction_Copy_Structure
{
__int8 Additionals_Bytes_1[8];
void* Destination;
void* Source;
__int8 Additional_Bytes_2[48];
void Construct(void* Destination, void* Source, void* Handler)
{
using Construct_Type = void(__fastcall*)(void* Prediction_Copy, void* Unknown_Parameter, __int32 Type, void* Destination, __int8 Destination_Packed, void* Source, __int8 Source_Packed, __int32 Operation_Type, void* Handler);
Construct_Type((unsigned __int32)Client_Module + 1564512)(this, nullptr, 2, Destination, 1, Source, 0, 3, Handler);
}
};
Prediction_Copy_Structure Predicton_Copy;
struct Prediction_Field_Structure
{
__int32 Type;
@ -19,35 +39,25 @@ struct Prediction_Field_Structure
__int8 Additionals_Bytes_3[2];
};
struct Prediction_Copy_Structure
{
__int8 Additionals_Bytes_1[8];
void* Destination;
void* Source;
__int8 Additional_Bytes_2[48];
void Construct(void* Destination, void* Source, void* Handler)
{
using Construct_Type = void(__fastcall*)(void* Prediction_Copy, void* Unknown_Parameter, __int32 Type, void* Destination, __int8 Destination_Packed, void* Source, __int8 Source_Packed, __int32 Operation_Type, void* Handler);
Construct_Type((unsigned __int32)Client_Module + 1564512)(this, nullptr, 2, Destination, 1, Source, 0, 3, Handler);
}
};
Prediction_Copy_Structure Predicton_Copy;
__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)
{
if (Within_Tolerance == 1)
{
Prediction_Field_Structure* Field = *(Prediction_Field_Structure**)((unsigned __int32)__builtin_frame_address(0) + 60);
if (Field->Flat_Offset[0] * Consistent_Time == 5324)
{
goto Copy_Label;
}
if (Within_Tolerance == 1)
{
if ((256 - Field->Flat_Offset[0] ^ Field->Flat_Offset[0] - 244) != 12)
{
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]));
Copy_Label:
{
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]));
}
}
}
}
@ -77,11 +87,11 @@ void __thiscall Redirected_Post_Network_Data_Received(void* Unknown_Parameter, _
{
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);
Transfer_Data_Type((unsigned __int32)Client_Module + 1573744)(&Predicton_Copy, nullptr, -1, (Prediction_Descriptor_Structure*)((unsigned __int32)Client_Module + 7236480));
*(__int32*)((unsigned __int32)Local_Player + 5324) += Commands_Acknowledged - Commands_Acknowledged % 150;
}
(decltype(&Redirected_Post_Network_Data_Received)(Original_Post_Network_Data_Received_Caller))(Unknown_Parameter, Commands_Acknowledged);

View File

@ -8,8 +8,15 @@ void __thiscall Redirected_Process_Movement(void* Unknown_Parameter, void* Playe
*(__int32*)((unsigned __int32)Move_Data + 36) |= 4 * *(__int8*)((unsigned __int32)Player + 4636);
*(double*)((unsigned __int32)Move_Data + 44) = 0;
*(double*)((unsigned __int32)Move_Data + 44) = 0.;
}
(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)
{
*(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

@ -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

@ -6,7 +6,7 @@ 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 + 3501364);
@ -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

@ -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);