2011-06-01 12:20:56 +00:00
// Copyright (C) 1999-2000 Id Software, Inc.
//
# include "../game/q_shared.h"
# include "tr_types.h"
# include "../game/bg_public.h"
# include "cg_public.h"
// The entire cgame module is unloaded and reloaded on each level change,
// so there is NO persistant data between levels on the client side.
// If you absolutely need something stored, it can either be kept
// by the server in the server stored userinfos, or stashed in a cvar.
//RPG-X | Phenix | 13/02/2005
# define N00bSoundCount 12
# define POWERUP_BLINKS 5
# define Q_FLASH_TIME 450
# define POWERUP_BLINK_TIME 1000
# define FADE_TIME 200
# define PULSE_TIME 200
# define DAMAGE_DEFLECT_TIME 100
# define DAMAGE_RETURN_TIME 400
# define DAMAGE_TIME 500
# define LAND_DEFLECT_TIME 150
# define LAND_RETURN_TIME 300
# define STEP_TIME 200
# define DUCK_TIME 100
# define PAIN_TWITCH_TIME 200
# define WEAPON_SELECT_TIME 1400
# define ITEM_SCALEUP_TIME 1000
// Zoom vars
# define ZOOM_TIME 150
# define MAX_ZOOM_FOV 5.0f
# define ZOOM_IN_TIME 1000.0f
# define ZOOM_OUT_TIME 100.0f
# define ZOOM_START_PERCENT 0.3f
# define ITEM_BLOB_TIME 200
# define MUZZLE_FLASH_TIME 20
# define SINK_TIME 1000 // time for fragments to sink into ground before going away
# define ATTACKER_HEAD_TIME 10000
# define REWARD_TIME 3000
# define PULSE_SCALE 1.5 // amount to scale up the icons when activating
# define MAX_STEP_CHANGE 32
# define MAX_VERTS_ON_POLY 10
# define MAX_MARK_POLYS 256
# define STAT_MINUS 10 // num frame for '-' stats digit
# define ICON_SIZE 48
# define CHAR_WIDTH 32
# define CHAR_HEIGHT 48
# define TEXT_ICON_SPACE 4
# define TEAMCHAT_WIDTH 80
# define TEAMCHAT_HEIGHT 8
// very large characters
# define GIANT_WIDTH 32
# define GIANT_HEIGHT 48
# define NUM_FONT_BIG 1
# define NUM_FONT_SMALL 2
# define NUM_CROSSHAIRS 12
# define MAX_OBJECTIVES 16
# define MAX_OBJ_LENGTH 1024
# define MAX_OBJ_TEXT_LENGTH (MAX_OBJECTIVES*MAX_OBJ_LENGTH)
//beam defines used to calc player fading in beam sequence
# define PLAYER_BEAM_FADE 1500 //RPG-X: TiM - Time index for when player model fades in/out in a beam sequence
# define PLAYER_BEAM_FADETIME 1000 //Length of time the player will be fading out
typedef enum {
FOOTSTEP_NORMAL ,
FOOTSTEP_BORG ,
FOOTSTEP_REAVER ,
FOOTSTEP_SPECIES ,
FOOTSTEP_WARBOT ,
FOOTSTEP_METAL ,
FOOTSTEP_SPLASH ,
FOOTSTEP_BOOT ,
FOOTSTEP_GRASS ,
FOOTSTEP_GRAVEL ,
FOOTSTEP_SNOW ,
FOOTSTEP_WOOD ,
FOOTSTEP_TOTAL
} footstep_t ;
//RPG-X | GSIO01 | 20/05/2009:
typedef enum {
LANDSOUND_NORMAL ,
LANDSOUND_METAL ,
LANDSOUND_GRASS ,
LANDSOUND_GRAVEL ,
LANDSOUND_SNOW ,
LANDSOUND_WOOD ,
LANDSOUND_TOTAL
} landsound_t ;
// For the holodoor intro
# define TIME_INIT 100
# define TIME_DOOR_START 1000
# define TIME_DOOR_DUR (TIME_FADE_START-TIME_DOOR_START)
# define TIME_FADE_START 3000
# define TIME_FADE_DUR (TIME_INTRO-TIME_FADE_START)
/*==============================================
TiM - Since the majority of the body models use the same anim config ,
I ' m going to adapt the same logic from JKA where common animations
are stored in a global array and then whenever a new model is called ,
a check is done to see we already have the anims parsed , rather than
parse them allll over again . Might shave a few seconds off of loadtime
and put them towards more precious roleplaying . : )
Hrm , they ' ll also need to be parsed CG and G for the emote system to fully
work .
*/
typedef struct animsList_s {
char animFileRoute [ MAX_QPATH ] ;
animation_t animations [ MAX_ANIMATIONS ] ;
} animsList_t ;
//TiM: Borrowed from EF SP
//Data struct for necessary dynamic animation sound effects.
//Useful for proper footstep sync and emote-based sound FX.
# define MAX_ANIM_SOUNDS 64
# define MAX_RANDOM_ANIMSOUNDS 8
typedef struct animsounds_s
{
int keyFrame ; //Frame to play sound on
int soundIndex [ MAX_RANDOM_ANIMSOUNDS ] ; //sound file to play - FIXME: should be an index, handle random some other way?
int numRandomAnimSounds ; //string variable min for va("...%d.wav", Q_irand(lowestVa, highestVa))
int probability ; //chance sound will play, zero value will not run this test (0 = 100% basically)
} animsounds_t ;
typedef struct animsSndList_s {
char animSndFileRoute [ MAX_QPATH ] ;
animsounds_t upperAnimSounds [ MAX_ANIM_SOUNDS ] ;
animsounds_t lowerAnimSounds [ MAX_ANIM_SOUNDS ] ;
} animsSndList_t ;
//TiM : JKA had 32, but since each potential char could have a
//dif anim list in EF, I'll allocate enough space if need be.
//Hopefully, if I've done my job, we won't actually ever exceed 2. :)
extern animsSndList_t cg_animsSndList [ MAX_CLIENTS ] ;
extern int cg_numSndAnims ;
extern animsList_t cg_animsList [ MAX_CLIENTS ] ;
extern int cg_numAnims ;
//Unlike EF SP, the anim and sound configs here are kept separately.
//I plan to make the animsounds config into a parameter in the model
//script file. It won't use up more resources, and it'll give modders additional
//flexibilty if they wish
//================================================
//Struct to hold tricorder info strings
//typedef char tricString_t[MAX_TOKEN_CHARS];
/*=================================================
TiM : Rank Structs
The data in these structs are necessary for each seperate
rank in order to be loaded and displayed in the client
base .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
//CLR_GREY, //Grey is only used if there is no real class or rank. So it's default
typedef enum {
CLR_RED ,
CLR_GOLD ,
CLR_TEAL ,
CLR_GREEN ,
MAX_COLORS
} rankColor_t ;
//Data needed for each rank entry in the TAB menu
typedef struct {
float w ;
float h ;
int s1 ;
int t1 ;
int s2 ;
int t2 ;
int gWidth ;
int gHeight ;
qhandle_t graphic ;
} rankMenuData_t ;
/*Data relating to the loadage
and displayage of rank pips
on player models . I ' ve set it up
this way so models are cached AS THEY ARE USED .
The point being to limit the number of shaders
we ' ll actually need cached at any given point .
That MAX_SHADERS error ticks me off . . . T_T
*/
typedef struct {
char boltModelPath [ MAX_QPATH ] ;
qhandle_t boltModel ;
char boltShaderPath [ MAX_QPATH ] ;
qhandle_t boltShader ;
qboolean triedToLoad ;
qboolean admiralRank ;
} rankModelData_t ;
//POSSIBLE FIXME: A string value for each rank may be needed at some stage... not sure
//Yeah... we need the formal name for the tricorder scanner.
//And we'll also need the consoleName so we can list the possible choices if needed.
typedef struct {
char consoleName [ MAX_QPATH ] ;
char formalName [ MAX_QPATH ] ;
rankMenuData_t rankMenuData [ MAX_COLORS ] ;
rankModelData_t rankModelData ;
} ranksData_t ;
typedef struct {
rankMenuData_t rankMenuData ;
rankModelData_t rankModelData ;
} defaultRankData_t ;
# define MAX_CROSSHAIRS 15
//=================================================
//TiM: Importable - Custom Crosshair Data
typedef struct {
qboolean noDraw ;
vec4_t color ;
int s1 ;
int t1 ;
int s2 ;
int t2 ;
//qhandle_t graphic;
} crosshairsData_t ;
//=================================================
typedef struct {
char formalName [ 25 ] ;
int radarColor [ 3 ] ;
int iconColor ;
qboolean showRanks ;
qboolean isMedic ;
qboolean isBorg ;
} cg_classData_t ;
// player entities need to track more information
// than any other type of entity.
// note that not every player entity is a client entity,
// because corpses after respawn are outside the normal
// client numbering range
// when changing animation, set animationTime to frameTime + lerping time
// The current lerp will finish out, then it will lerp to the new animation
typedef struct {
int oldFrame ;
int oldFrameTime ; // time when ->oldFrame was exactly on
int frame ;
int frameTime ; // time when ->frame will be exactly on
float backlerp ;
float yawAngle ;
qboolean yawing ;
float pitchAngle ;
qboolean pitching ;
//TiM
float rollAngle ;
qboolean rolling ;
//eTiM
int animationNumber ; // may include ANIM_TOGGLEBIT
animation_t * animation ;
int animationTime ; // time when the first frame of the animation will be exact
} lerpFrame_t ;
typedef struct {
lerpFrame_t head , legs , torso ;
int painTime ;
int painDirection ; // flip from 0 to 1
qboolean empty ;
int lightningFiring ;
// machinegun spinning
float barrelAngle ;
int barrelTime ;
qboolean barrelSpinning ;
} playerEntity_t ;
//=================================================
//TiM - struct containing all the necessary data required
//for the SP style transporter. Due to really whacky design on id's behalf,
//this data has to be global enough for players AND weapons
//to accept it. :P
typedef struct {
//RPG-X | TiM - Time when a transport powerup is detected.
//I originally only had one variable, but found trying to track two
//different powerups with one value was causing some undesired render effects.
//This method is far better in the fact it means much cleaner render effects,
//and also if there is a delay in the server-side teleport function, the visual FX
//on this side will still remain in sync. :)
//int beamTime;
qboolean beamInDetected ;
float beamAlpha ; //put in here so it's in scope for me to pass it to the weapons renderer
int beamTimeParam ;
} beamData_t ;
//=================================================
// centity_t have a direct corespondence with gentity_t in the game, but
// only the entityState_t is directly communicated to the cgame
typedef struct centity_s {
entityState_t currentState ; // from cg.frame
entityState_t nextState ; // from cg.nextFrame, if available
qboolean interpolate ; // true if next is valid to interpolate to
qboolean currentValid ; // true if cg.frame holds this entity
int muzzleFlashTime ; // move to playerEntity?
int previousEvent ;
int thinkFlag ;
int trailTime ; // so missile trails can handle dropped initial packets
int miscTime ;
vec3_t damageAngles ;
int damageTime ;
int deathTime ;
playerEntity_t pe ;
beamData_t beamData ;
int cloakTime ; //time index we started cloaking, for the Q-Flash
int decloakTime ;
qboolean wasCloaked ;
// Unused
int errorTime ; // decay the error from this time
// vec3_t errorOrigin;
// vec3_t errorAngles;
qboolean extrapolated ; // false if origin / angles is an interpolation
vec3_t rawOrigin ;
vec3_t rawAngles ;
vec3_t beamEnd ;
// exact interpolated position of entity on this frame
vec3_t lerpOrigin ;
vec3_t lerpAngles ;
int turboTime ;
//qboolean unclampAngles; //TiM - Unstor player clamp angles
qboolean clampAngles ;
} centity_t ;
//TiM - stores the time index of each client to be used when they enter a turbolift.
//it's been placed here to ensure no changes will be made to it, unlike the cent structs
extern int cg_liftEnts [ MAX_CLIENTS ] ;
//======================================================================
// local entities are created as a result of events or predicted actions,
// and live independantly from all server transmitted entities
typedef struct markPoly_s {
struct markPoly_s * prevMark , * nextMark ;
int time ;
qhandle_t markShader ;
qboolean alphaFade ; // fade alpha instead of rgb
float color [ 4 ] ;
poly_t poly ;
polyVert_t verts [ MAX_VERTS_ON_POLY ] ;
} markPoly_t ;
typedef enum {
LE_MARK ,
LE_EXPLOSION ,
LE_SPRITE_EXPLOSION ,
LE_MOVE_SCALE_FADE ,
LE_FALL_SCALE_FADE ,
LE_FADE_RGB ,
LE_SCALE_FADE ,
LE_SCALE_FADE_SPRITE ,
LE_SCALE_SINE , //RPG-X: TiM
LE_LINE ,
LE_LINE2 ,
LE_OLINE ,
LE_TRAIL ,
LE_VIEWSPRITE ,
LE_BEZIER ,
LE_QUAD ,
LE_CYLINDER ,
LE_ELECTRICITY ,
LE_PARTICLE ,
LE_SPAWNER ,
LE_FRAGMENT
} leType_t ;
typedef enum {
LEF_NONE = 0x0000 , // Use for "no flag"
LEF_PUFF_DONT_SCALE = 0x0001 , // do not scale size over time
LEF_TUMBLE = 0x0002 , // tumble over time, used for ejecting shells
LEF_MOVE = 0x0004 , // Sprites and models and trails use this when they use velocity
LEF_USE_COLLISION = 0x0008 , // Sprites, models and trails use this when they want to collide and bounce.
LEF_ONE_FRAME = 0x0010 , // One frame only is to be shown of the entity.
LEF_ONE_FRAME_DONE = 0x0020 , // This bit is set AFTER the one frame is shown.
LEF_FADE_RGB = 0x0040 , // Force fading through color.
LEF_SINE_SCALE = 0x0080 , // TiM-Used for non-linear ratio calcs
LEF_REVERSE_SCALE = 0x0100 // TiM-Make the scale decrease instead of increase
} leFlag_t ;
typedef enum {
LEMT_NONE ,
} leMarkType_t ; // fragment local entities can leave marks on walls
typedef struct localEntity_s {
struct localEntity_s * prev , * next ;
leType_t leType ;
int leFlags ;
int startTime ;
int endTime ;
float lifeRate ; // 1.0 / (endTime - startTime)
trajectory_t pos ;
trajectory_t angles ;
float bounceFactor ; // 0.0 = no bounce, 1.0 = perfect
float color [ 4 ] ;
float frameRate ;
int numFrames ;
// float radius;
// float dradius;
// float length;
// float dlength;
float alpha ;
float dalpha ;
float shaderRate ;
int numShaders ;
qhandle_t * leShaders ;
float light ;
vec3_t lightColor ;
leMarkType_t leMarkType ;
union {
struct {
float radius ;
float dradius ;
vec3_t startRGB ;
vec3_t dRGB ;
} sprite ;
struct {
float width ;
float dwidth ;
float length ;
float dlength ;
vec3_t startRGB ;
vec3_t dRGB ;
} trail ;
struct {
float width ;
float dwidth ;
// Below are bezier specific.
vec3_t control1 ; // initial position of control points
vec3_t control2 ;
vec3_t control1_velocity ; // initial velocity of control points
vec3_t control2_velocity ;
vec3_t control1_acceleration ; // constant acceleration of control points
vec3_t control2_acceleration ;
} line ;
struct {
float width ;
float dwidth ;
float width2 ;
float dwidth2 ;
vec3_t startRGB ;
vec3_t dRGB ;
} line2 ;
struct {
float width ;
float dwidth ;
float width2 ;
float dwidth2 ;
float height ;
float dheight ;
} cylinder ;
struct {
float width ;
float dwidth ;
} electricity ;
struct
{
// fight the power! open and close brackets in the same column!
float radius ;
float dradius ;
qboolean ( * thinkFn ) ( struct localEntity_s * le ) ;
vec3_t dir ; // magnitude is 1, but this is oldpos - newpos right before the
//particle is sent to the renderer
// may want to add something like particle::localEntity_s *le (for the particle's think fn)
} particle ;
struct
{
qboolean dontDie ;
vec3_t dir ;
float variance ;
int delay ;
int nextthink ;
qboolean ( * thinkFn ) ( struct localEntity_s * le ) ;
int data1 ;
int data2 ;
} spawner ;
struct
{
float radius ;
} fragment ;
} data ;
refEntity_t refEntity ;
vec3_t addOrigin ;
} localEntity_t ;
// kef -- there may well be a cleaner way of doing this, but the think functions for particles
//will need access to these CG_AddXXXXXX functions, so...
void CG_AddMoveScaleFade ( localEntity_t * le ) ;
void CG_AddScaleFade ( localEntity_t * le ) ;
void CG_AddFallScaleFade ( localEntity_t * le ) ;
void CG_AddExplosion ( localEntity_t * ex ) ;
void CG_AddSpriteExplosion ( localEntity_t * le ) ;
void CG_AddScaleFadeSprite ( localEntity_t * le ) ;
void CG_AddQuad ( localEntity_t * le ) ;
void CG_AddLine ( localEntity_t * le ) ;
void CG_AddOLine ( localEntity_t * le ) ;
void CG_AddLine2 ( localEntity_t * le ) ;
void CG_AddTrail ( localEntity_t * le ) ;
void CG_AddViewSprite ( localEntity_t * le ) ;
void CG_AddBezier ( localEntity_t * le ) ;
void CG_AddCylinder ( localEntity_t * le ) ;
void CG_AddElectricity ( localEntity_t * le ) ;
// IMPORTANT!! Don't make CG_AddParticle or CG_AddSpawner available here to prevent unpalateable recursion possibilities
//
//======================================================================
typedef struct {
int client ;
int score ;
int ping ;
int time ;
int scoreFlags ;
// int faveTarget;
// int faveTargetKills; // # of times you killed fave target
int worstEnemy ;
int worstEnemyKills ; // # of times worst Enemy Killed you
int faveWeapon ; // your favorite weapon
int killedCnt ; // # of times you were killed
} score_t ;
//**********************************************************
//RPG-X Player Model Additional Data
//This is the struct where all the data loaded from .model files
//is parsed to. From there, it can be plugged straight into
//the original model loading pipeline.... I think
//**********************************************************
# define MAX_BOLTONS 10
# define MAX_TALK_SKINS 4
typedef enum {
BOLTON_HEAD = 0 ,
BOLTON_TORSO ,
BOLTON_LEGS ,
BOLTON_MAX
} boltonLoc_t ;
//min and max value for any timed events
typedef struct {
int nextTime ;
int minSeconds ;
int maxSeconds ;
} charSecs_t ;
typedef struct {
int modelBase ;
char tagName [ MAX_QPATH ] ;
qhandle_t tagModel ;
} boltonTags_t ;
// each client has an associated clientInfo_t
// that contains media references necessary to present the
// client model and other color coded effects
// this is regenerated each time a client's configstring changes,
// usually as a result of a userinfo (name, model, etc) change
# define MAX_CUSTOM_SOUNDS 32
typedef struct {
qboolean infoValid ;
char name [ MAX_QPATH ] ;
team_t team ;
pclass_t pClass ;
int botSkill ; // 0 = not bot, 1-5 = bot
vec3_t color ;
int score ; // updated by score servercmds
int location ; // location index for team mode
int health ; // you only get this info about your teammates
int armor ;
int curWeapon ;
int handicap ;
int wins , losses ; // in tourney mode
int powerups ; // so can display quad/flag status
qboolean eliminated ; // so can display quad/flag status
qboolean hasRanks ; //displays ranks on model or not
// when clientinfo is changed, the loading of models/skins/sounds
// can be deferred until you are dead, to prevent hitches in
// gameplay
char charName [ MAX_QPATH ] ;
char modelName [ MAX_QPATH ] ;
char skinName [ MAX_QPATH ] ;
qboolean deferred ;
vec3_t headOffset ; // move head in icon views
footstep_t footsteps ;
gender_t gender ; // from model
char soundPath [ MAX_QPATH ] ; //from model
qhandle_t legsModel ;
qhandle_t legsSkin ;
qhandle_t torsoModel ;
qhandle_t torsoSkin ;
qhandle_t headModel ;
qhandle_t headSkin ;
//int numBoltOns;
boltonTags_t boltonTags [ MAX_BOLTONS ] ;
//TiM - Additional Parameters
qhandle_t headSkinBlink ;
//frowning
qhandle_t headSkinFrown ;
qhandle_t headSkinFrownBlink ;
charSecs_t headBlinkTime ;
//charSecs_t headFrownTime;
//TiM
qhandle_t headSkinTalk [ MAX_TALK_SKINS ] ;
int nextTalkTime ;
int currentTalkSkin ;
int nextTalkAngle ; //Time index until the new talk angles are calculated
int talkDifferential ; //Length of time between changes, without cg.time added
vec3_t talkAngles ; //decimal values to offset the head orientation
int headDebounceTime ; //Time to spend checking for talking checks
qhandle_t holsterModel ; //RPG-X : TiM
//--
//char race[256];
qhandle_t modelIcon ;
//TiM - Whoa... this thing is pretty huge now thanks to the 50+ anims I added :/
//animation_t animations[MAX_ANIMATIONS];
//animation_t *animations;
int animIndex ; //index to the array cell with the anim data we want in it. :)
int animSndIndex ; //index to the array cell where the sound data for certain anims is kept.
sfxHandle_t sounds [ MAX_CUSTOM_SOUNDS ] ;
int numTaunts ;
qboolean animsFlushed ;
//Player Model System Custom Parameters
//TiM
char age [ MAX_NAME_LENGTH ] ;
float height ;
float weight ;
char race [ MAX_NAME_LENGTH ] ;
//--
int modelOffset ;
qboolean isAdmin ; //local store to determine if client is an admin or not (for both class and login)
qboolean isHazardModel ; //yeh lame lol
int silentCloak ;
} clientInfo_t ;
// each WP_* weapon enum has an associated weaponInfo_t
// that contains media references necessary to present the
// weapon and its effects
typedef struct weaponInfo_s {
qboolean registered ;
gitem_t * item ;
qhandle_t handsModel ; // the hands don't actually draw, they just position the weapon
qhandle_t weaponModel ; // this is the pickup model
qhandle_t viewModel ; // this is the in-view model used by the player
qhandle_t barrelModel [ 4 ] ; // Trek weapons have lots of barrels
qhandle_t flashModel ;
vec3_t weaponMidpoint ; // so it will rotate centered instead of by tag
vec3_t flashDlightColor ;
sfxHandle_t flashSound ; // fast firing weapons randomly choose
sfxHandle_t altFlashSnd ;
sfxHandle_t stopSound ;
sfxHandle_t altStopSound ;
sfxHandle_t firingSound ;
sfxHandle_t altFiringSound ;
// sfxHandle_t missileSound;
sfxHandle_t alt_missileSound ;
sfxHandle_t mainHitSound ;
sfxHandle_t altHitSound ;
qhandle_t weaponIcon ;
// qhandle_t ammoModel;
qhandle_t missileModel ;
void ( * missileTrailFunc ) ( centity_t * , const struct weaponInfo_s * wi ) ;
float missileDlight ;
vec3_t missileDlightColor ;
qhandle_t alt_missileModel ;
void ( * alt_missileTrailFunc ) ( centity_t * , const struct weaponInfo_s * wi ) ;
float alt_missileDlight ;
qboolean isAnimSndBased ; //TiM - play this sound, only if the player has no anim sound cfg.
} weaponInfo_t ;
// each IT_* item has an associated itemInfo_t
// that constains media references necessary to present the
// item and its effects
typedef struct {
qboolean registered ;
qhandle_t model ;
qhandle_t icon ;
} itemInfo_t ;
typedef struct {
int itemNum ;
} powerupInfo_t ;
typedef struct {
char text [ MAX_OBJ_LENGTH ] ;
char abridgedText [ MAX_OBJ_LENGTH ] ;
qboolean complete ;
} objective_t ;
//TiM - Data needed for FPS Body CVAR
typedef struct {
int anim ;
int offset ;
float sizeOffset ;
} fpsBody_t ;
//======================================================================
// all cg.stepTime, cg.duckTime, cg.landTime, etc are set to cg.time when the action
// occurs, and they will have visible effects for #define STEP_TIME or whatever msec after
typedef struct {
int clientFrame ; // incremented each frame
qboolean demoPlayback ;
qboolean levelShot ; // taking a level menu screenshot
int deferredPlayerLoading ;
qboolean loading ; // don't defer players at initial startup
qboolean intermissionStarted ; // don't play voice rewards, because game will end shortly
// there are only one or two snapshot_t that are relevent at a time
int latestSnapshotNum ; // the number of snapshots the client system has received
int latestSnapshotTime ; // the time from latestSnapshotNum, so we don't need to read the snapshot yet
snapshot_t * snap ; // cg.snap->serverTime <= cg.time
snapshot_t * nextSnap ; // cg.nextSnap->serverTime > cg.time, or NULL
snapshot_t activeSnapshots [ 2 ] ;
float frameInterpolation ; // (float)( cg.time - cg.frame->serverTime ) / (cg.nextFrame->serverTime - cg.frame->serverTime)
qboolean thisFrameTeleport ;
qboolean nextFrameTeleport ;
int frametime ; // cg.time - cg.oldTime
int time ; // this is the time value that the client
// is rendering at.
int oldTime ; // time at last frame, used for missile trails and prediction checking
int physicsTime ; // either cg.snap->time or cg.nextSnap->time
int timelimitWarnings ; // 5 min, 1 min, overtime
int fraglimitWarnings ;
qboolean renderingThirdPerson ; // during deaths, chasecams, etc
// prediction state
qboolean hyperspace ; // true if prediction has hit a trigger_teleport
playerState_t predictedPlayerState ;
centity_t predictedPlayerEntity ;
qboolean validPPS ; // clear until the first call to CG_PredictPlayerState
int predictedErrorTime ;
vec3_t predictedError ;
float stepChange ; // for stair up smoothing
int stepTime ;
float duckChange ; // for duck viewheight smoothing
int duckTime ;
float landChange ; // for landing hard
int landTime ;
// input state sent to server
int weaponSelect ;
// auto rotating items
vec3_t autoAngles ;
vec3_t autoAxis [ 3 ] ;
vec3_t autoAnglesFast ;
vec3_t autoAxisFast [ 3 ] ;
// view rendering
refdef_t refdef ;
vec3_t refdefViewAngles ; // will be converted to refdef.viewaxis
// zoom key
qboolean zoomed ;
qboolean zoomLocked ;
int zoomTime ;
float zoomSensitivity ;
// information screen text during loading
char infoScreenText [ MAX_STRING_CHARS ] ;
// scoreboard
int scoresRequestTime ;
int numScores ;
int teamScores [ 2 ] ;
score_t scores [ MAX_CLIENTS ] ;
qboolean showScores ;
int scoreFadeTime ;
char killerName [ MAX_NAME_LENGTH ] ;
// centerprinting
int centerPrintTime ;
int centerPrintCharWidth ;
int centerPrintY ;
char centerPrint [ 1024 ] ;
int centerPrintLines ;
// low ammo warning state
int lowAmmoWarning ; // 1 = low, 2 = empty
// kill timers for carnage reward
int lastKillTime ;
// crosshair client ID
int crosshairClientNum ;
int crosshairClientTime ;
// powerup active flashing
int powerupActive ;
int powerupTime ;
// attacking player
int attackerTime ;
// reward medals
int rewardTime ;
int rewardCount ;
qhandle_t rewardShader ;
// warmup countdown
int warmup ;
int warmupCount ;
//==========================
int itemPickup ;
int itemPickupTime ;
int itemPickupBlendTime ; // the pulse around the crosshair is timed seperately
int weaponSelectTime ;
int weaponAnimation ;
int weaponAnimationTime ;
// blend blobs
float damageTime ;
float damageX , damageY , damageValue , damageShieldValue ;
// status bar head
//RPG-X | Phenix | 09/06/2005
// Raven commented this out!
float headYaw ;
float headEndPitch ;
float headEndYaw ;
int headEndTime ;
float headStartPitch ;
float headStartYaw ;
int headStartTime ;
int interfaceStartupTime ; // Timer for menu graphics
int interfaceStartupDone ; // True when menu is done starting up
// view movement
float v_dmg_time ;
float v_dmg_pitch ;
float v_dmg_roll ;
vec3_t kick_angles ; // weapon kicks
vec3_t kick_origin ;
// temp working variables for player view
float bobfracsin ;
int bobcycle ;
float xyspeed ;
//Shake information
float shake_intensity ;
int shake_duration ;
int shake_start ;
int shake_serverIndex ; //end time for the server so client-side shakes don't stop it
//TiM : RPG-X Shake Info To try and make it look better
int shake_nextLerp , shake_lastLerp ; //next cg.time value where a new random lerp value will be chosen (Updating per frame makes me motion sick due to its l33t jerkiness )
vec3_t shake_LerpAngle , shake_LerpOrigin ; //Relevant data to lerp to
vec3_t shake_LastAngle , shake_LastOrigin ;
// development tool
refEntity_t testModelEntity ;
char testModelName [ MAX_QPATH ] ;
qboolean testGun ;
int loadLCARSStage ;
int loadLCARScnt ;
qboolean showObjectives ;
int mod ; //method O' death
//RPG-X | Phenix | 08/06/2005
//RPG-X | TiM | 13/2/2006 - Moved here for standardisation
int adminMsgTime ;
char adminMsgMsg [ MAX_OBJ_LENGTH ] ;
//TiM : ThirdPersonZoom Booleans
//These are inserted into the thirdperson camera func
qboolean zoomedForward ;
qboolean zoomedBackward ;
qboolean zoomedLeft ;
qboolean zoomedRight ;
qboolean zoomedUp ;
qboolean zoomedDown ;
qboolean zoomAngleLeft ;
qboolean zoomAngleRight ;
qboolean zoomPitchDown ;
qboolean zoomPitchUp ;
//TiM - The body in FPS mode
fpsBody_t fpsBody ;
//TiM - A local boolean for the TPS view
qboolean thirdPersonNoLerp ;
2011-06-09 10:27:51 +00:00
// cinematics
int cinematicFade ;
2011-06-01 12:20:56 +00:00
} cg_t ;
typedef enum
{
MT_NONE = 0 ,
MT_METAL ,
MT_GLASS ,
MT_GLASS_METAL ,
MT_WOOD ,
MT_STONE ,
NUM_CHUNK_TYPES
} material_type_t ;
# define NUM_CHUNKS 6
// all of the model, shader, and sound references that are
// loaded at gamestate time are stored in cgMedia_t
// Other media that can be tied to clients, weapons, or items are
// stored in the clientInfo_t, itemInfo_t, weaponInfo_t, and powerupInfo_t
typedef struct {
qhandle_t charsetShader ;
qhandle_t charsetPropTiny ;
qhandle_t charsetProp ;
qhandle_t charsetPropBig ;
// qhandle_t charsetPropGlow;
qhandle_t charsetPropB ;
qhandle_t whiteShader ;
qhandle_t white2Shader ;
qhandle_t redFlagModel ;
qhandle_t blueFlagModel ;
qhandle_t redFlagShader [ 4 ] ;
qhandle_t blueFlagShader [ 4 ] ;
qhandle_t teamStatusBar ;
qhandle_t deferShader ;
//qhandle_t eliminatedShader;
// recently added Trek shaders
qhandle_t phaserShader ;
qhandle_t phaserEmptyShader ;
qhandle_t phaserAltShader ;
qhandle_t phaserAltEmptyShader ;
qhandle_t phaserMuzzleEmptyShader ;
qhandle_t testDetpackShader3 ;
qhandle_t testDetpackRingShader1 ;
qhandle_t testDetpackRingShader2 ;
qhandle_t testDetpackRingShader3 ;
qhandle_t testDetpackRingShader4 ;
qhandle_t testDetpackRingShader5 ;
qhandle_t testDetpackRingShader6 ;
qhandle_t detpackPlacedIcon ;
//qhandle_t dnBoltShader;
//qhandle_t stasisRingShader;
//qhandle_t stasisAltShader;
qhandle_t disruptorBolt ;
qhandle_t disruptorStreak ;
qhandle_t whiteRingShader ;
qhandle_t orangeRingShader ;
qhandle_t quantumExplosionShader ;
qhandle_t quantumFlashShader ;
//qhandle_t scavengerAltShader;
/*qhandle_t imodExplosionShader;
qhandle_t IMODShader ;
qhandle_t IMOD2Shader ;
qhandle_t altIMODShader ;
qhandle_t altIMOD2Shader ; */
qhandle_t prifleBeam ;
qhandle_t prifleImpactShader ;
qhandle_t compressionAltBeamShader ;
qhandle_t compressionAltBlastShader ;
qhandle_t prifleBolt ;
qhandle_t flashlightModel ;
qhandle_t disruptorBeam ;
//qhandle_t greenBurstShader;
//qhandle_t greenTrailShader;
//qhandle_t tetrionTrail2Shader;
//qhandle_t tetrionFlareShader;
qhandle_t borgFlareShader ;
//qhandle_t bulletmarksShader;
qhandle_t borgLightningShaders [ 4 ] ;
//qhandle_t bigBoomShader;
//qhandle_t scavExplosionFastShader;
//qhandle_t scavExplosionSlowShader;
qhandle_t sunnyFlareShader ;
qhandle_t scavMarkShader ;
qhandle_t sparkShader ;
qhandle_t spark2Shader ;
qhandle_t steamShader ;
qhandle_t fireShader ; //RPG-X | Marcin | 24/12/2008
qhandle_t fire2Shader ; //RPG-X | Marcin | 24/12/2008
qhandle_t fire3Shader ; //RPG-X | Marcin | 24/12/2008
qhandle_t smokeShader ;
//qhandle_t IMODMarkShader;
qhandle_t waterDropShader ;
qhandle_t oilDropShader ;
qhandle_t greenDropShader ;
//RPG-X | GSIO01 | 11/05/2009:
qhandle_t quantumGlow ;
qhandle_t quantumRays ;
qhandle_t photonGlow ;
qhandle_t photonRay ;
qhandle_t fireParticle ;
# ifdef XTRA
//RPG-X | GSIO01 | 08/03/2010:
qhandle_t snowShader ;
qhandle_t waterShader ;
# endif
qhandle_t explosionModel ;
qhandle_t nukeModel ;
//qhandle_t electricalExplosionFastShader;// These are used to have a bit of variation in the explosions
qhandle_t electricalExplosionSlowShader ;
qhandle_t surfaceExplosionShader ;
//qhandle_t purpleParticleShader;
qhandle_t blueParticleShader ;
qhandle_t ltblueParticleShader ;
qhandle_t yellowParticleShader ;
qhandle_t orangeParticleShader ;
qhandle_t dkorangeParticleShader ;
qhandle_t orangeTrailShader ;
qhandle_t compressionMarkShader ;
qhandle_t redFlareShader ;
qhandle_t redRingShader ;
qhandle_t redRing2Shader ;
qhandle_t bigShockShader ;
qhandle_t bolt2Shader ;
qhandle_t quantumRingShader ;
//qhandle_t holoOuchShader;
qhandle_t painBlobShader ;
qhandle_t painShieldBlobShader ;
//qhandle_t shieldBlobShader;
//qhandle_t halfShieldShader;
//qhandle_t holoDecoyShader;
qhandle_t trans1Shader ;
qhandle_t trans2Shader ;
//TiM - SP Transporter FX shaders
qhandle_t transport1Shader ;
qhandle_t transport2Shader ;
qhandle_t fountainShader ;
qhandle_t rippleShader ;
// end recently added Trek shaders
//qhandle_t teamRedShader;
//qhandle_t teamBlueShader;
//qhandle_t chatShader;
qhandle_t connectionShader ;
//qhandle_t selectShader;
//qhandle_t crosshairShader[NUM_CROSSHAIRS];
qhandle_t laserShader ; // LASER
qhandle_t lagometerShader ;
qhandle_t backTileShader ;
//qhandle_t noammoShader;
qhandle_t smokePuffRageProShader ;
qhandle_t waterBubbleShader ;
qhandle_t numberShaders [ 11 ] ;
qhandle_t smallnumberShaders [ 11 ] ;
qhandle_t shadowMarkShader ;
//qhandle_t botSkillShaders[5];
//TiM
//qhandle_t pClassShaders[NUM_PLAYER_CLASSES];
//qhandle_t borgIconShader;
//qhandle_t borgQueenIconShader;
//qhandle_t heroSpriteShader;
//-TiM
// Zoom
qhandle_t zoomMaskShader ;
qhandle_t zoomMask116Shader ;
qhandle_t zoomGlow116Shader ;
/*qhandle_t zoomBarShader;
qhandle_t zoomInsertShader ;
qhandle_t zoomArrowShader ;
qhandle_t ammoslider ; */
// wall mark shaders
qhandle_t wakeMarkShader ;
qhandle_t holeMarkShader ;
qhandle_t energyMarkShader ;
// powerup shaders
//qhandle_t quadShader;
//qhandle_t redQuadShader;
//qhandle_t quadWeaponShader;
//qhandle_t invisShader;
//qhandle_t regenShader;
//qhandle_t battleSuitShader;
//qhandle_t battleWeaponShader;
//qhandle_t hastePuffShader;
//qhandle_t flightPuffShader;
//qhandle_t seekerModel;
qhandle_t disruptorShader ;
qhandle_t explodeShellShader ;
qhandle_t quantumDisruptorShader ;
qhandle_t borgFullBodyShieldShader ;
qhandle_t transportShader ; //RPG-X : TiM - SP Transport Shader
qhandle_t transportKlingon ;
qhandle_t transportRomulan ;
qhandle_t transportCardassian ;
qhandle_t weaponPlaceholderShader ;
qhandle_t rezOutShader ;
qhandle_t electricBodyShader ;
//eyebeam/tripwire shaders
qhandle_t whiteLaserShader ;
qhandle_t borgEyeFlareShader ;
// weapon effect models
//qhandle_t ringFlashModel;
// weapon effect shaders
//qhandle_t bloodExplosionShader;
// special effects models
qhandle_t teleportEffectModel ;
qhandle_t teleportEffectShader ;
qhandle_t shieldActivateShaderBlue ;
//RPG-X START | GSIO01 | 09/05/2009
qhandle_t shieldActivateShaderBorg ;
qhandle_t shieldActivateShaderYellow ;
//RPG-Y END
//qhandle_t shieldDamageShaderBlue;
qhandle_t shieldActivateShaderRed ;
qhandle_t shieldDamageShaderRed ;
qhandle_t holoDoorModel ;
qhandle_t chunkModels [ NUM_CHUNK_TYPES ] [ NUM_CHUNKS ] ;
//RPG-X: RedTechie - Register Endcaps for scoreboard
qhandle_t scoreboardtopleft ;
qhandle_t scoreboardtopright ;
qhandle_t scoreboardbotleft ;
qhandle_t scoreboardbotright ;
//RPG-X: RedTechie - Register new healthbar
qhandle_t healthbigcurve ;
qhandle_t healthendcap ;
//TiM
qhandle_t healthSineWave ;
//RPG-X: RedTechie - Registered Cloak Sprite
qhandle_t cloakspriteShader ;
qhandle_t scoreboardEndcap ;
qhandle_t weaponbox ;
qhandle_t weaponbox2 ;
qhandle_t corner_12_24 ;
qhandle_t corner_8_16_b ;
qhandle_t weaponcap1 ;
qhandle_t weaponcap2 ;
// medals shown during gameplay
/*qhandle_t medalImpressive;
qhandle_t medalExcellent ;
qhandle_t medalFirstStrike ;
qhandle_t medalAce ;
qhandle_t medalExpert ;
qhandle_t medalMaster ;
qhandle_t medalChampion ; */
// Holodeck doors
//qhandle_t doorbox;
//RPG-X Mod
//qhandle_t rpgxlogo;
qhandle_t greenParticleShader ;
qhandle_t greenParticleStreakShader ;
//qhandle_t blueParticleStreakShader;
qhandle_t liteRedParticleStreakShader ;
qhandle_t liteRedParticleShader ;
qhandle_t probeBeam ;
qhandle_t probeDecal ;
qhandle_t regenDecal ;
//RPG-X : Weapon Holsters
qhandle_t phaserHolster ;
qhandle_t phaserHolsterInner ;
qhandle_t tricorderHolster ;
qhandle_t tricorderHolsterInner ;
//TR-116 Scope
qhandle_t tr116EyeScope ;
//SIMS module
qhandle_t simsModule ;
//EVA
qhandle_t evaInterior ;
qhandle_t medicalScanner ;
//hazard Helmet
qhandle_t hazardHelmet ;
// sounds
//sfxHandle_t quadSound;
//sfxHandle_t selectSound;
sfxHandle_t useNothingSound ;
//sfxHandle_t wearOffSound;
sfxHandle_t footsteps [ FOOTSTEP_TOTAL ] [ 4 ] ;
sfxHandle_t holoOpenSound ;
sfxHandle_t teleInSound ;
//sfxHandle_t teleOutSound;
//RPG-X
sfxHandle_t transportSound ;
//sfxHandle_t noAmmoSound;
sfxHandle_t respawnSound ;
sfxHandle_t talkSound ;
//sfxHandle_t landSound;
sfxHandle_t landSound [ LANDSOUND_TOTAL ] ; //RPG-X | GSIO01 | 20/05/2009
sfxHandle_t jumpPadSound ;
sfxHandle_t oneMinuteSound ;
sfxHandle_t fiveMinuteSound ;
sfxHandle_t suddenDeathSound ;
//sfxHandle_t threeFragSound;
//sfxHandle_t twoFragSound;
//sfxHandle_t oneFragSound;
//sfxHandle_t hitSound;
//sfxHandle_t shieldHitSound;
//sfxHandle_t shieldPierceSound;
//sfxHandle_t hitTeamSound;
//sfxHandle_t rewardImpressiveSound;
//sfxHandle_t rewardExcellentSound;
//sfxHandle_t rewardDeniedSound;
//sfxHandle_t rewardFirstStrikeSound;
//sfxHandle_t rewardAceSound;
//sfxHandle_t rewardExpertSound;
//sfxHandle_t rewardMasterSound;
//sfxHandle_t rewardChampionSound;
//sfxHandle_t takenLeadSound;
//sfxHandle_t tiedLeadSound;
//sfxHandle_t lostLeadSound;
sfxHandle_t watrInSound ;
sfxHandle_t watrOutSound ;
sfxHandle_t watrUnSound ;
//sfxHandle_t flightSound;
sfxHandle_t medkitSound ;
sfxHandle_t borgBeamInSound ;
// Interface sounds
sfxHandle_t interfaceSnd1 ;
// teamplay sounds
//sfxHandle_t redLeadsSound;
//sfxHandle_t blueLeadsSound;
//sfxHandle_t teamsTiedSound;
// tournament sounds
sfxHandle_t count3Sound ;
sfxHandle_t count2Sound ;
sfxHandle_t count1Sound ;
sfxHandle_t countFightSound ;
sfxHandle_t countPrepareSound ;
// CTF sounds
/*sfxHandle_t ctfStealSound;
sfxHandle_t ctfReturnSound ;
sfxHandle_t ctfScoreSound ;
sfxHandle_t ctfYouStealVoiceSound ;
sfxHandle_t ctfYouDroppedVoiceSound ;
sfxHandle_t ctfYouReturnVoiceSound ;
sfxHandle_t ctfYouScoreVoiceSound ;
sfxHandle_t ctfTheyStealVoiceSound ;
sfxHandle_t ctfTheyDroppedVoiceSound ;
sfxHandle_t ctfTheyReturnVoiceSound ;
sfxHandle_t ctfTheyScoreVoiceSound ; */
//
// trek sounds
//
sfxHandle_t envSparkSound1 ;
sfxHandle_t envSparkSound2 ;
sfxHandle_t envSparkSound3 ;
sfxHandle_t defaultPickupSound ;
sfxHandle_t grenadeAltStickSound ;
sfxHandle_t grenadeBounceSound1 ;
sfxHandle_t grenadeBounceSound2 ;
sfxHandle_t grenadeExplodeSound ;
//sfxHandle_t tetrionRicochetSound1;
//sfxHandle_t tetrionRicochetSound2;
//sfxHandle_t tetrionRicochetSound3;
sfxHandle_t invulnoProtectSound ;
//sfxHandle_t regenSound;
//sfxHandle_t poweruprespawnSound;
sfxHandle_t disintegrateSound ;
sfxHandle_t disintegrate2Sound ;
sfxHandle_t playerExplodeSound ;
sfxHandle_t waterDropSound1 ;
sfxHandle_t waterDropSound2 ;
sfxHandle_t waterDropSound3 ;
sfxHandle_t holoInitSound ;
sfxHandle_t holoDoorSound ;
sfxHandle_t holoFadeSound ;
sfxHandle_t phaserEmptySound ;
sfxHandle_t quantumBoom ;
//RPG-X: RedTechie - Better explo sounds for glauncher
sfxHandle_t grenadeAltExplodeSnd ;
//RPG-X: RedTechie - Shake command sound
sfxHandle_t ShakeSound ;
//RPG-X | Phenix | 13/02/2005
sfxHandle_t N00bSound [ N00bSoundCount ] ;
//RPG-X | Phenix | 08/06/2005
sfxHandle_t AdminMsgSound ;
//RPG-X | TiM
sfxHandle_t splatSound ;
//RPG-X | TiM
sfxHandle_t tedTextSound ;
// Zoom
sfxHandle_t zoomStart ;
sfxHandle_t zoomStart116 ;
sfxHandle_t zoomLoop ;
sfxHandle_t zoomEnd ;
sfxHandle_t zoomEnd116 ;
sfxHandle_t tr116Chirp ;
sfxHandle_t tr116Whir ;
// Chunk sounds
sfxHandle_t metalChunkSound ;
sfxHandle_t glassChunkSound ;
sfxHandle_t woodChunkSound ;
sfxHandle_t stoneChunkSound ;
//TiM : Splosion sounds
sfxHandle_t surfaceExpSound [ 3 ] ;
sfxHandle_t electricExpSound [ 3 ] ;
sfxHandle_t bigSurfExpSound ;
//TiM - Q Flash sound
sfxHandle_t qFlash ;
qhandle_t loading1 ;
qhandle_t loading2 ;
qhandle_t loading3 ;
qhandle_t loading4 ;
qhandle_t loading5 ;
qhandle_t loading6 ;
qhandle_t loading7 ;
qhandle_t loading8 ;
qhandle_t loading9 ;
qhandle_t loadingcircle ;
qhandle_t loadingquarter ;
qhandle_t loadingcorner ;
qhandle_t loadingtrim ;
qhandle_t circle ;
qhandle_t circle2 ;
qhandle_t corner_12_18 ;
qhandle_t halfroundr_22 ;
qhandle_t corner_ul_20_30 ;
qhandle_t corner_ll_8_30 ;
//TiM - OPTIMIZATION:
//Used 2 API functions to cut down the
//shader usage on this thing significantly ^_^
qhandle_t radarShader ;
/*qhandle_t rd_up;
qhandle_t rd_down ;
qhandle_t rd_level ;
qhandle_t rd_red_up ;
qhandle_t rd_red_down ;
qhandle_t rd_red_level ;
qhandle_t rd_blue_up ;
qhandle_t rd_blue_down ;
qhandle_t rd_blue_level ;
qhandle_t rd_white_up ;
qhandle_t rd_white_down ;
qhandle_t rd_white_level ;
qhandle_t rd_teal_up ;
qhandle_t rd_teal_down ;
qhandle_t rd_teal_level ;
qhandle_t rd_black_up ;
qhandle_t rd_black_down ;
qhandle_t rd_black_level ;
qhandle_t rd_injured_up ;
qhandle_t rd_injured_down ; */
qhandle_t rd_injured_level ;
qhandle_t radarMain ;
//RPG-X (J2J) Rank Images for Score Board (Arrays for each class type)
//TiM: *shudder* There was a better way!
/*qhandle_t ri_Civ;
qhandle_t ri_Crewman [ 4 ] ;
qhandle_t ri_Cadet1 [ 4 ] ;
qhandle_t ri_Cadet2 [ 4 ] ;
qhandle_t ri_Cadet3 [ 4 ] ;
qhandle_t ri_Cadet4 [ 4 ] ;
qhandle_t ri_Ensign [ 4 ] ;
qhandle_t ri_Ltjg [ 4 ] ;
qhandle_t ri_Lt [ 4 ] ;
qhandle_t ri_Ltcmdr [ 4 ] ;
qhandle_t ri_Cmdr [ 4 ] ;
qhandle_t ri_Capt [ 4 ] ;
qhandle_t ri_Cmmdr [ 4 ] ;
qhandle_t ri_Admr2 [ 4 ] ;
qhandle_t ri_Admr3 [ 4 ] ;
qhandle_t ri_Admr4 [ 4 ] ;
qhandle_t ri_Admr5 [ 4 ] ; */
//RPG-X: J2J - This is for sharky's crosshiar for each weapon.
//TiM: hrmmmm..... O_o
//qhandle_t crosshair[15];
qhandle_t crosshairSheet ;
//TiM : LensFlare Parts
qhandle_t flareCore ;
qhandle_t flareStreak ;
qhandle_t flareChroma ;
qhandle_t flareRadial ;
qhandle_t flareStraight ;
qhandle_t flareInverseRad ;
qhandle_t flareHaze ;
qhandle_t orangeStarShader ;
//Q Flash sprite
qhandle_t qFlashSprite ;
} cgMedia_t ;
// The client game static (cgs) structure hold everything
// loaded or calculated from the gamestate. It will NOT
// be cleared when a tournement restart is done, allowing
// all clients to begin playing instantly
typedef struct {
gameState_t gameState ; // gamestate from server
glconfig_t glconfig ; // rendering configuration
float screenXScale ; // derived from glconfig
float screenYScale ;
float screenXBias ;
int serverCommandSequence ; // reliable command stream counter
int processedSnapshotNum ; // the number of snapshots cgame has requested
qboolean localServer ; // detected on startup by checking sv_running
// parsed from serverinfo
gametype_t gametype ;
qboolean pModAssimilation ;
qboolean pModDisintegration ;
qboolean pModActionHero ;
qboolean pModSpecialties ;
qboolean pModElimination ;
int dmflags ;
int teamflags ;
int fraglimit ;
int capturelimit ;
int timelimit ;
int maxclients ;
char mapname [ MAX_QPATH ] ;
qboolean ForceClassColor ;
char rankSet [ MAX_QPATH ] ;
char classSet [ MAX_QPATH ] ;
int voteTime ;
int voteYes ;
int voteNo ;
qboolean voteModified ; // beep whenever changed
char voteString [ MAX_STRING_TOKENS ] ;
int levelStartTime ;
int scores1 , scores2 ; // from configstrings
int redflag , blueflag ; // flag status from configstrings
//
// locally derived information from gamestate
//
qhandle_t gameModels [ MAX_MODELS ] ;
// qhandle_t useableModels[HI_NUM_HOLDABLE];
sfxHandle_t gameSounds [ MAX_SOUNDS ] ;
int numInlineModels ;
qhandle_t inlineDrawModel [ MAX_MODELS ] ;
vec3_t inlineModelMidpoints [ MAX_MODELS ] ;
clientInfo_t clientinfo [ MAX_CLIENTS ] ;
// teamchat width is *3 because of embedded color codes
char teamChatMsgs [ TEAMCHAT_HEIGHT ] [ TEAMCHAT_WIDTH * 3 + 1 ] ;
int teamChatMsgTimes [ TEAMCHAT_HEIGHT ] ;
int teamChatPos ;
int teamLastChatPos ;
// media
cgMedia_t media ;
//TiM: ranks data
defaultRankData_t defaultRankData ;
ranksData_t ranksData [ MAX_RANKS ] ;
//TiM: crosshair data
crosshairsData_t crosshairsData [ MAX_CROSSHAIRS ] ;
//decoy memory spaces
clientInfo_t decoyInfo [ MAX_DECOYS ] ;
//During game load, check to see if we have any locations
//so we may edit the scoreboard to account for them
qboolean locations ;
//TiM - static class data
cg_classData_t classData [ MAX_CLASSES ] ;
//objectives
objective_t objectives [ MAX_OBJECTIVES ] ;
//widescreen variables
widescreen_t widescreen ;
//scannable tricorder dynamic text
char scannableStrings [ MAX_SCANNABLES ] [ 36 ] ;
qboolean scannablePanels ;
} cgs_t ;
//==============================================================================
extern cgs_t cgs ;
extern cg_t cg ;
extern centity_t cg_entities [ MAX_GENTITIES ] ;
extern weaponInfo_t cg_weapons [ MAX_WEAPONS ] ;
extern itemInfo_t cg_items [ MAX_ITEMS ] ;
extern markPoly_t cg_markPolys [ MAX_MARK_POLYS ] ;
extern vmCvar_t cg_centertime ;
extern vmCvar_t cg_runpitch ;
extern vmCvar_t cg_runroll ;
extern vmCvar_t cg_bobup ;
extern vmCvar_t cg_bobpitch ;
extern vmCvar_t cg_bobroll ;
extern vmCvar_t cg_swingSpeed ;
extern vmCvar_t cg_shadows ;
extern vmCvar_t cg_gibs ;
extern vmCvar_t cg_drawTimer ;
extern vmCvar_t cg_drawFPS ;
extern vmCvar_t cg_drawSnapshot ;
extern vmCvar_t cg_draw3dIcons ;
extern vmCvar_t cg_drawIcons ;
extern vmCvar_t cg_drawAmmoWarning ;
extern vmCvar_t cg_drawCrosshair ;
extern vmCvar_t cg_drawCrosshairNames ;
extern vmCvar_t cg_dynamicCrosshairNames ;
extern vmCvar_t cg_drawRewards ;
extern vmCvar_t cg_drawTeamOverlay ;
extern vmCvar_t cg_teamOverlayUserinfo ;
extern vmCvar_t cg_crosshairX ;
extern vmCvar_t cg_crosshairY ;
extern vmCvar_t cg_crosshairSize ;
extern vmCvar_t cg_crosshairHealth ;
extern vmCvar_t cg_drawStatus ;
extern vmCvar_t cg_draw2D ;
extern vmCvar_t cg_animSpeed ;
extern vmCvar_t cg_debugAnim ;
extern vmCvar_t cg_debugPosition ;
extern vmCvar_t cg_debugEvents ;
extern vmCvar_t cg_errorDecay ;
extern vmCvar_t cg_nopredict ;
extern vmCvar_t cg_noPlayerAnims ;
extern vmCvar_t cg_showmiss ;
extern vmCvar_t cg_footsteps ;
extern vmCvar_t cg_addMarks ;
extern vmCvar_t cg_gun_frame ;
extern vmCvar_t cg_gun_x ;
extern vmCvar_t cg_gun_y ;
extern vmCvar_t cg_gun_z ;
extern vmCvar_t cg_drawGun ;
extern vmCvar_t cg_viewsize ;
extern vmCvar_t cg_autoswitch ;
extern vmCvar_t cg_ignore ;
extern vmCvar_t cg_simpleItems ;
extern vmCvar_t cg_fov ;
extern vmCvar_t cg_zoomFov ;
extern vmCvar_t cg_thirdPersonRange ;
extern vmCvar_t cg_thirdPersonAngle ;
extern vmCvar_t cg_thirdPersonVertOffset ; //RPG-X: TiM
extern vmCvar_t cg_thirdPersonHorzOffset ;
extern vmCvar_t cg_thirdPersonAlpha ;
extern vmCvar_t cg_thirdPersonCameraDamp ;
extern vmCvar_t cg_thirdPersonTargetDamp ;
extern vmCvar_t cg_thirdPersonPitchOffset ;
extern vmCvar_t cg_thirdPerson ;
extern vmCvar_t cg_stereoSeparation ;
extern vmCvar_t cg_lagometer ;
extern vmCvar_t cg_drawAttacker ;
extern vmCvar_t cg_synchronousClients ;
extern vmCvar_t cg_teamChatTime ;
extern vmCvar_t cg_teamChatHeight ;
extern vmCvar_t cg_stats ;
extern vmCvar_t cg_reportDamage ;
extern vmCvar_t cg_forceModel ;
extern vmCvar_t cg_buildScript ;
extern vmCvar_t cg_paused ;
extern vmCvar_t cg_blood ;
extern vmCvar_t cg_predictItems ;
extern vmCvar_t cg_deferPlayers ;
extern vmCvar_t cg_disablekillmsgs ;
extern vmCvar_t cg_drawradar ;
extern vmCvar_t cg_noclipSpectate ; //RPG-X J2J: Option for client to go no-clip in spectator mode.
extern vmCvar_t rpg_ctribgrenade ; //RPG-X: RedTechie - Nevermind :P
extern vmCvar_t cg_dynamicCrosshair ; //RPG-X | Phenix | 09/06/2005
extern vmCvar_t doomHead ; //RPG-X | Phenix | 09/06/2005
extern vmCvar_t cg_dynamiclensflares ; //RPG-X | TiM | 29/6/2005
extern vmCvar_t cg_noTalkingHeads ;
extern vmCvar_t cg_noFrowningHeads ;
extern vmCvar_t cg_noBlinkingHeads ;
extern vmCvar_t cg_noDynamicRanks ;
extern vmCvar_t noAdminChat ;
extern vmCvar_t cg_firstPersonBody ;
extern vmCvar_t cg_defaultModel ;
extern vmCvar_t cg_defaultChar ;
//RPG-X: TiM - Player Model System Parameters
extern vmCvar_t pms_age ;
extern vmCvar_t pms_height ;
extern vmCvar_t pms_weight ;
extern vmCvar_t pms_race ;
extern vmCvar_t emote_Offset ;
extern vmCvar_t cg_thirdPersonZoomRate ;
extern vmCvar_t cg_showEntityNums ;
//TiM - SecurityCode
extern vmCvar_t sv_securityHash ;
extern vmCvar_t sv_securityCode ;
extern vmCvar_t cg_handleWidescreen ;
extern vmCvar_t ui_handleWidescreen ;
//extern vmCvar_t cg_chatBGColor;
extern vmCvar_t cg_chatColor ;
//RPG-X | GSIO01 | 11/05/2009
extern vmCvar_t rpg_forceFieldSet ;
// grp cvars
extern vmCvar_t grp_berp ;
qboolean CG_Cvar_ClampInt ( const char * name , vmCvar_t * vmCvar , int min , int max ) ;
//
// cg_main.c
//
const char * CG_ConfigString ( int index ) ;
const char * CG_Argv ( int arg ) ;
void QDECL CG_Printf ( const char * msg , . . . ) ;
void QDECL CG_Error ( const char * msg , . . . ) ;
void CG_StartMusic ( void ) ;
void CG_UpdateCvars ( void ) ;
int CG_CrosshairPlayer ( void ) ;
int CG_LastAttacker ( void ) ;
//
// cg_view.c
//
void CG_TestModel_f ( void ) ;
void CG_TestGun_f ( void ) ;
void CG_TestModelNextFrame_f ( void ) ;
void CG_TestModelPrevFrame_f ( void ) ;
void CG_TestModelNextSkin_f ( void ) ;
void CG_TestModelPrevSkin_f ( void ) ;
void CG_ZoomDown_f ( void ) ;
void CG_ZoomUp_f ( void ) ;
void CG_CameraShake ( float intensity , int duration , qboolean addRumbleSound ) ;
void CG_DrawActiveFrame ( int serverTime , stereoFrame_t stereoView , qboolean demoPlayback ) ;
//
// cg_drawtools.c
//
void CG_PrintInterfaceGraphics ( int min , int max ) ;
void CG_AdjustFrom640 ( float * x , float * y , float * w , float * h ) ;
void CG_FillRect ( float x , float y , float width , float height , const float * color ) ;
void CG_DrawPic ( float x , float y , float width , float height , qhandle_t hShader ) ;
void CG_DrawStretchPic ( float x , float y , float width , float height , float s1 ,
float t1 , float s2 , float t2 , qhandle_t hShader ) ;
void CG_DrawString ( float x , float y , const char * string ,
float charWidth , float charHeight , const float * modulate ) ;
void UI_DrawProportionalString ( int x , int y , const char * str , int style , vec4_t color ) ;
void CG_LoadFonts ( void ) ;
void CG_DrawStringExt ( int x , int y , const char * string , const float * setColor ,
qboolean forceColor , qboolean shadow , int charWidth , int charHeight , int maxChars ) ;
void CG_DrawBigString ( int x , int y , const char * s , float alpha ) ;
void CG_DrawBigStringColor ( int x , int y , const char * s , vec4_t color ) ;
void CG_DrawSmallString ( int x , int y , const char * s , float alpha ) ;
void CG_DrawSmallStringColor ( int x , int y , const char * s , vec4_t color ) ;
int CG_DrawStrlen ( const char * str ) ;
float * CG_FadeColor ( int startMsec , int totalMsec ) ;
float * CG_TeamColor ( int team ) ;
void CG_TileClear ( void ) ;
void CG_ColorForHealth ( vec4_t hcolor ) ;
void CG_GetColorForHealth ( int health , int armor , vec4_t hcolor ) ;
int UI_ProportionalStringWidth ( const char * str , int style ) ;
qboolean CG_LoadRanks ( void ) ;
qboolean CG_LoadCrosshairs ( void ) ;
qboolean CG_LoadClasses ( void ) ;
//
// cg_draw.c
//
typedef struct
{
int type ; // STRING or GRAPHIC
float timer ; // When it changes
int x ; // X position
int y ; // Y positon
int width ; // Graphic width
int height ; // Graphic height
char * file ; // File name of graphic/ text if STRING
qhandle_t graphic ; // Handle of graphic if GRAPHIC
int min ;
int max ;
int color ; // Normal color
int style ; // Style of characters
// void *pointer; // To an address
} interfacegraphics_s ;
typedef enum
{
IG_GROW ,
IG_HEALTH_START ,
IG_HEALTH_BEGINCAP ,
IG_HEALTH_BOX1 ,
IG_HEALTH_SLIDERFULL ,
IG_HEALTH_SLIDEREMPTY ,
IG_HEALTH_ENDCAP ,
IG_HEALTH_COUNT ,
IG_HEALTH_END ,
IG_ARMOR_START ,
IG_ARMOR_BEGINCAP ,
IG_ARMOR_BOX1 ,
IG_ARMOR_SLIDERFULL ,
IG_ARMOR_SLIDEREMPTY ,
IG_ARMOR_ENDCAP ,
IG_ARMOR_COUNT ,
IG_ARMOR_END ,
IG_AMMO_START ,
IG_AMMO_UPPER_BEGINCAP ,
IG_AMMO_UPPER_ENDCAP ,
IG_AMMO_LOWER_BEGINCAP ,
IG_AMMO_SLIDERFULL ,
IG_AMMO_SLIDEREMPTY ,
IG_AMMO_LOWER_ENDCAP ,
IG_AMMO_COUNT ,
IG_AMMO_END ,
IG_MAX
} interface_graphics_t ;
extern interfacegraphics_s interface_graphics [ IG_MAX ] ;
# define SG_OFF 0
# define SG_STRING 1
# define SG_GRAPHIC 2
# define SG_NUMBER 3
# define SG_VAR 4
extern int sortedTeamPlayers [ TEAM_MAXOVERLAY ] ;
extern int numSortedTeamPlayers ;
extern int drawTeamOverlayModificationCount ;
# ifdef XTRA
void CG_MotionBlur ( void ) ;
# endif
void CG_AddLagometerFrameInfo ( void ) ;
void CG_AddLagometerSnapshotInfo ( snapshot_t * snap ) ;
void CG_CenterPrint ( const char * str , int y , int charWidth ) ;
void CG_DrawHead ( float x , float y , float w , float h , int clientNum , vec3_t headAngles ) ;
void CG_DrawActive ( stereoFrame_t stereoView ) ;
void CG_DrawFlagModel ( float x , float y , float w , float h , int team ) ;
void CG_DrawTeamBackground ( int x , int y , int w , int h , float alpha , int team , qboolean scoreboard ) ;
void CG_DrawNumField ( int x , int y , int width , int value , int charWidth , int charHeight , int style ) ;
void CG_DrawObjectiveInformation ( void ) ;
//
// cg_player.c
//
void CG_PlayerShieldHit ( int entitynum , vec3_t angles , int amount ) ;
void CG_Player ( centity_t * cent ) ;
void CG_ResetPlayerEntity ( centity_t * cent ) ;
//void CG_AddRefEntityWithPowerups( refEntity_t *ent, int powerups, int eFlags, qboolean borg );
//void CG_AddRefEntityWithPowerups( refEntity_t *ent, int powerups, int eFlags, beamData_t *beamData, qboolean borg );
void CG_AddRefEntityWithPowerups ( refEntity_t * ent , int powerups , int eFlags , beamData_t * beamData , int cloakTime , int decloakTime , qboolean borg ) ;
void CG_NewClientInfo ( int clientNum ) ;
sfxHandle_t CG_CustomSound ( int clientNum , const char * soundName ) ;
void CG_NewDecoyInfo ( int decoyNum ) ;
//
// cg_predict.c
//
void CG_BuildSolidList ( void ) ;
int CG_PointContents ( const vec3_t point , int passEntityNum ) ;
void CG_Trace ( trace_t * result , const vec3_t start , const vec3_t mins , const vec3_t maxs , const vec3_t end ,
int skipNumber , int mask ) ;
void CG_PredictPlayerState ( void ) ;
void CG_LoadDeferredPlayers ( void ) ;
//
// cg_events.c
//
void CG_CheckEvents ( centity_t * cent ) ;
const char * CG_PlaceString ( int rank ) ;
void CG_EntityEvent ( centity_t * cent , vec3_t position ) ;
void CG_PainEvent ( centity_t * cent , int health ) ;
//
// cg_ents.c
//
void CG_SetEntitySoundPosition ( centity_t * cent ) ;
void CG_AddPacketEntities ( void ) ;
void CG_Beam ( centity_t * cent ) ;
void CG_AdjustPositionForMover ( const vec3_t in , int moverNum , int fromTime , int toTime , vec3_t out ) ;
void CG_PositionEntityOnTag ( refEntity_t * entity , const refEntity_t * parent ,
qhandle_t parentModel , char * tagName ) ;
void CG_PositionRotatedEntityOnTag ( refEntity_t * entity , const refEntity_t * parent ,
qhandle_t parentModel , char * tagName ) ;
//
// cg_env.c
//
void CG_Spark ( vec3_t origin , vec3_t dir , int delay , int killTime ) ;
void CG_Steam ( vec3_t position , vec3_t dir , int killTime ) ;
void CG_Bolt ( centity_t * cent ) ;
void CG_TransporterPad ( vec3_t origin ) ;
void CG_Drip ( centity_t * cent , int killTime ) ;
void CG_Chunks ( vec3_t origin , vec3_t dir , float size , material_type_t type ) ;
//TiM
void CG_FountainSpurt ( vec3_t org , vec3_t end ) ;
void CG_ElectricalExplosion ( vec3_t start , vec3_t dir , float radius ) ;
//RPG-X | GSIO01 | 09/05/2009
void CG_PhaserFX ( centity_t * cent ) ;
void CG_TorpedoFX ( centity_t * cent ) ;
void CG_ParticleFire ( vec3_t origin , int size ) ;
void CG_ShowTrigger ( centity_t * cent ) ;
//
// cg_weapons.c
//
void CG_NextWeapon_f ( void ) ;
void CG_PrevWeapon_f ( void ) ;
void CG_Weapon_f ( void ) ;
void CG_RegisterWeapon ( int weaponNum ) ;
void CG_RegisterItemVisuals ( int itemNum ) ;
void CG_FireWeapon ( centity_t * cent , qboolean alt_fire ) ;
void CG_FireSeeker ( centity_t * cent ) ;
void CG_MissileHitWall ( centity_t * cent , int weapon , vec3_t origin , vec3_t dir ) ;
void CG_MissileHitPlayer ( centity_t * cent , int weapon , vec3_t origin , vec3_t dir ) ;
void CG_AddViewWeapon ( playerState_t * ps ) ;
void CG_AddPlayerWeapon ( refEntity_t * parent , playerState_t * ps , centity_t * cent ) ;
void CG_DrawWeaponSelect ( void ) ;
void CG_DrawWeaponIcon ( int x , int y , int weapon ) ; //RPG-X | Phenix | 08/06/2005
void CG_OutOfAmmoChange ( qboolean altfire ) ; // should this be in pmove?
void CG_BounceEffect ( centity_t * cent , int weapon , vec3_t origin , vec3_t normal ) ;
//void CG_BorgEyebeam( centity_t *cent, const refEntity_t *parent );
void CG_PlayShooterSound ( centity_t * cent ) ;
extern int tris_state ;
//
// cg_marks.c
//
void CG_InitMarkPolys ( void ) ;
void CG_AddMarks ( void ) ;
void CG_ImpactMark ( qhandle_t markShader ,
const vec3_t origin , const vec3_t dir ,
float orientation ,
float r , float g , float b , float a ,
qboolean alphaFade ,
float radius , qboolean temporary ) ;
//
// cg_localents.c
//
void CG_InitLocalEntities ( void ) ;
localEntity_t * CG_AllocLocalEntity ( void ) ;
localEntity_t CG_GetActiveList ( void ) ;
void CG_AddLocalEntities ( void ) ;
//
// cg_effects.c
//
localEntity_t * CG_SmokePuff ( const vec3_t p ,
const vec3_t vel ,
float radius ,
float r , float g , float b , float a ,
float duration ,
int startTime ,
int leFlags ,
qhandle_t hShader ) ;
void CG_BubbleTrail ( vec3_t start , vec3_t end , float spacing ) ;
void CG_SpawnEffect ( vec3_t org , refEntity_t * ent_legs , refEntity_t * ent_torso , refEntity_t * ent_head ) ;
void CG_QFlashEvent ( vec3_t org ) ;
void CG_Bleed ( vec3_t origin , int entityNum ) ;
void CG_Seeker ( centity_t * cent ) ;
//RPG-X: TiM : Smoke Ent
//void CG_Smoke( vec3_t origin, vec3_t dir, float radius, float speed, qhandle_t shader );
void CG_Smoke ( vec3_t position , vec3_t dir , int killTime , int radius ) ;
//RPG-X: Marcin: Fire
void CG_Fire ( vec3_t position , vec3_t dir , int killTime , int radius , int fxEnt ) ;
localEntity_t * CG_MakeExplosion ( vec3_t origin , vec3_t dir ,
qhandle_t hModel , qhandle_t shader , int msec , float scale ,
qboolean isSprite ) ;
localEntity_t * CG_MakeExplosion2 ( vec3_t origin , vec3_t dir ,
qhandle_t hModel , int numFrames , qhandle_t shader ,
int msec , qboolean isSprite , float scale , int flags ) ;
void CG_SurfaceExplosion ( vec3_t origin , vec3_t normal , float radius , float shake_speed , qboolean smoke ) ;
void CG_ExplosionEffects ( vec3_t origin , int intensity , int radius ) ;
//
// cg_snapshot.c
//
void CG_ProcessSnapshots ( void ) ;
//
// cg_info.c
//
void CG_LoadingString ( const char * s ) ;
void CG_LoadingItem ( int itemNum ) ;
void CG_LoadingClient ( int clientNum ) ;
void CG_DrawInformation ( void ) ;
//
// cg_scoreboard.c
//
qboolean CG_DrawScoreboard ( void ) ;
void CG_DrawTourneyScoreboard ( void ) ;
//
// these lists need to be sync'ed with stuff under g_log in g_local.h
//
// awards
typedef enum {
AWARD_EFFICIENCY , // Accuracy
AWARD_SHARPSHOOTER , // Most compression rifle frags
AWARD_UNTOUCHABLE , // Perfect (no deaths)
AWARD_LOGISTICS , // Most pickups
AWARD_TACTICIAN , // Kills with all weapons
AWARD_DEMOLITIONIST , // Most explosive damage kills
AWARD_STREAK , // Ace/Expert/Master/Champion
AWARD_TEAM , // MVP/Defender/Warrior/Carrier/Interceptor/Bravery
AWARD_SECTION31 , // All-around god
AWARD_MAX
} awardType_t ;
typedef enum
{
TEAM_NONE = 0 , // ha ha! you suck!
TEAM_MVP , // most overall points
TEAM_DEFENDER , // killed the most baddies near your flag
TEAM_WARRIOR , // most frags
TEAM_CARRIER , // infected the most people with plague
TEAM_INTERCEPTOR , // returned your own flag the most
TEAM_BRAVERY , // Red Shirt Award (tm). you died more than anybody.
TEAM_MAX
} teamAward_e ;
//
// above lists need to be sync'ed with stuff under g_log in g_local.h
//
typedef enum
{
AWARD_STREAK_NONE = 0 ,
AWARD_STREAK_ACE ,
AWARD_STREAK_EXPERT ,
AWARD_STREAK_MASTER ,
AWARD_STREAK_CHAMPION ,
AWARD_STREAK_MAX
} awardStreak_t ;
extern char * cg_medalPicNames [ ] ;
extern char * cg_medalSounds [ ] ;
extern char * cg_medalTeamPicNames [ ] ;
extern char * cg_medalTeamSounds [ ] ;
extern char * cg_medalStreakPicNames [ ] ;
extern char * cg_medalStreakSounds [ ] ;
void AW_SPPostgameMenu_f ( void ) ;
//
// cg_consolecmds.c
//
qboolean CG_ConsoleCommand ( void ) ;
void CG_InitConsoleCommands ( void ) ;
//
// cg_servercmds.c
//
void CG_ExecuteNewServerCommands ( int latestSequence ) ;
void CG_ParseServerinfo ( void ) ;
void CG_SetConfigValues ( void ) ;
//
// cg_playerstate.c
//
void CG_Respawn ( void ) ;
void CG_TransitionPlayerState ( playerState_t * ps , playerState_t * ops ) ;
// cg_players.c
void updateSkin ( int clientNum , char * new_model ) ;
/*
RPG - X J2J : This struct is used to convientently store the data loaded from TiM ' s
data . cfg file . References what body to use , skins etc . .
TiM : Haha thanks Jay
*/
//typedef struct
//{
// char ID[80];
// char Name[255];
// char BodyModel[255];
// char Gender;
// qboolean Alien;
// qboolean Humanoid;
// char DefaultRank[255];
// char SoundSet[255];
////Allowed Classes
// qboolean Engineer;
// qboolean Science;
// qboolean Command;
// qboolean Security;
// qboolean Medical;
//
//}
//X_ModelCfgData;
//===============================================
//
// system traps
// These functions are how the cgame communicates with the main game system
//
// print message on the local console
void trap_Print ( const char * fmt ) ;
// abort the game
void trap_Error ( const char * fmt ) ;
// milliseconds should only be used for performance tuning, never
// for anything game related. Get time from the CG_DrawActiveFrame parameter
int trap_Milliseconds ( void ) ;
// console variable interaction
void trap_Cvar_Register ( vmCvar_t * vmCvar , const char * varName , const char * defaultValue , int flags ) ;
void trap_Cvar_Update ( vmCvar_t * vmCvar ) ;
void trap_Cvar_Set ( const char * var_name , const char * value ) ;
void trap_Cvar_Set_No_Modify ( const char * var_name , const char * value ) ;
void trap_Cvar_VariableStringBuffer ( const char * var_name , char * buffer , int bufsize ) ;
// ServerCommand and ConsoleCommand parameter access
int trap_Argc ( void ) ;
void trap_Argv ( int n , char * buffer , int bufferLength ) ;
void trap_Args ( char * buffer , int bufferLength ) ;
// filesystem access
// returns length of file
int trap_FS_FOpenFile ( const char * qpath , fileHandle_t * f , fsMode_t mode ) ;
void trap_FS_Read ( void * buffer , int len , fileHandle_t f ) ;
void trap_FS_Write ( const void * buffer , int len , fileHandle_t f ) ;
void trap_FS_FCloseFile ( fileHandle_t f ) ;
// add commands to the local console as if they were typed in
// for map changing, etc. The command is not executed immediately,
// but will be executed in order the next time console commands
// are processed
void trap_SendConsoleCommand ( const char * text ) ;
// register a command name so the console can perform command completion.
// FIXME: replace this with a normal console command "defineCommand"?
void trap_AddCommand ( const char * cmdName ) ;
// send a string to the server over the network
void trap_SendClientCommand ( const char * s ) ;
// force a screen update, only used during gamestate load
void trap_UpdateScreen ( void ) ;
// model collision
void trap_CM_LoadMap ( const char * mapname ) ;
int trap_CM_NumInlineModels ( void ) ;
clipHandle_t trap_CM_InlineModel ( int index ) ; // 0 = world, 1+ = bmodels
clipHandle_t trap_CM_TempBoxModel ( const vec3_t mins , const vec3_t maxs ) ;
int trap_CM_PointContents ( const vec3_t p , clipHandle_t model ) ;
int trap_CM_TransformedPointContents ( const vec3_t p , clipHandle_t model , const vec3_t origin , const vec3_t angles ) ;
void trap_CM_BoxTrace ( trace_t * results , const vec3_t start , const vec3_t end ,
const vec3_t mins , const vec3_t maxs ,
clipHandle_t model , int brushmask ) ;
void trap_CM_TransformedBoxTrace ( trace_t * results , const vec3_t start , const vec3_t end ,
const vec3_t mins , const vec3_t maxs ,
clipHandle_t model , int brushmask ,
const vec3_t origin , const vec3_t angles ) ;
// Returns the projection of a polygon onto the solid brushes in the world
int trap_CM_MarkFragments ( int numPoints , const vec3_t * points ,
const vec3_t projection ,
int maxPoints , vec3_t pointBuffer ,
int maxFragments , markFragment_t * fragmentBuffer ) ;
// normal sounds will have their volume dynamically changed as their entity
// moves and the listener moves
void trap_S_StartSound ( vec3_t origin , int entityNum , int entchannel , sfxHandle_t sfx ) ;
// a local sound is always played full volume
void trap_S_StartLocalSound ( sfxHandle_t sfx , int channelNum ) ;
void trap_S_ClearLoopingSounds ( void ) ;
void trap_S_AddLoopingSound ( int entityNum , const vec3_t origin , const vec3_t velocity , sfxHandle_t sfx ) ;
void trap_S_UpdateEntityPosition ( int entityNum , const vec3_t origin ) ;
// repatialize recalculates the volumes of sound as they should be heard by the
// given entityNum and position
void trap_S_Respatialize ( int entityNum , const vec3_t origin , vec3_t axis [ 3 ] , int inwater ) ;
sfxHandle_t trap_S_RegisterSound ( const char * sample ) ; // returns buzz if not found
void trap_S_StartBackgroundTrack ( const char * intro , const char * loop ) ; // empty name stops music
void trap_R_LoadWorldMap ( const char * mapname ) ;
// all media should be registered during level startup to prevent
// hitches during gameplay
qhandle_t trap_R_RegisterModel ( const char * name ) ; // returns rgb axis if not found
qhandle_t trap_R_RegisterSkin ( const char * name ) ; // returns all white if not found
qhandle_t trap_R_RegisterShader ( const char * name ) ; // returns all white if not found
qhandle_t trap_R_RegisterShader3D ( const char * name ) ; // returns all white if not found
qhandle_t trap_R_RegisterShaderNoMip ( const char * name ) ; // returns all white if not found
// a scene is built up by calls to R_ClearScene and the various R_Add functions.
// Nothing is drawn until R_RenderScene is called.
void trap_R_ClearScene ( void ) ;
void trap_R_AddRefEntityToScene ( const refEntity_t * re ) ;
// polys are intended for simple wall marks, not really for doing
// significant construction
void trap_R_AddPolyToScene ( qhandle_t hShader , int numVerts , const polyVert_t * verts ) ;
void trap_R_AddLightToScene ( const vec3_t org , float intensity , float r , float g , float b ) ;
void trap_R_RenderScene ( const refdef_t * fd ) ;
void trap_R_SetColor ( const float * rgba ) ; // NULL = 1,1,1,1
void trap_R_DrawStretchPic ( float x , float y , float w , float h ,
float s1 , float t1 , float s2 , float t2 , qhandle_t hShader ) ;
void trap_R_ModelBounds ( clipHandle_t model , vec3_t mins , vec3_t maxs ) ;
void trap_R_LerpTag ( orientation_t * tag , clipHandle_t mod , int startFrame , int endFrame ,
float frac , const char * tagName ) ;
# ifdef XTRA
void trap_R_AddPolysToScene ( qhandle_t hShader , int numVerts , const polyVert_t * verts , int numPolys ) ;
# endif
// The glconfig_t will not change during the life of a cgame.
// If it needs to change, the entire cgame will be restarted, because
// all the qhandle_t are then invalid.
void trap_GetGlconfig ( glconfig_t * glconfig ) ;
// the gamestate should be grabbed at startup, and whenever a
// configstring changes
void trap_GetGameState ( gameState_t * gamestate ) ;
// cgame will poll each frame to see if a newer snapshot has arrived
// that it is interested in. The time is returned seperately so that
// snapshot latency can be calculated.
void trap_GetCurrentSnapshotNumber ( int * snapshotNumber , int * serverTime ) ;
// a snapshot get can fail if the snapshot (or the entties it holds) is so
// old that it has fallen out of the client system queue
qboolean trap_GetSnapshot ( int snapshotNumber , snapshot_t * snapshot ) ;
// retrieve a text command from the server stream
// the current snapshot will hold the number of the most recent command
// qfalse can be returned if the client system handled the command
// argc() / argv() can be used to examine the parameters of the command
qboolean trap_GetServerCommand ( int serverCommandNumber ) ;
// returns the most recent command number that can be passed to GetUserCmd
// this will always be at least one higher than the number in the current
// snapshot, and it may be quite a few higher if it is a fast computer on
// a lagged connection
int trap_GetCurrentCmdNumber ( void ) ;
qboolean trap_GetUserCmd ( int cmdNumber , usercmd_t * ucmd ) ;
// used for the weapon select and zoom
void trap_SetUserCmdValue ( int stateValue , float sensitivityScale ) ;
// aids for VM testing
void testPrintInt ( char * string , int i ) ;
void testPrintFloat ( char * string , float f ) ;
int trap_MemoryRemaining ( void ) ;
# define MAX_LENS_FLARES 64
//RPG-X | TiM | 28/06/2005
typedef struct {
int width ;
int height ;
float offset ;
qboolean positive ;
vec3_t color ;
char * file ;
qhandle_t graphic ;
} lensReflec_s ;
typedef struct {
vec3_t worldCoord ;
int w1 ;
int h1 ;
vec3_t glowColor ;
float glowOffset ;
float hazeOffset ;
int minDist ;
int maxDist ;
vec3_t streakColor ;
int streakDistMin ;
int streakDistMax ;
int streakW ;
int streakH ;
qboolean whiteStreaks ;
int reflecDistMin ;
int reflecDistMax ;
qboolean reflecAnamorphic ;
qboolean defReflecs ;
qboolean clamp ;
float maxAlpha ;
int startTime ;
int upTime ;
int holdTime ;
int downTime ;
qboolean qfull ;
} lensFlare_t ;
extern lensReflec_s lensReflec [ 10 ] ;
//extern lensFlare_t lensFlare[MAX_LENS_FLARES];
void CG_DrawLensFlare ( lensFlare_t * flare ) ;
void CG_InitLensFlare ( vec3_t worldCoord ,
int w1 , int h1 ,
vec3_t glowColor , float glowOffset , float hazeOffset , int minDist , int maxDist ,
vec3_t streakColor , int streakDistMin , int streakDistMax , int streakW , int streakH , qboolean whiteStreaks ,
int reflecDistMin , int reflecDistMax , qboolean reflecAnamorphic , qboolean defReflecs ,
qboolean clamp , float maxAlpha , int startTime , int upTime , int holdTime , int downTime ) ;
//void CG_ParseClassData( void );
//TiM - Allow parts of the lerp code to update the 3rd view if need be
void CG_ResetThirdPersonViewDamp ( void ) ;
# ifdef XTRA
void trap_R_RemapShader ( const char * oldShader , const char * newShader , const char * timeOffset ) ;
void CG_ShaderStateChanged ( void ) ;
# endif