Discord server: Permanent Link
It has been started from a fork of from nillerusr, a huge thanks to him for having port most of the valve project generator stuff to waf.
First install dependencies: https://github.com/nillerusr/source-engine/wiki/Source-Engine-(EN)
You also need:
- dxvk native library
- zstd library
To compile for CS:S Enhanced a command line can look like so:
./waf configure clangdb install -p -o build -T fastnative --prefix ./gamedata/css_enhanced/game
clangdbgenerates compilation database for LSPinstallinstalls into the prefix../css_enhancedthe binaries-T fastnative, compiler build the source code for a performance oriented release for your specific machine.-dfor dedicated (server) build.-P <0-4>is to enable profiling with different levels, 1 is usually enough if you want to know what takes more framerate.
- Compile the game as above.
- Run the game with css_enhanced(.exe).
- I have my own server at cssserv.xutaxkamay.com, when it isn't down.
A lot! Here is a comprehensive list of the core changes and enhancements based on our codebase rework:
- Precise Float Encoding: Network compression (quantization) on floats was mostly removed, so the client receives full 32-bit exact values from the server, avoiding coordinate and rotation precision loss.
- ZSTD Compression: Implemented ZSTD compression with pre-trained dictionary data for entity updates, compressing/decompressing very fast for an excellent ratio (around 1/10).
- TCP Snapshots: Added option (
sv_send_snapshot_on_tcp) to send reliable entity snapshots via TCP instead of UDP. Previously, if UDP packets containing entity updates were lost, the client would lack the data needed to interpolate entity positions. Because the client missed this history while the server maintained the true state, lag compensation would completely break down during packet loss. Sending snapshots asynchronously via TCP ensures the client always receives the entity updates, guaranteeing perfectly reliable lag compensation. - Tick Synchronization (TODO): The server now sends back the client's perceived tick in
NET_Tickto precisely manage clock drift. Snapshot tick IDs and command queue info are also tracked. (Note: This feature is still a work-in-progress) - Increased Network Limits: Network rate limit raised drastically (up to 64 MB/s), frame history increased for better lag compensation window, and max user message size increased to support larger game events.
- Trigger & Output Event Prediction: Client-side trigger and solid movement prediction (trigger_push, trigger_multiple, trigger_teleport ...). This eliminates the classic "mismatching between server and client" console warnings and interaction delay. (Note: Output event prediction still misses
logic_*entities and some others like doors, buttons). - Local Player Interpolation: Completely rewritten to be time-based (
cl_interpolation_amount) rather than ratio-based. Additionally, interpolated network variables for the local player are now explicitly calculated during prediction and user command processing usinginterpolation_amount_frac, ensuring perfectly accurate interpolation across all framerates without relying on sub-ticks. - Lag Compensation Overhaul: The entire server-side lag compensation system was rewritten from scratch. Instead of the old system that just stored basic position data, it now uses a proper interpolation framework that smoothly tracks everything: player positions, angles, animations, and movement states. This means the server can accurately reconstruct exactly what the client saw at any point in time, resulting in much more reliable hit registration. The system is also designed to eventually support lag compensation for non-player entities like moving platforms and triggers.
- View Angle Synchronization: The mouse view angle update (
CL_ExtraMovementUpdate) was moved to occur before frame processing instead of after. Previously, the rendering view was always one frame ahead of the view angles sent to the server inCreateMove, causing a constant mismatch. This change ensures the server's view perfectly synchronizes with what you see on screen. - No Autobhop Lag: Bunnyhopping movement operates perfectly smoothly.
- Unlimited FPS:
fps_max 0is now possible without triggering speedhacking false positives, allowing framerates well over 1k FPS. - Input System Performance: Removed the legacy Windows raw input system processing when in fullscreen mode, reclaiming around ~300 FPS.
- DXVK Integration: Added native SDL windowing flags to support DXVK rendering paths.
- Dynamic Game Events: The network serialization for game events (
IGameEvent) was completely rewritten. Instead of relying on strict schema definitions (.resfiles) where the client and server must agree on the event structure beforehand, events are now serialized dynamically over the network (sending key names and types on the fly). This allows attaching arbitrary data to events without engine restrictions, powering new events likebullet_impact,bullet_hit_player, andplayer_lag_hitboxes. - New Weapon: Added the Barrett M82A1 sniper rifle.
- Separate RCON Port: RCON traffic has been moved to a separate dedicated port (27024) instead of sharing the main game traffic port.
- Build & CI/CD: Added automated GitHub Actions prerelease workflows for Windows and Linux AMD64, along with comprehensive
.clang-formatrules for modern C++ styling.
- New Weapons: Expanding the arsenal (e.g., Gluon Gun).
- Shareable Custom Skins: A system allowing players to use their own skins and have them visible to other players on the server.
- Advanced Replay & SourceTV: Upgraded demo recording and SourceTV that perfectly recreates the player's perspective by re-using lag compensation data.
- Enhanced Hit Indicators: Continued improvements to hit feedback (e.g.,
cl_enable_hitmarks). - Hitbox Upgrades: Moving towards sphere/cylinder-based hitboxes for better precision.
- Engine Bug Fixes: Patching long-standing engine quirks like edge bugs and surf ramp bugs.
- Social Features: Implementing Avatars and a Clan system.
- In-Game Timer: A built-in timer for speedrunning/movement modes.