Setting Up Hammer++ for Day of Infamy

Day of Infamy31 views4 favorites9 min readby Comrade GazUpdated Jan 20View on Steam ↗

Introduction

Insurgency version of this guide: https://steamcommunity.com/sharedfiles/filedetails/?id=3650523451
I guess most of people have heard about Hammer++ and tried to set it up to work with Insurgency and Day of Infamy. At the time of writing this guide there's no official Hammer++ build for these games. But it is possible to configure Hammer++ to use assets and compilers for DoI and Ins using some other builds, notably GMOD and CS:GO build.

While DoI and Insurgency are built on CS:GO engine branch, there're many issues with CS:GO Hammer++ build:
  • Setting up require symbolic links.
  • Requires copying some content from "platform" game folder ( materials and models ).
  • Custom content can only be mounted as loose files in original game folder or "gameinfo" folder.
  • Only CS:GO MDL version is supported, other MDL versions can crash editor. Vanilla INS and DOI content seems to be fully compatible, but since game does support MDL version from SDK2013 branch, some custom models might be not recompiled for CS:GO branch.
  • Build is unsupported and no longer receive any new updates.
Hammer++ build for Garry's Mod is also not perfect:
  • Requires copying shaders from Garry's Mod to Game Directory. While they don't load in-game, just to make sure that they won't trigger anti-cheat system, they should be manually disabled before game launch.
  • Soundscripts don't work.
  • Particle files don't work out-of-box and require conversion. They don't look same as in-game after conversion.

    Top screenshot is original particle system in CS:GO Hammer++, bottom one is converted particle system in Garry's Mod Hammer++
  • Player animation can look incorrectly and crash editor.
Regardless of version, Hammer++ doesn't support:
  • OGG audio preview.
  • Materials that use GGX shaders.
We'll still look at both methods, but let's start with setting up Garry's mod build.

Setting up Garry's Mod build of Hammer++

Hammer++ installation and configuration
Hammer++ build for Garry's Mod requires 64-bit libraries, so you'll need to switch 64-bit binaries branch (e.g. "x86-64 - Chromium + 64-bit binaries"). Here's guide for that.

Now, get Hammer++ for Garry's Mod from official download page[ficool2.github.io] and install it (check "README.txt" for install instructions).

Day of Infamy shaders are not compatible with Garry's mod build of Hammer++, so you need to copy Garry's Mod shaders into Day of Infamy game directory. Open "garrysmod_dir" VPK archive (located in "<Path to Steam Library>/GarrysMod/garrysmod") and extract "shaders" folder to "<Path to Steam Library>\dayofinfamy\doi". CS:GO branch games don't load shaders folder from game directory, so these shaders won't break game. You can also rename/move this shaders folder somewhere else when you want to just play game - just to make sure that they won't trigger anti-cheat system.

Open Hammer++ (located in "<Path to Steam Library>/GarrysMod/bin/win64") and via the toolbar at the top go to "Tools" -> "Options".

Click on "Edit" button next to "Configurations" dropdown to open "Edit Game Configurations" window:

Click on "Add" button to create new game configuration. You can name this whatever you want, but I called mine "Day of Infamy" just to not confuse it with other configurations.
Now, setup game configuration the same way as in original Day of Infamy/Insurgency Hammer game configuration:

Here's game configuration block from "hammerplusplus_gameconfig.txt":
"Day of Infamy" { "GameDir" "H:\SteamLibrary\steamapps\common\dayofinfamy\doi" "Hammer" { "GameData0" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\doi.fgd" "TextureFormat" "5" "MapFormat" "4" "DefaultTextureScale" "0.250000" "DefaultLightmapScale" "16" "GameExe" "H:\SteamLibrary\steamapps\common\dayofinfamy\dayofinfamy_x64.exe" "DefaultSolidEntity" "color_correction_volume" "DefaultPointEntity" "ambient_generic" "BSP" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\vbsp.exe" "Vis" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\vvis.exe" "Light" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\vrad.exe" "MDL" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\studiomdl.exe" "GameExeDir" "H:\SteamLibrary\steamapps\common\dayofinfamy" "MapDir" "h:\SteamLibrary\steamapps\common\dayofinfamy\sdk_content\maps" "BSPDir" "H:\SteamLibrary\steamapps\common\dayofinfamy\doi\maps" "PrefabDir" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\Prefabs" "CordonTexture" "dev/dev_blendmeasure" "MaterialExcludeCount" "0" "Previous" "0" } }

Insurgency and Day of Infamy only use HDR, so you can replace "-both" to "-hdr" in VRAD expert compile options.

November 2025 update introduced 4-way blend shader port in Garry's Mod, but if you have installed Hammer++ before this update, you might need to manually modify H++ configuration file. Open file "hammerplusplus_settings.ini" in "<Path to Steam Library>\GarrysMod\bin\
win64\hammerplusplus"
folder. Find in this file key "Enable4WayBlends" and set it to 1 ( i.e. "Enable4WayBlends=1" ).

Hammer++ setup is completed! Close it and mount game assets.
Mounting game content
Garry's Mod has unique content mounting feature - instead of using "gameinfo.txt" in Game Directory, it uses "mount.cfg" in "<Game Directory>/cfg" folder. Find a mount configuration example in "<Path to Steam Library>\GarrysMod\garrysmod\cfg" folder and copy it to "<Path to Steam Library>\dayofinfamy\doi\cfg" folder. Open copied file and add paths to game, imported and custom content inside "mountcfg" block. Mounting use standard load order rules - search paths in higher rows have priority over search paths in lower rows.
For example, here's my "mount.cfg":
"mountcfg" { "doi_custom_test" "H:\SteamLibrary\steamapps\common\dayofinfamy\doi\custom\test" "doi_fix" "H:\SteamLibrary\steamapps\common\dayofinfamy\doi\dev\doi_ggx_fallback" "doi" "H:\SteamLibrary\steamapps\common\dayofinfamy\doi" "doi_imported" "h:\SteamLibrary\steamapps\common\dayofinfamy\doi\content" }

After saving modified "mount.cfg", open Hammer++ and choose your "Day of Infamy" configuration. Look at "Messages" window to check content mounting:
Game content is mounted and can be used in Hammer++.

Setting up CS:GO build of Hammer++

Game installation and content mounting
After CS2 update, in order to still have CS:GO files, you'll need to select "csgo_legacy" beta branch on Counter-Strike 2 in your Steam library. You can also install CS:GO SDK, if you have it, but it's not required for launching Hammer++ - you can use "vpk.exe" from Day of Infamy to pack some files required for fixing some problems with game content. Create new folder inside of your CS:GO root folder ("<Path to Steam Library>/Counter-Strike Global Offensive"), for example "doi_content". CS:GO build of Hammer++ loads only VPK files that have name "pak01_*". In order to use content from INS/DOI without unpacking VPKs, you need to create a folder inside "doi_content" for each VPK and make symlinks for all chunks but name them "pak01_*.vpk". You can also create and run this batch file inside "doi_content" folder to create symlinks to VPKs almost automatically:
ECHO on SETLOCAL EnableDelayedExpansion ::change varible below to path to your day of infamy content folder (<steam path>\steamapps\common\dayofinfamy\doi) SET GamePath="h:\SteamLibrary\steamapps\common\dayofinfamy\doi" ::change varible below to path to your day of infamy "imported content" folder (<steam path>\steamapps\common\dayofinfamy\doi\content) SET ContentPath="h:\SteamLibrary\steamapps\common\dayofinfamy\doi\content" ECHO %GamePath% FOR %%I IN (.) DO SET CurrDirName=%%~nxI ECHO %CurrDirName% FOR %%G IN (%GamePath%\*.vpk) DO ( SET filename=%%~nG @ECHO !filename! SET _name=!filename:~0,-4! @ECHO !_name! SET chunkname=!filename:~-4! @ECHO !chunkname! IF NOT EXIST "%~dp0"/"!_name!" MKDIR "%~dp0"/"!_name!" mklink "%~dp0!_name!/pak01!chunkname!.vpk" "%%G" ) FOR %%G IN (%ContentPath%\*.vpk) DO ( SET filename=%%~nG @ECHO !filename! SET _name=!filename:~0,-4! @ECHO !_name! SET chunkname=!filename:~-4! @ECHO !chunkname! IF NOT EXIST "%~dp0"/"!_name!" MKDIR "%~dp0"/"!_name!" mklink "%~dp0!_name!/pak01!chunkname!.vpk" "%%G" ) pause
After running this batch file, your "doi_content" folder should look like that:
Each folder should contain VPK archive symlinks named "pak01_*". After setting up symlinks in your "doi_content" folder, create file "gameinfo.txt" there.
Here's my "gameinfo" file example:
"GameInfo" { game "DOIContent" title "COUNTER-STRIKE'" title2 "" GameData "doi.fgd" type multiplayer_only icon "resource/game" FileSystem { SteamAppId 730 ToolsAppId 211 SearchPaths { mod+mod_write+default_write_path |gameinfo_path|. Game+Mod |gameinfo_path|. Game |gameinfo_path|. game_write |gameinfo_path|. // Mount any loose files Game "H:/SteamLibrary/steamapps/common/dayofinfamy/doi" // Mount generated folders with base fixes VPK ( e.g. GGX material conversion, etc. ) for H++ Game |gameinfo_path|doi_fix // Mount generated folders with the main content VPKs for H++ Game |gameinfo_path|doi_materials Game |gameinfo_path|doi_misc Game |gameinfo_path|doi_models Game |gameinfo_path|doi_particles Game |gameinfo_path|doi_sound // Then mount the imported content VPKs for H++ Game |gameinfo_path|doi_csgo_imported Game |gameinfo_path|doi_dod_imported Game |gameinfo_path|doi_l4d2_imported Game |gameinfo_path|doi_portal2_imported // Mount custom content for DOI compiler game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/custom" // Mount VPK content for DOI compiler game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/doi_materials.vpk" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/doi_models.vpk" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/doi_misc.vpk" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/doi_particles.vpk" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/doi_sound.vpk" // Mount imported content for DOI compiler game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/content" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/content/doi_csgo_imported.vpk" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/content/doi_dod_imported.vpk" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/content/doi_l4d2_imported.vpk" game+mod "H:/SteamLibrary/steamapps/common/dayofinfamy/doi/content/doi_portal2_imported.vpk" // Last, mount platform loose files game |all_source_engine_paths|platform platform |all_source_engine_paths|platform } } }

Yeah, it looks weird, but you need to mount same content twice - "gameinfo_path" stuff for Hammer++ and absolute paths for compilers. Thanks to @butchergenesis from "INS/DOI Modding" Discord server for finding this solution.
Hammer++ installation and configuration
Get Hammer++ for CS:GO from official download page[ficool2.github.io] and install it (check "README.txt" for install instructions).

Let's start with fixing Hammer content. Copy folders "materials" and "models" from "<Path to Steam Library>/dayofinfamy/platform" to "<Path to Steam Library>/Counter-Strike Global Offensive/platform" folder.

Open Hammer++ (located in "<Path to Steam Library>/Counter-Strike Global Offensive/bin"). If you haven't launched original Hammer and CS:GO SDK, you'll see this popup:

Press "No" and create new configuration ( check previous section for instructions ).

There're some differences in Game Configuration. First, you need to additionally add FGD file "hammerplusplus_fgd.fgd" located in "<Path to Steam Library>/Counter-Strike Global Offensive/bin/hammerplusplus" folder. Another difference is Game Directory parameter - you need to set it to your content folder inside CS:GO root directory (e.g. "<Path to Steam Library>/Counter-Strike Global Offensive/doi_content").

CS:GO variant of game configuration block from "hammerplusplus_gameconfig.txt"

"Day of Infamy" { "GameDir" "I:\SteamLibrary\steamapps\common\Counter-Strike Global Offensive\doi_content" "Hammer" { "GameData0" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\doi.fgd" "GameData1" "I:\SteamLibrary\steamapps\common\Counter-Strike Global Offensive\bin\hammerplusplus\hammerplusplus_fgd.fgd" "TextureFormat" "5" "MapFormat" "4" "DefaultTextureScale" "0.250000" "DefaultLightmapScale" "16" "GameExe" "H:\SteamLibrary\steamapps\common\dayofinfamy\dayofinfamy.exe" "DefaultSolidEntity" "func_detail" "DefaultPointEntity" "ambient_generic" "BSP" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\vbsp.exe" "Vis" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\vvis.exe" "Light" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\vrad.exe" "GameExeDir" "H:\SteamLibrary\steamapps\common\dayofinfamy" "MapDir" "H:\SteamLibrary\steamapps\common\dayofinfamy\sdk_content\maps" "BSPDir" "H:\SteamLibrary\steamapps\common\dayofinfamy\doi\maps" "PrefabDir" "H:\SteamLibrary\steamapps\common\dayofinfamy\bin\Prefabs" "CordonTexture" "dev/dev_blendmeasure" "MaterialExcludeCount" "2" "-MaterialExcludeDir0" "editor" "-MaterialExcludeDir1" "skybox" "Previous" "0" } }

Fixing problems with content

Now you can create and compile maps for Day of Infamy in Hammer++, but there're still some problems. Let's look at those that we can fix.
In order to not override original files, do not unpack original VPK files to "custom", "content", "download" folders or directly in Game Directory. In my example, I created folder "doi_ggx_fallback" at "<Path to Steam Library>\dayofinfamy\doi\dev" and exported content there:


For Garry's Mod H++ build, you need to add that folder to your mounting configuration file in the middle of load order - this search path should be before main content to take higher priority.
For CS:GO build you'll need to symlink each folder inside to your "doi_content" folder. If you're already using it for custom content, pack content of your fix folder as multi-chunk "pak01" VPK file, put it in new folder inside of "doi_content" and add path to into "gameinfo.txt" - this search path should be before main content to take higher priority. If you have trouble, check examples in previous sections.
Particles don't show up in editor ( GMOD H++ build )
  • Open "<Path to Steam Library>\dayofinfamy\doi\doi_particles_dir.vpk" and extract content to your "doi_ggx_fallback" folder.
  • Remove "particle_manifest.txt" from exported folder.
  • Download Sparc, unpack it somewhere and launch.
  • Click on folder button, select extracted "particles" folder and choose "Garry's Mod" at dropdown game list.
  • Click button on the right to convert files.
  • After conversion, find a folder where you extracted Sparc named "Converted particles (Binary 2, PCF 1)".
  • Replace extracted particles with content from this folder.
Materials that use GGX shaders are wireframe in editor
  • Find VMT files that has "WorldGGX" and "SurfaceGGX" in header and extract them to your "doi_ggx_fallback" with relative path.
  • If header line is "SurfaceGGX", replace it to "VertexLitGeneric"
  • If header line is "WorldGGX", check material parameters - if "$basetexture2" is present, replace header with "WorldVertexTransition". Otherwise, replace header with "LightmappedGeneric".
While textures won't look same as in game, at least they'll render in editor. Here's VPK archive with fixed vanilla materials.[disk.yandex.ru]

Closing Paragraph

Now you can setup Hammer++ for Day of Infamy mapmaking. It's not ideal - there might be more problems with GMOD build or better solution to mount content in CS:GO build. But at least you can work in it and use most of it's features, I guess.

Other guides for setting up CS:GO build of Hammer++ for games based on Portal 2 and CS:GO branch:
https://steamcommunity.com/sharedfiles/filedetails/?id=3286651278
https://steamcommunity.com/sharedfiles/filedetails/?id=2900613973
Thank you for reading and have fun making new maps!

This guide was created by its original author on the Steam Community. Are you the author and want it removed? Request removal.