mirror of
https://github.com/qwertyuiop3/Storm.git
synced 2025-09-19 04:05:58 +08:00
Compare commits
54 Commits
15.10.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 | |||
0381620f7d | |||
309a0f2c27 | |||
6026914241 | |||
9efc44f17e | |||
02e94e451c | |||
5d9ab0c46b | |||
6768e29ea6 | |||
485ff54642 | |||
bd318c5576 | |||
82e3a8fd55 | |||
bdf8f51f29 | |||
e462dff4f5 | |||
2dc81b9839 | |||
6554d9e04e | |||
68cc187ac7 | |||
bc24cea3b5 | |||
5a7e62dd6f | |||
5420ace13d | |||
08820dca32 | |||
338a781f22 | |||
f26e099d55 | |||
924e32b297 | |||
cd2b23d069 | |||
83ad090b63 | |||
d9bf5dea6d | |||
2028a2886b | |||
1af4705b49 | |||
d174b651c9 |
@ -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);
|
||||
}
|
||||
}
|
||||
};
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "Byte_Manager_Find_Bytes.hpp"
|
||||
|
||||
#include "Byte_Manager_Set_Bytes.hpp"
|
||||
|
||||
#include "Byte_Manager_Copy_Bytes.hpp"
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
||||
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]), (float*)((unsigned __int32)Player + 4996));
|
||||
}
|
1051
Copy_Command.hpp
1051
Copy_Command.hpp
File diff suppressed because it is too large
Load Diff
@ -1,64 +1,71 @@
|
||||
void Redirected_Draw_Crosshair()
|
||||
{
|
||||
if ((*(__int32*)(*(unsigned __int32*)((unsigned __int32)Client_Module + 7498712) + 5008) | 55) == 55)
|
||||
static float Rotation_Angle;
|
||||
|
||||
auto Draw_Storm = [&](__int32 X, __int32 Y, __int32 Additional_Rotation_Angle)
|
||||
{
|
||||
static float Rotation_Angle;
|
||||
using Set_Color_Type = void(__thiscall**)(void* Surface, unsigned __int8 Red, unsigned __int8 Green, unsigned __int8 Blue, unsigned __int8 Alpha);
|
||||
|
||||
auto Draw_Storm = [&](__int32 X, __int32 Y, __int32 Additional_Rotation_Angle)
|
||||
void* Surface = *(void**)((unsigned __int32)Client_Module + 8960244);
|
||||
|
||||
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 0, 0, 255);
|
||||
|
||||
using Draw_Circle_Type = void(__thiscall**)(void* Surface, __int32 X, __int32 Y, __int32 Radius, __int32 Segments);
|
||||
|
||||
X += Interface_Storm_Rotation_Radius.Integer * __builtin_cosf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360.f) * 3.1415927f / 180.f);
|
||||
|
||||
Y += Interface_Storm_Rotation_Radius.Integer * __builtin_sinf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360.f) * 3.1415927f / 180.f);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 128, 255, 255);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
};
|
||||
|
||||
__int32 Storm_Number = 0;
|
||||
|
||||
using Get_Screen_Size_Type = __int32(__cdecl*)(__int32* Width, __int32* Height);
|
||||
|
||||
__int32 Screen_Width;
|
||||
|
||||
__int32 Screen_Height;
|
||||
|
||||
Get_Screen_Size_Type((unsigned __int32)Client_Module + 1780352)(&Screen_Width, &Screen_Height);
|
||||
|
||||
Screen_Width /= 2;
|
||||
|
||||
Screen_Height /= 2;
|
||||
|
||||
Draw_Storm_Label:
|
||||
{
|
||||
if (Storm_Number < Interface_Storm_Iterations.Integer)
|
||||
{
|
||||
using Set_Color_Type = void(__thiscall**)(void* Surface, unsigned __int8 Red, unsigned __int8 Green, unsigned __int8 Blue, unsigned __int8 Alpha);
|
||||
Draw_Storm(Screen_Width, Screen_Height, Storm_Number * 360 / Interface_Storm_Iterations.Integer);
|
||||
|
||||
void* Surface = *(void**)((unsigned __int32)Client_Module + 8960244);
|
||||
Storm_Number += 1;
|
||||
|
||||
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 0, 0, 255);
|
||||
|
||||
using Draw_Circle_Type = void(__thiscall**)(void* Surface, __int32 X, __int32 Y, __int32 Radius, __int32 Segments);
|
||||
|
||||
X += Interface_Storm_Rotation_Radius.Integer * __builtin_cosf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360) * 3.1415927f / 180);
|
||||
|
||||
Y += Interface_Storm_Rotation_Radius.Integer * __builtin_sinf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360) * 3.1415927f / 180);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y - 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X + 1, Y + 1, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
|
||||
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, 0, 128, 255, 255);
|
||||
|
||||
(*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer);
|
||||
};
|
||||
|
||||
__int32 Storm_Number = 0;
|
||||
|
||||
using Get_Screen_Size_Type = __int32(__cdecl*)();
|
||||
|
||||
__int32 Screen_Width = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738576)() / 2;
|
||||
|
||||
__int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)() / 2;
|
||||
|
||||
Draw_Storm_Label:
|
||||
{
|
||||
if (Storm_Number < Interface_Storm_Iterations.Integer)
|
||||
{
|
||||
Draw_Storm(Screen_Width, Screen_Height, Storm_Number * 360 / Interface_Storm_Iterations.Integer);
|
||||
|
||||
Storm_Number += 1;
|
||||
|
||||
goto Draw_Storm_Label;
|
||||
}
|
||||
goto Draw_Storm_Label;
|
||||
}
|
||||
|
||||
Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360);
|
||||
}
|
||||
|
||||
Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360.f);
|
||||
|
||||
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)
|
||||
{
|
||||
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(Effect_Name, "ecloud_") == nullptr)
|
||||
if (__builtin_strstr(Get_Effect_Name_Type((unsigned __int32)Client_Module + 1423120)((void*)((unsigned __int32)Effect - 8)), "ecloud_ca") == nullptr)
|
||||
{
|
||||
return (decltype(&Redirected_Draw_Effect)(Original_Draw_Effect_Caller))(Effect, Unknown_Parameter_1, Unknown_Parameter_2);
|
||||
}
|
||||
|
140
Entry_Point.cpp
140
Entry_Point.cpp
@ -2,10 +2,6 @@
|
||||
|
||||
#include <TlHelp32.h>
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
#define Bits_32
|
||||
|
||||
#include "Byte_Manager/Byte_Manager.hpp"
|
||||
|
||||
#include "Redirection_Manager/Redirection_Manager.hpp"
|
||||
@ -18,14 +14,12 @@ void* Client_Module;
|
||||
|
||||
#include "Post_Network_Data_Received.hpp"
|
||||
|
||||
#include "Set_Move_Type.hpp"
|
||||
|
||||
#include "Interpolate.hpp"
|
||||
|
||||
#include "Update_Animations.hpp"
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
#include "Estimate_Velocity.hpp"
|
||||
|
||||
#include "Spawn_Grenade.hpp"
|
||||
@ -38,8 +32,6 @@ void* Client_Module;
|
||||
|
||||
#include "Play_Footstep_Sound.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "Finish_Move.hpp"
|
||||
|
||||
#include "Item_Post_Frame.hpp"
|
||||
@ -54,8 +46,6 @@ void* Client_Module;
|
||||
|
||||
#include "Send_Move.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "Copy_Command.hpp"
|
||||
|
||||
#include "Calculate_View.hpp"
|
||||
@ -117,7 +107,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();
|
||||
|
||||
@ -129,29 +119,11 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
||||
|
||||
HANDLE Standard_Output_Handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
CONSOLE_FONT_INFOEX Console_Font_Information;
|
||||
|
||||
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");
|
||||
CONSOLE_FONT_INFOEX Console_Font_Information = { sizeof(CONSOLE_FONT_INFOEX), 0, { 0, 12 }, FF_DONTCARE, FW_NORMAL, { L"Terminal" } };
|
||||
|
||||
SetCurrentConsoleFontEx(Standard_Output_Handle, 0, &Console_Font_Information);
|
||||
|
||||
CONSOLE_CURSOR_INFO Console_Cursor_Information;
|
||||
|
||||
Console_Cursor_Information.bVisible = 0;
|
||||
|
||||
Console_Cursor_Information.dwSize = sizeof(Console_Cursor_Information);
|
||||
CONSOLE_CURSOR_INFO Console_Cursor_Information = { sizeof(Console_Cursor_Information) };
|
||||
|
||||
SetConsoleTextAttribute(Standard_Output_Handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
|
||||
|
||||
@ -161,19 +133,19 @@ __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");
|
||||
|
||||
_putws(L"[ + ] Delimit Interface");
|
||||
{
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Engine_Module + 1423205), 1, 235);
|
||||
}
|
||||
|
||||
_putws(L"[ + ] Extend Interface");
|
||||
{
|
||||
Implement_Extended_Interface();
|
||||
@ -183,29 +155,33 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
||||
|
||||
_putws(L"[ + ] Events");
|
||||
{
|
||||
Redirection_Manager::Redirect_Function(Original_Post_Network_Data_Received_Caller, 0, (void*)((unsigned __int32)Client_Module + 1555264), 1, (void*)Redirected_Post_Network_Data_Received);
|
||||
Original_Post_Network_Data_Received_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1555264), (void*)Redirected_Post_Network_Data_Received);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 316816), 1, 195);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 316816), 1, 195);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Engine_Module + 521741), 1, 235);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Engine_Module + 350575), 1, 94);
|
||||
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Engine_Module + 521741), 1, 235);
|
||||
|
||||
*(void**)((unsigned __int32)Client_Module + 7492840) = (void*)Redirected_Set_Move_Type;
|
||||
}
|
||||
|
||||
_putws(L"[ + ] Interpolation");
|
||||
{
|
||||
Redirection_Manager::Redirect_Function(Original_Interpolate_Caller, 0, (void*)((unsigned __int32)Client_Module + 214256), 1, (void*)Redirected_Interpolate);
|
||||
Original_Interpolate_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 214256), (void*)Redirected_Interpolate);
|
||||
}
|
||||
|
||||
_putws(L"[ + ] Animations");
|
||||
{
|
||||
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 205296), (void*)Redirected_Update_Animations);
|
||||
Redirection_Manager::Redirect_Function((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 };
|
||||
unsigned __int8 Maintain_Sequence_Transitions_Bytes[3] = { 194, 24 };
|
||||
|
||||
Byte_Manager::Copy_Bytes(1, (void*)((unsigned __int32)Client_Module + 245232), sizeof(Maintain_Sequence_Transitions_Bytes), Maintain_Sequence_Transitions_Bytes);
|
||||
Byte_Manager::Copy_Bytes(0, (void*)((unsigned __int32)Client_Module + 245232), sizeof(Maintain_Sequence_Transitions_Bytes), Maintain_Sequence_Transitions_Bytes);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 3244278), 1, 15);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 3244278), 1, 15);
|
||||
}
|
||||
|
||||
_putws(L"[ + ] Prediction");
|
||||
@ -224,81 +200,87 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi
|
||||
|
||||
Prediction_Descriptor->Parent = &Original_Prediction_Descriptor;
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Spawn_Grenade_Caller, 2, (void*)((unsigned __int32)Client_Module + 2227424), 1, (void*)Redirected_Spawn_Grenade);
|
||||
Original_Spawn_Grenade_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 2227424), (void*)Redirected_Spawn_Grenade);
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Update_Caller, 0, (void*)((unsigned __int32)Client_Module + 1554304), 1, (void*)Redirected_Update);
|
||||
Original_Update_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1554304), (void*)Redirected_Update);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1554528), 1, 235);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1554528), 1, 235);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1557776), 1, 235);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1557776), 1, 235);
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Run_Command_Caller, 0, (void*)((unsigned __int32)Client_Module + 1553504), 1, (void*)Redirected_Run_Command);
|
||||
Original_Run_Command_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 1553504), (void*)Redirected_Run_Command);
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Process_Movement_Caller, 2, (void*)((unsigned __int32)Client_Module + 2590832), 1, (void*)Redirected_Process_Movement);
|
||||
Original_Process_Movement_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 2590832), (void*)Redirected_Process_Movement);
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Play_Footstep_Sound_Caller, 0, (void*)((unsigned __int32)Client_Module + 978464), 1, (void*)Redirected_Play_Footstep_Sound);
|
||||
Original_Play_Footstep_Sound_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 978464), (void*)Redirected_Play_Footstep_Sound);
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Finish_Move_Caller, 2, (void*)((unsigned __int32)Client_Module + 1553264), 1, (void*)Redirected_Finish_Move);
|
||||
Original_Finish_Move_Caller = Redirection_Manager::Redirect_Function(2, (void*)((unsigned __int32)Client_Module + 1553264), (void*)Redirected_Finish_Move);
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Item_Post_Frame_Caller, 3, (void*)((unsigned __int32)Client_Module + 2542896), 1, (void*)Redirected_Item_Post_Frame);
|
||||
Original_Item_Post_Frame_Caller = Redirection_Manager::Redirect_Function(3, (void*)((unsigned __int32)Client_Module + 2542896), (void*)Redirected_Item_Post_Frame);
|
||||
|
||||
*(__int32*)((unsigned __int32)Original_Item_Post_Frame_Caller + 5) = (__int32)((unsigned __int32)Client_Module + 2438551) - (__int32)Original_Item_Post_Frame_Caller;
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Perform_Trace_Caller, 0, (void*)((unsigned __int32)Client_Module + 3093744), 1, (void*)Redirected_Perform_Trace);
|
||||
Original_Perform_Trace_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)Client_Module + 3093744), (void*)Redirected_Perform_Trace);
|
||||
|
||||
Original_Perform_Shove_Trace_Caller = (void*)((unsigned __int32)Client_Module + 3221111);
|
||||
|
||||
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");
|
||||
{
|
||||
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);
|
||||
Redirection_Manager::Redirect_Function((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);
|
||||
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);
|
||||
}
|
||||
|
||||
_putws(L"[ + ] Effects");
|
||||
{
|
||||
Redirection_Manager::Redirect_Function(Original_Calculate_View_Caller, 0, (void*)((unsigned __int32)Client_Module + 132944), 1, (void*)Redirected_Calculate_View);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 407384), 1, 133);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 133424), 1, 235);
|
||||
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 + 2881566), 1, 246);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 133424), 1, 235);
|
||||
|
||||
Redirection_Manager::Redirect_Function(Original_Draw_Effect_Caller, 0, (void*)((unsigned __int32)Client_Module + 1425888), 1, (void*)Redirected_Draw_Effect);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 2881566), 1, 246);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 1868237), 1, 52);
|
||||
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 + 2655546), 1, 216);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 1868237), 1, 52);
|
||||
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 2655546), 1, 216);
|
||||
|
||||
*(void**)((unsigned __int32)Client_Module + 8115120) = (void*)((unsigned __int32)Client_Module + 955708);
|
||||
}
|
||||
|
||||
_putws(L"[ + ] Paint");
|
||||
{
|
||||
Redirection_Manager::Redirect_Function(Original_Write_Texture_Caller, 0, (void*)((unsigned __int32)GetModuleHandleW(L"vguimatsurface.dll") + 100560), 1, (void*)Redirected_Write_Texture);
|
||||
Original_Write_Texture_Caller = Redirection_Manager::Redirect_Function(0, (void*)((unsigned __int32)GetModuleHandleW(L"vguimatsurface.dll") + 100592), (void*)Redirected_Write_Texture);
|
||||
|
||||
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 2913504), (void*)Redirected_Paint);
|
||||
Redirection_Manager::Redirect_Function((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);
|
||||
|
||||
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 2301184), (void*)Redirected_Draw_Crosshair);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 3244715), 1, 49);
|
||||
|
||||
Byte_Manager::Set_Bytes(1, (void*)((unsigned __int32)Client_Module + 2930985), 1, 235);
|
||||
Redirection_Manager::Redirect_Function((void*)((unsigned __int32)Client_Module + 2301184), (void*)Redirected_Draw_Crosshair);
|
||||
|
||||
Redirection_Manager::Redirect_Function(1, (void*)((unsigned __int32)Client_Module + 3118720), (void*)Redirected_Draw_Crosshair);
|
||||
Byte_Manager::Set_Bytes(0, (void*)((unsigned __int32)Client_Module + 2930985), 1, 235);
|
||||
|
||||
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)
|
||||
{
|
||||
using Get_Identifier_Type = void*(__cdecl**)();
|
||||
@ -9,128 +16,91 @@ __int32 Get_Identifier(void* Entity, __int8 Raw, __int8 Equipment)
|
||||
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)
|
||||
{
|
||||
__int8 Valid = 0;
|
||||
|
||||
if (Identifier == 13)
|
||||
if (Targets.contains(Identifier) == 1)
|
||||
{
|
||||
*(__int32*)((unsigned __int32)Entity + 228) = 1;
|
||||
__int8 Valid = 0;
|
||||
|
||||
Valid = *(__int8*)((unsigned __int32)Entity + 324) == 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*(__int8*)((unsigned __int32)Entity + 221) == 0)
|
||||
if (Identifier == 13)
|
||||
{
|
||||
if (*(__int32*)((unsigned __int32)Entity + 572) == 131088)
|
||||
{
|
||||
using Get_Sequence_Name_Type = char*(__thiscall*)(void* Entity, __int32 Sequence);
|
||||
*(__int32*)((unsigned __int32)Entity + 228) = 1;
|
||||
|
||||
if (__builtin_strstr(Get_Sequence_Name_Type((unsigned __int32)Client_Module + 203392)(Entity, *(__int32*)((unsigned __int32)Entity + 2212)), "eath") == nullptr)
|
||||
Valid = *(__int8*)((unsigned __int32)Entity + 324) == 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((*(__int32*)((unsigned __int32)Entity + 572) - 131088 & 255) == 0)
|
||||
{
|
||||
if (__builtin_strstr(Get_Sequence_Name(Entity), "eath") == nullptr)
|
||||
{
|
||||
Valid = 1;
|
||||
Valid = Identifier == 264 ? *(__int8*)((unsigned __int32)Entity + 4493) ^ 1 : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Valid == 1)
|
||||
{
|
||||
if (Identifier * (*(__int32*)((unsigned __int32)Entity + 228) == 3) == 232)
|
||||
if (Valid == 1)
|
||||
{
|
||||
static std::unordered_map<__int32, __int32> Translators =
|
||||
{
|
||||
{ 1, 270 },
|
||||
|
||||
{ 2, 0 },
|
||||
|
||||
{ 3, 263 },
|
||||
|
||||
{ 4, 272 },
|
||||
|
||||
{ 5, 265 },
|
||||
|
||||
{ 6, 99 },
|
||||
|
||||
{ 8, 276 }
|
||||
};
|
||||
|
||||
Identifier = Translators[*(__int32*)((unsigned __int32)Entity + 7312)];
|
||||
}
|
||||
|
||||
return (Identifier - 232) % 43 ? Identifier : 232;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Equipment == 1)
|
||||
{
|
||||
static std::unordered_set<__int32> Equipment_List =
|
||||
{
|
||||
73,
|
||||
|
||||
105,
|
||||
|
||||
109,
|
||||
|
||||
121,
|
||||
|
||||
256,
|
||||
|
||||
260
|
||||
};
|
||||
|
||||
if (Equipment_List.contains(Identifier) == 1)
|
||||
{
|
||||
if (Identifier == 260)
|
||||
if (Identifier * (*(__int32*)((unsigned __int32)Entity + 228) == 3) == 232)
|
||||
{
|
||||
static std::unordered_map<__int32, __int32> Translators =
|
||||
{
|
||||
{ 12, 73 },
|
||||
{ 1, 270 },
|
||||
|
||||
{ 15, 121 },
|
||||
{ 2, 0 },
|
||||
|
||||
{ 23, 105 },
|
||||
{ 3, 263 },
|
||||
|
||||
{ 24, 109 }
|
||||
{ 4, 272 },
|
||||
|
||||
{ 5, 265 },
|
||||
|
||||
{ 6, 99 },
|
||||
|
||||
{ 8, 276 }
|
||||
};
|
||||
|
||||
Identifier = Translators[*(__int32*)((unsigned __int32)Entity + 2392)];
|
||||
Identifier = Translators[*(__int32*)((unsigned __int32)Entity + 7312)];
|
||||
}
|
||||
|
||||
if (Identifier != 0)
|
||||
return (Identifier - 232) % 43 ? Identifier : 232;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Equipment == 1)
|
||||
{
|
||||
if ((*(__int32*)((unsigned __int32)Entity + 224) & 32) == 0)
|
||||
{
|
||||
if (*(void**)((unsigned __int32)Entity + 312) == INVALID_HANDLE_VALUE)
|
||||
static std::unordered_set<__int32> Equipment_List = { 73, 105, 109, 121, 256, 260 };
|
||||
|
||||
if (Equipment_List.contains(Identifier) == 1)
|
||||
{
|
||||
return -Identifier;
|
||||
if (Identifier == 260)
|
||||
{
|
||||
static std::unordered_map<__int32, __int32> Translators =
|
||||
{
|
||||
{ 12, 73 },
|
||||
|
||||
{ 15, 121 },
|
||||
|
||||
{ 23, 105 },
|
||||
|
||||
{ 24, 109 }
|
||||
};
|
||||
|
||||
Identifier = Translators[*(__int32*)((unsigned __int32)Entity + 2392)];
|
||||
}
|
||||
|
||||
if (Identifier != 0)
|
||||
{
|
||||
if (*(void**)((unsigned __int32)Entity + 312) == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
return -Identifier;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -144,12 +114,7 @@ void* Original_Estimate_Velocity_Caller;
|
||||
|
||||
void __thiscall Redirected_Estimate_Velocity(void* Entity, float* Velocity)
|
||||
{
|
||||
static std::unordered_set<__int32> Invalids =
|
||||
{
|
||||
264,
|
||||
|
||||
277
|
||||
};
|
||||
static std::unordered_set<__int32> Invalids = { 264, 277 };
|
||||
|
||||
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);
|
||||
|
||||
Velocity[0] = *(float*)((unsigned __int32)Entity + 136);
|
||||
|
||||
Velocity[1] = *(float*)((unsigned __int32)Entity + 140);
|
||||
|
||||
Velocity[2] = *(float*)((unsigned __int32)Entity + 144);
|
||||
Byte_Manager::Copy_Bytes(1, Velocity, sizeof(float[3]), (float*)((unsigned __int32)Entity + 136));
|
||||
}
|
||||
}
|
@ -11,10 +11,14 @@ struct Interface_Structure
|
||||
|
||||
Interface_Structure Interface_Extra_Commands;
|
||||
|
||||
Interface_Structure Interface_Extra_Commands_Action;
|
||||
|
||||
Interface_Structure Interface_Interpolate_Extra_Commands;
|
||||
|
||||
Interface_Structure Interface_Target_On_Simulation;
|
||||
|
||||
Interface_Structure Interface_Shotgun_Shove;
|
||||
|
||||
Interface_Structure Interface_Riot_Deprioritize;
|
||||
|
||||
Interface_Structure Interface_Penetrate_Teammates;
|
||||
@ -37,11 +41,11 @@ Interface_Structure Interface_Storm_Speed;
|
||||
|
||||
void Implement_Extended_Interface()
|
||||
{
|
||||
auto Create_Console_Interface = [](Interface_Structure* Interface, char* Name, char* Value, void* Handler)
|
||||
auto Create_Interface = [](Interface_Structure* Interface, char* Name, char* Value, void* Handler)
|
||||
{
|
||||
using Create_Console_Variable_Type = void(__thiscall*)(Interface_Structure* Interface, char* Name, char* Value, void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Handler);
|
||||
using Create_Variable_Type = void(__thiscall*)(Interface_Structure* Interface, char* Name, char* Value, void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Handler);
|
||||
|
||||
Create_Console_Variable_Type((unsigned __int32)Engine_Module + 2636656)(Interface, Name, Value, nullptr, nullptr, Handler);
|
||||
Create_Variable_Type((unsigned __int32)Engine_Module + 2636368)(Interface, Name, Value, nullptr, nullptr, Handler);
|
||||
|
||||
*(__int32*)((unsigned __int32)Interface + 20) &= ~10;
|
||||
|
||||
@ -50,29 +54,33 @@ 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_Extra_Commands_Action), (char*)"10", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"0", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Interpolate_Extra_Commands), (char*)"1", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Riot_Deprioritize), (char*)"0", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"0", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Penetrate_Teammates), (char*)"0", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Shotgun_Shove), (char*)"1", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Aim_Intersection), (char*)"1", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Riot_Deprioritize), (char*)"0", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Penetration_Damage), (char*)"20", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Penetrate_Teammates), (char*)"0", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Equipment_Distance), (char*)"2048", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Aim_Intersection), (char*)"1", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Storm_Rotation_Radius), (char*)"24", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Penetration_Damage), (char*)"12", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Storm_Radius), (char*)"8", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Equipment_Distance), (char*)"2048", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Storm_Segments), (char*)"12", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Storm_Rotation_Radius), (char*)"24", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Storm_Iterations), (char*)"16", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Storm_Radius), (char*)"8", nullptr);
|
||||
|
||||
Create_Console_Interface(Pointer_Name(Interface_Storm_Speed), (char*)"512", nullptr);
|
||||
Create_Interface(Pointer_Name(Interface_Storm_Segments), (char*)"12", nullptr);
|
||||
|
||||
Create_Interface(Pointer_Name(Interface_Storm_Iterations), (char*)"16", nullptr);
|
||||
|
||||
Create_Interface(Pointer_Name(Interface_Storm_Speed), (char*)"512", nullptr);
|
||||
}
|
@ -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);
|
||||
|
@ -2,7 +2,7 @@ void* Original_Get_Glow_Color_Caller;
|
||||
|
||||
void __thiscall Redirected_Get_Glow_Color(void* Entity, void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, void* Unknown_Parameter_4)
|
||||
{
|
||||
if (Get_Identifier(Entity, 0, 0) != 232)
|
||||
if (Get_Identifier(Entity, 0, 0) == -1)
|
||||
{
|
||||
(decltype(&Redirected_Get_Glow_Color)(Original_Get_Glow_Color_Caller))(Entity, Unknown_Parameter_1, Unknown_Parameter_2, Unknown_Parameter_3, Unknown_Parameter_4);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -2,7 +2,7 @@ void* Original_Item_Post_Frame_Caller;
|
||||
|
||||
void __thiscall Redirected_Item_Post_Frame(void* Player)
|
||||
{
|
||||
if (*(void**)((unsigned __int32)__builtin_frame_address(0) + 60) == (void*)((unsigned __int32)Client_Module + 423107))
|
||||
if (*(void**)((unsigned __int32)__builtin_frame_address(0) + 88) == (void*)((unsigned __int32)Client_Module + 423107))
|
||||
{
|
||||
(decltype(&Redirected_Item_Post_Frame)(Original_Item_Post_Frame_Caller))(Player);
|
||||
}
|
||||
|
43
Move.hpp
43
Move.hpp
@ -1,32 +1,36 @@
|
||||
void* Original_Move_Caller;
|
||||
|
||||
__int32 Extra_Commands;
|
||||
|
||||
__int32 Chainsaw_Cycles;
|
||||
|
||||
void* Original_Move_Caller;
|
||||
|
||||
void Redirected_Move(float Unknown_Parameter, __int8 Final)
|
||||
{
|
||||
void* Local_Player = *(void**)((unsigned __int32)Client_Module + 7498712);
|
||||
|
||||
using Run_Prediction_Type = void(__cdecl*)();
|
||||
|
||||
if (*(void**)((unsigned __int32)Client_Module + 7498712) != nullptr)
|
||||
if (Local_Player != nullptr)
|
||||
{
|
||||
Redirected_Read_Packets(Final);
|
||||
|
||||
Local_Player = *(void**)((unsigned __int32)Client_Module + 7498712);
|
||||
|
||||
Run_Prediction_Type((unsigned __int32)Engine_Module + 527776)();
|
||||
|
||||
using Update_Animations_Type = void(__cdecl*)();
|
||||
|
||||
Update_Animations_Type((unsigned __int32)Client_Module + 205296)();
|
||||
|
||||
Update_Animation_Time = (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Current_Time;
|
||||
|
||||
Update_Animation_Type = 1;
|
||||
|
||||
Update_Animations_Type((unsigned __int32)Client_Module + 205296)();
|
||||
|
||||
Update_Animation_Type = 0;
|
||||
Redirected_Update_Animations();
|
||||
|
||||
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))->Time;
|
||||
|
||||
Update_Animation_Type = 1;
|
||||
|
||||
Redirected_Update_Animations();
|
||||
|
||||
Update_Animation_Type = 0;
|
||||
}
|
||||
|
||||
Extra_Commands = -1;
|
||||
@ -37,6 +41,17 @@ void Redirected_Move(float Unknown_Parameter, __int8 Final)
|
||||
|
||||
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)
|
||||
{
|
||||
Extra_Commands -= 1;
|
||||
|
206
Paint.hpp
206
Paint.hpp
@ -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)
|
||||
@ -77,13 +77,13 @@ void __thiscall Redirected_Paint(void* Panel)
|
||||
{
|
||||
Target_Structure* Target = &Sorted_Target_List.at(Target_Number);
|
||||
|
||||
float Bounds[4] = { __builtin_inff(), -__builtin_inff(), __builtin_inff(), -__builtin_inff()};
|
||||
float Bounds[4] = { __builtin_inff(), -__builtin_inff(), __builtin_inff(), -__builtin_inff() };
|
||||
|
||||
auto Get_Bounds = [&]() -> __int8
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -95,99 +95,100 @@ void __thiscall Redirected_Paint(void* Panel)
|
||||
{
|
||||
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitbox_Number * 68);
|
||||
|
||||
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
||||
|
||||
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
||||
|
||||
float Hitbox_Vertices[8][3];
|
||||
|
||||
__int32 Axis_Number = 0;
|
||||
|
||||
Initialize_Vertices_Label:
|
||||
if (*(__int32*)Hitbox < sizeof(Bones) / sizeof(Bones[0]))
|
||||
{
|
||||
Hitbox_Vertices[0][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[1][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[2][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[3][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[4][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[5][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[6][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[7][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
if (Axis_Number != 2)
|
||||
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
||||
|
||||
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
||||
|
||||
float Hitbox_Vertices[8][3];
|
||||
|
||||
__int32 Axis_Number = 0;
|
||||
|
||||
Initialize_Vertices_Label:
|
||||
{
|
||||
Hitbox_Vertices[0][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[1][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[2][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[3][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[4][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Minimum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[5][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Minimum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[6][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Minimum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Hitbox_Vertices[7][Axis_Number] = Bones[*(__int32*)Hitbox][Axis_Number][0] * Hitbox_Maximum[0] + Bones[*(__int32*)Hitbox][Axis_Number][1] * Hitbox_Maximum[1] + Bones[*(__int32*)Hitbox][Axis_Number][2] * Hitbox_Maximum[2] + Bones[*(__int32*)Hitbox][Axis_Number][3];
|
||||
|
||||
Axis_Number += 1;
|
||||
|
||||
goto Initialize_Vertices_Label;
|
||||
}
|
||||
}
|
||||
|
||||
__int32 Vertex_Number = 0;
|
||||
|
||||
Transform_Vertices_Label:
|
||||
{
|
||||
using Screen_Transform_Type = __int8(__cdecl*)(float* World, float* Screen);
|
||||
|
||||
float Screen[3];
|
||||
|
||||
if (Screen_Transform_Type((unsigned __int32)Client_Module + 1841648)(Hitbox_Vertices[Vertex_Number], Screen) == 0)
|
||||
{
|
||||
using Get_Screen_Size_Type = __int32(__cdecl*)();
|
||||
|
||||
__int32 Screen_Width = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738576)();
|
||||
|
||||
__int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)();
|
||||
|
||||
Screen[0] = Screen[0] / 2 * Screen_Width + Screen_Width / 2;
|
||||
|
||||
Screen[1] = -Screen[1] / 2 * Screen_Height + Screen_Height / 2;
|
||||
|
||||
Bounds[0] = min(Bounds[0], Screen[0]);
|
||||
|
||||
Bounds[1] = max(Bounds[1], Screen[0]);
|
||||
|
||||
Bounds[2] = min(Bounds[2], Screen[1]);
|
||||
|
||||
Bounds[3] = max(Bounds[3], Screen[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
if (Axis_Number != sizeof(Hitbox_Vertices[0]) / sizeof(float))
|
||||
{
|
||||
goto Initialize_Vertices_Label;
|
||||
}
|
||||
}
|
||||
|
||||
if (Vertex_Number != 7)
|
||||
__int32 Vertex_Number = 0;
|
||||
|
||||
Transform_Vertices_Label:
|
||||
{
|
||||
using Screen_Transform_Type = __int8(__cdecl*)(float* World, float* Screen);
|
||||
|
||||
float Screen[3];
|
||||
|
||||
if (Screen_Transform_Type((unsigned __int32)Client_Module + 1841648)(Hitbox_Vertices[Vertex_Number], Screen) == 0)
|
||||
{
|
||||
using Get_Screen_Size_Type = __int32(__cdecl*)();
|
||||
|
||||
__int32 Screen_Width = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738576)();
|
||||
|
||||
__int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)();
|
||||
|
||||
Screen[0] = Screen[0] / 2.f * Screen_Width + Screen_Width / 2.f;
|
||||
|
||||
Screen[1] = -Screen[1] / 2.f * Screen_Height + Screen_Height / 2.f;
|
||||
|
||||
Bounds[0] = min(Bounds[0], Screen[0]);
|
||||
|
||||
Bounds[1] = max(Bounds[1], Screen[0]);
|
||||
|
||||
Bounds[2] = min(Bounds[2], Screen[1]);
|
||||
|
||||
Bounds[3] = max(Bounds[3], Screen[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
Vertex_Number += 1;
|
||||
|
||||
goto Transform_Vertices_Label;
|
||||
if (Vertex_Number != sizeof(Hitbox_Vertices) / sizeof(Hitbox_Vertices[0]))
|
||||
{
|
||||
goto Transform_Vertices_Label;
|
||||
}
|
||||
}
|
||||
|
||||
Hitbox_Number += 1;
|
||||
|
||||
goto Get_Bounds_Label;
|
||||
}
|
||||
|
||||
Hitbox_Number += 1;
|
||||
|
||||
goto Get_Bounds_Label;
|
||||
}
|
||||
}
|
||||
|
||||
Bounds[0] -= 2;
|
||||
Bounds[0] -= 2.f;
|
||||
|
||||
Bounds[1] += 2;
|
||||
Bounds[1] += 2.f;
|
||||
|
||||
Bounds[2] -= 2;
|
||||
Bounds[2] -= 2.f;
|
||||
|
||||
Bounds[3] += 2;
|
||||
|
||||
return (Bounds[1] != 2) * (Bounds[3] != 2);
|
||||
Bounds[3] += 2.f;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return __builtin_isfinite(Bounds[0]) * (Bounds[1] != 2.f) * (Bounds[3] != 2.f);
|
||||
};
|
||||
|
||||
if (Get_Bounds() == 1)
|
||||
@ -217,7 +218,7 @@ void __thiscall Redirected_Paint(void* Panel)
|
||||
|
||||
{ 121, { { 255, 255, 255 }, (wchar_t*)L"Pain" } },
|
||||
|
||||
{ 232, { { 0, 255, 0 }, (wchar_t*)L"Survivor" } },
|
||||
{ 232, { { 0, 255, 0 } } },
|
||||
|
||||
{ 256, { { 255, 255, 255 }, (wchar_t*)L"Ammo" } },
|
||||
|
||||
@ -238,6 +239,13 @@ void __thiscall Redirected_Paint(void* Panel)
|
||||
|
||||
Paint_Data_Structure* Paint_Data = &Paint_Data_List[Target->Identifier];
|
||||
|
||||
if (Target->Identifier == 232)
|
||||
{
|
||||
static wchar_t* Survivors[8] = { (wchar_t*)L"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[std::clamp(*(__int32*)((unsigned __int32)Target->Self + 7308), 0, 7) + 4 * (*(__int32*)((unsigned __int32)Client_Module + 8144624) == 1)];
|
||||
}
|
||||
|
||||
__int8 Ghost = 0;
|
||||
|
||||
if (*(__int32*)((unsigned __int32)Target->Self + 236) != 0)
|
||||
@ -245,10 +253,23 @@ void __thiscall Redirected_Paint(void* Panel)
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
using Draw_Rect_Type = void(__thiscall**)(void* Surface, __int32 From_X, __int32 From_Y, __int32 To_X, __int32 To_Y);
|
||||
@ -267,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);
|
||||
|
||||
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);
|
||||
}
|
||||
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]);
|
||||
@ -304,7 +312,9 @@ void __thiscall Redirected_Paint(void* Panel)
|
||||
|
||||
Write_Character = Text[0];
|
||||
|
||||
Draw_Text_Type((unsigned __int32)Engine_Module + 2219056)(Font, 0, 0, 0, 0, 0, 0, Text);
|
||||
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, 0, 0, 0, 0, 0, 0, Text);
|
||||
|
||||
Write_Character = 0;
|
||||
|
||||
if (Character != L'~')
|
||||
{
|
||||
@ -358,19 +368,15 @@ void __thiscall Redirected_Paint(void* Panel)
|
||||
|
||||
wchar_t Text[2] = { Paint_Data->Name[Character_Number] };
|
||||
|
||||
Write_Character = Text[0];
|
||||
|
||||
if (Ghost == 0)
|
||||
{
|
||||
Draw_Text_Type((unsigned __int32)Engine_Module + 2219056)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, Paint_Data->Color[0], Paint_Data->Color[1], Paint_Data->Color[2], 255, Text);
|
||||
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, Paint_Data->Color[0], Paint_Data->Color[1], Paint_Data->Color[2], 255, Text);
|
||||
}
|
||||
else
|
||||
{
|
||||
Draw_Text_Type((unsigned __int32)Engine_Module + 2219056)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, 128, 128, 128, 255, Text);
|
||||
Draw_Text_Type((unsigned __int32)Engine_Module + 2218736)(Font, Bounds[1] + 7 + Offset_X - Character_Bounds[0], Bounds[2] + Offset_Y, 128, 128, 128, 255, Text);
|
||||
}
|
||||
|
||||
Write_Character = 0;
|
||||
|
||||
Offset_X += Character_Bounds[1] + 1;
|
||||
|
||||
Character_Number += 1;
|
||||
|
@ -1,16 +1,14 @@
|
||||
void __thiscall Perform_Shove_Trace(void* Stack)
|
||||
{
|
||||
void* Entity = *(void**)((unsigned __int32)Stack - 276);
|
||||
|
||||
if (Entity == Perform_Trace_Target)
|
||||
if (*(void**)((unsigned __int32)Stack + 332) == Perform_Trace_Target)
|
||||
{
|
||||
Perform_Trace_Damage = 1;
|
||||
Perform_Trace_Damage = 1.f;
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
|
@ -1,21 +1,28 @@
|
||||
void* Perform_Trace_Target;
|
||||
|
||||
float* Get_Center(void* Entity)
|
||||
{
|
||||
using Get_Center_Type = float*(__thiscall*)(void* Entity);
|
||||
|
||||
return Get_Center_Type((unsigned __int32)Client_Module + 114400)(Entity);
|
||||
}
|
||||
|
||||
float Perform_Trace_Damage;
|
||||
|
||||
float Vector_Normalize(float* Vector)
|
||||
{
|
||||
using Vector_Normalize_Type = float(__thiscall*)(float* Vector);
|
||||
|
||||
return Vector_Normalize_Type((unsigned __int32)Client_Module + 3536176)(Vector);
|
||||
return Vector_Normalize_Type((unsigned __int32)Client_Module + 3536192)(Vector);
|
||||
};
|
||||
|
||||
void Angle_Vectors(float* Angles, float* Forward, float* Right, float* Up)
|
||||
{
|
||||
using Angle_Vectors_Type = void(__cdecl*)(float* Angles, float* Forward, float* Right, float* Up);
|
||||
|
||||
Angle_Vectors_Type((unsigned __int32)Client_Module + 3539376)(Angles, Forward, Right, Up);
|
||||
Angle_Vectors_Type((unsigned __int32)Client_Module + 3539392)(Angles, Forward, Right, Up);
|
||||
};
|
||||
|
||||
float Perform_Trace_Damage;
|
||||
|
||||
void __thiscall Perform_Trace(void* Stack)
|
||||
{
|
||||
void* Entity = *(void**)((unsigned __int32)Stack + 312);
|
||||
@ -30,6 +37,10 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
|
||||
if (*(__int32*)((unsigned __int32)Entity + 228) == *(__int32*)((unsigned __int32)Local_Player + 228))
|
||||
{
|
||||
Perform_Trace_Target = nullptr;
|
||||
|
||||
Perform_Trace_Damage = 0.f;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -59,15 +70,15 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
|
||||
auto Compute_Damage = [&]() -> void
|
||||
{
|
||||
if (Interface_Penetration_Damage.Integer == 0)
|
||||
if (Interface_Penetration_Damage.Floating_Point == 0.f)
|
||||
{
|
||||
Perform_Trace_Damage = 1;
|
||||
Perform_Trace_Damage = 1.f;
|
||||
}
|
||||
else
|
||||
{
|
||||
float* Start = (float*)((unsigned __int32)Stack + 236);
|
||||
|
||||
float Distance = __builtin_sqrtf(__builtin_powf(End[0] - Start[0], 2) + __builtin_powf(End[1] - Start[1], 2) + __builtin_powf(End[2] - Start[2], 2));
|
||||
float Distance = __builtin_sqrtf(__builtin_powf(End[0] - Start[0], 2.f) + __builtin_powf(End[1] - Start[1], 2.f) + __builtin_powf(End[2] - Start[2], 2.f));
|
||||
|
||||
float Damage;
|
||||
|
||||
@ -95,7 +106,7 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
{
|
||||
using Get_Difficulty_Type = __int32(__cdecl*)();
|
||||
|
||||
float Multipliers[3] = { 0.8f, 0.7f, 0.6f };
|
||||
static float Multipliers[3] = { 0.8f, 0.7f, 0.6f };
|
||||
|
||||
Damage *= Multipliers[Get_Difficulty_Type((unsigned __int32)Client_Module + 2650448)()];
|
||||
};
|
||||
@ -119,34 +130,27 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
{
|
||||
using Get_Bounds_Type = void(__thiscall*)(void* Collision, float* Start, float* Bounds);
|
||||
|
||||
using Get_Center_Type = float* (__thiscall*)(void* Entity);
|
||||
|
||||
void* Local_Player = *(void**)Trace_Information;
|
||||
|
||||
float Bounds[3];
|
||||
|
||||
Get_Bounds_Type((unsigned __int32)Client_Module + 878528)((void*)((unsigned __int32)Entity + 540), Get_Center_Type((unsigned __int32)Client_Module + 114400)(Local_Player), Bounds);
|
||||
Get_Bounds_Type((unsigned __int32)Client_Module + 878528)((void*)((unsigned __int32)Entity + 540), Get_Center(Local_Player), Bounds);
|
||||
|
||||
using Calculate_Distance_Type = float(__thiscall*)(void* Collision, float* Bounds);
|
||||
|
||||
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);
|
||||
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
|
||||
{
|
||||
@ -160,27 +164,15 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
{
|
||||
Apply_Shotgun_Scaling();
|
||||
|
||||
__int8 Is_Sniper_Rifle = (Bullet_Type - 8) > 0;
|
||||
__int8 Is_Sniper_Rifle = Bullet_Type > 8;
|
||||
|
||||
if (Group == 1)
|
||||
{
|
||||
if (Gender == 14)
|
||||
{
|
||||
auto Is_Neutral = [&]() -> __int8
|
||||
{
|
||||
__int32 Sequence_Activity = *(__int32*)((unsigned __int32)Entity + 4688);
|
||||
static std::unordered_set<__int32> Neutrals = { 563, 567, 592, 600, 648 };
|
||||
|
||||
unsigned __int32 Absolute_Sequence_Activity = Sequence_Activity - 563;
|
||||
|
||||
if (Absolute_Sequence_Activity <= 29)
|
||||
{
|
||||
return (536870929 & (1 << (Absolute_Sequence_Activity & 31))) != 0;
|
||||
}
|
||||
|
||||
return (Sequence_Activity == 600) + (Sequence_Activity == 648);
|
||||
};
|
||||
|
||||
if (Is_Neutral() == 1)
|
||||
if (Neutrals.contains(*(__int32*)((unsigned __int32)Entity + 4688)) == 1)
|
||||
{
|
||||
Damage = __builtin_inff();
|
||||
}
|
||||
@ -209,7 +201,7 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
{
|
||||
if (Is_Sniper_Rifle * Realism == 0)
|
||||
{
|
||||
Damage = 450;
|
||||
Damage = 450.f;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -223,7 +215,16 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Identifier != 13)
|
||||
if (Identifier == 277)
|
||||
{
|
||||
if (Group != 1)
|
||||
{
|
||||
Apply_Difficulty_Scaling();
|
||||
}
|
||||
|
||||
Apply_Shotgun_Scaling();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Identifier + Bullet_Type == 284)
|
||||
{
|
||||
@ -232,12 +233,14 @@ 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)
|
||||
__int32 Raw_Identifier = Get_Identifier(Entity, 1, 0);
|
||||
|
||||
if (Raw_Identifier == 99)
|
||||
{
|
||||
if (*(__int32*)((unsigned __int32)Entity + 2212) == 5)
|
||||
{
|
||||
@ -250,7 +253,7 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
{
|
||||
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;
|
||||
|
||||
@ -270,7 +273,15 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -280,13 +291,11 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
}
|
||||
};
|
||||
|
||||
if (Upgrade_Type + Gender == 17)
|
||||
if ((Upgrade_Type == 2) + (Gender == 15) == 2)
|
||||
{
|
||||
float Inflictor_Direction[3];
|
||||
|
||||
using Get_Center_Type = float*(__thiscall*)(void* Entity);
|
||||
|
||||
float* Start = Get_Center_Type((unsigned __int32)Client_Module + 114400)(*(void**)Trace_Information);
|
||||
float* Start = Get_Center(*(void**)Trace_Information);
|
||||
|
||||
Inflictor_Direction[0] = End[0] - Start[0];
|
||||
|
||||
@ -299,7 +308,7 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
using Get_Attachment_Type = void(__thiscall*)(void* Entity, char* Attachment, float* Origin, float* Angle);
|
||||
|
||||
float Origin[3];
|
||||
|
||||
|
||||
float Angle[3];
|
||||
|
||||
Get_Attachment_Type((unsigned __int32)Client_Module + 178656)(Entity, (char*)"chest", Origin, Angle);
|
||||
@ -308,7 +317,7 @@ void __thiscall Perform_Trace(void* Stack)
|
||||
|
||||
Angle_Vectors(Angle, Victim_Direction, nullptr, nullptr);
|
||||
|
||||
if (Inflictor_Direction[0] * Victim_Direction[0] + Inflictor_Direction[1] * Victim_Direction[1] + Inflictor_Direction[2] * Victim_Direction[2] >= 0)
|
||||
if (Inflictor_Direction[0] * Victim_Direction[0] + Inflictor_Direction[1] * Victim_Direction[1] + Inflictor_Direction[2] * Victim_Direction[2] >= 0.f)
|
||||
{
|
||||
Compute_Damage();
|
||||
}
|
||||
@ -322,7 +331,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");
|
||||
|
@ -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* Prediction = (void*)((unsigned __int32)Client_Module + 8072728);
|
||||
|
||||
if (*(__int8*)((unsigned __int32)Prediction + 8) == 1)
|
||||
if (*(__int8*)((unsigned __int32)Client_Module + 8072736) <= *(__int8*)((unsigned __int32)Client_Module + 8072752))
|
||||
{
|
||||
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);
|
||||
}
|
@ -1,22 +1,3 @@
|
||||
struct Prediction_Field_Structure
|
||||
{
|
||||
__int32 Type;
|
||||
|
||||
char* Name;
|
||||
|
||||
__int32 Offset;
|
||||
|
||||
unsigned __int16 Size;
|
||||
|
||||
__int8 Additionals_Bytes_1[18];
|
||||
|
||||
__int32 Bytes;
|
||||
|
||||
__int8 Additionals_Bytes_2[12];
|
||||
|
||||
__int32 Flat_Offset[2];
|
||||
};
|
||||
|
||||
struct Prediction_Copy_Structure
|
||||
{
|
||||
__int8 Additionals_Bytes_1[8];
|
||||
@ -37,16 +18,36 @@ struct Prediction_Copy_Structure
|
||||
|
||||
Prediction_Copy_Structure Predicton_Copy;
|
||||
|
||||
struct Prediction_Field_Structure
|
||||
{
|
||||
__int32 Type;
|
||||
|
||||
char* Name;
|
||||
|
||||
__int32 Offset;
|
||||
|
||||
unsigned __int16 Size;
|
||||
|
||||
__int8 Additionals_Bytes_1[18];
|
||||
|
||||
__int32 Bytes;
|
||||
|
||||
__int8 Additionals_Bytes_2[12];
|
||||
|
||||
__int32 Flat_Offset[2];
|
||||
|
||||
__int8 Additionals_Bytes_3[2];
|
||||
};
|
||||
|
||||
__int8 Consistent_Time;
|
||||
|
||||
void Predicton_Copy_Compare(void* Unknown_Parameter_1, void* Unknown_Parameter_2, void* Unknown_Parameter_3, void* Unknown_Parameter_4, void* Unknown_Parameter_5, void* Unknown_Parameter_6, __int8 Within_Tolerance, void* Unknown_Parameter_7)
|
||||
{
|
||||
Prediction_Field_Structure* Field = *(Prediction_Field_Structure**)((unsigned __int32)__builtin_frame_address(0) + 60);
|
||||
|
||||
if (Field->Flat_Offset[0] == 5324)
|
||||
if (Field->Flat_Offset[0] * Consistent_Time == 5324)
|
||||
{
|
||||
if (*(__int32*)((unsigned __int32)Predicton_Copy.Destination + 20) != 0)
|
||||
{
|
||||
goto Copy_Label;
|
||||
}
|
||||
goto Copy_Label;
|
||||
}
|
||||
|
||||
if (Within_Tolerance == 1)
|
||||
@ -55,7 +56,7 @@ void Predicton_Copy_Compare(void* Unknown_Parameter_1, void* Unknown_Parameter_2
|
||||
{
|
||||
Copy_Label:
|
||||
{
|
||||
Byte_Manager::Copy_Bytes(0, (void*)((unsigned __int32)Predicton_Copy.Destination + Field->Flat_Offset[0]), Field->Bytes, (void*)((unsigned __int32)Predicton_Copy.Source + Field->Flat_Offset[1]));
|
||||
Byte_Manager::Copy_Bytes(1, (void*)((unsigned __int32)Predicton_Copy.Destination + Field->Flat_Offset[0]), Field->Bytes, (void*)((unsigned __int32)Predicton_Copy.Source + Field->Flat_Offset[1]));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -71,7 +72,7 @@ struct Prediction_Descriptor_Structure
|
||||
|
||||
Prediction_Descriptor_Structure* Parent;
|
||||
|
||||
__int8 Additional_Bytes_2[6];
|
||||
__int8 Additional_Bytes_2[8];
|
||||
};
|
||||
|
||||
void* Original_Post_Network_Data_Received_Caller;
|
||||
@ -80,11 +81,11 @@ void __thiscall Redirected_Post_Network_Data_Received(void* Unknown_Parameter, _
|
||||
{
|
||||
void* Local_Player = *(void**)((unsigned __int32)Client_Module + 7498712);
|
||||
|
||||
void* Result = *(void**)((unsigned __int32)Local_Player + 900 + (150 - ((Commands_Acknowledged - 1) % 150 + 1) * 150 % -~150) * 4);
|
||||
void* Prediction_Frame = *(void**)((unsigned __int32)Local_Player + 900 + (150 - ((Commands_Acknowledged - 1) % 150 + 1) * 150 % -~150) * 4);
|
||||
|
||||
if (Result != nullptr)
|
||||
if (Prediction_Frame != nullptr)
|
||||
{
|
||||
Predicton_Copy.Construct(Local_Player, Result, (void*)Predicton_Copy_Compare);
|
||||
Predicton_Copy.Construct(Local_Player, Prediction_Frame, (void*)Predicton_Copy_Compare);
|
||||
|
||||
using Transfer_Data_Type = __int32(__thiscall*)(Prediction_Copy_Structure* Prediction_Copy, void* Unknown_Parameter, __int32 Entity_Number, Prediction_Descriptor_Structure* Descriptor);
|
||||
|
||||
|
@ -2,31 +2,26 @@ void* Original_Process_Movement_Caller;
|
||||
|
||||
void __thiscall Redirected_Process_Movement(void* Unknown_Parameter, void* Player, void* Move_Data)
|
||||
{
|
||||
__int32 Stunned = *(__int32*)((unsigned __int32)Player + 20);
|
||||
|
||||
if (Stunned == 2)
|
||||
if (*(__int32*)((unsigned __int32)Player + 5324) < 0)
|
||||
{
|
||||
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);
|
||||
|
||||
Global_Variables->Current_Time *= -1;
|
||||
|
||||
*(__int32*)((unsigned __int32)Move_Data + 36) &= ~1564;
|
||||
|
||||
if (*(__int8*)((unsigned __int32)Player + 4636) == 1)
|
||||
{
|
||||
*(__int32*)((unsigned __int32)Move_Data + 36) |= 4;
|
||||
}
|
||||
*(__int32*)((unsigned __int32)Move_Data + 36) |= 4 * *(__int8*)((unsigned __int32)Player + 4636);
|
||||
|
||||
*(float*)((unsigned __int32)Move_Data + 44) = 0;
|
||||
|
||||
*(float*)((unsigned __int32)Move_Data + 48) = 0;
|
||||
|
||||
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);
|
||||
|
||||
Global_Variables->Current_Time *= -1;
|
||||
*(double*)((unsigned __int32)Move_Data + 44) = 0.;
|
||||
}
|
||||
else
|
||||
|
||||
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);
|
||||
|
||||
if (Get_Identifier(Player, 0, 0) == 272)
|
||||
{
|
||||
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);
|
||||
using Get_Ability_Type = void*(__thiscall*)(void* Entity);
|
||||
|
||||
void* Ability = Get_Ability_Type((unsigned __int32)Client_Module + 2438560)(Player);
|
||||
|
||||
if (Ability != nullptr)
|
||||
{
|
||||
*(float*)((unsigned __int32)Ability + 1636) = 0.f;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
to achieve least interpolation time: `cl_updaterate -1;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`
|
||||
```
|
||||
code: https://github.com/qwertyuiop3/Storm
|
||||
|
@ -9,5 +9,5 @@ void Redirected_Read_Packets(__int8 Final)
|
||||
(decltype(&Redirected_Read_Packets)(Original_Read_Packets_Caller))(Final);
|
||||
}
|
||||
|
||||
Parsed_Packets = __builtin_return_address(0) != (void*)((unsigned __int32)Engine_Module + 1631551);
|
||||
Parsed_Packets = __builtin_return_address(0) != (void*)((unsigned __int32)Engine_Module + 1631183);
|
||||
}
|
@ -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;
|
||||
}
|
||||
};
|
@ -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;
|
||||
}
|
@ -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"
|
@ -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
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -8,9 +8,7 @@ struct Command_Structure
|
||||
|
||||
float Angles[3];
|
||||
|
||||
float Move[2];
|
||||
|
||||
__int32 Frame_Number;
|
||||
float Move[3];
|
||||
|
||||
__int32 Buttons;
|
||||
|
||||
@ -22,17 +20,28 @@ struct Command_Structure
|
||||
struct Extended_Command_Structure
|
||||
{
|
||||
__int32 Extra_Commands;
|
||||
|
||||
__int32 Sequence_Shift;
|
||||
};
|
||||
|
||||
Extended_Command_Structure Extended_Commands[150];
|
||||
|
||||
void* Original_Run_Command_Caller;
|
||||
|
||||
void __thiscall Redirected_Run_Command(void* Prediction, void* Player, Command_Structure* Command, void* Unknown_Parameter)
|
||||
void __thiscall Redirected_Run_Command(void* Prediction, void* Player, Command_Structure* Command, void* Move_Helper)
|
||||
{
|
||||
Extended_Command_Structure* Extended_Command = &Extended_Commands[Command->Frame_Number];
|
||||
Extended_Command_Structure* Extended_Command = &Extended_Commands[*(__int32*)((unsigned __int32)Player + 5620) % 150];
|
||||
|
||||
*(__int32*)((unsigned __int32)Player + 5324) -= Extended_Command->Extra_Commands;
|
||||
*(__int32*)((unsigned __int32)Player + 5324) -= Extended_Command->Extra_Commands + Extended_Command->Sequence_Shift;
|
||||
|
||||
(decltype(&Redirected_Run_Command)(Original_Run_Command_Caller))(Prediction, Player, Command, Unknown_Parameter);
|
||||
(decltype(&Redirected_Run_Command)(Original_Run_Command_Caller))(Prediction, Player, Command, Move_Helper);
|
||||
|
||||
if (__builtin_return_address(0) == (void*)((unsigned __int32)Client_Module + 423107))
|
||||
{
|
||||
*(__int32*)((unsigned __int32)Player + 5324) += Extended_Command->Sequence_Shift;
|
||||
|
||||
Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744);
|
||||
|
||||
Global_Variables->Time = (*(__int32*)((unsigned __int32)Player + 5324) - 1) * Global_Variables->Interval_Per_Tick;
|
||||
}
|
||||
}
|
@ -6,9 +6,9 @@ void Redirected_Send_Move()
|
||||
|
||||
void Construct(__int8* Data, unsigned __int32 Size)
|
||||
{
|
||||
Byte_Manager::Set_Bytes(0, Message, sizeof(Message), 0);
|
||||
Byte_Manager::Set_Bytes(1, Message, sizeof(Message), 0);
|
||||
|
||||
*(void**)Message = (void*)((unsigned __int32)Engine_Module + 3501348);
|
||||
*(void**)Message = (void*)((unsigned __int32)Engine_Module + 3501364);
|
||||
|
||||
*(void**)((unsigned __int32)Message + 132) = Data;
|
||||
|
||||
@ -62,9 +62,12 @@ void Redirected_Send_Move()
|
||||
|
||||
void* Network_Channel = *(void**)(*(unsigned __int32*)((unsigned __int32)Engine_Module + 4352236) + 24);
|
||||
|
||||
*(__int32*)((unsigned __int32)Network_Channel + 28) -= Extra_Commands_Queue;
|
||||
if (*(__int32*)((unsigned __int32)Network_Channel + 16) != -1)
|
||||
{
|
||||
*(__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
11
Set_Move_Type.hpp
Normal 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;
|
||||
}
|
@ -4,23 +4,9 @@ void __thiscall Redirected_Spawn_Grenade(void* Entity)
|
||||
{
|
||||
using Set_Size_Type = void(__thiscall*)(void* Entity, float* Minimum, float* Maximum);
|
||||
|
||||
float Minimum[3] =
|
||||
{
|
||||
-16,
|
||||
|
||||
-16,
|
||||
|
||||
-16
|
||||
};
|
||||
float Minimum[3] = { -16.f, -16.f, -16.f };
|
||||
|
||||
float Maximum[3] =
|
||||
{
|
||||
16,
|
||||
|
||||
16,
|
||||
|
||||
16
|
||||
};
|
||||
float Maximum[3] = { 16.f, 16.f, 16.f };
|
||||
|
||||
Set_Size_Type((unsigned __int32)Client_Module + 281664)(Entity, Minimum, Maximum);
|
||||
|
||||
|
224
Storm.vcxproj
224
Storm.vcxproj
@ -1,112 +1,114 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{9e56cc0a-5a40-4957-8031-ab3cc4108170}</ProjectGuid>
|
||||
<RootNamespace>Storm</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>ClangCL</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings" />
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
<TargetExt>.cpl</TargetExt>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Vcpkg">
|
||||
<VcpkgEnabled>false</VcpkgEnabled>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<AdditionalOptions>/Zc:threadSafeInit- /clang:-fno-unwind-tables -Wno-multichar -Wno-microsoft-goto %(AdditionalOptions)</AdditionalOptions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
<StackReserveSize>
|
||||
</StackReserveSize>
|
||||
<StackCommitSize>
|
||||
</StackCommitSize>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>false</DataExecutionPrevention>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Entry_Point.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Calculate_View.hpp" />
|
||||
<ClInclude Include="Process_Movement.hpp" />
|
||||
<ClInclude Include="Update.hpp" />
|
||||
<ClInclude Include="Send_Move.hpp" />
|
||||
<ClInclude Include="Spawn_Grenade.hpp" />
|
||||
<ClInclude Include="Run_Command.hpp" />
|
||||
<ClInclude Include="Draw_Crosshair.hpp" />
|
||||
<ClInclude Include="Draw_Effect.hpp" />
|
||||
<ClInclude Include="Extended_Interface.hpp" />
|
||||
<ClInclude Include="Estimate_Velocity.hpp" />
|
||||
<ClInclude Include="Get_Glow_Color.hpp" />
|
||||
<ClInclude Include="Interpolate.hpp" />
|
||||
<ClInclude Include="Finish_Move.hpp" />
|
||||
<ClInclude Include="Move.hpp" />
|
||||
<ClInclude Include="Copy_Command.hpp" />
|
||||
<ClInclude Include="Paint.hpp" />
|
||||
<ClInclude Include="Perform_Trace.hpp" />
|
||||
<ClInclude Include="Post_Network_Data_Received.hpp" />
|
||||
<ClInclude Include="Item_Post_Frame.hpp" />
|
||||
<ClInclude Include="Read_Packets.hpp" />
|
||||
<ClInclude Include="Play_Footstep_Sound.hpp" />
|
||||
<ClInclude Include="Perform_Shove_Trace.hpp" />
|
||||
<ClInclude Include="Update_Animations.hpp" />
|
||||
<ClInclude Include="Write_Texture.hpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{9e56cc0a-5a40-4957-8031-ab3cc4108170}</ProjectGuid>
|
||||
<RootNamespace>Storm</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>ClangCL</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings" />
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
<TargetExt>.cpl</TargetExt>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Vcpkg">
|
||||
<VcpkgEnabled>false</VcpkgEnabled>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>false</SDLCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<AdditionalOptions>/Zc:threadSafeInit- /clang:-fno-unwind-tables -Wno-microsoft-goto %(AdditionalOptions)</AdditionalOptions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ControlFlowGuard>false</ControlFlowGuard>
|
||||
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
|
||||
<ForcedIncludeFiles>__msvc_all_public_headers.hpp</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
<StackReserveSize>
|
||||
</StackReserveSize>
|
||||
<StackCommitSize>
|
||||
</StackCommitSize>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>false</DataExecutionPrevention>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Entry_Point.cpp" />
|
||||
</ItemGroup>
|
||||
<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" />
|
||||
<ClInclude Include="Run_Command.hpp" />
|
||||
<ClInclude Include="Draw_Crosshair.hpp" />
|
||||
<ClInclude Include="Draw_Effect.hpp" />
|
||||
<ClInclude Include="Extended_Interface.hpp" />
|
||||
<ClInclude Include="Estimate_Velocity.hpp" />
|
||||
<ClInclude Include="Get_Glow_Color.hpp" />
|
||||
<ClInclude Include="Interpolate.hpp" />
|
||||
<ClInclude Include="Finish_Move.hpp" />
|
||||
<ClInclude Include="Move.hpp" />
|
||||
<ClInclude Include="Copy_Command.hpp" />
|
||||
<ClInclude Include="Paint.hpp" />
|
||||
<ClInclude Include="Perform_Trace.hpp" />
|
||||
<ClInclude Include="Post_Network_Data_Received.hpp" />
|
||||
<ClInclude Include="Item_Post_Frame.hpp" />
|
||||
<ClInclude Include="Read_Packets.hpp" />
|
||||
<ClInclude Include="Play_Footstep_Sound.hpp" />
|
||||
<ClInclude Include="Perform_Shove_Trace.hpp" />
|
||||
<ClInclude Include="Update_Animations.hpp" />
|
||||
<ClInclude Include="Write_Texture.hpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets" />
|
||||
</Project>
|
@ -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>
|
@ -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)
|
||||
{
|
||||
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);
|
||||
}
|
@ -1,45 +1,58 @@
|
||||
struct Global_Variables_Structure
|
||||
{
|
||||
__int8 Additional_Bytes_1[12];
|
||||
|
||||
float 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);
|
||||
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;
|
||||
|
||||
Global_Variables->Frame_Time = Global_Variables->Interval_Per_Tick * Update_Animation_Type;
|
||||
Global_Variables->Frame_Time = Global_Variables->Interval_Per_Tick * Update_Animation_Type;
|
||||
|
||||
__int32 Entity_Number = 0;
|
||||
__int32 Entity_Number = 0;
|
||||
|
||||
Traverse_Animation_List_Label:
|
||||
{
|
||||
if (Entity_Number != *(__int32*)((unsigned __int32)Client_Module + 7479624))
|
||||
{
|
||||
void* Animation_List = *(void**)((unsigned __int32)Client_Module + 7479612);
|
||||
Traverse_Animation_List_Label:
|
||||
{
|
||||
if (Entity_Number != *(__int32*)((unsigned __int32)Client_Module + 7479624))
|
||||
{
|
||||
void* Animation_List = *(void**)((unsigned __int32)Client_Module + 7479612);
|
||||
|
||||
if ((*(__int8*)((unsigned __int32)Animation_List + 8 * Entity_Number + 4) & 1) != 0)
|
||||
{
|
||||
using Update_Animation_Type = void(__thiscall**)(void* Entity);
|
||||
if ((*(__int8*)((unsigned __int32)Animation_List + 8 * Entity_Number + 4) & 1) != 0)
|
||||
{
|
||||
using Update_Animation_Type = void(__thiscall**)(void* Entity);
|
||||
|
||||
void* Entity = *(void**)((unsigned __int32)Animation_List + 8 * Entity_Number);
|
||||
void* Entity = *(void**)((unsigned __int32)Animation_List + 8 * Entity_Number);
|
||||
|
||||
*(float*)((unsigned __int32)Entity + 328) = Update_Animation_Time - Global_Variables->Frame_Time;
|
||||
*(float*)((unsigned __int32)Entity + 328) = Update_Animation_Time - Global_Variables->Frame_Time;
|
||||
|
||||
(*Update_Animation_Type(*(unsigned __int32*)Entity + 808))(Entity);
|
||||
}
|
||||
(*Update_Animation_Type(*(unsigned __int32*)Entity + 808))(Entity);
|
||||
}
|
||||
|
||||
Entity_Number += 1;
|
||||
Entity_Number += 1;
|
||||
|
||||
goto Traverse_Animation_List_Label;
|
||||
}
|
||||
}
|
||||
goto Traverse_Animation_List_Label;
|
||||
}
|
||||
}
|
||||
|
||||
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_Y = Height;
|
||||
|
||||
unsigned __int32 Character_Width = 0;
|
||||
|
||||
unsigned __int32 Offset_Y = Height;
|
||||
|
||||
unsigned __int32 Character_Height = 0;
|
||||
|
||||
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)
|
||||
{
|
||||
Offset_X = min(Offset_X, X);
|
||||
Offset_X = min(X, Offset_X);
|
||||
|
||||
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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user