Hazard Team Compile Tool - Hammer Map Compiler Replacement


Hazard Team Compile Tool[/size]


So here’s the thing… When we compile our maps, we have a few options. We can do one of a few things:

  1. Use Hammer’s built-in compiler (which is awful for anything that takes more than a couple of seconds to compile)
  2. Invoke the compile tools via command line/batch file (which is incredibly cumbersome)
  3. Use an external compile tool, such as VBCT (this option is the best option for most cases!)
    I love VBCT. It’s an awesomely useful tool! You can do a helluva lot of things with it, and compiling with it is always much more of a joy than using Hammer’s built-in compiler.

However, in my time working with the Hazard Course dev team, me and my teammates have found that we sometimes needed features that weren’t easily done in VBCT, such as running RAD without a full BSP/VIS pass for fast lighting tweaks, or easily swapping configurations without having to go through a bunch of menus setting and unsetting different flags too often.

Most importantly, we needed a way to sequentially run final compiles on each of our maps whenever we put together a new build to give to our testers-- a feature that we didn’t discover in VBCT until too late because it wasn’t an obvious part of the interface. Although we did eventually find the “group compile” feature in VBCT, by then I had already decided to create our own compile tool, built from the ground-up for the needs of our team. Since we feel that it would be quite useful for others as well, I made the decision that we should share it publicly rather than keep it as internal team software. :slight_smile:

Aaaaand here’s the result! Introducing, the Hazard Team Compile Tool (HTCT)!


The main distinguishing features of HTCT as a compile tool are:

  • It was built to make sequential compiling fast, flexible, and extremely easy.
  • It’s slightly less restrictive than VBCT, meaning you can do potentially dangerous things like running RAD without full BSP and VIS (if you really know what you’re doing). This allows for more flexibility in your workflow (again, if you know what you’re doing).
  • Changing between different compile settings is as easy as choosing a different preset from a drop-down menu. HTCT comes with many compile presets, but you can always add your own, of course.
  • Only a few central parts of HTCT are hard-coded. A lot of values, such as SDK paths, compile tool arguments, and even window text colors are delegated to a config file. Paths, settings, and variables are taken from existing configuration files whenever possible (like gameconfig.txt), and not hard-coded. This means it is hypothetically possible to extend various parts of HTCT to work flexibly with situations that I have not yet thought of.

So far, HTCT supports Source SDK 2007, 2009, 2013 Singleplayer and Multiplayer, HL2, and supposedly (meaning untested) CS:GO, L4D2, Portal, Portal 2, and Alien Swarm. You can also hypothetically modify HTCT’s config file to support other SDK versions, although I haven’t gotten around to trying that myself.


Right now I’ve barely gotten it into Beta stage, and I need an actual userbase to let me know how well it works, so I can iron out all the bugs that might be lurking in it. So without further ado, I release HTCT BETA into the wild…

Download (HTCT Version 0.5.0 BETA):

Note: Chrome may mark the download as “dangerous” due to infrequent download activity… Don’t worry about that; it’s not dangerous, I swear!

Please test this out and let me know of any bugs, which there certainly are many of. Also let me know what other features you’d like for me to implement in the future, should I decide to continue supporting this.

Thanks! :slight_smile:



The real highlight of this thing is that it doesn’t leave a useless “map_old.bsp” laying around.



Made a few minor changes. HTCT Version 0.1.1 BETA is now available!


Perhaps I should introduce HTCT to other mapping communities to expand my ability to refine it. Anyone have suggestions?



Folks at TWHL might be interested.



All right, I think I’ve made enough changes to warrant a new version.

Version 0.2.0 BETA is available here:

Among the changes are:

  • VMFII support
  • Drag+drop support
  • Some bugfixes
  • Changes to the way the configuration file works

EDIT: So I spent a day optimizing the hell out of HTCT. I made a few changes to the way the Compile Window updates and how the UI handles event scheduling in general. The result should be a much more efficient HTCT, and slightly faster compiles on average.

So here’s the new version (0.2.1 BETA):

Among the changes are:

  • Fixed a nasty memory leak during compiles that caused HTCT to use unbounded amounts of memory without releasing it
  • Optimized the Compile Window so that it no longer tries to waste insane amounts of CPU during a compile
  • Support for Steam library folders other than the main Steam directory

EDIT 2: Added a Rungame and Open in Hammer feature. Just right-click on a VMF in the compile queue, and you will get the option to run the map in-game (if it has been compiled already) or open the map in Hammer for editing.

Download (0.3.0 BETA):



Fixed a bug where sequential compiles would fail if you compile a VMF that is located in the \maps directory of a target game. Thanks to .RK for finding the bug!

Hotfix is available here (0.3.1 BETA):



Bump because new version is available (0.3.2 BETA):




Forgive me for necroposting, but question - This has “hypothetical” support for L4D2, but is it possible to set up the process to compile for L4D1 as well? I’m a sucker for classics, what can I say I’m (re)learning Hammer through L4D, and while I could live with the default compile tools, the added options in this make it a lot more appealing. :slight_smile:



It’s untested, but it should be possible to set it up.



There’s a very good chance that it will work, if you set up the config file correctly. If you want, I can help you with that. And if it for some reason breaks, I can also help you with that. Isn’t it nice to have direct contact with the developer of your software? :smiley:



Heh, definitely. :stuck_out_tongue: Thanks! I think I’ll take a stab at it myself though, I wouldn’t want to impose unless something definitely does go wrong.



All right then. Good luck! If you have any questions or concerns, let me know.



In light of the awesome Black Mesa Steam release, I’ve decided it’s about time to update HTCT again, for all the aspiring BM mappers out there to use in their Deathmatch shenanigans.

Changelog (Version 0.4.0 BETA):

  • Added the Black Mesa Steam version SDK folder to the default config file.
  • Re-wrote the internal Valve KeyValues parser for future ease of maintenance.
  • Added a “Remember Compile Queue” feature. (Go to the Settings dialog and check the “Remember Compile Queue” checkbox to make the compile queue persist between HTCT sessions.)
  • Added a debug mode. (Open config.cfg and set “debug” to “1” to enable logging. If you encounter unexpected behavior, be sure to enable debug mode and send me the log!)
    Download here:


Thankies, dkyyyybread <3



I wanted to test it, but it appears that HL2 :smiley: M was not in the list.

It does not matter anymore since I stopped HL2 :smiley: M now since BM :smiley: M is out.



If a particular game configuration is not in the “official” list, you can always add it to HTCT’s config.cfg file yourself. Open config.cfg, scroll down to the section labeled “sdkfolders” and add an entry for whatever game you might be missing.

The format is:

"sdkfolders" { "Name of Game" "NameOfGameFolder" }
… where “Name of Game” can be whatever you want, and “NameOfGameFolder” is the name of the game’s folder in your SteamApps\common directory.



I shall remember this, thanks.



It’s a flexible little tool. I use it for BM, HL2, OBM, and CS:GO. It’s designed to be pretty easily configured.



Yeah I’ve been using it for OBM, it’s a great tool, I suppose now is the time to say awesome job dky.tehkingd.u, I love this tool!



New bugfix update! I’m publishing a new build in response to some issues that were brought to my attention in the past few days.

Here’s the changelog:

  • Changed the new Valve KeyValues parser to allow parsing of files that are not intended to include escape sequences like ‘\n’ or ‘\t’.
    (This should fix a bug where certain totally normal character sequences in GameConfig.txt could be accidentally interpreted as special escaped characters, effectively breaking HTCT’s ability to parse the file.)
  • Fixed a bug in the new Valve KeyValues parser where it would incorrectly accept a VDF file as valid if it has more opening braces than closing braces.
  • Fixed a bug where HTCT would fail to run maps in-game for SDK Base mods that require the -game parameter to be set when running hl2.exe.
  • Changed the conflict resolution system for config files to be more strict.
    (As a result, grandfathered config.cfg files will now be more properly updated between HTCT versions.)
    Big shout-out to hscsguy, who brought some of these issues to my attention a few days ago and was super-helpful in helping me pinpoint and fix them!

Here’s the link to the latest build: