diff --git a/res/atlas b/res/atlas index 6ff67d56..b0bdc81f 100644 Binary files a/res/atlas and b/res/atlas differ diff --git a/res/atlas.png b/res/atlas.png index 639559b7..6b85b00b 100644 Binary files a/res/atlas.png and b/res/atlas.png differ diff --git a/res/atlas.xcf b/res/atlas.xcf index d2045faf..6467574b 100644 Binary files a/res/atlas.xcf and b/res/atlas.xcf differ diff --git a/res/bin/atlas.o b/res/bin/atlas.o index 2f964294..784afb0f 100644 Binary files a/res/bin/atlas.o and b/res/bin/atlas.o differ diff --git a/src/hacks/ESP.cpp b/src/hacks/ESP.cpp index c3a1c30f..660c162a 100644 --- a/src/hacks/ESP.cpp +++ b/src/hacks/ESP.cpp @@ -588,6 +588,12 @@ std::unordered_map bonelist_map {}; * According to profiler, this function is the most time-consuming (and gets called up to 200K times a second) */ +CatEnum emoji_esp({ "None", "Joy", "Thinking" }); +CatVar joy_esp(CV_SWITCH, "esp_emoji", "0", "Emoji ESP"); +CatVar joy_esp_size(CV_FLOAT, "esp_emoji_size", "32", "Emoji ESP Size"); +textures::AtlasTexture joy_texture(64 * 4, textures::atlas_height - 64 * 4, 64, 64); +textures::AtlasTexture thinking_texture(64 * 5, textures::atlas_height - 64 * 4, 64, 64); + void _FASTCALL ProcessEntityPT(CachedEntity* ent) { PROF_SECTION(PT_esp_process_entity); @@ -643,6 +649,17 @@ void _FASTCALL ProcessEntityPT(CachedEntity* ent) { if (vischeck && !ent->IsVisible()) transparent = true; if (!fg) fg = colors::EntityF(ent); if (transparent) fg = colors::Transparent(fg); + if (joy_esp) { + Vector head_pos = ent->hitboxes.GetHitbox(0)->center; + Vector head_scr; + if (draw::WorldToScreen(head_pos, head_scr)) { + textures::AtlasTexture* tx = nullptr; + if (int(joy_esp) == 1) tx = &joy_texture; + if (int(joy_esp) == 2) tx = &thinking_texture; + if (tx) + tx->Draw(head_scr.x - float(joy_esp_size) / 2, head_scr.y - float(joy_esp_size) / 2, float(joy_esp_size), float(joy_esp_size)); + } + } DrawBox(ent, fg, static_cast(box_healthbar), CE_INT(ent, netvar.iHealth), ent->m_iMaxHealth); break; }