
// Flags for A_PainAttack
const int PAF_NOSKULLATTACK = 1;
const int PAF_AIMFACING = 2;
const int PAF_NOTARGET = 4;

// Flags for A_VileAttack
const int VAF_DMGTYPEAPPLYTODIRECT = 1;

// Flags for A_Saw
const int SF_NORANDOM = 1;
const int SF_RANDOMLIGHTMISS = 2;
const int SF_RANDOMLIGHTHIT = 4;
const int SF_RANDOMLIGHTBOTH = 6;
const int SF_NOUSEAMMOMISS = 8;
const int SF_NOUSEAMMO = 16;
const int SF_NOPULLIN = 32;
const int SF_NOTURN = 64;
const int SF_STEALARMOR = 128;

// Flags for A_BFGSpray
const int BFGF_HURTSOURCE = 1;
const int BFGF_MISSILEORIGIN = 2;

// Flags for A_CustomMissile
const int CMF_AIMOFFSET = 1;
const int CMF_AIMDIRECTION = 2;
const int CMF_TRACKOWNER = 4;
const int CMF_CHECKTARGETDEAD = 8;
const int CMF_ABSOLUTEPITCH = 16;
const int CMF_OFFSETPITCH = 32;
const int CMF_SAVEPITCH = 64;
const int CMF_ABSOLUTEANGLE = 128;

// Flags for A_CustomBulletAttack
const int CBAF_AIMFACING = 1;
const int CBAF_NORANDOM = 2;
const int CBAF_EXPLICITANGLE = 4;
const int CBAF_NOPITCH = 8;
const int CBAF_NORANDOMPUFFZ = 16;
const int CBAF_PUFFTARGET = 32;
const int CBAF_PUFFMASTER = 64;
const int CBAF_PUFFTRACER = 128;

// Flags for A_GunFlash
const int GFF_NOEXTCHANGE = 1;

// Flags for A_FireBullets
const int FBF_USEAMMO = 1;
const int FBF_NORANDOM = 2;
const int FBF_EXPLICITANGLE = 4;
const int FBF_NOPITCH = 8;
const int FBF_NOFLASH = 16;
const int FBF_NORANDOMPUFFZ = 32;

// Flags for A_SpawnItemEx
const int SXF_TRANSFERTRANSLATION =		1 << 0;
const int SXF_ABSOLUTEPOSITION =		1 << 1;
const int SXF_ABSOLUTEANGLE =			1 << 2;
const int SXF_ABSOLUTEMOMENTUM =		1 << 3;	//Since "momentum" is declared to be deprecated in the expressions, for compatibility
const int SXF_ABSOLUTEVELOCITY =		1 << 3;	//purposes, this was made. It does the same thing though. Do not change the value.
const int SXF_SETMASTER =				1 << 4;
const int SXF_NOCHECKPOSITION =			1 << 5;
const int SXF_TELEFRAG =				1 << 6;
const int SXF_CLIENTSIDE =				1 << 7;	// only used by Skulltag
const int SXF_TRANSFERAMBUSHFLAG =		1 << 8;
const int SXF_TRANSFERPITCH =			1 << 9;
const int SXF_TRANSFERPOINTERS =		1 << 10;
const int SXF_USEBLOODCOLOR =			1 << 11;
const int SXF_CLEARCALLERTID =			1 << 12;
const int SXF_MULTIPLYSPEED =			1 << 13;
const int SXF_TRANSFERSCALE =			1 << 14;
const int SXF_TRANSFERSPECIAL =			1 << 15;
const int SXF_CLEARCALLERSPECIAL =		1 << 16;
const int SXF_TRANSFERSTENCILCOL =		1 << 17;
const int SXF_TRANSFERALPHA =			1 << 18;
const int SXF_TRANSFERRENDERSTYLE =		1 << 19;
const int SXF_SETTARGET =				1 << 20;
const int SXF_SETTRACER =				1 << 21;
const int SXF_NOPOINTERS =				1 << 22;
const int SXF_ORIGINATOR =				1 << 23;
const int SXF_TRANSFERSPRITEFRAME	=	1 << 24;
const int SXF_TRANSFERROLL =			1 << 25;
const int SXF_ISTARGET				=	1 << 26;
const int SXF_ISMASTER				=	1 << 27;
const int SXF_ISTRACER				=	1 << 28;

// Flags for A_Chase
enum
{
	CHF_FASTCHASE =						1,
	CHF_NOPLAYACTIVE =					2,
	CHF_NIGHTMAREFAST =					4,
	CHF_RESURRECT =						8,
	CHF_DONTMOVE =						16,
	CHF_NORANDOMTURN =					32,
	CHF_NODIRECTIONTURN =				64,
	CHF_NOPOSTATTACKTURN =				128,
	CHF_STOPIFBLOCKED =					256,

	CHF_DONTTURN = CHF_NORANDOMTURN | CHF_NOPOSTATTACKTURN | CHF_STOPIFBLOCKED
};

// Flags for A_LookEx
const int LOF_NOSIGHTCHECK = 1;
const int LOF_NOSOUNDCHECK = 2;
const int LOF_DONTCHASEGOAL = 4;
const int LOF_NOSEESOUND = 8;
const int LOF_FULLVOLSEESOUND = 16;
const int LOF_NOJUMP = 32;

// Flags for A_Respawn
const int RSF_FOG = 1;
const int RSF_KEEPTARGET = 2;
const int RSF_TELEFRAG = 4;

// Flags for A_JumpIfTargetInLOS and A_JumpIfInTargetLOS
enum
{
	JLOSF_PROJECTILE =		1,
	JLOSF_NOSIGHT =			1 << 1,
	JLOSF_CLOSENOFOV =		1 << 2,
	JLOSF_CLOSENOSIGHT =	1 << 3,
	JLOSF_CLOSENOJUMP =		1 << 4,
	JLOSF_DEADNOJUMP =		1 << 5,
	JLOSF_CHECKMASTER =		1 << 6,
	JLOSF_TARGETLOS =		1 << 7,
	JLOSF_FLIPFOV =			1 << 8,
	JLOSF_ALLYNOJUMP =		1 << 9,
	JLOSF_COMBATANTONLY =	1 << 10,
	JLOSF_NOAUTOAIM =		1 << 11,
	JLOSF_CHECKTRACER =		1 << 12,
};

// Flags for A_ChangeVelocity
const int CVF_RELATIVE = 1;
const int CVF_REPLACE = 2;

// Flags for A_WeaponReady
const int WRF_NOBOB = 1;
const int WRF_NOSWITCH = 2;
const int WRF_NOPRIMARY = 4;
const int WRF_NOSECONDARY = 8;
const int WRF_NOFIRE = WRF_NOPRIMARY | WRF_NOSECONDARY;
const int WRF_ALLOWRELOAD = 16;
const int WRF_ALLOWZOOM = 32;
const int WRF_DISABLESWITCH = 64;
const int WRF_ALLOWUSER1 = 128;
const int WRF_ALLOWUSER2 = 256;
const int WRF_ALLOWUSER3 = 512;
const int WRF_ALLOWUSER4 = 1024;

// Flags for A_SelectWeapon
const int SWF_SELECTPRIORITY = 1;

// Morph constants
const int MRF_ADDSTAMINA = 1;
const int MRF_FULLHEALTH = 2;
const int MRF_UNDOBYTOMEOFPOWER = 4;
const int MRF_UNDOBYCHAOSDEVICE = 8;
const int MRF_FAILNOTELEFRAG = 16;
const int MRF_FAILNOLAUGH = 32;
const int MRF_WHENINVULNERABLE = 64;
const int MRF_LOSEACTUALWEAPON = 128;
const int MRF_NEWTIDBEHAVIOUR = 256;
const int MRF_UNDOBYDEATH = 512;
const int MRF_UNDOBYDEATHFORCED = 1024;
const int MRF_UNDOBYDEATHSAVES = 2048;
const int MRF_UNDOALWAYS = 4096;
const int MRF_TRANSFERTRANSLATION = 8192;

// Flags for A_RailAttack and A_CustomRailgun
const int RGF_SILENT = 1;
const int RGF_NOPIERCING = 2;
const int RGF_EXPLICITANGLE = 4;
const int RGF_FULLBRIGHT = 8;
const int RGF_CENTERZ = 16;
const int RGF_NORANDOMPUFFZ = 32;

// Flags for A_Mushroom
const int MSF_Standard = 0;
const int MSF_Classic = 1;
const int MSF_DontHurt = 2;

// Flags for A_Explode
const int XF_HURTSOURCE = 1;
const int XF_NOTMISSILE = 4;
const int XF_EXPLICITDAMAGETYPE = 1 << 3;

// Flags for A_RadiusThrust
const int RTF_AFFECTSOURCE = 1;
const int RTF_NOIMPACTDAMAGE = 2;
const int RTF_NOTMISSILE = 4;
const int RTF_THRUSTZ = 16;

// Flags for A_RadiusDamageSelf
const int RDSF_BFGDAMAGE = 1;

// Flags for A_Blast
const int BF_USEAMMO = 1;
const int BF_DONTWARN = 2;
const int BF_AFFECTBOSSES = 4;
const int BF_NOIMPACTDAMAGE = 8;

// Flags for A_SeekerMissile
const int SMF_LOOK = 1;
const int SMF_PRECISE = 2;
const int SMF_CURSPEED = 4;

// Flags for A_CustomPunch
const int CPF_USEAMMO = 1;
const int CPF_DAGGER = 2;
const int CPF_PULLIN = 4;
const int CPF_NORANDOMPUFFZ = 8;
const int CPF_NOTURN = 16;
const int CPF_STEALARMOR = 32;

// Flags for A_CustomMissile
const int FPF_AIMATANGLE = 1;
const int FPF_TRANSFERTRANSLATION = 2;
const int FPF_NOAUTOAIM = 4;
const int FBF_PUFFTARGET = 64;
const int FBF_PUFFMASTER = 128;
const int FBF_PUFFTRACER = 256;

// Flags for A_Teleport
enum
{
	TF_TELEFRAG =		0x00000001, // Allow telefrag in order to teleport.
	TF_RANDOMDECIDE =	0x00000002, // Randomly fail based on health. (A_Srcr2Decide)
	TF_FORCED =			0x00000004, // Forget what's in the way. TF_Telefrag takes precedence though.
	TF_KEEPVELOCITY =	0x00000008, // Preserve velocity.
	TF_KEEPANGLE =		0x00000010, // Keep angle.
	TF_USESPOTZ =		0x00000020, // Set the z to the spot's z, instead of the floor.
	TF_NOSRCFOG =		0x00000040, // Don't leave any fog behind when teleporting.
	TF_NODESTFOG =		0x00000080, // Don't spawn any fog at the arrival position.
	TF_USEACTORFOG =	0x00000100, // Use the actor's TeleFogSourceType and TeleFogDestType fogs.
	TF_NOJUMP =			0x00000200, // Don't jump after teleporting.
	TF_OVERRIDE =		0x00000400, // Ignore NOTELEPORT.
	TF_SENSITIVEZ =		0x00000800, // Fail if the actor wouldn't fit in the position (for Z).

	TF_KEEPORIENTATION = TF_KEEPVELOCITY|TF_KEEPANGLE,
	TF_NOFOG = TF_NOSRCFOG|TF_NODESTFOG,
};

// Flags for A_WolfAttack
const int WAF_NORANDOM = 1;
const int WAF_USEPUFF = 2;

// Flags for A_RadiusGive
enum
{
	RGF_GIVESELF	=   1,
	RGF_PLAYERS		=   1 << 1,
	RGF_MONSTERS	=   1 << 2,
	RGF_OBJECTS		=   1 << 3,
	RGF_VOODOO		=	1 << 4,
	RGF_CORPSES		=	1 << 5,
	RGF_NOTARGET	=	1 << 6,
	RGF_NOTRACER	=	1 << 7,
	RGF_NOMASTER	=	1 << 8,
	RGF_CUBE		=	1 << 9,
	RGF_NOSIGHT		=	1 << 10,
	RGF_MISSILES	=	1 << 11,
	RGF_INCLUSIVE	=	1 << 12,
	RGF_ITEMS		=	1 << 13,
	RGF_KILLED		=	1 << 14,
	RGF_EXFILTER	=	1 << 15,
	RGF_EXSPECIES	=	1 << 16,
	RGF_EITHER		=	1 << 17,
};

// Activation flags
enum
{
	THINGSPEC_Default = 0,
	THINGSPEC_ThingActs = 1,
	THINGSPEC_ThingTargets = 2,
	THINGSPEC_TriggerTargets = 4,
	THINGSPEC_MonsterTrigger = 8,
	THINGSPEC_MissileTrigger = 16,
	THINGSPEC_ClearSpecial = 32,
	THINGSPEC_NoDeathSpecial = 64,
	THINGSPEC_TriggerActs = 128,
};
// Shorter aliases for same
const int AF_Default = 0;
const int AF_ThingActs = 1;
const int AF_ThingTargets = 2;
const int AF_TriggerTargets = 4;
const int AF_MonsterTrigger = 8;
const int AF_MissileTrigger = 16;
const int AF_ClearSpecial = 32;
const int AF_NoDeathSpecial = 64;
const int AF_TriggerActs = 128;

// Flags for A_TakeInventory and A_TakeFromTarget
const int TIF_NOTAKEINFINITE = 1;

// constants for A_PlaySound
enum
{
	CHAN_AUTO = 0,
	CHAN_WEAPON = 1,
	CHAN_VOICE = 2,
	CHAN_ITEM = 3,
	CHAN_BODY = 4,
	CHAN_5 = 5,
	CHAN_6 = 6,
	CHAN_7 = 7,
	
	// modifier flags
	CHAN_LISTENERZ = 8,
	CHAN_MAYBE_LOCAL = 16,
	CHAN_UI = 32,
	CHAN_NOPAUSE = 64
};

// sound attenuation values
const float ATTN_NONE = 0;
const float ATTN_NORM = 1;
const float ATTN_IDLE = 1.001;
const float ATTN_STATIC = 3;

// For SetPlayerProprty action special
Const Int PROP_FROZEN = 0;
Const Int PROP_NOTARGET = 1;
Const Int PROP_INSTANTWEAPONSWITCH = 2;
Const Int PROP_FLY = 3;
Const Int PROP_TOTALLYFROZEN = 4;
Const Int PROP_INVULNERABILITY  = 5; // (Deprecated)
Const Int PROP_STRENGTH = 6; // (Deprecated)
Const Int PROP_INVISIBILITY = 7; // (Deprecated)
Const Int PROP_RADIATIONSUIT = 8; // (Deprecated)
Const Int PROP_ALLMAP = 9; // (Deprecated)
Const Int PROP_INFRARED = 10; // (Deprecated)
Const Int PROP_WEAPONLEVEL2 = 11; // (Deprecated)
Const Int PROP_FLIGHT = 12; // (Deprecated)
Const Int PROP_SPEED = 15; // (Deprecated)
Const Int PROP_BUDDHA = 16;

// Line_SetBlocking
Const Int BLOCKF_CREATURES = 1;
Const Int BLOCKF_MONSTERS = 2;
Const Int BLOCKF_PLAYERS = 4;
Const Int BLOCKF_FLOATERS = 8;
Const Int BLOCKF_PROJECTILES = 16;
Const Int BLOCKF_EVERYTHING = 32;
Const Int BLOCKF_RAILING = 64;
Const Int BLOCKF_USE = 128;

// Pointer constants, bitfield-enabled

Const Int AAPTR_DEFAULT = 0;
Const Int AAPTR_NULL = 0x1;
Const Int AAPTR_TARGET = 0x2;
Const Int AAPTR_MASTER = 0x4;
Const Int AAPTR_TRACER = 0x8;

Const Int AAPTR_PLAYER_GETTARGET = 0x10;
Const Int AAPTR_PLAYER_GETCONVERSATION = 0x20;

Const Int AAPTR_PLAYER1 = 0x40;
Const Int AAPTR_PLAYER2 = 0x80;
Const Int AAPTR_PLAYER3 = 0x100;
Const Int AAPTR_PLAYER4 = 0x200;
Const Int AAPTR_PLAYER5 = 0x400;
Const Int AAPTR_PLAYER6 = 0x800;
Const Int AAPTR_PLAYER7 = 0x1000;
Const Int AAPTR_PLAYER8 = 0x2000;

Const Int AAPTR_FRIENDPLAYER = 0x4000;
Const Int AAPTR_LINETARGET = 0x8000;

// Pointer operation flags

Const Int PTROP_UNSAFETARGET = 1;
Const Int PTROP_UNSAFEMASTER = 2;
Const Int PTROP_NOSAFEGUARDS = PTROP_UNSAFETARGET|PTROP_UNSAFEMASTER;


// Flags for A_Warp

Const Int WARPF_ABSOLUTEOFFSET = 0x1;
Const Int WARPF_ABSOLUTEANGLE = 0x2;
Const Int WARPF_USECALLERANGLE = 0x4;
Const Int WARPF_NOCHECKPOSITION = 0x8;
Const Int WARPF_INTERPOLATE = 0x10;
Const Int WARPF_WARPINTERPOLATION = 0x20;
Const Int WARPF_COPYINTERPOLATION = 0x40;
Const Int WARPF_STOP = 0x80;
Const Int WARPF_TOFLOOR = 0x100;
Const Int WARPF_TESTONLY = 0x200;
Const Int WAPRF_ABSOLUTEPOSITION = 0x400;
Const Int WARPF_ABSOLUTEPOSITION = 0x400;
Const Int WARPF_BOB = 0x800;
Const Int WARPF_MOVEPTR = 0x1000;
Const Int WARPF_USETID = 0x2000;
Const Int WARPF_COPYVELOCITY = 0x4000;
Const Int WARPF_COPYPITCH = 0x8000;

// flags for A_SetPitch/SetAngle/SetRoll
const int SPF_FORCECLAMP = 1;
const int SPF_INTERPOLATE = 2;


// flags for A_CheckLOF

enum
{
	CLOFF_NOAIM_VERT =			0x1,
	CLOFF_NOAIM_HORZ =			0x2,

	CLOFF_JUMPENEMY =			0x4,
	CLOFF_JUMPFRIEND =			0x8,
	CLOFF_JUMPOBJECT =			0x10,
	CLOFF_JUMPNONHOSTILE =		0x20,

	CLOFF_SKIPENEMY =			0x40,
	CLOFF_SKIPFRIEND =			0x80,
	CLOFF_SKIPOBJECT =			0x100,
	CLOFF_SKIPNONHOSTILE =		0x200,

	CLOFF_MUSTBESHOOTABLE =		0x400,

	CLOFF_SKIPTARGET =			0x800,
	CLOFF_ALLOWNULL =			0x1000,
	CLOFF_CHECKPARTIAL =		0x2000,

	CLOFF_MUSTBEGHOST =			0x4000,
	CLOFF_IGNOREGHOST =			0x8000,
	
	CLOFF_MUSTBESOLID =			0x10000,
	CLOFF_BEYONDTARGET =		0x20000,

	CLOFF_FROMBASE =			0x40000,
	CLOFF_MUL_HEIGHT =			0x80000,
	CLOFF_MUL_WIDTH =			0x100000,

	CLOFF_JUMP_ON_MISS =		0x200000,
	CLOFF_AIM_VERT_NOOFFSET =	0x400000,

	CLOFF_SETTARGET =			0x800000,
	CLOFF_SETMASTER =			0x1000000,
	CLOFF_SETTRACER =			0x2000000,

	CLOFF_SKIPOBSTACLES = CLOFF_SKIPENEMY|CLOFF_SKIPFRIEND|CLOFF_SKIPOBJECT|CLOFF_SKIPNONHOSTILE,
	CLOFF_NOAIM = CLOFF_NOAIM_VERT|CLOFF_NOAIM_HORZ
};

// Flags for A_Kill (Master/Target/Tracer/Children/Siblings) series
enum
{
	KILS_FOILINVUL =		0x00000001,
	KILS_KILLMISSILES =		0x00000002,
	KILS_NOMONSTERS =		0x00000004,
	KILS_FOILBUDDHA =		0x00000008,
	KILS_EXFILTER =			0x00000010,
	KILS_EXSPECIES =		0x00000020,
	KILS_EITHER =			0x00000040,
};

// Flags for A_Damage (Master/Target/Tracer/Children/Siblings/Self) series
enum
{
	DMSS_FOILINVUL =		0x00000001,
	DMSS_AFFECTARMOR =		0x00000002,
	DMSS_KILL =				0x00000004,
	DMSS_NOFACTOR =			0x00000008,
	DMSS_FOILBUDDHA =		0x00000010,
	DMSS_NOPROTECT =		0x00000020,
	DMSS_EXFILTER =			0x00000040,
	DMSS_EXSPECIES =		0x00000080,
	DMSS_EITHER =			0x00000100,
	DMSS_INFLICTORDMGTYPE =	0x00000200,
};

// Flags for A_AlertMonsters
const int AMF_TARGETEMITTER = 1;
const int AMF_TARGETNONPLAYER = 2;
const int AMF_EMITFROMTARGET = 4;

// Flags for A_Remove*
enum
{
	RMVF_MISSILES =			0x00000001,
	RMVF_NOMONSTERS =		0x00000002,
	RMVF_MISC =				0x00000004,
	RMVF_EVERYTHING =		0x00000008,
	RMVF_EXFILTER =			0x00000010,
	RMVF_EXSPECIES =		0x00000020,
	RMVF_EITHER =			0x00000040,
};

// Flags for A_Fade*
enum
{
	FTF_REMOVE =	1 << 0,
	FTF_CLAMP =		1 << 1,
};

// Flags for A_Face*
enum
{
	FAF_BOTTOM = 1,
	FAF_MIDDLE = 2,
	FAF_TOP = 4,
	FAF_NODISTFACTOR = 8,
};

// Flags for A_QuakeEx
enum
{
	QF_RELATIVE =		1,
	QF_SCALEDOWN =		1 << 1,
	QF_SCALEUP =		1 << 2,
	QF_MAX =			1 << 3,
	QF_FULLINTENSITY =	1 << 4,
	QF_WAVE =			1 << 5,
};

// A_CheckProximity flags
enum
{
	CPXF_ANCESTOR			= 1,
	CPXF_LESSOREQUAL		= 1 << 1,
	CPXF_NOZ				= 1 << 2,
	CPXF_COUNTDEAD			= 1 << 3,
	CPXF_DEADONLY			= 1 << 4,
	CPXF_EXACT				= 1 << 5,
	CPXF_SETTARGET =		1 << 6,
	CPXF_SETMASTER =		1 << 7,
	CPXF_SETTRACER =		1 << 8,
	CPXF_FARTHEST =			1 << 9,
	CPXF_CLOSEST =			1 << 10,
	CPXF_SETONPTR =			1 << 11,
	CPXF_CHECKSIGHT =		1 << 12,
};

// Flags for A_CheckBlock
// These flags only affect the calling actor('s pointer), not the ones being searched.
enum 
{
	CBF_NOLINES			= 1 << 0,	//Don't check actors.
	CBF_SETTARGET		= 1 << 1,	//Sets the caller/pointer's target to the actor blocking it. Actors only.
	CBF_SETMASTER		= 1 << 2,	//^ but with master.
	CBF_SETTRACER		= 1 << 3,	//^ but with tracer.
	CBF_SETONPTR		= 1 << 4,	//Sets the pointer change on the actor doing the checking instead of self.
	CBF_DROPOFF			= 1 << 5,	//Check for dropoffs.
	CBF_NOACTORS		= 1 << 6,	//Don't check actors.
	CBF_ABSOLUTEPOS		= 1 << 7,	//Absolute position for offsets.
	CBF_ABSOLUTEANGLE	= 1 << 8,	//Absolute angle for offsets.
};

enum
{
	SPF_FULLBRIGHT =	1,
	SPF_RELPOS =		1 << 1,
	SPF_RELVEL =		1 << 2,
	SPF_RELACCEL =		1 << 3,
	SPF_RELANG =		1 << 4,
	SPF_NOTIMEFREEZE =	1 << 5,

	SPF_RELATIVE =	SPF_RELPOS|SPF_RELVEL|SPF_RELACCEL|SPF_RELANG
};

//Flags for A_FaceMovementDirection
enum
{
	FMDF_NOPITCH =			1 << 0,
	FMDF_INTERPOLATE =		1 << 1,
	FMDF_NOANGLE =			1 << 2,
};

// Flags for GetZAt
enum
{
	GZF_ABSOLUTEPOS =			1,			// Use the absolute position instead of an offsetted one.
	GZF_ABSOLUTEANG =			1 << 1,		// Don't add the actor's angle to the parameter.
	GZF_CEILING =				1 << 2,		// Check the ceiling instead of the floor.
	GZF_3DRESTRICT =			1 << 3,		// Ignore midtextures and 3D floors above the pointer's z.
	GZF_NOPORTALS =				1 << 4,		// Don't pass through any portals.
	GZF_NO3DFLOOR =				1 << 5,		// Pass all 3D floors.
};

// Flags for A_WeaponOffset
enum
{
	WOF_KEEPX =		1,
	WOF_KEEPY =		1 << 1,
	WOF_ADD =		1 << 2,
};

// Flags for psprite layers
enum
{
	PSPF_ADDWEAPON	= 1 << 0,
	PSPF_ADDBOB		= 1 << 1,
	PSPF_POWDOUBLE	= 1 << 2,
	PSPF_CVARFAST	= 1 << 3,
};

// Default psprite layers
enum
{
	PSP_WEAPON = 1,
	PSP_FLASH = 1000,
};

enum
{
	// These are the original inputs sent by the player.
	INPUT_OLDBUTTONS,
	INPUT_BUTTONS,
	INPUT_PITCH,
	INPUT_YAW,
	INPUT_ROLL,
	INPUT_FORWARDMOVE,
	INPUT_SIDEMOVE,
	INPUT_UPMOVE,

	// These are the inputs, as modified by P_PlayerThink().
	// Most of the time, these will match the original inputs, but
	// they can be different if a player is frozen or using a
	// chainsaw.
	MODINPUT_OLDBUTTONS,
	MODINPUT_BUTTONS,
	MODINPUT_PITCH,
	MODINPUT_YAW,
	MODINPUT_ROLL,
	MODINPUT_FORWARDMOVE,
	MODINPUT_SIDEMOVE,
	MODINPUT_UPMOVE
};

enum
{
	BT_ATTACK		= 1<<0,	// Press "Fire".
	BT_USE			= 1<<1,	// Use button, to open doors, activate switches.
    BT_JUMP			= 1<<2,
    BT_CROUCH		= 1<<3,
	BT_TURN180		= 1<<4,
	BT_ALTATTACK	= 1<<5,	// Press your other "Fire".
	BT_RELOAD		= 1<<6,	// [XA] Reload key. Causes state jump in A_WeaponReady.
	BT_ZOOM			= 1<<7,	// [XA] Zoom key. Ditto.

	// The rest are all ignored by the play simulation and are for scripts.
	BT_SPEED		= 1<<8,
	BT_STRAFE		= 1<<9,

	BT_MOVERIGHT	= 1<<10,
	BT_MOVELEFT		= 1<<11,
	BT_BACK			= 1<<12,
	BT_FORWARD		= 1<<13,
	BT_RIGHT		= 1<<14,
	BT_LEFT			= 1<<15,
	BT_LOOKUP		= 1<<16,
	BT_LOOKDOWN		= 1<<17,
	BT_MOVEUP		= 1<<18,
	BT_MOVEDOWN		= 1<<19,
	BT_SHOWSCORES	= 1<<20,

	BT_USER1		= 1<<21,
	BT_USER2		= 1<<22,
	BT_USER3		= 1<<23,
	BT_USER4		= 1<<24,
};
// Flags for GetAngle
enum
{
	GAF_RELATIVE =			1,
	GAF_SWITCH =			1 << 1,
};

//Flags for A_CopySpriteFrame
enum
{
	CPSF_NOSPRITE =			1,
	CPSF_NOFRAME =			1 << 1,
};