Flag: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(→‎Flags in Hammer: spawnflags is assigned the wrong type)
(Add list of common flag types)
Line 1: Line 1:
{{lang|Flag}}
{{lang|Flag}}
A '''Flag''' (bitmask or mask) is a [[boolean]] value that is stored within a large variable. This is advantageous because the smallest amount of memory that a program can allocate is 1 byte (or 8 bits), but a boolean only strictly needs 1 bit. If you have a lot of booleans to store, flags are eight times more efficient than the dedicated <code>bool</code> type.
A '''Flag''' (bitmask or mask) is a [[boolean]] value that is stored within a large variable. This is advantageous because the smallest amount of memory that a program can allocate is 1 byte (or 8 bits), but a boolean only strictly needs 1 bit. If you have a lot of booleans to store, flags are eight times more efficient than the dedicated <code>bool</code> type.
Entities in Source commonly use the following flag types:
* Spawn flags - <code>SF_</code>
* Behavior flags - <code>FL_</code>
* [[Effect flags]] - <code>EF_</code>
* Entity flags ("EFlags") - <code>EFL_</code>


==Creation==
==Creation==

Revision as of 06:49, 25 January 2025

English (en)Русский (ru)Translate (Translate)

A Flag (bitmask or mask) is a boolean value that is stored within a large variable. This is advantageous because the smallest amount of memory that a program can allocate is 1 byte (or 8 bits), but a boolean only strictly needs 1 bit. If you have a lot of booleans to store, flags are eight times more efficient than the dedicated bool type.

Entities in Source commonly use the following flag types:

  • Spawn flags - SF_
  • Behavior flags - FL_
  • Effect flags - EF_
  • Entity flags ("EFlags") - EFL_

Creation

Flags are typically defined like this:

#define FL_MYFLAG 1<<0
#define FL_MYFLAG 1<<1
#define FL_MYFLAG 1<<2
etc.

This is the same as:

#define FL_MYFLAG 1
#define FL_MYFLAG 2
#define FL_MYFLAG 4
etc.

Usage

Flags should be managed through Source's dedicated functions, never directly. There are several different types of flags and each has its own set of functions, but they all follow the same naming pattern:

  • Add<*>Flags()
  • Remove<*>Flags()
  • Clear<*>Flags()
  • Has<*>Flags() (sometimes Is<*>FlagSet())

To operate on several flags at once you must use the bitwise operators &, | and ^ - the same as the normal boolean operators, but with only one character.

For instance:

if ( HasSpawnFlags(SF_CITIZEN_MEDIC | SF_CITIZEN_NOT_COMMANDABLE) )
	...

Flags in Hammer

Flags appear in object properties in Valve Hammer Editor. Different objects will have different flags available. A flag appears as a checkbox, meaning each flag can be either on or off. You can also access flags as a keyvalue, spawnflags. That's what the flags actually are; a specific number determined by the combination of flags that are checked.

Warning.pngWarning:spawnflags is an signed int in-game, but an unsigned long in Hammer!