Flags/Enums

Flags/Enums to use with functions.

Note

Some of these enums will be hardcoded onto AngelScript in the future


GetCurLoadType

shared enum MapLoadType_t
{
    MapLoad_NewGame = 0,
    MapLoad_LoadGame,
    MapLoad_Transition,
    MapLoad_Background
}

Wait

shared enum WaitHandle_t
{
    WH_NOTHING              = 0,    // Nothing, context executes like normal (AngelScript defaults to this)
    WH_ABORT_MAPNAME        = 1,    // Context will abort if map name doesn't match before execution
    WH_ABORT_LEVELCHANGE    = 2,    // Context will immediately abort if a level change was detected
    WH_ABORT_SAVEGAME       = 4,    // Context will immediately abort if game was loaded via a save file
    WH_ABORT_INVALIDOWNER   = 8,    // Context will abort if Owner is invalid/garbage before execution
    WH_FREEZE_MAPNAME       = 16    // Context will be forever frozen until Player reenters the same level
}

Relationship

shared enum Disposition_t
{
    D_ER,       // Undefined - error
    D_HT,       // Hate
    D_FR,       // Fear
    D_LI,       // Like
    D_NU        // Neutral
}

Weapon ID

shared enum WeaponID_t
{
    P3_WEAPON_WRONG = -1,
    P3_WEAPON_DISABLED = 0,

    P3_WEAPON_EMPTYHANDS        = 1,
    P3_WEAPON_WOLVERINE         = 2,
    P3_WEAPON_NAILBAT           = 3,
    P3_WEAPON_GRENADE           = 4,
    P3_WEAPON_DESERT_EAGLE      = 5,
    P3_WEAPON_TASER             = 6,
    P3_WEAPON_SHOTGUN           = 7, // auto shotgun
    P3_WEAPON_M60               = 8,
    P3_WEAPON_M16               = 9,
    P3_WEAPON_CAT               = 10,
    P3_WEAPON_MACHETE           = 11,
    P3_WEAPON_SHOVEL            = 12,
    P3_WEAPON_MOLOTOV           = 13,
    P3_WEAPON_GASOLINE          = 14,
    P3_WEAPON_CATNIP            = 15,
    P3_WEAPON_BANNER            = 16,
    P3_WEAPON_BEENEST           = 17,
    P3_WEAPON_COP_BATON         = 18,
    P3_WEAPON_KROTCHY_GRENADE   = 19,
    P3_WEAPON_HAMMER            = 20,
    P3_WEAPON_LASERPEN          = 21,
    P3_WEAPON_MATCH             = 22,
    P3_WEAPON_MAXEL_SNIPER      = 23, // doesn't exist
    P3_WEAPON_METABULKY         = 24, // unused
    P3_WEAPON_METAONEHANDLED    = 25,
    P3_WEAPON_METATWOHANDLED    = 26, // unused
    P3_WEAPON_MONKEY            = 27,
    P3_WEAPON_PHOTOCAM          = 28,
    P3_WEAPON_SEED              = 29, // unused
    P3_WEAPON_SHOPVAC           = 30,
    P3_WEAPON_SPRAY             = 31,
    P3_WEAPON_TVCAM             = 32,
    P3_WEAPON_WEEMOTE           = 33,
    P3_WEAPON_M136              = 34,
    P3_WEAPON_FIREAXE           = 35,
    P3_WEAPON_GAMAMET           = 36,

    P3_WEAPON_COUNT
};

Weapon Type

shared enum WeaponType_t
{
    WPN_TYPE_FLESH = -1,
    WPN_TYPE_NONE = 0,
    WPN_TYPE_ANIMAL,
    WPN_TYPE_GADGET,
    WPN_TYPE_NONLETHAL_MELEE,
    WPN_TYPE_NONLETHAL_RANGED,
    WPN_TYPE_MELEE,
    WPN_TYPE_RANGED,
    WPN_TYPE_BIGGUN,

    WPN_TYPE_SIZE
};

Say

shared enum SentencePriority_t
{
    SENTENCE_PRIORITY_INVALID = -1,
    SENTENCE_PRIORITY_NORMAL = 0,
    SENTENCE_PRIORITY_MEDIUM = 1,
    SENTENCE_PRIORITY_HIGH = 2
};

Sequence

shared enum Sequence_t
{
    SEQUENCE_NONE = 0,
    SEQUENCE_AIM = 1,
    SEQUENCE_NO_ACTION_CHECK = 2
};

Inventory

shared enum Inventory_t
{
    INV_SELECT = 0,
    INV_EQUIP = 1,
    INV_ADD = 2,
    INV_REMOVE = 3
};

Movement Type

shared enum P3AI_MovementType_t
{
    AIMT_CURRENT,
    AIMT_WALK,
    AIMT_RUN,
    AIMT_MIX,
    AIMT_FLY,
    AIMT_RANDOM,
    AIMT_OFF,
    AIMT_TELEPORT
};

Face Type

shared enum P3AI_FaceType_t
{
    AIFT_FACE_NONE,
    AIFT_FACE_TO_TARGET,
    AIFT_FACE_FROM_TARGET,
    AIFT_FACE_AS_TARGET
};

Move To Target

shared enum P3AI_MoveToTarget_Flags
{
    AIMTF_NONE                  = 0x0000,
    AIMTF_ACCURATE_POSITIONING  = 0x0001
};

Local Time

shared enum LocalTime_t
{
    LT_YEAR = 0,        // Local year
    LT_MONTH,           // Local month
    LT_DAY,             // Local day
    LT_HOURS,           // Local hours
    LT_MINUTES,         // Local minutes
    LT_SECONDS,         // Local seconds
    LT_DAYS_JANUARY,    // Days since January (0,365)
    LT_DAYS,SUNDAY,     // Days since Sunday (0,6)
    LT_FLAG             // daylight savings time flag
};

Fade Flags

shared enum FadeFlags_t
{
    FFADE_IN = 0x0001,
    FFADE_OUT = 0x0002,
    FFADE_MODULATE = 0x0004,
    FFADE_STAYOUT = 0x0008,
    FFADE_PURGE = 0x0010
};

Sub Flags

shared enum SubFlags_t
{
    SUB_Remove = 0,
    SUB_DoNothing,
    SUB_StartFadeOut,
    SUB_FadeOut,
    SUB_Vanish,
    SUB_CallUseToggle,
    SUB_PerformFadeOut
};

Collision Groups

shared enum Collision_Group_t
{
    COLLISION_GROUP_NONE  = 0,
    COLLISION_GROUP_DEBRIS,             // Collides with nothing but world and static stuff
    COLLISION_GROUP_DEBRIS_TRIGGER,     // Same as debris, but hits triggers
    COLLISION_GROUP_INTERACTIVE_DEBRIS, // Collides with everything except other interactive debris or debris
    COLLISION_GROUP_INTERACTIVE,        // Collides with everything except interactive debris or debris
    COLLISION_GROUP_PLAYER,
    COLLISION_GROUP_BREAKABLE_GLASS,
    COLLISION_GROUP_VEHICLE,
    COLLISION_GROUP_PLAYER_MOVEMENT,    // For HL2, same as Collision_Group_Player, for
                                        // TF2, this filters out other players and CBaseObjects
    COLLISION_GROUP_NPC,                // Generic NPC group
    COLLISION_GROUP_IN_VEHICLE,         // for any entity inside a vehicle
    COLLISION_GROUP_WEAPON,             // for any weapons that need collision detection
    COLLISION_GROUP_VEHICLE_CLIP,       // vehicle clip brush to restrict vehicle movement
    COLLISION_GROUP_PROJECTILE,         // Projectiles!
    COLLISION_GROUP_DOOR_BLOCKER,       // Blocks entities not permitted to get near moving doors
    COLLISION_GROUP_PASSABLE_DOOR,      // Doors that the player shouldn't collide with
    COLLISION_GROUP_DISSOLVING,         // Things that are dissolving are in this group
    COLLISION_GROUP_PUSHAWAY,           // Nonsolid on client and server, pushaway in player code

    COLLISION_GROUP_NPC_ACTOR,          // Used so NPCs in scripts ignore the player.
    COLLISION_GROUP_NPC_SCRIPTED,       // USed for NPCs in scripts that should not collide with each other

    COLLISION_GROUP_AREAGROUP_VOLUME,

    COLLISION_GROUP_RAGDOLL,            // Collides with everything except NPC, player and vehicle
    COLLISION_GROUP_BREAKABLE_BY_VEHICLE,
    COLLISION_GROUP_NOTHING,

    LAST_SHARED_COLLISION_GROUP
};

Solid Flags

shared enum SolidFlags_t
{
    FSOLID_CUSTOMRAYTEST        = 0x0001,   // Ignore solid type + always call into the entity for ray tests
    FSOLID_CUSTOMBOXTEST        = 0x0002,   // Ignore solid type + always call into the entity for swept box tests
    FSOLID_NOT_SOLID            = 0x0004,   // Are we currently not solid?
    FSOLID_TRIGGER              = 0x0008,   // This is something may be collideable but fires touch functions
                                            // even when it's not collideable (when the FSOLID_NOT_SOLID flag is set)
    FSOLID_NOT_STANDABLE        = 0x0010,   // You can't stand on this
    FSOLID_VOLUME_CONTENTS      = 0x0020,   // Contains volumetric contents (like water)
    FSOLID_FORCE_WORLD_ALIGNED  = 0x0040,   // Forces the collision rep to be world-aligned even if it's SOLID_BSP or SOLID_VPHYSICS
    FSOLID_USE_TRIGGER_BOUNDS   = 0x0080,   // Uses a special trigger bounds separate from the normal OBB
    FSOLID_ROOT_PARENT_ALIGNED  = 0x0100,   // Collisions are defined in root parent's local coordinate space
    FSOLID_TRIGGER_TOUCH_DEBRIS = 0x0200,   // This trigger will touch debris objects
    FSOLID_PROHIBITED_AREA      = 0x0400,   // Prohibited areas

    FSOLID_MAX_BITS = 11
};

Solid types

shared enum SolidType_t
{
    SOLID_NONE          = 0,    // no solid model
    SOLID_BSP           = 1,    // a BSP tree
    SOLID_BBOX          = 2,    // an AABB
    SOLID_OBB           = 3,    // an OBB (not implemented yet)
    SOLID_OBB_YAW       = 4,    // an OBB, constrained so that it can only yaw
    SOLID_CUSTOM        = 5,    // Always call into the entity for tests
    SOLID_VPHYSICS      = 6,    // solid vphysics object, get vcollide from the model and collide with that
    SOLID_SPHERE        = 7,    // an sphere
    SOLID_LAST,
};

Entity Effects

shared enum EntityEffect_t
{
    EF_BONEMERGE            = 0x001,    // Performs bone merge on client side
    EF_BRIGHTLIGHT          = 0x002,    // DLIGHT centered at entity origin
    EF_DIMLIGHT             = 0x004,    // player flashlight
    EF_NOINTERP             = 0x008,    // don't interpolate the next frame
    EF_NOSHADOW             = 0x010,    // Don't cast no shadow
    EF_NODRAW               = 0x020,    // don't draw entity
    EF_NORECEIVESHADOW      = 0x040,    // Don't receive no shadow
    EF_BONEMERGE_FASTCULL   = 0x080,    // For use with EF_BONEMERGE. If this is set, then it places this ent's origin at its
                                        // parent and uses the parent's bbox + the max extents of the aiment.
                                        // Otherwise, it sets up the parent's bones every frame to figure out where to place
                                        // the aiment, which is inefficient because it'll setup the parent's bones even if
                                        // the parent is not in the PVS.
    EF_ITEM_BLINK           = 0x100,    // blink an item so that the user notices it.
    EF_PARENT_ANIMATES      = 0x200,    // always assume that the parent entity is animating
    EF_MIRROR_WEAPON        = 0x400,    
    EF_MAX_BITS = 11
};

Cvar flags

shared enum FCVAR_t
{
    FCVAR_NONE = 0,
    FCVAR_UNREGISTERED = (1<<0),
    FCVAR_DEVELOPMENTONLY = (1<<1),
    FCVAR_GAMEDLL = (1<<2),
    FCVAR_CLIENTDLL = (1<<3),
    FCVAR_HIDDEN = (1<<4),
    FCVAR_PROTECTED = (1<<5),
    FCVAR_SPONLY = (1<<6),
    FCVAR_ARCHIVE = (1<<7),
    FCVAR_NOTIFY = (1<<8),
    FCVAR_USERINFO = (1<<9),
    FCVAR_CHEAT = (1<<14),
    FCVAR_PRINTABLEONLY = (1<<10),
    FCVAR_UNLOGGED = (1<<11),
    FCVAR_NEVER_AS_STRING = (1<<12),
    FCVAR_REPLICATED = (1<<13),
    FCVAR_DEMO = (1<<16),
    FCVAR_DONTRECORD = (1<<17),
    FCVAR_RELOAD_MATERIALS = (1<<20),
    FCVAR_RELOAD_TEXTURES = (1<<21),
    FCVAR_NOT_CONNECTED = (1<<22),
    FCVAR_MATERIAL_SYSTEM_THREAD = (1<<23),
    FCVAR_ARCHIVE_XBOX = (1<<24),
    FCVAR_ACCESSIBLE_FROM_THREADS = (1<<25),
    FCVAR_SERVER_CAN_EXECUTE = (1<<28),
    FCVAR_SERVER_CANNOT_QUERY = (1<<29),
    FCVAR_CLIENTCMD_CAN_EXECUTE = (1<<30),
    FCVAR_MATERIAL_THREAD_MASK = ( FCVAR_RELOAD_MATERIALS | FCVAR_RELOAD_TEXTURES | FCVAR_MATERIAL_SYSTEM_THREAD )
};

Take damage flags

shared enum Damage_t
{
    DMG_GENERIC = 0,                            // generic damage -- do not use if you want players to flinch and bleed!
    DMG_CRUSH = (1 << 0),                       // crushed by falling or moving object. 
                                                // NOTE: It's assumed crush damage is occurring as a result of physics collision, so no extra physics force is generated by crush damage.
                                                // DON'T use DMG_CRUSH when damaging entities unless it's the result of a physics collision. You probably want DMG_CLUB instead.
    DMG_BULLET = (1 << 1),                  // shot
    DMG_SLASH = (1 << 2),                       // cut, clawed, stabbed
    DMG_BURN = (1 << 3),                        // heat burned
    DMG_VEHICLE = (1 << 4),                 // hit by a vehicle
    DMG_FALL = (1 << 5),                        // fell too far
    DMG_BLAST = (1 << 6),                       // explosive blast damage
    DMG_CLUB = (1 << 7),                        // crowbar, punch, headbutt
    DMG_SHOCK = (1 << 8),                       // electric shock
    DMG_SONIC = (1 << 9),                       // sound pulse shockwave
    DMG_ENERGYBEAM = (1 << 10),             // laser or other high energy beam 
    DMG_PREVENT_PHYSICS_FORCE = (1 << 11),  // Prevent a physics force 
    DMG_NEVERGIB = (1 << 12),               // with this bit OR'd in, no damage type will be able to gib victims upon death
    DMG_ALWAYSGIB = (1 << 13),              // with this bit OR'd in, any damage type can be made to gib victims upon death.
    DMG_DROWN = (1 << 14),                  // Drowning


    DMG_PARALYZE = (1 << 15),               // slows affected creature down
    DMG_NERVEGAS = (1 << 16),               // nerve toxins, very bad
    DMG_POISON   = (1 << 17),                   // blood poisoning - heals over time like drowning damage
    DMG_RADIATION = (1 << 18),              // radiation exposure
    DMG_DROWNRECOVER = (1 << 19),           // drowning recovery
    DMG_ACID = (1 << 20),                       // toxic chemicals or acid burns
    DMG_SLOWBURN = (1 << 21),               // in an oven

    DMG_REMOVENORAGDOLL = (1<<22),          // with this bit OR'd in, no ragdoll will be created, and the target will be quietly removed.
                                                // use this to kill an entity that you've already got a server-side ragdoll for

    DMG_PHYSGUN = (1<<23),                  // Hit by manipulator. Usually doesn't do any damage.
    DMG_PLASMA   = (1<<24),                 // Shot by Cremator
    DMG_AIRBOAT = (1<<25),                  // Hit by the airboat's gun

    DMG_DISSOLVE = (1<<26),                 // Dissolving!
    DMG_BLAST_SURFACE = (1<<27),            // A blast on the surface of water that cannot harm things underwater
    DMG_DIRECT = (1<<28),
    DMG_BUCKSHOT = (1<<29),                 // not quite a bullet. Little, rounder, different.

    DMG_KNUCKLE =           (DMG_DIRECT | DMG_CLUB | DMG_NEVERGIB),
    DMG_KICK =              (DMG_KNUCKLE | DMG_REMOVENORAGDOLL),
    DMG_BATON =         (DMG_DIRECT | DMG_FALL | DMG_CLUB),
    DMG_SHOVEL =                (DMG_DIRECT | DMG_SLASH),
    DMG_SHOVEL2 =           (DMG_DIRECT | DMG_SLASH | DMG_CLUB),
    DMG_HAMMER   =          (DMG_DIRECT | DMG_VEHICLE | DMG_CLUB),
    DMG_NAILBAT =           (DMG_DIRECT | DMG_VEHICLE | DMG_CLUB | DMG_BULLET)
}

Entity Flags

shared enum EntFlags_t
{
    FL_ONGROUND             = (1<<0),   // At rest / on the ground
    FL_DUCKING                  = (1<<1),   // Player flag -- Player is fully crouched
    FL_WATERJUMP                = (1<<2),   // player jumping out of water
    FL_ONTRAIN                  = (1<<3), // Player is _controlling_ a train, so movement commands should be ignored on client during prediction.
    FL_INRAIN                   = (1<<4),   // Indicates the entity is standing in rain
    FL_FROZEN                   = (1<<5), // Player is frozen for 3rd person camera
    FL_ATCONTROLS               = (1<<6), // Player can't move, but keeps key inputs for controlling another entity
    FL_CLIENT                   = (1<<7),   // Is a player
    FL_FAKECLIENT               = (1<<8),   // Fake client, simulated server side; don't send network messages to them
    // NON-PLAYER SPECIFIC = (i.e., not used by GameMovement or the client .dll ), -- Can still be applied to players, though
    FL_INWATER                  = (1<<9),   // In water
    FL_FLY                      = (1<<10),  // Changes the SV_Movestep= (), behavior to not need to be on ground
    FL_SWIM                 = (1<<11),  // Changes the SV_Movestep= (), behavior to not need to be on ground = (but stay in water),
    FL_CONVEYOR             = (1<<12),
    FL_NPC                      = (1<<13),
    FL_GODMODE                  = (1<<14),
    FL_NOTARGET             = (1<<15),
    FL_AIMTARGET                = (1<<16),  // set if the crosshair needs to aim onto the entity
    FL_PARTIALGROUND            = (1<<17),  // not all corners are valid
    FL_STATICPROP               = (1<<18),  // Eetsa static prop!       
    FL_GRAPHED                  = (1<<19), // worldgraph has this ent listed as something that blocks a connection
    FL_GRENADE                  = (1<<20),
    FL_STEPMOVEMENT         = (1<<21),  // Changes the SV_Movestep= (), behavior to not do any processing
    FL_DONTTOUCH                = (1<<22),  // Doesn't generate touch functions, generates Untouch= (), for anything it was touching when this flag was set
    FL_BASEVELOCITY         = (1<<23),  // Base velocity has been applied this frame = (used to convert base velocity into momentum),
    FL_WORLDBRUSH               = (1<<24),  // Not moveable/removeable brush entity = (really part of the world, but represented as an entity for transparency or something),
    FL_OBJECT                   = (1<<25), // Terrible name. This is an object that NPCs should see. Missiles, for example.
    FL_KILLME                   = (1<<26),  // This entity is marked for death -- will be freed by game DLL
    FL_ONFIRE                   = (1<<27),  // You know...
    FL_DISSOLVING               = (1<<28), // We're dissolving!
    FL_TRANSRAGDOLL         = (1<<29), // In the process of turning into a client side ragdoll.
    FL_UNBLOCKABLE_BY_PLAYER = (1<<30), // pusher that can't be blocked by the player
    FL_JUMPING                  = (1<<31)   // player jumping
}

BSP Flags

shared enum BSPFlags_t
{
    // lower bits are stronger, and will eat weaker brushes completely
    CONTENTS_EMPTY                  = 0,                // No contents

    CONTENTS_SOLID                  = 0x1,              // an eye is never valid in a solid
    CONTENTS_WINDOW                 = 0x2,              // translucent, but not watery (glass)
    CONTENTS_AUX                        = 0x4,
    CONTENTS_GRATE                  = 0x8,              // alpha-tested "grate" textures.  Bullets/sight pass through, but solids don't
    CONTENTS_SLIME                  = 0x10,
    CONTENTS_WATER                  = 0x20,
    CONTENTS_BLOCKLOS                   = 0x40,         // block AI line of sight
    CONTENTS_OPAQUE                 = 0x80,         // things that cannot be seen through (may be non-solid though)
    LAST_VISIBLE_CONTENTS           = 0x80,

    ALL_VISIBLE_CONTENTS                = (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)),

    CONTENTS_TESTFOGVOLUME          = 0x100,
    CONTENTS_UNUSED                 = 0x200,

    // unused 
    // NOTE: If it's visible, grab from the top + update LAST_VISIBLE_CONTENTS
    // if not visible, then grab from the bottom.
    CONTENTS_UNUSED6                    = 0x400,

    CONTENTS_TEAM1                  = 0x800,            // per team contents used to differentiate collisions
    CONTENTS_TEAM2                  = 0x1000,           // between players and objects on different teams

    CONTENTS_IGNORE_NODRAW_OPAQUE   = 0x2000,           // ignore CONTENTS_OPAQUE on surfaces that have SURF_NODRAW

    CONTENTS_MOVEABLE                   = 0x4000,           // hits entities which are MOVETYPE_PUSH (doors, plats, etc.)

    CONTENTS_AREAPORTAL             = 0x8000,

    CONTENTS_PLAYERCLIP             = 0x10000,
    CONTENTS_MONSTERCLIP                = 0x20000,

    CONTENTS_CURRENT_0              = 0x40000,
    CONTENTS_CURRENT_90             = 0x80000,
    CONTENTS_CURRENT_180                = 0x100000,
    CONTENTS_CURRENT_270                = 0x200000,
    CONTENTS_CURRENT_UP             = 0x400000,
    CONTENTS_CURRENT_DOWN           = 0x800000,

    CONTENTS_ORIGIN                 = 0x1000000,

    CONTENTS_MONSTER                    = 0x2000000,
    CONTENTS_DEBRIS                 = 0x4000000,
    CONTENTS_DETAIL                 = 0x8000000,
    CONTENTS_TRANSLUCENT                = 0x10000000,
    CONTENTS_LADDER                 = 0x20000000,
    CONTENTS_HITBOX                 = 0x40000000,

    SURF_LIGHT                      = 0x0001,
    SURF_SKY2D                      = 0x0002,
    SURF_SKY                        = 0x0004,
    SURF_WARP                       = 0x0008,
    SURF_TRANS                      = 0x0010,
    SURF_NOPORTAL                   = 0x0020,
    SURF_TRIGGER                    = 0x0040,
    SURF_NODRAW                 = 0x0080,

    SURF_HINT                       = 0x0100,

    SURF_SKIP                       = 0x0200,
    SURF_NOLIGHT                    = 0x0400,
    SURF_BUMPLIGHT              = 0x0800,
    SURF_NOSHADOWS              = 0x1000,
    SURF_NODECALS                   = 0x2000,
    SURF_NOCHOP                 = 0x4000,
    SURF_HITBOX                 = 0x8000,

    // -----------------------------------------------------
    // spatial content masks - used for spatial queries (traceline,etc.)
    // -----------------------------------------------------
    MASK_ALL                        = (0xFFFFFFFF),
    MASK_SOLID                      = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE),
    // everything that blocks player movement
    MASK_PLAYERSOLID                = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE),
    // blocks npc movement
    MASK_NPCSOLID                   = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE),
    // water physics in these contents
    MASK_WATER                      = (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME),
    // everything that blocks lighting
    MASK_OPAQUE                 = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE),
    // everything that blocks lighting, but with monsters added.
    MASK_OPAQUE_AND_NPCS            = (MASK_OPAQUE|CONTENTS_MONSTER),
    // everything that blocks line of sight for AI
    MASK_BLOCKLOS                   = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_BLOCKLOS),
    // everything that blocks line of sight for AI plus NPCs
    MASK_BLOCKLOS_AND_NPCS      = (MASK_BLOCKLOS|CONTENTS_MONSTER),
    // everything that blocks line of sight for players
    MASK_VISIBLE                    = (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE),
    // everything that blocks line of sight for players, but with monsters added.
    MASK_VISIBLE_AND_NPCS       = (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE),
    // bullets see these as solid
    MASK_SHOT                       = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX),
    // non-raycasted weapons see this as solid = (includes grates),
    MASK_SHOT_HULL              = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE),
    // hits solids = (not grates), and passes through everything else
    MASK_SHOT_PORTAL                = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER),
    // everything normally solid, except monsters = (world+brush only),
    MASK_SOLID_BRUSHONLY            = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE),
    // everything normally solid for player movement, except monsters = (world+brush only),
    MASK_PLAYERSOLID_BRUSHONLY  = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE),
    // everything normally solid for npc movement, except monsters = (world+brush only),
    MASK_NPCSOLID_BRUSHONLY     = (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE),
    // just the world, used for route rebuilding
    MASK_NPCWORLDSTATIC         = (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE),
    // These are things that can split areaportals
    MASK_SPLITAREAPORTAL            = (CONTENTS_WATER|CONTENTS_SLIME),

    // UNDONE: This is untested, any moving water
    MASK_CURRENT                    = (CONTENTS_CURRENT_0|CONTENTS_CURRENT_90|CONTENTS_CURRENT_180|CONTENTS_CURRENT_270|CONTENTS_CURRENT_UP|CONTENTS_CURRENT_DOWN),

    // everything that blocks corpse movement
    // UNDONE: Not used yet / may be deleted
    MASK_DEADSOLID              = (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_GRATE),
}

Spawn flags

shared enum SpawnFlags_t
{
    SF_NPC_WAIT_TILL_SEEN       = ( 1 << 0  ),  // spawnflag that makes npcs wait until player can see them before attacking.
    SF_NPC_GAG                      = ( 1 << 1  ),  // no idle noises from this npc
    SF_NPC_FALL_TO_GROUND       = ( 1 << 2  ),  // used my NPC_Maker
    SF_NPC_DROP_HEALTHKIT       = ( 1 << 3  ),  // Drop a healthkit upon death
    SF_NPC_START_EFFICIENT      = ( 1 << 4  ), // Set into efficiency mode from spawn
    //                              = ( 1 << 5  ),
    //                              = ( 1 << 6  ),
    SF_NPC_WAIT_FOR_SCRIPT      = ( 1 << 7  ),  // spawnflag that makes npcs wait to check for attacking until the script is done or they've been attacked
    SF_NPC_LONG_RANGE               = ( 1 << 8  ),  // makes npcs look far and relaxes weapon range limit 
    SF_NPC_FADE_CORPSE          = ( 1 << 9  ),  // Fade out corpse after death
    SF_NPC_ALWAYSTHINK          = ( 1 << 10 ),  // Simulate even when player isn't in PVS.
    SF_NPC_TEMPLATE             = ( 1 << 11 ),  // This NPC will be used as a template by an npc_maker -- do not spawn.
    SF_NPC_ALTCOLLISION         = ( 1 << 12 ),
    SF_NPC_NO_WEAPON_DROP       = ( 1 << 13 ),  // This NPC will not actually drop a weapon that can be picked up
    SF_NPC_NO_PLAYER_PUSHAWAY   = ( 1 << 14 ),  
    //                              = ( 1 << 15 ),  
    // !! Flags above = ( 1 << 15 ),     are reserved for NPC sub-classes
    SF_NPC_INTERACTABLE         = (1<<30),
}