//-----------------------------------------------------------------------------
//
// $Id$
//
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.13  2005/02/15 16:33:39  makro
// Tons of updates (entity tree attachment system, UI vectors)
//
// Revision 1.12  2002/06/16 20:06:14  jbravo
// Reindented all the source files with "indent -kr -ut -i8 -l120 -lc120 -sob -bad -bap"
//
// Revision 1.11  2002/04/01 02:56:50  jbravo
// Some sourcecode reformatting
//
// Revision 1.10  2002/01/24 14:20:53  jbravo
// Adding func_explosive and a few new surfaceparms
//
// Revision 1.9  2002/01/11 19:48:30  jbravo
// Formatted the source in non DOS format.
//
// Revision 1.8  2001/12/31 16:28:42  jbravo
// I made a Booboo with the Log tag.
//
//
//-----------------------------------------------------------------------------
// Copyright (C) 1999-2000 Id Software, Inc.
//
// This file must be identical in the quake and utils directories

// contents flags are seperate bits
// a given brush can contribute multiple content bits

// these definitions also need to be in q_shared.h!

#define	CONTENTS_SOLID			1	// an eye is never valid in a solid
#define	CONTENTS_LAVA			8
#define	CONTENTS_SLIME			16
#define	CONTENTS_WATER			32
#define	CONTENTS_FOG			64

#define CONTENTS_NOTTEAM1		0x0080
#define CONTENTS_NOTTEAM2		0x0100
#define CONTENTS_NOBOTCLIP		0x0200

#define	CONTENTS_AREAPORTAL		0x8000

#define	CONTENTS_PLAYERCLIP		0x10000
#define	CONTENTS_MONSTERCLIP		0x20000
//bot specific contents types
#define	CONTENTS_TELEPORTER		0x40000
#define	CONTENTS_JUMPPAD		0x80000
#define CONTENTS_CLUSTERPORTAL		0x100000
#define CONTENTS_DONOTENTER		0x200000
#define CONTENTS_BOTCLIP		0x400000
#define CONTENTS_MOVER			0x800000

#define	CONTENTS_ORIGIN			0x1000000	// removed before bsping an entity

#define	CONTENTS_BODY			0x2000000	// should never be on a brush, only in game
#define	CONTENTS_CORPSE			0x4000000
#define	CONTENTS_DETAIL			0x8000000	// brushes not used for the bsp
#define	CONTENTS_STRUCTURAL		0x10000000	// brushes used for the bsp
#define	CONTENTS_TRANSLUCENT		0x20000000	// don't consume surface fragments inside
#define	CONTENTS_TRIGGER		0x40000000
#define	CONTENTS_NODROP			0x80000000	// don't leave bodies or items (death fog, lava)

#define	SURF_NODAMAGE			0x1	// never give falling damage
#define	SURF_SLICK			0x2	// effects game physics
#define	SURF_SKY			0x4	// lighting from environment map
#define	SURF_LADDER			0x8
#define	SURF_NOIMPACT			0x10	// don't make missile explosions
#define	SURF_NOMARKS			0x20	// don't leave missile marks
#define	SURF_FLESH			0x40	// make flesh sounds and effects
#define	SURF_NODRAW			0x80	// don't generate a drawsurface at all
#define	SURF_HINT			0x100	// make a primary bsp splitter
#define	SURF_SKIP			0x200	// completely ignore, allowing non-closed brushes
#define	SURF_NOLIGHTMAP			0x400	// surface doesn't need a lightmap
#define	SURF_POINTLIGHT			0x800	// generate lighting info at vertexes
#define	SURF_METALSTEPS			0x1000	// clanking footsteps
#define	SURF_NOSTEPS			0x2000	// no footstep sounds
#define	SURF_NONSOLID			0x4000	// don't collide against curves with this set
#define SURF_LIGHTFILTER		0x8000	// act as a light filter during q3map -light
#define	SURF_ALPHASHADOW		0x10000	// do per-pixel light shadow casting in q3map
#define	SURF_NODLIGHT			0x20000	// don't dlight even if solid (solid lava, skies)
#define SURF_DUST			0x40000	// leave a dust trail when walking on this surface
//Elder: new surfaces
#define SURF_GRAVEL			0x80000
#define SURF_WOOD			0x100000
#define SURF_CARPET			0x200000
#define SURF_METAL2			0x400000
#define SURF_GLASS			0x800000
#define SURF_GRASS			0x1000000
// JBravo: new sounds
#define SURF_SNOW			0x2000000
#define SURF_MUD			0x4000000
#define SURF_WOOD2			0x8000000
#define SURF_HARDMETAL			0x10000000


//Makro - for the new surfaceparm system

#define MAT_DEFAULT				0
#define MAT_METALSTEPS			1
#define MAT_GRAVEL				2
#define MAT_WOOD				3
#define MAT_CARPET				4
#define MAT_METAL2				5
#define MAT_GLASS				6
#define MAT_GRASS				7
#define MAT_SNOW				8
#define MAT_MUD					9
#define MAT_WOOD2				10
#define MAT_HARDMETAL			11
//new
#define MAT_LEAVES				12
#define MAT_CEMENT				13
#define MAT_MARBLE				14
#define MAT_SNOW2				15
#define MAT_HARDSTEPS			16
#define	MAT_SAND				17
#define	MAT_BRICK				18
#define	MAT_CERAMIC				19

int GetMaterialFromFlag(int flag);
#define IsMetalMat(Mat)		( (Mat)==MAT_METALSTEPS || (Mat)==MAT_METAL2 || (Mat)==MAT_HARDMETAL )
#define IsMetalFlag(Flag)	( IsMetalMat( GetMaterialFromFlag( Flag ) ) )
#define IsWoodMat(Mat)		( (Mat)==MAT_WOOD || (Mat)==MAT_WOOD2 )
#define IsWoodFlag(Flag)	( IsWoodMat( GetMaterialFromFlag( Flag ) ) )
#define IsSnowMat(Mat)		( (Mat)==MAT_SNOW || (Mat)==MAT_SNOW2 )
#define IsSnowFlag(Flag)	( IsSnowMat( GetMaterialFromFlag( Flag ) ) )
