From 416be104f518a32b0b386128c00f4b12f318d839 Mon Sep 17 00:00:00 2001 From: explorer Date: Wed, 1 Oct 2025 23:25:03 +0300 Subject: [PATCH] improve `target_on_simulation` logic timeout logic (defaults to ~0.5s) --- Copy_Command.hpp | 52 ++++++++++++++++++++++++++++++++++-------- Draw_Crosshair.hpp | 10 ++++---- Extended_Interface.hpp | 4 ++-- Move.hpp | 8 +++---- Paint.hpp | 8 +++---- Perform_Trace.hpp | 10 ++++---- README.md | 3 ++- Storm.vcxproj | 2 +- Update_Animations.hpp | 12 ++-------- Write_Texture.hpp | 20 ++++++++-------- 10 files changed, 77 insertions(+), 52 deletions(-) diff --git a/Copy_Command.hpp b/Copy_Command.hpp index 928108e..bde67d0 100644 --- a/Copy_Command.hpp +++ b/Copy_Command.hpp @@ -183,11 +183,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu Vector_Normalize(Move_Right); - float Divider = Move_Forward[0] * Move_Right[1] - Move_Right[0] * Move_Forward[1]; + float Divisor = Move_Forward[0] * Move_Right[1] - Move_Right[0] * Move_Forward[1]; - Command->Move[0] = (Desired_Move[0] * Move_Right[1] - Move_Right[0] * Desired_Move[1]) / Divider; + Command->Move[0] = (Desired_Move[0] * Move_Right[1] - Move_Right[0] * Desired_Move[1]) / Divisor; - Command->Move[1] = (Move_Forward[0] * Desired_Move[1] - Desired_Move[0] * Move_Forward[1]) / Divider; + Command->Move[1] = (Move_Forward[0] * Desired_Move[1] - Desired_Move[0] * Move_Forward[1]) / Divisor; }; Correct_Movement(); @@ -390,7 +390,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu if (Weapon_Identifier == 39) { - Can_Attack = (min(Chainsaw_Cycles * 0.46153846f * Global_Variables->Interval_Per_Tick, 1.f) > 0.95f) * (In_Shove ^ 1); + Can_Attack = (min(Chainsaw_Cycle * 0.46153846f * Global_Variables->Interval_Per_Tick, 1.f) > 0.95f) * (In_Shove ^ 1); } else { @@ -410,6 +410,15 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu Sorted_Target_List.clear(); + struct Target_Time_Structure + { + float Server[2]; + + __int32 Client[2]; + }; + + static std::unordered_map<__int32, Target_Time_Structure> Target_Times; + auto Get_Target_Time = [&](Target_Structure* Target) -> float { if (Interface_Target_On_Simulation.Integer == 0) @@ -453,7 +462,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu (__int32)(Time / Global_Variables->Interval_Per_Tick + 0.5f) }; - if (*(float*)((unsigned __int32)Entity + 16) != Get_Target_Time(&Target)) + if (Target_Times[Entity_Number].Server[0] * (Target_Times[Entity_Number].Client[0] + (__int32)(0.5f / Global_Variables->Interval_Per_Tick + 0.5f) > *(__int32*)((unsigned __int32)Engine_Module + 6905340)) != Get_Target_Time(&Target)) { if (Identifier == 277) { @@ -500,6 +509,31 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu Get_Eye_Position_Type((unsigned __int32)Client_Module + 108512)(Local_Player, Eye_Position); + auto Set_Target_Time = [&](Target_Structure* Target, __int8 Restore) -> void + { + Target_Time_Structure* Time = &Target_Times[*(__int32*)((unsigned __int32)Target->Self + 88)]; + + if (Restore == 0) + { + Time->Server[1] = Time->Server[0]; + + Time->Client[1] = Time->Client[0]; + + if (Time->Server[0] != Get_Target_Time(Target)) + { + Time->Server[0] = Get_Target_Time(Target); + + Time->Client[0] = *(__int32*)((unsigned __int32)Engine_Module + 6905340); + } + } + else + { + Time->Server[0] = Time->Server[1]; + + Time->Client[0] = Time->Client[1]; + } + }; + Target_Structure* Shove_Target = nullptr; if (Cancelable_Shove + In_Shove > 1) @@ -626,7 +660,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu Cancelable_Shove = (Gender * Interface_Riot_Deprioritize.Integer * (Forced ^ 1)) == 15; - *(float*)((unsigned __int32)Target->Self + 16) = Get_Target_Time(Target); + Set_Target_Time(Target, 0); goto Shove_Found_Target_Label; } @@ -843,7 +877,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu Command->Buttons |= 1; - *(float*)((unsigned __int32)Target->Self + 16) = Get_Target_Time(Target); + Set_Target_Time(Target, 0); goto Aim_Found_Target_Label; } @@ -866,11 +900,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu { if (Shove_Target != nullptr) { - *(float*)((unsigned __int32)Shove_Target->Self + 16) = 0.f; + Set_Target_Time(Shove_Target, 1); if (Aim_Target != nullptr) { - *(float*)((unsigned __int32)Aim_Target->Self + 16) = Get_Target_Time(Aim_Target); + Set_Target_Time(Aim_Target, 0); } } diff --git a/Draw_Crosshair.hpp b/Draw_Crosshair.hpp index f6695d2..cf83b1d 100755 --- a/Draw_Crosshair.hpp +++ b/Draw_Crosshair.hpp @@ -2,7 +2,7 @@ void Redirected_Draw_Crosshair() { static float Rotation_Angle; - auto Draw_Storm = [&](__int32 X, __int32 Y, __int32 Additional_Rotation_Angle) + auto Storm = [&](__int32 X, __int32 Additional_Angle, __int32 Y) { using Set_Color_Type = void(__thiscall**)(void* Surface, unsigned __int8 Red, unsigned __int8 Green, unsigned __int8 Blue, unsigned __int8 Alpha); @@ -12,9 +12,9 @@ void Redirected_Draw_Crosshair() using Draw_Circle_Type = void(__thiscall**)(void* Surface, __int32 X, __int32 Y, __int32 Radius, __int32 Segments); - X += Interface_Storm_Rotation_Radius.Integer * __builtin_cosf(__builtin_remainderf(Rotation_Angle + Additional_Rotation_Angle, 360.f) * 3.1415927f / 180.f); + X += Interface_Storm_Rotation_Radius.Integer * __builtin_cosf((Rotation_Angle + Additional_Angle) * 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); + Y += Interface_Storm_Rotation_Radius.Integer * __builtin_sinf((Rotation_Angle + Additional_Angle) * 3.1415927f / 180.f); (*Draw_Circle_Type(*(unsigned __int32*)Surface + 384))(Surface, X - 1, Y, Interface_Storm_Radius.Integer, Interface_Storm_Segments.Integer); @@ -55,7 +55,7 @@ void Redirected_Draw_Crosshair() { if (Storm_Number < Interface_Storm_Iterations.Integer) { - Draw_Storm(Screen_Width, Screen_Height, Storm_Number * 360 / Interface_Storm_Iterations.Integer); + Storm(Screen_Width, Storm_Number * 360 / Interface_Storm_Iterations.Integer, Screen_Height); Storm_Number += 1; @@ -63,7 +63,7 @@ void Redirected_Draw_Crosshair() } } - Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360.f); + Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Floating_Point, 360.f); using Get_Display_Type = void*(__cdecl*)(); diff --git a/Extended_Interface.hpp b/Extended_Interface.hpp index 773397b..dffeaa1 100755 --- a/Extended_Interface.hpp +++ b/Extended_Interface.hpp @@ -60,7 +60,7 @@ void Implement_Extended_Interface() Create_Interface(Pointer_Name(Interface_Interpolate_Extra_Commands), (char*)"1", nullptr); - Create_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"0", nullptr); + Create_Interface(Pointer_Name(Interface_Target_On_Simulation), (char*)"1", nullptr); Create_Interface(Pointer_Name(Interface_Shotgun_Shove), (char*)"1", nullptr); @@ -82,5 +82,5 @@ void Implement_Extended_Interface() Create_Interface(Pointer_Name(Interface_Storm_Iterations), (char*)"16", nullptr); - Create_Interface(Pointer_Name(Interface_Storm_Speed), (char*)"512", nullptr); + Create_Interface(Pointer_Name(Interface_Storm_Speed), (char*)"540", nullptr); } \ No newline at end of file diff --git a/Move.hpp b/Move.hpp index afd74db..d0c9a25 100644 --- a/Move.hpp +++ b/Move.hpp @@ -1,6 +1,6 @@ __int32 Extra_Commands; -__int32 Chainsaw_Cycles; +__int32 Chainsaw_Cycle; void* Original_Move_Caller; @@ -24,8 +24,6 @@ void Redirected_Move(float Unknown_Parameter, __int8 Final) 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(); @@ -43,11 +41,11 @@ void Redirected_Move(float Unknown_Parameter, __int8 Final) if (Local_Player != nullptr) { - Chainsaw_Cycles += 1 + (Chainsaw_Cycles == 0); + Chainsaw_Cycle += 1 + (Chainsaw_Cycle == 0); static float Deploy_Time; - Chainsaw_Cycles *= *(float*)((unsigned __int32)Local_Player + 3872) == Deploy_Time; + Chainsaw_Cycle *= *(float*)((unsigned __int32)Local_Player + 3872) == Deploy_Time; Deploy_Time = *(float*)((unsigned __int32)Local_Player + 3872); } diff --git a/Paint.hpp b/Paint.hpp index 7caeaac..95528bf 100755 --- a/Paint.hpp +++ b/Paint.hpp @@ -331,9 +331,9 @@ void __thiscall Redirected_Paint(void* Panel) size_t Character_Number = 0; - unsigned __int32 Width = 0; + __int32 Width = 0; - unsigned __int32 Height = 0; + __int32 Height = 0; __int32 Offset_Y = 0; @@ -341,13 +341,13 @@ void __thiscall Redirected_Paint(void* Panel) Calculate_Text_Bounds_Label: { - unsigned __int32* Character_Bounds = Characters_Bounds[Paint_Data->Name[Character_Number]]; + __int32* Character_Bounds = Characters_Bounds[Paint_Data->Name[Character_Number]]; Width += Character_Bounds[1] + 1; Height = max(Height, Character_Bounds[3]); - Offset_Y = max(Offset_Y, 3 - (__int32)Character_Bounds[2]); + Offset_Y = max(Offset_Y, 3 - Character_Bounds[2]); Character_Number += 1; diff --git a/Perform_Trace.hpp b/Perform_Trace.hpp index b9fbdf9..779b88a 100755 --- a/Perform_Trace.hpp +++ b/Perform_Trace.hpp @@ -156,11 +156,7 @@ void __thiscall Perform_Trace(void* Stack) { if (Identifier == 264) { - if ((Upgrade_Type == 1) + (Bullet_Type == 6)) - { - Damage = __builtin_inff(); - } - else + if ((Upgrade_Type == 1) + (Bullet_Type == 6) == 0) { Apply_Shotgun_Scaling(); @@ -212,6 +208,10 @@ void __thiscall Perform_Trace(void* Stack) } } } + else + { + Damage = __builtin_inff(); + } } else { diff --git a/README.md b/README.md index 79fb924..8bf384f 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@ d3x (for telling me that i don't have to bruteforce prediction frame) polak (for strafe deltas) ucuser0 (for his post regarding backup commands) kamay (for crossproducts of movement) -deniz (for being friend) +deniz (for hosting video) +dr_p3pp3r (for his rediscovery of sequence manipulation) songs: david bowie - art decade diff --git a/Storm.vcxproj b/Storm.vcxproj index a2b186a..8f71e72 100644 --- a/Storm.vcxproj +++ b/Storm.vcxproj @@ -54,7 +54,7 @@ false StreamingSIMDExtensions2 Fast - /Zc:threadSafeInit- /clang:-fno-unwind-tables -Wno-microsoft-goto %(AdditionalOptions) + /Zc:threadSafeInit- /clang:-fno-unwind-tables -Wno-microsoft-goto -Wno-nan-infinity-disabled %(AdditionalOptions) true false false diff --git a/Update_Animations.hpp b/Update_Animations.hpp index afa70d5..61327db 100644 --- a/Update_Animations.hpp +++ b/Update_Animations.hpp @@ -11,18 +11,12 @@ struct Global_Variables_Structure float Interval_Per_Tick; }; -float Update_Animation_Time; - __int8 Update_Animation_Type; void Redirected_Update_Animations() { Global_Variables_Structure* Global_Variables = *(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744); - float Previous_Time = Global_Variables->Time; - - Global_Variables->Time = Update_Animation_Time; - float Previous_Frame_Time = Global_Variables->Frame_Time; Global_Variables->Frame_Time = Global_Variables->Interval_Per_Tick * Update_Animation_Type; @@ -35,13 +29,13 @@ void Redirected_Update_Animations() { void* Animation_List = *(void**)((unsigned __int32)Client_Module + 7479612); - if ((*(__int8*)((unsigned __int32)Animation_List + 8 * Entity_Number + 4) & 1) != 0) + if ((*(__int8*)((unsigned __int32)Animation_List + 8 * Entity_Number + 4) & 1) == 1) { using Update_Animation_Type = void(__thiscall**)(void* Entity); 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) = Global_Variables->Time - Global_Variables->Frame_Time; (*Update_Animation_Type(*(unsigned __int32*)Entity + 808))(Entity); } @@ -53,6 +47,4 @@ void Redirected_Update_Animations() } Global_Variables->Frame_Time = Previous_Frame_Time; - - Global_Variables->Time = Previous_Time; } \ No newline at end of file diff --git a/Write_Texture.hpp b/Write_Texture.hpp index 167ed60..77fbda1 100755 --- a/Write_Texture.hpp +++ b/Write_Texture.hpp @@ -2,31 +2,31 @@ void* Original_Write_Texture_Caller; wchar_t Write_Character; -std::unordered_map Characters_Bounds; +std::unordered_map Characters_Bounds; -void __thiscall Redirected_Write_Texture(void* Unknown_Parameter_1, void* Unknown_Parameter_2, unsigned __int32 Width, unsigned __int32 Height, void* Texture) +void __thiscall Redirected_Write_Texture(void* Unknown_Parameter_1, void* Unknown_Parameter_2, __int32 Width, __int32 Height, void* Texture) { (decltype(&Redirected_Write_Texture)(Original_Write_Texture_Caller))(Unknown_Parameter_1, Unknown_Parameter_2, Width, Height, Texture); if (Write_Character != 0) { - unsigned __int32 X = 0; + __int32 X = 0; - unsigned __int32 Offset_X = Width; + __int32 Offset_X = Width; - unsigned __int32 Character_Width = 0; + __int32 Character_Width = 0; - unsigned __int32 Offset_Y = Height; + __int32 Offset_Y = Height; - unsigned __int32 Character_Height = 0; + __int32 Character_Height = 0; Traverse_Horizontal_Label: { - unsigned __int32 Y = 0; + __int32 Y = 0; Traverse_Vertical_Label: { - if (*(unsigned __int32*)((unsigned __int32)Texture + X * 4 + Y * 4 * Width) != 0) + if (*(__int32*)((unsigned __int32)Texture + X * 4 + Y * 4 * Width) != 0) { Offset_X = min(X, Offset_X); @@ -53,7 +53,7 @@ void __thiscall Redirected_Write_Texture(void* Unknown_Parameter_1, void* Unknow } } - unsigned __int32* Character_Bounds = Characters_Bounds[Write_Character]; + __int32* Character_Bounds = Characters_Bounds[Write_Character]; Character_Bounds[0] = Offset_X;