Random per-round super powers for CS2 — 142 abilities across 13 content packs, plus an optional scripted custom-rounds engine
SuperPowers rolls every player a random super power at the start of each live round — from lifesteal bites and instant-kill knives to grappling hooks, invisibility, and time rewinds. Built for the ModSharp framework, the abilities themselves ship as 13 separate content packs (142 powers total) that register into a lean Core module handling the round-start draft, HUD, and admin tools. An optional companion module, CustomRounds, can hijack a round entirely for scripted team/mirror-pool power sets, combos, and loadout overrides.
Copy the build output into your ModSharp install (<sharp> = your sharp directory):
| From | To |
|---|---|
.build/modules/SuperPowers.Core/ |
<sharp>/modules/SuperPowers.Core/ |
.build/shared/SuperPowers.Shared/ |
<sharp>/shared/SuperPowers.Shared/ |
.build/modules/SuperPowers.Pack.<Name>/ (one per pack, see below — you need at least one) |
<sharp>/modules/SuperPowers.Pack.<Name>/ |
.build/locales/superpowers*.json |
<sharp>/locales/ |
.build/configs/superpowers/sp_sounds.json |
<sharp>/configs/superpowers/sp_sounds.json |
Optional companion module (round-hijacking engine, see How it works):
| From | To |
|---|---|
.build/modules/SuperPowers.CustomRounds.Core/ |
<sharp>/modules/SuperPowers.CustomRounds.Core/ |
.build/shared/SuperPowers.CustomRounds.Shared/ |
<sharp>/shared/SuperPowers.CustomRounds.Shared/ |
Everything else (sp_core.cfg, per-power .cfg files, superpowers.customrounds.json) is
auto-generated on first load — see Configuration. Restart the server (or change
map) to load.
| Pack | Powers | Theme |
|---|---|---|
SuperPowers.Pack.CombatActive |
10 | Active melee/ranged attacks and on-hit combat tricks (Dracula, Assassin, Catapult, Pyro…) |
SuperPowers.Pack.CombatPassive |
12 | Passive combat modifiers — aim, armor, extra lives, damage rules (Aimbot, SecondLife, Thorns, Armored…) |
SuperPowers.Pack.Creatures |
10 | Monster-themed powers — venom, webs, egg sentries, roars (AcidTrail, Broodmother, WebTrap…) |
SuperPowers.Pack.Disruption |
15 | Debuffs and economy disruption against enemies — bans, money swaps, cripples (JumpBan, Bankrupt, Hex, Sloth…) |
SuperPowers.Pack.Grenades |
14 | New grenade/utility-throw variants and effects (HolyHandGrenade, MeteorStrike, RCMelon, ToxicSmoke…) |
SuperPowers.Pack.Health |
11 | Healing, revives, and life manipulation (Medic, Overcharge, Phoenix, Defibrillator, GodMode…) |
SuperPowers.Pack.Movement |
11 | Speed, jumps, noclip, size changes (Dash, BunnyHop, Astronaut, Dwarf, Noclip…) |
SuperPowers.Pack.Sound |
6 | Audio-based powers — flashes, muting, sound cues (KillerFlash, Deaf, Mute, SoundMaker…) |
SuperPowers.Pack.Special |
22 | Unique mechanics that don't fit elsewhere — grapples, time control, deployables (Rewind, Wormhole, GrapplingHook, TimeBomb…) |
SuperPowers.Pack.Stealth |
5 | Concealment — invisibility, disguise, silent movement (Ghost, Invisible, Ninja, Impostor…) |
SuperPowers.Pack.Teleport |
8 | Teleportation and positional tricks — swaps, blinks, spawns (Teleporter, SwapPosition, Earthquake, Glitch…) |
SuperPowers.Pack.Vision |
8 | Wallhacks, zoom, radar and tracking (Wallhack, SniperElite, RadarHack, ThirdEye…) |
SuperPowers.Pack.Weapons |
10 | Weapon modifiers — recoil, ammo, weapon swaps (Zeus, NoRecoil, InfiniteAmmo, RandomWeapon…) |
Each pack is its own module DLL that registers its powers into Core's IPowerService — install any
combination of them. Full power list: browse packs/SuperPowers.Pack.<Name>/Powers/.
Uses the ModSharp first-party modules (ship with ModSharp): LocalizerManager (all chat/HUD
text — optional, calls silently no-op without it), MenuManager (the ms_power picker and
category submenus — optional, admin falls back to a "MenuManager is not available" message),
AdminManager (permission gating for ms_power/ms_cr — optional, admin commands simply aren't
registered without it), TargetingManager (target-string resolution for ms_power <target> <id>
— optional, falls back to a plain name-substring match), and InputManager (binds the F key to the
active-skill hook — optional, the ms_useskill console command remains the fallback trigger).
SuperPowers.CustomRounds.Core additionally requires SuperPowers.Core to be loaded — it
resolves ISuperPowersShared in OnAllModulesLoaded and disables itself (logging an error) if Core
isn't present.
External plugins:
| Plugin | Required? | Why |
|---|---|---|
| AdminPanel | ⚪ Optional | Adds "Assign Power" / "Remove Power" / "Reroll Power" as clickable per-player actions in AdminPanel's in-game admin menu. Fully null-guarded — SuperPowers works standalone without it. |
Bundled: MessagePipe (in-process pub/sub for round and skill lifecycle events — ships inside the module).
Player:
| Command | Description |
|---|---|
ms_useskill |
Activates your assigned power's active ability (only powers with an active skill respond). Bound to the F key automatically when InputManager is loaded; this console command is always available as a fallback/alternative. |
Admin (permission-gated). ModSharp's CommandCenter registers each of these under two names: the
bare form for chat/client console (!power), and an ms_-prefixed twin for the server console /
RCON (ms_power) — both call the same handler:
| Command (chat/client) | Command (server console) | Permission | Description |
|---|---|---|---|
!power |
ms_power |
superpowers:admin:power |
No args → open the power-picker menu for yourself. One arg → a power id to self-assign, or a target to open the picker for. Two+ args → <target> <powerId> to assign directly. |
!cr |
ms_cr |
customrounds:admin:manage |
CustomRounds only. <round-id> forces that round next, list lists enabled rounds, reload reloads superpowers.customrounds.json. |
Debug commands (all players, only when sp_testing_mode 1): .testhide [slot|off] hides a player
from all radars, .testspot [slot|off] spots enemies on your radar, .testblind [off] blocks radar
UserMessage delivery to yourself, .testjumpban toggles the JumpBan debuff on yourself.
configs/superpowers/sp_core.cfg (auto-generated on first run):
| Setting | Default | Meaning |
|---|---|---|
sp_game_mode |
0 |
Power-assignment mode: 0=Normal, 1=TeamSkills, 2=SameSkills, 3=NoRepeat, 4=FullRandom, 5=Debug. |
sp_skill_draw_duration |
3.0 |
Seconds the slot-machine "drawing" animation runs before a power is granted. |
sp_hud_display_duration |
10.0 |
How long the assigned-skill HUD stays visible after assignment. |
sp_round_summary |
true |
Show the end-of-round summary of who got what power. |
sp_show_teammate_skills |
true |
Show teammates' skills in the HUD. |
sp_testing_mode |
false |
Exposes the .testhide/.testspot/.testblind/.testjumpban debug commands to all players. |
sp_sound_drawing_tick |
"" |
Sound path played each tick during the drawing animation (empty = disabled). |
sp_sound_reveal |
"" |
Sound path played when a power is revealed. |
sp_sound_skill_use |
"" |
Sound path played when an active skill is used. |
sp_sound_skill_ready |
"" |
Sound path played when cooldown expires and the skill becomes ready. |
Every power also auto-generates its own configs/superpowers/sp_<power-id>.cfg with a common set of
ConVars — sp_<id>_enabled, sp_<id>_color, sp_<id>_team (0=any/2=T/3=CT), sp_<id>_maptype
(0=any/1=de_/2=cs_), sp_<id>_freeze_disabled, sp_<id>_needs_teammates — plus whatever
power-specific tuning ConVars that power adds on top.
configs/superpowers.customrounds.json (auto-generated on first run, CustomRounds only):
| Setting | Default | Meaning |
|---|---|---|
Settings.ChancePercent |
8 |
% chance each round to roll a custom round instead of a normal draft (never on the match's first round). |
Settings.CooldownRounds |
3 |
Minimum normal rounds required between two custom rounds. |
Settings.AnnounceSeconds |
5 |
How long the custom round's reveal win-panel stays up. |
Combos / Rounds |
built-in defaults | The actual combo-power and round definitions (per-team/mirrored-pool/role-sequence modes, loadout/health/ConVar overrides, reroll interval) — fully data-driven and hand-editable; reload live with ms_cr reload. |
configs/superpowers/sp_sounds.json (shipped, not auto-generated) lists .vsndevts sound-event files
precached on map start so powers can reference stock UI/general/jailbreak/ttt sound events without
their own precache entry.
At the start of every live round (skipped during warmup), RoundManager rolls each T/CT player a
power from all currently-enabled registered powers, filtered by that power's per-map-type
(de_/cs_/any) and per-team restriction and by the sp_game_mode assignment mode. The pick is
revealed through a slot-machine "drawing" animation before IPower.OnAssigned actually grants it, and
a power only receives the specific game-event callbacks it declares via RequiredHooks — every other
power sits out that dispatch. Powers activate their active ability (if any) by pressing F or
running ms_useskill, and PlayerManager resets known player state (speed, gravity, model scale,
health cap, transmit hooks) as a safety net whenever a power is removed.
Before the random roll happens, SuperPowers publishes a PowerAssignmentStartingEvent that
subscribers can intercept synchronously. The optional SuperPowers.CustomRounds module listens here:
on a configurable random chance (and cooldown), it can override the whole round with a scripted power
set — everyone the same power, a per-team pool, or a role-sequence mirrored across both teams — plus
optional weapon/health/ConVar overrides and a periodic reroll timer. SuperPowers.Core has no
knowledge of CustomRounds; it only sees the overrides the event handler fills in.
Other plugins consume ISuperPowersShared (resolve in OnAllModulesLoaded):
var superPowers = sharpModuleManager
.GetOptionalSharpModuleInterface<ISuperPowersShared>(ISuperPowersShared.Identity)?.Instance;
var powerService = superPowers?.GetPowerService(); // register/assign/query powers
var sub = superPowers?.Subscribe<SkillActivatedEvent>(e => { /* e.Slot, e.PowerId */ });The optional CustomRounds module exposes its own ICustomRoundsService the same way, for forcing or
programmatically registering rounds:
var customRounds = sharpModuleManager
.GetOptionalSharpModuleInterface<ICustomRoundsService>(ICustomRoundsService.Identity)?.Instance;
customRounds?.ForceNextRound("chaos");dotnet build SuperPowers.slnx -c ReleaseOutputs each project to .build/modules/<Project>/<Project>.dll (the two .Shared projects build to
.build/shared/<Project>/ instead).
The power roster originates with Juzlus/jRandomSkills
(GPL-3.0), a CounterStrikeSharp plugin. 104 of the powers here carry an Original: reference to a
specific file in it — the roster, the mechanics and much of the behaviour are theirs, and this project
would not exist without that work. Ours are ModSharp rewrites rather than line-by-line translations
(different framework, different APIs, different lifecycle), but that does not make them independent.
GPL-3.0, because the work this derives from is GPL-3.0 and a derivative must carry the same terms.
See LICENSE.
Made with ❤️ by yappershq
⭐ Star this repo if you find it useful!