Video Tutorial CSGO Direct3D9 EndScene Hook & D3D9 ESP Tutorial Series

  • CSGO recently moved logic from 'client_panorama.dll' to 'client.dll', you must update all code that uses 'client_panorama.dll' and replace it with 'client.dll' or the code will not work.
Hexui Undetected CSGO Cheats PUBG Accounts


I know like 40% of what I’m doing. Ok...
Dank Tier VIP
Trump Tier Donator
Dank Tier Donator
Aug 6, 2018

Running CSGO in ultra mode..
did you follow the tutorials from start to finish? if so you might have skipped over the part where i make a change from tutorial p2 and its fixed in tutorial p3
here is the timestamp for that portion where i go over the optimization
  • Like
Reactions: Rake


Dank Tier Donator
Full Member
May 9, 2020
did you follow the tutorials from start to finish? if so you might have skipped over the part where i make a change from tutorial p2 and its fixed in tutorial p3
here is the timestamp for that portion where i go over the optimization
Working perfectly mate, the problem was just the sleep(1) inside the init :p i converted it to internal and it works even better ^^
Last edited:


You are my friend
Dank Tier Donator
Oct 27, 2020
Hi, thank you for the tutorial. I want to give a little feedback:

I think that using something like FindWindowA ( window = FindWindowA(NULL, "Counter-Strike: Global Offensive"); ) function instead of Windows Enumeration is more user friendly. It's understandable for c++ newbs and GetCurrentProcessId not always returns CS GO process ID. - the problem with Console was already mentioned in this thread. As original source code EnumWindows method of course better because it universal, but in this d3d9 tutorial it's kind of overkill.
Last edited:


Fleep Tier Donator
Sep 13, 2020
I am unsure, it crashes with these offsets from this dumper

Seems the Dumper not working correct.


Any of these adresses invalide etc.
For anyone trying to get started with ESPs that might be getting stuck on this guide:
1) client_panorama.dll is now client.dll
2) The offsets from GH Dumper are different from what I found manually and I couldn't get the code to work out-of-the-box as featured in the video. I found the entity list manually by finding what accesses the health value for enemies and local entity, finding a common entity object and entity pointer, and going from there. Downloading this project and updating offsets blindly rendered the watermark at the bottom of my screen but did not display the other esp features.

Checked the CE cheat table dump, seemed to also have a lot of question marks but it's unclear whether that's normal. Will post an update if I get it working with different offsets



Last edited:


Full Member
Nov 8, 2019
idk what it is but my box is all fucked up
esp be like.PNG

box drawing function:
int height = ABS(top.y - bot.y);
    Vector2 tl, tr;
    tl.x = top.x - height / 4;
    tr.x = top.x + height / 4;
    tl.y = tr.y = top.y;

    Vector2 bl, br;
    bl.x = bot.x - height / 4;
    br.x = bot.x + height / 4;
    bl.y = br.y = bot.y;

    DrawLine(tl, tr, thickness, color);
    DrawLine(bl, br, thickness, color);
    DrawLine(tl, bl, thickness, color);
    DrawLine(tr, br, thickness, color);
for loop:
for (int i = 1; i < 32; i++) {
        Entity* currentEntity = hack->entityList->ents[i].ent;
        if (!hack->CheckValidEntity(currentEntity))

        D3DCOLOR color;
        if (currentEntity->iTeamNum == hack->localEntity->iTeamNum)
            color = D3DCOLOR_ARGB(100, 0, 255, 0);
            color = D3DCOLOR_ARGB(100, 255, 0, 0);

        Vector3 entHead3D = hack->GetBonePos(currentEntity, 8);
        entHead3D.z += 8;
        Vector2 entPos2D, entHead2D;
        if (hack->W2S(currentEntity->vecOrigin, entPos2D)) {
            DrawLine(entPos2D.x, entPos2D.y, windowWidth / 2, windowHeight, 2, color);
            if (hack->W2S(entHead3D, entHead2D)) {
                DrawBox(entPos2D, entHead2D, 2, color);

                int height = ABS(entPos2D.y - entHead2D.y);
                int dX = (entPos2D.x - entHead2D.x);

                float healthPerc = currentEntity->iHealth / 100.f;
                float armorPerc = currentEntity->armorValue / 100.f;

                Vector2 botHealth, topHealth, botArmor, topArmor;
                int healthHeight = height * healthPerc;
                int armorHeight = height * armorPerc;

                botHealth.y = botArmor.y = entPos2D.y;

                botHealth.x = entPos2D.x - (height / 4) - 2;
                botArmor.x = entPos2D.x + (height / 4) + 2;

                topHealth.y = entHead2D.y + height - healthHeight;
                topArmor.y = entHead2D.y + height - armorHeight;

                topHealth.x = entPos2D.x - (height / 4) - 2 - (dX * healthPerc);
                topArmor.x = entPos2D.x + (height / 4) + 2 - (dX * armorPerc);

                DrawLine(botHealth, topHealth, 2, D3DCOLOR_ARGB(255, 46, 139, 87));
                DrawLine(botArmor, topArmor, 2, D3DCOLOR_ARGB(255, 30, 144, 255));



I'm not your friend
Jan 21, 2014
@mama00 download the source code, update the offsets, change client_panorama.dll to client.dll and you're done

There is no reason to ask for help when you have the working source code available
  • Like
Reactions: Kekz
Community Mods