2013-04-19 02:52:48 +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.
# ifndef __LCC__
# define CGAME_INLINE ID_INLINE
# else
# define CGAME_INLINE //none
# endif
# define NULL_HANDLE ((qhandle_t) 0)
# define NULL_SOUND ((sfxHandle_t) 0)
# define NULL_FX ((fxHandle_t) 0)
# define POWERUP_BLINKS 5
# 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 // not currently used?
# define MAX_ZOOM_FOV 3.0f
# define ZOOM_IN_TIME 1500.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
// very large characters
# define GIANT_WIDTH 32
# define GIANT_HEIGHT 48
# define NUM_FONT_BIG 1
# define NUM_FONT_SMALL 2
# define NUM_FONT_CHUNKY 3
# define NUM_CROSSHAIRS 9
# define TEAM_OVERLAY_MAXNAME_WIDTH 32
# define TEAM_OVERLAY_MAXLOCATION_WIDTH 64
# define WAVE_AMPLITUDE 1
# define WAVE_FREQUENCY 0.4
# define DEFAULT_MODEL "kyle"
# define DEFAULT_FORCEPOWERS "5-1-000000000000000000"
//"rank-side-heal.lev.speed.push.pull.tele.grip.lightning.rage.protect.absorb.teamheal.teamforce.drain.see"
# define DEFAULT_REDTEAM_NAME "Empire"
# define DEFAULT_BLUETEAM_NAME "Rebellion"
typedef enum {
FOOTSTEP_STONEWALK ,
FOOTSTEP_STONERUN ,
FOOTSTEP_METALWALK ,
FOOTSTEP_METALRUN ,
FOOTSTEP_PIPEWALK ,
FOOTSTEP_PIPERUN ,
FOOTSTEP_SPLASH ,
FOOTSTEP_WADE ,
FOOTSTEP_SWIM ,
FOOTSTEP_SNOWWALK ,
FOOTSTEP_SNOWRUN ,
FOOTSTEP_SANDWALK ,
FOOTSTEP_SANDRUN ,
FOOTSTEP_GRASSWALK ,
FOOTSTEP_GRASSRUN ,
FOOTSTEP_DIRTWALK ,
FOOTSTEP_DIRTRUN ,
FOOTSTEP_MUDWALK ,
FOOTSTEP_MUDRUN ,
FOOTSTEP_GRAVELWALK ,
FOOTSTEP_GRAVELRUN ,
FOOTSTEP_RUGWALK ,
FOOTSTEP_RUGRUN ,
FOOTSTEP_WOODWALK ,
FOOTSTEP_WOODRUN ,
FOOTSTEP_TOTAL
} footstep_t ;
typedef enum {
IMPACTSOUND_DEFAULT ,
IMPACTSOUND_METAL ,
IMPACTSOUND_FLESH
} impactSound_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 ;
qboolean lastFlip ; //if does not match torsoFlip/legsFlip, restart the anim.
int lastForcedFrame ;
float yawAngle ;
qboolean yawing ;
float pitchAngle ;
qboolean pitching ;
float yawSwingDif ;
int animationNumber ;
animation_t * animation ;
int animationTime ; // time when the first frame of the animation will be exact
float animationSpeed ; // scale the animation speed
float animationTorsoSpeed ;
qboolean torsoYawing ;
} lerpFrame_t ;
typedef struct {
lerpFrame_t legs , torso , flag ;
int painTime ;
int painDirection ; // flip from 0 to 1
int lightningFiring ;
// machinegun spinning
float barrelAngle ;
int barrelTime ;
qboolean barrelSpinning ;
} playerEntity_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_COMBAT_SOUNDS 40
# define MAX_CUSTOM_EXTRA_SOUNDS 40
# define MAX_CUSTOM_JEDI_SOUNDS 40
//#define MAX_CUSTOM_SIEGE_SOUNDS..defined in bg_public.h
# define MAX_CUSTOM_DUEL_SOUNDS 40
# define MAX_CUSTOM_SOUNDS 40 //rww - Note that for now these must all be the same, because of the way I am
//cycling through them and comparing for custom sounds.
typedef struct {
qboolean infoValid ;
float colorOverride [ 3 ] ;
saberInfo_t saber [ MAX_SABERS ] ;
void * ghoul2Weapons [ MAX_SABERS ] ;
char saberName [ 64 ] ;
char saber2Name [ 64 ] ;
char name [ MAX_QPATH ] ;
team_t team ;
int duelTeam ;
int botSkill ; // 0 = not bot, 1-5 = bot
int frame ;
vec3_t color1 ;
vec3_t color2 ;
int icolor1 ;
int icolor2 ;
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 teamTask ; // task in teamplay (offence/defence)
qboolean teamLeader ; // true when this is a team leader
int powerups ; // so can display quad/flag status
int medkitUsageTime ;
int breathPuffTime ;
// when clientinfo is changed, the loading of models/skins/sounds
// can be deferred until you are dead, to prevent hitches in
// gameplay
char modelName [ MAX_QPATH ] ;
char skinName [ MAX_QPATH ] ;
// char headModelName[MAX_QPATH];
// char headSkinName[MAX_QPATH];
char forcePowers [ MAX_QPATH ] ;
// char redTeam[MAX_TEAMNAME];
// char blueTeam[MAX_TEAMNAME];
char teamName [ MAX_TEAMNAME ] ;
int corrTime ;
vec3_t lastHeadAngles ;
int lookTime ;
int brokenLimbs ;
qboolean deferred ;
qboolean newAnims ; // true if using the new mission pack animations
qboolean fixedlegs ; // true if legs yaw is always the same as torso yaw
qboolean fixedtorso ; // true if torso never changes yaw
vec3_t headOffset ; // move head in icon views
//footstep_t footsteps;
gender_t gender ; // from model
qhandle_t legsModel ;
qhandle_t legsSkin ;
qhandle_t torsoModel ;
qhandle_t torsoSkin ;
//qhandle_t headModel;
//qhandle_t headSkin;
void * ghoul2Model ;
qhandle_t modelIcon ;
qhandle_t bolt_rhand ;
qhandle_t bolt_lhand ;
qhandle_t bolt_head ;
qhandle_t bolt_motion ;
qhandle_t bolt_llumbar ;
int siegeIndex ;
int siegeDesiredTeam ;
sfxHandle_t sounds [ MAX_CUSTOM_SOUNDS ] ;
sfxHandle_t combatSounds [ MAX_CUSTOM_COMBAT_SOUNDS ] ;
sfxHandle_t extraSounds [ MAX_CUSTOM_EXTRA_SOUNDS ] ;
sfxHandle_t jediSounds [ MAX_CUSTOM_JEDI_SOUNDS ] ;
sfxHandle_t siegeSounds [ MAX_CUSTOM_SIEGE_SOUNDS ] ;
sfxHandle_t duelSounds [ MAX_CUSTOM_DUEL_SOUNDS ] ;
int legsAnim ;
int torsoAnim ;
float facial_blink ; // time before next blink. If a minus value, we are in blink mode
float facial_frown ; // time before next frown. If a minus value, we are in frown mode
float facial_aux ; // time before next aux. If a minus value, we are in aux mode
int superSmoothTime ; //do crazy amount of smoothing
# ifdef _XBOX
int friendshipStatus ;
# endif
} clientInfo_t ;
//rww - cheap looping sound struct
# ifdef _XBOX
# define MAX_CG_LOOPSOUNDS 2
# else
# define MAX_CG_LOOPSOUNDS 8
# endif
typedef struct cgLoopSound_s {
int entityNum ;
vec3_t origin ;
vec3_t velocity ;
sfxHandle_t sfx ;
} cgLoopSound_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 {
// This comment below is correct, but now m_pVehicle is the first thing in bg shared entity, so it goes first. - AReis
//rww - entstate must be first, to correspond with the bg shared entity structure
entityState_t currentState ; // from cg.frame
playerState_t * playerState ; //ptr to playerstate if applicable (for bg ents)
Vehicle_t * m_pVehicle ; //vehicle data
void * ghoul2 ; //g2 instance
int localAnimIndex ; //index locally (game/cgame) to anim data for this skel
vec3_t modelScale ; //needed for g2 collision
//from here up must be unified with bgEntity_t -rww
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 teleportFlag;
int trailTime ; // so missile trails can handle dropped initial packets
int dustTrailTime ;
int miscTime ;
vec3_t damageAngles ;
int damageTime ;
int snapShotTime ; // last time this entity was found in a snapshot
playerEntity_t pe ;
// 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 ;
#if 0
//add up bone offsets until next client frame before adding them in
qboolean hasRagOffset ;
vec3_t ragOffsets ;
int ragOffsetTime ;
# endif
vec3_t ragLastOrigin ;
int ragLastOriginTime ;
qboolean noLumbar ; //if true only do anims and things on model_root instead of lower_lumbar, this will be the case for some NPCs.
qboolean noFace ;
//For keeping track of the current surface status in relation to the entitystate surface fields.
int npcLocalSurfOn ;
int npcLocalSurfOff ;
int eventAnimIndex ;
clientInfo_t * npcClient ; //dynamically allocated - always free it, and never stomp over it.
int weapon ;
void * ghoul2weapon ; //rww - pointer to ghoul2 instance of the current 3rd person weapon
float radius ;
int boltInfo ;
//sometimes used as a bolt index, but these values are also used as generic values for clientside entities
//at times
int bolt1 ;
int bolt2 ;
int bolt3 ;
int bolt4 ;
float bodyHeight ;
int torsoBolt ;
vec3_t turAngles ;
vec3_t frame_minus1 ;
vec3_t frame_minus2 ;
int frame_minus1_refreshed ;
int frame_minus2_refreshed ;
void * frame_hold ; //pointer to a ghoul2 instance
int frame_hold_time ;
int frame_hold_refreshed ;
void * grip_arm ; //pointer to a ghoul2 instance
int trickAlpha ;
int trickAlphaTime ;
int teamPowerEffectTime ;
qboolean teamPowerType ; //0 regen, 1 heal, 2 drain, 3 absorb
qboolean isRagging ;
qboolean ownerRagging ;
int overridingBones ;
int bodyFadeTime ;
vec3_t pushEffectOrigin ;
cgLoopSound_t loopingSound [ MAX_CG_LOOPSOUNDS ] ;
int numLoopingSounds ;
int serverSaberHitIndex ;
int serverSaberHitTime ;
qboolean serverSaberFleshImpact ; //true if flesh, false if anything else.
qboolean ikStatus ;
qboolean saberWasInFlight ;
float smoothYaw ;
int uncloaking ;
qboolean cloaked ;
int vChatTime ;
} centity_t ;
//======================================================================
// local entities are created as a result of events or predicted actions,
// and live independently 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_FADE_SCALE_MODEL , // currently only for Demp2 shock sphere
LE_FRAGMENT ,
LE_PUFF ,
LE_MOVE_SCALE_FADE ,
LE_FALL_SCALE_FADE ,
LE_FADE_RGB ,
LE_SCALE_FADE ,
LE_SCOREPLUM ,
LE_OLINE ,
LE_SHOWREFENTITY ,
LE_LINE
} leType_t ;
typedef enum {
LEF_PUFF_DONT_SCALE = 0x0001 , // do not scale size over time
LEF_TUMBLE = 0x0002 , // tumble over time, used for ejecting shells
LEF_FADE_RGB = 0x0004 , // explicitly fade
LEF_NO_RANDOM_ROTATE = 0x0008 // MakeExplosion adds random rotate which could be bad in some cases
} leFlag_t ;
typedef enum {
LEMT_NONE ,
LEMT_BURN ,
LEMT_BLOOD
} leMarkType_t ; // fragment local entities can leave marks on walls
typedef enum {
LEBS_NONE ,
LEBS_BLOOD ,
LEBS_BRASS ,
LEBS_METAL ,
LEBS_ROCK
} leBounceSoundType_t ; // fragment local entities can make sounds on impacts
typedef struct localEntity_s {
struct localEntity_s * prev , * next ;
leType_t leType ;
int leFlags ;
int startTime ;
int endTime ;
int fadeInTime ;
float lifeRate ; // 1.0 / (endTime - startTime)
trajectory_t pos ;
trajectory_t angles ;
float bounceFactor ; // 0.0 = no bounce, 1.0 = perfect
int bounceSound ; // optional sound index to play upon bounce
float alpha ;
float dalpha ;
int forceAlpha ;
float color [ 4 ] ;
float radius ;
float light ;
vec3_t lightColor ;
leMarkType_t leMarkType ; // mark to leave on fragment impact
leBounceSoundType_t leBounceSoundType ;
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 ;
} localEntity_t ;
//======================================================================
typedef struct {
int client ;
int score ;
int ping ;
int time ;
int scoreFlags ;
int powerUps ;
int accuracy ;
int impressiveCount ;
int excellentCount ;
int guantletCount ;
int defendCount ;
int assistCount ;
int captures ;
qboolean perfect ;
int team ;
} score_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 ;
qhandle_t flashModel ;
vec3_t weaponMidpoint ; // so it will rotate centered instead of by tag
float flashDlight ;
vec3_t flashDlightColor ;
qhandle_t weaponIcon ;
qhandle_t ammoIcon ;
qhandle_t ammoModel ;
sfxHandle_t flashSound [ 4 ] ; // fast firing weapons randomly choose
sfxHandle_t firingSound ;
sfxHandle_t chargeSound ;
fxHandle_t muzzleEffect ;
qhandle_t missileModel ;
sfxHandle_t missileSound ;
void ( * missileTrailFunc ) ( centity_t * , const struct weaponInfo_s * wi ) ;
float missileDlight ;
vec3_t missileDlightColor ;
int missileRenderfx ;
sfxHandle_t missileHitSound ;
sfxHandle_t altFlashSound [ 4 ] ;
sfxHandle_t altFiringSound ;
sfxHandle_t altChargeSound ;
fxHandle_t altMuzzleEffect ;
qhandle_t altMissileModel ;
sfxHandle_t altMissileSound ;
void ( * altMissileTrailFunc ) ( centity_t * , const struct weaponInfo_s * wi ) ;
float altMissileDlight ;
vec3_t altMissileDlightColor ;
int altMissileRenderfx ;
sfxHandle_t altMissileHitSound ;
sfxHandle_t selectSound ;
sfxHandle_t readySound ;
float trailRadius ;
float wiTrailTime ;
} 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 models [ MAX_ITEM_MODELS ] ;
qhandle_t icon ;
/*
Ghoul2 Insert Start
*/
void * g2Models [ MAX_ITEM_MODELS ] ;
float radius [ MAX_ITEM_MODELS ] ;
/*
Ghoul2 Insert End
*/
} itemInfo_t ;
typedef struct {
int itemNum ;
} powerupInfo_t ;
# define MAX_SKULLTRAIL 10
typedef struct {
vec3_t positions [ MAX_SKULLTRAIL ] ;
int numpositions ;
} skulltrail_t ;
# define MAX_REWARDSTACK 10
# define MAX_SOUNDBUFFER 20
//======================================================================
// 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
# define MAX_PREDICTED_EVENTS 16
# define MAX_CHATBOX_ITEMS 5
typedef struct chatBoxItem_s
{
char string [ MAX_SAY_TEXT ] ;
int time ;
int lines ;
} chatBoxItem_t ;
typedef struct {
int clientFrame ; // incremented each frame
int clientNum ;
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 mMapChange ;
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 mapRestart ; // set on a map restart to set back the weapon
qboolean mInRMG ; //rwwRMG - added
qboolean mRMGWeather ; //rwwRMG - added
qboolean renderingThirdPerson ; // during deaths, chasecams, etc
// prediction state
qboolean hyperspace ; // true if prediction has hit a trigger_teleport
playerState_t predictedPlayerState ;
playerState_t predictedVehicleState ;
//centity_t predictedPlayerEntity;
//rww - I removed this and made it use cg_entities[clnum] directly.
qboolean validPPS ; // clear until the first call to CG_PredictPlayerState
int predictedErrorTime ;
vec3_t predictedError ;
int eventSequence ;
int predictableEvents [ MAX_PREDICTED_EVENTS ] ;
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 ;
int forceSelect ;
int itemSelect ;
// auto rotating items
vec3_t autoAngles ;
vec3_t autoAxis [ 3 ] ;
vec3_t autoAnglesFast ;
vec3_t autoAxisFast [ 3 ] ;
// view rendering
refdef_t refdef ;
# ifdef _XBOX
qboolean widescreen ;
# endif
// zoom key
qboolean zoomed ;
int zoomTime ;
float zoomSensitivity ;
// information screen text during loading
char infoScreenText [ MAX_STRING_CHARS ] ;
// scoreboard
int scoresRequestTime ;
int numScores ;
int selectedScore ;
int teamScores [ 2 ] ;
score_t scores [ MAX_CLIENTS ] ;
qboolean showScores ;
qboolean scoreBoardShowing ;
int scoreFadeTime ;
char killerName [ MAX_NAME_LENGTH ] ;
char spectatorList [ MAX_STRING_CHARS ] ; // list of names
int spectatorLen ; // length of list
float spectatorWidth ; // width in device units
int spectatorTime ; // next time to offset
int spectatorPaintX ; // current paint x
int spectatorPaintX2 ; // current paint x
int spectatorOffset ; // current offset from start
int spectatorPaintLen ; // current offset from start
// skull trails
skulltrail_t skulltrails [ MAX_CLIENTS ] ;
// 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 ;
int crosshairVehNum ;
int crosshairVehTime ;
// powerup active flashing
int powerupActive ;
int powerupTime ;
// attacking player
int attackerTime ;
int voiceTime ;
// reward medals
int rewardStack ;
int rewardTime ;
int rewardCount [ MAX_REWARDSTACK ] ;
qhandle_t rewardShader [ MAX_REWARDSTACK ] ;
qhandle_t rewardSound [ MAX_REWARDSTACK ] ;
// sound buffer mainly for announcer sounds
int soundBufferIn ;
int soundBufferOut ;
int soundTime ;
qhandle_t soundBuffer [ MAX_SOUNDBUFFER ] ;
// for voice chat buffer
int voiceChatTime ;
int voiceChatBufferIn ;
int voiceChatBufferOut ;
// 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 ;
// status bar head
float headYaw ;
float headEndPitch ;
float headEndYaw ;
int headEndTime ;
float headStartPitch ;
float headStartYaw ;
int headStartTime ;
// view movement
float v_dmg_time ;
float v_dmg_pitch ;
float v_dmg_roll ;
vec3_t kick_angles ; // weapon kicks
int kick_time ;
vec3_t kick_origin ;
// temp working variables for player view
float bobfracsin ;
int bobcycle ;
float xyspeed ;
int nextOrbitTime ;
//qboolean cameraMode; // if rendering from a loaded camera
int loadLCARSStage ;
int forceHUDTotalFlashTime ;
int forceHUDNextFlashTime ;
qboolean forceHUDActive ; // Flag to show force hud is off/on
// development tool
refEntity_t testModelEntity ;
char testModelName [ MAX_QPATH ] ;
qboolean testGun ;
int VHUDFlashTime ;
qboolean VHUDTurboFlag ;
// HUD stuff
float HUDTickFlashTime ;
qboolean HUDArmorFlag ;
qboolean HUDHealthFlag ;
qboolean iconHUDActive ;
float iconHUDPercent ;
float iconSelectTime ;
float invenSelectTime ;
float forceSelectTime ;
vec3_t lastFPFlashPoint ;
/*
Ghoul2 Insert Start
*/
int testModel ;
// had to be moved so we wouldn't wipe these out with the memset - these have STL in them and shouldn't be cleared that way
snapshot_t activeSnapshots [ 2 ] ;
/*
Ghoul2 Insert End
*/
char sharedBuffer [ MAX_CG_SHARED_BUFFER_SIZE ] ;
short radarEntityCount ;
short radarEntities [ MAX_CLIENTS + 16 ] ;
short bracketedEntityCount ;
short bracketedEntities [ MAX_CLIENTS + 16 ] ;
float distanceCull ;
chatBoxItem_t chatItems [ MAX_CHATBOX_ITEMS ] ;
int chatItemActive ;
#if 0
int snapshotTimeoutTime ;
# endif
} cg_t ;
# define MAX_TICS 14
typedef struct forceTicPos_s
{
int x ;
int y ;
int width ;
int height ;
char * file ;
qhandle_t tic ;
} forceTicPos_t ;
extern forceTicPos_t forceTicPos [ ] ;
extern forceTicPos_t ammoTicPos [ ] ;
typedef struct cgscreffects_s
{
float FOV ;
float FOV2 ;
float shake_intensity ;
int shake_duration ;
int shake_start ;
float music_volume_multiplier ;
int music_volume_time ;
qboolean music_volume_set ;
} cgscreffects_t ;
extern cgscreffects_t cgScreenEffects ;
void CGCam_Shake ( float intensity , int duration ) ;
void CGCam_SetMusicMult ( float multiplier , int duration ) ;
typedef enum
{
CHUNK_METAL1 = 0 ,
CHUNK_METAL2 ,
CHUNK_ROCK1 ,
CHUNK_ROCK2 ,
CHUNK_ROCK3 ,
CHUNK_CRATE1 ,
CHUNK_CRATE2 ,
CHUNK_WHITE_METAL ,
NUM_CHUNK_TYPES
} ;
# define NUM_CHUNK_MODELS 4
// 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 whiteShader ;
qhandle_t loadBarLED ;
qhandle_t loadBarLEDCap ;
qhandle_t loadBarLEDSurround ;
qhandle_t bryarFrontFlash ;
qhandle_t greenFrontFlash ;
qhandle_t lightningFlash ;
qhandle_t itemHoloModel ;
qhandle_t redFlagModel ;
qhandle_t blueFlagModel ;
qhandle_t flagPoleModel ;
qhandle_t flagFlapModel ;
qhandle_t redFlagBaseModel ;
qhandle_t blueFlagBaseModel ;
qhandle_t neutralFlagBaseModel ;
qhandle_t teamStatusBar ;
qhandle_t deferShader ;
qhandle_t radarShader ;
qhandle_t siegeItemShader ;
qhandle_t mAutomapPlayerIcon ;
qhandle_t mAutomapRocketIcon ;
qhandle_t wireframeAutomapFrame_left ;
qhandle_t wireframeAutomapFrame_right ;
qhandle_t wireframeAutomapFrame_top ;
qhandle_t wireframeAutomapFrame_bottom ;
//Chunks
qhandle_t chunkModels [ NUM_CHUNK_TYPES ] [ 4 ] ;
sfxHandle_t chunkSound ;
sfxHandle_t grateSound ;
sfxHandle_t rockBreakSound ;
sfxHandle_t rockBounceSound [ 2 ] ;
sfxHandle_t metalBounceSound [ 2 ] ;
sfxHandle_t glassChunkSound ;
sfxHandle_t crateBreakSound [ 2 ] ;
qhandle_t hackerIconShader ;
// Saber shaders
//-----------------------------
qhandle_t forceCoronaShader ;
qhandle_t redSaberGlowShader ;
qhandle_t redSaberCoreShader ;
qhandle_t orangeSaberGlowShader ;
qhandle_t orangeSaberCoreShader ;
qhandle_t yellowSaberGlowShader ;
qhandle_t yellowSaberCoreShader ;
qhandle_t greenSaberGlowShader ;
qhandle_t greenSaberCoreShader ;
qhandle_t blueSaberGlowShader ;
qhandle_t blueSaberCoreShader ;
qhandle_t purpleSaberGlowShader ;
qhandle_t purpleSaberCoreShader ;
qhandle_t saberBlurShader ;
qhandle_t swordTrailShader ;
qhandle_t yellowDroppedSaberShader ;
qhandle_t rivetMarkShader ;
qhandle_t teamRedShader ;
qhandle_t teamBlueShader ;
qhandle_t powerDuelAllyShader ;
qhandle_t balloonShader ;
qhandle_t vchatShader ;
qhandle_t connectionShader ;
qhandle_t crosshairShader [ NUM_CROSSHAIRS ] ;
qhandle_t lagometerShader ;
qhandle_t backTileShader ;
qhandle_t numberShaders [ 11 ] ;
qhandle_t smallnumberShaders [ 11 ] ;
qhandle_t chunkyNumberShaders [ 11 ] ;
qhandle_t electricBodyShader ;
qhandle_t electricBody2Shader ;
qhandle_t fsrMarkShader ;
qhandle_t fslMarkShader ;
qhandle_t fshrMarkShader ;
qhandle_t fshlMarkShader ;
qhandle_t refractionShader ;
qhandle_t cloakedShader ;
qhandle_t boltShader ;
qhandle_t shadowMarkShader ;
//glass shard shader
qhandle_t glassShardShader ;
// wall mark shaders
qhandle_t wakeMarkShader ;
// Pain view shader
qhandle_t viewPainShader ;
qhandle_t viewPainShader_Shields ;
qhandle_t viewPainShader_ShieldsAndHealth ;
qhandle_t itemRespawningPlaceholder ;
qhandle_t itemRespawningRezOut ;
qhandle_t playerShieldDamage ;
qhandle_t protectShader ;
qhandle_t forceSightBubble ;
qhandle_t forceShell ;
qhandle_t sightShell ;
// Disruptor zoom graphics
qhandle_t disruptorMask ;
qhandle_t disruptorInsert ;
qhandle_t disruptorLight ;
qhandle_t disruptorInsertTick ;
qhandle_t disruptorChargeShader ;
// Binocular graphics
qhandle_t binocularCircle ;
qhandle_t binocularMask ;
qhandle_t binocularArrow ;
qhandle_t binocularTri ;
qhandle_t binocularStatic ;
qhandle_t binocularOverlay ;
// weapon effect models
qhandle_t lightningExplosionModel ;
// explosion assets
qhandle_t explosionModel ;
qhandle_t surfaceExplosionShader ;
qhandle_t disruptorShader ;
qhandle_t solidWhite ;
qhandle_t heartShader ;
// All the player shells
qhandle_t ysaliredShader ;
qhandle_t ysaliblueShader ;
qhandle_t ysalimariShader ;
qhandle_t boonShader ;
qhandle_t endarkenmentShader ;
qhandle_t enlightenmentShader ;
qhandle_t invulnerabilityShader ;
# ifdef JK2AWARDS
// medals shown during gameplay
qhandle_t medalImpressive ;
qhandle_t medalExcellent ;
qhandle_t medalGauntlet ;
qhandle_t medalDefend ;
qhandle_t medalAssist ;
qhandle_t medalCapture ;
# endif
// sounds
sfxHandle_t selectSound ;
sfxHandle_t footsteps [ FOOTSTEP_TOTAL ] [ 4 ] ;
sfxHandle_t winnerSound ;
sfxHandle_t loserSound ;
sfxHandle_t crackleSound ;
sfxHandle_t grenadeBounce1 ;
sfxHandle_t grenadeBounce2 ;
sfxHandle_t teamHealSound ;
sfxHandle_t teamRegenSound ;
sfxHandle_t teleInSound ;
sfxHandle_t teleOutSound ;
sfxHandle_t respawnSound ;
sfxHandle_t talkSound ;
sfxHandle_t landSound ;
sfxHandle_t fallSound ;
sfxHandle_t oneMinuteSound ;
sfxHandle_t fiveMinuteSound ;
sfxHandle_t threeFragSound ;
sfxHandle_t twoFragSound ;
sfxHandle_t oneFragSound ;
# ifdef JK2AWARDS
sfxHandle_t impressiveSound ;
sfxHandle_t excellentSound ;
sfxHandle_t deniedSound ;
sfxHandle_t humiliationSound ;
sfxHandle_t defendSound ;
# endif
/*
sfxHandle_t takenLeadSound ;
sfxHandle_t tiedLeadSound ;
sfxHandle_t lostLeadSound ;
*/
sfxHandle_t rollSound ;
sfxHandle_t watrInSound ;
sfxHandle_t watrOutSound ;
sfxHandle_t watrUnSound ;
sfxHandle_t noforceSound ;
sfxHandle_t deploySeeker ;
sfxHandle_t medkitSound ;
// teamplay sounds
# ifdef JK2AWARDS
sfxHandle_t captureAwardSound ;
# endif
sfxHandle_t redScoredSound ;
sfxHandle_t blueScoredSound ;
sfxHandle_t redLeadsSound ;
sfxHandle_t blueLeadsSound ;
sfxHandle_t teamsTiedSound ;
sfxHandle_t redFlagReturnedSound ;
sfxHandle_t blueFlagReturnedSound ;
sfxHandle_t redTookFlagSound ;
sfxHandle_t blueTookFlagSound ;
sfxHandle_t redYsalReturnedSound ;
sfxHandle_t blueYsalReturnedSound ;
sfxHandle_t redTookYsalSound ;
sfxHandle_t blueTookYsalSound ;
sfxHandle_t drainSound ;
//music blips
sfxHandle_t happyMusic ;
sfxHandle_t dramaticFailure ;
// tournament sounds
sfxHandle_t count3Sound ;
sfxHandle_t count2Sound ;
sfxHandle_t count1Sound ;
sfxHandle_t countFightSound ;
// new stuff
qhandle_t patrolShader ;
qhandle_t assaultShader ;
qhandle_t campShader ;
qhandle_t followShader ;
qhandle_t defendShader ;
qhandle_t teamLeaderShader ;
qhandle_t retrieveShader ;
qhandle_t escortShader ;
qhandle_t flagShaders [ 3 ] ;
qhandle_t halfShieldModel ;
qhandle_t halfShieldShader ;
qhandle_t demp2Shell ;
qhandle_t demp2ShellShader ;
qhandle_t cursor ;
qhandle_t selectCursor ;
qhandle_t sizeCursor ;
//weapon icons
qhandle_t weaponIcons [ WP_NUM_WEAPONS ] ;
qhandle_t weaponIcons_NA [ WP_NUM_WEAPONS ] ;
//holdable inventory item icons
qhandle_t invenIcons [ HI_NUM_HOLDABLE ] ;
//force power icons
qhandle_t forcePowerIcons [ NUM_FORCE_POWERS ] ;
qhandle_t rageRecShader ;
//other HUD parts
int currentBackground ;
qhandle_t weaponIconBackground ;
qhandle_t forceIconBackground ;
qhandle_t inventoryIconBackground ;
sfxHandle_t holocronPickup ;
// Zoom
sfxHandle_t zoomStart ;
sfxHandle_t zoomLoop ;
sfxHandle_t zoomEnd ;
sfxHandle_t disruptorZoomLoop ;
qhandle_t bdecal_bodyburn1 ;
qhandle_t bdecal_saberglow ;
qhandle_t bdecal_burn1 ;
qhandle_t mSaberDamageGlow ;
// For vehicles only now
sfxHandle_t noAmmoSound ;
} cgMedia_t ;
// Stored FX handles
//--------------------
typedef struct
{
//concussion
fxHandle_t concussionShotEffect ;
fxHandle_t concussionImpactEffect ;
// BRYAR PISTOL
fxHandle_t bryarShotEffect ;
fxHandle_t bryarPowerupShotEffect ;
fxHandle_t bryarWallImpactEffect ;
fxHandle_t bryarWallImpactEffect2 ;
fxHandle_t bryarWallImpactEffect3 ;
fxHandle_t bryarFleshImpactEffect ;
fxHandle_t bryarDroidImpactEffect ;
// BLASTER
fxHandle_t blasterShotEffect ;
fxHandle_t blasterWallImpactEffect ;
fxHandle_t blasterFleshImpactEffect ;
fxHandle_t blasterDroidImpactEffect ;
// DISRUPTOR
fxHandle_t disruptorRingsEffect ;
fxHandle_t disruptorProjectileEffect ;
fxHandle_t disruptorWallImpactEffect ;
fxHandle_t disruptorFleshImpactEffect ;
fxHandle_t disruptorAltMissEffect ;
fxHandle_t disruptorAltHitEffect ;
// BOWCASTER
fxHandle_t bowcasterShotEffect ;
fxHandle_t bowcasterImpactEffect ;
// REPEATER
fxHandle_t repeaterProjectileEffect ;
fxHandle_t repeaterAltProjectileEffect ;
fxHandle_t repeaterWallImpactEffect ;
fxHandle_t repeaterFleshImpactEffect ;
fxHandle_t repeaterAltWallImpactEffect ;
// DEMP2
fxHandle_t demp2ProjectileEffect ;
fxHandle_t demp2WallImpactEffect ;
fxHandle_t demp2FleshImpactEffect ;
// FLECHETTE
fxHandle_t flechetteShotEffect ;
fxHandle_t flechetteAltShotEffect ;
fxHandle_t flechetteWallImpactEffect ;
fxHandle_t flechetteFleshImpactEffect ;
// ROCKET
fxHandle_t rocketShotEffect ;
fxHandle_t rocketExplosionEffect ;
// THERMAL
fxHandle_t thermalExplosionEffect ;
fxHandle_t thermalShockwaveEffect ;
// TRIPMINE
fxHandle_t tripmineLaserFX ;
fxHandle_t tripmineGlowFX ;
//FORCE
fxHandle_t forceLightning ;
fxHandle_t forceLightningWide ;
fxHandle_t forceDrain ;
fxHandle_t forceDrainWide ;
fxHandle_t forceDrained ;
//TURRET
fxHandle_t turretShotEffect ;
//Whatever
fxHandle_t itemCone ;
fxHandle_t mSparks ;
fxHandle_t mSaberCut ;
fxHandle_t mTurretMuzzleFlash ;
fxHandle_t mSaberBlock ;
fxHandle_t mSaberBloodSparks ;
fxHandle_t mSaberBloodSparksSmall ;
fxHandle_t mSaberBloodSparksMid ;
fxHandle_t mSpawn ;
fxHandle_t mJediSpawn ;
fxHandle_t mBlasterDeflect ;
fxHandle_t mBlasterSmoke ;
fxHandle_t mForceConfustionOld ;
fxHandle_t mDisruptorDeathSmoke ;
fxHandle_t mSparkExplosion ;
fxHandle_t mTurretExplode ;
fxHandle_t mEmplacedExplode ;
fxHandle_t mEmplacedDeadSmoke ;
fxHandle_t mTripmineExplosion ;
fxHandle_t mDetpackExplosion ;
fxHandle_t mFlechetteAltBlow ;
fxHandle_t mStunBatonFleshImpact ;
fxHandle_t mAltDetonate ;
fxHandle_t mSparksExplodeNoSound ;
fxHandle_t mTripMineLaster ;
fxHandle_t mEmplacedMuzzleFlash ;
fxHandle_t mConcussionAltRing ;
fxHandle_t mHyperspaceStars ;
fxHandle_t mBlackSmoke ;
fxHandle_t mShipDestDestroyed ;
fxHandle_t mShipDestBurning ;
fxHandle_t mBobaJet ;
//footstep effects
fxHandle_t footstepMud ;
fxHandle_t footstepSand ;
fxHandle_t footstepSnow ;
fxHandle_t footstepGravel ;
//landing effects
fxHandle_t landingMud ;
fxHandle_t landingSand ;
fxHandle_t landingDirt ;
fxHandle_t landingSnow ;
fxHandle_t landingGravel ;
//splashes
fxHandle_t waterSplash ;
fxHandle_t lavaSplash ;
fxHandle_t acidSplash ;
} cgEffects_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
int siegeTeamSwitch ;
int showDuelHealths ;
gametype_t gametype ;
int debugMelee ;
int stepSlideFix ;
int noSpecMove ;
int dmflags ;
int teamflags ;
int fraglimit ;
int duel_fraglimit ;
int capturelimit ;
int timelimit ;
int maxclients ;
qboolean needpass ;
qboolean jediVmerc ;
int wDisable ;
int fDisable ;
char mapname [ MAX_QPATH ] ;
// char redTeam[MAX_QPATH];
// char blueTeam[MAX_QPATH];
int voteTime ;
int voteYes ;
int voteNo ;
qboolean voteModified ; // beep whenever changed
char voteString [ MAX_STRING_TOKENS ] ;
int teamVoteTime [ 2 ] ;
int teamVoteYes [ 2 ] ;
int teamVoteNo [ 2 ] ;
qboolean teamVoteModified [ 2 ] ; // beep whenever changed
char teamVoteString [ 2 ] [ MAX_STRING_TOKENS ] ;
int levelStartTime ;
int scores1 , scores2 ; // from configstrings
int jediMaster ;
int duelWinner ;
int duelist1 ;
int duelist2 ;
int duelist3 ;
// nmckenzie: DUEL_HEALTH. hmm.
int duelist1health ;
int duelist2health ;
int duelist3health ;
int redflag , blueflag ; // flag status from configstrings
int flagStatus ;
qboolean newHud ;
//
// locally derived information from gamestate
//
qhandle_t gameModels [ MAX_MODELS ] ;
sfxHandle_t gameSounds [ MAX_SOUNDS ] ;
fxHandle_t gameEffects [ MAX_FX ] ;
qhandle_t gameIcons [ MAX_ICONS ] ;
int numInlineModels ;
qhandle_t inlineDrawModel [ MAX_MODELS ] ;
vec3_t inlineModelMidpoints [ MAX_MODELS ] ;
clientInfo_t clientinfo [ MAX_CLIENTS ] ;
int cursorX ;
int cursorY ;
qboolean eventHandling ;
qboolean mouseCaptured ;
qboolean sizingHud ;
void * capturedItem ;
qhandle_t activeCursor ;
// media
cgMedia_t media ;
// effects
cgEffects_t effects ;
} cgs_t ;
typedef struct siegeExtended_s
{
int health ;
int maxhealth ;
int ammo ;
int weapon ;
int lastUpdated ;
} siegeExtended_t ;
//keep an entry available for each client
extern siegeExtended_t cg_siegeExtendedData [ MAX_CLIENTS ] ;
//==============================================================================
extern cgs_t cgs ;
extern cg_t cg ;
extern centity_t cg_entities [ MAX_GENTITIES ] ;
extern centity_t * cg_permanents [ MAX_GENTITIES ] ;
extern int cg_numpermanents ;
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_renderToTextureFX ;
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_drawRadar ;
extern vmCvar_t cg_drawVehLeadIndicator ;
extern vmCvar_t cg_drawAutomap ;
extern vmCvar_t cg_drawScores ;
extern vmCvar_t cg_dynamicCrosshair ;
extern vmCvar_t cg_dynamicCrosshairPrecision ;
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_showVehMiss ;
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_swingAngles ;
extern vmCvar_t cg_oldPainSounds ;
extern vmCvar_t cg_ragDoll ;
extern vmCvar_t cg_jumpSounds ;
extern vmCvar_t cg_autoMap ;
extern vmCvar_t cg_autoMapX ;
extern vmCvar_t cg_autoMapY ;
extern vmCvar_t cg_autoMapW ;
extern vmCvar_t cg_autoMapH ;
extern vmCvar_t bg_fighterAltControl ;
extern vmCvar_t cg_chatBox ;
extern vmCvar_t cg_chatBoxHeight ;
extern vmCvar_t cg_saberModelTraceEffect ;
extern vmCvar_t cg_saberClientVisualCompensation ;
extern vmCvar_t cg_g2TraceLod ;
extern vmCvar_t cg_fpls ;
extern vmCvar_t cg_ghoul2Marks ;
extern vmCvar_t cg_optvehtrace ;
extern vmCvar_t cg_saberDynamicMarks ;
extern vmCvar_t cg_saberDynamicMarkTime ;
extern vmCvar_t cg_saberContact ;
extern vmCvar_t cg_saberTrail ;
extern vmCvar_t cg_duelHeadAngles ;
extern vmCvar_t cg_speedTrail ;
extern vmCvar_t cg_auraShell ;
extern vmCvar_t cg_repeaterOrb ;
extern vmCvar_t cg_animBlend ;
extern vmCvar_t cg_dismember ;
extern vmCvar_t cg_thirdPersonSpecialCam ;
extern vmCvar_t cg_thirdPerson ;
extern vmCvar_t cg_thirdPersonRange ;
extern vmCvar_t cg_thirdPersonAngle ;
extern vmCvar_t cg_thirdPersonPitchOffset ;
extern vmCvar_t cg_thirdPersonVertOffset ;
extern vmCvar_t cg_thirdPersonCameraDamp ;
extern vmCvar_t cg_thirdPersonTargetDamp ;
extern vmCvar_t cg_thirdPersonAlpha ;
extern vmCvar_t cg_thirdPersonHorzOffset ;
extern vmCvar_t cg_stereoSeparation ;
extern vmCvar_t cg_lagometer ;
extern vmCvar_t cg_drawEnemyInfo ;
extern vmCvar_t cg_synchronousClients ;
extern vmCvar_t cg_stats ;
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_drawFriend ;
extern vmCvar_t cg_teamChatsOnly ;
extern vmCvar_t cg_noVoiceChats ;
extern vmCvar_t cg_noVoiceText ;
extern vmCvar_t cg_scorePlum ;
extern vmCvar_t cg_hudFiles ;
extern vmCvar_t cg_smoothClients ;
# include "../namespace_begin.h"
extern vmCvar_t pmove_fixed ;
extern vmCvar_t pmove_msec ;
# include "../namespace_end.h"
//extern vmCvar_t cg_pmove_fixed;
extern vmCvar_t cg_cameraOrbit ;
extern vmCvar_t cg_cameraOrbitDelay ;
extern vmCvar_t cg_timescaleFadeEnd ;
extern vmCvar_t cg_timescaleFadeSpeed ;
extern vmCvar_t cg_timescale ;
extern vmCvar_t cg_cameraMode ;
extern vmCvar_t cg_smallFont ;
extern vmCvar_t cg_bigFont ;
extern vmCvar_t cg_noTaunt ;
extern vmCvar_t cg_noProjectileTrail ;
//extern vmCvar_t cg_trueLightning;
//extern vmCvar_t cg_redTeamName;
//extern vmCvar_t cg_blueTeamName;
extern vmCvar_t cg_currentSelectedPlayer ;
extern vmCvar_t cg_currentSelectedPlayerName ;
//extern vmCvar_t cg_singlePlayerActive;
extern vmCvar_t cg_recordSPDemo ;
extern vmCvar_t cg_recordSPDemoName ;
extern vmCvar_t ui_myteam ;
extern vmCvar_t cg_snapshotTimeout ;
/*
Ghoul2 Insert Start
*/
extern vmCvar_t cg_debugBB ;
/*
Ghoul2 Insert End
*/
//
// cg_main.c
//
void CG_DrawMiscEnts ( void ) ;
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 ( qboolean bForceStart ) ;
void CG_UpdateCvars ( void ) ;
int CG_CrosshairPlayer ( void ) ;
int CG_LastAttacker ( void ) ;
void CG_LoadMenus ( const char * menuFile ) ;
void CG_KeyEvent ( int key , qboolean down ) ;
void CG_MouseEvent ( int x , int y ) ;
void CG_EventHandling ( int type ) ;
void CG_RankRunFrame ( void ) ;
void CG_SetScoreSelection ( void * menu ) ;
void CG_BuildSpectatorString ( void ) ;
void CG_NextInventory_f ( void ) ;
void CG_PrevInventory_f ( void ) ;
void CG_NextForcePower_f ( void ) ;
void CG_PrevForcePower_f ( 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_AddBufferedSound ( sfxHandle_t sfx ) ;
void CG_DrawActiveFrame ( int serverTime , stereoFrame_t stereoView , qboolean demoPlayback ) ;
/*
Ghoul2 Insert Start
*/
void CG_TestG2Model_f ( void ) ;
void CG_TestModelSurfaceOnOff_f ( void ) ;
void CG_ListModelSurfaces_f ( void ) ;
void CG_ListModelBones_f ( void ) ;
void CG_TestModelSetAnglespre_f ( void ) ;
void CG_TestModelSetAnglespost_f ( void ) ;
void CG_TestModelAnimate_f ( void ) ;
/*
Ghoul2 Insert End
*/
//
// cg_drawtools.c
//
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_DrawRotatePic ( float x , float y , float width , float height , float angle , qhandle_t hShader ) ;
void CG_DrawRotatePic2 ( float x , float y , float width , float height , float angle , qhandle_t hShader ) ;
void CG_DrawString ( float x , float y , const char * string ,
float charWidth , float charHeight , const float * modulate ) ;
void CG_DrawNumField ( int x , int y , int width , int value , int charWidth , int charHeight , int style , qboolean zeroFill ) ;
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 ) ;
void UI_DrawProportionalString ( int x , int y , const char * str , int style , vec4_t color ) ;
void UI_DrawScaledProportionalString ( int x , int y , const char * str , int style , vec4_t color , float scale ) ;
void CG_DrawRect ( float x , float y , float width , float height , float size , const float * color ) ;
void CG_DrawSides ( float x , float y , float w , float h , float size ) ;
void CG_DrawTopBottom ( float x , float y , float w , float h , float size ) ;
//
// cg_draw.c, cg_newDraw.c
//
extern int sortedTeamPlayers [ TEAM_MAXOVERLAY ] ;
extern int numSortedTeamPlayers ;
extern char systemChat [ 256 ] ;
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 , qboolean force2D ) ;
void CG_DrawTeamBackground ( int x , int y , int w , int h , float alpha , int team ) ;
void CG_OwnerDraw ( float x , float y , float w , float h , float text_x , float text_y , int ownerDraw , int ownerDrawFlags , int align , float special , float scale , vec4_t color , qhandle_t shader , int textStyle , int font ) ;
void CG_Text_Paint ( float x , float y , float scale , vec4_t color , const char * text , float adjust , int limit , int style , int iMenuFont ) ;
int CG_Text_Width ( const char * text , float scale , int iMenuFont ) ;
int CG_Text_Height ( const char * text , float scale , int iMenuFont ) ;
float CG_GetValue ( int ownerDraw ) ;
qboolean CG_OwnerDrawVisible ( int flags ) ;
void CG_RunMenuScript ( char * * args ) ;
qboolean CG_DeferMenuScript ( char * * args ) ;
void CG_ShowResponseHead ( void ) ;
void CG_GetTeamColor ( vec4_t * color ) ;
const char * CG_GetGameStatusText ( void ) ;
const char * CG_GetKillerText ( void ) ;
void CG_Draw3DModel ( float x , float y , float w , float h , qhandle_t model , void * ghoul2 , int g2radius , qhandle_t skin , vec3_t origin , vec3_t angles ) ;
void CG_Text_PaintChar ( float x , float y , float width , float height , float scale , float s , float t , float s2 , float t2 , qhandle_t hShader ) ;
const char * CG_GameTypeString ( void ) ;
qboolean CG_YourTeamHasFlag ( void ) ;
qboolean CG_OtherTeamHasFlag ( void ) ;
qhandle_t CG_StatusHandle ( int task ) ;
//
// cg_player.c
//
qboolean CG_RagDoll ( centity_t * cent , vec3_t forcedAngles ) ;
qboolean CG_G2TraceCollide ( trace_t * tr , const vec3_t mins , const vec3_t maxs , const vec3_t lastValidStart , const vec3_t lastValidEnd ) ;
void CG_AddGhoul2Mark ( int shader , float size , vec3_t start , vec3_t end , int entnum ,
vec3_t entposition , float entangle , void * ghoul2 , vec3_t scale , int lifeTime ) ;
void CG_CreateNPCClient ( clientInfo_t * * ci ) ;
void CG_DestroyNPCClient ( clientInfo_t * * ci ) ;
void CG_Player ( centity_t * cent ) ;
void CG_ResetPlayerEntity ( centity_t * cent ) ;
void CG_AddRefEntityWithPowerups ( refEntity_t * ent , entityState_t * state , int team ) ;
void CG_NewClientInfo ( int clientNum , qboolean entitiesInitialized ) ;
sfxHandle_t CG_CustomSound ( int clientNum , const char * soundName ) ;
void CG_PlayerShieldHit ( int entitynum , vec3_t angles , int amount ) ;
//
// 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_G2Trace ( 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 ) ;
void CG_ReattachLimb ( centity_t * source ) ;
//
// cg_ents.c
//
void CG_S_AddLoopingSound ( int entityNum , const vec3_t origin , const vec3_t velocity , sfxHandle_t sfx ) ;
void CG_S_AddRealLoopingSound ( int entityNum , const vec3_t origin , const vec3_t velocity , sfxHandle_t sfx ) ;
void CG_S_StopLoopingSound ( int entityNum , sfxHandle_t sfx ) ;
void CG_S_UpdateLoopingSounds ( int entityNum ) ;
void CG_SetEntitySoundPosition ( centity_t * cent ) ;
void CG_AddPacketEntities ( qboolean isPortal ) ;
void CG_ManualEntityRender ( centity_t * cent ) ;
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 ) ;
/*
Ghoul2 Insert Start
*/
void ScaleModelAxis ( refEntity_t * ent ) ;
/*
Ghoul2 Insert End
*/
//
// cg_turret.c
//
void TurretClientRun ( centity_t * ent ) ;
//
// cg_weapons.c
//
void CG_GetClientWeaponMuzzleBoltPoint ( int clIndex , vec3_t to ) ;
void CG_NextWeapon_f ( void ) ;
void CG_PrevWeapon_f ( void ) ;
void CG_Weapon_f ( void ) ;
void CG_WeaponClean_f ( void ) ;
void CG_RegisterWeapon ( int weaponNum ) ;
void CG_RegisterItemVisuals ( int itemNum ) ;
void CG_FireWeapon ( centity_t * cent , qboolean alt_fire ) ;
void CG_MissileHitWall ( int weapon , int clientNum , vec3_t origin , vec3_t dir , impactSound_t soundType , qboolean alt_fire , int charge ) ;
void CG_MissileHitPlayer ( int weapon , vec3_t origin , vec3_t dir , int entityNum , qboolean alt_fire ) ;
void CG_AddViewWeapon ( playerState_t * ps ) ;
void CG_AddPlayerWeapon ( refEntity_t * parent , playerState_t * ps , centity_t * cent , int team , vec3_t newAngles , qboolean thirdPerson ) ;
void CG_DrawWeaponSelect ( void ) ;
void CG_DrawIconBackground ( void ) ;
void CG_OutOfAmmoChange ( int oldWeapon ) ; // should this be in pmove?
//
// 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 ) ;
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 fadeInTime ,
int leFlags ,
qhandle_t hShader ) ;
void CG_BubbleTrail ( vec3_t start , vec3_t end , float spacing ) ;
void CG_GlassShatter ( int entnum , vec3_t dmgPt , vec3_t dmgDir , float dmgRadius , int maxShards ) ;
void CG_ScorePlum ( int client , vec3_t org , int score ) ;
void CG_Chunks ( int owner , vec3_t origin , const vec3_t normal , const vec3_t mins , const vec3_t maxs ,
float speed , int numChunks , material_t chunkType , int customChunk , float baseScale ) ;
void CG_MiscModelExplosion ( vec3_t mins , vec3_t maxs , int size , material_t chunkType ) ;
void CG_Bleed ( vec3_t origin , int entityNum ) ;
localEntity_t * CG_MakeExplosion ( vec3_t origin , vec3_t dir ,
qhandle_t hModel , int numframes , qhandle_t shader , int msec ,
qboolean isSprite , float scale , int flags ) ; // Overloaded in single player
void CG_SurfaceExplosion ( vec3_t origin , vec3_t normal , float radius , float shake_speed , qboolean smoke ) ;
void CG_TestLine ( vec3_t start , vec3_t end , int time , unsigned int color , int radius ) ;
void CG_InitGlass ( void ) ;
//
// 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_DrawOldScoreboard ( void ) ;
void CG_DrawOldTourneyScoreboard ( 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 ) ;
void CG_ShaderStateChanged ( void ) ;
//
// cg_playerstate.c
//
int CG_IsMindTricked ( int trickIndex1 , int trickIndex2 , int trickIndex3 , int trickIndex4 , int client ) ;
void CG_Respawn ( void ) ;
void CG_TransitionPlayerState ( playerState_t * ps , playerState_t * ops ) ;
void CG_CheckChangedPredictableEvents ( playerState_t * ps ) ;
//
// cg_siege.c
//
void CG_InitSiegeMode ( void ) ;
void CG_SiegeRoundOver ( centity_t * ent , int won ) ;
void CG_SiegeObjectiveCompleted ( centity_t * ent , int won , int objectivenum ) ;
//===============================================
//
// system traps
// These functions are how the cgame communicates with the main game system
//
# include "../namespace_begin.h"
// 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 ) ;
//rww - precision timer funcs... -ALWAYS- call end after start with supplied ptr, or you'll get a nasty memory leak.
//not that you should be using these outside of debug anyway.. because you shouldn't be. So don't.
void trap_PrecisionTimer_Start ( void * * theNewTimer ) ;
int trap_PrecisionTimer_End ( void * theTimer ) ;
// 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_VariableStringBuffer ( const char * var_name , char * buffer , int bufsize ) ;
int trap_Cvar_GetHiddenVarValue ( const char * name ) ;
// 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 ) ;
int trap_FS_GetFileList ( const char * path , const char * extension , char * listbuf , int bufsize ) ;
// 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 , qboolean SubBSP ) ;
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
int trap_S_GetVoiceVolume ( int entityNum ) ;
void trap_S_MuteSound ( int entityNum , int entchannel ) ;
void trap_S_StartSound ( vec3_t origin , int entityNum , int entchannel , sfxHandle_t sfx ) ;
void trap_S_StopLoopingSound ( int entnum ) ;
// 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_AddRealLoopingSound ( 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 ) ;
void trap_S_ShutUp ( qboolean shutUpFactor ) ;
sfxHandle_t trap_S_RegisterSound ( const char * sample ) ; // returns buzz if not found
void trap_S_StartBackgroundTrack ( const char * intro , const char * loop , qboolean bReturnWithoutStarting ) ; // empty name stops music
void trap_S_StopBackgroundTrack ( void ) ;
void trap_S_UpdateAmbientSet ( const char * name , vec3_t origin ) ;
void trap_AS_ParseSets ( void ) ;
void trap_AS_AddPrecacheEntry ( const char * name ) ;
int trap_S_AddLocalSet ( const char * name , vec3_t listener_origin , vec3_t origin , int entID , int time ) ;
sfxHandle_t trap_AS_GetBModelSound ( const char * name , int stage ) ;
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_RegisterShaderNoMip ( const char * name ) ; // returns all white if not found
qhandle_t trap_R_RegisterFont ( const char * name ) ;
int trap_R_Font_StrLenPixels ( const char * text , const int iFontIndex , const float scale ) ;
int trap_R_Font_StrLenChars ( const char * text ) ;
int trap_R_Font_HeightPixels ( const int iFontIndex , const float scale ) ;
void trap_R_Font_DrawString ( int ox , int oy , const char * text , const float * rgba , const int setIndex , int iCharLimit , const float scale ) ;
qboolean trap_Language_IsAsian ( void ) ;
qboolean trap_Language_UsesSpaces ( void ) ;
unsigned trap_AnyLanguage_ReadCharFromString ( const char * psText , int * piAdvanceCount , qboolean * pbIsTrailingPunctuation /* = NULL*/ ) ;
// 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_ClearDecals ( 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_AddPolysToScene ( qhandle_t hShader , int numVerts , const polyVert_t * verts , int numPolys ) ;
void trap_R_AddDecalToScene ( qhandle_t shader , const vec3_t origin , const vec3_t dir , float orientation , float r , float g , float b , float a , qboolean alphaFade , float radius , qboolean temporary ) ;
void trap_R_AddLightToScene ( const vec3_t org , float intensity , float r , float g , float b ) ;
int trap_R_LightForPoint ( vec3_t point , vec3_t ambientLight , vec3_t directedLight , vec3_t lightDir ) ;
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 ) ;
int trap_R_LerpTag ( orientation_t * tag , clipHandle_t mod , int startFrame , int endFrame ,
float frac , const char * tagName ) ;
// Does weird, barely controllable rotation behaviour
void trap_R_DrawRotatePic ( float x , float y , float w , float h ,
float s1 , float t1 , float s2 , float t2 , float a , qhandle_t hShader ) ;
// rotates image around exact center point of passed in coords
void trap_R_DrawRotatePic2 ( float x , float y , float w , float h ,
float s1 , float t1 , float s2 , float t2 , float a , qhandle_t hShader ) ;
void trap_R_SetRangeFog ( float range ) ;
void trap_R_SetRefractProp ( float alpha , float stretch , qboolean prepost , qboolean negate ) ;
void trap_R_RemapShader ( const char * oldShader , const char * newShader , const char * timeOffset ) ;
void trap_R_GetLightStyle ( int style , color4ub_t color ) ;
void trap_R_SetLightStyle ( int style , int color ) ;
void trap_R_GetBModelVerts ( int bmodelIndex , vec3_t * verts , vec3_t normal ) ;
void trap_R_GetDistanceCull ( float * f ) ;
void trap_R_GetRealRes ( int * w , int * h ) ; //get screen resolution -rww
void trap_R_AutomapElevAdj ( float newHeight ) ; //automap elevation setting -rww
qboolean trap_R_InitWireframeAutomap ( void ) ; //initialize automap -rww
void trap_FX_AddLine ( const vec3_t start , const vec3_t end , float size1 , float size2 , float sizeParm ,
float alpha1 , float alpha2 , float alphaParm ,
const vec3_t sRGB , const vec3_t eRGB , float rgbParm ,
int killTime , qhandle_t shader , int flags ) ;
// 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 ) ;
qboolean trap_GetDefaultState ( int entityIndex , entityState_t * state ) ;
// 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 , float mPitchOverride , float mYawOverride , float mSensitivityOverride , int fpSel , int invenSel , qboolean fighterControls ) ;
void trap_SetClientForceAngle ( int time , vec3_t angle ) ;
void trap_SetClientTurnExtent ( float turnAdd , float turnSub , int turnTime ) ;
void trap_OpenUIMenu ( int menuID ) ;
// aids for VM testing
void testPrintInt ( char * string , int i ) ;
void testPrintFloat ( char * string , float f ) ;
int trap_MemoryRemaining ( void ) ;
qboolean trap_Key_IsDown ( int keynum ) ;
int trap_Key_GetCatcher ( void ) ;
void trap_Key_SetCatcher ( int catcher ) ;
int trap_Key_GetKey ( const char * binding ) ;
void BG_CycleInven ( playerState_t * ps , int direction ) ;
int BG_ProperForceIndex ( int power ) ;
void BG_CycleForce ( playerState_t * ps , int direction ) ;
# include "../namespace_end.h"
typedef enum {
SYSTEM_PRINT ,
CHAT_PRINT ,
TEAMCHAT_PRINT
} q3print_t ; // bk001201 - warning: useless keyword or type name in empty declaration
# include "../namespace_begin.h"
int trap_CIN_PlayCinematic ( const char * arg0 , int xpos , int ypos , int width , int height , int bits ) ;
e_status trap_CIN_StopCinematic ( int handle ) ;
e_status trap_CIN_RunCinematic ( int handle ) ;
void trap_CIN_DrawCinematic ( int handle ) ;
void trap_CIN_SetExtents ( int handle , int x , int y , int w , int h ) ;
void trap_SnapVector ( float * v ) ;
qboolean trap_loadCamera ( const char * name ) ;
void trap_startCamera ( int time ) ;
qboolean trap_getCameraInfo ( int time , vec3_t * origin , vec3_t * angles ) ;
qboolean trap_GetEntityToken ( char * buffer , int bufferSize ) ;
qboolean trap_R_inPVS ( const vec3_t p1 , const vec3_t p2 , byte * mask ) ;
int trap_FX_InitSystem ( refdef_t * ) ;
void trap_FX_SetRefDef ( refdef_t * refdef ) ;
int trap_FX_RegisterEffect ( const char * file ) ;
void trap_FX_PlayEffect ( const char * file , vec3_t org , vec3_t fwd , int vol , int rad ) ; // builds arbitrary perp. right vector, does a cross product to define up
void trap_FX_PlayEntityEffect ( const char * file , vec3_t org , vec3_t axis [ 3 ] , const int boltInfo , const int entNum , int vol , int rad ) ;
void trap_FX_PlayEffectID ( int id , vec3_t org , vec3_t fwd , int vol , int rad ) ; // builds arbitrary perp. right vector, does a cross product to define up
void trap_FX_PlayPortalEffectID ( int id , vec3_t org , vec3_t fwd , int vol , int rad ) ; // builds arbitrary perp. right vector, does a cross product to define up
void trap_FX_PlayEntityEffectID ( int id , vec3_t org , vec3_t axis [ 3 ] , const int boltInfo , const int pGhoul2 , int vol , int rad ) ;
void trap_FX_PlayBoltedEffectID ( int id , vec3_t org , void * pGhoul2 , const int boltNum , const int entNum , const int modelNum , int iLooptime , qboolean isRelative ) ;
void trap_FX_AddScheduledEffects ( qboolean skyPortal ) ;
void trap_FX_Draw2DEffects ( float screenXScale , float screenYScale ) ;
qboolean trap_FX_FreeSystem ( void ) ;
void trap_FX_AdjustTime ( int time ) ;
void trap_FX_Reset ( void ) ;
//rww - additional funcs for adding custom incode stuff
void trap_FX_AddPoly ( addpolyArgStruct_t * p ) ;
void trap_FX_AddBezier ( addbezierArgStruct_t * p ) ;
void trap_FX_AddPrimitive ( effectTrailArgStruct_t * p ) ;
void trap_FX_AddSprite ( addspriteArgStruct_t * p ) ;
void trap_FX_AddElectricity ( addElectricityArgStruct_t * p ) ;
//void trap_SP_Print(const unsigned ID, byte *Data);
int trap_SP_GetStringTextString ( const char * text , char * buffer , int bufferLength ) ;
void trap_CG_RegisterSharedMemory ( char * memory ) ;
int trap_CM_RegisterTerrain ( const char * config ) ;
void trap_RMG_Init ( int terrainID , const char * terrainInfo ) ;
void trap_RE_InitRendererTerrain ( const char * info ) ;
void trap_R_WeatherContentsOverride ( int contents ) ;
void trap_R_WorldEffectCommand ( const char * cmd ) ;
void trap_WE_AddWeatherZone ( const vec3_t mins , const vec3_t maxs ) ;
qboolean trap_ROFF_Clean ( void ) ;
void trap_ROFF_UpdateEntities ( void ) ;
int trap_ROFF_Cache ( char * file ) ;
qboolean trap_ROFF_Play ( int entID , int roffID , qboolean doTranslation ) ;
qboolean trap_ROFF_Purge_Ent ( int entID ) ;
//rww - dynamic vm memory allocation!
void trap_TrueMalloc ( void * * ptr , int size ) ;
void trap_TrueFree ( void * * ptr ) ;
# include "../namespace_end.h"
void CG_ClearParticles ( void ) ;
void CG_AddParticles ( void ) ;
void CG_ParticleSnow ( qhandle_t pshader , vec3_t origin , vec3_t origin2 , int turb , float range , int snum ) ;
void CG_ParticleSmoke ( qhandle_t pshader , centity_t * cent ) ;
void CG_AddParticleShrapnel ( localEntity_t * le ) ;
void CG_ParticleSnowFlurry ( qhandle_t pshader , centity_t * cent ) ;
void CG_ParticleBulletDebris ( vec3_t org , vec3_t vel , int duration ) ;
void CG_ParticleSparks ( vec3_t org , vec3_t vel , int duration , float x , float y , float speed ) ;
void CG_ParticleDust ( centity_t * cent , vec3_t origin , vec3_t dir ) ;
void CG_ParticleMisc ( qhandle_t pshader , vec3_t origin , int size , int duration , float alpha ) ;
void CG_ParticleExplosion ( char * animStr , vec3_t origin , vec3_t vel , int duration , int sizeStart , int sizeEnd ) ;
const char * CG_GetStringEdString ( char * refSection , char * refName ) ;
extern qboolean initparticles ;
int CG_NewParticleArea ( int num ) ;
void FX_TurretProjectileThink ( centity_t * cent , const struct weaponInfo_s * weapon ) ;
void FX_TurretHitWall ( vec3_t origin , vec3_t normal ) ;
void FX_TurretHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
void FX_ConcussionHitWall ( vec3_t origin , vec3_t normal ) ;
void FX_ConcussionHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
void FX_ConcussionProjectileThink ( centity_t * cent , const struct weaponInfo_s * weapon ) ;
void FX_ConcAltShot ( vec3_t start , vec3_t end ) ;
//-----------------------------
// Effects related prototypes
//-----------------------------
// Environmental effects
void CG_Spark ( vec3_t origin , vec3_t dir ) ;
// Weapon prototypes
void FX_BryarHitWall ( vec3_t origin , vec3_t normal ) ;
void FX_BryarAltHitWall ( vec3_t origin , vec3_t normal , int power ) ;
void FX_BryarHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
void FX_BryarAltHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
void FX_BlasterProjectileThink ( centity_t * cent , const struct weaponInfo_s * weapon ) ;
void FX_BlasterAltFireThink ( centity_t * cent , const struct weaponInfo_s * weapon ) ;
void FX_BlasterWeaponHitWall ( vec3_t origin , vec3_t normal ) ;
void FX_BlasterWeaponHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
void FX_ForceDrained ( vec3_t origin , vec3_t dir ) ;
//-----------------------------
// Effects related prototypes
//-----------------------------
// Environmental effects
void CG_Spark ( vec3_t origin , vec3_t dir ) ;
// Weapon prototypes
void FX_BryarHitWall ( vec3_t origin , vec3_t normal ) ;
void FX_BryarAltHitWall ( vec3_t origin , vec3_t normal , int power ) ;
void FX_BryarHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
void FX_BryarAltHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
void FX_BlasterProjectileThink ( centity_t * cent , const struct weaponInfo_s * weapon ) ;
void FX_BlasterAltFireThink ( centity_t * cent , const struct weaponInfo_s * weapon ) ;
void FX_BlasterWeaponHitWall ( vec3_t origin , vec3_t normal ) ;
void FX_BlasterWeaponHitPlayer ( vec3_t origin , vec3_t normal , qboolean humanoid ) ;
# include "../namespace_begin.h"
void trap_G2API_CollisionDetect ( CollisionRecord_t * collRecMap , void * ghoul2 , const vec3_t angles , const vec3_t position , int frameNumber , int entNum , const vec3_t rayStart , const vec3_t rayEnd , const vec3_t scale , int traceFlags , int useLod , float fRadius ) ;
void trap_G2API_CollisionDetectCache ( CollisionRecord_t * collRecMap , void * ghoul2 , const vec3_t angles , const vec3_t position , int frameNumber , int entNum , const vec3_t rayStart , const vec3_t rayEnd , const vec3_t scale , int traceFlags , int useLod , float fRadius ) ;
/*
Ghoul2 Insert Start
*/
// CG specific API access
void trap_G2_ListModelSurfaces ( void * ghlInfo ) ;
void trap_G2_ListModelBones ( void * ghlInfo , int frame ) ;
void trap_G2_SetGhoul2ModelIndexes ( void * ghoul2 , qhandle_t * modelList , qhandle_t * skinList ) ;
qboolean trap_G2_HaveWeGhoul2Models ( void * ghoul2 ) ;
qboolean trap_G2API_GetBoltMatrix ( void * ghoul2 , const int modelIndex , const int boltIndex , mdxaBone_t * matrix ,
const vec3_t angles , const vec3_t position , const int frameNum , qhandle_t * modelList , vec3_t scale ) ;
qboolean trap_G2API_GetBoltMatrix_NoReconstruct ( void * ghoul2 , const int modelIndex , const int boltIndex , mdxaBone_t * matrix ,
const vec3_t angles , const vec3_t position , const int frameNum , qhandle_t * modelList , vec3_t scale ) ;
qboolean trap_G2API_GetBoltMatrix_NoRecNoRot ( void * ghoul2 , const int modelIndex , const int boltIndex , mdxaBone_t * matrix ,
const vec3_t angles , const vec3_t position , const int frameNum , qhandle_t * modelList , vec3_t scale ) ;
int trap_G2API_InitGhoul2Model ( void * * ghoul2Ptr , const char * fileName , int modelIndex , qhandle_t customSkin ,
qhandle_t customShader , int modelFlags , int lodBias ) ;
qboolean trap_G2API_SetSkin ( void * ghoul2 , int modelIndex , qhandle_t customSkin , qhandle_t renderSkin ) ;
int trap_G2API_CopyGhoul2Instance ( void * g2From , void * g2To , int modelIndex ) ;
void trap_G2API_CopySpecificGhoul2Model ( void * g2From , int modelFrom , void * g2To , int modelTo ) ;
void trap_G2API_DuplicateGhoul2Instance ( void * g2From , void * * g2To ) ;
qboolean trap_G2API_HasGhoul2ModelOnIndex ( void * ghlInfo , int modelIndex ) ;
qboolean trap_G2API_RemoveGhoul2Model ( void * ghlInfo , int modelIndex ) ;
qboolean trap_G2API_SkinlessModel ( void * ghlInfo , int modelIndex ) ;
//rww - for adding gore (or whatever) shaders to the g2 model
int trap_G2API_GetNumGoreMarks ( void * ghlInfo , int modelIndex ) ;
void trap_G2API_AddSkinGore ( void * ghlInfo , SSkinGoreData * gore ) ;
void trap_G2API_ClearSkinGore ( void * ghlInfo ) ;
int trap_G2API_Ghoul2Size ( void * ghlInfo ) ;
int trap_G2API_AddBolt ( void * ghoul2 , int modelIndex , const char * boneName ) ;
void trap_G2API_SetBoltInfo ( void * ghoul2 , int modelIndex , int boltInfo ) ;
qboolean trap_G2API_AttachEnt ( int * boltInfo , void * ghlInfoTo , int toBoltIndex , int entNum , int toModelNum ) ;
void trap_G2API_CleanGhoul2Models ( void * * ghoul2Ptr ) ;
qboolean trap_G2API_SetBoneAngles ( void * ghoul2 , int modelIndex , const char * boneName , const vec3_t angles , const int flags ,
const int up , const int right , const int forward , qhandle_t * modelList ,
int blendTime , int currentTime ) ;
void trap_G2API_GetGLAName ( void * ghoul2 , int modelIndex , char * fillBuf ) ;
qboolean trap_G2API_SetBoneAnim ( void * ghoul2 , const int modelIndex , const char * boneName , const int startFrame , const int endFrame ,
const int flags , const float animSpeed , const int currentTime , const float setFrame , const int blendTime ) ;
qboolean trap_G2API_GetBoneAnim ( void * ghoul2 , const char * boneName , const int currentTime , float * currentFrame , int * startFrame ,
int * endFrame , int * flags , float * animSpeed , int * modelList , const int modelIndex ) ;
qboolean trap_G2API_GetBoneFrame ( void * ghoul2 , const char * boneName , const int currentTime , float * currentFrame , int * modelList , const int modelIndex ) ;
qboolean trap_G2API_SetRootSurface ( void * ghoul2 , const int modelIndex , const char * surfaceName ) ;
qboolean trap_G2API_SetSurfaceOnOff ( void * ghoul2 , const char * surfaceName , const int flags ) ;
qboolean trap_G2API_SetNewOrigin ( void * ghoul2 , const int boltIndex ) ;
qboolean trap_G2API_DoesBoneExist ( void * ghoul2 , int modelIndex , const char * boneName ) ;
int trap_G2API_GetSurfaceRenderStatus ( void * ghoul2 , const int modelIndex , const char * surfaceName ) ;
int trap_G2API_GetTime ( void ) ;
void trap_G2API_SetTime ( int time , int clock ) ;
void trap_G2API_AbsurdSmoothing ( void * ghoul2 , qboolean status ) ;
void trap_G2API_SetRagDoll ( void * ghoul2 , sharedRagDollParams_t * params ) ;
void trap_G2API_AnimateG2Models ( void * ghoul2 , int time , sharedRagDollUpdateParams_t * params ) ;
//additional ragdoll options -rww
qboolean trap_G2API_RagPCJConstraint ( void * ghoul2 , const char * boneName , vec3_t min , vec3_t max ) ; //override default pcj bonee constraints
qboolean trap_G2API_RagPCJGradientSpeed ( void * ghoul2 , const char * boneName , const float speed ) ; //override the default gradient movespeed for a pcj bone
qboolean trap_G2API_RagEffectorGoal ( void * ghoul2 , const char * boneName , vec3_t pos ) ; //override an effector bone's goal position (world coordinates)
qboolean trap_G2API_GetRagBonePos ( void * ghoul2 , const char * boneName , vec3_t pos , vec3_t entAngles , vec3_t entPos , vec3_t entScale ) ; //current position of said bone is put into pos (world coordinates)
qboolean trap_G2API_RagEffectorKick ( void * ghoul2 , const char * boneName , vec3_t velocity ) ; //add velocity to a rag bone
qboolean trap_G2API_RagForceSolve ( void * ghoul2 , qboolean force ) ; //make sure we are actively performing solve/settle routines, if desired
qboolean trap_G2API_SetBoneIKState ( void * ghoul2 , int time , const char * boneName , int ikState , sharedSetBoneIKStateParams_t * params ) ;
qboolean trap_G2API_IKMove ( void * ghoul2 , int time , sharedIKMoveParams_t * params ) ;
//for removing bones so they no longer have their own seperate animation hierarchy. Or whatever reason you may have. -rww
qboolean trap_G2API_RemoveBone ( void * ghoul2 , const char * boneName , int modelIndex ) ;
void trap_G2API_AttachInstanceToEntNum ( void * ghoul2 , int entityNum , qboolean server ) ;
void trap_G2API_ClearAttachedInstance ( int entityNum ) ;
void trap_G2API_CleanEntAttachments ( void ) ;
qboolean trap_G2API_OverrideServer ( void * serverInstance ) ;
void trap_G2API_GetSurfaceName ( void * ghoul2 , int surfNumber , int modelIndex , char * fillBuf ) ;
# include "../namespace_end.h"
void CG_Init_CG ( void ) ;
void CG_Init_CGents ( void ) ;
void CG_SetGhoul2Info ( refEntity_t * ent , centity_t * cent ) ;
void CG_CreateBBRefEnts ( entityState_t * s1 , vec3_t origin ) ;
void CG_InitG2Weapons ( void ) ;
void CG_ShutDownG2Weapons ( void ) ;
void CG_CopyG2WeaponInstance ( centity_t * cent , int weaponNum , void * toGhoul2 ) ;
void * CG_G2WeaponInstance ( centity_t * cent , int weapon ) ;
void CG_CheckPlayerG2Weapons ( playerState_t * ps , centity_t * cent ) ;
void CG_SetSiegeTimerCvar ( int msec ) ;
/*
Ghoul2 Insert End
*/