enum EnumDamageFlags
{
	DF_NORMAL = 1 << 0, ///< Normal damage. Nothing special here.
	DF_VIOLENT = 1 << 1, ///< Bloody Damage that causes gory deaths
	DF_EXPLOSIVE = 1 << 2, ///< damage from explosive weapons
	DF_EXTREME = 1 << 3, ///< damage that causes special deaths
	DF_LAVA = 1 << 4, ///< damage from lava
	DF_DROWN = 1 << 5 ///< damage from running out of oxygen while underwater
};

enum EnumPlayerFlags
{
	PF_NOCLIP = 1 << 0, ///<  Is NoClipping On
	PF_FLY = 1 << 1, ///<  Is Flying On
	PF_DEAD = 1 << 2, ///< Is Dead
	PF_GOD = 1 << 3, ///<  Is God mode On
	PF_JUMPING = 1 << 4, ///< Is Jumping. On until player is grounded
	PF_HASJUMPED = 1 << 5, ///< On at the first couple of frames at the start of a jump
	PF_INWARPAREA = 1 << 6, ///< In a region marked with teleport?
	PF_CLIMBTHRUST = 1 << 7, ///< On while moving during a climb up
	PF_NOAIRFRICTION = 1 << 8, ///< Velocity is not dampened while in the air. Turns off when grounded.
	PF_CRAWLING = 1 << 9, ///< Is crawling
	PF_FLOATCAM = 1 << 11, ///< (NOT DEFINED) Locks the camera in it's current position
	PF_CLIMBTHRUST2 = 1 << 12, ///< (NOT DEFINED) Another type of CLIMBTHRUST?
	PF_LOCKWEAPON = 1 << 15, ///< (NOT DEFINED) Can't change weapon
	PF_HIDEWEAPON = 1 << 18, ///< (NOT DEFINED) Hides the weapon model
	PF_SPECTATE = 1 << 19, ///< (NOT DEFINED) Is spectating the current map
	PF_NOWEAPON = 1 << 21, ///< (NOT DEFINED) Hides weapon and disables weapon switching and firing
	PF_DEMIGOD = 1 << 22, ///< (NOT DEFINED) When damaged health will not go below 1. Can still die by death pits.
};

enum EnumAnimStateFlags
{
	ANF_BLEND = 1 << 0, ///< Blend with previous playing animation
	ANF_LOOP = 1 << 1, ///< Loop animation
	ANF_STOPPED = 1 << 2, ///< Is Animation Stopped
	ANF_NOINTERRUPT = 1 << 3, ///< If on the animation cannot change until the animation cycle has completed
	ANF_ROOTMOTION = 1 << 4, ///< modifies the actors position/rotation/scale based on animation
	ANF_PAUSED = 1 << 5, ///< Is Animation paused
	ANF_CYCLECOMPLETED = 1 << 6, ///< Has the animation played through at least once
	ANF_LINEARBLEND = 1 << 7, ///< Blend the animation in a linear fashion
	ANF_NOACCUMULATION = 1 << 8, ///<
};

enum EnumActorFlags
{
	AF_NODAMAGE = 1 << 0, ///< Cannot be damaged
	AF_HIDDEN = 1 << 1, ///< Is not drawn and not active
	AF_DEAD = 1 << 2, ///< Is Dead
	AF_TRIGGERED = 1 << 3, ///< Is currently Triggered
	AF_ALLOWTRACKING = 1 << 5, ///< Can be tracked by weapons such as the cerebral bore and rocket launcher
	AF_NOINFLICTDAMAGE = 1 << 6, ///< Used in ScriptObject::OnPreDamage callback to prevent damage to actor and also prevents callbacks to ScriptObject::OnDamage and ScriptObject::OnDeath
	AF_SHOWGIZMOS = 1 << 7, ///< (NOT DEFINED) Shows origin and object radius debug gizmos on actor
	AF_CASTSHADOW = 1 << 8, ///< Casts a shadow
	AF_NOGENERATE = 1 << 9, ///< Prevents pickup item generation when calling kActor::GenerateActors
	AF_EASY = 1 << 10, ///< (NOT DEFINED) Marked to appear on Easy difficulty
	AF_NORMAL = 1 << 11, ///< (NOT DEFINED) Marked to appear on Normal difficulty
	AF_HARD = 1 << 12, ///< (NOT DEFINED) Marked to appear on Hard difficulty
	AF_HARDCORE = 1 << 13, ///< (NOT DEFINED) Marked to appear on Hardcore difficulty
	AF_IMPORTANT = 1 << 14, ///< Will show an exclaimation marker on this actor when near the player (through walls)
	AF_DESERIALIZED = 1 << 15, ///< Was this actors state loaded from a save game
	AF_FULLSHADOWRESOLUTION = 1 << 16, ///< Shadow cast resolution at maximum
	AF_HIDEINCINEMATICS = 1 << 17, ///< Hide while in a cinematic
	AF_EVENTSPAWNED = 1 << 18, ///<
	AF_HASTRIGGERLISTENER = 1 << 19, ///< Has Trigger callback
	AF_HASRESETRLISTENER = 1 << 20, ///< Has Reset callback
	AF_HASSHOTLISTENER = 1 << 21, ///< Has shot by projectile callback
	AF_HASDEATHLISTENER = 1 << 22, ///< Has Death callback
	AF_HASCOLLIDELISTENER = 1 << 23, ///< Has Collision callback
};

enum EnumClipFlags
{
	CF_CLIPEDGES = 1 << 0, ///< Collide with the end edges of regions (walls)
	CF_IGNOREBLOCKERS = 1 << 1, ///< Ignore blocking volumes. Platform Collision?
	CF_DROPOFF = 1 << 2, ///< Can fall off regions marked as cliffs and bridges
	CF_NOENTERWATER = 1 << 3, ///< Cannot enter regions marked as water
	CF_NOEXITWATER = 1 << 4, ///< Cannot exit regions marked as water
	CF_NOCLIPSTATICS = 1 << 5, ///< Prevents Collision with Static Meshes
	CF_NOCLIPACTORS = 1 << 6, ///< Prevents Collision with Actors
	CF_ALLOWCLIMB = 1 << 7, ///< Can enter and climb regions marked as climb
	CF_ALLOWCRAWL = 1 << 8, ///< Can enter and exit regions marked as crawl or enter crawl
	CF_COLLIDECORPSES = 1 << 9, ///< Collide with dead actors
	CF_NOBACKFACECULLING = 1 << 10, ///< Will check both back and front faces for collision
	CF_COLLIDEWATER = 1 << 11, ///< Collide with regions marked with water at the regions water height
	CF_USEWALLRADIUS = 1 << 12, ///< Use wall radius instead of just the actors radius for collision
	CF_GREASESLIDEOBJECTS = 1 << 13, ///< Can slide down regions marked as cliffs
	CF_ALLOWRESTRICTEDAREAS = 1 << 14, ///< can enter regions marked with Restricted
	CF_CHECKLINKEDBRIDGES = 1 << 15, ///< Able to use bridge regions for collision checks
	CF_POLYCOLLISION = 1 << 16, ///< Checks collision based on polys
	CF_TRACKGROUND = 1 << 17, ///< Snap to floor
	CF_WALKWALLS = 1 << 18, ///< Able to walk on regions marked as cliffs
	CF_TESTONLY = 1 << 19, ///< For Collision Tests only such as Raycasts and checking for valid nearest regions
	CF_COLLIDECEILING = 1 << 20, ///< Collide with ceilings
	CF_COLLIDEFLOOR = 1 << 21, ///< Collide with floors
	CF_COLLIDEJOINTS = 1 << 22, ///< Collide with skinnedmesh joints/bones
	CF_CANLANDONOBJECTS = 1 << 23, ///< can stand on static mesh collision radius
	CF_NOEXITRESTRICTEDAREAS = 1 << 24, ///< cannot exit regions marked with Restricted
	CF_ALLOWPLAYERRESTRICTED = 1 << 25, ///< can enter regions marked with Player Restricted
	CF_NOEXITPLAYERRESTRICTED = 1 << 26, ///< cannot exit regions marked with Player Restricted
	CF_NOENTERLAVA = 1 << 27, ///< Cannot enter regions marked as water
	CF_NOEXITLAVA = 1 << 28, ///< Cannot exit regions marked as lava
	CF_NOENTERSWAMP = 1 << 29, ///< Cannot enter regions marked as water
	CF_NOEXITSWAMP = 1 << 30, ///< Cannot exit regions marked as swamp
	CF_DEAD_CHARACTER = CF_CLIPEDGES | CF_DROPOFF | CF_COLLIDECORPSES | CF_USEWALLRADIUS | CF_CHECKLINKEDBRIDGES | CF_TRACKGROUND | CF_COLLIDECEILING | CF_ALLOWPLAYERRESTRICTED, //34771461
	CF_CHARACTER_UNDERWATER = CF_CLIPEDGES | CF_DROPOFF | CF_USEWALLRADIUS | CF_CHECKLINKEDBRIDGES | CF_TRACKGROUND | CF_COLLIDECEILING | CF_ALLOWPLAYERRESTRICTED | CF_NOENTERSWAMP, //705859589
	CF_CHARACTER_FLYING = CF_CLIPEDGES | CF_DROPOFF | CF_NOENTERWATER | CF_USEWALLRADIUS | CF_CHECKLINKEDBRIDGES | CF_TRACKGROUND | CF_COLLIDECEILING | CF_ALLOWPLAYERRESTRICTED | CF_NOENTERSWAMP, //705859597
	CF_CHARACTER = CF_CLIPEDGES | CF_NOENTERWATER | CF_USEWALLRADIUS | CF_CHECKLINKEDBRIDGES | CF_TRACKGROUND | CF_ALLOWPLAYERRESTRICTED | CF_NOENTERSWAMP, //704811017
	CF_RAYCAST = CF_CLIPEDGES | CF_DROPOFF | CF_ALLOWCRAWL | CF_ALLOWRESTRICTEDAREAS | CF_CHECKLINKEDBRIDGES | CF_WALKWALLS | CF_TESTONLY | CF_ALLOWPLAYERRESTRICTED,  //34390277
	CF_STATIC = CF_CLIPEDGES | CF_DROPOFF | CF_NOCLIPSTATICS | CF_NOCLIPACTORS | CF_ALLOWCRAWL | CF_ALLOWRESTRICTEDAREAS | CF_ALLOWPLAYERRESTRICTED,  //33571173
	CF_NEARREGIONTEST = CF_CLIPEDGES | CF_IGNOREBLOCKERS | CF_DROPOFF | CF_NOCLIPSTATICS | CF_NOCLIPACTORS | CF_ALLOWRESTRICTEDAREAS | CF_CHECKLINKEDBRIDGES | CF_WALKWALLS | CF_TESTONLY | CF_ALLOWPLAYERRESTRICTED,   //34390119
	CF_PARTICLE = CF_CLIPEDGES | CF_IGNOREBLOCKERS | CF_DROPOFF | CF_ALLOWCRAWL | CF_COLLIDECORPSES | CF_COLLIDEWATER | CF_ALLOWRESTRICTEDAREAS | CF_CHECKLINKEDBRIDGES | CF_COLLIDECEILING | CF_COLLIDEFLOOR | CF_ALLOWPLAYERRESTRICTED,  //36752135
	CF_SIMPLE_OBJECT = CF_CLIPEDGES | CF_DROPOFF | CF_NOCLIPACTORS | CF_CHECKLINKEDBRIDGES | CF_COLLIDECEILING | CF_COLLIDEFLOOR | CF_NOENTERLAVA | CF_NOENTERSWAMP //674267205
};

enum EnumModeFlags
{
	MF_INVINCIBLE = 1 << 0, ///< Is Invincible
	MF_HEADTRACK = 1 << 1, ///< Head tracks target
	MF_CLEARMOVEMENT = 1 << 2, ///< 
	MF_NO_BLEND = 1 << 3, ///< Animations won't blend
	MF_IDLE = 1 << 4, ///< 
	MF_CLEARLOOPSOUNDS = 1 << 5, ///< Stops looping sounds
	MF_NOACCUMULATION = 1 << 6, ///< 
	MF_NOROOTMOTION = 1 << 7, ///< Animations won't effect actors position/rotation/scale
};

enum EnumRenderMeshComponentFlags
{
	RMCF_RENDER_AS_WEAPON = 1 << 0, ///< Render in the Weapon View
	RMCF_CLOAKED = 1 << 1, ///< Cloak effect
	RMCF_HEADTRACK = 1 << 2, ///< Enable Head tracking to target
	RMCF_TINYMODE = 1 << 3, ///< Enable Is Tiny mode on this rendermesh
	RMCF_WAGGLE = 1 << 4, ///< Enable Hands in the air and runs around (can be caused by Flamethrower)
	RMCF_SHOCKED = 1 << 5, ///< Enable Shock effect (Can be one caused by Charge Dart)
	RMCF_NOEXPANDJOINTS = 1 << 7, ///<
};

enum EnumWorldComponentFlags
{
	WCF_NONSOLID = 1 << 0, ///< Does not have radial collision
	WCF_INVOKE_COLLIDE_CALLBACK = 1 << 1, ///< Can call the collide callback
	WCF_ON_PLATFORM = 1 << 2, ///< Is on platform and will be effected by it
	WCF_NO_CLAMP_TO_FLOOR = 1 << 3, ///< will not snap to floor (going down stairs will not walk down nicely)
	WCF_ON_WATER = 1 << 4, ///< Is on water
	WCF_UNDER_WATER = 1 << 5, ///< Is under water
	WCF_ABOVE_WATER = 1 << 6, ///< Is above the water
	WCF_IN_SHALLOW_WATER = 1 << 7, ///< Is in shallow water
	WCF_IN_ANTIGRAVITY = 1 << 8, ///< Is in antigravity region
	WCF_AT_CLIMBING_SURFACE = 1 << 9, ///< Is in climbing region
	WCF_ON_CROUCH_ENTEREXIT = 1 << 10, ///< Is in enter/exit crouch state
	WCF_ON_CROUCH = 1 << 11, ///< Is crouching
	WCF_JUST_ENTERED_DEATH_REGION = 1 << 12, ///< Entered death pit region
	WCF_TRACK_GROUND = 1 << 13, ///< Snap to floor
	WCF_WALK_WALLS = 1 << 14, //(not defined)
	WCF_ENTERED_FALL_DEATH_REGION = 1 << 15 //(not defined)
};

/**
 * @brief (NOT DEFINED)
 */
enum EnumEnemyAICommonFlags
{
	EAICF_LEADER = 1 << 0, ///< 
	EAICF_FOLLOWER = 1 << 1, ///< 
	EAICF_PASS_ON_LEADERSHIP = 1 << 2, ///< 
	EAICF_FREE_FOLLOWERS = 1 << 3, ///< 
	EAICF_USE_LEASH = 1 << 4, ///< Will not go beyond the leash radius
	EAICF_RESPAWN = 1 << 5, ///< Will respawn when map begins
	EAICF_TELEPORT = 1 << 6, ///< When moving will try using Teleport animation and then warp to it's move destination
	EAICF_CAN_BE_BLINDED = 1 << 7, ///< Can be blinded (With Sunfire Pod)
	EAICF_CAN_BE_SHOCKED = 1 << 8, ///< Can be shocked (With Charge Dart)
	EAICF_CAN_BE_TRANQUALIZED = 1 << 9, ///< Can be Tranqualized (With Tranqualizer)
	EAICF_CAN_BE_BORED = 1 << 10, ///< Can the Cerebral Bore be used on this enemy
	EAICF_LINK_TRIGGERED = 1 << 11, ///< 
	EAICF_INVISIBLE = 1 << 12, ///< When Spawned will start hidden
	EAICF_CAN_BE_BORE_TRACKED = 1 << 13, ///< Can the Cerebral Bore track this enemy
	EAICF_FACE_START_ON_LEASH = 1 << 14, ///< Face start position when moving to leash
	EAICF_RESTRICTVISION = 1 << 15, ///< 
	EAICF_VANISH_ON_DEATH = 1 << 16, ///< On Death the enemy will fade away
	EAICF_FEIGN_DEATH = 1 << 17, ///< When damaged will pretend to die and get back up when target is seen again
	EAICF_HURT_BY_SUNFIRE = 1 << 18, ///< Can be damaged by Sunfire Pod
	EAICF_NO_FLINCHING = 1 << 19, ///< Disable the joint position displacement when being damaged
	EAICF_CAN_CLOAK = 1 << 20, ///< Will try using Cloak animation and then enables the cloak effect
	EAICF_AUTO_TRIGGER = 1 << 21 ///< 
};

enum EnumEnemyAIGeneralFlags
{
	EAIGF_CLIMBUP = 1 << 0, ///< Can walk on walls
	EAIGF_DROPOFF = 1 << 1, ///<  Can fall off cliffs and bridges
	EAIGF_ENTERWATER = 1 << 2, ///< Can Enter Water
	EAIGF_EXITWATER = 1 << 3, ///< Can Exit Water
	EAIGF_ENTERLAVA = 1 << 4, ///< Can Enter Lava
	EAIGF_EXITLAVA = 1 << 5, ///< Can Exit Lava
	EAIGF_PICKUP_ON_GROUND = 1 << 6, ///< 
	EAIGF_PICKUP_ON_AIR = 1 << 7, ///< 
	EAIGF_PICKUP_ON_WATER = 1 << 8, ///< 
	EAIGF_ENTERRESTRICTED = 1 << 9, ///< Can Enter Water
	EAIGF_EXITRESTRICTED = 1 << 10, ///< Can Exit Restricted
	EAIGF_ENTERSWAMP = 1 << 11, ///< Can Enter Swamp
	EAIGF_EXITSWAMP = 1 << 12, ///< Can Exit Swamp
	EAIGF_ENTERCROUCH = 1 << 13, ///< Can Enter Crouch state
	EAIGF_EXITCROUCH = 1 << 14, ///< Can Exit Crouch state
	EAIGF_ATTACK_LANDED = 1 << 15, ///< 
	EAIGF_STUN_LOCKED = 1 << 16, ///< 
	EAIGF_NO_UPDATE_SIGHT_TARGET = 1 << 17, //(not defined)
	EAIGF_NO_UPDATE_PATH_TARGET  = 1 << 18, //(not defined)
	EAIGF_NO_FACE_TARGET =  = 1 << 19 //(not defined)
};

enum EnumMovementComponentFlags
{
	MCF_NO_GRAVITY = 1 << 0, ///< Not effected by gravity
	MCF_FALLING = 1 << 1, ///<  Is falling down. Not on the ground and velocity.z is negative?
	MCF_ALLOW_SLIDING = 1 << 2, ///< Can slide down cliffs
	MCF_SLIDING = 1 << 3, ///< Is sliding down a cliff
	MCF_UNDERWATER = 1 << 4, ///< Is underwater
	MCF_DISABLE_AIR_FRICTION_UNTIL_LAND = 1 << 5, ///< Velocity is not dampened while in the air. Turns off when grounded.
	MCF_PROCESS_MOVEMENT = 1 << 6, ///< Enables movement until it gets disabled again
};

enum ParticleFlags
{
	FXF_PERMANENT = 1 << 2, ///< Is never removed
	FXF_NOCOLLISION = 1 << 3, ///< Disables all collision with the particle
	FXF_ONE_FRAME_ONLY = 1 << 4, ///< 
	FXF_NO_INBETWEENS = 1 << 5, ///< 
	FXF_STICK_CHAR = 1 << 6, ///< Is sticking to an actor skinned mesh
	FXF_STICK_STATIC = 1 << 7, ///< Is sticking to a static mesh
	FXF_NO_SOUND = 1 << 8, ///< Does not play sounds
	FXF_ATTACH_TO_PLAYER = 1 << 9, ///< 
	FXF_BLOOD = 1 << 10, ///< Is a blood type of particle
	FXF_UNDERWATER = 1 << 11, ///< is underwater
	FXF_BECAME_PICKUP = 1 << 12, ///< 
	FXF_ALTERNATE_BLOOD = 1 << 13, ///< 
	FXF_DREW_BLOOD = 1 << 14, ///< On if particle hit a blood surface
	FXF_DREW_BLOOD_GREEN = 1 << 15, ///< On if particle hit a green blood surface
	FXF_PASSON = FXF_NO_SOUND | FXF_UNDERWATER //2304
};

enum EnumPlayerButtons
{
	BC_ATTACK = 1 << 0, ///< Primary Fire is currently being pressed down
	BC_JUMP = 1 << 1, ///< Jump is currently being pressed down
	BC_FORWARD = 1 << 2, ///< Move Forward is currently being pressed down
	BC_BACKWARD = 1 << 3, ///< Move Bakcward is currently being pressed down
	BC_STRAFELEFT = 1 << 4, ///< Strafe Left is currently being pressed down
	BC_STRAFERIGHT = 1 << 5, ///< Strafe Right is currently being pressed down
	BC_CROUCH = 1 << 6, ///< (NOT DEFINED) Crouch is currently being pressed down
	BC_ALTFIRE = 1 << 7, ///< Alt Fire was pressed (Just the first frame)
	BC_SCOPEZOOMIN = 1 << 8, ///< Weapon Zoom In is currently being pressed down
	BC_SCOPEZOOMOUT = 1 << 9 ///< Weapon Zoom Out is currently being pressed down
};

enum EnumEnemyAITargetTypes
{
	EAITT_ATTACKER = 0, ///<
	EAITT_FLEE = 1, ///< Is Fleeing. Targeting a Flee position
	EAITT_LEADER = 2, ///< 
	EAITT_LEASH = 3, ///< Leash position
	EAITT_PATH = 4, ///< An AI Path Point
	EAITT_OBJECT = 5, ///< Targeting an Actor
	EAITT_DEATH = 6, ///<
	EAITT_COVER = 7, ///< A Cover Point
};

enum EnumDifficulty
{
	DIFFICULTY_EASY = 0,
	DIFFICULTY_NORMAL = 1,
	DIFFICULTY_HARD = 2,
	DIFFICULTY_HARDCORE = 3
};

/**
 * @brief All enums have a value of 0. I would not use this enum at all.
 */
enum EnumPlaneSide
{
	PSIDE_ON = 0,
	PSIDE_BACK = 0,
	PSIDE_FRONT = 0
};
