commit
d110a55d6b
11
check-data
11
check-data
@ -7,4 +7,13 @@ if ! [ -d "$1" ]; then
|
|||||||
sudo chmod -R 777 "$1"
|
sudo chmod -R 777 "$1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rsync -avh --progress "data/" "$1"
|
rsync -avh --progress "data/" "$1"
|
||||||
|
|
||||||
|
if ! [ -d "$1/res" ]; then
|
||||||
|
echo "Creating cathook data directory at $1/res"
|
||||||
|
sudo mkdir -p "$1/res"
|
||||||
|
sudo chown -R $USER "$1/res"
|
||||||
|
sudo chmod -R 777 "$1/res"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rsync -avh --progress "res/" "$1/res"
|
||||||
|
@ -40,6 +40,7 @@ public:
|
|||||||
|
|
||||||
//
|
//
|
||||||
extern std::array<ESPData, 2048> data;
|
extern std::array<ESPData, 2048> data;
|
||||||
|
extern hitbox_cache::CachedHitbox *hitboxcache[32][18];
|
||||||
|
|
||||||
void CreateMove();
|
void CreateMove();
|
||||||
void Draw();
|
void Draw();
|
||||||
@ -47,6 +48,7 @@ void Draw();
|
|||||||
// Entity Processing
|
// Entity Processing
|
||||||
void __attribute__((fastcall)) ProcessEntity(CachedEntity *ent);
|
void __attribute__((fastcall)) ProcessEntity(CachedEntity *ent);
|
||||||
void __attribute__((fastcall)) ProcessEntityPT(CachedEntity *ent);
|
void __attribute__((fastcall)) ProcessEntityPT(CachedEntity *ent);
|
||||||
|
void __attribute__((fastcall)) emoji(CachedEntity *ent);
|
||||||
|
|
||||||
// helper funcs
|
// helper funcs
|
||||||
void __attribute__((fastcall)) DrawBox(CachedEntity *ent, const rgba_t &clr);
|
void __attribute__((fastcall)) DrawBox(CachedEntity *ent, const rgba_t &clr);
|
||||||
|
@ -27,6 +27,5 @@ constexpr int c_strcmp(char const *lhs, char const *rhs)
|
|||||||
#define DATA_PATH "/opt/cathook"
|
#define DATA_PATH "/opt/cathook"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define FEATURE_EMOJI_ESP_DISABLED
|
|
||||||
#define FEATURE_RADAR_DISABLED
|
#define FEATURE_RADAR_DISABLED
|
||||||
#define FEATURE_FIDGET_SPINNER_DISABLED
|
#define FEATURE_FIDGET_SPINNER_DISABLED
|
||||||
|
@ -34,6 +34,7 @@ CatVar emoji_esp_scaling(CV_SWITCH, "esp_emoji_scaling", "1",
|
|||||||
"Emoji ESP Scaling");
|
"Emoji ESP Scaling");
|
||||||
CatVar emoji_min_size(CV_INT, "esp_emoji_min_size", "20", "Emoji ESP min size",
|
CatVar emoji_min_size(CV_INT, "esp_emoji_min_size", "20", "Emoji ESP min size",
|
||||||
"Minimum size for an emoji when you use auto scaling");
|
"Minimum size for an emoji when you use auto scaling");
|
||||||
|
hitbox_cache::CachedHitbox *hitboxcache[32][18]{};
|
||||||
#endif
|
#endif
|
||||||
// Other esp options
|
// Other esp options
|
||||||
CatEnum show_health_enum({ "None", "Text", "Healthbar", "Both" });
|
CatEnum show_health_enum({ "None", "Text", "Healthbar", "Both" });
|
||||||
@ -288,6 +289,9 @@ void Draw()
|
|||||||
for (auto &i : entities_need_repaint)
|
for (auto &i : entities_need_repaint)
|
||||||
{
|
{
|
||||||
ProcessEntityPT(ENTITY(i));
|
ProcessEntityPT(ENTITY(i));
|
||||||
|
#ifndef FEATURE_EMOJI_ESP_DISABLED
|
||||||
|
emoji(ENTITY(i));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,7 +321,6 @@ void CreateMove()
|
|||||||
{ // I still dont understand the purpose of prof_section and surrounding in
|
{ // I still dont understand the purpose of prof_section and surrounding in
|
||||||
// brackets
|
// brackets
|
||||||
PROF_SECTION(CM_ESP_EntityLoop);
|
PROF_SECTION(CM_ESP_EntityLoop);
|
||||||
|
|
||||||
// Loop through entities
|
// Loop through entities
|
||||||
for (int i = 0; i < limit; i++)
|
for (int i = 0; i < limit; i++)
|
||||||
{
|
{
|
||||||
@ -325,6 +328,11 @@ void CreateMove()
|
|||||||
CachedEntity *ent = ENTITY(i);
|
CachedEntity *ent = ENTITY(i);
|
||||||
ProcessEntity(ent);
|
ProcessEntity(ent);
|
||||||
|
|
||||||
|
if (i <= g_IEngine->GetMaxClients())
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 18; ++j)
|
||||||
|
hitboxcache[i][j] = ent->hitboxes.GetHitbox(j);
|
||||||
|
}
|
||||||
// Dont know what this check is for
|
// Dont know what this check is for
|
||||||
if (data[i].string_count)
|
if (data[i].string_count)
|
||||||
{
|
{
|
||||||
@ -347,6 +355,54 @@ void CreateMove()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _FASTCALL emoji(CachedEntity *ent)
|
||||||
|
{
|
||||||
|
// Check to prevent crashes
|
||||||
|
if (CE_BAD(ent))
|
||||||
|
return;
|
||||||
|
// Emoji esp
|
||||||
|
if (emoji_esp)
|
||||||
|
{
|
||||||
|
if (ent->m_Type == ENTITY_PLAYER)
|
||||||
|
{
|
||||||
|
static glez_texture_t textur =
|
||||||
|
glez_texture_load_png_rgba("/opt/cathook/data/res/atlas.png");
|
||||||
|
auto hit = hitboxcache[ent->m_IDX][0];
|
||||||
|
Vector hbm, hbx;
|
||||||
|
if (draw::WorldToScreen(hit->min, hbm) &&
|
||||||
|
draw::WorldToScreen(hit->max, hbx))
|
||||||
|
{
|
||||||
|
Vector head_scr;
|
||||||
|
if (draw::WorldToScreen(hit->center, head_scr))
|
||||||
|
{
|
||||||
|
float size = emoji_esp_scaling ? fabs(hbm.y - hbx.y)
|
||||||
|
: float(emoji_esp_size);
|
||||||
|
if (emoji_esp_scaling && (size < float(emoji_min_size)))
|
||||||
|
{
|
||||||
|
size = float(emoji_min_size);
|
||||||
|
}
|
||||||
|
glez_rgba_t white = glez_rgba(255, 255, 255, 255);
|
||||||
|
if (!textur)
|
||||||
|
textur = glez_texture_load_png_rgba(
|
||||||
|
"/opt/cathook/data/res/atlas.png");
|
||||||
|
if (textur)
|
||||||
|
{
|
||||||
|
if (emoji_esp == 1)
|
||||||
|
glez_rect_textured(head_scr.x - size / 2,
|
||||||
|
head_scr.y - size / 2, size,
|
||||||
|
size, white, textur, 4 * 64,
|
||||||
|
3 * 64, 64, 64);
|
||||||
|
else if (emoji_esp == 2)
|
||||||
|
glez_rect_textured(head_scr.x - size / 2,
|
||||||
|
head_scr.y - size / 2, size,
|
||||||
|
size, white, textur, 5 * 64,
|
||||||
|
3 * 64, 64, 64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// Used when processing entitys with cached data from createmove in draw
|
// Used when processing entitys with cached data from createmove in draw
|
||||||
void _FASTCALL ProcessEntityPT(CachedEntity *ent)
|
void _FASTCALL ProcessEntityPT(CachedEntity *ent)
|
||||||
{
|
{
|
||||||
@ -516,45 +572,6 @@ void _FASTCALL ProcessEntityPT(CachedEntity *ent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifndef FEATURE_EMOJI_ESP_DISABLED
|
|
||||||
// Emoji esp
|
|
||||||
if (emoji_esp)
|
|
||||||
{
|
|
||||||
if (ent->m_Type == ENTITY_PLAYER)
|
|
||||||
{
|
|
||||||
// Positions in the atlas for the textures
|
|
||||||
static textures::AtlasTexture joy_texture(
|
|
||||||
64 * 4, textures::atlas_height - 64 * 4, 64, 64);
|
|
||||||
static textures::AtlasTexture thinking_texture(
|
|
||||||
64 * 5, textures::atlas_height - 64 * 4, 64, 64);
|
|
||||||
|
|
||||||
auto hb = ent->hitboxes.GetHitbox(0);
|
|
||||||
Vector hbm, hbx;
|
|
||||||
if (draw::WorldToScreen(hb->min, hbm) &&
|
|
||||||
draw::WorldToScreen(hb->max, hbx))
|
|
||||||
{
|
|
||||||
Vector head_scr;
|
|
||||||
if (draw::WorldToScreen(hb->center, head_scr))
|
|
||||||
{
|
|
||||||
float size = emoji_esp_scaling ? fabs(hbm.y - hbx.y)
|
|
||||||
: float(emoji_esp_size);
|
|
||||||
if (emoji_esp_scaling && (size < float(emoji_min_size)))
|
|
||||||
{
|
|
||||||
size = float(emoji_min_size);
|
|
||||||
}
|
|
||||||
textures::AtlasTexture *tx = nullptr;
|
|
||||||
if (int(emoji_esp) == 1)
|
|
||||||
tx = &joy_texture;
|
|
||||||
if (int(emoji_esp) == 2)
|
|
||||||
tx = &thinking_texture;
|
|
||||||
if (tx)
|
|
||||||
tx->Draw(head_scr.x - size / 2, head_scr.y - size / 2,
|
|
||||||
colors::white, size, size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
// Box esp
|
// Box esp
|
||||||
if (box_esp)
|
if (box_esp)
|
||||||
{
|
{
|
||||||
@ -689,12 +706,11 @@ void _FASTCALL ProcessEntityPT(CachedEntity *ent)
|
|||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
{ // ABOVE
|
{ // ABOVE
|
||||||
draw_point =
|
draw_point = Vector(
|
||||||
Vector(min_x,
|
min_x, min_y -
|
||||||
min_y -
|
|
||||||
data.at(ent->m_IDX).string_count *
|
data.at(ent->m_IDX).string_count *
|
||||||
/*((int)fonts::font_main->height)*/ 14,
|
/*((int)fonts::font_main->height)*/ 14,
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
Reference in New Issue
Block a user