2001-05-06 20:50:27 +00:00
|
|
|
// Copyright (C) 1999-2000 Id Software, Inc.
|
|
|
|
//
|
|
|
|
// bg_public.h -- definitions shared by both the server game and client game modules
|
|
|
|
|
|
|
|
// because games can change separately from the main system version, we need a
|
|
|
|
// second version that must match between game and cgame
|
|
|
|
|
|
|
|
#define GAME_VERSION "baseq3-1"
|
|
|
|
|
|
|
|
#define DEFAULT_GRAVITY 800
|
2001-06-08 04:47:30 +00:00
|
|
|
//Elder: lowered from -40 so falling deaths don't gib so easily
|
|
|
|
#define GIB_HEALTH -500
|
2001-05-06 20:50:27 +00:00
|
|
|
#define ARMOR_PROTECTION 0.66
|
|
|
|
|
|
|
|
#define MAX_ITEMS 256
|
|
|
|
|
|
|
|
#define RANK_TIED_FLAG 0x4000
|
|
|
|
|
2001-06-24 02:08:15 +00:00
|
|
|
//Elder: Q2 shotgun spreads for handcannon
|
|
|
|
#define DEFAULT_SHOTGUN_HSPREAD 1000
|
|
|
|
#define DEFAULT_SHOTGUN_VSPREAD 500
|
|
|
|
#define DEFAULT_M3_HSPREAD 800
|
|
|
|
#define DEFAULT_M3_VSPREAD 800
|
|
|
|
|
2001-06-18 01:59:58 +00:00
|
|
|
//Elder: this are uncertified
|
2001-06-24 02:08:15 +00:00
|
|
|
//#define DEFAULT_SHOTGUN_SPREAD 700
|
|
|
|
//#define DEFAULT_HANDCANNON_SPREAD 1400
|
|
|
|
//#define DEFAULT_SHOTGUN_COUNT 11
|
|
|
|
#define DEFAULT_M3_COUNT 12
|
|
|
|
#define DEFAULT_HANDCANNON_COUNT 17 //Elder: 17 per blast = 34 per shot
|
2001-05-06 20:50:27 +00:00
|
|
|
|
2001-06-24 02:08:15 +00:00
|
|
|
//Elder: changing this will affect the cgame entity placement
|
2001-05-06 20:50:27 +00:00
|
|
|
#define ITEM_RADIUS 15 // item sizes are needed for client side pickup detection
|
|
|
|
|
|
|
|
#define LIGHTNING_RANGE 768
|
|
|
|
//Blaze: Distance the knife reaches
|
|
|
|
#define KNIFE_RANGE 45
|
|
|
|
|
|
|
|
#define SCORE_NOT_PRESENT -9999 // for the CS_SCORES[12] when only one player is present
|
|
|
|
|
|
|
|
#define VOTE_TIME 30000 // 30 seconds before vote times out
|
|
|
|
|
|
|
|
#define MINS_Z -24
|
2001-08-18 19:59:25 +00:00
|
|
|
#define DEFAULT_VIEWHEIGHT 22
|
|
|
|
//#define DEFAULT_VIEWHEIGHT 26
|
2001-07-28 14:12:11 +00:00
|
|
|
//Elder: changed to 8 like AQ2 source BUT is it sync-ed?
|
2001-08-18 19:59:25 +00:00
|
|
|
#define CROUCH_VIEWHEIGHT 8
|
2001-07-28 14:12:11 +00:00
|
|
|
//#define CROUCH_VIEWHEIGHT 12
|
2001-05-06 20:50:27 +00:00
|
|
|
#define DEAD_VIEWHEIGHT -16
|
|
|
|
|
2001-07-24 01:50:01 +00:00
|
|
|
//Elder: New breakable bit definitions
|
2001-07-28 14:12:11 +00:00
|
|
|
//Enum materials?
|
2001-07-24 01:50:01 +00:00
|
|
|
//No amount bits = Low ... both amount bits = Tons
|
|
|
|
#define RQ3_DEBRIS_MEDIUM 0x00000001
|
|
|
|
#define RQ3_DEBRIS_HIGH 0x00000002
|
|
|
|
//No variation bits = original... both variation bits = variation 3
|
|
|
|
#define RQ3_DEBRIS_VAR1 0x00000004
|
|
|
|
#define RQ3_DEBRIS_VAR2 0x00000008
|
|
|
|
//These are not "compressed"
|
|
|
|
#define RQ3_DEBRIS_GLASS 0x00000010
|
|
|
|
#define RQ3_DEBRIS_WOOD 0x00000020
|
|
|
|
#define RQ3_DEBRIS_METAL 0x00000040
|
|
|
|
#define RQ3_DEBRIS_CERAMIC 0x00000080
|
|
|
|
#define RQ3_DEBRIS_PAPER 0x00000100
|
|
|
|
#define RQ3_DEBRIS_BRICK 0x00000200
|
|
|
|
#define RQ3_DEBRIS_CONCRETE 0x00000400
|
|
|
|
#define RQ3_DEBRIS_POPCAN 0x00000800
|
|
|
|
|
|
|
|
|
|
|
|
//Old debris definitions
|
2001-06-08 04:47:30 +00:00
|
|
|
//Elder: debris bit parms to pass to break_glass - maybe I should enum this?
|
2001-07-24 01:50:01 +00:00
|
|
|
/*
|
2001-06-08 04:47:30 +00:00
|
|
|
#define RQ3_DEBRIS_SMALL 0x00000001
|
|
|
|
#define RQ3_DEBRIS_MEDIUM 0x00000002
|
|
|
|
#define RQ3_DEBRIS_LARGE 0x00000004
|
|
|
|
#define RQ3_DEBRIS_TONS 0x00000008
|
|
|
|
#define RQ3_DEBRIS_GLASS 0x00000010
|
|
|
|
#define RQ3_DEBRIS_WOOD 0x00000020
|
|
|
|
#define RQ3_DEBRIS_METAL 0x00000040
|
|
|
|
#define RQ3_DEBRIS_CERAMIC 0x00000080
|
|
|
|
#define RQ3_DEBRIS_PAPER 0x00000100
|
2001-06-15 05:19:52 +00:00
|
|
|
#define RQ3_DEBRIS_BRICK 0x00000200
|
|
|
|
#define RQ3_DEBRIS_CONCRETE 0x00000400
|
|
|
|
//#define RQ3_DEBRIS_POPCAN 0x00000800
|
2001-06-08 04:47:30 +00:00
|
|
|
|
2001-07-01 05:11:12 +00:00
|
|
|
//Elder: debris variations
|
|
|
|
#define RQ3_DEBRIS_VAR0 0x00001000
|
|
|
|
#define RQ3_DEBRIS_VAR1 0x00002000
|
|
|
|
#define RQ3_DEBRIS_VAR2 0x00004000
|
|
|
|
#define RQ3_DEBRIS_VAR3 0x00008000
|
2001-07-24 01:50:01 +00:00
|
|
|
*/
|
2001-06-08 04:47:30 +00:00
|
|
|
//Elder: to stop some of the hardcoding
|
|
|
|
//This is some ammo amounts per clip/item pick up
|
|
|
|
#define RQ3_SSG3000_CLIP 6
|
|
|
|
#define RQ3_MP5_CLIP 30
|
|
|
|
#define RQ3_M3_CLIP 7
|
|
|
|
#define RQ3_M4_CLIP 24
|
|
|
|
#define RQ3_PISTOL_CLIP 12
|
|
|
|
#define RQ3_KNIFE_CLIP 1
|
|
|
|
#define RQ3_AKIMBO_CLIP 24
|
|
|
|
#define RQ3_HANDCANNON_CLIP 7
|
|
|
|
#define RQ3_GRENADE_CLIP 1
|
|
|
|
|
|
|
|
//Elder: this is the maximum reserve hold sans bandolier
|
|
|
|
#define RQ3_SSG3000_MAXCLIP 20
|
|
|
|
#define RQ3_MP5_MAXCLIP 2
|
|
|
|
#define RQ3_M3_MAXCLIP 14
|
|
|
|
#define RQ3_M4_MAXCLIP 1
|
|
|
|
#define RQ3_PISTOL_MAXCLIP 2
|
|
|
|
#define RQ3_KNIFE_MAXCLIP 10
|
|
|
|
#define RQ3_AKIMBO_MAXCLIP 2
|
|
|
|
#define RQ3_HANDCANNON_MAXCLIP 14
|
|
|
|
#define RQ3_GRENADE_MAXCLIP 2
|
|
|
|
|
|
|
|
//Elder: this is the amount to add when reloading
|
|
|
|
#define RQ3_SSG3000_RELOAD 1 //Elder: note - one at a time
|
|
|
|
#define RQ3_MP5_RELOAD 30
|
|
|
|
#define RQ3_M3_RELOAD 1 //Elder: note - one at a time
|
|
|
|
#define RQ3_M4_RELOAD 24
|
|
|
|
#define RQ3_PISTOL_RELOAD 12
|
|
|
|
#define RQ3_KNIFE_RELOAD 1 //Elder: shouldn't need to reload
|
|
|
|
#define RQ3_AKIMBO_RELOAD 24
|
|
|
|
#define RQ3_HANDCANNON_RELOAD 2
|
|
|
|
#define RQ3_GRENADE_RELOAD 1 //Elder: shouldn't need to reload
|
|
|
|
|
|
|
|
//Elder: this is the amount for a full chamber
|
|
|
|
#define RQ3_SSG3000_AMMO 6
|
|
|
|
#define RQ3_MP5_AMMO 30
|
|
|
|
#define RQ3_M3_AMMO 7
|
|
|
|
#define RQ3_M4_AMMO 24
|
|
|
|
#define RQ3_PISTOL_AMMO 12
|
|
|
|
#define RQ3_KNIFE_AMMO 1 //Elder: shouldn't need this value
|
|
|
|
#define RQ3_AKIMBO_AMMO 24
|
|
|
|
#define RQ3_HANDCANNON_AMMO 2
|
|
|
|
#define RQ3_GRENADE_AMMO 1 //Elder: shouldn't need this value
|
|
|
|
|
|
|
|
//Elder: confused?
|
|
|
|
|
2001-06-18 01:59:58 +00:00
|
|
|
//Elder: used for STAT_KNIFE ... obsolete now
|
2001-07-24 01:50:01 +00:00
|
|
|
//#define RQ3_KNIFE_SLASH 0
|
|
|
|
//#define RQ3_KNIFE_THROW 1
|
2001-06-10 06:46:06 +00:00
|
|
|
|
|
|
|
//Elder: from Action source, but changed defined names a bit
|
|
|
|
#define RQ3_PISTOL_NAME "MK23 Pistol"
|
|
|
|
#define RQ3_MP5_NAME "MP5/10 Submachinegun"
|
|
|
|
#define RQ3_M4_NAME "M4 Assault Rifle"
|
|
|
|
#define RQ3_M3_NAME "M3 Super 90 Assault Shotgun"
|
|
|
|
#define RQ3_HANDCANNON_NAME "Handcannon"
|
|
|
|
#define RQ3_SSG3000_NAME "Sniper Rifle"
|
|
|
|
#define RQ3_AKIMBO_NAME "Dual MK23 Pistols"
|
|
|
|
#define RQ3_KNIFE_NAME "Combat Knife"
|
|
|
|
#define RQ3_GRENADE_NAME "M26 Fragmentation Grenade"
|
|
|
|
|
|
|
|
#define RQ3_SILENCER_NAME "Silencer"
|
|
|
|
#define RQ3_SLIPPERS_NAME "Stealth Slippers"
|
|
|
|
#define RQ3_BANDOLIER_NAME "Bandolier"
|
|
|
|
#define RQ3_KEVLAR_NAME "Kevlar Vest"
|
|
|
|
#define RQ3_LASER_NAME "Lasersight"
|
|
|
|
|
|
|
|
//Elder: sound events for EV_RQ3_SOUND
|
2001-07-28 14:12:11 +00:00
|
|
|
typedef enum {
|
|
|
|
RQ3_SOUND_KICK,
|
|
|
|
RQ3_SOUND_HEADSHOT,
|
2001-08-13 17:26:53 +00:00
|
|
|
RQ3_SOUND_KNIFEHIT,
|
2001-07-28 14:12:11 +00:00
|
|
|
RQ3_SOUND_KNIFEDEATH,
|
|
|
|
RQ3_SOUND_LCA, //lights, camera, action!
|
|
|
|
RQ3_SOUND_KEVLARHIT,
|
|
|
|
|
|
|
|
RQ3_SOUND_TOTAL
|
|
|
|
} rq3_sounds_t;
|
|
|
|
|
|
|
|
//#define RQ3_SOUND_KICK 0
|
|
|
|
//#define RQ3_SOUND_HEADSHOT 1
|
|
|
|
//#define RQ3_SOUND_KNIFEDEATH 2
|
|
|
|
//#define RQ3_SOUND_LCA 3 //lights, camera, action!
|
2001-06-10 06:46:06 +00:00
|
|
|
|
2001-06-15 05:19:52 +00:00
|
|
|
//Elder: Weapon damage and spread stats
|
|
|
|
#define PISTOL_DAMAGE 90
|
|
|
|
#define MP5_DAMAGE 55
|
|
|
|
#define M4_DAMAGE 90
|
|
|
|
#define M3_DAMAGE 17
|
|
|
|
//Elder: wrong name
|
|
|
|
//#define SHOTGUN_DAMAGE 17
|
|
|
|
#define HANDCANNON_DAMAGE 20
|
|
|
|
#define SNIPER_DAMAGE 250
|
|
|
|
#define AKIMBO_DAMAGE 90
|
|
|
|
#define SLASH_DAMAGE 200 //Shashing knife damage
|
|
|
|
#define THROW_DAMAGE 250 //Throwing Knife damage
|
2001-06-18 01:59:58 +00:00
|
|
|
#define GRENADE_DAMAGE 170
|
|
|
|
#define GRENADE_SPLASH_DAMAGE 170
|
|
|
|
#define GRENADE_SPLASH_RADIUS 340 //Splash damage * 2
|
2001-06-15 05:19:52 +00:00
|
|
|
|
|
|
|
#define PISTOL_SPREAD 140
|
|
|
|
#define MP5_SPREAD 250
|
|
|
|
#define M4_SPREAD 300
|
|
|
|
#define SNIPER_SPREAD 425
|
|
|
|
#define AKIMBO_SPREAD 300
|
|
|
|
|
2001-06-18 01:59:58 +00:00
|
|
|
//Elder: weapon kicks - I think this is against whoever got hit?
|
|
|
|
#define RQ3_PISTOL_KICK 150
|
|
|
|
#define RQ3_M3_KICK 20
|
|
|
|
#define RQ3_M4_KICK 90
|
|
|
|
#define RQ3_MP5_KICK 90
|
|
|
|
#define RQ3_HANDCANNON_KICK 40
|
|
|
|
#define RQ3_SNIPER_KICK 200 // but it seems to get multiplied by zero in the source
|
|
|
|
#define RQ3_AKIMBO_KICK 90
|
|
|
|
#define RQ3_KNIFE_KICK 0
|
|
|
|
#define RQ3_THROW_KICK 50
|
2001-07-16 01:40:33 +00:00
|
|
|
#define RQ3_GRENADE_KICK 200 // Elder: assumed
|
2001-06-18 01:59:58 +00:00
|
|
|
|
|
|
|
|
|
|
|
//Elder: weaponTime constants (delay in milliseconds)
|
|
|
|
//Kinda "derived" from the AQ2 source
|
|
|
|
//Recall that Q2 animations run at 10Hz and the fire
|
|
|
|
//rate is derived from the number of animation frames
|
|
|
|
#define RQ3_PISTOL_DELAY 400
|
|
|
|
#define RQ3_M3_DELAY 900
|
|
|
|
#define RQ3_M4_DELAY 100
|
|
|
|
#define RQ3_MP5_DELAY 100
|
|
|
|
#define RQ3_HANDCANNON_DELAY 1200
|
|
|
|
#define RQ3_SSG3000_DELAY 1400
|
|
|
|
#define RQ3_SSG3000_BOLT_DELAY 1300// Elder: delay before zooming back in
|
|
|
|
#define RQ3_AKIMBO_DELAY 500 // Elder: two delays: one for the total delay
|
|
|
|
#define RQ3_AKIMBO_DELAY2 200 // one for the time to start the second shot
|
|
|
|
#define RQ3_KNIFE_DELAY 800
|
|
|
|
#define RQ3_THROW_DELAY 800
|
|
|
|
#define RQ3_GRENADE_DELAY 750 // Elder: I made this up
|
|
|
|
|
2001-06-19 02:26:18 +00:00
|
|
|
//Elder: reload delays
|
|
|
|
//Also kinda "derived" from the AQ2 source
|
2001-08-01 18:28:38 +00:00
|
|
|
#define RQ3_PISTOL_RELOAD_DELAY 2100
|
2001-06-19 02:26:18 +00:00
|
|
|
#define RQ3_M4_RELOAD_DELAY 1900
|
|
|
|
#define RQ3_MP5_RELOAD_DELAY 1800
|
|
|
|
#define RQ3_HANDCANNON_RELOAD_DELAY 2100
|
2001-06-24 02:08:15 +00:00
|
|
|
#define RQ3_AKIMBO_RELOAD_DELAY 2500
|
|
|
|
|
|
|
|
#define RQ3_M3_RELOAD_DELAY 1100
|
2001-07-16 01:40:33 +00:00
|
|
|
#define RQ3_M3_ALLOW_FAST_RELOAD_DELAY 200 // 700 Time into reload to enable fast-reloads
|
2001-06-24 02:08:15 +00:00
|
|
|
#define RQ3_M3_FAST_RELOAD_DELAY 500 // Fast reload time
|
|
|
|
//#define RQ3_M3_START_RELOAD_DELAY 300 // Start index point of fast reload
|
2001-07-16 01:40:33 +00:00
|
|
|
#define RQ3_M3_FINISH_RELOAD_DELAY 300 // Amount of time after all fast reloads
|
2001-06-19 02:26:18 +00:00
|
|
|
|
|
|
|
#define RQ3_SSG3000_RELOAD_DELAY 3100
|
2001-07-16 01:40:33 +00:00
|
|
|
#define RQ3_SSG3000_ALLOW_FAST_RELOAD_DELAY 1400 //2200 Time into reload to enable fast-reloads
|
2001-06-19 02:26:18 +00:00
|
|
|
#define RQ3_SSG3000_FAST_RELOAD_DELAY 600 // Fast reload time
|
2001-06-24 02:08:15 +00:00
|
|
|
//#define RQ3_SSG3000_START_RELOAD_DELAY 1700 // Start index point of fast reload
|
2001-07-16 01:40:33 +00:00
|
|
|
#define RQ3_SSG3000_FINISH_RELOAD_DELAY 800 // Amount of time after all fast reloads
|
2001-06-19 02:26:18 +00:00
|
|
|
|
|
|
|
#define RQ3_KNIFE_RELOAD_DELAY 0 // Elder: shouldn't need
|
|
|
|
#define RQ3_GRENADE_RELOAD_DELAY 0 // Elder: shouldn't need
|
|
|
|
|
2001-06-24 02:08:15 +00:00
|
|
|
//Elder: each weapon also has a different weapon switch up delay... ugh bloody hell
|
2001-08-06 19:15:00 +00:00
|
|
|
#define RQ3_PISTOL_ACTIVATE_DELAY 900
|
|
|
|
#define RQ3_M3_ACTIVATE_DELAY 700
|
|
|
|
#define RQ3_M4_ACTIVATE_DELAY 1000
|
|
|
|
#define RQ3_MP5_ACTIVATE_DELAY 1000
|
|
|
|
#define RQ3_HANDCANNON_ACTIVATE_DELAY 600
|
|
|
|
#define RQ3_SSG3000_ACTIVATE_DELAY 800
|
|
|
|
#define RQ3_AKIMBO_ACTIVATE_DELAY 600
|
|
|
|
#define RQ3_KNIFE_ACTIVATE_DELAY 500
|
|
|
|
#define RQ3_THROW_ACTIVATE_DELAY 500
|
|
|
|
#define RQ3_GRENADE_ACTIVATE_DELAY 500 //300 Elder: I made this up
|
|
|
|
|
|
|
|
//Elder: each weapon also has a different weapon switch down delay and...
|
|
|
|
#define RQ3_PISTOL_DISARM_DELAY 300
|
|
|
|
#define RQ3_M3_DISARM_DELAY 600
|
|
|
|
#define RQ3_M4_DISARM_DELAY 500
|
|
|
|
#define RQ3_MP5_DISARM_DELAY 400
|
|
|
|
#define RQ3_HANDCANNON_DISARM_DELAY 400
|
|
|
|
#define RQ3_SSG3000_DISARM_DELAY 150 //900 For some reason it's auto-used with WEAPON_RAISING
|
|
|
|
#define RQ3_AKIMBO_DISARM_DELAY 800
|
|
|
|
#define RQ3_KNIFE_DISARM_DELAY 700
|
|
|
|
#define RQ3_THROW_DISARM_DELAY 700
|
|
|
|
#define RQ3_GRENADE_DISARM_DELAY 300 //Elder: I made this up
|
2001-06-24 02:08:15 +00:00
|
|
|
|
2001-06-19 02:26:18 +00:00
|
|
|
|
2001-06-18 01:59:58 +00:00
|
|
|
//Elder: special for grenade: speeds depending on distance select
|
|
|
|
#define GRENADE_SHORT_SPEED 400
|
|
|
|
#define GRENADE_MEDIUM_SPEED 720
|
|
|
|
#define GRENADE_LONG_SPEED 920
|
|
|
|
|
|
|
|
//Elder: knife throw speed - from the AQ2 source
|
|
|
|
#define THROW_SPEED 1200
|
|
|
|
|
2001-06-15 05:19:52 +00:00
|
|
|
//Elder: special flag needed in both games
|
|
|
|
#define FL_THROWN_KNIFE 0x00040000 // Elder: thrown knife special case
|
2001-06-10 06:46:06 +00:00
|
|
|
|
2001-08-18 19:59:25 +00:00
|
|
|
//Elder: weapon modifications
|
2001-07-28 14:12:11 +00:00
|
|
|
#define RQ3_WPMOD_SILENCER 1
|
2001-08-18 19:59:25 +00:00
|
|
|
#define RQ3_WPMOD_KNIFESLASH 2
|
2001-06-08 04:47:30 +00:00
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
//
|
|
|
|
// config strings are a general means of communicating variable length strings
|
|
|
|
// from the server to all connected clients.
|
|
|
|
//
|
|
|
|
|
|
|
|
// CS_SERVERINFO and CS_SYSTEMINFO are defined in q_shared.h
|
|
|
|
#define CS_MUSIC 2
|
|
|
|
#define CS_MESSAGE 3 // from the map worldspawn's message field
|
|
|
|
#define CS_MOTD 4 // g_motd string for server message of the day
|
|
|
|
#define CS_WARMUP 5 // server time when the match will be restarted
|
|
|
|
#define CS_SCORES1 6
|
|
|
|
#define CS_SCORES2 7
|
|
|
|
#define CS_VOTE_TIME 8
|
|
|
|
#define CS_VOTE_STRING 9
|
|
|
|
#define CS_VOTE_YES 10
|
|
|
|
#define CS_VOTE_NO 11
|
|
|
|
|
|
|
|
#define CS_TEAMVOTE_TIME 12
|
|
|
|
#define CS_TEAMVOTE_STRING 14
|
|
|
|
#define CS_TEAMVOTE_YES 16
|
|
|
|
#define CS_TEAMVOTE_NO 18
|
|
|
|
|
|
|
|
#define CS_GAME_VERSION 20
|
|
|
|
#define CS_LEVEL_START_TIME 21 // so the timer only shows the current level
|
|
|
|
#define CS_INTERMISSION 22 // when 1, fraglimit/timelimit has been hit and intermission will start in a second or two
|
|
|
|
#define CS_FLAGSTATUS 23 // string indicating flag status in CTF
|
|
|
|
#define CS_SHADERSTATE 24
|
|
|
|
#define CS_BOTINFO 25
|
|
|
|
|
|
|
|
#define CS_ITEMS 27 // string of 0's and 1's that tell which items are present
|
|
|
|
|
|
|
|
#define CS_MODELS 32
|
|
|
|
#define CS_SOUNDS (CS_MODELS+MAX_MODELS)
|
|
|
|
#define CS_PLAYERS (CS_SOUNDS+MAX_SOUNDS)
|
|
|
|
#define CS_LOCATIONS (CS_PLAYERS+MAX_CLIENTS)
|
2001-08-01 19:52:17 +00:00
|
|
|
#define CS_PARTICLES (CS_LOCATIONS+MAX_LOCATIONS)
|
2001-05-06 20:50:27 +00:00
|
|
|
|
2001-08-01 19:52:17 +00:00
|
|
|
#define CS_MAX (CS_PARTICLES+MAX_LOCATIONS)
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
#if (CS_MAX) > MAX_CONFIGSTRINGS
|
|
|
|
#error overflow: (CS_MAX) > MAX_CONFIGSTRINGS
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
GT_FFA, // free for all
|
|
|
|
GT_TOURNAMENT, // one on one tournament
|
|
|
|
GT_SINGLE_PLAYER, // single player ffa
|
|
|
|
|
|
|
|
//-- team games go after this --
|
|
|
|
|
|
|
|
GT_TEAM, // team deathmatch
|
|
|
|
GT_CTF, // capture the flag
|
|
|
|
GT_1FCTF,
|
|
|
|
GT_OBELISK,
|
|
|
|
GT_HARVESTER,
|
|
|
|
GT_MAX_GAME_TYPE
|
|
|
|
} gametype_t;
|
|
|
|
|
|
|
|
typedef enum { GENDER_MALE, GENDER_FEMALE, GENDER_NEUTER } gender_t;
|
|
|
|
|
|
|
|
/*
|
|
|
|
===================================================================================
|
|
|
|
|
|
|
|
PMOVE MODULE
|
|
|
|
|
|
|
|
The pmove code takes a player_state_t and a usercmd_t and generates a new player_state_t
|
|
|
|
and some other output data. Used for local prediction on the client game and true
|
|
|
|
movement on the server game.
|
|
|
|
===================================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
PM_NORMAL, // can accelerate and turn
|
|
|
|
PM_NOCLIP, // noclip movement
|
|
|
|
PM_SPECTATOR, // still run into walls
|
|
|
|
PM_DEAD, // no acceleration or turning, but free falling
|
|
|
|
PM_FREEZE, // stuck in place with no control
|
|
|
|
PM_INTERMISSION, // no movement or status bar
|
|
|
|
PM_SPINTERMISSION // no movement or status bar
|
|
|
|
} pmtype_t;
|
|
|
|
|
|
|
|
typedef enum {
|
2001-08-06 19:15:00 +00:00
|
|
|
WEAPON_READY, //sync with WP_ANIM_IDLE
|
2001-07-01 05:11:12 +00:00
|
|
|
WEAPON_COCKED,
|
2001-08-06 19:15:00 +00:00
|
|
|
WEAPON_RAISING, //sync with WP_ANIM_ACTIVATE
|
|
|
|
WEAPON_DROPPING, //sync with WP_ANIM_DISARM
|
|
|
|
WEAPON_FIRING, //sync with WP_ANIM_FIRE
|
2001-08-17 20:48:18 +00:00
|
|
|
WEAPON_RELOADING, //sync with WP_ANIM_RELOAD
|
2001-05-06 20:50:27 +00:00
|
|
|
} weaponstate_t;
|
2001-08-06 19:15:00 +00:00
|
|
|
|
2001-07-28 02:24:11 +00:00
|
|
|
//Blaze: for the weapon animation states
|
|
|
|
typedef enum {
|
|
|
|
//WP_ANIM_READY,
|
|
|
|
WP_ANIM_FIRE,
|
|
|
|
WP_ANIM_RELOAD,
|
2001-08-01 18:28:38 +00:00
|
|
|
WP_ANIM_IDLE,
|
2001-08-06 19:15:00 +00:00
|
|
|
WP_ANIM_DISARM,
|
|
|
|
WP_ANIM_ACTIVATE,
|
2001-08-17 20:48:18 +00:00
|
|
|
//WP_ANIM_EMPTY,
|
2001-08-30 09:47:39 +00:00
|
|
|
//WP_ANIM_EXTRA1,
|
|
|
|
//WP_ANIM_EXTRA2,
|
2001-07-28 02:24:11 +00:00
|
|
|
MAX_WEAPON_ANIMATIONS
|
|
|
|
} wpAnimNumber_t;
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
// pmove->pm_flags
|
|
|
|
#define PMF_DUCKED 1
|
|
|
|
#define PMF_JUMP_HELD 2
|
|
|
|
#define PMF_BACKWARDS_JUMP 8 // go into backwards land
|
|
|
|
#define PMF_BACKWARDS_RUN 16 // coast down to backwards run
|
|
|
|
#define PMF_TIME_LAND 32 // pm_time is time before rejump
|
|
|
|
#define PMF_TIME_KNOCKBACK 64 // pm_time is an air-accelerate only time
|
|
|
|
#define PMF_TIME_WATERJUMP 256 // pm_time is waterjump
|
|
|
|
#define PMF_RESPAWNED 512 // clear after attack and jump buttons come up
|
|
|
|
#define PMF_USE_ITEM_HELD 1024
|
|
|
|
#define PMF_GRAPPLE_PULL 2048 // pull towards grapple location
|
|
|
|
#define PMF_FOLLOW 4096 // spectate following another player
|
|
|
|
#define PMF_SCOREBOARD 8192 // spectate as a scoreboard
|
|
|
|
#define PMF_INVULEXPAND 16384 // invulnerability sphere set to full size
|
2001-08-30 09:47:39 +00:00
|
|
|
#define PMF_RELOAD_HELD 32768 // Elder: new reload code
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
#define PMF_ALL_TIMES (PMF_TIME_WATERJUMP|PMF_TIME_LAND|PMF_TIME_KNOCKBACK)
|
|
|
|
|
|
|
|
#define MAXTOUCH 32
|
|
|
|
typedef struct {
|
|
|
|
// state (in / out)
|
|
|
|
playerState_t *ps;
|
|
|
|
|
|
|
|
// command (in)
|
|
|
|
usercmd_t cmd;
|
|
|
|
int tracemask; // collide against these types of surfaces
|
|
|
|
int debugLevel; // if set, diagnostic output will be printed
|
|
|
|
qboolean noFootsteps; // if the game is setup for no footsteps by the server
|
|
|
|
qboolean gauntletHit; // true if a gauntlet attack would actually hit something
|
|
|
|
|
|
|
|
int framecount;
|
|
|
|
|
|
|
|
// results (out)
|
|
|
|
int numtouch;
|
|
|
|
int touchents[MAXTOUCH];
|
|
|
|
|
|
|
|
vec3_t mins, maxs; // bounding box size
|
|
|
|
|
|
|
|
int watertype;
|
|
|
|
int waterlevel;
|
|
|
|
|
|
|
|
float xyspeed;
|
|
|
|
|
|
|
|
// for fixed msec Pmove
|
|
|
|
int pmove_fixed;
|
|
|
|
int pmove_msec;
|
|
|
|
|
|
|
|
// callbacks to test the world
|
|
|
|
// these will be different functions during game and cgame
|
|
|
|
void (*trace)( trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int passEntityNum, int contentMask );
|
2001-08-01 19:52:17 +00:00
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
int (*pointcontents)( const vec3_t point, int passEntityNum );
|
|
|
|
} pmove_t;
|
|
|
|
|
|
|
|
// if a full pmove isn't done on the client, you can just update the angles
|
|
|
|
void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd );
|
|
|
|
void Pmove (pmove_t *pmove);
|
|
|
|
|
|
|
|
//===================================================================================
|
|
|
|
|
|
|
|
|
|
|
|
// player_state->stats[] indexes
|
|
|
|
// NOTE: may not have more than 16
|
|
|
|
typedef enum {
|
|
|
|
STAT_HEALTH,
|
2001-07-28 14:12:11 +00:00
|
|
|
STAT_HOLDABLE_ITEM, // Elder: Used to hold unique items in Reaction
|
2001-05-06 20:50:27 +00:00
|
|
|
#ifdef MISSIONPACK
|
|
|
|
STAT_PERSISTANT_POWERUP,
|
|
|
|
#endif
|
|
|
|
STAT_WEAPONS, // 16 bit fields
|
2001-08-30 09:47:39 +00:00
|
|
|
STAT_ARMOR, // Elder: technically we don't need this anymore
|
2001-05-06 20:50:27 +00:00
|
|
|
STAT_DEAD_YAW, // look this direction when dead (FIXME: get rid of?)
|
2001-07-28 14:12:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
STAT_CLIENTS_READY, // bit mask of clients wishing to exit the intermission (FIXME: configstring?)
|
2001-08-17 20:48:18 +00:00
|
|
|
//STAT_MAX_HEALTH, // health / armor limit, changable by handicap
|
2001-07-28 14:12:11 +00:00
|
|
|
|
|
|
|
//These are RQ3-related specific stats
|
2001-06-25 23:38:05 +00:00
|
|
|
STAT_CLIPS, // Num Clips player currently has
|
2001-07-28 14:12:11 +00:00
|
|
|
STAT_BURST, // number of shots in burst
|
2001-08-30 09:47:39 +00:00
|
|
|
STAT_JUMPTIME, // Blaze: Double jump
|
|
|
|
STAT_RELOADTIME, // Elder: Reload sound triggering and weapon switch override
|
|
|
|
STAT_RELOADATTEMPTS, // Elder: For fast-reload queuing
|
2001-05-06 20:50:27 +00:00
|
|
|
STAT_FALLDAMAGE,
|
2001-08-30 09:47:39 +00:00
|
|
|
STAT_RQ3 // Blaze: Will hold a few flags for bandage, etc info
|
|
|
|
//STAT_STREAK, // Elder: wasteful stat -- only used on server-side ATM
|
2001-05-06 20:50:27 +00:00
|
|
|
} statIndex_t;
|
2001-07-24 01:50:01 +00:00
|
|
|
|
2001-06-11 06:12:32 +00:00
|
|
|
//STAT_RQ3 stat info
|
|
|
|
#define RQ3_LEGDAMAGE 1 //If this bit is set, the player has leg damage
|
2001-06-18 01:59:58 +00:00
|
|
|
#define RQ3_BANDAGE_NEED 2
|
|
|
|
#define RQ3_BANDAGE_WORK 4
|
2001-08-30 09:47:39 +00:00
|
|
|
// Elder: zoom stat - 1x = 0, 2x = zoom low, 4x = zoom_med, 6x = zoom_low + zoom_med
|
2001-06-18 01:59:58 +00:00
|
|
|
#define RQ3_ZOOM_LOW 8
|
|
|
|
#define RQ3_ZOOM_MED 16
|
2001-08-30 09:47:39 +00:00
|
|
|
#define RQ3_THROWWEAPON 32 // Present if dropping weapon via cmd or kicked away
|
|
|
|
#define RQ3_FASTRELOADS 64 // Fast-reloads flag
|
|
|
|
#define RQ3_LOCKRELOADS 128 // Lock-reloads at end of fast-reload cycle
|
|
|
|
// Elder: reload status; 0 + 1 = stage 2
|
|
|
|
//#define RQ3_RELOADSTAGE0 256
|
|
|
|
//#define RQ3_RELOADSTAGE1 512
|
2001-06-18 01:59:58 +00:00
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
// player_state->persistant[] indexes
|
|
|
|
// these fields are the only part of player_state that isn't
|
|
|
|
// cleared on respawn
|
|
|
|
// NOTE: may not have more than 16
|
|
|
|
typedef enum {
|
|
|
|
PERS_SCORE, // !!! MUST NOT CHANGE, SERVER AND GAME BOTH REFERENCE !!!
|
|
|
|
PERS_HITS, // total points damage inflicted so damage beeps can sound on change
|
|
|
|
PERS_RANK, // player rank or team rank
|
|
|
|
PERS_TEAM, // player team
|
|
|
|
PERS_SPAWN_COUNT, // incremented every respawn
|
|
|
|
PERS_PLAYEREVENTS, // 16 bits that can be flipped for events
|
|
|
|
PERS_ATTACKER, // clientnum of last damage inflicter
|
|
|
|
PERS_ATTACKEE_ARMOR, // health/armor of last person we attacked
|
|
|
|
PERS_KILLED, // count of the number of times you died
|
|
|
|
// player awards tracking
|
2001-06-11 06:12:32 +00:00
|
|
|
/* Blaze: No need for these, may re-implement later if we want in a different form
|
2001-05-06 20:50:27 +00:00
|
|
|
PERS_IMPRESSIVE_COUNT, // two railgun hits in a row
|
|
|
|
PERS_EXCELLENT_COUNT, // two successive kills in a short amount of time
|
|
|
|
PERS_DEFEND_COUNT, // defend awards
|
|
|
|
PERS_ASSIST_COUNT, // assist awards
|
|
|
|
PERS_GAUNTLET_FRAG_COUNT, // kills with the guantlet
|
|
|
|
PERS_CAPTURES // captures
|
2001-06-11 06:12:32 +00:00
|
|
|
*/
|
|
|
|
PERS_WEAPONMODES // Blaze: Holds the different weapond modes for the different guns see below for the defines to use
|
2001-05-06 20:50:27 +00:00
|
|
|
} persEnum_t;
|
2001-06-11 06:12:32 +00:00
|
|
|
//RQ3 Weapon modes - If the bit is set, then the weapon is in the more restrictive mode, as in if it's set to 1 it's semi, 3rnd burst, etc
|
|
|
|
#define RQ3_MK23MODE 1 // Pistol modes
|
|
|
|
#define RQ3_MP5MODE 2 // MP5 Modes
|
|
|
|
#define RQ3_M4MODE 4 // M4 Modes
|
|
|
|
#define RQ3_KNIFEMODE 8 // Knife Modes
|
|
|
|
#define RQ3_GRENSHORT 16 // Short range grenade
|
|
|
|
#define RQ3_GRENMED 32 // Medium range grenade, if short and medium are both 1, then it is long range
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
// entityState_t->eFlags
|
|
|
|
#define EF_DEAD 0x00000001 // don't draw a foe marker over players with EF_DEAD
|
|
|
|
#ifdef MISSIONPACK
|
|
|
|
#define EF_TICKING 0x00000002 // used to make players play the prox mine ticking sound
|
|
|
|
#endif
|
2001-08-30 09:47:39 +00:00
|
|
|
#define EF_HANDCANNON_SMOKED 0x00000002 // Elder: HC Smoke
|
2001-05-06 20:50:27 +00:00
|
|
|
#define EF_TELEPORT_BIT 0x00000004 // toggled every time the origin abruptly changes
|
|
|
|
#define EF_AWARD_EXCELLENT 0x00000008 // draw an excellent sprite
|
2001-08-01 19:52:17 +00:00
|
|
|
#define EF_PLAYER_EVENT 0x00000010
|
2001-05-06 20:50:27 +00:00
|
|
|
#define EF_BOUNCE 0x00000010 // for missiles
|
|
|
|
#define EF_BOUNCE_HALF 0x00000020 // for missiles
|
|
|
|
#define EF_AWARD_GAUNTLET 0x00000040 // draw a gauntlet sprite
|
|
|
|
#define EF_NODRAW 0x00000080 // may have an event, but no model (unspawned items)
|
|
|
|
#define EF_FIRING 0x00000100 // for lightning gun
|
|
|
|
#define EF_KAMIKAZE 0x00000200
|
|
|
|
#define EF_MOVER_STOP 0x00000400 // will push otherwise
|
|
|
|
#define EF_AWARD_CAP 0x00000800 // draw the capture sprite
|
|
|
|
#define EF_TALK 0x00001000 // draw a talk balloon
|
|
|
|
#define EF_CONNECTION 0x00002000 // draw a connection trouble sprite
|
|
|
|
#define EF_VOTED 0x00004000 // already cast a vote
|
|
|
|
#define EF_AWARD_IMPRESSIVE 0x00008000 // draw an impressive sprite
|
|
|
|
#define EF_AWARD_DEFEND 0x00010000 // draw a defend sprite
|
|
|
|
#define EF_AWARD_ASSIST 0x00020000 // draw a assist sprite
|
|
|
|
#define EF_AWARD_DENIED 0x00040000 // denied
|
|
|
|
#define EF_TEAMVOTED 0x00080000 // already cast a team vote
|
|
|
|
|
|
|
|
// NOTE: may not have more than 16
|
|
|
|
typedef enum {
|
|
|
|
PW_NONE,
|
|
|
|
|
|
|
|
PW_QUAD,
|
|
|
|
PW_BATTLESUIT,
|
|
|
|
PW_HASTE,
|
|
|
|
PW_INVIS,
|
|
|
|
PW_REGEN,
|
|
|
|
PW_FLIGHT,
|
|
|
|
|
|
|
|
PW_REDFLAG,
|
|
|
|
PW_BLUEFLAG,
|
|
|
|
PW_NEUTRALFLAG,
|
|
|
|
|
2001-08-30 09:47:39 +00:00
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
PW_SCOUT,
|
|
|
|
PW_GUARD,
|
|
|
|
PW_DOUBLER,
|
|
|
|
PW_AMMOREGEN,
|
|
|
|
PW_INVULNERABILITY,
|
|
|
|
|
|
|
|
PW_NUM_POWERUPS
|
|
|
|
|
|
|
|
} powerup_t;
|
|
|
|
|
2001-07-09 00:32:10 +00:00
|
|
|
//Elder: swapped around + full Bando name and typo fix on "slipers"
|
2001-05-06 20:50:27 +00:00
|
|
|
typedef enum {
|
|
|
|
HI_NONE,
|
|
|
|
|
2001-07-28 14:12:11 +00:00
|
|
|
//TODO: remove the baseQ3 ones
|
2001-06-28 00:24:52 +00:00
|
|
|
HI_TELEPORTER,
|
|
|
|
HI_MEDKIT,
|
|
|
|
HI_KAMIKAZE,
|
|
|
|
HI_PORTAL,
|
|
|
|
HI_INVULNERABILITY,
|
2001-06-28 00:51:27 +00:00
|
|
|
HI_KEVLAR,
|
|
|
|
HI_LASER,
|
|
|
|
HI_SILENCER,
|
2001-07-09 00:32:10 +00:00
|
|
|
HI_BANDOLIER,
|
|
|
|
HI_SLIPPERS,
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
HI_NUM_HOLDABLE
|
|
|
|
} holdable_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
WP_NONE,
|
|
|
|
//Blaze: Reaction Weapons
|
|
|
|
//Remember to put them in the right spots
|
|
|
|
WP_KNIFE,
|
|
|
|
WP_PISTOL,
|
|
|
|
WP_M4,
|
|
|
|
WP_SSG3000,
|
|
|
|
WP_MP5,
|
|
|
|
WP_M3,
|
|
|
|
WP_HANDCANNON,
|
|
|
|
WP_AKIMBO,
|
|
|
|
WP_GRENADE,
|
|
|
|
#ifdef MISSIONPACK
|
|
|
|
WP_NAILGUN,
|
|
|
|
WP_PROX_LAUNCHER,
|
|
|
|
WP_CHAINGUN,
|
|
|
|
#endif
|
|
|
|
|
|
|
|
WP_NUM_WEAPONS
|
|
|
|
} weapon_t;
|
|
|
|
|
2001-08-30 09:47:39 +00:00
|
|
|
|
2001-08-17 20:48:18 +00:00
|
|
|
// Elder: for our end-level awards later on
|
2001-08-30 09:47:39 +00:00
|
|
|
// I was just brainstorming a whole bunch of necessary records
|
|
|
|
// This should probably be defined in g_local.h because it
|
|
|
|
// will almost be exclusively for the server to utilize
|
|
|
|
// We can send config strings to the individual players
|
|
|
|
// for their own review and the global config string would
|
|
|
|
// contain the global ones with rewards
|
2001-08-17 20:48:18 +00:00
|
|
|
typedef enum {
|
2001-08-30 09:47:39 +00:00
|
|
|
// Location-hit tally - Where this player shot at
|
|
|
|
REC_HEADSHOTS,
|
|
|
|
REC_CHESTSHOTS,
|
|
|
|
REC_STOMACHSHOTS,
|
|
|
|
REC_LEGSHOTS,
|
|
|
|
REC_FRONTSHOTS,
|
|
|
|
REC_BACKSHOTS,
|
|
|
|
REC_LEFTSHOTS,
|
|
|
|
REC_RIGHTSHOTS,
|
|
|
|
REC_CORPSESHOTS, // sickos - takes precedence over above records on carcasses
|
|
|
|
REC_GIBSHOTS, // sickos - takes precedence over above records on carcasses
|
|
|
|
// Weapon usage tally
|
|
|
|
REC_MP5SHOTS,
|
|
|
|
REC_M4SHOTS,
|
|
|
|
REC_MK23SHOTS,
|
|
|
|
REC_SSG3000SHOTS,
|
|
|
|
REC_HANDCANNONSHOTS,
|
|
|
|
REC_M3SHOTS,
|
|
|
|
REC_AKIMBOSHOTS,
|
|
|
|
REC_GRENADESHOTS,
|
|
|
|
REC_KNIFETHROWSHOTS,
|
|
|
|
REC_KNIFESLASHSHOTS,
|
|
|
|
REC_MK23HITS,
|
|
|
|
REC_M3HITS,
|
|
|
|
REC_MP5HITS,
|
|
|
|
REC_M4HITS,
|
|
|
|
REC_SSG3000HITS,
|
|
|
|
REC_HANDCANNONHITS,
|
|
|
|
REC_AKIMBOHITS,
|
|
|
|
REC_GRENADEHITS,
|
|
|
|
REC_KNIFETHROWHITS,
|
|
|
|
REC_KNIFESLASHHITS,
|
|
|
|
REC_KICKHITS,
|
|
|
|
// Death tally
|
|
|
|
REC_HEADDEATHS,
|
|
|
|
REC_CHESTDEATHS,
|
|
|
|
REC_STOMACHDEATHS,
|
|
|
|
REC_LEGDEATHS,
|
|
|
|
REC_MK23DEATHS,
|
|
|
|
REC_M3DEATHS,
|
|
|
|
REC_MP5DEATHS,
|
|
|
|
REC_M4DEATHS,
|
|
|
|
REC_SSG3000DEATHS,
|
|
|
|
REC_HANDCANNONDEATHS,
|
|
|
|
REC_AKIMBODEATHS,
|
|
|
|
REC_GRENADEDEATHS,
|
|
|
|
REC_KNIFETHROWDEATHS,
|
|
|
|
REC_KNIFESLASHDEATHS,
|
|
|
|
REC_BLEEDDEATHS,
|
|
|
|
REC_FALLINGDEATHS,
|
|
|
|
REC_SUICIDES, // e.g. for MPELP award, those loonies :)
|
|
|
|
REC_WORLDDEATHS, // crushers, doors, etc.
|
|
|
|
REC_STEALTHKILLS, // this is a derived record -- remove?
|
|
|
|
// Movement tally - dunno about these ones since they are related to pmove
|
|
|
|
REC_CAMPCOUNT,
|
|
|
|
REC_CROUCHCOUNT,
|
|
|
|
REC_JUMPCOUNT, // e.g. rabbit or monkey award
|
|
|
|
// Player interaction tally
|
|
|
|
REC_FRAGSTEALS, // this is a derived record -- remove?
|
|
|
|
REC_CHATCOUNT,
|
|
|
|
REC_GESTURECOUNT,
|
|
|
|
|
|
|
|
REC_NUM_RECORDS
|
2001-08-17 20:48:18 +00:00
|
|
|
} rq3record_t;
|
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
|
2001-06-08 04:47:30 +00:00
|
|
|
//Elder: added
|
|
|
|
//
|
|
|
|
//bg_misc.c
|
|
|
|
//
|
|
|
|
int ClipAmountForReload( int w );
|
|
|
|
int ClipAmountForAmmo( int w );
|
|
|
|
|
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
// reward sounds (stored in ps->persistant[PERS_PLAYEREVENTS])
|
|
|
|
#define PLAYEREVENT_DENIEDREWARD 0x0001
|
|
|
|
#define PLAYEREVENT_GAUNTLETREWARD 0x0002
|
|
|
|
#define PLAYEREVENT_HOLYSHIT 0x0004
|
|
|
|
|
|
|
|
// entityState_t->event values
|
|
|
|
// entity events are for effects that take place reletive
|
|
|
|
// to an existing entities origin. Very network efficient.
|
|
|
|
|
|
|
|
// two bits at the top of the entityState->event field
|
|
|
|
// will be incremented with each change in the event so
|
|
|
|
// that an identical event started twice in a row can
|
|
|
|
// be distinguished. And off the value with ~EV_EVENT_BITS
|
|
|
|
// to retrieve the actual event number
|
|
|
|
#define EV_EVENT_BIT1 0x00000100
|
|
|
|
#define EV_EVENT_BIT2 0x00000200
|
|
|
|
#define EV_EVENT_BITS (EV_EVENT_BIT1|EV_EVENT_BIT2)
|
|
|
|
|
2001-08-01 19:52:17 +00:00
|
|
|
#define EVENT_VALID_MSEC 300
|
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
typedef enum {
|
|
|
|
EV_NONE,
|
|
|
|
|
|
|
|
EV_FOOTSTEP,
|
|
|
|
EV_FOOTSTEP_METAL,
|
2001-08-06 19:15:00 +00:00
|
|
|
EV_FOOTSTEP_GRASS, // Elder: new surfaces
|
2001-08-17 20:48:18 +00:00
|
|
|
EV_FOOTSTEP_WOOD,
|
|
|
|
EV_FOOTSTEP_CARPET,
|
|
|
|
EV_FOOTSTEP_METAL2,
|
2001-05-06 20:50:27 +00:00
|
|
|
EV_FOOTSPLASH,
|
|
|
|
EV_FOOTWADE,
|
|
|
|
EV_SWIM,
|
|
|
|
|
|
|
|
EV_STEP_4,
|
|
|
|
EV_STEP_8,
|
|
|
|
EV_STEP_12,
|
|
|
|
EV_STEP_16,
|
|
|
|
|
|
|
|
EV_FALL_SHORT,
|
2001-07-27 00:21:23 +00:00
|
|
|
EV_FALL_SHORT_NOSOUND,
|
2001-05-06 20:50:27 +00:00
|
|
|
EV_FALL_MEDIUM,
|
2001-07-27 00:21:23 +00:00
|
|
|
EV_FALL_MEDIUM_NOSOUND,
|
2001-05-06 20:50:27 +00:00
|
|
|
EV_FALL_FAR,
|
2001-07-27 00:21:23 +00:00
|
|
|
EV_FALL_FAR_NOSOUND,
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
EV_JUMP_PAD, // boing sound at origin, jump sound on player
|
|
|
|
|
|
|
|
EV_JUMP,
|
|
|
|
EV_WATER_TOUCH, // foot touches
|
|
|
|
EV_WATER_LEAVE, // foot leaves
|
|
|
|
EV_WATER_UNDER, // head touches
|
|
|
|
EV_WATER_CLEAR, // head leaves
|
|
|
|
|
|
|
|
EV_ITEM_PICKUP, // normal item pickups are predictable
|
|
|
|
EV_GLOBAL_ITEM_PICKUP, // powerup / team sounds are broadcast to everyone
|
|
|
|
|
|
|
|
EV_NOAMMO,
|
|
|
|
EV_CHANGE_WEAPON,
|
|
|
|
EV_FIRE_WEAPON,
|
2001-08-30 09:47:39 +00:00
|
|
|
EV_RELOAD_WEAPON0, // Elder: reload weapon sounds
|
|
|
|
EV_RELOAD_WEAPON1, // Elder: reload weapon sounds
|
|
|
|
EV_RELOAD_WEAPON2, // Elder: reload weapon sounds
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
EV_USE_ITEM0,
|
|
|
|
EV_USE_ITEM1,
|
|
|
|
EV_USE_ITEM2,
|
|
|
|
EV_USE_ITEM3,
|
|
|
|
EV_USE_ITEM4,
|
|
|
|
EV_USE_ITEM5,
|
|
|
|
EV_USE_ITEM6,
|
|
|
|
EV_USE_ITEM7,
|
|
|
|
EV_USE_ITEM8,
|
|
|
|
EV_USE_ITEM9,
|
|
|
|
EV_USE_ITEM10,
|
|
|
|
EV_USE_ITEM11,
|
|
|
|
EV_USE_ITEM12,
|
|
|
|
EV_USE_ITEM13,
|
|
|
|
EV_USE_ITEM14,
|
|
|
|
EV_USE_ITEM15,
|
|
|
|
|
|
|
|
EV_ITEM_RESPAWN,
|
|
|
|
EV_ITEM_POP,
|
|
|
|
EV_PLAYER_TELEPORT_IN,
|
|
|
|
EV_PLAYER_TELEPORT_OUT,
|
|
|
|
|
|
|
|
EV_GRENADE_BOUNCE, // eventParm will be the soundindex
|
|
|
|
|
|
|
|
EV_GENERAL_SOUND,
|
|
|
|
EV_GLOBAL_SOUND, // no attenuation
|
|
|
|
EV_GLOBAL_TEAM_SOUND,
|
2001-06-08 04:47:30 +00:00
|
|
|
EV_RQ3_SOUND, // Elder: play local sounds - intended for kick
|
2001-05-06 20:50:27 +00:00
|
|
|
|
2001-06-25 23:38:05 +00:00
|
|
|
EV_DMREWARD, // Duffman: To display expotional reward messages.
|
|
|
|
|
2001-05-06 20:50:27 +00:00
|
|
|
EV_BULLET_HIT_FLESH,
|
|
|
|
EV_BULLET_HIT_WALL,
|
2001-08-30 09:47:39 +00:00
|
|
|
EV_BULLET_HIT_METAL, // Elder: sparks
|
|
|
|
EV_BULLET_HIT_KEVLAR, // Elder: sparks
|
2001-07-28 14:12:11 +00:00
|
|
|
EV_SSG3000_HIT_FLESH,
|
2001-08-13 17:26:53 +00:00
|
|
|
EV_JUMPKICK, // Elder: sound + jumpkick message
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
EV_MISSILE_HIT,
|
|
|
|
EV_MISSILE_MISS,
|
|
|
|
EV_MISSILE_MISS_METAL,
|
2001-08-18 19:59:25 +00:00
|
|
|
EV_KNIFE_MISS, // Elder: knife slash stuff
|
2001-05-06 20:50:27 +00:00
|
|
|
EV_RAILTRAIL,
|
|
|
|
EV_SHOTGUN,
|
|
|
|
EV_HANDCANNON,
|
|
|
|
EV_BULLET, // otherEntity is the shooter
|
|
|
|
|
2001-08-01 18:28:38 +00:00
|
|
|
EV_HEADSHOT, // Elder: spray like SSG shot
|
2001-05-06 20:50:27 +00:00
|
|
|
EV_PAIN,
|
|
|
|
EV_DEATH1,
|
|
|
|
EV_DEATH2,
|
|
|
|
EV_DEATH3,
|
|
|
|
EV_OBITUARY,
|
2001-06-26 02:06:50 +00:00
|
|
|
EV_OBITUARY_HEAD,
|
|
|
|
EV_OBITUARY_CHEST,
|
|
|
|
EV_OBITUARY_STOMACH,
|
|
|
|
EV_OBITUARY_LEGS,
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
EV_POWERUP_QUAD,
|
|
|
|
EV_POWERUP_BATTLESUIT,
|
|
|
|
EV_POWERUP_REGEN,
|
|
|
|
|
|
|
|
EV_GIB_PLAYER, // gib a previously living player
|
2001-07-24 01:50:01 +00:00
|
|
|
EV_BREAK_GLASS1, // Blaze: Breakable glass
|
|
|
|
EV_BREAK_GLASS2,
|
|
|
|
EV_BREAK_GLASS3,
|
2001-05-06 20:50:27 +00:00
|
|
|
EV_SCOREPLUM, // score plum
|
|
|
|
|
|
|
|
//#ifdef MISSIONPACK
|
|
|
|
EV_PROXIMITY_MINE_STICK,
|
|
|
|
EV_PROXIMITY_MINE_TRIGGER,
|
|
|
|
EV_KAMIKAZE, // kamikaze explodes
|
|
|
|
EV_OBELISKEXPLODE, // obelisk explodes
|
|
|
|
EV_OBELISKPAIN, // obelisk is in pain
|
|
|
|
EV_INVUL_IMPACT, // invulnerability sphere impact
|
|
|
|
EV_JUICED, // invulnerability juiced effect
|
|
|
|
EV_LIGHTNINGBOLT, // lightning bolt bounced of invulnerability sphere
|
|
|
|
//#endif
|
|
|
|
|
|
|
|
EV_DEBUG_LINE,
|
|
|
|
EV_STOPLOOPINGSOUND,
|
|
|
|
EV_TAUNT,
|
|
|
|
EV_TAUNT_YES,
|
|
|
|
EV_TAUNT_NO,
|
|
|
|
EV_TAUNT_FOLLOWME,
|
|
|
|
EV_TAUNT_GETFLAG,
|
|
|
|
EV_TAUNT_GUARDBASE,
|
|
|
|
EV_TAUNT_PATROL
|
|
|
|
|
|
|
|
} entity_event_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
GTS_RED_CAPTURE,
|
|
|
|
GTS_BLUE_CAPTURE,
|
|
|
|
GTS_RED_RETURN,
|
|
|
|
GTS_BLUE_RETURN,
|
|
|
|
GTS_RED_TAKEN,
|
|
|
|
GTS_BLUE_TAKEN,
|
|
|
|
GTS_REDOBELISK_ATTACKED,
|
|
|
|
GTS_BLUEOBELISK_ATTACKED,
|
|
|
|
GTS_REDTEAM_SCORED,
|
|
|
|
GTS_BLUETEAM_SCORED,
|
|
|
|
GTS_REDTEAM_TOOK_LEAD,
|
|
|
|
GTS_BLUETEAM_TOOK_LEAD,
|
|
|
|
GTS_TEAMS_ARE_TIED,
|
|
|
|
GTS_KAMIKAZE
|
|
|
|
} global_team_sound_t;
|
|
|
|
|
|
|
|
// animations
|
|
|
|
typedef enum {
|
|
|
|
BOTH_DEATH1,
|
|
|
|
BOTH_DEAD1,
|
|
|
|
BOTH_DEATH2,
|
|
|
|
BOTH_DEAD2,
|
|
|
|
BOTH_DEATH3,
|
|
|
|
BOTH_DEAD3,
|
|
|
|
|
|
|
|
TORSO_GESTURE,
|
|
|
|
|
|
|
|
TORSO_ATTACK,
|
|
|
|
TORSO_ATTACK2,
|
|
|
|
|
|
|
|
TORSO_DROP,
|
|
|
|
TORSO_RAISE,
|
|
|
|
|
|
|
|
TORSO_STAND,
|
|
|
|
TORSO_STAND2,
|
|
|
|
|
|
|
|
LEGS_WALKCR,
|
|
|
|
LEGS_WALK,
|
|
|
|
LEGS_RUN,
|
|
|
|
LEGS_BACK,
|
|
|
|
LEGS_SWIM,
|
|
|
|
|
|
|
|
LEGS_JUMP,
|
|
|
|
LEGS_LAND,
|
|
|
|
|
|
|
|
LEGS_JUMPB,
|
|
|
|
LEGS_LANDB,
|
|
|
|
|
|
|
|
LEGS_IDLE,
|
|
|
|
LEGS_IDLECR,
|
|
|
|
|
|
|
|
LEGS_TURN,
|
|
|
|
//Blaze: Weapon reload animation
|
|
|
|
// WEAPON_RELOAD,
|
|
|
|
|
|
|
|
TORSO_GETFLAG,
|
|
|
|
TORSO_GUARDBASE,
|
|
|
|
TORSO_PATROL,
|
|
|
|
TORSO_FOLLOWME,
|
|
|
|
TORSO_AFFIRMATIVE,
|
|
|
|
TORSO_NEGATIVE,
|
|
|
|
|
|
|
|
MAX_ANIMATIONS,
|
|
|
|
|
|
|
|
LEGS_BACKCR,
|
|
|
|
LEGS_BACKWALK,
|
|
|
|
FLAG_RUN,
|
|
|
|
FLAG_STAND,
|
|
|
|
FLAG_STAND2RUN,
|
|
|
|
|
|
|
|
MAX_TOTALANIMATIONS
|
|
|
|
} animNumber_t;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct animation_s {
|
|
|
|
int firstFrame;
|
|
|
|
int numFrames;
|
|
|
|
int loopFrames; // 0 to numFrames
|
|
|
|
int frameLerp; // msec between frames
|
|
|
|
int initialLerp; // msec to get to first frame
|
|
|
|
int reversed; // true if animation is reversed
|
|
|
|
int flipflop; // true if animation should flipflop back to base
|
|
|
|
} animation_t;
|
|
|
|
|
|
|
|
|
|
|
|
// flip the togglebit every time an animation
|
|
|
|
// changes so a restart of the same anim can be detected
|
|
|
|
#define ANIM_TOGGLEBIT 128
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
TEAM_FREE,
|
|
|
|
TEAM_RED,
|
|
|
|
TEAM_BLUE,
|
|
|
|
TEAM_SPECTATOR,
|
|
|
|
|
|
|
|
TEAM_NUM_TEAMS
|
|
|
|
} team_t;
|
|
|
|
|
|
|
|
// Time between location updates
|
|
|
|
#define TEAM_LOCATION_UPDATE_TIME 1000
|
|
|
|
|
|
|
|
// How many players on the overlay
|
|
|
|
#define TEAM_MAXOVERLAY 32
|
|
|
|
|
|
|
|
|
|
|
|
// Begin Duffman
|
|
|
|
// Location Damage
|
|
|
|
// Height layers
|
|
|
|
#define LOCATION_NONE 0x00000000
|
|
|
|
|
|
|
|
#define LOCATION_HEAD 0x00000001 // [F,B,L,R] Top of head
|
|
|
|
#define LOCATION_FACE 0x00000002 // [F] Face [B,L,R] Head
|
|
|
|
#define LOCATION_SHOULDER 0x00000004 // [L,R] Shoulder [F] Throat, [B] Neck
|
|
|
|
#define LOCATION_CHEST 0x00000008 // [F] Chest [B] Back [L,R] Arm
|
|
|
|
#define LOCATION_STOMACH 0x00000010 // [L,R] Sides [F] Stomach [B] Lower Back
|
|
|
|
#define LOCATION_GROIN 0x00000020 // [F] Groin [B] Butt [L,R] Hip
|
|
|
|
#define LOCATION_LEG 0x00000040 // [F,B,L,R] Legs
|
|
|
|
#define LOCATION_FOOT 0x00000080 // [F,B,L,R] Bottom of Feet
|
|
|
|
|
|
|
|
|
|
|
|
// Relative direction strike came from
|
|
|
|
|
|
|
|
#define LOCATION_LEFT 0x00000100
|
|
|
|
#define LOCATION_RIGHT 0x00000200
|
|
|
|
#define LOCATION_FRONT 0x00000400
|
|
|
|
#define LOCATION_BACK 0x00000800
|
|
|
|
// End Duffman
|
|
|
|
|
|
|
|
//team task
|
|
|
|
typedef enum {
|
|
|
|
TEAMTASK_NONE,
|
|
|
|
TEAMTASK_OFFENSE,
|
|
|
|
TEAMTASK_DEFENSE,
|
|
|
|
TEAMTASK_PATROL,
|
|
|
|
TEAMTASK_FOLLOW,
|
|
|
|
TEAMTASK_RETRIEVE,
|
|
|
|
TEAMTASK_ESCORT,
|
|
|
|
TEAMTASK_CAMP
|
|
|
|
} teamtask_t;
|
|
|
|
|
|
|
|
// means of death
|
|
|
|
typedef enum {
|
|
|
|
MOD_UNKNOWN,
|
|
|
|
MOD_SHOTGUN,
|
|
|
|
MOD_GAUNTLET,
|
|
|
|
MOD_MACHINEGUN,
|
|
|
|
MOD_GRENADE,
|
|
|
|
MOD_GRENADE_SPLASH,
|
|
|
|
MOD_ROCKET,
|
|
|
|
MOD_ROCKET_SPLASH,
|
|
|
|
MOD_PLASMA,
|
|
|
|
MOD_PLASMA_SPLASH,
|
|
|
|
MOD_RAILGUN,
|
|
|
|
MOD_LIGHTNING,
|
|
|
|
MOD_BFG,
|
|
|
|
MOD_BFG_SPLASH,
|
|
|
|
MOD_WATER,
|
|
|
|
MOD_SLIME,
|
|
|
|
MOD_LAVA,
|
|
|
|
MOD_CRUSH,
|
|
|
|
MOD_TELEFRAG,
|
|
|
|
MOD_FALLING,
|
|
|
|
MOD_SUICIDE,
|
|
|
|
MOD_TARGET_LASER,
|
|
|
|
MOD_TRIGGER_HURT,
|
|
|
|
#ifdef MISSIONPACK
|
|
|
|
MOD_NAIL,
|
|
|
|
MOD_CHAINGUN,
|
|
|
|
MOD_PROXIMITY_MINE,
|
|
|
|
MOD_KAMIKAZE,
|
|
|
|
MOD_JUICED,
|
|
|
|
#endif
|
|
|
|
MOD_GRAPPLE,
|
|
|
|
//Blaze: Reaction Deaths
|
|
|
|
MOD_KNIFE,
|
|
|
|
MOD_KNIFE_THROWN,
|
|
|
|
MOD_PISTOL,
|
|
|
|
MOD_M4,
|
|
|
|
MOD_SNIPER,
|
|
|
|
MOD_MP5,
|
|
|
|
MOD_AKIMBO,
|
|
|
|
MOD_M3,
|
|
|
|
MOD_HANDCANNON,
|
|
|
|
MOD_KICK,
|
|
|
|
MOD_BLEEDING
|
|
|
|
} meansOfDeath_t;
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
|
|
|
// gitem_t->type
|
|
|
|
typedef enum {
|
|
|
|
IT_BAD,
|
|
|
|
IT_WEAPON, // EFX: rotate + upscale + minlight
|
|
|
|
IT_AMMO, // EFX: rotate
|
|
|
|
IT_ARMOR, // EFX: rotate + minlight
|
|
|
|
IT_HEALTH, // EFX: static external sphere + rotating internal
|
|
|
|
IT_POWERUP, // instant on, timer based
|
|
|
|
// EFX: rotate + external ring that rotates
|
|
|
|
IT_HOLDABLE, // single use, holdable item
|
|
|
|
// EFX: rotate + bob
|
|
|
|
IT_PERSISTANT_POWERUP,
|
|
|
|
IT_TEAM
|
|
|
|
} itemType_t;
|
|
|
|
|
|
|
|
#define MAX_ITEM_MODELS 4
|
|
|
|
|
|
|
|
typedef struct gitem_s {
|
|
|
|
char *classname; // spawning name
|
|
|
|
char *pickup_sound;
|
|
|
|
char *world_model[MAX_ITEM_MODELS];
|
|
|
|
|
|
|
|
char *icon;
|
|
|
|
char *pickup_name; // for printing on pickup
|
|
|
|
|
|
|
|
int quantity; // for ammo how much, or duration of powerup
|
|
|
|
itemType_t giType; // IT_* flags
|
|
|
|
|
|
|
|
int giTag;
|
|
|
|
|
|
|
|
char *precaches; // string of all models and images this item will use
|
|
|
|
char *sounds; // string of all sounds this item will use
|
|
|
|
} gitem_t;
|
|
|
|
|
|
|
|
// included in both the game dll and the client
|
|
|
|
extern gitem_t bg_itemlist[];
|
|
|
|
extern int bg_numItems;
|
|
|
|
|
|
|
|
gitem_t *BG_FindItem( const char *pickupName );
|
|
|
|
gitem_t *BG_FindItemForWeapon( weapon_t weapon );
|
|
|
|
gitem_t *BG_FindItemForPowerup( powerup_t pw );
|
|
|
|
gitem_t *BG_FindItemForHoldable( holdable_t pw );
|
|
|
|
#define ITEM_INDEX(x) ((x)-bg_itemlist)
|
|
|
|
|
|
|
|
qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const playerState_t *ps );
|
|
|
|
|
|
|
|
|
|
|
|
// g_dmflags->integer flags
|
|
|
|
#define DF_NO_FALLING 8
|
|
|
|
#define DF_FIXED_FOV 16
|
|
|
|
#define DF_NO_FOOTSTEPS 32
|
|
|
|
|
|
|
|
// content masks
|
|
|
|
#define MASK_ALL (-1)
|
|
|
|
#define MASK_SOLID (CONTENTS_SOLID)
|
|
|
|
#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_BODY)
|
|
|
|
#define MASK_DEADSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP)
|
|
|
|
#define MASK_WATER (CONTENTS_WATER|CONTENTS_LAVA|CONTENTS_SLIME)
|
|
|
|
#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_SLIME|CONTENTS_LAVA)
|
|
|
|
#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_BODY|CONTENTS_CORPSE)
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// entityState_t->eType
|
|
|
|
//
|
|
|
|
typedef enum {
|
|
|
|
ET_GENERAL,
|
|
|
|
ET_PLAYER,
|
|
|
|
ET_ITEM,
|
|
|
|
ET_MISSILE,
|
|
|
|
ET_MOVER,
|
|
|
|
ET_BREAKABLE,//Blaze: Breakable glass
|
|
|
|
ET_BEAM,
|
|
|
|
ET_PORTAL,
|
|
|
|
ET_SPEAKER,
|
|
|
|
ET_PUSH_TRIGGER,
|
|
|
|
ET_TELEPORT_TRIGGER,
|
|
|
|
ET_INVISIBLE,
|
|
|
|
ET_GRAPPLE, // grapple hooked on wall
|
|
|
|
ET_TEAM,
|
2001-07-28 14:12:11 +00:00
|
|
|
ET_LASER, // lasersight entity type
|
2001-05-06 20:50:27 +00:00
|
|
|
|
|
|
|
ET_EVENTS // any of the EV_* events can be added freestanding
|
|
|
|
// by setting eType to ET_EVENTS + eventNum
|
|
|
|
// this avoids having to set eFlags and eventNum
|
|
|
|
} entityType_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void BG_EvaluateTrajectory( const trajectory_t *tr, int atTime, vec3_t result );
|
|
|
|
void BG_EvaluateTrajectoryDelta( const trajectory_t *tr, int atTime, vec3_t result );
|
|
|
|
|
|
|
|
void BG_AddPredictableEventToPlayerstate( int newEvent, int eventParm, playerState_t *ps );
|
|
|
|
|
|
|
|
void BG_TouchJumpPad( playerState_t *ps, entityState_t *jumppad );
|
|
|
|
|
|
|
|
void BG_PlayerStateToEntityState( playerState_t *ps, entityState_t *s, qboolean snap );
|
|
|
|
void BG_PlayerStateToEntityStateExtraPolate( playerState_t *ps, entityState_t *s, int time, qboolean snap );
|
|
|
|
|
|
|
|
qboolean BG_PlayerTouchesItem( playerState_t *ps, entityState_t *item, int atTime );
|
|
|
|
|
|
|
|
|
|
|
|
#define ARENAS_PER_TIER 4
|
|
|
|
#define MAX_ARENAS 1024
|
|
|
|
#define MAX_ARENAS_TEXT 8192
|
|
|
|
|
|
|
|
#define MAX_BOTS 1024
|
|
|
|
#define MAX_BOTS_TEXT 8192
|
|
|
|
|
|
|
|
|
|
|
|
// Kamikaze
|
|
|
|
|
|
|
|
// 1st shockwave times
|
|
|
|
#define KAMI_SHOCKWAVE_STARTTIME 0
|
|
|
|
#define KAMI_SHOCKWAVEFADE_STARTTIME 1500
|
|
|
|
#define KAMI_SHOCKWAVE_ENDTIME 2000
|
|
|
|
// explosion/implosion times
|
|
|
|
#define KAMI_EXPLODE_STARTTIME 250
|
|
|
|
#define KAMI_IMPLODE_STARTTIME 2000
|
|
|
|
#define KAMI_IMPLODE_ENDTIME 2250
|
|
|
|
// 2nd shockwave times
|
|
|
|
#define KAMI_SHOCKWAVE2_STARTTIME 2000
|
|
|
|
#define KAMI_SHOCKWAVE2FADE_STARTTIME 2500
|
|
|
|
#define KAMI_SHOCKWAVE2_ENDTIME 3000
|
|
|
|
// radius of the models without scaling
|
|
|
|
#define KAMI_SHOCKWAVEMODEL_RADIUS 88
|
|
|
|
#define KAMI_BOOMSPHEREMODEL_RADIUS 72
|
|
|
|
// maximum radius of the models during the effect
|
|
|
|
#define KAMI_SHOCKWAVE_MAXRADIUS 1320
|
|
|
|
#define KAMI_BOOMSPHERE_MAXRADIUS 720
|
|
|
|
#define KAMI_SHOCKWAVE2_MAXRADIUS 704
|
|
|
|
|