Attacker-only hitmarkers, floating damage numbers, and hitsounds for CS2 — a ModSharp port of cs2-HitMark.
HitMark spawns a particle hitmarker at the bullet impact point, floating per-digit damage numbers, and an optional hitsound — all rendered only for the attacker on each hit, with separate styling for headshots vs bodyshots. It's a ModSharp port of DearCrazyLeaf/cs2-HitMark.
Copy the build output into your ModSharp install (<sharp> = your sharp directory):
| From | To |
|---|---|
.build/modules/HitMark/ |
<sharp>/modules/HitMark/ |
.build/shared/HitMark.Shared.dll |
<sharp>/shared/HitMark.Shared.dll |
.build/locales/hitmark.json |
<sharp>/locales/hitmark.json |
.build/particles/ |
your map/workshop particle path |
Restart the server (or change map) to load. Requires the LocalizerManager module (ships with ModSharp).
The repo does not bundle
.vpcfparticle assets — the upstream plugin doesn't ship them publicly. Damage numbers default to theparticles/digits_x/digits_x.vpcfatlas; supply your own hitmark particles and pointhm_headshot_particle/hm_bodyshot_particleat them.
Per-player toggles, stored client-side:
| Command | Aliases | Description |
|---|---|---|
hitmark |
hm |
Toggle hitmark particles on/off |
hitsound |
hm_sound |
Toggle hitsound on/off |
dmg |
damage |
Toggle floating damage numbers on/off |
hmtest |
— | Spawn the configured hitmark particle at your crosshair (for tuning) |
ConVars are written to <sharp>/configs/hitmark.cfg on first run (one // help line per setting); edit values there and they're re-applied on every load.
| ConVar | Default | Meaning |
|---|---|---|
hm_enabled |
true |
Master enable/disable |
hm_headshot_particle |
"" |
Particle system for headshot hitmark |
hm_bodyshot_particle |
"" |
Particle system for bodyshot hitmark |
hm_headshot_duration |
0.2 |
Headshot particle lifetime (seconds) |
hm_bodyshot_duration |
0.2 |
Bodyshot particle lifetime (seconds) |
hm_distance |
60 |
Crosshair projection distance (units) for the hitmark |
hm_hitmark_glyph_cp |
3 |
digits_x atlas frame (CP32, 1-indexed) used as the hitmark glyph |
hm_hitmark_scale |
0.04 |
Hitmark particle scale (CP34) |
hm_hitmark_yoffset |
0.0 |
Hitmark vertical screen offset (DataCP33 Y) |
hm_hitmark_color |
255 255 255 |
Bodyshot hitmark color R G B (CP16) |
hm_hitmark_color_headshot |
255 0 0 |
Headshot hitmark color R G B (CP16) |
hm_damage_digits_enabled |
true |
Show floating damage numbers |
hm_damage_particle |
particles/digits_x/digits_x.vpcf |
digits_x atlas .vpcf for damage numbers |
hm_damage_ring_radius |
3.5 |
Radius of the 8-point damage ring around the crosshair (DataCP33 units) |
hm_damage_scale |
0.04 |
Damage digit scale (CP34) |
hm_damage_color |
0 255 255 |
Damage number color R G B |
hm_damage_duration |
0.6 |
Damage number lifetime (seconds) |
hm_damage_spacing |
1.1 |
Spacing between damage digits (DataCP33 units) |
hm_headshot_sound |
"" |
Sound event played to attacker on headshot (empty = off) |
hm_bodyshot_sound |
"" |
Sound event played to attacker on bodyshot (empty = off) |
hm_max_particles_per_player |
30 |
Max simultaneous hitmark particles per player (0 = unlimited) |
On each damage event the plugin spawns view-anchored particle systems for the attacker only — the hitmark and damage digits are driven by control points on the digits_x atlas (CP16 color, CP32 atlas frame, CP34 scale, DataCP33 placement). Headshots and bodyshots use independent particle, color, sound, and lifetime settings, and a per-player cap limits how many hitmark particles can exist at once.
Other plugins consume IHitMarkShared (resolve in OnAllModulesLoaded) to veto rendering for specific clients via the CanShowFor event:
var api = sharpModuleManager
.GetOptionalSharpModuleInterface<IHitMarkShared>(IHitMarkShared.Identity)?.Instance;
// Return false to suppress HitMark visuals for this client.
api!.CanShowFor += client => /* your condition */ true;dotnet build -c ReleaseOutputs .build/modules/HitMark/HitMark.dll, .build/shared/HitMark.Shared.dll, and .build/locales/hitmark.json.
Port of DearCrazyLeaf/cs2-HitMark by DearCrazyLeaf — all credit for the original concept, particle design, and feature set belongs to them. Licensed under MIT.
Made with ❤️ by yappershq
⭐ Star this repo if you find it useful!