Command Sequences

From Valve Developer Community
Jump to navigation Jump to search


The bin/CmdSeq.wc file defines the expert compilation options for Hammer. There are two versions currently in use. All strings are fixed width, with a null character at the end of the used data. Hammer fills the remainder of the data with random memory contents of Sequence name buffer after terminating null.

struct Header
{
	char signature[31];  // Worldcraft Command Sequences\r\n\x1a
	float version;
	unsigned int seq_count;
	Sequence sequences[];
}

The signature contains "Worldcraft Command Sequences", followed by a carriage return, newline, and Control-Z (byte 26). The version is a floating-point number, 0.1 or 0.2. This is followed by seq_count sequence structs, one for each compile preset defined:

struct Sequence
{
	char name[128]; // null-terminated name and memory contents after it (till 128 byte)
	unsigned int command_count; // Number of commands
	Command commands[];
}

Each sequence contains a number of commands:

struct Command
{
	char is_enabled; // 0/1, If command is enabled. NOTE: CS:GO's branch of hammer uses an integer value here instead of a character.
	int special;
	char executable[260]; // Name of EXE to run.
	char args[260]; // Arguments for executable.
	int is_long_filename; // Obsolete, but always set to true. Disables MS-DOS 8-char filenames.
	int ensure_check; // Ensure file post-exists after compilation
	char ensure_file[260]; // File to check exists.
	int use_proc_win; // Use Process Window (ignored if exectuable = $game_exe).

	// V 0.2+ only:
	int no_wait;  // Wait for keypress when done compiling.
}

If special is not 0, the executable is not used. Instead a builtin command is run:

Value Command Arguments
256 Change Directory Location
257 Copy File Source Destination
258 Delete File Path
259 Rename File Old New

VBSP, VRAD, VVIS or the game are normal commands using a replace parameter.

Replacement parameters

Commnand names and arguments can use a replacement syntax, following the form $var. These arguments are quoted up until the first space after the parameter (so $file.$ext is quoted in one piece, but $file $ext will produce two sets of surrounding quotes).

Parameter Result
$$ Literal $ sign.
$file Map filename.
$ext Extension of map (vmf, vmm).
$path Full path to folder containing the map, with no trailing slash.
$exedir Path to the location of the game EXE.
$bspdir Location to place BSPs in, set in Build Programs.
$bsp_exe Location of VBSP, set in Build Programs.
$vis_exe Location of VVIS, set in Build Programs.
$light_exe Location of VRAD, set in Build Programs.
$game_exe Location of the game executable, set in Build Programs.
$gamedir Folder containing Gameinfo.txt.