Fog of War: Ultimate solution for Wallhacking?

Written By Staff Writer Staff Writer
Last UpdatedApril 19, 2020 at 09:35PM
share on
share on

Cheats are becoming a recurring problem in online games and increasingly difficult to manage. That's why VALORANT's anti-cheat team started to work on it from the very beginning of the development. Paul "Arkem" Chamberlain, the anti-cheat lead for VALORANT, describes how the implementation of the Fog of War system to fight wallhack was done.

The principle function of a wallhack is to take advantage of the information sent by the server to our game client and project that information into the game. The Fog of War system is inspired by the League of Legends system where the Fog of War works as a restrictive element on what information our client receives from the server. The goal of this feature is to know the position of your enemies only when it is relevant to you.

The Fog of War feature implemented in VALORANT tries to replicate the results obtained in the Riot’s MOBA. The first thing was to verify if the implementation of this system was possible in an FPS game.

**With a logic of operation guided by: **

  • A way to decide which information is necessary for each player
  • A way of preventing players from receiving unnecessary information
  • A way of catching a player up when unnecessary information becomes necessary

And intensive research into the Unreal Engine documentation initiated the first attempt at the Fog of War system.

The first attempt

The system worked with lines of sight projected from the characters. It worked partially, but it had several bugs, sometimes a character appears very late, or even not at all, other times the projections of the lines were blocked and didn't allow the system to work properly.

Line-of-sight checks against the bounding box help mitigate but isn’t a full solution / Riot Games
Line-of-sight checks against the bounding box help mitigate but isn’t a full solution / Riot Games

The second attempt

The system improved significantly when a system of predicting the position of the characters based on their speed and direction was incorporated, thus avoiding the pop-up effect of a character in our field of vision.

Extending bounding boxes to account for movement and latency / Riot Games
Extending bounding boxes to account for movement and latency / Riot Games

The system worked but had some bugs and performance problems. While talking through this problem with some of VALORANT’s more graphically-inclined engineers, the problem of the visibility was very similar to a common client graphics problem called occlusion culling.

Server-side occlusion culling

As Paul "Arkem" Chamberlain explains in the article: “Occlusion culling is a technique that game engines use to remove unnecessary objects from a scene before sending it to the graphics card to render. Reducing the number of objects sent to the GPU makes rendering a scene much faster.”

The VALORANT occlusion culling system uses a technique called Potentially Visible Sets (PVS). A PVS system pre-computes which parts of the map can see which other parts. The game runs a process ahead of time which divides the scene into cells.

The game runs a process that divides the maps into cells. For each cell, it calculates the line of sight between each cell and stores the information in a grid.

This precomputed visibility table gives us fast and generous line-of-sight tests. (Picture from Paul article)
This precomputed visibility table gives us fast and generous line-of-sight tests. (Picture from Paul article)

This new system proved to be much faster and less resource consuming than the line of sight based system. It only consumed 2% of the information transferred from the server, while the previous system reached 50%.

Despite a good performance in general, this system had some minor problems like not showing a character in the scoreboard and some major problems like a discrepancy between what our client sees and what is happening in the server.

Left: What the player saw. Right: What was actually happening / Riot Games
Left: What the player saw. Right: What was actually happening / Riot Games

This happens when events that are of a prolonged duration, such as the Spike Defuse, are not sent to a player because of the Fog of War. When the player receives the information the position of the agent is correct, but his current pose is not. This kind of bugs was the most critical and the interesting thing was how they were able to solve it - instead of individual solutions for each event they worked together with the engineers responsible for Agents and game systems built a system called Effect Containers. This system is in charge of restarting and fast-forwarding effects after an actor emerges from Fog of War. In this way not only the position of the animation will be correct but also the timing of the events will be corrected.

Measuring effectiveness

To verify the effectiveness the anti-cheat team created several wallhacks and combined them with a series of bots with a predefined routine. This automates the process of verifying changes in the system and detecting outliers within each agent taking into account the times in which the system sends information to the customer.

It is evidenced how structural was the development of the anti-cheat system within VALORANT and how this made it possible to use resources that would not have been available if the construction of the anti-cheat was not integral. The work of the different integrated areas enabled the current anti-cheat system.

Wanna know more? Check out the full article from Paul "Arkem" Chamberlain on the Riot Games official website.

Bringing you the latest and greatest in VALORANT news and guides. Articles from our former and current Staff Writers keep you up-to-date on everything VALORANT!

View More

Latest News

Comments

You must be logged in to be able to submit comments
Login

Top Predictors

Username
Points

Recent Activity

THESPIKE
© 2024 THESPIKE.GG | All Rights Reserved | Not affiliated with Riot Games
18+ Bet Responsibly | BeGambleAware.org