CSGO Far/Extended ESP Concept
So not too long ago this happened. :|
Valve released an update to csgo which basically put PVS to use. This update basically would not network entities(in our case the enemy players) that were not in the visibility leaf of the player. Later on they released another update which bought this concept of player occlusion. The server would now not send any data of enemy players when they were not visible. It wasn’t as bad as what SMAC does but it ended the life of the far ESP cheat in the game, you could no longer see enemy players unless they were close to you.
Since this is handled server side there is no real feasible way to get around this. I’ve seen this done in many other games like dota2 with its fog of war system.
Since there is no way to get around this I thought to myself hmm well the enemy player positions show up on the radar when a friendly spots an enemy. Know where I’m going with this 😛
The remedy to the far ESP fix is to use this data to draw boxes around the enemy when they are out of view because of the visibility check. Lucky for us the data they store in the radar structure is world coordinates XYZ instead of the 2D ones relative to the map.
So taking a look at the data where the radar is stored here is what I was able to reverse:
typedef struct {
uint32 unkVar1;
uint32 unkVar2;
uint32 unkVar3;
uint32 unkVar4;
byte unkData[136];
float pos_x;
float pos_y;
float pos_z;
float rot_x;
float rot_y;
float rot_z;
float unk_x;
float unk_y;
float unk_z;
float unk_flt;
uint32 unkVar5;
uint32 unkVar6;
uint32 unkVar7;
uint32 m_PlayerIdx;
uint32 m_health;
wchar_t playerName[MAX_PLAYER_NAME_LENGTH];
uint32 unkVar9;
csTeam unkVar10_Team;
uint32 unkVar11;
} radarEntry; //stride 0x1e0
Here is an example with live data:
And so when the enemy is spotted by one of your team players using this data which is networked unlike the entity data we get this.
Now I know it doesn’t solve the problem but it helps seeing them when they are visible by one of your team players.