mirror of
https://github.com/qwertyuiop3/Storm.git
synced 2025-06-08 10:39:35 +08:00
stability
implementing logic for custom hitboxes isn't trivial, but at least to not crash; stumbled upon junk in `m_survivorCharacter` at `hehe30_9`
This commit is contained in:
parent
7070f6a68c
commit
dc27eb98bd
@ -802,57 +802,60 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu
|
|||||||
|
|
||||||
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitboxes[Target->Identifier] * 68);
|
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitboxes[Target->Identifier] * 68);
|
||||||
|
|
||||||
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
if (*(__int32*)Hitbox < sizeof(Bones) / sizeof(Bones[0]))
|
||||||
|
|
||||||
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
|
||||||
|
|
||||||
float Hitbox_Center[3]
|
|
||||||
{
|
{
|
||||||
(Hitbox_Minimum[0] + Hitbox_Maximum[0]) / 2.f,
|
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
||||||
|
|
||||||
(Hitbox_Minimum[1] + Hitbox_Maximum[1]) / 2.f,
|
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
||||||
|
|
||||||
(Hitbox_Minimum[2] + Hitbox_Maximum[2]) / 2.f
|
float Hitbox_Center[3]
|
||||||
};
|
{
|
||||||
|
(Hitbox_Minimum[0] + Hitbox_Maximum[0]) / 2.f,
|
||||||
|
|
||||||
float Target_Origin[3] =
|
(Hitbox_Minimum[1] + Hitbox_Maximum[1]) / 2.f,
|
||||||
{
|
|
||||||
Bones[*(__int32*)Hitbox][0][0] * Hitbox_Center[0] + Bones[*(__int32*)Hitbox][0][1] * Hitbox_Center[1] + Bones[*(__int32*)Hitbox][0][2] * Hitbox_Center[2] + Bones[*(__int32*)Hitbox][0][3],
|
|
||||||
|
|
||||||
Bones[*(__int32*)Hitbox][1][0] * Hitbox_Center[0] + Bones[*(__int32*)Hitbox][1][1] * Hitbox_Center[1] + Bones[*(__int32*)Hitbox][1][2] * Hitbox_Center[2] + Bones[*(__int32*)Hitbox][1][3],
|
(Hitbox_Minimum[2] + Hitbox_Maximum[2]) / 2.f
|
||||||
|
};
|
||||||
|
|
||||||
Bones[*(__int32*)Hitbox][2][0] * Hitbox_Center[0] + Bones[*(__int32*)Hitbox][2][1] * Hitbox_Center[1] + Bones[*(__int32*)Hitbox][2][2] * Hitbox_Center[2] + Bones[*(__int32*)Hitbox][2][3]
|
float Target_Origin[3] =
|
||||||
};
|
{
|
||||||
|
Bones[*(__int32*)Hitbox][0][0] * Hitbox_Center[0] + Bones[*(__int32*)Hitbox][0][1] * Hitbox_Center[1] + Bones[*(__int32*)Hitbox][0][2] * Hitbox_Center[2] + Bones[*(__int32*)Hitbox][0][3],
|
||||||
|
|
||||||
float Direction[3] =
|
Bones[*(__int32*)Hitbox][1][0] * Hitbox_Center[0] + Bones[*(__int32*)Hitbox][1][1] * Hitbox_Center[1] + Bones[*(__int32*)Hitbox][1][2] * Hitbox_Center[2] + Bones[*(__int32*)Hitbox][1][3],
|
||||||
{
|
|
||||||
Target_Origin[0] - Eye_Position[0],
|
|
||||||
|
|
||||||
Target_Origin[1] - Eye_Position[1],
|
Bones[*(__int32*)Hitbox][2][0] * Hitbox_Center[0] + Bones[*(__int32*)Hitbox][2][1] * Hitbox_Center[1] + Bones[*(__int32*)Hitbox][2][2] * Hitbox_Center[2] + Bones[*(__int32*)Hitbox][2][3]
|
||||||
|
};
|
||||||
|
|
||||||
Target_Origin[2] - Eye_Position[2]
|
float Direction[3] =
|
||||||
};
|
{
|
||||||
|
Target_Origin[0] - Eye_Position[0],
|
||||||
|
|
||||||
Vector_Normalize(Direction);
|
Target_Origin[1] - Eye_Position[1],
|
||||||
|
|
||||||
float Angles[3] =
|
Target_Origin[2] - Eye_Position[2]
|
||||||
{
|
};
|
||||||
__builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180.f / 3.1415927f,
|
|
||||||
|
|
||||||
__builtin_atan2f(Direction[1], Direction[0]) * 180.f / 3.1415927f
|
Vector_Normalize(Direction);
|
||||||
};
|
|
||||||
|
|
||||||
if (Perform_Trace(Angles) == 1)
|
float Angles[3] =
|
||||||
{
|
{
|
||||||
Command->Tick_Number = Target->Tick_Number;
|
__builtin_atan2f(-Direction[2], __builtin_hypotf(Direction[0], Direction[1])) * 180.f / 3.1415927f,
|
||||||
|
|
||||||
Byte_Manager::Copy_Bytes(1, Command->Angles, sizeof(Angles), Angles);
|
__builtin_atan2f(Direction[1], Direction[0]) * 180.f / 3.1415927f
|
||||||
|
};
|
||||||
|
|
||||||
Command->Buttons |= 1;
|
if (Perform_Trace(Angles) == 1)
|
||||||
|
{
|
||||||
|
Command->Tick_Number = Target->Tick_Number;
|
||||||
|
|
||||||
*(float*)((unsigned __int32)Target->Self + 16) = Get_Target_Time(Target);
|
Byte_Manager::Copy_Bytes(1, Command->Angles, sizeof(Angles), Angles);
|
||||||
|
|
||||||
goto Aim_Found_Target_Label;
|
Command->Buttons |= 1;
|
||||||
|
|
||||||
|
*(float*)((unsigned __int32)Target->Self + 16) = Get_Target_Time(Target);
|
||||||
|
|
||||||
|
goto Aim_Found_Target_Label;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
145
Paint.hpp
145
Paint.hpp
@ -95,84 +95,89 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
{
|
{
|
||||||
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitbox_Number * 68);
|
void* Hitbox = (void*)((unsigned __int32)Hitbox_Set + 12 + Hitbox_Number * 68);
|
||||||
|
|
||||||
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
if (*(__int32*)Hitbox < sizeof(Bones) / sizeof(Bones[0]))
|
||||||
|
|
||||||
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];
|
float* Hitbox_Minimum = (float*)((unsigned __int32)Hitbox + 8);
|
||||||
|
|
||||||
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];
|
float* Hitbox_Maximum = (float*)((unsigned __int32)Hitbox + 20);
|
||||||
|
|
||||||
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];
|
float Hitbox_Vertices[8][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];
|
__int32 Axis_Number = 0;
|
||||||
|
|
||||||
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];
|
Initialize_Vertices_Label:
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
if (Axis_Number != sizeof(Hitbox_Vertices[0]) / sizeof(float))
|
|
||||||
{
|
{
|
||||||
goto 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;
|
||||||
|
|
||||||
|
if (Axis_Number != sizeof(Hitbox_Vertices[0]) / sizeof(float))
|
||||||
|
{
|
||||||
|
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.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;
|
||||||
|
|
||||||
|
if (Vertex_Number != sizeof(Hitbox_Vertices) / sizeof(Hitbox_Vertices[0]))
|
||||||
|
{
|
||||||
|
goto Transform_Vertices_Label;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Hitbox_Number += 1;
|
||||||
|
|
||||||
|
goto Get_Bounds_Label;
|
||||||
}
|
}
|
||||||
|
|
||||||
__int32 Vertex_Number = 0;
|
return 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;
|
|
||||||
|
|
||||||
if (Vertex_Number != sizeof(Hitbox_Vertices) / sizeof(Hitbox_Vertices[0]))
|
|
||||||
{
|
|
||||||
goto Transform_Vertices_Label;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Hitbox_Number += 1;
|
|
||||||
|
|
||||||
goto Get_Bounds_Label;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,7 +247,7 @@ void __thiscall Redirected_Paint(void* Panel)
|
|||||||
{
|
{
|
||||||
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" };
|
static wchar_t* Survivors[8] = { (wchar_t*)L"Nick", (wchar_t*)L"Rochelle", (wchar_t*)L"Coach", (wchar_t*)L"Ellis", (wchar_t*)L"Bill", (wchar_t*)L"Zoey", (wchar_t*)L"Louis", (wchar_t*)L"Francis" };
|
||||||
|
|
||||||
Paint_Data->Name = Survivors[*(__int32*)((unsigned __int32)Target->Self + 7308) + 4 * (*(__int32*)((unsigned __int32)Client_Module + 8144624) == 1)];
|
Paint_Data->Name = Survivors[std::clamp(*(__int32*)((unsigned __int32)Target->Self + 7308), 0, 7) + 4 * (*(__int32*)((unsigned __int32)Client_Module + 8144624) == 1)];
|
||||||
}
|
}
|
||||||
|
|
||||||
__int8 Ghost = 0;
|
__int8 Ghost = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user