Prophunt turns CS2 into Prop Hunt: hiders disguise as map props and freeze in place while seekers hunt them down before the round timer runs out. It ships as a small suite of ModSharp plugins — a fat Prophunt.Core game-mode engine plus optional modules for ranks, stats, a points shop, achievements, a player HUD, and more — so you can run only the pieces you want. The game mode is a ModSharp re-implementation of the classic SourceMod Prop Hunt mode.
The repo builds 13 plugins. Prophunt.Core is required; the rest are optional and load independently.
| Module | What it does |
|---|---|
Prophunt.Core |
Round flow, hider/seeker logic, prop disguises, freezing, taunts, third-person camera. Required. |
Prophunt.Database |
Shared database provider (SQLite / MySQL / PostgreSQL) consumed by stats/ranks. |
Prophunt.Stats |
Per-player and per-map stats tracking, recent-round log. |
Prophunt.Ranks |
Premier-style rank (0–99999) with ELO-style deltas and scoreboard rank. |
Prophunt.Ranks.StatsExtension |
Bridges rank data into the stats module. |
Prophunt.Achievements |
Unlockable achievements with toast notifications. |
Prophunt.PlayerHUD |
Center-screen HUD (countdown, hiders left, help text, point changes). |
Prophunt.HidingSpots |
Per-map curated prop / hiding-spot models. |
Prophunt.Shop |
Points shop with built-in hider and seeker items. |
Prophunt.Shop.Flash |
Example external shop item — Flashbang. |
Prophunt.Shop.Decoy |
External shop item — Reveal Decoy. |
Prophunt.Shop.Tracker |
External shop item — Hider Tracker. |
Prophunt.Streamer |
Streamer-mode privacy helpers. |
Build (see Build), then copy the build output into your ModSharp install (<sharp> = your sharp directory):
| From | To |
|---|---|
.build/modules/<Module>/ |
<sharp>/modules/<Module>/ |
.build/shared/<Module>.Shared/ |
<sharp>/shared/<Module>.Shared/ |
.build/configs/prophunt/ |
<sharp>/configs/prophunt/ |
.build/soundevents/soundevents/ |
<sharp>/soundevents/soundevents/ |
.build/locales/prophunt.json |
<sharp>/locales/prophunt.json |
Copy only the modules you want — Prophunt.Core is the minimum. Stats/ranks/achievements additionally need Prophunt.Database. The *.Shared interface assemblies must live in <sharp>/shared/ so cross-plugin consumers can resolve them.
Then exec the server cfg from your server.cfg:
exec prophunt.cfg
Restart the server (or change map) to load.
Every command is exposed as a chat command and as a ms_<name> console command. Chat aliases and admin permissions are configured in configs/prophunt/commands.jsonc.
| Command | Aliases | Description |
|---|---|---|
!top |
top10, leaderboard |
Top 10 leaderboard |
!rank |
stats |
Your rank and stats |
!mapstats |
Stats for the current map | |
!recent |
lastround |
Recent round results |
!achievements |
ach |
Your achievements |
!wp |
ws |
Shop / weapon-points menu |
!hud |
Toggle the HUD | |
!hide |
prop, model |
Open the prop/model selection menu |
!tp |
thirdperson, third |
Toggle third-person camera |
!freeze |
Freeze in place as a prop | |
!taunt |
t, whistle, w |
Play a taunt |
!ct |
seek |
Join the seeker team |
!whoami |
Show your current role | |
!rotatestep |
rotstep, rstep |
Cycle prop rotation step size |
!pickprop |
Pick the prop you're aiming at (when enabled) |
| Command | Aliases | Permission |
|---|---|---|
!adminprop |
prophunt:pick_any |
|
!resetstats |
prophunt:admin |
|
!setrank |
prophunt:admin |
|
!givepoints |
prophunt:admin |
|
!givereroll |
giverer, giverr |
prophunt:admin |
!setrerolls |
setreroll |
prophunt:admin |
!phtaunt |
forcetaunt, ftaunt |
prophunt:admin |
!phreroll |
forcereroll, freroll |
prophunt:admin |
!phtoggletaunts |
disableforcetaunts, tauntstoggle |
prophunt:admin |
!listmodels, !scanmodels, !propinfo, !gotoprop, !propdebug |
prophunt:debug |
Tunables are ModSharp auto-exec ConVars (prefix ph_), written to a generated cfg on first run. A selection:
| ConVar | Default | Meaning |
|---|---|---|
ph_enabled |
true |
Enable Prophunt |
ph_hide_time |
30 |
Hide time in seconds before seekers are released |
ph_auto_freeze_time |
10 |
Seconds of no movement before auto-freeze |
ph_min_players |
2 |
Minimum players to start a round |
ph_hider_models |
5 |
Random models shown in the selection menu |
ph_hider_rerolls |
3 |
Max rerolls per round (RELOAD key) |
ph_prop_damage |
25 |
Base damage per hit on props |
ph_player_prop_pick |
false |
Allow any hider to pick any prop via !pickprop |
ph_points_seeker_kill |
20 |
Points for killing a hider |
ph_forced_taunt_enabled |
true |
Scheduled forced taunts during hunting |
ph_forced_taunt_period |
60 |
Seconds between scheduled forced taunts |
ph_chat_prefix |
[PropHunt] |
Chat prefix (supports {color} placeholders) |
Many more cover wall-freeze geometry, hider/seeker speeds, taunt economy and overload, third-person camera, HUD elements, and glow visibility — see Prophunt.Core/Configuration/ProphuntConfiguration.cs for the full list with ranges. Per-map prop sets live in configs/prophunt/maps/.
At round start players split into hiders (T) and seekers (CT). Hiders pick a prop model and can freeze in place to blend in; seekers are held for ph_hide_time seconds, then released to find and destroy the disguised hiders before the round timer expires. A taunt economy nudges hiders to reveal their position (scheduled and forced taunts, with an overload punishment for spamming). Stats, ranks, achievements, and the points shop are layered on as separate plugins that talk to Prophunt.Core through shared interfaces. Outstanding gameplay parity items vs. the original mode are tracked in docs/TODO.md.
Modules talk to each other through *.Shared interface assemblies, resolved in OnAllModulesLoaded. For example, an external shop item plugin consumes the shop service:
var shop = sharpModuleManager
.GetOptionalSharpModuleInterface<IShopService>(IShopService.Identity)?.Instance;Prophunt.Shop.Flash, Prophunt.Shop.Decoy, and Prophunt.Shop.Tracker are working examples of registering custom shop items against this API. Other shared contracts: IProphuntShared, IRankService, IStatsService, IAchievementService, and IDatabaseProvider.
dotnet build Prophunt/Prophunt.slnx -c ReleaseOutputs land under Prophunt/.build/:
modules/<Module>/<Module>.dll— the loadable pluginsshared/<Module>.Shared/— shared interface assembliesconfigs/,soundevents/,locales/— runtime assets
A ModSharp re-implementation of the classic SourceMod Prop Hunt game mode (originally by Zipcore), with gameplay reference from community Prop Hunt VScript implementations.
Made with ❤️ by yappershq
⭐ Star this repo if you find it useful!