CS2FOW stops your server from sending an enemy's live position when walls or smoke completely hide them. A wallhack cannot draw a player your server never sent.
- It stays on your server: CS2FOW never runs on your players' computers.
- Players install nothing: they join and play normally. There is no client injection or extra download.
- When in doubt, show the player: if data is missing, too old, or unsafe, CS2FOW steps aside instead of hiding someone by mistake. This is called failing open.
Every map gets a lightweight 3D copy of its solid walls. CS2FOW uses that copy to check who can actually see whom.
![]() Cache — A site |
![]() Dust II — B site |
![]() Dust II — Long |
![]() Mirage — A site |
What is CS2FOW?
CS2FOW is an anti-wallhack plugin for Counter-Strike 2 community servers. If walls or live smoke completely hide a living player, your server can stop sending that player's live visuals to the opponent who cannot see them.
It is not a filter drawn over the screen. Everything happens on your server.
Does it work in Premier or Valve matchmaking?
No. You need a community or dedicated server running Metamod:Source. Only Valve could add something similar to official matchmaking.
Do players install anything or risk a VAC ban?
Nothing. Players join your server like normal. CS2FOW does not modify, inject into, or even run inside their CS2 client.
Can a cheat bypass it?
A cheat cannot unpack an exact live enemy position if your server never put it in the package. It can still listen for sounds, use teammate information, remember the last known position, or guess a common prefire spot. CS2FOW cuts off the main source used by wallhacks; it does not make every kind of cheating impossible.
What exactly gets hidden?
CS2FOW hides only the known visuals that travel with a living player: the player model, carried weapons, wearables, and a hostage they are currently carrying. Anything unknown or independent stays visible.
You always receive yourself, dead players, spectators, and HLTV. Teammates also stay visible by default, but you can choose to apply the same visibility check to living teammates.
Can players still wallbang a hidden enemy?
Yes. Hidden does not mean deleted. The player is still fully present on your server, so movement, hit registration, bullet penetration, damage, and game rules keep working normally.
Does it block radar cheats or sound ESP?
It helps against radar cheats that need live enemy positions. It does not silence footsteps or gunshots, hide bomb information, remove teammate knowledge, or erase every other clue the game provides.
What about smokes, doors, breakables, and moving props?
Smoke blocks sight too. CS2FOW copies the game's live smoke shape, which is stored as a 3D grid of tiny boxes called voxels. That lets it follow changing edges, overlapping smokes, growth, fading, and holes opened by grenades.
Doors, breakable objects, and moving props do not block CS2FOW yet. The baked map is a frozen copy of solid map geometry, so it only knows about walls that stay put.
How does it avoid enemies appearing too late around corners?
CS2FOW checks Valve's nineteen animated hitbox capsules as complete three-dimensional volumes, plus the muzzle of the held weapon. It also places viewing points at your eye, shoulders, above your eye, and feet. When you hold W or S, or move diagonally, one extra point follows that direction. The shoulder and movement points reach farther at higher ping, stop at baked walls, and a short visibility hold prevents one-tick flicker.
As soon as the background worker finds a clear view again, CS2FOW lets the player's next normal update through.
Does it run expensive engine traces every tick?
No. The baker turns the map's walls into a small, quick-to-search file called a BVH8. A background worker draws imaginary lines through that data, while CheckTransmit only picks up the finished yes-or-no answer when the server is deciding what to send.
Do custom and Workshop maps work?
Yes, as long as the map's physics can be baked. Your server can prepare a mounted map automatically. For a public Workshop item, the CS2FOW Map Baker can give you ready-to-use .bvh8 and .json files.
What happens when a map changes?
CS2FOW checks the map file's fingerprint - its CRC and size - against the saved bake. If they do not match, it rejects the old data and keeps everyone visible. The automatic baker can then make a fresh copy.
What does "fail open" mean?
It means CS2FOW would rather show too much than hide the wrong player. If something is missing, old, or uncertain, your server sends the player normally.
- Install Metamod:Source on your CS2 server.
- Install the Windows or Linux CS2FOW package into your server's
game/csgofolder without rearranging its contents. - Start your server and load a map.
- Type
cs2fow_statusin the server console.
The first time you load a map, cs2fow_status may say that an automatic bake is running. You can keep playing, and everyone stays visible until the bake finishes and passes its checks. The optional official-maps ZIP comes with ready-made data, so its included maps skip this first wait.
Your server needs an x86-64 CPU with AVX visible to the operating system. CS2FOW also checks that its private engine offsets, called gamedata, match the loaded CS2 server file by size and CRC32. If Valve ships an unknown update, CS2FOW stays off until matching gamedata is installed. That is much safer than guessing inside server memory.
CS2FOW keeps its hands off as much of the game as possible. It hides only this small visual group:
- the player pawn;
- active, last, and carried weapons, including carried C4;
- wearables;
- a currently carried hostage prop.
Everything that matters on its own stays on its own. A planted C4, dropped objective, dropped weapon, flying grenade, inferno, sound, or unknown entity does not disappear just because the player who once owned it is hidden. Your server still controls movement, collision, hit registration, damage, penetration, and game rules exactly as before.
CS2FOW does not filter HLTV, spectators, dead players, or your own player. Teammates stay visible by default. FFA is detected automatically through mp_teammates_are_enemies; when it is 1, every other living player is treated as an enemy. You can also set cs2fow_filter_teammates 1 to apply the same check to teammates in normal team modes, which can remove their client-side markers and radar information while hidden.
Live smoke can block those imaginary sight lines too. By default, an HE opens a 100-unit viewing channel through affected smoke for 2.5 seconds, but only if the smoke was already there when the HE exploded. A wall still wins, and another overlapping smoke can still block the view.
- Load the map: CS2FOW finds the mounted VPK and the physics data inside it.
- Bake the walls: the baker turns thousands of collision triangles into a compact, quick-to-search map called a BVH8.
- Take a picture: on the game thread, CS2FOW asks CS2 for each player's current bones and safely copies Valve's nineteen animated hitbox capsules with the player's position, size, movement buttons, view direction, ping, and held weapon. This recent picture is the snapshot. If a complete trustworthy capsule pose is unavailable, that player is shown normally.
- Test the whole body: a background worker looks from up to six viewing positions and compares the projected three-dimensional capsule silhouette with the baked walls. The held-weapon muzzle remains one separate visibility point.
- Choose visible or hidden: if any sampled part of any capsule or the muzzle gets past both the baked walls and live smoke, the whole player stays visible. Sub-pixel or time-budget uncertainty also shows the player rather than risking an incorrect hide.
- Control the outgoing update:
CheckTransmit, the server's outgoing entity list, first marks the verifieddont_transmitbit and then removes the matching primary send bit for each hidden visual entity.
The worker gets a copy of the numbers, never live CS2 objects. In other words, it reads a photograph instead of reaching back into the moving game.
|
The baker strips a map's static collision down to the walls CS2FOW needs for sight checks. Before using the result, the plugin checks the BVH8 structure, the source file's fingerprint (CRC and size), and the report details. Your server can bake mounted maps automatically. You can also prepare public Workshop maps through the CS2FOW Map Baker. |
|
The plugin runs cfg/cs2fow.cfg when it loads and again whenever a map starts. Out of the box, wall and smoke filtering are on, teammate filtering is off, and Valve's sv_enable_donttransmit 0 compatibility mode is used. CS2FOW's paired send-list handling also supports mode 1.
Think of cs2fow_status as the dashboard. It tells you whether CS2FOW is active, why it stepped aside, which map bake is loaded, how long its work takes, how fresh the latest snapshot is, how many player pairs it checked, what smoke and HE handling are doing, whether teammates are filtered, and how an automatic bake is going. Worker wall is the real elapsed latency; active adds the pair-processing time across every worker, so it can be higher when several threads run together and is not a direct game-thread stall. The separate bones line measures the game-thread time spent asking CS2 for animated hitbox capsules; that time is already included in capture, so do not add the two numbers together.
If you need to see exactly which entity bits CS2FOW removed:
cs2fow_debug 1 start silent evidence collection
cs2fow_entity list buffered records, newest first
cs2fow_entity <edict> show records for one entity index
cs2fow_entity clear clear the evidence buffer
The debug buffer records only primary bits CS2FOW truly removed. Turning debug off stops collecting new evidence, but keeps what is already there until a reset or you clear it.
Complete configuration reference
| Setting | Default | Meaning |
|---|---|---|
sv_enable_donttransmit |
0 |
Use Valve's safer compatibility mode. CS2FOW also handles mode 1 correctly. |
cs2fow_enable |
1 |
Turn filtering on whenever all required data passes its safety checks. |
cs2fow_smoke_occlusion |
1 |
Let live smoke block sight. If CS2FOW cannot safely read the smoke data, smoke steps aside while wall protection keeps working. |
cs2fow_he_clear_radius_units |
100 |
Set how wide an HE-opened viewing channel is. Use 0 to turn HE clearing off. |
cs2fow_he_clear_seconds |
2.5 |
Set how long an HE-opened viewing channel lasts. Use 0 to turn HE clearing off. |
cs2fow_filter_teammates |
0 |
Give living teammates the same visibility checks as enemies. FFA mode is detected automatically. |
cs2fow_update_interval_ms |
1 |
Wait at least this many milliseconds before sending another picture of the players to the worker. |
cs2fow_worker_threads |
2 |
Visibility worker threads, from 1 to 4. Changes apply on the next map activation. |
cs2fow_shoulder_base_units |
48 |
Start the left/right shoulder and movement-intention points this far from the player's eye. |
cs2fow_shoulder_rtt_scale |
0.4 |
Add this many units per millisecond of round-trip ping, updated in 25 ms steps. |
cs2fow_max_shoulder_units |
128 |
Never push those ping-scaled viewing points farther out than this. |
cs2fow_visibility_hold_ms |
16 |
Once a player becomes visible, keep them visible for at least this long to prevent flicker. |
cs2fow_debug |
0 |
Save evidence about entity bits CS2FOW actually removed. It does not spam the console. |
If you are keeping an older custom config, give it a quick update. Add sv_enable_donttransmit 0, both HE-clearance settings, and the three shoulder settings above. Remove the old lookahead, prediction-distance, and peek-margin settings; CS2FOW now uses the player's current movement buttons instead.
Automatic baking needs permission to write into addons/cs2fow/data/maps. On Linux, the packaged baker and VRF program also need to stay executable.
- Baked walls and live smoke can block sight. Doors, breakable objects, moving props, particles, projectiles, and other moving things cannot.
- CS2FOW uses current W/A/S/D intent rather than guessing future player positions. A fast target peeking a stationary player may still appear late.
- More ping compensation reduces corner pop-in by moving shoulder and movement-intention checks farther around corners. Smoother peeks cost a little more information.
- The feet point can see through low gaps that the player's eyes cannot. It is intentionally included to reduce late reveals around low geometry.
- Sounds, bomb information, teammate information, last-known positions, and other clues that are not part of the player entity remain available.
- If CS2FOW does not recognize the CS2 server file, it disables itself instead of guessing private memory locations.
- Full-update snapshots are hands-off.
CheckTransmitalso leaves both send lists alone if either required pointer is missing. - Builds and unit tests cannot imitate a real CS2 send list or promise that an engine entity-copy crash is impossible. That still needs testing on a live server.
Troubleshooting
cs2fow_status says AVX is missing: your physical CPU may support AVX while the virtual machine cannot see it. Check that the host exposes both AVX and the operating system's AVX state to the guest.
Automatic bake says permission denied on Linux: restore execute permission, then check whether your mount or container policy blocks the files:
chmod +x game/csgo/tools/cs2fow_baker
chmod +x game/csgo/tools/vrf/linux64/Source2Viewer-CLIWhen the automatic baker or VRF fails, the error includes the newest 8 KiB of their combined output. Cancelling a bake or hitting the timeout also stops the whole child process tree on Windows and Linux, so helpers are not left running in the background.
The server binary does not match: your CS2 update and CS2FOW gamedata do not belong together. Install a CS2FOW build verified for the current Valve server file. There is intentionally no "try it anyway" switch.
A bake is rejected after a CS2 update: Valve probably changed the map's source VPK. CS2FOW compares the saved and mounted file fingerprints, then rebakes instead of trusting an old map copy.
You need to report a bug: include your CS2FOW version, operating system, map, cs2fow_status output, nearby server logs, what the players were doing, and a short clip for visibility or pop-in problems. Those details turn "it broke" into something that can actually be reproduced.
- Code tour: follow the architecture, threads, safety rules, and build and release steps in plain language.
- Visibility Studio: compare legacy LOS points with Valve capsules and simulate CS2FOW's maps, movement, smoke, HE, and visibility decisions locally.
- CS2FOW Map Baker: prepare visibility data from a public Workshop map.
- Bake Service source: inspect the public baking service itself.
Manual baker examples:
cs2fow_baker --game <cs2-root> --map de_dust2 --output de_dust2.bvh8
cs2fow_baker --list-maps --vpk <outer_dir.vpk>
cs2fow_baker --inspect-bvh8 <file>
cs2fow_baker --game <cs2-root> --map workshop/123/de_example --vpk <outer_dir.vpk> --output de_example.bvh8
Generated map files come from Counter-Strike 2 game data, so DATA_NOTICE covers them instead of the project's MIT code license. Core packages include the exact cgltf, ValveResourceFormat 19.2, native-library, and self-contained .NET notices under licenses/. The full legal details are in LICENSE, THIRD_PARTY_NOTICES, and DATA_NOTICE.






