Removed the zcam defines again and did some cleanups

This commit is contained in:
Richard Allen 2002-04-02 00:56:18 +00:00
parent 08555edb8d
commit 468c0073ee

View file

@ -5,6 +5,9 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.63 2002/04/02 00:56:18 jbravo
// Removed the zcam defines again and did some cleanups
//
// Revision 1.62 2002/04/01 22:23:14 slicer
// Added "weapon" command buffering | Solved Gren Mode Bug
//
@ -104,15 +107,11 @@
//==================================================================
// the "gameversion" client command will print this plus compile date
#define GAMEVERSION "reaction"
// NiceAss: Took it out until later.
#define __ZCAM__
#define GAMEVERSION "reaction"
#define BODY_QUEUE_SIZE 8
// JBravo: Max number of killed enemys to track
#define RQ3_MAXKILLS 5
#define RQ3_MAXKILLS 5
// Blaze: How long someone bleeds for
// Elder: This doesn't work the same as Q2 because clients and servers can
@ -120,44 +119,43 @@
// (20 snapshots per second) so we double it from 10.
// Ideally, this number should match the server's sv_fps cvar value for those
// that run non-standard server frame rates.
#define BLEED_TIME 20
#define BLEED_TIME 20
// Elder: Everyone knows you lose 6 health from the moment you start bandaging
// Let's enforce that in-code because it's sometimes 7 or even 8
// Elder: LOL it's 3, dumb Elder!
#define BLEED_BANDAGE 3
//#define BLEED_BANDAGE_TIME 5400 // 27 x 2
#define BLEED_BANDAGE_TIME 5600 // 27 x 2
#define BLEED_BANDAGE_TIME 5400 // 27 x 2
// types of locations that can be hit
#define LOC_HDAM 1 // head
#define LOC_CDAM 2 // chest
#define LOC_SDAM 3 // stomach
#define LOC_LDAM 4 // legs
#define LOC_HDAM 1 // head
#define LOC_CDAM 2 // chest
#define LOC_SDAM 3 // stomach
#define LOC_LDAM 4 // legs
#define INFINITE 1000000
#define FRAMETIME 100 // msec
#define CARNAGE_REWARD_TIME 3000
#define REWARD_SPRITE_TIME 2000
#define FRAMETIME 100 // msec
#define CARNAGE_REWARD_TIME 3000
#define REWARD_SPRITE_TIME 2000
#define INTERMISSION_DELAY_TIME 1000
#define INTERMISSION_DELAY_TIME 1000
#define SP_INTERMISSION_DELAY_TIME 5000
// gentity->flags
#define FL_GODMODE 0x00000010
#define FL_NOTARGET 0x00000020
#define FL_GODMODE 0x00000010
#define FL_NOTARGET 0x00000020
#define FL_TEAMSLAVE 0x00000400 // not the first on the team
#define FL_NO_KNOCKBACK 0x00000800
#define FL_DROPPED_ITEM 0x00001000
#define FL_NO_BOTS 0x00002000 // spawn point not for bot use
#define FL_NO_BOTS 0x00002000 // spawn point not for bot use
#define FL_NO_HUMANS 0x00004000 // spawn point just for bots
#define FL_FORCE_GESTURE 0x00008000 // force gesture on client
//Elder: err - this looks funny... should it be 0x00010000 ?
//#define FL_THROWN_ITEM 0x00016000 // XRAY FMJ weapon throwing
#define FL_THROWN_ITEM 0x00010000 // XRAY FMJ weapon throwing
//#define FL_THROWN_ITEM 0x00016000 // XRAY FMJ weapon throwing
#define FL_THROWN_ITEM 0x00010000 // XRAY FMJ weapon throwing
#define FL_RQ3_JUNKITEM 0x00020000 // Elder: the item we want to remove
//Elder: moved to bg_public.h
//#define FL_THROWN_KNIFE 0x00040000 // Elder: thrown knife special case
//#define FL_THROWN_KNIFE 0x00040000 // Elder: thrown knife special case
// movers are things like doors, plats, buttons, etc
typedef enum {
@ -172,14 +170,11 @@ typedef enum {
ROTATOR_2TO1
} moverState_t;
#define SP_PODIUM_MODEL "models/mapobjects/podium/podium4.md3"
#define SP_PODIUM_MODEL "models/mapobjects/podium/podium4.md3"
#define RQ3_RESPAWNTIME_DEFAULT 60000 // Elder: time for weapons to respawn - up to 60s
#define SP_AUTOOPEN 4 // Elder: revert to Q3 behaviour
#define SP_DOORTOGGLE 8 // Elder: added to enable mover toggling
#define MAXDOORTIME 100 // Elder: max time the opendoor key can stay open
#define SP_AUTOOPEN 4 // Elder: revert to Q3 behaviour
#define SP_DOORTOGGLE 8 // Elder: added to enable mover toggling
#define MAXDOORTIME 100 // Elder: max time the opendoor key can stay open
//============================================================================
@ -187,63 +182,52 @@ typedef struct gentity_s gentity_t;
typedef struct gclient_s gclient_t;
struct gentity_s {
entityState_t s; // communicated by server to clients
entityShared_t r; // shared by both the server system and game
entityState_t s; // communicated by server to clients
entityShared_t r; // shared by both the server system and game
// DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
// EXPECTS THE FIELDS IN THAT ORDER!
//================================
struct gclient_s *client; // NULL if not a client
struct gclient_s *client; // NULL if not a client
qboolean inuse;
char *classname; // set in QuakeEd
int spawnflags; // set in QuakeEd
qboolean neverFree; // if true, FreeEntity will only unlink
// bodyque uses this
char *classname; // set in QuakeEd
int spawnflags; // set in QuakeEd
qboolean neverFree; // if true, FreeEntity will only unlink
// bodyque uses this
// JBravo: adding func_explosive
int damage_radius;
int mass;
int tension;
int bounce;
int material;
int size;
int flags; // FL_* variables
int damage_radius;
int mass;
int tension;
int bounce;
int material;
int size;
int flags; // FL_* variables
char *model;
char *model2;
int freetime; // level.time when the object was freed
int eventTime; // events will be cleared EVENT_VALID_MSEC after set
int freetime; // level.time when the object was freed
int eventTime; // events will be cleared EVENT_VALID_MSEC after set
qboolean freeAfterEvent;
qboolean unlinkAfterEvent;
qboolean physicsObject; // if true, it can be pushed by movers and fall off edges
// all game items are physicsObjects,
// all game items are physicsObjects,
float physicsBounce; // 1.0 = continuous bounce, 0.0 = no bounce
int clipmask; // brushes with this content value will be collided against
// when moving. items and corpses do not collide against
// players, for instance
int clipmask; // brushes with this content value will be collided against
// when moving. items and corpses do not collide against
// players, for instance
// movers
moverState_t moverState;
int soundPos1;
int sound1to2;
int sound2to1;
int soundPos2;
int soundLoop;
int soundPos1;
int sound1to2;
int sound2to1;
int soundPos2;
int soundLoop;
gentity_t *parent;
gentity_t *nextTrain;
gentity_t *prevTrain;
vec3_t pos1, pos2;
char *message;
int timestamp; // body queue sinking, etc
int timestamp; // body queue sinking, etc
float angle; // set in editor, -1 = up, -2 = down
char *target;
char *targetname;
@ -257,7 +241,7 @@ struct gentity_s {
float speed;
vec3_t movedir;
int nextthink;
int nextthink;
void (*think)(gentity_t *self);
void (*reached)(gentity_t *self); // movers call this when hitting endpoint
void (*blocked)(gentity_t *self, gentity_t *other);
@ -265,46 +249,37 @@ struct gentity_s {
void (*use)(gentity_t *self, gentity_t *other, gentity_t *activator);
void (*pain)(gentity_t *self, gentity_t *attacker, int damage);
void (*die)(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod);
int pain_debounce_time;
int fly_sound_debounce_time; // wind tunnel
int last_move_time;
int health;
int pain_debounce_time;
int fly_sound_debounce_time; // wind tunnel
int last_move_time;
int health;
qboolean takedamage;
int damage;
int splashDamage; // quad will increase this without increasing radius
int splashRadius;
int methodOfDeath;
int splashMethodOfDeath;
int count;
int damage;
int splashDamage; // quad will increase this without increasing radius
int splashRadius;
int methodOfDeath;
int splashMethodOfDeath;
int count;
gentity_t *chain;
gentity_t *enemy;
gentity_t *activator;
gentity_t *teamchain; // next entity in team
gentity_t *teammaster; // master of the team
gentity_t *teammaster; // master of the team
#ifdef MISSIONPACK
int kamikazeTime;
int kamikazeShockTime;
int kamikazeTime;
int kamikazeShockTime;
#endif
int watertype;
int waterlevel;
int noise_index;
int watertype;
int waterlevel;
int noise_index;
// timing variables
float wait;
float random;
gitem_t *item; // for bonus items
float distance; // VALKYRIE: for rotating door
};
@ -318,11 +293,9 @@ typedef enum {
SPECTATOR_NOT,
SPECTATOR_FREE,
SPECTATOR_FOLLOW,
#ifdef __ZCAM__
SPECTATOR_ZCAM,
SPECTATOR_CAMERA_FLIC,
SPECTATOR_CAMERA_SWING,
#endif
SPECTATOR_SCOREBOARD
} spectatorState_t;
@ -333,16 +306,13 @@ typedef enum {
typedef struct {
playerTeamStateState_t state;
int location;
int captures;
int basedefense;
int carrierdefense;
int flagrecovery;
int fragcarrier;
int assists;
int location;
int captures;
int basedefense;
int carrierdefense;
int flagrecovery;
int fragcarrier;
int assists;
float lasthurtcarrier;
float lastreturnedflag;
float flagsince;
@ -359,60 +329,56 @@ typedef struct {
// time and reading them back at connection time. Anything added here
// MUST be dealt with in G_InitSessionData() / G_ReadSessionData() / G_WriteSessionData()
typedef struct {
team_t sessionTeam;
team_t sessionTeam;
team_t savedTeam; // JBravo: Used to hold the real team status of a player.
int spectatorTime; // for determining next-in-line to play
spectatorState_t spectatorState;
int spectatorClient; // for chasecam and follow mode
int wins, losses; // tournament stats
qboolean teamLeader; // true when this client is a team leader
qboolean teamLeader; // true when this client is a team leader
gentity_t *spawnPoint; // JBravo: This players spawnpoint
qboolean teamSpawn; // JBravo: This player is being spawned with his team.
} clientSession_t;
//
#define MAX_NETNAME 36
#define MAX_NETNAME 36
#define MAX_VOTE_COUNT 3
// client data that stays across multiple respawns, but is cleared
// on each level change or team change at ClientBegin()
typedef struct {
//Slicer: Matchmode
team_t captain;
team_t sub;
team_t captain;
team_t sub;
clientConnected_t connected;
// aasimon: No Need for this here, using a cvar to record the clientnumber of referee, so that map_restarts dont change
// the referee
// qboolean referee;
usercmd_t cmd; // we would lose angles if not persistant
usercmd_t cmd; // we would lose angles if not persistant
qboolean localClient; // true if "ip" info key is "localhost"
qboolean initialSpawn; // the first spawn should be at a cool location
qboolean predictItemPickup; // based on cg_predictItems userinfo
qboolean pmoveFixed; //
qboolean pmoveFixed; //
char netname[MAX_NETNAME];
int maxHealth; // for handicapping
int enterTime; // level.time the client entered the game
playerTeamState_t teamState; // status in teamplay games
int voteCount; // to prevent people from constantly calling votes
int teamVoteCount; // to prevent people from constantly calling votes
qboolean teamInfo; // send team overlay updates?
int maxHealth; // for handicapping
int enterTime; // level.time the client entered the game
playerTeamState_t teamState; // status in teamplay games
int voteCount; // to prevent people from constantly calling votes
int teamVoteCount; // to prevent people from constantly calling votes
qboolean teamInfo; // send team overlay updates?
qboolean hadUniqueWeapon[MAX_WEAPONS]; //Elder: for "ammo" in last gun
int sayTime; // Elder: say validation stuff
int sayCount;
int sayWarnings;
int sayBans;
int sayMuteTime;
int sayTime; // Elder: say validation stuff
int sayCount;
int sayWarnings;
int sayBans;
int sayMuteTime;
qboolean sayModerated; // so warnings are not repeated for multi-line, same-frame messages
int records[REC_NUM_RECORDS]; // Elder: for our statistics tracking
int records[REC_NUM_RECORDS]; // Elder: for our statistics tracking
} clientPersistant_t;
#ifdef __ZCAM__
struct camera_s;
#endif /* __ZCAM__ */
// Elder: spam prevention defaults
/*
@ -441,155 +407,106 @@ typedef enum
// except for 'client->pers' and 'client->sess'
struct gclient_s {
// ps MUST be the first element, because the server expects it
playerState_t ps; // communicated by server to clients
playerState_t ps; // communicated by server to clients
// the rest of the structure is private to game
clientPersistant_t pers;
clientSession_t sess;
qboolean readyToExit; // wishes to leave the intermission
qboolean noclip;
qboolean readyToExit; // wishes to leave the intermission
qboolean noclip;
int lastCmdTime; // level.time of last usercmd_t, for EF_CONNECTION
// we can't just use pers.lastCommand.time, because
// of the g_sycronousclients case
// we can't just use pers.lastCommand.time, because
// of the g_sycronousclients case
int buttons;
int oldbuttons;
int latched_buttons;
vec3_t oldOrigin;
vec3_t oldOrigin;
// sum up damage over an entire frame, so
// shotgun blasts give a single big kick
int damage_armor; // damage absorbed by armor
int damage_blood; // damage taken out of health
int damage_knockback; // impact damage
vec3_t damage_from; // origin for vector calculation
qboolean damage_fromWorld; // if true, don't use the damage_from vector
//qboolean damage_vest; // Elder: if true, play the vest-hit sound
vec3_t damage_from; // origin for vector calculation
qboolean damage_fromWorld; // if true, don't use the damage_from vector
//qboolean damage_vest; // Elder: if true, play the vest-hit sound
int accurateCount; // for "impressive" reward sound
int accuracy_shots; // total number of shots
int accuracy_hits; // total number of hits
//Blaze: For weapon stats
//Will need to pass these along in g_client to the new client after spawn
// Elder: to be merged into rq3Record_t for more comprehensive tracking
/*
int knifeShots;
int knifeHits;
int mk23Shots;
int mk23Hits;
int m4Shots;
int m4Hits;
int mp5Shots;
int mp5Hits;
int m3Shots;
int m3Hits;
int hcShots;
int hcHits;
int ssgShots;
int ssgHits;
int akimboShots;
int akimboHits;
int grenShots;
int grenHits;
*/
// int lastkilled_client; // last client that this client killed
gentity_t *lastkilled_client[5]; // JBravo: last 5 clients that this client killed
int num_kills; // JBravo: Number of killed players in TP.
int lasthurt_client; // last client that damaged this client
int lasthurt_mod; // type of damage the client did
//Slicer
int weapon_attempts;
qboolean weapon_after_bandage_warned;
qboolean weapon_after_bandage_warned;
// Begin Duffman
int lasthurt_location; // Where the client was hit.
int lasthurt_location; // Where the client was hit.
// End Duffman
// timers
int respawnTime; // can respawn when time > this, force after g_forcerespwan
int inactivityTime; // kick players when time > this
qboolean inactivityWarning; // qtrue if the five seoond warning has been given
int rewardTime; // clear the EF_AWARD_IMPRESSIVE, etc when time > this
qboolean inactivityWarning; // qtrue if the five seoond warning has been given
int rewardTime; // clear the EF_AWARD_IMPRESSIVE, etc when time > this
int airOutTime;
int lastKillTime; // for multiple kill rewards
qboolean fireHeld; // used for hook
gentity_t *hook; // grapple hook if out
int switchTeamTime; // time the player switched teams
qboolean fireHeld; // used for hook
gentity_t *hook; // grapple hook if out
int switchTeamTime; // time the player switched teams
// Begin Duffman
int numClips[MAX_WEAPONS]; // Number of clips each weapon has
int numClips[MAX_WEAPONS]; // Number of clips each weapon has
// End Duffman
int weaponCount[WP_NUM_WEAPONS]; // Elder: for duplicate unique weapon tracking
int openDoor; //Blaze: used to hold if someone has hit opendoor key
int openDoor; //Blaze: used to hold if someone has hit opendoor key
int openDoorTime;
// timeResidual is used to handle events that happen every second
// like health / armor countdowns and regeneration
int timeResidual;
//Elder: C3A laser tutorial
gentity_t *lasersight; // lasersight OR flashlight if in use
gentity_t *lasersight; // lasersight OR flashlight if in use
// Bleeding server-only cvars
int bleeding; // Blaze: remaining points to bleed away
int bleeding; // Blaze: remaining points to bleed away
int bleed_remain; // Blaze: How much left to bleed
int bleedloc; // Blaze: Where are we bleeding
vec3_t bleedloc_offset; // Blaze: location of bleeding (from origin)
int bleedloc; // Blaze: Where are we bleeding
vec3_t bleedloc_offset; // Blaze: location of bleeding (from origin)
int bleed_delay; // Elder: time for next spurt of blood
vec3_t bleednorm;
//qboolean isBleeding; // Blaze: is client bleeding
// int legDamage; // Blaze: Client has leg damage - holds number of hits too
int bleedtick; // Blaze: Holds # of seconds till bleeding stops.
vec3_t bleednorm;
//qboolean isBleeding; // Blaze: is client bleeding
// int legDamage; // Blaze: Client has leg damage - holds number of hits too
int bleedtick; // Blaze: Holds # of seconds till bleeding stops.
int bleedBandageCount; // Elder: hack to restrict amount of bleeding to 3 points
int headShotTime; // Elder: got headshot?
//Elder: server only needs to know for sniper spread - ARGH
// int zoomed; // Hawkins (SSG zoom)
//qboolean semi; // hawkins (semiauto mode for m4, mp5, pistol)
int shots; // Blaze: Number of shots fired so far with this weapon
int weaponfireNextTime; // for akimbos
int lastzoom; // Elder: save last zoom state when firing
// int zoomed; // Hawkins (SSG zoom)
//qboolean semi; // hawkins (semiauto mode for m4, mp5, pistol)
int shots; // Blaze: Number of shots fired so far with this weapon
int weaponfireNextTime; // for akimbos
int lastzoom; // Elder: save last zoom state when firing
// These are now obsolete with the new reload code
int fastReloads; // Elder: for queuing M3/SSG reloads
int lastReloadTime; // Elder: for queuing M3/SSG reloads
int reloadAttempts; // Elder: for queuing M3/SSG reloads
int reloadStage; // Elder: 0, 1, 2 for sound queuing - move to stats?
int consecutiveShots; // Elder: for M4 ride-up/kick
int uniqueWeapons; // Elder: formerly a stat, now just a server var
int fastReloads; // Elder: for queuing M3/SSG reloads
int lastReloadTime; // Elder: for queuing M3/SSG reloads
int reloadAttempts; // Elder: for queuing M3/SSG reloads
int reloadStage; // Elder: 0, 1, 2 for sound queuing - move to stats?
int consecutiveShots; // Elder: for M4 ride-up/kick
int uniqueWeapons; // Elder: formerly a stat, now just a server var
int uniqueItems;
int killStreak; // Elder: replaces the old STAT_STREAK
qboolean kevlarHit; // Elder: kevlar hit -- FIXME: poor implementation
int knife_sound; // NiceAss: What did the player hit while slashing?
int killStreak; // Elder: replaces the old STAT_STREAK
qboolean kevlarHit; // Elder: kevlar hit -- FIXME: poor implementation
int knife_sound; // NiceAss: What did the player hit while slashing?
#ifdef MISSIONPACK
gentity_t *persistantPowerup;
gentity_t *persistantPowerup;
int portalID;
int ammoTimes[WP_NUM_WEAPONS];
int invulnerabilityTime;
#endif
char *areabits;
#ifdef __ZCAM__
struct camera_s *camera;
#endif /* __ZCAM__ */
char *areabits;
struct camera_s *camera;
// JBravo adding TP stuff
int specMode;
int teamplayWeapon;
int teamplayItem;
int radioGender;
qboolean radioOff;
int specMode;
int teamplayWeapon;
int teamplayItem;
int radioGender;
qboolean radioOff;
};
@ -603,109 +520,96 @@ struct gclient_s {
//
// this structure is cleared as each map is entered
//
#define MAX_SPAWN_VARS 64
#define MAX_SPAWN_VARS 64
#define MAX_SPAWN_VARS_CHARS 4096
typedef struct {
struct gclient_s *clients; // [maxclients]
struct gentity_s *gentities;
int gentitySize;
int num_entities; // current number, <= MAX_GENTITIES
int warmupTime; // restart match at this time
fileHandle_t logFile;
int warmupTime; // restart match at this time
fileHandle_t logFile;
// store latched cvars here that we want to get at often
int maxclients;
int framenum;
int time; // in msec
int previousTime; // so movers can back up when blocked
int startTime; // level.time the map was started
int time; // in msec
int previousTime; // so movers can back up when blocked
int startTime; // level.time the map was started
int teamScores[TEAM_NUM_TEAMS];
int lastTeamLocationTime; // last time of client team location update
qboolean newSession; // don't use any old session data, because
// we changed gametype
qboolean restarted; // waiting for a map_restart to fire
int lastTeamLocationTime; // last time of client team location update
qboolean newSession; // don't use any old session data, because
// we changed gametype
qboolean restarted; // waiting for a map_restart to fire
int numConnectedClients;
int numNonSpectatorClients; // includes connecting clients
int numPlayingClients; // connected, non-spectators
int sortedClients[MAX_CLIENTS]; // sorted by score
int follow1, follow2; // clientNums for auto-follow spectators
int snd_fry; // sound index for standing in lava
int numPlayingClients; // connected, non-spectators
int sortedClients[MAX_CLIENTS]; // sorted by score
int follow1, follow2; // clientNums for auto-follow spectators
int snd_fry; // sound index for standing in lava
int warmupModificationCount; // for detecting if g_warmup is changed
// voting state
char voteString[MAX_STRING_CHARS];
char voteDisplayString[MAX_STRING_CHARS];
int voteTime; // level.time vote was called
int voteExecuteTime; // time the vote is executed
char voteString[MAX_STRING_CHARS];
char voteDisplayString[MAX_STRING_CHARS];
int voteTime; // level.time vote was called
int voteExecuteTime; // time the vote is executed
int voteYes;
int voteNo;
int numVotingClients; // set by CalculateRanks
int numVotingClients; // set by CalculateRanks
// team voting state
char teamVoteString[2][MAX_STRING_CHARS];
int teamVoteTime[2]; // level.time vote was called
char teamVoteString[2][MAX_STRING_CHARS];
int teamVoteTime[2]; // level.time vote was called
int teamVoteYes[2];
int teamVoteNo[2];
int numteamVotingClients[2];// set by CalculateRanks
// spawn variables
qboolean spawning; // the G_Spawn*() functions are valid
qboolean spawning; // the G_Spawn*() functions are valid
int numSpawnVars;
char *spawnVars[MAX_SPAWN_VARS][2]; // key / value pairs
char *spawnVars[MAX_SPAWN_VARS][2]; // key / value pairs
int numSpawnVarChars;
char spawnVarChars[MAX_SPAWN_VARS_CHARS];
char spawnVarChars[MAX_SPAWN_VARS_CHARS];
// intermission state
int intermissionQueued; // intermission was qualified, but
// wait INTERMISSION_DELAY_TIME before
// actually going there so the last
// frag can be watched. Disable future
// kills during this delay
int intermissiontime; // time the intermission was started
char *changemap;
qboolean readyToExit; // at least one client wants to exit
int intermissionQueued; // intermission was qualified, but
// wait INTERMISSION_DELAY_TIME before
// actually going there so the last
// frag can be watched. Disable future
// kills during this delay
int intermissiontime; // time the intermission was started
char *changemap;
qboolean readyToExit; // at least one client wants to exit
int exitTime;
vec3_t intermission_origin; // also used for spectator spawns
vec3_t intermission_angle;
vec3_t intermission_origin; // also used for spectator spawns
vec3_t intermission_angle;
qboolean locationLinked; // target_locations get linked
gentity_t *locationHead; // head of the location list
int bodyQueIndex; // dead bodies
gentity_t *bodyQue[BODY_QUEUE_SIZE];
qboolean locationLinked; // target_locations get linked
gentity_t *locationHead; // head of the location list
int bodyQueIndex; // dead bodies
gentity_t *bodyQue[BODY_QUEUE_SIZE];
#ifdef MISSIONPACK
int portalSequence;
#endif
// Slicer: Matchmode
float matchTime;
qboolean inGame;
float matchTime;
qboolean inGame;
// JBravo adding TP
int lights_camera_action;
qboolean team_round_going;
int holding_on_tie_check;
int team_round_countdown;
qboolean team_game_going;
int rulecheckfrequency;
int current_round_length;
qboolean spawnPointsLocated;
gentity_t *team1spawnpoint;
gentity_t *team2spawnpoint;
vec3_t team1spawn_origin;
vec3_t team1spawn_angles;
vec3_t team2spawn_origin;
vec3_t team2spawn_angles;
int fps;
int lights_camera_action;
qboolean team_round_going;
int holding_on_tie_check;
int team_round_countdown;
qboolean team_game_going;
int rulecheckfrequency;
int current_round_length;
qboolean spawnPointsLocated;
gentity_t *team1spawnpoint;
gentity_t *team2spawnpoint;
vec3_t team1spawn_origin;
vec3_t team1spawn_angles;
vec3_t team2spawn_origin;
vec3_t team2spawn_angles;
int fps;
} level_locals_t;
//
// rxn_game.c