VBSP++
Jump to navigation
Jump to search

This article or section is a stub. You can help by expanding it.
Developer(s)
Initial release
Jun 28, 2025
Stable release
Sep 11, 2026
Type
Map compiler
Distribution
Freeware
Website
Download
VBSP++ is a community-made modification of Source's VBSP developed by ficool2.
Differences
- Reduces brushes and brushsides usage of the map by 10-30% (
MAX_MAP_BRUSHES,MAX_MAP_BRUSHSIDES)- Note: this reduction will be applied once the map exceeds the limit
- Reduces vertex usage of the map by 10-30% (
MAX_MAP_VERTS)- Note: this reduction will be applied once the map exceeds the limit
- You can also use the new
-cullvertsparameter to always reduce verts even if the limit isn't exceeded
- Automatically reduces planes usage of the map up to 40% if limit is hit (
MAX_MAP_PLANES)- If plane limit is exceeded, VRAD++ must be used or lighting will be broken
- No t-junction limit
- No detail prop limit
- Raised overlay limit to 8192 and internal entity limit to 65536
- Increased maximum switchable lights from 32 to 96
-leaktestis now enabled by default, i.e. stops compile on leaks- Added
-noleaktestto disable this behavior
- Added
- Added AppID mounting in
gameinfo.txt - Added support for mounting custom shaders in mods
- Added support for custom
$surfaceprops on clip brushes - Added support for compiling 4-way blends (for games that support it)
- Added support for reading model vertex formats from newer games (
CS:GO) - Added func_detail_blocker (like newer VBSPs)
- Added
-blocksize(default is 1024)- Useful to compute visibility faster on open, large maps like surf (I recommend 2048)
- Using a higher blocksize also reduces your vertex count, useful to circumvent vertex limit
- Added
-allowdynamicpropsasstatic(allows any props to used as static props)
- Note that some props might not work right with this, particularly props that aren't compiled with $staticprop
- Added per-prop ambient occlusion toggle
- To use, set
disableambientocclusion 1keyvalue on the entity - Does not work on HL2/Singleplayer BSPs due to older static prop format
- To use, set
- Added proper support for compiling power of 4 displacements (like CS:GO)
- Added parallax_obb entity support for mods that have parallax cubemaps
- Also inserts extra data for PCC on models
- Warns you if the entity is setup incorrectly
- Added func_detail_illusionary (identical to func_detail but non solid)
- Added
%CompileNoShadows - Added func_nobevel support
- Added
-nobevel(disables brushsides for all angled geometry. I do not recommend using this, use func_nobevel instead) - Added support for func_instance_io_proxy entity
- Added optimization to automatically disable vertex lighting for props with
$bumpmap/$phong- Reduces time spent in VRAD with
-staticproplighting - Use
-showineligiblevertexlitpropsto show what props were marked ineligible for vertex lighting - Use
-noineligiblevertexlitpropsto disable this optimization (disabled by default with "-csgo" parameter)
- Reduces time spent in VRAD with
- Added logging if FGD has parsing errors
- Added
-nonamefixupto disable default instance name prefixing withInstanceAuto - Added
-singleplayeroption to compile maps for
Half-Life 2 (
) BSP format - Added
-l4d2,-portal2,-asw,-insurgency,-csgooptions- Allows compiling maps for
Left 4 Dead 2,
Portal 2,
Alien Swarm,
Insurgency, and
Counter-Strike: Global Offensive BSP formats respectively
VBSP++ will automatically compile the correct format if it recognizes the SteamAppId in the gameinfo.txt- Recognized games:
Half-Life 2,
Portal,
Synergy,
Entropy : Zero,
Entropy : Zero 2,
Source SDK Base 2013 - Singleplayer: -singleplayer
Left 4 Dead 2: -l4d2
Portal 2: -portal2
Alien Swarm,
Alien Swarm: Reactive Drop: -asw
Counter-Strike: Global Offensive (via
's csgo_legacybranch or standalone),
Insurgency,
Day of Infamy,
Black Mesa: -csgo
- Allows compiling maps for
- Added warning if using info_lighting on dynamic entities
- Added warning if static prop hull generation takes a long time
- Added warning if overlay has no faces assigned
- Added sanity check for NaN/Inf values in the VMF
- Added check for brushes going outside of map grid
- This prevents the
Map coordinate extents are too large!!error in-game
- This prevents the
- Added
-warnMissingInstancesto ignore missing instance VMFs - Added
%CompileNoShadowssupport - Added
%CompileTeamsupport - Added new
%CompileNormalparameter for brush materials- This forces vertex normals on the face to all be the same
- Useful to make fake 2D skyboxes without needing a HDR texture (via "UnlitGeneric" cubemap)
- Example:
%CompileNormal "[1 0 0]"
- Added support for compiling lightmaps on Water if
$lightmapwaterfogis set (for mods that support it) - Added support for high lightmap sizes (useful for games that support
-maxlightmapdim) - Added support for saving
enablelightbounceflag for static props - Added support for reading decimal values from face lightmap scales
- Added overlay trimming, this fixes the
overlay too many faceserror automatically - Added
-nohdrcubemapto not write HDR cubemaps to BSP, useful if map is compiled in LDR only- Likewise
-noldrcubemapexists to not write LDR cubemaps -nodefaultcubemapdisables both cubemaps
- Likewise
- Added
-nobump(disables bumpmap lightmaps on all faces) - Added
-maxluxelscale(clamps maximum luxel scale, default is no limit) - Added
-report_search_pathsto list current search paths for debugging - Added
-missingmaterialoption to replace missing brush materials with the desired material name - Added
-entfirstparameter- Forces a specific entity classname to always be sorted first in the list of entities
- Added ability to insert default options from gameinfo
- To use this, make a
Toolssection in your gameinfo.txt - Use vbsp, vvis, vrad and studiomdl keys, with the values being options to add
- To use this, make a
- Added func_simpleladder format support (used by
Left 4 Dead 2)
- If your mod supports it, you can also compile this ladder format with
-simpleladdersparameter
- If your mod supports it, you can also compile this ladder format with
- Added experimental support for compiling different static prop formats
- Use
-staticpropformatto switch to these formats - Supported formats: v6 (
Half-Life 2), v7 v8 (
Left 4 Dead), v9 (
Left 4 Dead 2), v10 (
Team Fortress 2, default), v11-v12 (
Counter-Strike: Global Offensive), v13 (Strata), v14 (new) - Mainly useful for
Garry's Mod, it now means you can compile maps with prop rendercolor and scaling
- Use
- Added support for variable brush, displacement and texinfo limit
- Change them via
-maxbrushes,-maxbrushsides,-maxdispinfoand-maxtexinforespectively - NOTE: This will only work on engines that support the higher limit
- Change them via
- Blocklight and blockLOS tooltextures no longer cut out faces from other func_detail
- This change was made to support
Left 4 Dead 2 maps, which rely on this change -leaktestwill now stop on areaportal leaks
- This change was made to support
- Restored support for
-maxlightmapdimand-defaultluxelsizeparameters - func_occluder, func_areaportal, func_viscluster, func_nobevel, parallax_obb no longer count towards the brush limit
- Improved performance of "Fixing up env_cubemap materials" step
- Improved clarity of some warnings and removed useless ones
- Renamed waterindices to primindices (less misleading name)
- Replaced VPhysics (Havok) dependency with Box3D
- This speeds up the
Building Physics collision data...step significantly
- This speeds up the
- Displacements with bad physics will now throw a warning rather than fatal error
- Fixed instances not collapsing correctly if FGD had unrecognized types
- Fixed instance names prefixed with ! being remapped
- Fixed
ivVecLineFGD fields not remapping correctly inside instances - Fixed remapped instance I/O always using ESC separators (fixes HL2 compatibility)
- Fixed recursive instance paths not working
- Fixed cubemaps not being transformed inside instances
- Fixed smoothing groups not working on func_detail
- Fixed displacements not being rotated correctly in instances
- Fixed occluders not being collapsed correctly in instances
- Fixed cubemap side IDs not being remapped in instances
- Fixed missing texture cubemaps if skybox has mismatched side dimensions
- Fixed max overlays per face actually being 63 rather than 64 due to a faulty check
- Fixed unknown detail object warning being spammed for the same material
- Fixed crashes if brush texture name was more than 128 characters
- Fixed crash if an instance overflowed brush or brushsides limit
- Fixed crash if instance name was too long
- Fixed crash if no surfaceprops were loaded
- Fixed crash if map had more than 32768 texinfo
- Fixed crash if displacement face had less than 3 points
- Fixed crash when processing an empty brush in visleaf splits
- Fixed bug where brushside count was varying depending on the CPU
- Fixed incorrect collisions on certain angled brushes
- See this page for more info
- Deprecated manifests
- Deprecated func_viscluster entity
Supported games
VBSP++ is currently available for the following games and engine branches:
| Supported Game | Notes |
|---|---|
| Installation: • First method: Extract " tools_plusplus" folder, then run toolsplusplus_installer.exe, pointing it to the game root directory.• Second method: Install the tool to a Source 2013 SP game's bin/x64 folder (you will need to create the "x64" folder), then go to compatibility folder and drop all the .dll files into x64 folder.After installing VBSP++, either open Hammer (or Hammer++) in your Source 2013 SP game and edit the BSP executable pointer to $SteamUserDir\Your Source 2013 SP game\bin\x64\vbspplusplus.exe, or use the tool from the command-line.Use -singleplayer command line argument to compile Singleplayer format maps. | |
Legacy version (previous2021 branch).Installation: • First method: Extract " tools_plusplus" folder, then run toolsplusplus_installer.exe, pointing it to the game root directory.• Second method: Install the tool to a Source 2013 MP game's bin/x64 folder (you will need to create the "x64" folder), then go to compatibility folder and drop all the .dll files into x64 folder.After installing VBSP++, either open Hammer (or Hammer++) in your Source 2013 MP game and edit the BSP executable pointer to $SteamUserDir\Your Source 2013 SP game\bin\x64\vbspplusplus.exe, or use the tool from the command-line.This method will also works with pre-2021 version of Counter-Strike: Source, Half-Life 2: Deathmatch, etc... games, aswell as pre-2021 version of Source 2013 Multiplayer. | |
Installation: Follow same instructions as Source 2013 MP games. If you do the second method, ignore the compatibility folder (and it's dll files) completely.
| |
| Other | |
Auto-detect & compile using correct BSP format, otherwise use -l4d2 command line argument.
| |
Auto-detect & compile using correct BSP format, otherwise use -asw command line argument.
| |
Partial support. func_instance_io_proxy is not yet supported. Auto-detect & compile using correct BSP format, otherwise use -portal2 command line argument.
| |
Auto-detect & compile using correct BSP format, otherwise use -csgo command line argument.
| |
Other games/mods tested & Additional notes
VBSP++ has been unofficially tested with the following games or engine branch:
| Game | Engine branch (game) | Notes |
|---|---|---|
| All third-party |
Source 2013 Singleplayer | Installation: • First method: Extract " tools_plusplus" folder, then run toolsplusplus_installer.exe, pointing it to the game root directory.• Second method: Install the tool to a Source 2013 SP game's bin/x64 folder (you will need to create the "x64" folder), then go to compatibility folder and drop all the .dll files into x64 folder.After installing VBSP++, either open Hammer (or Hammer++) in your Source 2013 SP game and edit the BSP executable pointer to $SteamUserDir\Your Source 2013 SP game\bin\x64\vbspplusplus.exe, or use the tool from the command-line.Use -singleplayer command line argument to compile Singleplayer format maps. |
| All third-party |
Source 2013 Multiplayer | Installation: • First method: Extract " tools_plusplus" folder, then run toolsplusplus_installer.exe, pointing it to the game root directory.• Second method: Install the tool to a Source 2013 MP game's bin/x64 folder (you will need to create the "x64" folder), then go to compatibility folder and drop all the .dll files into x64 folder.After installing VBSP++, either open Hammer (or Hammer++) in your Source 2013 MP game and edit the BSP executable pointer to $SteamUserDir\Your Source 2013 SP game\bin\x64\vbspplusplus.exe, or use the tool from the command-line.This method will also works with pre-2021 version of Counter-Strike: Source, Half-Life 2: Deathmatch, etc... games, aswell as pre-2021 version of Source 2013 Multiplayer. |
| All |
Source 2004 Source 2006 |
Not supported. |
| Left 4 Dead engine branch | Not yet supported. |
External links
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||