sin-sdk/g_local.h
1999-11-02 00:00:00 +00:00

593 lines
16 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Quake 2 Engine/Sin/code/game/g_local.h $
// $Revision:: 100 $
// $Author:: Aldie $
// $Date:: 3/12/99 8:12p $
//
// Copyright (C) 1998 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/g_local.h $
//
// 100 3/12/99 8:12p Aldie
// added idtime
//
// 99 3/02/99 9:16p Aldie
// Added CTF game code
//
// 98 11/10/98 5:51p Jimdose
// disabled exporting symbols from the dll
//
// 97 11/10/98 4:34p Jimdose
// added clearsavegames to level
//
// 96 11/08/98 10:47p Jimdose
// moved earthquake to level struct
//
// 95 11/06/98 5:18p Jimdose
// added missionfailed and missionfailedtime to level vars
// when a mission has failed or the player is dead in single player, the game
// code immediately shows the loadmenu, preventing them from letting the game
// continue running if they exit the menu
//
// 94 10/27/98 9:46p Aldie
// Changed training cvar to level.training
//
// 93 10/26/98 2:16p Aldie
// Added AirClamp
//
// 92 10/25/98 11:49p Jimdose
// added EXPORT_TEMPLATE
// moved playerfrozen to level
//
// 91 10/25/98 6:26p Markd
// Added in no_jc abililty
//
// 90 10/24/98 2:18p Markd
// Added stufftext service
//
// 89 10/19/98 9:52p Jimdose
// changed slime variables to lightvolume
//
// 88 10/10/98 1:33a Jimdose
// moved include of g_utils.h to be before g_spawn.h
//
// 87 10/08/98 12:38a Jimdose
// Made savegames work
//
// 86 9/30/98 5:39p Aldie
// Added showinfo command
//
// 85 9/27/98 6:28p Aldie
// Added water, slime, and lava colors to worldspawn
//
// 84 9/19/98 5:01p Markd
// took out current_music and fallback_music
//
// 83 9/10/98 8:34p Markd
// Removed hidestats and drawoverlay from level variables
//
// 82 9/07/98 8:29p Markd
// Added fullmins fullmaxs and fullradius
//
// 81 9/02/98 7:48p Aldie
// Added ValidPlayerModels list
//
// 80 8/29/98 9:52p Jimdose
// General cleanup of g_local.h
// got rid of unused variables and macros
// moved prototypes to their appropriate headers
//
// 79 8/28/98 3:46p Markd
// Added centroid to edict_s
//
// 78 8/27/98 9:06p Jimdose
// Moved some prototypes that didn't belong here to g_utils.h
// Made STEPSIZE global
//
// 77 8/27/98 2:31p Aldie
// Added adrenaline flags
//
// 76 8/25/98 7:47p Jimdose
// Added gravaxis to SelectSpawnPoint
//
// 75 8/21/98 5:26p Markd
// Added sv_precache and cl_precache
//
// 74 8/19/98 8:50p Aldie
// Changed MOD to enumerated type
//
// 73 8/17/98 7:43p Markd
// Added MOD_LAVA and MOD_SLIME
//
// 72 8/17/98 4:35p Markd
// Added cinematic variable
//
// 71 8/14/98 8:14p Aldie
// Added generic overlay system
//
// 70 8/08/98 8:24p Markd
// Added MOD_THROWOBJECT
//
// 69 8/07/98 6:01p Aldie
// Added frag credits for falling damage
//
// 68 8/04/98 6:06p Aldie
// Relocated SPAWNFLAG_DETAIL
//
// 67 8/03/98 7:53p Jimdose
// Added G_DrawDebugNumber
//
// 66 8/03/98 7:36p Markd
// Added MOD_DEBRIS
//
// 65 8/02/98 9:00p Markd
// Merged code 3.17
//
// 64 7/24/98 6:19p Aldie
// enable and disable huds and dialog checking
//
// 63 7/23/98 2:32p Aldie
// Made speed of rocket a tweak cvar
//
// 62 7/21/98 10:05p Markd
// Added FL_DIE_EXPLODE
//
// 61 7/21/98 9:06p Markd
// Added current_mood and fallback_mood
//
// 60 7/21/98 1:10p Aldie
// Added meansofdeath to obituaries
//
// 59 7/18/98 5:08p Aldie
// Added showdamage
//
// 58 7/17/98 7:58p Markd
// Added radius to G_FullTrace
//
// 57 7/15/98 9:59p Markd
// Added FL_SHIELDS
//
// 56 7/13/98 5:01p Aldie
// Added dead player bodies with gibbing
//
// 55 7/09/98 10:38p Aldie
// Moved body parts to game
//
// 54 7/08/98 12:58p Jimdose
// made developer cvar global
//
// 53 7/03/98 12:02p Aldie
// Updated client persistent data
//
// 52 7/02/98 2:34p Aldie
// Mission computer
//
// 51 6/23/98 9:55p Jimdose
// Fixed infinite loop bug in G_RunFrame
//
// 50 6/15/98 10:07p Jimdose
// Added G_FullTrace
//
// 49 6/08/98 11:42a Aldie
// Added MOVETYPE_SLIDE
//
// 48 5/27/98 5:28a Aldie
// Added sv_gibs
//
// 47 5/27/98 5:04a Aldie
// Added queue for bloodsplats
//
// 46 5/25/98 6:52a Aldie
// Added maxbulletholes
//
// 45 5/24/98 4:48p Jimdose
// Made char *'s const
//
// 44 5/23/98 12:53p Aldie
// Updated surfaces networking.
//
// 43 5/20/98 7:17p Markd
// Added G_DebugBBox
//
// 42 5/20/98 11:12a Markd
// removed char * dependency
//
// 41 5/14/98 10:21p Jimdose
// Added G_NextEntity
// Made G_MoveStep return extended failure information
//
// 40 5/13/98 4:47p Aldie
// Update damage surfaces
//
// 39 5/12/98 7:07p Markd
// Put in development spawnflag
//
// 38 5/11/98 5:53p Markd
// Added FL_DIE_GIBS
//
// 37 5/08/98 7:01p Markd
// Added FL_DARKEN flag
//
// 36 5/05/98 2:49p Jimdose
// removed kick_angles, kick_origin, v_dmg_roll, v_dmg_pitch, v_dmg_time,
// fall_time, fall_value, damage_alpha, bonus_alpha, damage_blend, v_angle,
// bobtime, oldviewangles, and oldvelocity from gclient_t. Most are moved into
// Player class.
//
// 35 5/05/98 2:41p Aldie
// added server side surface states
//
// 34 5/03/98 4:44p Jimdose
// added line drawing utility functions similar to opengl
//
// 33 5/02/98 8:46p Markd
// Changed gamedir from Basesin1 to BASE
//
// 32 5/01/98 5:08p Jimdose
// added prototype for world as an Entity *. This points to the entity created
// by WorldSpawn
//
// 31 4/30/98 9:24p Jimdose
// Changed use of string to str class
//
// 30 4/30/98 4:48p Aldie
// Server side console states
//
// 29 4/28/98 7:00p Aldie
// Added sever side console buffer
//
// 28 4/27/98 3:21p Jimdose
// Added DebugLines
//
// 27 4/27/98 1:51p Aldie
// Added server side console states.
//
// 26 4/16/98 2:09p Jimdose
// Removed navigation_numbeacons
//
// 25 4/10/98 4:57p Jimdose
// added spawntime to edict
//
// 24 4/10/98 1:24a Markd
// Added new FL_ flags for sparks, blood, tesselation, blastmarks and
// die_tesselation
//
// 23 4/07/98 3:49p Aldie
// Added zooming crosshair
//
// 22 4/04/98 6:14p Jimdose
// Added G_GetNameForSurface
//
// 21 4/02/98 4:51p Jimdose
// Added stats and deathmatch scoreboard
//
// 20 3/30/98 10:43p Jimdose
// Added G_Movestep
//
// 19 3/28/98 4:36p Jimdose
// Added deathmatch starts
//
// 18 3/27/98 5:39p Jimdose
// Made BeginIntermission accept a string instead of an edict
//
// 17 3/26/98 8:15p Jimdose
// Added coop variable
// Removed unused structures and prototypes
// Added prototypes of game interface functions
//
// 16 3/24/98 5:03p Jimdose
// Included listener.h in place of g_event.h
//
// 15 3/24/98 4:30p Aldie
// New svc commands for consoles.
//
// 14 3/23/98 1:33p Jimdose
// Revamped event and command system
//
// 13 3/11/98 7:38p Markd
// Added current_viewthing
//
// 12 3/04/98 8:00p Aldie
// More support for damage surfaces.
//
// 11 3/02/98 5:49p Jimdose
// Added num_navbeacons to level_locals_t
// Added entname to edict_s
// Added findradius
// Removed unused Q2 functions
// Added include of string.h from standard C++ library
//
// 10 2/21/98 1:16p Jimdose
// Added G_TestMove and G_TestStepMove for use in pathfinding code
// Removed buttons, oldbuttons, and latched_buttons from gclient_t structure
//
// 9 2/18/98 8:08p Jimdose
// Prototyped IsNumeric
//
// 8 2/16/98 2:23p Jimdose
// Added active_edicts and free_edicts for faster entity processing and for
// operations that depend on the order that physics is processed on entities
// (such as binding).
// Added next and prev fields to edict_t
// Included linklist.h
//
// 7 2/09/98 2:35p Aldie
// Removed const of vec_origin and vec_zero
//
// 6 2/09/98 11:55a Jimdose
// Made vec_zero and vec_origin const
// Prototyped G_PushMove
//
// 5 2/06/98 5:50p Jimdose
// Update prototypes
//
// 4 2/03/98 11:06a Jimdose
// In process of converting to work with Sin progs
//
// 3 12/30/97 6:04p Jimdose
// Added header text
//
// DESCRIPTION:
// local definitions for game module
//
#ifndef __G_LOCAL_H__
#define __G_LOCAL_H__
#if 0
#define EXPORT_FROM_DLL __declspec( dllexport )
#define EXPORT_TEMPLATE
#else
#define EXPORT_FROM_DLL
#endif
#include "q_shared.h"
// define GAME_INCLUDE so that game.h does not define the
// short, server-visible gclient_t and edict_t structures,
// because we define the full size ones in this file
#define GAME_INCLUDE
#include "game.h"
#include "container.h"
#include "str.h"
// the "gameversion" client command will print this plus compile date
#define GAMEVERSION "base"
// memory tags to allow dynamic memory to be cleaned up
#define TAG_GAME 765 // clear when unloading the dll
#define TAG_LEVEL 766 // clear when loading a new level
// protocol bytes that can be directly added to messages
#define svc_muzzleflash 1
#define svc_muzzleflash2 2
#define svc_temp_entity 3
#define svc_layout 4
#define svc_inventory 5
#define svc_console_command 6
#define svc_stufftext 12
// handedness values
#define RIGHT_HANDED 0
#define LEFT_HANDED 1
#define CENTER_HANDED 2
#define random() ((rand () & 0x7fff) / ((float)0x7fff))
#define crandom() (2.0 * (random() - 0.5))
// predefine Entity so that we can add it to edict_t without any errors
class Entity;
//
// Exported templated classes must be explicitly instantiated
//
#ifdef EXPORT_TEMPLATE
template class EXPORT_FROM_DLL Container<str>;
#endif
// client data that stays across multiple level loads
typedef struct
{
char userinfo[MAX_INFO_STRING];
char netname[16];
char model[MAX_QPATH];
char skin[MAX_QPATH];
int hand;
// values saved and restored from edicts when changing levels
int health;
int max_health;
} client_persistant_t;
// client data that stays across deathmatch respawns
typedef struct
{
int enterframe; // level.framenum the client entered the game
int score; // frags, etc
vec3_t cmd_angles; // angles sent over in the last command
int ctf_team; // CTF team number
int ctf_state; // CTF player state
float ctf_lasttechmsg; // CTF Last time a tech message was sent
float ctf_lastfraggedcarrier; // Last time a carrier was fragged
float ctf_lasthurtcarrier; // List time carrier was hurt
float ctf_lastreturnedflag; // Last time flag was returned
float ctf_idtime; // Last time a player id was made
} client_respawn_t;
// this structure is cleared on each PutClientInServer(),
// except for 'client->pers'
typedef struct gclient_s
{
// known to server
player_state_t ps; // communicated by server to clients
int ping;
// private to game
client_persistant_t pers;
client_respawn_t resp;
qboolean showinfo;
} gclient_t;
struct edict_s
{
entity_state_t s;
gclient_t *client; // NULL if not a player
// the server expects the first part
// of gclient_t to be a player_state_t
// but the rest of it is opaque
qboolean inuse;
int linkcount;
// FIXME: move these fields to a server private sv_entity_t
link_t area; // linked to a division node or leaf
int num_clusters; // if -1, use headnode instead
int clusternums[MAX_ENT_CLUSTERS];
int headnode; // unused if num_clusters != -1
int areanum, areanum2;
//================================
int svflags;
vec3_t mins, maxs;
vec3_t absmin, absmax, size;
vec3_t fullmins, fullmaxs;
float fullradius;
vec3_t centroid;
solid_t solid;
int clipmask;
edict_t *owner;
// DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
// EXPECTS THE FIELDS IN THAT ORDER!
//================================
Entity *entity;
float freetime; // sv.time when the object was freed
float spawntime; // sv.time when the object was spawned
char entname[ 64 ];
edict_t *next;
edict_t *prev;
};
#include "vector.h"
#include "linklist.h"
#include "class.h"
//
// this structure is left intact through an entire game
// it should be initialized at dll load time, and read/written to
// the server.ssv file for savegames
//
class EXPORT_FROM_DLL game_locals_t : public Class
{
public:
CLASS_PROTOTYPE( game_locals_t );
gclient_t *clients; // [maxclients]
qboolean autosaved;
// can't store spawnpoint in level, because
// it would get overwritten by the savegame restore
str spawnpoint; // needed for coop respawns
// store latched cvars here that we want to get at often
int maxclients;
int maxentities;
int maxconsoles;
int maxsurfaces;
qboolean force_entnum;
int spawn_entnum;
// List of valid player models loaded from players global scriptfile
Container<str> ValidPlayerModels;
game_locals_t();
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
//
// this structure is cleared as each map is entered
// it is read/written to the level.sav file for savegames
//
class EXPORT_FROM_DLL level_locals_t : public Class
{
public:
CLASS_PROTOTYPE( level_locals_t );
int framenum;
float time;
str level_name; // the descriptive name (Outer Base, etc)
str mapname; // the server name (base1, etc)
str nextmap; // go here when fraglimit is hit
// used for cinematics
qboolean playerfrozen;
// used to prevent players from continuing failed games
qboolean missionfailed;
float missionfailedtime;
// intermission state
float intermissiontime; // time the intermission was started
int exitintermission;
edict_t *next_edict; // Used to keep track of the next edict to process in G_RunFrame
int total_secrets;
int found_secrets;
Entity *current_entity; // entity running from G_RunFrame
// FIXME - remove this later when it is passed in the event.
trace_t impact_trace;
int body_queue;
float earthquake;
qboolean clearsavegames;
qboolean cinematic;
qboolean no_jc;
// Blending color for water, light volumes,lava
Vector water_color;
Vector lightvolume_color;
Vector lava_color;
float water_alpha;
float lightvolume_alpha;
float lava_alpha;
qboolean airclamp;
qboolean training;
level_locals_t();
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
#include "g_main.h"
#include "listener.h"
#include "g_utils.h"
#include "g_spawn.h"
#include "g_phys.h"
#endif