Skip to content

Repository files navigation

SuperPowers

Random per-round super powers for CS2 — 142 abilities across 13 content packs, plus an optional scripted custom-rounds engine

ModSharp CS2 License Stars


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.

🚀 Install

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.

Content packs

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/.

🧩 Dependencies

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).

⌨️ Commands

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.

⚙️ Configuration

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.

🔧 How it works

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.

🧩 Public API

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");

📦 Build

dotnet build SuperPowers.slnx -c Release

Outputs each project to .build/modules/<Project>/<Project>.dll (the two .Shared projects build to .build/shared/<Project>/ instead).



🙏 Credits

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.

📄 License

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!

About

Superpowers gamemode for CS2 — 142 powers across 13 packs, plus a custom-rounds engine.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages