Feature overview
This page summarizes CSRetro as a product: what is integrated, what is unique to this tree, and where to read details. It is not a full cvar listing—use Client CVARs, Server CVARs, and the component pages for tables.
For build commands and directory layout, see Building and Architecture. Component SHAs: Vendor table (VENDOR.md).
Product scope and repository model
- Game: Counter-Strike 1.6 ruleset and assets (
cstrike), driven by ReGameDLL_CS (server DLL) and cs16-client (client DLL + menu). - Architecture: 64-bit only on Linux, Windows, and macOS—no x86, no Android/console as CSRetro product targets.
- Monorepo: Engine (Xash3D FWGS fork), client, ReGameDLL_CS (under
client/3rdparty/), Metamod-fwgs, and AMX Mod X are vendored full source in this repository (no gameplay-critical Git submodules). - Design goal: Classic CS expectations for gameplay and feel; avoid unnecessary modernization that changes player-visible behavior (see project architecture rules).
Build system, install, and versioning
| Area | What CSRetro provides |
|---|---|
| Entry point | ./tools.sh — build:full, build:engine, build:release, install:assets, install:engine, run:game, run:server, and helpers documented in Building. Optional: ./tools/install-git-hooks.sh installs commit-message sanitization hooks for contributors. |
| Toolchains | CMake for client/server/install; Waf for the engine under engine/; presets enforce 64-bit. |
| Assets | install:assets pulls or copies Half-Life + CS data (Steam or path); game-test/cstrike/ is the usual runtime tree. |
| Revisions | Root VENDOR.md is baked into builds; csr version prints client + server component identifiers in-game and in server console. |
| Shipping | SemVer in repo-root VERSION and CHANGELOG.md; maintainer workflow (release-please, GitHub Releases, CPack) is Release process — not duplicated here. |
Engine (Xash3D FWGS)
- Compatibility: GoldSrc-style entity model, networking, and client/server split; protocol notes in vendored
engine/Documentation/. - Rendering: OpenGL reference renderer (
ref_gl) in standard desktop builds; software and GLES trees exist upstream for portability. - Audio: 3D spatial sound, voice, mixing; channel lifecycle includes a grace period before freeing briefly inaudible non-looping sounds (merged from upstream intent; see Upstream imports (2026-04)).
- Studio / TriAPI: Backface culling for studio meshes respects TriAPI-disabled culling when mods turn culling off (merged fix; issue context in upstream #2517).
- Filesystem: GoldSrc-style search paths, archives, optional env overrides—see Engine.
- Servers: Listen and dedicated; IPv6 and upstream networking options where enabled.
Client DLL (cs16-client fork)
Team radar and overview (CSRetro-specific stack)
This is not only the stock mini-radar: CSRetro ships a configurable dynamic radar panel and an optional GoldSrc overview pipeline in client/cl_dll/hud/radar.cpp, tuned for desktop and aligned where practical with common Metadrawer-style layout (md_drawradar defaults for panel size/position). Reference PNGs and acceptance notes: MetaDrawer screenshot matrix.
| Topic | What CSRetro implements |
|---|---|
| Panel | Fractional screen placement (cl_radar_x / cl_radar_y), default 180×180 px area (or cl_radar_size_screen_frac for resolution-relative square size), alpha, optional border and rounded corners (cl_radar_border_radius), optional circular blip clipping (cl_radar_circle) — see Players § Radar. |
| Classic fallback | cl_radar_width 0 switches to the legacy top-left sprite radar only; cl_radar_enable 0 hides all radar UI. |
| Map overview | When cl_radar_overview is on and the map provides cstrike/overviews/<map>.txt plus the referenced sprite, the HUD draws top-down map tiles in an inner rectangle inset from the panel (map does not paint over the frame). Dark panel behind tiles in overview mode vs light fill for pure schematic mode. |
| Full-map vs local “GPS” | cl_radar_overview_radius: ≤ 0 = full-map letterbox style; > 0 = local world radius around the player (zoomed GPS-style; lower = tighter zoom). cl_radar_overview_scale adjusts zoom (in local mode: zoom only). Local mode always rotates with view yaw; cl_radar_overview_rotate applies to full-map only (north-up vs player-centric). |
| Edge blips | cl_radar_overview_edge_blip dims blips that are clamped to the radar edge when outside the world radius (local overview), so off-screen contacts are still readable. |
| Failure modes | Missing/invalid overview data or unsupported rotated overview in .txt → automatic fallback to schematic WorldToRadar blips (same coordinate family as classic CSRetro radar). |
| Team enemy spots & smoke (server-fed) | ReGameDLL sends RadarCont (per-enemy state: visible / lost / clear) and RadarSmk (smoke cloud centres) on a throttled interval. LOS uses FVisible; when the bot manager is available, smoke can block spotting the same way bots use IsLineBlockedBySmoke. Server cvars: sv_radar_enemies (default 0, opt-in CS2-style), sv_radar_smoke (default 1). See Radar vs CS2 inspiration. |
| Client overlays | FOV wedge (cl_radar_fov_cone), footstep noise ring from local 2D speed (cl_radar_noise_circle, cl_radar_noise_scale), teammate model hue from GetPlayerInfo → topcolor, dead teammates as an X at last cached position, enemy red blip / ? when lost, grey smoke circles (cl_radar_smoke_overlay) — see Players § Radar. |
| Aim ping | csr_aimping markers (gold cross + height) use the same blip/radar pipeline as teammates and bombs — not a separate hack. |
| Location text | When the Location user message sets a non-empty string for the local player, cl_radar_location_show draws a centered label under the dynamic panel (MetaDrawer showLocation / locationY / text RGB). Classic sprite radar (cl_radar_width 0) still uses the CZ-only path for the label under the top-left sprite. |
Config hygiene: tools.sh may append default radar/overview lines to game-test/.../config.cfg only if missing; user config.cfg is not wholesale replaced — use userconfig.cfg for personal defaults (Players).
Other HUD surfaces
- Scoreboard / buy / spectator: Standard CS HUD flows; spectator menus ship with
game-testrefresh. The scoreboard does not capture the mouse or block look while Tab is held; right-click a row to toggle voice squelch (same path as the voice ban manager). An ADR column (cl_scoreboard_adr) shows a client-side estimate for the local player (weapon-based damage from kill notices, divided by a round counter driven byRoundTimemessages). Widescreen margins for the scoreboard panel use slightly narrower side padding on very wide resolutions.
Chat and localization
- SayText: Handles localized format strings, indexed placeholders (
%s1style stripped forsnprintf), empty nickname fallback viaGetPlayerInfo, and team/dead/spectator filtering—see Velaron/cs16-client-aligned behavior in client sources.
Crosshair, HUD colour, audio feedback
- Extended crosshair (
xhair_*), HUD colour (hud_color, etc.), optional kill sound (cl_killsound*), version banner (csretro_ver)—Players, Client CVARs.
MOTD and team selection
- Ordered flow: Grace period, MOTD completion before touch team chooser (avoids menu overlapping MOTD); HTML MOTD discarded; dismiss keys documented in Players.
cl_hide_motdto skip MOTD for debugging.
Main menu
mainui_cpp(CS menu) and engine mainui integration; launcher patterns in Client.
Server game logic (ReGameDLL_CS)
- Classic CS: Rounds, bomb/defuse, hostages, VIP, economy, weapons, and ReGameDLL mp_ / sv_ rules—Server CVARs.
- Native CSRetro commands (game DLL, no AMXX required for baseline):
csr version,csr_botmenu,csr_commandmenu,csr_aimping,csr_aimping_enemy,csr_aimping_bomb—see Players and Server administrators.
CSR Bot and navigation
- Single integrated bot class (CSR Bot) in
csr_cstrike_*—not a separate Metamod bot DLL. - Valve nav mesh (
.nav) + CSR graph (.csrnav, optional embedding in.nav) for pathfinding, combat, buy, practice/danger data. - Menus:
csr_botmenu— bots, difficulty, teams, nav tools (mesh/graph), CSR target weights (bot_csr_target_*), debug pages. - Tooling:
nav2csrnav,tools/csrnav/, optionaltools/csr_bot_tune_sweep.pyfor offline tables—CSR Bot & Navigation.
Aim ping (csr_aimping) — team coordination
- World sprite ping from crosshair trace; rate limits and per-round caps (
mp_aimping_*). - CSR bots within radius: one high-level reaction per ping (move, hunt, attack, follow, etc.)—tunable target and aimping cvars.
- Humans: HUD line, radar marker, scoreboard “Ping” column, optional sound—see Players.
- Variants:
csr_aimping_enemy(last-seen / enemy spot),csr_aimping_bomb(bomb-focused trace); optional radio slot takeover (mp_aimping_use_radio_slots).
Command menu
csr_commandmenu: Classic H-style ShowMenu command menu; configurable viacsr_commandmenu.ini(installed underdata/cstrike/).+commandmenu/-commandmenufor binds—Players.
Metamod
- metamod-fwgs as game DLL loader;
metaconsole commands (meta list,meta load, …)—Metamod, Server administrators.
AMX Mod X
- Vendored AMXX built as Linux x64 Metamod plugin; cstrike-focused configs and gamedata in this tree—AMX Mod X, AMX Mod X – CSRetro.
Documentation and automation
- MkDocs handbook (
docs/, Material theme), GitHub Pages frommain. - CI: Build, docs, release workflows under
.github/workflows/. - Upstream sync notes: Selected engine/client merges documented in Upstream imports (2026-04).
See also
- Reference hub — audience index.
- Documentation coverage — topic matrix.
- Credits — upstream attribution.