mirror of
https://github.com/qwertyuiop3/Storm.git
synced 2025-09-19 20:16:15 +08:00
Compare commits
26 Commits
14.12.2024
...
master
Author | SHA1 | Date | |
---|---|---|---|
6c8f182ebe | |||
562a6d760e | |||
5dd6df4471 | |||
404b3732e6 | |||
7070f6a68c | |||
c6e7a71af1 | |||
bb54206c74 | |||
386afb13c1 | |||
92271625c8 | |||
31043114f0 | |||
1fc61ba184 | |||
359928047c | |||
631d1e1358 | |||
d5a3de9a21 | |||
0b54788d15 | |||
d12933fe27 | |||
f819000cfe | |||
a402400c01 | |||
519d56c138 | |||
f5fb3e4d30 | |||
81feda0668 | |||
61f5cad124 | |||
8496bfcbeb | |||
7b440b4004 | |||
7c6d951aee | |||
e2437349a0 |
@ -4,7 +4,5 @@ void __thiscall Redirected_Calculate_View(void* Player, void* Unknown_Parameter_
|
|||||||
{
|
{
|
||||||
(decltype(&Redirected_Calculate_View)(Original_Calculate_View_Caller))(Player, Unknown_Parameter_1, Angles, Unknown_Parameter_2);
|
(decltype(&Redirected_Calculate_View)(Original_Calculate_View_Caller))(Player, Unknown_Parameter_1, Angles, Unknown_Parameter_2);
|
||||||
|
|
||||||
using Get_Eye_Angles_Type = float*(__thiscall*)(void* Entity);
|
Byte_Manager::Copy_Bytes(1, Angles, sizeof(float[3]), (float*)((unsigned __int32)Player + 4996));
|
||||||
|
|
||||||
Byte_Manager::Copy_Bytes(1, Angles, sizeof(float[3]), Get_Eye_Angles_Type((unsigned __int32)Client_Module + 2237296)(Player));
|
|
||||||
}
|
}
|
251
Copy_Command.hpp
251
Copy_Command.hpp
@ -22,7 +22,7 @@ void* Get_Studio_Header(void* Entity)
|
|||||||
|
|
||||||
void* Get_Hitbox_Set(Target_Structure* Target, float(*Bones)[3][4], float Time)
|
void* Get_Hitbox_Set(Target_Structure* Target, float(*Bones)[3][4], float Time)
|
||||||
{
|
{
|
||||||
using Setup_Bones_Type = __int8(__thiscall*)(void* Entity, void* Bones, __int32 Maximum_Bones, __int32 Mask, float Current_Time);
|
using Setup_Bones_Type = __int8(__thiscall*)(void* Entity, void* Bones, __int32 Maximum_Bones, __int32 Mask, float Time);
|
||||||
|
|
||||||
if (Setup_Bones_Type((unsigned __int32)Client_Module + 246656)((void*)((unsigned __int32)Target->Self + 4), Bones, 128, 524032, Time) == 1)
|
if (Setup_Bones_Type((unsigned __int32)Client_Module + 246656)((void*)((unsigned __int32)Target->Self + 4), Bones, 128, 524032, Time) == 1)
|
||||||
{
|
{
|
||||||
@ -80,6 +80,8 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
if (*(__int8*)((unsigned __int32)Local_Player + 327) == 0)
|
if (*(__int8*)((unsigned __int32)Local_Player + 327) == 0)
|
||||||
{
|
{
|
||||||
|
Command->Buttons |= 4194304 * (Command->Command_Number % 2);
|
||||||
|
|
||||||
float Move_Angles[3] =
|
float Move_Angles[3] =
|
||||||
{
|
{
|
||||||
Command->Angles[0],
|
Command->Angles[0],
|
||||||
@ -91,7 +93,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
if ((Command->Buttons & 2) + *(__int8*)((unsigned __int32)Local_Player + 324) == 4)
|
if ((Command->Buttons & 2) + *(__int8*)((unsigned __int32)Local_Player + 324) == 4)
|
||||||
{
|
{
|
||||||
Command->Move[0] = 0;
|
Command->Move[0] = 0.f;
|
||||||
|
|
||||||
if (*(void**)((unsigned __int32)Local_Player + 316) == INVALID_HANDLE_VALUE)
|
if (*(void**)((unsigned __int32)Local_Player + 316) == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
@ -114,11 +116,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
if (__builtin_signbitf(Strafe_Angle) == 0)
|
if (__builtin_signbitf(Strafe_Angle) == 0)
|
||||||
{
|
{
|
||||||
Command->Move[1] = -400.f;
|
Command->Move[1] = -450.f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Command->Move[1] = 400.f;
|
Command->Move[1] = 450.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
Move_Angles[1] -= Strafe_Angle;
|
Move_Angles[1] -= Strafe_Angle;
|
||||||
@ -127,11 +129,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
{
|
{
|
||||||
if (__builtin_signbitf(Difference) == 0)
|
if (__builtin_signbitf(Difference) == 0)
|
||||||
{
|
{
|
||||||
Command->Move[1] = -400.f;
|
Command->Move[1] = -450.f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Command->Move[1] = 400.f;
|
Command->Move[1] = 450.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,33 +225,91 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static __int32 Accumulative_Correction;
|
||||||
|
|
||||||
|
auto Disable_Clock_Correction = [&](__int32 Queue) -> void
|
||||||
|
{
|
||||||
|
if (Queue > 0)
|
||||||
|
{
|
||||||
|
if (Extended_Command == Initial_Extended_Command)
|
||||||
|
{
|
||||||
|
Extended_Command->Extra_Commands = 0;
|
||||||
|
|
||||||
|
Extra_Commands = max((__int32)(0.06f / Global_Variables->Interval_Per_Tick + 0.5f), Queue);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Accumulative_Correction += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Initial_Extended_Command->Extra_Commands == 0)
|
||||||
|
{
|
||||||
|
*(__int32*)((unsigned __int32)Network_Channel + 16) = -1;
|
||||||
|
|
||||||
|
*(__int32*)((unsigned __int32)Network_Channel + 28) = 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
auto Correct_Extended_Command = [&]() -> void
|
||||||
|
{
|
||||||
|
if (*(__int32*)((unsigned __int32)Network_Channel + 16) != -1)
|
||||||
|
{
|
||||||
|
Extended_Command->Extra_Commands += Accumulative_Correction;
|
||||||
|
|
||||||
|
Accumulative_Correction = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Extended_Command->Sequence_Shift = Initial_Extended_Command->Sequence_Shift;
|
||||||
|
};
|
||||||
|
|
||||||
if (*(__int32*)((unsigned __int32)Local_Player + 228) == 3)
|
if (*(__int32*)((unsigned __int32)Local_Player + 228) == 3)
|
||||||
{
|
{
|
||||||
if (*(__int8*)((unsigned __int32)Local_Player + 7322) == 1)
|
if (*(__int8*)((unsigned __int32)Local_Player + 7322) == 0)
|
||||||
|
{
|
||||||
|
if (*(void**)((unsigned __int32)Local_Player + 10008) == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
if ((*(void**)((unsigned __int32)Local_Player + 10012) != INVALID_HANDLE_VALUE) + (*(void**)((unsigned __int32)Local_Player + 10024) != INVALID_HANDLE_VALUE) + (*(void**)((unsigned __int32)Local_Player + 10056) != INVALID_HANDLE_VALUE) != 0)
|
||||||
|
{
|
||||||
|
Command->Buttons |= (*(void**)((unsigned __int32)Local_Player + 10056) != INVALID_HANDLE_VALUE) * 2;
|
||||||
|
|
||||||
|
Disable_Clock_Correction(Interface_Extra_Commands_Action.Integer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Sequence_Shift(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (*(__int32*)((unsigned __int32)Local_Player + 7324) == 0)
|
if (*(__int32*)((unsigned __int32)Local_Player + 7324) == 0)
|
||||||
{
|
{
|
||||||
Sequence_Shift(-2);
|
Sequence_Shift(-2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (*(void**)((unsigned __int32)Local_Player + 10008) != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
Sequence_Shift(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Extended_Command->Sequence_Shift = Initial_Extended_Command->Sequence_Shift;
|
Correct_Extended_Command();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
__int8 Action = *(void**)((unsigned __int32)Local_Player + 7076) == *(void**)((unsigned __int32)Local_Player + 376);
|
||||||
|
|
||||||
|
__int8 Reviving = *(void**)((unsigned __int32)Local_Player + 8076) != INVALID_HANDLE_VALUE;
|
||||||
|
|
||||||
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)
|
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);
|
Sequence_Shift(2);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Action + Reviving != 0)
|
||||||
|
{
|
||||||
|
Disable_Clock_Correction(Interface_Extra_Commands_Action.Integer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Extended_Command->Sequence_Shift = Initial_Extended_Command->Sequence_Shift;
|
Correct_Extended_Command();
|
||||||
|
|
||||||
*(__int32*)((unsigned __int32)Local_Player + 5620) = Command->Command_Number;
|
*(__int32*)((unsigned __int32)Local_Player + 5620) = Command->Command_Number;
|
||||||
|
|
||||||
@ -273,15 +333,15 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
if ((*(__int32*)((unsigned __int32)Local_Player + 324) & 9) == 0)
|
if ((*(__int32*)((unsigned __int32)Local_Player + 324) & 9) == 0)
|
||||||
{
|
{
|
||||||
__int8 Action = *(__int32*)((unsigned __int32)Local_Player + 7080) != 0;
|
|
||||||
|
|
||||||
if ((*(__int32*)((unsigned __int32)Local_Player + 5020) & 32) * (Action ^ 1) == 0)
|
if ((*(__int32*)((unsigned __int32)Local_Player + 5020) & 32) * (Action ^ 1) == 0)
|
||||||
{
|
{
|
||||||
using Can_Attack_Type = __int8(__thiscall*)(void* Player);
|
using Can_Attack_Type = __int8(__thiscall*)(void* Player);
|
||||||
|
|
||||||
if (Can_Attack_Type((unsigned __int32)Client_Module + 2541696)(Local_Player) == 1)
|
if (Can_Attack_Type((unsigned __int32)Client_Module + 2541696)(Local_Player) == 1)
|
||||||
{
|
{
|
||||||
void* Weapon = *(__int8*)((unsigned __int32)Local_Player + 7867) == 0 ? *(void**)((unsigned __int32)Client_Module + 7644532 + (((*(unsigned __int32*)((unsigned __int32)Local_Player + 4228) & 4095) - 4097) << 4)) : nullptr;
|
using Get_Weapon_Type = void*(__thiscall*)(void* Entity);
|
||||||
|
|
||||||
|
void* Weapon = *(__int8*)((unsigned __int32)Local_Player + 7867) == 0 ? Get_Weapon_Type((unsigned __int32)Client_Module + 74304)(Local_Player) : nullptr;
|
||||||
|
|
||||||
if (Weapon == nullptr)
|
if (Weapon == nullptr)
|
||||||
{
|
{
|
||||||
@ -289,6 +349,59 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
__int8 Cancelable_Shove = 1 + (*(float*)((unsigned __int32)Local_Player + 7336) < Global_Variables->Time) * (*(float*)((unsigned __int32)Weapon + 2404) <= Global_Variables->Time);
|
||||||
|
|
||||||
|
__int32 Weapon_Identifier = Get_Identifier(Weapon, 1, 0);
|
||||||
|
|
||||||
|
if ((Weapon_Identifier == 105) + (Weapon_Identifier == 121) == 0)
|
||||||
|
{
|
||||||
|
static std::unordered_set<__int32> Grenades = { 106, 118, 129 };
|
||||||
|
|
||||||
|
if (Grenades.contains(Weapon_Identifier) == 1)
|
||||||
|
{
|
||||||
|
Cancelable_Shove = min((*(__int16*)((unsigned __int32)Weapon + 3304) == 0) + (*(float*)((unsigned __int32)Weapon + 3308) == 0.f), Cancelable_Shove);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Cancelable_Shove = min(1 + (*(float*)((unsigned __int32)Weapon + 3312) == -1.f), Cancelable_Shove);
|
||||||
|
}
|
||||||
|
|
||||||
|
__int8 In_Shove = Global_Variables->Time >= *(float*)((unsigned __int32)Local_Player + 7904);
|
||||||
|
|
||||||
|
if (Global_Variables->Time >= *(float*)((unsigned __int32)Weapon + 2704))
|
||||||
|
{
|
||||||
|
In_Shove = *(__int8*)((unsigned __int32)Weapon + 2720);
|
||||||
|
}
|
||||||
|
|
||||||
|
__int32 Ammo = *(__int32*)((unsigned __int32)Weapon + 2436);
|
||||||
|
|
||||||
|
static void* Predicted_Shot;
|
||||||
|
|
||||||
|
using Get_Weapon_Data_Type = void*(__thiscall*)(void* Weapon);
|
||||||
|
|
||||||
|
void* Weapon_Data = Get_Weapon_Data_Type((unsigned __int32)Client_Module + 86432)(Weapon);
|
||||||
|
|
||||||
|
__int8 Is_Melee = *(__int32*)((unsigned __int32)Weapon_Data + 352) * (*(__int32*)((unsigned __int32)Weapon_Data + 348) ^ 1) <= 1;
|
||||||
|
|
||||||
|
__int8 Reloading = *(__int8*)((unsigned __int32)Weapon + 2493);
|
||||||
|
|
||||||
|
__int8 Can_Attack = 0;
|
||||||
|
|
||||||
|
if (Weapon_Identifier == 39)
|
||||||
|
{
|
||||||
|
Can_Attack = (min(Chainsaw_Cycles * 0.46153846f * Global_Variables->Interval_Per_Tick, 1.f) > 0.95f) * (In_Shove ^ 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Can_Attack = (*(float*)((unsigned __int32)Weapon + 2400) <= Global_Variables->Time) * (Ammo > 0 - Is_Melee * 2) * (Reloading ^ 1);
|
||||||
|
|
||||||
|
if ((*(double*)((unsigned __int32)Weapon + 3392) == 0.) * Weapon_Identifier == 153)
|
||||||
|
{
|
||||||
|
Can_Attack *= *(float*)((unsigned __int32)Weapon + 3400) <= Global_Variables->Time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
__int32 Entity_Number = 1;
|
__int32 Entity_Number = 1;
|
||||||
|
|
||||||
using Get_Interpolation_Time_Type = float(__cdecl*)();
|
using Get_Interpolation_Time_Type = float(__cdecl*)();
|
||||||
@ -367,64 +480,67 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Target_List_Sort_Prepare = [](Target_Structure& X, Target_Structure& Y) -> __int8
|
auto Target_List_Sort = [](Target_Structure& X, Target_Structure& Y) -> __int8
|
||||||
{
|
{
|
||||||
return X.Priority < Y.Priority;
|
if (X.Priority == Y.Priority)
|
||||||
};
|
|
||||||
|
|
||||||
std::sort(Sorted_Target_List.begin(), Sorted_Target_List.end(), Target_List_Sort_Prepare);
|
|
||||||
|
|
||||||
auto Target_List_Sort_Finish = [](Target_Structure& X, Target_Structure& Y) -> __int8
|
|
||||||
{
|
{
|
||||||
if (X.Priority > Y.Priority)
|
return X.Distance < Y.Distance;
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return X.Distance < Y.Distance;
|
return X.Priority > Y.Priority;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::sort(Sorted_Target_List.begin(), Sorted_Target_List.end(), Target_List_Sort_Finish);
|
std::sort(Sorted_Target_List.begin(), Sorted_Target_List.end(), Target_List_Sort);
|
||||||
|
|
||||||
size_t Target_Number = 0;
|
size_t Target_Number = 0;
|
||||||
|
|
||||||
__int8 Reloading = *(__int8*)((unsigned __int32)Weapon + 2493);
|
|
||||||
|
|
||||||
using Get_Weapon_Data_Type = void*(__thiscall*)(void* Weapon);
|
|
||||||
|
|
||||||
void* Weapon_Data = Get_Weapon_Data_Type((unsigned __int32)Client_Module + 86432)(Weapon);
|
|
||||||
|
|
||||||
__int8 Is_Melee = *(__int32*)((unsigned __int32)Weapon_Data + 352) * (*(__int32*)((unsigned __int32)Weapon_Data + 348) ^ 1) <= 1;
|
|
||||||
|
|
||||||
__int8 Can_Attack = (*(float*)((unsigned __int32)Weapon + 2400) <= Global_Variables->Current_Time) * (*(__int32*)((unsigned __int32)Weapon + 2436) > 0 - Is_Melee * 2) * (Reloading ^ 1) * (*(float*)((unsigned __int32)Local_Player + 3872) <= Global_Variables->Current_Time);
|
|
||||||
|
|
||||||
__int8 Reviving = *(void**)((unsigned __int32)Local_Player + 8076) != INVALID_HANDLE_VALUE;
|
|
||||||
|
|
||||||
__int32 Weapon_Identifier = Get_Identifier(Weapon, 1, 0);
|
|
||||||
|
|
||||||
using Get_Eye_Position_Type = void(__thiscall*)(void* Entity, float* Eye_Position);
|
using Get_Eye_Position_Type = void(__thiscall*)(void* Entity, float* Eye_Position);
|
||||||
|
|
||||||
float Eye_Position[3];
|
float Eye_Position[3];
|
||||||
|
|
||||||
Get_Eye_Position_Type((unsigned __int32)Client_Module + 108512)(Local_Player, Eye_Position);
|
Get_Eye_Position_Type((unsigned __int32)Client_Module + 108512)(Local_Player, Eye_Position);
|
||||||
|
|
||||||
__int8 Cancelable_Shove = 1 + (*(float*)((unsigned __int32)Local_Player + 7336) < Global_Variables->Current_Time);
|
|
||||||
|
|
||||||
Target_Structure* Shove_Target = nullptr;
|
Target_Structure* Shove_Target = nullptr;
|
||||||
|
|
||||||
if (Cancelable_Shove + (*(float*)((unsigned __int32)Weapon + 2400) == *(float*)((unsigned __int32)Weapon + 2404)) > 1)
|
if (Cancelable_Shove + In_Shove > 1)
|
||||||
|
{
|
||||||
|
if (*(__int8*)((unsigned __int32)Local_Player + 8070) * (Weapon_Identifier == 231) == 0)
|
||||||
|
{
|
||||||
|
if (Interface_Shotgun_Shove.Integer == 1)
|
||||||
|
{
|
||||||
|
if ((Weapon_Identifier - 148) % 14 == 0)
|
||||||
|
{
|
||||||
|
if ((void*)((unsigned __int32)Weapon + Ammo) == Predicted_Shot)
|
||||||
|
{
|
||||||
|
Predicted_Shot = nullptr;
|
||||||
|
|
||||||
|
Command->Buttons |= 2048;
|
||||||
|
|
||||||
|
Block_Buttons = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__int8 Is_Chainsaw = Weapon_Identifier == 39;
|
||||||
|
|
||||||
|
__int8 Holstering = 0;
|
||||||
|
|
||||||
|
if (Is_Chainsaw == 0)
|
||||||
{
|
{
|
||||||
using Get_Sequence_Duration_Type = float(__thiscall*)(void* Entity, void* Studio_Header, __int32 Sequence);
|
using Get_Sequence_Duration_Type = float(__thiscall*)(void* Entity, void* Studio_Header, __int32 Sequence);
|
||||||
|
|
||||||
using Select_Sequence_Type = __int32(__thiscall*)(void* Entity, __int32 Activity);
|
using Select_Sequence_Type = __int32(__thiscall*)(void* Entity, __int32 Activity);
|
||||||
|
|
||||||
using Get_Deploy_Activity_Type = __int32(__thiscall**)(void* Weapon);
|
|
||||||
|
|
||||||
using Translate_Activity_Type = __int32(__thiscall**)(void* Weapon, __int32 Activity);
|
using Translate_Activity_Type = __int32(__thiscall**)(void* Weapon, __int32 Activity);
|
||||||
|
|
||||||
__int8 Holstering = (min(*(float*)((unsigned __int32)Local_Player + 3872), *(float*)((unsigned __int32)Weapon + 2412)) + Get_Sequence_Duration_Type((unsigned __int32)Client_Module + 180400)(Weapon, Get_Studio_Header(Weapon), Select_Sequence_Type((unsigned __int32)Client_Module + 202896)(Weapon, (*Translate_Activity_Type(*(unsigned __int32*)Weapon + 1692))(Weapon, (*Get_Deploy_Activity_Type(*(unsigned __int32*)Weapon + 1600))(Weapon)))) > Global_Variables->Current_Time) * (Can_Attack ^ 1);
|
using Get_Deploy_Activity_Type = __int32(__thiscall**)(void* Weapon);
|
||||||
|
|
||||||
__int8 Is_Cold_Melee = Weapon_Identifier == 231;
|
Holstering = (min(*(float*)((unsigned __int32)Local_Player + 3872), *(float*)((unsigned __int32)Weapon + 2412)) + Get_Sequence_Duration_Type((unsigned __int32)Client_Module + 180400)(Weapon, Get_Studio_Header(Weapon), Select_Sequence_Type((unsigned __int32)Client_Module + 202896)(Weapon, (*Translate_Activity_Type(*(unsigned __int32*)Weapon + 1692))(Weapon, (*Get_Deploy_Activity_Type(*(unsigned __int32*)Weapon + 1600))(Weapon)))) > Global_Variables->Time) * (Can_Attack ^ 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Is_Chainsaw = Can_Attack * (Command->Buttons & 1);
|
||||||
|
}
|
||||||
|
|
||||||
Shove_Traverse_Sorted_Target_List_Label:
|
Shove_Traverse_Sorted_Target_List_Label:
|
||||||
{
|
{
|
||||||
@ -434,7 +550,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
__int8 Forced = 0;
|
__int8 Forced = 0;
|
||||||
|
|
||||||
if ((Reloading + Holstering + Is_Melee * (Weapon_Identifier * (Command->Buttons & 1) != 39)) * (Action + Reviving ^ 1) != 0)
|
if (((Command->Buttons & 2048) + Reloading + Holstering + Is_Melee * (Is_Chainsaw ^ 1)) * (Action + Reviving ^ 1) != 0)
|
||||||
{
|
{
|
||||||
if ((Target->Identifier ^ 72) % 348 >= 72)
|
if ((Target->Identifier ^ 72) % 348 >= 72)
|
||||||
{
|
{
|
||||||
@ -444,7 +560,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((270 - Is_Cold_Melee - (*(__int8*)((unsigned __int32)Local_Player + 8070) ^ 1) - Target->Identifier) ^ Target->Identifier - 263) > 0)
|
if ((270 - Target->Identifier ^ Target->Identifier - 263) >= 0)
|
||||||
{
|
{
|
||||||
Shove_Label:
|
Shove_Label:
|
||||||
{
|
{
|
||||||
@ -454,9 +570,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
if ((Infected ^ 1) + (Gender == 15) != 0)
|
if ((Infected ^ 1) + (Gender == 15) != 0)
|
||||||
{
|
{
|
||||||
using Get_Sequence_Name_Type = char*(__thiscall*)(void* Entity, __int32 Sequence);
|
if (__builtin_strstr(Get_Sequence_Name(Target->Self), "hove") == nullptr)
|
||||||
|
|
||||||
if (__builtin_strstr(Get_Sequence_Name_Type((unsigned __int32)Client_Module + 203392)(Target->Self, *(__int32*)((unsigned __int32)Target->Self + 2212)), "hove") == nullptr)
|
|
||||||
{
|
{
|
||||||
using Perform_Shove_Trace = __int8(__thiscall*)(void* Weapon, float* Direction);
|
using Perform_Shove_Trace = __int8(__thiscall*)(void* Weapon, float* Direction);
|
||||||
|
|
||||||
@ -497,7 +611,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
if (Cancelable_Shove == 1)
|
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);
|
float Shove_Multiplier = min((Global_Variables->Time - *(float*)((unsigned __int32)Weapon + 2704) + *(float*)((unsigned __int32)Weapon + 2700)) / *(float*)((unsigned __int32)Weapon + 2700), 1.f);
|
||||||
|
|
||||||
Command->Angles[1] += -45.f * Shove_Multiplier + 45.f * (1.f - Shove_Multiplier);
|
Command->Angles[1] += -45.f * Shove_Multiplier + 45.f * (1.f - Shove_Multiplier);
|
||||||
}
|
}
|
||||||
@ -537,10 +651,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Cancelable_Shove != 0)
|
if (Cancelable_Shove != 0)
|
||||||
{
|
{
|
||||||
if (Reviving + (Weapon_Identifier == 96) + (Can_Attack ^ 1) == 0)
|
if (Reviving + (Can_Attack ^ 1) == 0)
|
||||||
{
|
{
|
||||||
Target_Structure* Aim_Target = nullptr;
|
Target_Structure* Aim_Target = nullptr;
|
||||||
|
|
||||||
@ -566,12 +681,9 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
{
|
{
|
||||||
if (Weapon_Identifier == 153)
|
if (Weapon_Identifier == 153)
|
||||||
{
|
{
|
||||||
if (*(double*)((unsigned __int32)Weapon + 3392) != 0.)
|
Compensate_Burst = *(double*)((unsigned __int32)Weapon + 3392) != 0.;
|
||||||
{
|
|
||||||
Compensate_Burst = 1;
|
|
||||||
|
|
||||||
Command->Buttons |= 1;
|
Command->Buttons |= Compensate_Burst;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -602,7 +714,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
float Bones[128][3][4];
|
float Bones[128][3][4];
|
||||||
|
|
||||||
void* Hitbox_Set = Get_Hitbox_Set(Target, Bones, Global_Variables->Current_Time);
|
void* Hitbox_Set = Get_Hitbox_Set(Target, Bones, Global_Variables->Time);
|
||||||
|
|
||||||
if (Hitbox_Set != nullptr)
|
if (Hitbox_Set != nullptr)
|
||||||
{
|
{
|
||||||
@ -612,7 +724,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
__int32 Bullets = *(__int32*)((unsigned __int32)Weapon_Data + 2520);
|
__int32 Bullets = *(__int32*)((unsigned __int32)Weapon_Data + 2520);
|
||||||
|
|
||||||
if (Interface_Penetration_Damage.Floating_Point == 0)
|
if (Interface_Penetration_Damage.Floating_Point == 0.f)
|
||||||
{
|
{
|
||||||
*(__int32*)((unsigned __int32)Weapon_Data + 2520) = 1;
|
*(__int32*)((unsigned __int32)Weapon_Data + 2520) = 1;
|
||||||
}
|
}
|
||||||
@ -681,6 +793,8 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitboxes[Target->Identifier] * 68);
|
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitboxes[Target->Identifier] * 68);
|
||||||
|
|
||||||
|
if (*(__int32*)Hitbox < sizeof(Bones) / sizeof(Bones[0]))
|
||||||
|
{
|
||||||
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
||||||
|
|
||||||
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
||||||
@ -734,6 +848,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
goto Aim_Found_Target_Label;
|
goto Aim_Found_Target_Label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Target_Number += 1;
|
Target_Number += 1;
|
||||||
|
|
||||||
@ -776,6 +891,8 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
Command->Angles[2] -= Recoil[2];
|
Command->Angles[2] -= Recoil[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Predicted_Shot = (void*)((unsigned __int32)Weapon + Ammo - 1);
|
||||||
|
|
||||||
Block_Buttons = 2048;
|
Block_Buttons = 2048;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -796,7 +913,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
Correct_Movement();
|
Correct_Movement();
|
||||||
|
|
||||||
*(__int8*)((unsigned __int32)__builtin_frame_address(0) + 235) = Extra_Commands <= 0;
|
*(__int8*)((unsigned __int32)__builtin_frame_address(0) + 235) = max(Extra_Commands <= 0, *(__int32*)((unsigned __int32)Network_Channel + 16) == -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,4 +64,8 @@ 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.f);
|
Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360.f);
|
||||||
|
|
||||||
|
using Get_Display_Type = void*(__cdecl*)();
|
||||||
|
|
||||||
|
*(__int32*)((unsigned __int32)Get_Display_Type((unsigned __int32)Client_Module + 2930128)() + 400) = 0;
|
||||||
}
|
}
|
@ -2,11 +2,9 @@ void* Original_Draw_Effect_Caller;
|
|||||||
|
|
||||||
__int8 __thiscall Redirected_Draw_Effect(void* Effect, void* Unknown_Parameter_1, void* Unknown_Parameter_2)
|
__int8 __thiscall Redirected_Draw_Effect(void* Effect, void* Unknown_Parameter_1, void* Unknown_Parameter_2)
|
||||||
{
|
{
|
||||||
using Get_Effect_Name_Type = char*(__thiscall*)(void* a1);
|
using Get_Effect_Name_Type = char*(__thiscall*)(void* Effect);
|
||||||
|
|
||||||
char* Effect_Name = Get_Effect_Name_Type((unsigned __int32)Client_Module + 1423120)((void*)((unsigned __int32)Effect - 8));
|
if (__builtin_strstr(Get_Effect_Name_Type((unsigned __int32)Client_Module + 1423120)((void*)((unsigned __int32)Effect - 8)), "ecloud_ca") == nullptr)
|
||||||
|
|
||||||
if (__builtin_strstr(Effect_Name, "ecloud_") == nullptr)
|
|
||||||
{
|
{
|
||||||
return (decltype(&Redirected_Draw_Effect)(Original_Draw_Effect_Caller))(Effect, Unknown_Parameter_1, Unknown_Parameter_2);
|
return (decltype(&Redirected_Draw_Effect)(Original_Draw_Effect_Caller))(Effect, Unknown_Parameter_1, Unknown_Parameter_2);
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
#include <TlHelp32.h>
|
#include <TlHelp32.h>
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
|
|
||||||
#include "Byte_Manager/Byte_Manager.hpp"
|
#include "Byte_Manager/Byte_Manager.hpp"
|
||||||
|
|
||||||
#include "Redirection_Manager/Redirection_Manager.hpp"
|
#include "Redirection_Manager/Redirection_Manager.hpp"
|
||||||
@ -22,10 +20,6 @@ void* Client_Module;
|
|||||||
|
|
||||||
#include "Update_Animations.hpp"
|
#include "Update_Animations.hpp"
|
||||||
|
|
||||||
#include <unordered_set>
|
|
||||||
|
|
||||||
#include <unordered_map>
|
|
||||||
|
|
||||||
#include "Estimate_Velocity.hpp"
|
#include "Estimate_Velocity.hpp"
|
||||||
|
|
||||||
#include "Spawn_Grenade.hpp"
|
#include "Spawn_Grenade.hpp"
|
||||||
@ -38,8 +32,6 @@ void* Client_Module;
|
|||||||
|
|
||||||
#include "Play_Footstep_Sound.hpp"
|
#include "Play_Footstep_Sound.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include "Finish_Move.hpp"
|
#include "Finish_Move.hpp"
|
||||||
|
|
||||||
#include "Item_Post_Frame.hpp"
|
#include "Item_Post_Frame.hpp"
|
||||||
@ -54,8 +46,6 @@ void* Client_Module;
|
|||||||
|
|
||||||
#include "Send_Move.hpp"
|
#include "Send_Move.hpp"
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "Copy_Command.hpp"
|
#include "Copy_Command.hpp"
|
||||||
|
|
||||||
#include "Calculate_View.hpp"
|
#include "Calculate_View.hpp"
|
||||||
@ -129,29 +119,11 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
|||||||
|
|
||||||
HANDLE Standard_Output_Handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
HANDLE Standard_Output_Handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
|
||||||
CONSOLE_FONT_INFOEX Console_Font_Information;
|
CONSOLE_FONT_INFOEX Console_Font_Information = { sizeof(CONSOLE_FONT_INFOEX), 0, { 0, 12 }, FF_DONTCARE, FW_NORMAL, { L"Terminal" } };
|
||||||
|
|
||||||
Console_Font_Information.cbSize = sizeof(CONSOLE_FONT_INFOEX);
|
|
||||||
|
|
||||||
Console_Font_Information.nFont = 0;
|
|
||||||
|
|
||||||
Console_Font_Information.dwFontSize.X = 0;
|
|
||||||
|
|
||||||
Console_Font_Information.dwFontSize.Y = 12;
|
|
||||||
|
|
||||||
Console_Font_Information.FontFamily = FF_DONTCARE;
|
|
||||||
|
|
||||||
Console_Font_Information.FontWeight = FW_NORMAL;
|
|
||||||
|
|
||||||
wcscpy(Console_Font_Information.FaceName, L"Terminal");
|
|
||||||
|
|
||||||
SetCurrentConsoleFontEx(Standard_Output_Handle, 0, &Console_Font_Information);
|
SetCurrentConsoleFontEx(Standard_Output_Handle, 0, &Console_Font_Information);
|
||||||
|
|
||||||
CONSOLE_CURSOR_INFO Console_Cursor_Information;
|
CONSOLE_CURSOR_INFO Console_Cursor_Information = { sizeof(Console_Cursor_Information) };
|
||||||
|
|
||||||
Console_Cursor_Information.bVisible = 0;
|
|
||||||
|
|
||||||
Console_Cursor_Information.dwSize = sizeof(Console_Cursor_Information);
|
|
||||||
|
|
||||||
SetConsoleTextAttribute(Standard_Output_Handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
|
SetConsoleTextAttribute(Standard_Output_Handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
|
||||||
|
|
||||||
@ -169,6 +141,11 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
|||||||
|
|
||||||
Engine_Module = GetModuleHandleW(L"engine.dll");
|
Engine_Module = GetModuleHandleW(L"engine.dll");
|
||||||
|
|
||||||
|
_putws(L"[ + ] Delimit Interface");
|
||||||
|
{
|
||||||
|
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Engine_Module + 1423205), 1, 235);
|
||||||
|
}
|
||||||
|
|
||||||
_putws(L"[ + ] Extend Interface");
|
_putws(L"[ + ] Extend Interface");
|
||||||
{
|
{
|
||||||
Implement_Extended_Interface();
|
Implement_Extended_Interface();
|
||||||
@ -196,11 +173,11 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
|||||||
|
|
||||||
_putws(L"[ + ] Animations");
|
_putws(L"[ + ] Animations");
|
||||||
{
|
{
|
||||||
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 205296), (void*)Redirected_Update_Animations);
|
Redirection_Manager::Redirect_Function((void*)((unsigned __int32)Client_Module + 205296), (void*)Redirected_Update_Animations);
|
||||||
|
|
||||||
Original_Estimate_Velocity_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 311856), (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 };
|
unsigned __int8 Maintain_Sequence_Transitions_Bytes[3] = { 194, 24 };
|
||||||
|
|
||||||
Byte_Manager::Copy_Bytes(0, (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);
|
||||||
|
|
||||||
@ -247,7 +224,7 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
|||||||
|
|
||||||
Original_Perform_Shove_Trace_Caller = (void*)((unsigned __int32)Client_Module + 3221111);
|
Original_Perform_Shove_Trace_Caller = (void*)((unsigned __int32)Client_Module + 3221111);
|
||||||
|
|
||||||
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 3221102), (void*)Redirected_Perform_Shove_Trace);
|
Redirection_Manager::Redirect_Function((void*)((unsigned __int32)Client_Module + 3221102), (void*)Redirected_Perform_Shove_Trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
_putws(L"[ + ] Network");
|
_putws(L"[ + ] Network");
|
||||||
@ -256,7 +233,7 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
|||||||
|
|
||||||
Original_Move_Caller = Redirection_Manager::Redirect_Function(3, (void*)((unsigned __int32)Engine_Module + 512288), (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);
|
Redirection_Manager::Redirect_Function((void*)((unsigned __int32)Engine_Module + 511680), (void*)Redirected_Send_Move);
|
||||||
}
|
}
|
||||||
|
|
||||||
_putws(L"[ + ] Input");
|
_putws(L"[ + ] Input");
|
||||||
@ -265,11 +242,15 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
|||||||
|
|
||||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 417204), 1, 235);
|
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 417204), 1, 235);
|
||||||
|
|
||||||
|
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 2538675), 1, 255);
|
||||||
|
|
||||||
Original_Copy_Command_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1094624), (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");
|
_putws(L"[ + ] Effects");
|
||||||
{
|
{
|
||||||
|
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 407384), 1, 133);
|
||||||
|
|
||||||
Original_Calculate_View_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 132944), (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(0, (void*)((unsigned __int32)Client_Module + 133424), 1, 235);
|
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 133424), 1, 235);
|
||||||
@ -289,17 +270,17 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
|||||||
{
|
{
|
||||||
Original_Write_Texture_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)GetModuleHandleW(L"vguimatsurface.dll") + 100592), (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((void*)((unsigned __int32)Client_Module + 2913504), (void*)Redirected_Paint);
|
||||||
|
|
||||||
Original_Get_Glow_Color_Caller = Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 2455600), (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);
|
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);
|
Redirection_Manager::Redirect_Function((void*)((unsigned __int32)Client_Module + 2301184), (void*)Redirected_Draw_Crosshair);
|
||||||
|
|
||||||
Byte_Manager::Set_Bytes(0, (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);
|
Redirection_Manager::Redirect_Function((void*)((unsigned __int32)Client_Module + 3118720), (void*)Redirected_Draw_Crosshair);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
char* Get_Sequence_Name(void* Entity)
|
||||||
|
{
|
||||||
|
using Get_Sequence_Name_Type = char*(__thiscall*)(void* Entity, __int32 Sequence);
|
||||||
|
|
||||||
|
return Get_Sequence_Name_Type((unsigned __int32)Client_Module + 203392)(Entity, *(__int32*)((unsigned __int32)Entity + 2212));
|
||||||
|
}
|
||||||
|
|
||||||
__int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
|
__int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
|
||||||
{
|
{
|
||||||
using Get_Identifier_Type = void*(__cdecl**)();
|
using Get_Identifier_Type = void*(__cdecl**)();
|
||||||
@ -9,32 +16,9 @@ __int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
|
|||||||
return Identifier;
|
return Identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::unordered_set<__int32> Targets =
|
if (*(__int8*)((unsigned __int32)Entity + 221) == 0)
|
||||||
{
|
{
|
||||||
0,
|
static std::unordered_set<__int32> Targets = { 0, 13, 99, 232, 263, 264, 265, 270, 272, 275, 276, 277 };
|
||||||
|
|
||||||
13,
|
|
||||||
|
|
||||||
99,
|
|
||||||
|
|
||||||
232,
|
|
||||||
|
|
||||||
263,
|
|
||||||
|
|
||||||
264,
|
|
||||||
|
|
||||||
265,
|
|
||||||
|
|
||||||
270,
|
|
||||||
|
|
||||||
272,
|
|
||||||
|
|
||||||
275,
|
|
||||||
|
|
||||||
276,
|
|
||||||
|
|
||||||
277
|
|
||||||
};
|
|
||||||
|
|
||||||
if (Targets.contains(Identifier) == 1)
|
if (Targets.contains(Identifier) == 1)
|
||||||
{
|
{
|
||||||
@ -47,17 +31,12 @@ __int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
|
|||||||
Valid = *(__int8*)((unsigned __int32)Entity + 324) == 5;
|
Valid = *(__int8*)((unsigned __int32)Entity + 324) == 5;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
if (*(__int8*)((unsigned __int32)Entity + 221) == 0)
|
|
||||||
{
|
{
|
||||||
if ((*(__int32*)((unsigned __int32)Entity + 572) - 131088 & 255) == 0)
|
if ((*(__int32*)((unsigned __int32)Entity + 572) - 131088 & 255) == 0)
|
||||||
{
|
{
|
||||||
using Get_Sequence_Name_Type = char*(__thiscall*)(void* Entity, __int32 Sequence);
|
if (__builtin_strstr(Get_Sequence_Name(Entity), "eath") == nullptr)
|
||||||
|
|
||||||
if (__builtin_strstr(Get_Sequence_Name_Type((unsigned __int32)Client_Module + 203392)(Entity, *(__int32*)((unsigned __int32)Entity + 2212)), "eath") == nullptr)
|
|
||||||
{
|
{
|
||||||
Valid = 1;
|
Valid = Identifier == 264 ? *(__int8*)((unsigned __int32)Entity + 4493) ^ 1 : 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,20 +72,9 @@ __int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
|
|||||||
{
|
{
|
||||||
if (Equipment == 1)
|
if (Equipment == 1)
|
||||||
{
|
{
|
||||||
static std::unordered_set<__int32> Equipment_List =
|
if ((*(__int32*)((unsigned __int32)Entity + 224) & 32) == 0)
|
||||||
{
|
{
|
||||||
73,
|
static std::unordered_set<__int32> Equipment_List = { 73, 105, 109, 121, 256, 260 };
|
||||||
|
|
||||||
105,
|
|
||||||
|
|
||||||
109,
|
|
||||||
|
|
||||||
121,
|
|
||||||
|
|
||||||
256,
|
|
||||||
|
|
||||||
260
|
|
||||||
};
|
|
||||||
|
|
||||||
if (Equipment_List.contains(Identifier) == 1)
|
if (Equipment_List.contains(Identifier) == 1)
|
||||||
{
|
{
|
||||||
@ -136,6 +104,8 @@ __int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -144,12 +114,7 @@ void* Original_Estimate_Velocity_Caller;
|
|||||||
|
|
||||||
void __thiscall Redirected_Estimate_Velocity(void* Entity, float* Velocity)
|
void __thiscall Redirected_Estimate_Velocity(void* Entity, float* Velocity)
|
||||||
{
|
{
|
||||||
static std::unordered_set<__int32> Invalids =
|
static std::unordered_set<__int32> Invalids = { 264, 277 };
|
||||||
{
|
|
||||||
264,
|
|
||||||
|
|
||||||
277
|
|
||||||
};
|
|
||||||
|
|
||||||
if (Invalids.contains(Get_Identifier(Entity, 1, 0)) == 1)
|
if (Invalids.contains(Get_Identifier(Entity, 1, 0)) == 1)
|
||||||
{
|
{
|
||||||
@ -161,10 +126,6 @@ void __thiscall Redirected_Estimate_Velocity(void* Entity, float* Velocity)
|
|||||||
|
|
||||||
Calculate_Velocity_Type((unsigned __int32)Client_Module + 290704)(Entity);
|
Calculate_Velocity_Type((unsigned __int32)Client_Module + 290704)(Entity);
|
||||||
|
|
||||||
Velocity[0] = *(float*)((unsigned __int32)Entity + 136);
|
Byte_Manager::Copy_Bytes(1, Velocity, sizeof(float[3]), (float*)((unsigned __int32)Entity + 136));
|
||||||
|
|
||||||
Velocity[1] = *(float*)((unsigned __int32)Entity + 140);
|
|
||||||
|
|
||||||
Velocity[2] = *(float*)((unsigned __int32)Entity + 144);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,10 +11,14 @@ struct Interface_Structure
|
|||||||
|
|
||||||
Interface_Structure Interface_Extra_Commands;
|
Interface_Structure Interface_Extra_Commands;
|
||||||
|
|
||||||
|
Interface_Structure Interface_Extra_Commands_Action;
|
||||||
|
|
||||||
Interface_Structure Interface_Interpolate_Extra_Commands;
|
Interface_Structure Interface_Interpolate_Extra_Commands;
|
||||||
|
|
||||||
Interface_Structure Interface_Target_On_Simulation;
|
Interface_Structure Interface_Target_On_Simulation;
|
||||||
|
|
||||||
|
Interface_Structure Interface_Shotgun_Shove;
|
||||||
|
|
||||||
Interface_Structure Interface_Riot_Deprioritize;
|
Interface_Structure Interface_Riot_Deprioritize;
|
||||||
|
|
||||||
Interface_Structure Interface_Penetrate_Teammates;
|
Interface_Structure Interface_Penetrate_Teammates;
|
||||||
@ -52,10 +56,14 @@ void Implement_Extended_Interface()
|
|||||||
|
|
||||||
Create_Interface(Pointer_Name(Interface_Extra_Commands), (char*)"5", nullptr);
|
Create_Interface(Pointer_Name(Interface_Extra_Commands), (char*)"5", nullptr);
|
||||||
|
|
||||||
|
Create_Interface(Pointer_Name(Interface_Extra_Commands_Action), (char*)"10", nullptr);
|
||||||
|
|
||||||
Create_Interface(Pointer_Name(Interface_Interpolate_Extra_Commands), (char*)"1", nullptr);
|
Create_Interface(Pointer_Name(Interface_Interpolate_Extra_Commands), (char*)"1", nullptr);
|
||||||
|
|
||||||
Create_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"0", nullptr);
|
Create_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"0", nullptr);
|
||||||
|
|
||||||
|
Create_Interface(Pointer_Name(Interface_Shotgun_Shove), (char*)"1", nullptr);
|
||||||
|
|
||||||
Create_Interface(Pointer_Name(Interface_Riot_Deprioritize), (char*)"0", nullptr);
|
Create_Interface(Pointer_Name(Interface_Riot_Deprioritize), (char*)"0", nullptr);
|
||||||
|
|
||||||
Create_Interface(Pointer_Name(Interface_Penetrate_Teammates), (char*)"0", nullptr);
|
Create_Interface(Pointer_Name(Interface_Penetrate_Teammates), (char*)"0", nullptr);
|
||||||
|
27
Move.hpp
27
Move.hpp
@ -1,30 +1,34 @@
|
|||||||
__int32 Extra_Commands;
|
__int32 Extra_Commands;
|
||||||
|
|
||||||
|
__int32 Chainsaw_Cycles;
|
||||||
|
|
||||||
void* Original_Move_Caller;
|
void* Original_Move_Caller;
|
||||||
|
|
||||||
void Redirected_Move(float Unknown_Parameter, __int8 Final)
|
void Redirected_Move(float Unknown_Parameter, __int8 Final)
|
||||||
{
|
{
|
||||||
|
void* Local_Player = *(void**)((unsigned __int32)Client_Module + 7498712);
|
||||||
|
|
||||||
using Run_Prediction_Type = void(__cdecl*)();
|
using Run_Prediction_Type = void(__cdecl*)();
|
||||||
|
|
||||||
if (*(void**)((unsigned __int32)Client_Module + 7498712) != nullptr)
|
if (Local_Player != nullptr)
|
||||||
{
|
{
|
||||||
Redirected_Read_Packets(Final);
|
Redirected_Read_Packets(Final);
|
||||||
|
|
||||||
|
Local_Player = *(void**)((unsigned __int32)Client_Module + 7498712);
|
||||||
|
|
||||||
Run_Prediction_Type((unsigned __int32)Engine_Module + 527776)();
|
Run_Prediction_Type((unsigned __int32)Engine_Module + 527776)();
|
||||||
|
|
||||||
using Update_Animations_Type = void(__cdecl*)();
|
Redirected_Update_Animations();
|
||||||
|
|
||||||
Update_Animations_Type((unsigned __int32)Client_Module + 205296)();
|
|
||||||
|
|
||||||
using Fire_Events_Type = void(__cdecl*)();
|
using Fire_Events_Type = void(__cdecl*)();
|
||||||
|
|
||||||
Fire_Events_Type((unsigned __int32)Engine_Module + 521648)();
|
Fire_Events_Type((unsigned __int32)Engine_Module + 521648)();
|
||||||
|
|
||||||
Update_Animation_Time = (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Current_Time;
|
Update_Animation_Time = (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Time;
|
||||||
|
|
||||||
Update_Animation_Type = 1;
|
Update_Animation_Type = 1;
|
||||||
|
|
||||||
Update_Animations_Type((unsigned __int32)Client_Module + 205296)();
|
Redirected_Update_Animations();
|
||||||
|
|
||||||
Update_Animation_Type = 0;
|
Update_Animation_Type = 0;
|
||||||
}
|
}
|
||||||
@ -37,6 +41,17 @@ void Redirected_Move(float Unknown_Parameter, __int8 Final)
|
|||||||
|
|
||||||
Run_Prediction_Type((unsigned __int32)Engine_Module + 527776)();
|
Run_Prediction_Type((unsigned __int32)Engine_Module + 527776)();
|
||||||
|
|
||||||
|
if (Local_Player != nullptr)
|
||||||
|
{
|
||||||
|
Chainsaw_Cycles += 1 + (Chainsaw_Cycles == 0);
|
||||||
|
|
||||||
|
static float Deploy_Time;
|
||||||
|
|
||||||
|
Chainsaw_Cycles *= *(float*)((unsigned __int32)Local_Player + 3872) == Deploy_Time;
|
||||||
|
|
||||||
|
Deploy_Time = *(float*)((unsigned __int32)Local_Player + 3872);
|
||||||
|
}
|
||||||
|
|
||||||
if (Extra_Commands > 0)
|
if (Extra_Commands > 0)
|
||||||
{
|
{
|
||||||
Extra_Commands -= 1;
|
Extra_Commands -= 1;
|
||||||
|
55
Paint.hpp
55
Paint.hpp
@ -83,7 +83,7 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
{
|
{
|
||||||
float Bones[128][3][4];
|
float Bones[128][3][4];
|
||||||
|
|
||||||
void* Hitbox_Set = Get_Hitbox_Set(Target, Bones, (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Current_Time);
|
void* Hitbox_Set = Get_Hitbox_Set(Target, Bones, (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Time);
|
||||||
|
|
||||||
if (Hitbox_Set != nullptr)
|
if (Hitbox_Set != nullptr)
|
||||||
{
|
{
|
||||||
@ -95,6 +95,8 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
{
|
{
|
||||||
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitbox_Number * 68);
|
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitbox_Number * 68);
|
||||||
|
|
||||||
|
if (*(__int32*)Hitbox < sizeof(Bones) / sizeof(Bones[0]))
|
||||||
|
{
|
||||||
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
||||||
|
|
||||||
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
||||||
@ -121,10 +123,10 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
|
|
||||||
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];
|
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;
|
Axis_Number += 1;
|
||||||
|
|
||||||
|
if (Axis_Number != sizeof(Hitbox_Vertices[0]) / sizeof(float))
|
||||||
|
{
|
||||||
goto Initialize_Vertices_Label;
|
goto Initialize_Vertices_Label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,10 +164,10 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Vertex_Number != 7)
|
|
||||||
{
|
|
||||||
Vertex_Number += 1;
|
Vertex_Number += 1;
|
||||||
|
|
||||||
|
if (Vertex_Number != sizeof(Hitbox_Vertices) / sizeof(Hitbox_Vertices[0]))
|
||||||
|
{
|
||||||
goto Transform_Vertices_Label;
|
goto Transform_Vertices_Label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,6 +177,7 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
goto Get_Bounds_Label;
|
goto Get_Bounds_Label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Bounds[0] -= 2.f;
|
Bounds[0] -= 2.f;
|
||||||
|
|
||||||
@ -183,11 +186,9 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
Bounds[2] -= 2.f;
|
Bounds[2] -= 2.f;
|
||||||
|
|
||||||
Bounds[3] += 2.f;
|
Bounds[3] += 2.f;
|
||||||
|
|
||||||
return (Bounds[1] != 2.f) * (Bounds[3] != 2.f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return __builtin_isfinite(Bounds[0]) * (Bounds[1] != 2.f) * (Bounds[3] != 2.f);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Get_Bounds() == 1)
|
if (Get_Bounds() == 1)
|
||||||
@ -240,9 +241,9 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
|
|
||||||
if (Target->Identifier == 232)
|
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" };
|
static wchar_t* Survivors[8] = { (wchar_t*)L"Nick", (wchar_t*)L"Rochelle", (wchar_t*)L"Coach", (wchar_t*)L"Ellis", (wchar_t*)L"Bill", (wchar_t*)L"Zoey", (wchar_t*)L"Louis", (wchar_t*)L"Francis" };
|
||||||
|
|
||||||
Paint_Data->Name = Survivors[*(__int32*)((unsigned __int32)Target->Self + 52) - 3];
|
Paint_Data->Name = Survivors[std::clamp(*(__int32*)((unsigned __int32)Target->Self + 7308), 0, 7) + 4 * (*(__int32*)((unsigned __int32)Client_Module + 8144624) == 1)];
|
||||||
}
|
}
|
||||||
|
|
||||||
__int8 Ghost = 0;
|
__int8 Ghost = 0;
|
||||||
@ -252,10 +253,23 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
Ghost = *(__int8*)((unsigned __int32)Target->Self + 7322);
|
Ghost = *(__int8*)((unsigned __int32)Target->Self + 7322);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Draw_Box = [&](__int32 From_X, __int32 From_Y, __int32 To_X, __int32 To_Y)
|
auto Draw_Box = [&](__int32 From_X, __int32 From_Y, __int32 To_X, __int32 To_Y) -> void
|
||||||
{
|
{
|
||||||
using Set_Color_Type = void(__thiscall**)(void* Surface, unsigned __int8 Red, unsigned __int8 Green, unsigned __int8 Blue, unsigned __int8 Alpha);
|
using Set_Color_Type = void(__thiscall**)(void* Surface, unsigned __int8 Red, unsigned __int8 Green, unsigned __int8 Blue, unsigned __int8 Alpha);
|
||||||
|
|
||||||
|
if (Ghost == 0)
|
||||||
|
{
|
||||||
|
(*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
|
||||||
|
{
|
||||||
|
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 64, 64, 64, 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
using Draw_Filled_Rect_Type = void(__thiscall**)(void* Surface, __int32 From_X, __int32 From_Y, __int32 To_X, __int32 To_Y);
|
||||||
|
|
||||||
|
(*Draw_Filled_Rect_Type(*(unsigned __int32*)Surface + 48))(Surface, From_X + 2, From_Y + 2, To_X - 2, To_Y - 2);
|
||||||
|
|
||||||
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 0, 0, 255);
|
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 0, 0, 255);
|
||||||
|
|
||||||
using Draw_Rect_Type = void(__thiscall**)(void* Surface, __int32 From_X, __int32 From_Y, __int32 To_X, __int32 To_Y);
|
using Draw_Rect_Type = void(__thiscall**)(void* Surface, __int32 From_X, __int32 From_Y, __int32 To_X, __int32 To_Y);
|
||||||
@ -274,19 +288,6 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
(*Draw_Rect_Type(*(unsigned __int32*)Surface + 56))(Surface, From_X, From_Y, To_X, To_Y);
|
(*Draw_Rect_Type(*(unsigned __int32*)Surface + 56))(Surface, From_X, From_Y, To_X, To_Y);
|
||||||
|
|
||||||
if (Ghost == 0)
|
|
||||||
{
|
|
||||||
(*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
|
|
||||||
{
|
|
||||||
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 64, 64, 64, 128);
|
|
||||||
}
|
|
||||||
|
|
||||||
using Draw_Filled_Rect_Type = void(__thiscall**)(void* Surface, __int32 From_X, __int32 From_Y, __int32 To_X, __int32 To_Y);
|
|
||||||
|
|
||||||
(*Draw_Filled_Rect_Type(*(unsigned __int32*)Surface + 48))(Surface, From_X + 2, From_Y + 2, To_X - 2, To_Y - 2);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Draw_Box(Bounds[0], Bounds[2], Bounds[1], Bounds[3]);
|
Draw_Box(Bounds[0], Bounds[2], Bounds[1], Bounds[3]);
|
||||||
@ -313,6 +314,8 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
|
|
||||||
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, 0, 0, 0, 0, 0, 0, Text);
|
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, 0, 0, 0, 0, 0, 0, Text);
|
||||||
|
|
||||||
|
Write_Character = 0;
|
||||||
|
|
||||||
if (Character != L'~')
|
if (Character != L'~')
|
||||||
{
|
{
|
||||||
Character += L'\1';
|
Character += L'\1';
|
||||||
@ -365,8 +368,6 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
|
|
||||||
wchar_t Text[2] = { Paint_Data->Name[Character_Number] };
|
wchar_t Text[2] = { Paint_Data->Name[Character_Number] };
|
||||||
|
|
||||||
Write_Character = Text[0];
|
|
||||||
|
|
||||||
if (Ghost == 0)
|
if (Ghost == 0)
|
||||||
{
|
{
|
||||||
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);
|
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);
|
||||||
@ -376,8 +377,6 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
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);
|
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;
|
|
||||||
|
|
||||||
Offset_X += Character_Bounds[1] + 1;
|
Offset_X += Character_Bounds[1] + 1;
|
||||||
|
|
||||||
Character_Number += 1;
|
Character_Number += 1;
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
void __thiscall Perform_Shove_Trace(void* Stack)
|
void __thiscall Perform_Shove_Trace(void* Stack)
|
||||||
{
|
{
|
||||||
void* Entity = *(void**)((unsigned __int32)Stack + 332);
|
if (*(void**)((unsigned __int32)Stack + 332) == Perform_Trace_Target)
|
||||||
|
|
||||||
if (Entity == Perform_Trace_Target)
|
|
||||||
{
|
{
|
||||||
Perform_Trace_Damage = 1;
|
Perform_Trace_Damage = 1.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
|
|
||||||
auto Compute_Damage = [&]() -> void
|
auto Compute_Damage = [&]() -> void
|
||||||
{
|
{
|
||||||
if (Interface_Penetration_Damage.Integer == 0)
|
if (Interface_Penetration_Damage.Floating_Point == 0.f)
|
||||||
{
|
{
|
||||||
Perform_Trace_Damage = 1.f;
|
Perform_Trace_Damage = 1.f;
|
||||||
}
|
}
|
||||||
@ -140,7 +140,7 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
|
|
||||||
float Distance = Calculate_Distance_Type((unsigned __int32)Client_Module + 878608)((void*)((unsigned __int32)Local_Player + 540), Bounds);
|
float Distance = Calculate_Distance_Type((unsigned __int32)Client_Module + 878608)((void*)((unsigned __int32)Local_Player + 540), Bounds);
|
||||||
|
|
||||||
if (Distance < 100)
|
if (Distance < 100.f)
|
||||||
{
|
{
|
||||||
Damage += 4.f * Damage * __builtin_powf(1.f - Distance / 100.f, 2.f);
|
Damage += 4.f * Damage * __builtin_powf(1.f - Distance / 100.f, 2.f);
|
||||||
}
|
}
|
||||||
@ -164,27 +164,15 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
{
|
{
|
||||||
Apply_Shotgun_Scaling();
|
Apply_Shotgun_Scaling();
|
||||||
|
|
||||||
__int8 Is_Sniper_Rifle = (Bullet_Type - 8) > 0;
|
__int8 Is_Sniper_Rifle = Bullet_Type > 8;
|
||||||
|
|
||||||
if (Group == 1)
|
if (Group == 1)
|
||||||
{
|
{
|
||||||
if (Gender == 14)
|
if (Gender == 14)
|
||||||
{
|
{
|
||||||
auto Is_Neutral = [&]() -> __int8
|
static std::unordered_set<__int32> Neutrals = { 563, 567, 592, 600, 648 };
|
||||||
{
|
|
||||||
__int32 Sequence_Activity = *(__int32*)((unsigned __int32)Entity + 4688);
|
|
||||||
|
|
||||||
unsigned __int32 Absolute_Sequence_Activity = Sequence_Activity - 563;
|
if (Neutrals.contains(*(__int32*)((unsigned __int32)Entity + 4688)) == 1)
|
||||||
|
|
||||||
if (Absolute_Sequence_Activity <= 29)
|
|
||||||
{
|
|
||||||
return (536870929 & (1 << (Absolute_Sequence_Activity & 31))) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (Sequence_Activity == 600) + (Sequence_Activity == 648);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (Is_Neutral() == 1)
|
|
||||||
{
|
{
|
||||||
Damage = __builtin_inff();
|
Damage = __builtin_inff();
|
||||||
}
|
}
|
||||||
@ -213,7 +201,7 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
{
|
{
|
||||||
if (Is_Sniper_Rifle * Realism == 0)
|
if (Is_Sniper_Rifle * Realism == 0)
|
||||||
{
|
{
|
||||||
Damage = 450;
|
Damage = 450.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -250,7 +238,9 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
Damage *= min(Multipliers[Group], 4.f - 2.75f * Is_Shotgun);
|
Damage *= min(Multipliers[Group], 4.f - 2.75f * Is_Shotgun);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Get_Identifier(Entity, 1, 0) == 99)
|
__int32 Raw_Identifier = Get_Identifier(Entity, 1, 0);
|
||||||
|
|
||||||
|
if (Raw_Identifier == 99)
|
||||||
{
|
{
|
||||||
if (*(__int32*)((unsigned __int32)Entity + 2212) == 5)
|
if (*(__int32*)((unsigned __int32)Entity + 2212) == 5)
|
||||||
{
|
{
|
||||||
@ -263,7 +253,7 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
{
|
{
|
||||||
if (*(void**)((unsigned __int32)Entity + 8040) != INVALID_HANDLE_VALUE)
|
if (*(void**)((unsigned __int32)Entity + 8040) != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
if (Damage > 50)
|
if (Damage > 50.f)
|
||||||
{
|
{
|
||||||
__int8 Competitive = ('v' - Mode[0] ^ Mode[0] - 's') == 3;
|
__int8 Competitive = ('v' - Mode[0] ^ Mode[0] - 's') == 3;
|
||||||
|
|
||||||
@ -283,7 +273,15 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
|
|
||||||
if (Damage != __builtin_inff())
|
if (Damage != __builtin_inff())
|
||||||
{
|
{
|
||||||
Damage = (__int32)(Damage + 1.f * (Damage < 1));
|
Damage = (__int32)(Damage + 1.f * (Damage < 1.f));
|
||||||
|
|
||||||
|
if (Raw_Identifier == 276)
|
||||||
|
{
|
||||||
|
if (__builtin_strstr(Get_Sequence_Name(Entity), "limb") != nullptr)
|
||||||
|
{
|
||||||
|
Damage = min(Damage, *(__int32*)((unsigned __int32)Entity + 236) - 1.f);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,7 +291,7 @@ void __thiscall Perform_Trace(void* Stack)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Upgrade_Type + Gender == 17)
|
if ((Upgrade_Type == 2) + (Gender == 15) == 2)
|
||||||
{
|
{
|
||||||
float Inflictor_Direction[3];
|
float Inflictor_Direction[3];
|
||||||
|
|
||||||
|
@ -2,15 +2,8 @@ void* Original_Play_Footstep_Sound_Caller;
|
|||||||
|
|
||||||
void __thiscall Redirected_Play_Footstep_Sound(void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, void* Unknown_Parameter_4, void* Unknown_Parameter_5, void* Unknown_Parameter_6)
|
void __thiscall Redirected_Play_Footstep_Sound(void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, void* Unknown_Parameter_4, void* Unknown_Parameter_5, void* Unknown_Parameter_6)
|
||||||
{
|
{
|
||||||
void* Prediction = (void*)((unsigned __int32)Client_Module + 8072728);
|
if (*(__int8*)((unsigned __int32)Client_Module + 8072736) <= *(__int8*)((unsigned __int32)Client_Module + 8072752))
|
||||||
|
|
||||||
if (*(__int8*)((unsigned __int32)Prediction + 8) == 1)
|
|
||||||
{
|
{
|
||||||
if (*(__int8*)((unsigned __int32)Prediction + 24) == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
(decltype(&Redirected_Play_Footstep_Sound)(Original_Play_Footstep_Sound_Caller))(Unknown_Parameter_1, Unknown_Parameter_2, Unknown_Parameter_3, Unknown_Parameter_4, Unknown_Parameter_5, Unknown_Parameter_6);
|
(decltype(&Redirected_Play_Footstep_Sound)(Original_Play_Footstep_Sound_Caller))(Unknown_Parameter_1, Unknown_Parameter_2, Unknown_Parameter_3, Unknown_Parameter_4, Unknown_Parameter_5, Unknown_Parameter_6);
|
||||||
}
|
}
|
||||||
|
}
|
@ -87,8 +87,6 @@ void __thiscall Redirected_Post_Network_Data_Received(void* Unknown_Parameter, _
|
|||||||
{
|
{
|
||||||
Predicton_Copy.Construct(Local_Player, Prediction_Frame, (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);
|
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));
|
Transfer_Data_Type((unsigned __int32)Client_Module + 1573744)(&Predicton_Copy, nullptr, -1, (Prediction_Descriptor_Structure*)((unsigned __int32)Client_Module + 7236480));
|
||||||
|
@ -13,10 +13,15 @@ void __thiscall Redirected_Process_Movement(void* Unknown_Parameter, void* Playe
|
|||||||
|
|
||||||
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);
|
(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 (Get_Identifier(Player, 0, 0) == 272)
|
||||||
|
{
|
||||||
|
using Get_Ability_Type = void*(__thiscall*)(void* Entity);
|
||||||
|
|
||||||
|
void* Ability = Get_Ability_Type((unsigned __int32)Client_Module + 2438560)(Player);
|
||||||
|
|
||||||
if (Ability != nullptr)
|
if (Ability != nullptr)
|
||||||
{
|
{
|
||||||
*(float*)((unsigned __int32)Ability + 1636) = 0.f;
|
*(float*)((unsigned __int32)Ability + 1636) = 0.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
to achieve least interpolation time: `cl_updaterate 100;cl_interp_ratio 0;cl_interp 0`\
|
to achieve least (aligned) interpolation time: `cl_updaterate 30;cl_interp_ratio 0;cl_interp 0`\
|
||||||
to queue extra commands: `bind key +zoom`
|
to queue extra commands: `bind key +zoom`
|
||||||
```
|
```
|
||||||
code: https://github.com/qwertyuiop3/Storm
|
code: https://github.com/qwertyuiop3/Storm
|
||||||
|
@ -42,6 +42,6 @@ void __thiscall Redirected_Run_Command(void* Prediction, void* Player, Command_S
|
|||||||
|
|
||||||
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);
|
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;
|
Global_Variables->Time = (*(__int32*)((unsigned __int32)Player + 5324) - 1) * Global_Variables->Interval_Per_Tick;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -62,7 +62,10 @@ void Redirected_Send_Move()
|
|||||||
|
|
||||||
void* Network_Channel = *(void**)(*(unsigned __int32*)((unsigned __int32)Engine_Module + 4352236) + 24);
|
void* Network_Channel = *(void**)(*(unsigned __int32*)((unsigned __int32)Engine_Module + 4352236) + 24);
|
||||||
|
|
||||||
|
if (*(__int32*)((unsigned __int32)Network_Channel + 16) != -1)
|
||||||
|
{
|
||||||
*(__int32*)((unsigned __int32)Network_Channel + 28) -= Extra_Commands_Queue;
|
*(__int32*)((unsigned __int32)Network_Channel + 28) -= Extra_Commands_Queue;
|
||||||
|
}
|
||||||
|
|
||||||
using Send_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);
|
||||||
|
|
||||||
|
@ -4,23 +4,9 @@ void __thiscall Redirected_Spawn_Grenade(void* Entity)
|
|||||||
{
|
{
|
||||||
using Set_Size_Type = void(__thiscall*)(void* Entity, float* Minimum, float* Maximum);
|
using Set_Size_Type = void(__thiscall*)(void* Entity, float* Minimum, float* Maximum);
|
||||||
|
|
||||||
float Minimum[3] =
|
float Minimum[3] = { -16.f, -16.f, -16.f };
|
||||||
{
|
|
||||||
-16.f,
|
|
||||||
|
|
||||||
-16.f,
|
float Maximum[3] = { 16.f, 16.f, 16.f };
|
||||||
|
|
||||||
-16.f
|
|
||||||
};
|
|
||||||
|
|
||||||
float Maximum[3] =
|
|
||||||
{
|
|
||||||
16.f,
|
|
||||||
|
|
||||||
16.f,
|
|
||||||
|
|
||||||
16.f
|
|
||||||
};
|
|
||||||
|
|
||||||
Set_Size_Type((unsigned __int32)Client_Module + 281664)(Entity, Minimum, Maximum);
|
Set_Size_Type((unsigned __int32)Client_Module + 281664)(Entity, Minimum, Maximum);
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||||
<FloatingPointModel>Fast</FloatingPointModel>
|
<FloatingPointModel>Fast</FloatingPointModel>
|
||||||
<AdditionalOptions>/Zc:threadSafeInit- /clang:-fno-unwind-tables -Wno-multichar -Wno-microsoft-goto %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/Zc:threadSafeInit- /clang:-fno-unwind-tables -Wno-microsoft-goto %(AdditionalOptions)</AdditionalOptions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<ControlFlowGuard>false</ControlFlowGuard>
|
<ControlFlowGuard>false</ControlFlowGuard>
|
||||||
<FloatingPointExceptions>false</FloatingPointExceptions>
|
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||||
@ -62,6 +62,7 @@
|
|||||||
<ExceptionHandling>false</ExceptionHandling>
|
<ExceptionHandling>false</ExceptionHandling>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
|
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
|
||||||
|
<ForcedIncludeFiles>__msvc_all_public_headers.hpp</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -2,5 +2,7 @@ void* Original_Update_Caller;
|
|||||||
|
|
||||||
void __thiscall Redirected_Update(void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, __int32 Incoming_Sequence_Number, int Outgoing_Sequence_Number)
|
void __thiscall Redirected_Update(void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, __int32 Incoming_Sequence_Number, int Outgoing_Sequence_Number)
|
||||||
{
|
{
|
||||||
|
Consistent_Time = Outgoing_Sequence_Number - Incoming_Sequence_Number > 150;
|
||||||
|
|
||||||
(decltype(&Redirected_Update)(Original_Update_Caller))(Unknown_Parameter_1, Unknown_Parameter_2, Unknown_Parameter_3, Incoming_Sequence_Number, Incoming_Sequence_Number + (Outgoing_Sequence_Number - Incoming_Sequence_Number) % 150);
|
(decltype(&Redirected_Update)(Original_Update_Caller))(Unknown_Parameter_1, Unknown_Parameter_2, Unknown_Parameter_3, Incoming_Sequence_Number, Incoming_Sequence_Number + (Outgoing_Sequence_Number - Incoming_Sequence_Number) % 150);
|
||||||
}
|
}
|
@ -2,7 +2,7 @@ struct Global_Variables_Structure
|
|||||||
{
|
{
|
||||||
__int8 Additional_Bytes_1[12];
|
__int8 Additional_Bytes_1[12];
|
||||||
|
|
||||||
float Current_Time;
|
float Time;
|
||||||
|
|
||||||
float Frame_Time;
|
float Frame_Time;
|
||||||
|
|
||||||
@ -19,9 +19,9 @@ void Redirected_Update_Animations()
|
|||||||
{
|
{
|
||||||
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);
|
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);
|
||||||
|
|
||||||
float Previous_Current_Time = Global_Variables->Current_Time;
|
float Previous_Time = Global_Variables->Time;
|
||||||
|
|
||||||
Global_Variables->Current_Time = Update_Animation_Time;
|
Global_Variables->Time = Update_Animation_Time;
|
||||||
|
|
||||||
float Previous_Frame_Time = Global_Variables->Frame_Time;
|
float Previous_Frame_Time = Global_Variables->Frame_Time;
|
||||||
|
|
||||||
@ -54,5 +54,5 @@ void Redirected_Update_Animations()
|
|||||||
|
|
||||||
Global_Variables->Frame_Time = Previous_Frame_Time;
|
Global_Variables->Frame_Time = Previous_Frame_Time;
|
||||||
|
|
||||||
Global_Variables->Current_Time = Previous_Current_Time;
|
Global_Variables->Time = Previous_Time;
|
||||||
}
|
}
|
@ -14,10 +14,10 @@ void __thiscall Redirected_Write_Texture(void* Unknown_Parameter_1, void* Unknow
|
|||||||
|
|
||||||
unsigned __int32 Offset_X = Width;
|
unsigned __int32 Offset_X = Width;
|
||||||
|
|
||||||
unsigned __int32 Offset_Y = Height;
|
|
||||||
|
|
||||||
unsigned __int32 Character_Width = 0;
|
unsigned __int32 Character_Width = 0;
|
||||||
|
|
||||||
|
unsigned __int32 Offset_Y = Height;
|
||||||
|
|
||||||
unsigned __int32 Character_Height = 0;
|
unsigned __int32 Character_Height = 0;
|
||||||
|
|
||||||
Traverse_Horizontal_Label:
|
Traverse_Horizontal_Label:
|
||||||
@ -28,11 +28,11 @@ void __thiscall Redirected_Write_Texture(void* Unknown_Parameter_1, void* Unknow
|
|||||||
{
|
{
|
||||||
if (*(unsigned __int32*)((unsigned __int32)Texture + X * 4 + Y * 4 * Width) != 0)
|
if (*(unsigned __int32*)((unsigned __int32)Texture + X * 4 + Y * 4 * Width) != 0)
|
||||||
{
|
{
|
||||||
Offset_X = min(Offset_X, X);
|
Offset_X = min(X, Offset_X);
|
||||||
|
|
||||||
Character_Width = max(Character_Width, X + 1);
|
Character_Width = max(Character_Width, X + 1);
|
||||||
|
|
||||||
Offset_Y = min(Offset_Y, Y);
|
Offset_Y = min(Y, Offset_Y);
|
||||||
|
|
||||||
Character_Height = max(Character_Height, Y + 1);
|
Character_Height = max(Character_Height, Y + 1);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user