/*
*
*    This program is free software; you can redistribute it and/or modify it
*    under the terms of the GNU General Public License as published by the
*    Free Software Foundation; either version 2 of the License, or (at
*    your option) any later version.
*
*    This program is distributed in the hope that it will be useful, but
*    WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program; if not, write to the Free Software Foundation,
*    Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*    In addition, as a special exception, the author gives permission to
*    link the code of this program with the Half-Life Game Engine ("HL
*    Engine") and Modified Game Libraries ("MODs") developed by Valve,
*    L.L.C ("Valve").  You must obey the GNU General Public License in all
*    respects for all of the code used other than the HL Engine and MODs
*    from Valve.  If you modify this file, you may extend this exception
*    to your version of the file, but you are not obligated to do so.  If
*    you do not wish to do so, delete this exception statement from your
*    version.
*
*/
#pragma once

// These are caps bits to indicate what an object's capabilities (currently used for save/restore and level transitions)
#define FCAP_CUSTOMSAVE			0x00000001
#define FCAP_ACROSS_TRANSITION		0x00000002	// should transfer between transitions
#define FCAP_MUST_SPAWN			0x00000004	// Spawn after restore
#define FCAP_DONT_SAVE			0x80000000	// Don't save this
#define FCAP_IMPULSE_USE		0x00000008	// can be used by the player
#define FCAP_CONTINUOUS_USE		0x00000010	// can be used by the player
#define FCAP_ONOFF_USE			0x00000020	// can be used by the player
#define FCAP_DIRECTIONAL_USE		0x00000040	// Player sends +/- 1 when using (currently only tracktrains)
#define FCAP_MASTER			0x00000080	// Can be used to "master" other entities (like multisource)

// UNDONE: This will ignore transition volumes (trigger_transition), but not the PVS!!!
#define FCAP_FORCE_TRANSITION		0x00000080	// ALWAYS goes across transitions

// for Classify
#define CLASS_NONE		0
#define CLASS_MACHINE		1
#define CLASS_PLAYER		2
#define CLASS_HUMAN_PASSIVE	3
#define CLASS_HUMAN_MILITARY	4
#define CLASS_ALIEN_MILITARY	5
#define CLASS_ALIEN_PASSIVE	6
#define CLASS_ALIEN_MONSTER	7
#define CLASS_ALIEN_PREY	8
#define CLASS_ALIEN_PREDATOR	9
#define CLASS_INSECT		10
#define CLASS_PLAYER_ALLY	11
#define CLASS_PLAYER_BIOWEAPON	12		// hornets and snarks.launched by players
#define CLASS_ALIEN_BIOWEAPON	13		// hornets and snarks.launched by the alien menace
#define CLASS_VEHICLE		14
#define CLASS_BARNACLE		99		// special because no one pays attention to it, and it eats a wide cross-section of creatures.

#define SF_NORESPAWN		(1 << 30)	// set this bit on guns and stuff that should never respawn.

#define DMG_GENERIC		0		// generic damage was done
#define DMG_CRUSH		(1<<0)		// crushed by falling or moving object
#define DMG_BULLET		(1<<1)		// shot
#define DMG_SLASH		(1<<2)		// cut, clawed, stabbed
#define DMG_BURN		(1<<3)		// heat burned
#define DMG_FREEZE		(1<<4)		// frozen
#define DMG_FALL		(1<<5)		// fell too far
#define DMG_BLAST		(1<<6)		// explosive blast damage
#define DMG_CLUB		(1<<7)		// crowbar, punch, headbutt
#define DMG_SHOCK		(1<<8)		// electric shock
#define DMG_SONIC		(1<<9)		// sound pulse shockwave
#define DMG_ENERGYBEAM		(1<<10)		// laser or other high energy beam
#define DMG_NEVERGIB		(1<<12)		// with this bit OR'd in, no damage type will be able to gib victims upon death
#define DMG_ALWAYSGIB		(1<<13)		// with this bit OR'd in, any damage type can be made to gib victims upon death
#define DMG_DROWN		(1<<14)		// Drowning

// time-based damage
#define DMG_TIMEBASED		(~(0x3FFF))	// mask for time-based damage

#define DMG_PARALYZE		(1<<15)		// slows affected creature down
#define DMG_NERVEGAS		(1<<16)		// nerve toxins, very bad
#define DMG_POISON		(1<<17)		// blood poisioning
#define DMG_RADIATION		(1<<18)		// radiation exposure
#define DMG_DROWNRECOVER	(1<<19)		// drowning recovery
#define DMG_ACID		(1<<20)		// toxic chemicals or acid burns
#define DMG_SLOWBURN		(1<<21)		// in an oven
#define DMG_SLOWFREEZE		(1<<22)		// in a subzero freezer
#define DMG_MORTAR		(1<<23)		// Hit by air raid (done to distinguish grenade from mortar)
#define DMG_EXPLOSION		(1<<24)

// these are the damage types that are allowed to gib corpses
#define DMG_GIB_CORPSE		(DMG_CRUSH | DMG_FALL | DMG_BLAST | DMG_SONIC | DMG_CLUB)

// these are the damage types that have client hud art
#define DMG_SHOWNHUD		(DMG_POISON | DMG_ACID | DMG_FREEZE | DMG_SLOWFREEZE | DMG_DROWN | DMG_BURN | DMG_SLOWBURN | DMG_NERVEGAS | DMG_RADIATION | DMG_SHOCK)

// when calling KILLED(), a value that governs gib behavior is expected to be
// one of these three values
#define GIB_NORMAL		0		// gib if entity was overkilled
#define GIB_NEVER		1		// never gib, no matter how much death damage is done ( freezing, etc )
#define GIB_ALWAYS		2		// always gib ( Houndeye Shock, Barnacle Bite )