YappersHQ.HitMark.Shared
1.0.1
dotnet add package YappersHQ.HitMark.Shared --version 1.0.1
NuGet\Install-Package YappersHQ.HitMark.Shared -Version 1.0.1
<PackageReference Include="YappersHQ.HitMark.Shared" Version="1.0.1" />
<PackageVersion Include="YappersHQ.HitMark.Shared" Version="1.0.1" />
<PackageReference Include="YappersHQ.HitMark.Shared" />
paket add YappersHQ.HitMark.Shared --version 1.0.1
#r "nuget: YappersHQ.HitMark.Shared, 1.0.1"
#:package YappersHQ.HitMark.Shared@1.0.1
#addin nuget:?package=YappersHQ.HitMark.Shared&version=1.0.1
#tool nuget:?package=YappersHQ.HitMark.Shared&version=1.0.1
<div align="center"> <h1><strong>HitMark</strong></h1> <p>Attacker-only hitmarkers, floating damage numbers, and hitsounds for CS2 — a ModSharp port of cs2-HitMark.</p> </div>
<p align="center"> <a href="https://github.com/Kxnrl/modsharp-public"><img src="https://img.shields.io/badge/framework-ModSharp-5865F2?logo=github" alt="ModSharp"></a> <img src="https://img.shields.io/badge/game-CS2-orange" alt="CS2"> <img src="https://img.shields.io/gitlab/license/cs2-server-plugins/cs2-hitmark?gitlab_url=https%3A%2F%2Fgitlab.com" alt="License"> <img src="https://img.shields.io/gitlab/stars/cs2-server-plugins/cs2-hitmark?gitlab_url=https%3A%2F%2Fgitlab.com" alt="Stars"> </p>
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.
🚀 Install
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.
⌨️ Commands
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) |
⚙️ Configuration
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) |
🔧 How it works
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.
🧩 Public API
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;
📦 Build
dotnet build -c Release
Outputs .build/modules/HitMark/HitMark.dll, .build/shared/HitMark.Shared.dll, and .build/locales/hitmark.json.
🙏 Credits
Port of DearCrazyLeaf/cs2-HitMark by DearCrazyLeaf — all credit for the original concept, particle design, and feature set belongs to them. Licensed under MIT.
<div align="center"> <p>Made with ❤️ by <a href="https://gitlab.com/cs2-server-plugins">yappershq</a></p> <p>⭐ Star this repo if you find it useful!</p> </div>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.