adjust special infected shotgun scaling

also explicitly specifying value type seems to be good practice to prevent unintended fraction down-rounding (just what've happened in paint.hpp with color 128 -> 127)
also remove scope check i've competely forgot about in draw_crosshair.hpp
This commit is contained in:
explorer 2024-11-01 16:43:34 +03:00
parent 6554d9e04e
commit 2dc81b9839
6 changed files with 92 additions and 98 deletions

View File

@ -90,23 +90,23 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
Command->Buttons &= ~(*(__int32*)((unsigned __int32)Local_Player + 5028) & 2); Command->Buttons &= ~(*(__int32*)((unsigned __int32)Local_Player + 5028) & 2);
} }
float Difference = __builtin_remainderf(Move_Angles[1] - Previous_Move_Angle_Y, 360); float Difference = __builtin_remainderf(Move_Angles[1] - Previous_Move_Angle_Y, 360.f);
Previous_Move_Angle_Y = Move_Angles[1]; Previous_Move_Angle_Y = Move_Angles[1];
float* Velocity = (float*)((unsigned __int32)Local_Player + 256); float* Velocity = (float*)((unsigned __int32)Local_Player + 256);
if (__builtin_fabsf(Difference) < __builtin_atan2f(30, __builtin_hypotf(Velocity[0], Velocity[1])) * 180 / 3.1415927f) if (__builtin_fabsf(Difference) < __builtin_atan2f(30, __builtin_hypotf(Velocity[0], Velocity[1])) * 180.f / 3.1415927f)
{ {
float Strafe_Angle = __builtin_remainderf(Move_Angles[1] - __builtin_atan2f(Velocity[1], Velocity[0]) * 180 / 3.1415927f, 360); float Strafe_Angle = __builtin_remainderf(Move_Angles[1] - __builtin_atan2f(Velocity[1], Velocity[0]) * 180.f / 3.1415927f, 360.f);
if (__builtin_signbitf(Strafe_Angle) == 0) if (__builtin_signbitf(Strafe_Angle) == 0)
{ {
Command->Move[1] = -400; Command->Move[1] = -400.f;
} }
else else
{ {
Command->Move[1] = 400; Command->Move[1] = 400.f;
} }
Move_Angles[1] -= Strafe_Angle; Move_Angles[1] -= Strafe_Angle;
@ -115,11 +115,11 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{ {
if (__builtin_signbitf(Difference) == 0) if (__builtin_signbitf(Difference) == 0)
{ {
Command->Move[1] = -400; Command->Move[1] = -400.f;
} }
else else
{ {
Command->Move[1] = 400; Command->Move[1] = 400.f;
} }
} }
} }
@ -230,7 +230,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
} }
else else
{ {
if ((*(float*)((unsigned __int32)Local_Player + 4604) + 800 * Global_Variables->Interval_Per_Tick >= 560) + *(__int8*)((unsigned __int32)Local_Player + 8068) + *(__int8*)((unsigned __int32)Local_Player + 9708) != 0) if ((*(float*)((unsigned __int32)Local_Player + 4604) + 800.f * Global_Variables->Interval_Per_Tick >= 560.f) + *(__int8*)((unsigned __int32)Local_Player + 8068) + *(__int8*)((unsigned __int32)Local_Player + 9708) != 0)
{ {
Sequence_Shift(2); Sequence_Shift(2);
} }
@ -317,7 +317,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
(__int8)(Identifier == 270 ? *(void**)((unsigned __int32)Entity + 8040) == *(void**)((unsigned __int32)Local_Player + 376) : 0), (__int8)(Identifier == 270 ? *(void**)((unsigned __int32)Entity + 8040) == *(void**)((unsigned __int32)Local_Player + 376) : 0),
__builtin_powf(Local_Player_Origin[0] - Entity_Origin[0], 2) + __builtin_powf(Local_Player_Origin[1] - Entity_Origin[1], 2) + __builtin_powf(Local_Player_Origin[2] - Entity_Origin[2], 2), __builtin_powf(Local_Player_Origin[0] - Entity_Origin[0], 2.f) + __builtin_powf(Local_Player_Origin[1] - Entity_Origin[1], 2.f) + __builtin_powf(Local_Player_Origin[2] - Entity_Origin[2], 2.f),
(__int32)(Time / Global_Variables->Interval_Per_Tick + 0.5f) (__int32)(Time / Global_Variables->Interval_Per_Tick + 0.5f)
}; };
@ -326,7 +326,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{ {
if (Identifier == 277) if (Identifier == 277)
{ {
if (*(float*)((unsigned __int32)Entity + 4844) == 1) if (*(float*)((unsigned __int32)Entity + 4844) == 1.f)
{ {
Sorted_Target_List.push_back(Target); Sorted_Target_List.push_back(Target);
} }
@ -441,7 +441,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
Vector_Normalize(Direction); Vector_Normalize(Direction);
*(float*)((unsigned __int32)Weapon + 2724) = 75; *(float*)((unsigned __int32)Weapon + 2724) = 75.f;
*(__int32*)((unsigned __int32)Weapon + 3248) = 0; *(__int32*)((unsigned __int32)Weapon + 3248) = 0;
@ -459,19 +459,19 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{ {
Command->Tick_Number = Target->Tick_Number; Command->Tick_Number = Target->Tick_Number;
Command->Angles[0] = __builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180 / 3.1415927f; Command->Angles[0] = __builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180.f / 3.1415927f;
Command->Angles[1] = __builtin_atan2f(Direction[1], Direction[0]) * 180 / 3.1415927f; Command->Angles[1] = __builtin_atan2f(Direction[1], Direction[0]) * 180.f / 3.1415927f;
if (Cancelable_Shove == 1) if (Cancelable_Shove == 1)
{ {
float Shove_Multiplier = min((Global_Variables->Current_Time - *(float*)((unsigned __int32)Weapon + 2704) + *(float*)((unsigned __int32)Weapon + 2700)) / *(float*)((unsigned __int32)Weapon + 2700), 1.f); float Shove_Multiplier = min((Global_Variables->Current_Time - *(float*)((unsigned __int32)Weapon + 2704) + *(float*)((unsigned __int32)Weapon + 2700)) / *(float*)((unsigned __int32)Weapon + 2700), 1.f);
Command->Angles[1] += -45 * Shove_Multiplier + 45 * (1 - Shove_Multiplier); Command->Angles[1] += -45.f * Shove_Multiplier + 45.f * (1.f - Shove_Multiplier);
} }
else else
{ {
Command->Angles[1] += 45; Command->Angles[1] += 45.f;
} }
Command->Buttons |= 2048; Command->Buttons |= 2048;
@ -685,9 +685,9 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
float Angles[3] = float Angles[3] =
{ {
__builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180 / 3.1415927f, __builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180.f / 3.1415927f,
__builtin_atan2f(Direction[1], Direction[0]) * 180 / 3.1415927f, __builtin_atan2f(Direction[1], Direction[0]) * 180.f / 3.1415927f,
0 0
}; };
@ -722,7 +722,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
{ {
if (Shove_Target != nullptr) if (Shove_Target != nullptr)
{ {
*(float*)((unsigned __int32)Shove_Target->Self + 16) = 0; *(float*)((unsigned __int32)Shove_Target->Self + 16) = 0.f;
if (Aim_Target != nullptr) if (Aim_Target != nullptr)
{ {

View File

@ -1,64 +1,61 @@
void Redirected_Draw_Crosshair() 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 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)
{ {
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); goto Draw_Storm_Label;
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;
}
} }
Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360);
} }
Rotation_Angle = __builtin_remainderf(Rotation_Angle + (*(Global_Variables_Structure**)((unsigned __int32)Client_Module + 7096744))->Frame_Time * Interface_Storm_Speed.Integer, 360.f);
} }

View File

@ -4,9 +4,9 @@ void __thiscall Redirected_Finish_Move(void* Unknown_Parameter_1, void* Player,
{ {
float X = *(float*)((unsigned __int32)Move_Data + 76); 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); *(float*)((unsigned __int32)Move_Data + 76) = std::clamp(X, -90.f, 90.f);

View File

@ -36,7 +36,7 @@ void __thiscall Redirected_Paint(void* Panel)
0, 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_Player_Origin[0] - Entity_Origin[0], 2.f) + __builtin_powf(Local_Player_Origin[1] - Entity_Origin[1], 2.f) + __builtin_powf(Local_Player_Origin[2] - Entity_Origin[2], 2.f)
}; };
if (Identifier >= 0) if (Identifier >= 0)
@ -145,9 +145,9 @@ void __thiscall Redirected_Paint(void* Panel)
__int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)(); __int32 Screen_Height = Get_Screen_Size_Type((unsigned __int32)Client_Module + 738544)();
Screen[0] = Screen[0] / 2 * Screen_Width + Screen_Width / 2; Screen[0] = Screen[0] / 2.f * Screen_Width + Screen_Width / 2.f;
Screen[1] = -Screen[1] / 2 * Screen_Height + Screen_Height / 2; Screen[1] = -Screen[1] / 2.f * Screen_Height + Screen_Height / 2.f;
Bounds[0] = min(Bounds[0], Screen[0]); Bounds[0] = min(Bounds[0], Screen[0]);
@ -176,15 +176,15 @@ void __thiscall Redirected_Paint(void* Panel)
} }
} }
Bounds[0] -= 2; Bounds[0] -= 2.f;
Bounds[1] += 2; Bounds[1] += 2.f;
Bounds[2] -= 2; Bounds[2] -= 2.f;
Bounds[3] += 2; Bounds[3] += 2.f;
return (Bounds[1] != 2) * (Bounds[3] != 2); return (Bounds[1] != 2.f) * (Bounds[3] != 2.f);
} }
return 0; return 0;
@ -270,7 +270,7 @@ void __thiscall Redirected_Paint(void* Panel)
if (Ghost == 0) if (Ghost == 0)
{ {
(*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, (__int32)(Paint_Data->Color[0] / 2 + 0.5f), (__int32)(Paint_Data->Color[1] / 2 + 0.5f), (__int32)(Paint_Data->Color[2] / 2 + 0.5f), 128); (*Set_Color_Type(*(unsigned __int32*)Surface + 44))(Surface, (__int32)(Paint_Data->Color[0] / 2.f + 0.5f), (__int32)(Paint_Data->Color[1] / 2.f + 0.5f), (__int32)(Paint_Data->Color[2] / 2.f + 0.5f), 128);
} }
else else
{ {

View File

@ -74,7 +74,7 @@ void __thiscall Perform_Trace(void* Stack)
{ {
float* Start = (float*)((unsigned __int32)Stack + 236); 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; float Damage;
@ -138,20 +138,15 @@ void __thiscall Perform_Trace(void* Stack)
if (Distance < 100) if (Distance < 100)
{ {
Damage += 4.f * Damage * __builtin_powf(1.f - Distance / 100.f, 2); Damage += 4.f * Damage * __builtin_powf(1.f - Distance / 100.f, 2.f);
} }
} }
} }
}; };
if (Identifier == 277) if (Identifier == 13)
{ {
if (Group != 1) Damage *= *(float*)((unsigned __int32)Entity + 336) - *(float*)((unsigned __int32)Entity + 472) >= 0.5f;
{
Apply_Difficulty_Scaling();
}
Apply_Shotgun_Scaling();
} }
else else
{ {
@ -228,12 +223,14 @@ void __thiscall Perform_Trace(void* Stack)
} }
else else
{ {
if (Identifier == 13) if (Identifier == 277)
{ {
if (*(float*)((unsigned __int32)Entity + 336) - *(float*)((unsigned __int32)Entity + 472) < 0.5f) if (Group != 1)
{ {
Damage = 0; Apply_Difficulty_Scaling();
} }
Apply_Shotgun_Scaling();
} }
else else
{ {
@ -246,7 +243,7 @@ void __thiscall Perform_Trace(void* Stack)
{ {
static 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(4.f - 2.75f * Is_Shotgun, Multipliers[Group]);
} }
if (Get_Identifier(Entity, 1, 0) == 99) if (Get_Identifier(Entity, 1, 0) == 99)
@ -318,7 +315,7 @@ void __thiscall Perform_Trace(void* Stack)
Angle_Vectors(Angle, Victim_Direction, nullptr, nullptr); 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(); Compute_Damage();
} }

View File

@ -8,7 +8,7 @@ void __thiscall Redirected_Process_Movement(void* Unknown_Parameter, void* Playe
*(__int32*)((unsigned __int32)Move_Data + 36) |= 4 * *(__int8*)((unsigned __int32)Player + 4636); *(__int32*)((unsigned __int32)Move_Data + 36) |= 4 * *(__int8*)((unsigned __int32)Player + 4636);
*(double*)((unsigned __int32)Move_Data + 44) = 0; *(double*)((unsigned __int32)Move_Data + 44) = 0.;
} }
(decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data); (decltype(&Redirected_Process_Movement)(Original_Process_Movement_Caller))(Unknown_Parameter, Player, Move_Data);