/* Vexd Utility Module Defines
*
* by the AMX Mod Dev Team
*
* This file is provided as is (no warranties).
*/

#if defined _vexdum_const_included
  #endinput
#endif
#define _vexdum_const_included

#define SPEAK_NORMAL      0
#define SPEAK_MUTED       1
#define SPEAK_ALL         2
#define SPEAK_LISTENALL   4

#define BLOCK_NOT   0
#define BLOCK_ONCE  1
#define BLOCK_SET   2

// Entvars Integer
enum {
  EV_INT_gamestate,
  EV_INT_oldbuttons,
  EV_INT_groupinfo,
  EV_INT_iuser1,
  EV_INT_iuser2,
  EV_INT_iuser3,
  EV_INT_iuser4,
  EV_INT_weaponanim,
  EV_INT_pushmsec,
  EV_INT_bInDuck,
  EV_INT_flTimeStepSound,
  EV_INT_flSwimTime,
  EV_INT_flDuckTime,
  EV_INT_iStepLeft,
  EV_INT_movetype,
  EV_INT_solid,
  EV_INT_skin,
  EV_INT_body,
  EV_INT_effects,
  EV_INT_light_level,
  EV_INT_sequence,
  EV_INT_gaitsequence,
  EV_INT_modelindex,
  EV_INT_playerclass,
  EV_INT_waterlevel,
  EV_INT_watertype,
  EV_INT_spawnflags,
  EV_INT_flags,
  EV_INT_colormap,
  EV_INT_team,
  EV_INT_fixangle,
  EV_INT_weapons,
  EV_INT_rendermode,
  EV_INT_renderfx,
  EV_INT_button,
  EV_INT_impulse,
  EV_INT_deadflag,
};

// Entvars Float
enum {
  EV_FL_impacttime,
  EV_FL_starttime,
  EV_FL_idealpitch,
  EV_FL_pitch_speed,
  EV_FL_ideal_yaw,
  EV_FL_yaw_speed,
  EV_FL_ltime,
  EV_FL_nextthink,
  EV_FL_gravity,
  EV_FL_friction,
  EV_FL_frame,
  EV_FL_animtime,
  EV_FL_framerate,
  EV_FL_health,
  EV_FL_frags,
  EV_FL_takedamage,
  EV_FL_max_health,
  EV_FL_teleport_time,
  EV_FL_armortype,
  EV_FL_armorvalue,
  EV_FL_dmg_take,
  EV_FL_dmg_save,
  EV_FL_dmg,
  EV_FL_dmgtime,
  EV_FL_speed,
  EV_FL_air_finished,
  EV_FL_pain_finished,
  EV_FL_radsuit_finished,
  EV_FL_scale,
  EV_FL_renderamt,
  EV_FL_maxspeed,
  EV_FL_fov,
  EV_FL_flFallVelocity,
  EV_FL_fuser1,
  EV_FL_fuser2,
  EV_FL_fuser3,
  EV_FL_fuser4,
};

// Entvars Vector
enum {
  EV_VEC_origin,
  EV_VEC_oldorigin,
  EV_VEC_velocity,
  EV_VEC_basevelocity,
  EV_VEC_clbasevelocity,
  EV_VEC_movedir,
  EV_VEC_angles,
  EV_VEC_avelocity,
  EV_VEC_punchangle,
  EV_VEC_v_angle,
  EV_VEC_endpos,
  EV_VEC_startpos,
  EV_VEC_absmin,
  EV_VEC_absmax,
  EV_VEC_mins,
  EV_VEC_maxs,
  EV_VEC_size,
  EV_VEC_rendercolor,
  EV_VEC_view_ofs,
  EV_VEC_vuser1,
  EV_VEC_vuser2,
  EV_VEC_vuser3,
  EV_VEC_vuser4,
};

// Entvars Edict
enum {
  EV_ENT_chain,
  EV_ENT_dmg_inflictor,
  EV_ENT_enemy,
  EV_ENT_aiment,
  EV_ENT_owner,
  EV_ENT_groundentity,
  EV_ENT_pContainingEntity,
  EV_ENT_euser1,
  EV_ENT_euser2,
  EV_ENT_euser3,
  EV_ENT_euser4,
};

// Entvars String
enum {
  EV_SZ_classname,
  EV_SZ_globalname,
  EV_SZ_model,
  EV_SZ_target,
  EV_SZ_targetname,
  EV_SZ_netname,
  EV_SZ_message,
  EV_SZ_noise,
  EV_SZ_noise1,
  EV_SZ_noise2,
  EV_SZ_noise3,
  EV_SZ_viewmodel,
  EV_SZ_weaponmodel,
};

// Entvars Byte
enum {
  EV_BYTE_controller0,
  EV_BYTE_controller1,
  EV_BYTE_controller2,
  EV_BYTE_controller3,
  EV_BYTE_blending0,
  EV_BYTE_blending1,
};

// Globalvars Integer
enum {
  GV_INT_trace_hitgroup,
  GV_INT_trace_flags,
  GV_INT_msg_entity,
  GV_INT_cdAudioTrack,
  GV_INT_maxClients,
  GV_INT_maxEntities,
};

// Globalvars Float
enum {
  GV_FL_time,
  GV_FL_frametime,
  GV_FL_force_retouch,
  GV_FL_deathmatch,
  GV_FL_coop,
  GV_FL_teamplay,
  GV_FL_serverflags,
  GV_FL_found_secrets,
  GV_FL_trace_allsolid,
  GV_FL_trace_startsolid,
  GV_FL_trace_fraction,
  GV_FL_trace_plane_dist,
  GV_FL_trace_inopen,
  GV_FL_trace_inwater,
};

// Globalvars Vector
enum {
  GV_VEC_v_forward,
  GV_VEC_v_up,
  GV_VEC_v_right,
  GV_VEC_trace_endpos,
  GV_VEC_trace_plane_normal,
  GV_VEC_vecLandmarkOffset,
};

// Globalvars Edicts
enum {
  GV_ENT_trace_ent,
};

// Globalvars String
enum {
  GV_SZ_mapname,
  GV_SZ_startspot,
};

// TraceLine Integer
enum {
  TR_INT_fAllSolid,     // if true, plane is not valid
  TR_INT_fStartSolid,     // if true, the initial point was in a solid area
  TR_INT_fInOpen,
  TR_INT_fInWater,
  TR_INT_iHitgroup,     // 0 == generic, non zero is specific body part
};

// TraceLine Float
enum {
  TR_FL_flFraction,     // time completed, 1.0 = didn't hit anything
  TR_FL_flPlaneDist,
};

// TraceLine Vector
enum {
  TR_VEC_vecEndPos,     // final position
  TR_VEC_vecPlaneNormal,  // surface normal at impact
};

// TraceLine Edict
enum {
  TR_ENT_pHit,      // entity the surface is on
};

#define IN_ATTACK     (1 << 0)
#define IN_JUMP       (1 << 1)
#define IN_DUCK       (1 << 2)
#define IN_FORWARD    (1 << 3)
#define IN_BACK       (1 << 4)
#define IN_USE        (1 << 5)
#define IN_CANCEL     (1 << 6)
#define IN_LEFT       (1 << 7)
#define IN_RIGHT      (1 << 8)
#define IN_MOVELEFT   (1 << 9)
#define IN_MOVERIGHT  (1 << 10)
#define IN_ATTACK2    (1 << 11)
#define IN_RUN        (1 << 12)
#define IN_RELOAD     (1 << 13)
#define IN_ALT1       (1 << 14)
#define IN_SCORE      (1 << 15)

// Changes the SV_Movestep() behavior to not need to be on ground
#define FL_FLY       (1<<0)

// Changes the SV_Movestep() behavior to not need to be on ground (but stay in water)
#define FL_SWIM      (1<<1)

#define FL_CONVEYOR  (1<<2)
#define FL_CLIENT    (1<<3)
#define FL_INWATER   (1<<4)
#define FL_MONSTER   (1<<5)
#define FL_GODMODE   (1<<6)
#define FL_NOTARGET  (1<<7)

// Don't send entity to local host, it's predicting this entity itself
#define FL_SKIPLOCALHOST (1<<8)

// At rest / on the ground
#define FL_ONGROUND      (1<<9)

// not all corners are valid
#define FL_PARTIALGROUND (1<<10)

// player jumping out of water
#define FL_WATERJUMP     (1<<11)

// Player is frozen for 3rd person camera
#define FL_FROZEN        (1<<12)

// JAC: fake client, simulated server side; don't send network messages to them
#define FL_FAKECLIENT    (1<<13)

// Player flag -- Player is fully crouched
#define FL_DUCKING       (1<<14)

// Apply floating force to this entity when in water
#define FL_FLOAT         (1<<15)

// worldgraph has this ent listed as something that blocks a connection
#define FL_GRAPHED       (1<<16)

#define FL_IMMUNE_WATER  (1<<17)
#define FL_IMMUNE_SLIME  (1<<18)
#define FL_IMMUNE_LAVA   (1<<19)

// This is a spectator proxy
#define FL_PROXY         (1<<20)

// Brush model flag -- call think every frame regardless of nextthink - ltime
// (for constantly changing velocity/path)
#define FL_ALWAYSTHINK   (1<<21)

// Base velocity has been applied this frame (used to convert base velocity into momentum)
#define FL_BASEVELOCITY  (1<<22)

// Only collide in with monsters who have FL_MONSTERCLIP set
#define FL_MONSTERCLIP   (1<<23)

// Player is _controlling_ a train, so movement commands should be ignored on
// client during prediction.
#define FL_ONTRAIN       (1<<24)

// Not moveable/removeable brush entity (really part of the world, but
// represented as an entity for transparency or something)
#define FL_WORLDBRUSH    (1<<25)

// This client is a spectator, don't run touch functions, etc.
#define FL_SPECTATOR     (1<<26)

// This is a custom entity
#define FL_CUSTOMENTITY  (1<<29)

// This entity is marked for death -- This allows the engine to kill ents at
// the appropriate time
#define FL_KILLME        (1<<30)

// Entity is dormant, no updates to client
#define FL_DORMANT       (1<<31)

// no interaction with other objects
#define SOLID_NOT      0

// touch on edge, but not blocking
#define SOLID_TRIGGER  1

// touch on edge, block
#define SOLID_BBOX     2

// touch on edge, but not an onground
#define SOLID_SLIDEBOX 3

// bsp clip, touch on edge, block
#define SOLID_BSP      4

// alive
#define DEAD_NO    0

// playing death animation or still falling off of a ledge waiting to hit ground
#define DEAD_DYING 1

// dead. lying still.
#define DEAD_DEAD         2
#define DEAD_RESPAWNABLE  3
#define DEAD_DISCARDBODY  4

#define DAMAGE_NO   0.0
#define DAMAGE_YES  1.0
#define DAMAGE_AIM  2.0

// swirling cloud of particles
#define EF_BRIGHTFIELD  1

// single frame ELIGHT on entity attachment 0
#define EF_MUZZLEFLASH  2

// DLIGHT centered at entity origin
#define EF_BRIGHTLIGHT  4

// player flashlight
#define EF_DIMLIGHT     8

// get lighting from ceiling
#define EF_INVLIGHT     16

// don't interpolate the next frame
#define EF_NOINTERP     32

// rocket flare glow sprite
#define EF_LIGHT        64

// don't draw entity
#define EF_NODRAW       128

// never moves
#define MOVETYPE_NONE          0

#define MOVETYPE_ANGLENOCLIP   1
#define MOVETYPE_ANGLECLIP     2

// Player only - moving on the ground
#define MOVETYPE_WALK          3

// gravity, special edge handling -- monsters use this
#define MOVETYPE_STEP          4

// No gravity, but still collides with stuff
#define MOVETYPE_FLY           5

// gravity/collisions
#define MOVETYPE_TOSS          6

// no clip to world, push and crush
#define MOVETYPE_PUSH          7

// No gravity, no collisions, still do velocity/avelocity
#define MOVETYPE_NOCLIP        8

// extra size to monsters
#define MOVETYPE_FLYMISSILE    9

// Just like Toss, but reflect velocity when contacting surfaces
#define MOVETYPE_BOUNCE        10

// bounce w/o gravity
#define MOVETYPE_BOUNCEMISSILE 11

// track movement of aiment
#define MOVETYPE_FOLLOW        12

// BSP model that needs physics/world collisions (uses nearest hull for world collision)
#define MOVETYPE_PUSHSTEP      13

#define CONTENTS_EMPTY         -1
#define CONTENTS_SOLID         -2
#define CONTENTS_WATER         -3
#define CONTENTS_SLIME         -4
#define CONTENTS_LAVA          -5
#define CONTENTS_SKY           -6

// removed at csg time
#define CONTENTS_ORIGIN        -7

// changed to contents_solid
#define CONTENTS_CLIP          -8

#define CONTENTS_CURRENT_0     -9
#define CONTENTS_CURRENT_90   -10
#define CONTENTS_CURRENT_180  -11
#define CONTENTS_CURRENT_270  -12
#define CONTENTS_CURRENT_UP   -13
#define CONTENTS_CURRENT_DOWN -14
#define CONTENTS_TRANSLUCENT  -15
#define CONTENTS_LADDER       -16

// generic damage was done
#define DMG_GENERIC   0

// crushed by falling or moving object
#define DMG_CRUSH     (1 << 0)

// shot
#define DMG_BULLET    (1 << 1)

// cut, clawed, stabbed
#define DMG_SLASH     (1 << 2)

// heat burned
#define DMG_BURN      (1 << 3)

// frozen
#define DMG_FREEZE    (1 << 4)

// fell too far
#define DMG_FALL      (1 << 5)

// explosive blast damage
#define DMG_BLAST     (1 << 6)

// crowbar, punch, headbutt
#define DMG_CLUB      (1 << 7)

// electric shock
#define DMG_SHOCK     (1 << 8)

// sound pulse shockwave
#define DMG_SONIC     (1 << 9)

// laser or other high energy beam
#define DMG_ENERGYBEAM   (1 << 10)

// with this bit OR'd in, no damage type will be able to gib victims upon death
#define DMG_NEVERGIB     (1 << 12)

// with this bit OR'd in, any damage type can be made to gib victims upon death.
#define DMG_ALWAYSGIB    (1 << 13)

// Drowning
#define DMG_DROWN        (1 << 14)

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

// slows affected creature down
#define DMG_PARALYZE     (1 << 15)

// nerve toxins, very bad
#define DMG_NERVEGAS     (1 << 16)

// blood poisioning
#define DMG_POISON       (1 << 17)

// radiation exposure
#define DMG_RADIATION    (1 << 18)

// drowning recovery
#define DMG_DROWNRECOVER (1 << 19)

// toxic chemicals or acid burns
#define DMG_ACID         (1 << 20)

// in an oven
#define DMG_SLOWBURN     (1 << 21)

// in a subzero freezer
#define DMG_SLOWFREEZE   (1 << 22)

// Hit by air raid (done to distinguish grenade from mortar)
#define DMG_MORTAR       (1 << 23)

// For trace_result().
enum {
  TR_AllSolid,      // (int) if true, plane is not valid
  TR_StartSolid,    // (int) if true, the initial point was in a solid area
  TR_InOpen,        // (int)
  TR_InWater,       // (int)
  TR_Fraction,      // (float) time completed, 1.0 = didn't hit anything
  TR_EndPos,        // (vector) final position
  TR_PlaneDist,     // (float)
  TR_PlaneNormal,   // (vector) surface normal at impact
  TR_Hit,           // (entity) entity the surface is on
  TR_Hitgroup       // (int) 0 == generic, non zero is specific body part
};

// For trace_hull
#define HULL_POINT       0
#define HULL_HUMAN       1
#define HULL_LARGE       2
#define HULL_HEAD        3

// For alertmessage forward (atype parameter)
enum {
  at_notice,
  at_console,		// same as at_notice, but forces a ConPrintf, not a message box
  at_aiconsole,	// same as at_console, but only shown if developer level is 2!
  at_warning,
  at_error,
  at_logged		  // Server print to console ( only in multiplayer games )
};
