Play Counter-Strike: Source with the Portal Gun, squad-based tactics, reverse-time killcams
Portal Strike brings the mind-bending physics and spatial traversal of Valve's Portal directly into Counter-Strike: Source. Designed as a pristine SourceMod plugin and asset integration engine, Portal Strike adds the Aperture Science Handheld Portal Device (ASHPD) to tactical 5v5 bomb defusal and hostage rescue rounds without altering core game binaries or breaking vanilla weapon balance.
[IMPORTANT] Portal Strike requires legally owned copies of both Counter-Strike: Source and Portal on Steam.
To respect intellectual property and comply with Steam distribution guidelines:
- Zero Copyrighted Valve Assets Bundled: Portal models (
portal1.mdl,portal2.mdl,v_portalgun.mdl,w_portalgun.mdl), authentic Aperture audio cues, particle manifests, and material shaders are not bundled unlawfully in this repository.- Direct Local Extraction: When you run the automated installer (
launch_portal_strike.batorpackage_portal_to_css.py), the tool reads these assets directly from your own legally purchased Portal installation (portal_pak_dir.vpk) and maps them safely into yourcstrike/custom/portal_strike/folder.- Pure Server Whitelist: An official
pure_server_whitelist.txtis automatically placed intocstrike/to ensure your client never experiences model bounds disconnects or consistency kicks.
[F] or [T] (or execute sm_portal_toggle in console) to seamlessly switch between standard firearms and the Aperture Handheld Portal Device.MOUSE1 (+attack): Deploys Portal A (Blue for CT, Orange for T).MOUSE2 (+attack2): Deploys Portal B (Cyan for CT, Yellow for T).point_camera + _rt_Camera) coupled with custom UnlitGeneric glass shaders (portal_1_dynamicmesh.vmt, portal_2_dynamicmesh.vmt).point_viewcontrol) activates for all connected players and spectators.m_flFallVelocity), triggering authentic Source engine fall damage (DMG_FALL).r_aspectratio).portal_strike_release/
├── launch_portal_strike.bat # Unified dynamic launcher (dual-game directory picker & automated installer)
├── package_portal_to_css.py # Automated deployment engine (extracts Portal VPK -> maps into CS:S)
├── portal_strike.sp # SourceMod plugin source code (v1.6.0)
├── portal_strike.smx # Compiled SourceMod plugin binary (v1.6.0)
├── pure_server_whitelist.txt # Server whitelist exempting ported Portal assets
├── tactical_bridge.py # Tactical map bridge & nav sync
├── verify_assets.py # Asset integrity & dual-game installation validator
├── verify_assets.bat # 1-click batch asset verification runner
├── verify_all_maps.py # Multi-map BSP geometry & navigation validator
├── vpk_inspector.py # Native Source VPK parser & asset extractor
└── portal_strike/ # Clean custom mod structure ready for cstrike/custom/portal_strike/
├── materials/models/portals/ # Portal shaders (_rt_Camera UnlitGeneric)
├── scripts/ # weapon_portalgun.txt & sound manifests
└── botprofile.db # AI bot tactical personality database
cstrike/addons/metamod/).cstrike/addons/sourcemod/).launch_portal_strike.bat.[D] to open the Automated GUI Directory Picker. You will be prompted to select:
SteamLibrary\steamapps\common\Counter-Strike Source)SteamLibrary\steamapps\common\Portal)[I] to run the Automated File Placement Engine. The script will:
portal1.mdl, portal2.mdl, v_portalgun.mdl, w_portalgun.mdl) from your Portal VPKportal_1_dynamicmesh.vmt, portal_2_dynamicmesh.vmt -> _rt_Camera)portal_strike.smx directly into cstrike/addons/sourcemod/plugins/pure_server_whitelist.txt into cstrike/[0] to launch CS:S to the Main Menu or select any map number to launch directly into a match with bots.python package_portal_to_css.py --css "<PathToCSS>" --portal "<PathToPortal>" to extract assets from your local Portal copy.portal_strike.smx into:
<Counter-Strike Source>/cstrike/addons/sourcemod/plugins/portal_strike.smx
portal_strike/ into:
<Counter-Strike Source>/cstrike/custom/portal_strike/
pure_server_whitelist.txt into:
<Counter-Strike Source>/cstrike/pure_server_whitelist.txt
| Action | Control / Command | Description |
| :--- | :--- | :--- |
| Toggle Portal Gun | [F] or [T] | Seamlessly switch between firearm and ASHPD mode |
| Fire Portal A | MOUSE1 (+attack) | Deploys Primary Portal (Blue for CT, Orange for T) |
| Fire Portal B | MOUSE2 (+attack2) | Deploys Secondary Portal (Cyan for CT, Yellow for T) |
| Clear Portals | sm_portal_clear | Clears all active portals on the level |
| Aspect Scaling | r_aspectratio | Automatically polled on connect to scale FOV & HUD bounds |