BSPReveal There are too many invisible things that go into making maps. BSPReveal is a map compile tool that adds in-game functionality to your map. Some features are upgrades for existing console commands, others are new commands driven by map logic. No client-side mod required, ~just BSP magic~. Improved visualization allows for better debugging but note that BSPReveal is also relevant for your released maps. Players can now provide better feedback with more powerful screenshots and learn about various invisible elements to increase their mastery of your map. BSPReveal can be integrated into CompilePal or into Hammer's expert compile window. Just follow the simple install instructions included. Download Link Feature Showcase Using `r_drawclipbrushes 2` Spoiler: How this works In BSP, brush solidity is expressed with a list of booleans for each brush. Think of them as a series of checkboxes. They are: 0x1 CONTENTS_SOLID 0x2 CONTENTS_WINDOW 0x3 CONTENTS_AUX 0x4 CONTENTS_GRATE 0x5 CONTENTS_SLIME 0x6 CONTENTS_WATER 0x7 CONTENTS_BLOCKLOS 0x8 CONTENTS_OPAQUE 0x9 CONTENTS_TESTFOGVOLUME 0xa CONTENTS_UNUSED 0xb CONTENTS_UNUSED6 0xc CONTENTS_TEAM1 0xd CONTENTS_TEAM2 0xe CONTENTS_IGNORE_NODRAW_OPAQUE 0xf CONTENTS_MOVEABLE 0x10 CONTENTS_AREAPORTAL 0x11 CONTENTS_PLAYERCLIP 0x12 CONTENTS_MONSTERCLIP 0x13 CONTENTS_CURRENT_0 0x14 CONTENTS_CURRENT_90 0x15 CONTENTS_CURRENT_180 0x16 CONTENTS_CURRENT_270 0x17 CONTENTS_CURRENT_UP 0x18 CONTENTS_CURRENT_DOWN 0x19 CONTENTS_ORIGIN 0x1a CONTENTS_MONSTER r_drawclipbrushes will only render brushes that feature CONTENTS_PLAYERCLIP or CONTENTS_MONSTERCLIP. Playerclip renders fuchsia, Monsterclip (tools/npcclip) renders purple. tools/clip has both monsterclip and playerclip solidity, which renders red. For the most part, TF2 makes no distinctions between clip and playerclip so we can merge those by removing monsterclip from clip. No side effects. All clips are now fuchsia. Blockbullet is CONTENTS_SOLID. No material will ever get vbsp.exe to create a brush that is both CONTENTS_SOLID and CONTENTS_MONSTERCLIP (contents_monsterclip is redundant with contents_solid anyway). But we're clever so we can patch it in and the game client doesn't mind at all. Adding CONTENTS_MONSTERCLIP to blockbullet brushes doesn't affect its physics properties and we've successfully tricked r_drawclipbrushes into rendering blockbullet as tools/npcclip. For the special grate materials that allow splash damage through, it's more or less the same process. They start out as CONTENTS_GRATE. But we can add CONTENTS_MONSTERCLIP and CONTENTS_PLAYERCLIP without changing its physics properties. Which, you guessed it, tricked r_drawclipbrushes into rendering grate materials as tools/clip. This does not affect the size of your map, we're just having fun flipping preexisting ones and zeros. Using `ent_fire vis_disp toggle` Spoiler: How this works If bsp says that one of its dynamic lights is affecting a surface across the map that it couldn't possibly hit, the game client fully trusts that to be the case. We're able to highlight certain faces by inserting a dynamic light into the map which is tied to alternative lightmaps. Toggling the light activates the colored lightmaps. This modifies your map somewhat. Two entities are added to your map to make this work. And alternative lightmaps are generated for displacements that feature a modified solidity. Using `map_showspawnpoints` Spoiler: How this works This one is simplistic, we simply offset spawnpoint entities on the Z axis in the order that they appear in the list of entities. This doesn't affect how the spawns function as players are snapped to the ground upon spawning. The offset is calculated according to the spawn's "group" which is a unique set of these properties: teamnum, controlpoint, round_redspawn, round_bluespawn. This may affect the size of your map depending on the string representation of the Z value (but only by a few bytes tops). Note: you should make sure your spawnpoints don't get embedded into your ceiling. Take a minute to verify your console for obstructed spawnpoints. Using showtriggers_toggle Spoiler: How this works This one is also somewhat straightforward, the faces are being edited to have their textures reassigned according to the entity they are tied to. This injects a few textures in you pak file without needing you to manage assets (these textures can add up to 20kb but those you need will be injected). The supported trigger entities are: trigger_hurt, trigger_multiple, trigger_capture_area, func_nobuild, func_nogrenades, func_regenerate, func_respawnroom Note: If you are already using your own fancy materials for your trigger brushes, they will be unaffected.