mirror of
https://github.com/DrBeef/JKXR.git
synced 2024-12-02 00:53:12 +00:00
2073 lines
53 KiB
C
2073 lines
53 KiB
C
|
/*
|
||
|
===========================================================================
|
||
|
Copyright (C) 1999 - 2005, Id Software, Inc.
|
||
|
Copyright (C) 2000 - 2013, Raven Software, Inc.
|
||
|
Copyright (C) 2001 - 2013, Activision, Inc.
|
||
|
Copyright (C) 2005 - 2015, ioquake3 contributors
|
||
|
Copyright (C) 2013 - 2015, OpenJK contributors
|
||
|
|
||
|
This file is part of the OpenJK source code.
|
||
|
|
||
|
OpenJK is free software; you can redistribute it and/or modify it
|
||
|
under the terms of the GNU General Public License version 2 as
|
||
|
published by the Free Software Foundation.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
|
===========================================================================
|
||
|
*/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "qcommon/q_shared.h"
|
||
|
#include "rd-common/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.
|
||
|
|
||
|
#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 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
|
||
|
|
||
|
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 lerpFrame_s {
|
||
|
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 playerEntity_s {
|
||
|
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
|
||
|
// 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 clientInfo_s {
|
||
|
qboolean infoValid;
|
||
|
|
||
|
float colorOverride[3];
|
||
|
|
||
|
saberInfo_t saber[MAX_SABERS];
|
||
|
void *ghoul2Weapons[MAX_SABERS];
|
||
|
|
||
|
char saberName[64];
|
||
|
char saber2Name[64];
|
||
|
|
||
|
char name[MAX_QPATH];
|
||
|
char cleanname[MAX_QPATH];
|
||
|
team_t team;
|
||
|
|
||
|
int duelTeam;
|
||
|
|
||
|
int botSkill; // -1 = not bot, 0-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
|
||
|
|
||
|
} clientInfo_t;
|
||
|
|
||
|
//rww - cheap looping sound struct
|
||
|
#define MAX_CG_LOOPSOUNDS 8
|
||
|
|
||
|
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;
|
||
|
int 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 score_s {
|
||
|
int client;
|
||
|
int score;
|
||
|
int ping;
|
||
|
int time;
|
||
|
int scoreFlags;
|
||
|
int powerUps;
|
||
|
int accuracy;
|
||
|
int impressiveCount;
|
||
|
int excellentCount;
|
||
|
int gauntletCount;
|
||
|
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 itemInfo_s {
|
||
|
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 powerupInfo_s {
|
||
|
int itemNum;
|
||
|
} powerupInfo_t;
|
||
|
|
||
|
|
||
|
#define MAX_SKULLTRAIL 10
|
||
|
|
||
|
typedef struct skulltrail_s {
|
||
|
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 cg_s {
|
||
|
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 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;
|
||
|
matrix3_t autoAxis;
|
||
|
vec3_t autoAnglesFast;
|
||
|
matrix3_t autoAxisFast;
|
||
|
|
||
|
// view rendering
|
||
|
refdef_t refdef;
|
||
|
|
||
|
// 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_NETNAME];
|
||
|
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;
|
||
|
|
||
|
int oldammo;
|
||
|
int oldAmmoTime;
|
||
|
|
||
|
// 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
|
||
|
*/
|
||
|
|
||
|
// used for communication with the engine
|
||
|
union {
|
||
|
char raw[MAX_CG_SHARED_BUFFER_SIZE];
|
||
|
TCGPointContents pointContents;
|
||
|
TCGVectorData vectorData;
|
||
|
TCGGetBoltData getBoltData;
|
||
|
TCGTrace trace;
|
||
|
TCGG2Mark g2Mark;
|
||
|
TCGImpactMark impactMark;
|
||
|
ragCallbackDebugBox_t rcbDebugBox;
|
||
|
ragCallbackDebugLine_t rcbDebugLine;
|
||
|
ragCallbackBoneSnap_t rcbBoneSnap;
|
||
|
ragCallbackBoneInSolid_t rcbBoneInSolid;
|
||
|
ragCallbackTraceLine_t rcbTraceLine;
|
||
|
TCGMiscEnt miscEnt;
|
||
|
TCGIncomingConsoleCommand icc;
|
||
|
autoMapInput_t autoMapInput;
|
||
|
TCGCameraShake cameraShake;
|
||
|
} sharedBuffer;
|
||
|
|
||
|
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
|
||
|
|
||
|
qboolean spawning;
|
||
|
int numSpawnVars;
|
||
|
char *spawnVars[MAX_SPAWN_VARS][2]; // key / value pairs
|
||
|
int numSpawnVarChars;
|
||
|
char spawnVarChars[MAX_SPAWN_VARS_CHARS];
|
||
|
|
||
|
} 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 );
|
||
|
|
||
|
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 cgMedia_s {
|
||
|
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 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 retrieveShader;
|
||
|
qhandle_t escortShader;
|
||
|
|
||
|
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 cgEffects_s {
|
||
|
//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 mTripMineLaser;
|
||
|
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;
|
||
|
|
||
|
#define MAX_STATIC_MODELS 4000
|
||
|
|
||
|
typedef struct cg_staticmodel_s {
|
||
|
qhandle_t model;
|
||
|
vec3_t org;
|
||
|
matrix3_t axes;
|
||
|
float radius;
|
||
|
float zoffset;
|
||
|
} cg_staticmodel_t;
|
||
|
|
||
|
// The client game static (cgs) structure hold everything
|
||
|
// loaded or calculated from the gamestate. It will NOT
|
||
|
// be cleared when a tournament restart is done, allowing
|
||
|
// all clients to begin playing instantly
|
||
|
typedef struct cgs_s {
|
||
|
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 fraglimit;
|
||
|
int duel_fraglimit;
|
||
|
int capturelimit;
|
||
|
int timelimit;
|
||
|
int maxclients;
|
||
|
qboolean needpass;
|
||
|
qboolean jediVmerc;
|
||
|
int wDisable;
|
||
|
int fDisable;
|
||
|
|
||
|
char mapname[MAX_QPATH];
|
||
|
char rawmapname[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;
|
||
|
|
||
|
int numMiscStaticModels;
|
||
|
cg_staticmodel_t miscStaticModels[MAX_STATIC_MODELS];
|
||
|
|
||
|
} 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];
|
||
|
|
||
|
// cg_cvar.c
|
||
|
#define XCVAR_PROTO
|
||
|
#include "cg_xcvar.h"
|
||
|
#undef XCVAR_PROTO
|
||
|
void CG_RegisterCvars( void );
|
||
|
void CG_UpdateCvars( void );
|
||
|
|
||
|
//
|
||
|
// cg_main.c
|
||
|
//
|
||
|
const char *CG_ConfigString( int index );
|
||
|
const char *CG_Argv( int arg );
|
||
|
|
||
|
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 CG_DrawProportionalString( int x, int y, const char* str, int style, vec4_t color );
|
||
|
void CG_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);
|
||
|
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 );
|
||
|
|
||
|
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_spawn.c
|
||
|
//
|
||
|
qboolean CG_SpawnString( const char *key, const char *defaultString, char **out );
|
||
|
// spawn string returns a temporary reference, you must CopyString() if you want to keep it
|
||
|
qboolean CG_SpawnFloat( const char *key, const char *defaultString, float *out );
|
||
|
qboolean CG_SpawnInt( const char *key, const char *defaultString, int *out );
|
||
|
qboolean CG_SpawnBoolean( const char *key, const char *defaultString, qboolean *out );
|
||
|
qboolean CG_SpawnVector( const char *key, const char *defaultString, float *out );
|
||
|
void CG_ParseEntitiesFromString( 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);
|
||
|
|
||
|
|
||
|
|
||
|
//===============================================
|
||
|
|
||
|
void BG_CycleInven(playerState_t *ps, int direction);
|
||
|
int BG_ProperForceIndex(int power);
|
||
|
void BG_CycleForce(playerState_t *ps, int direction);
|
||
|
|
||
|
const char *CG_GetStringEdString(char *refSection, char *refName);
|
||
|
|
||
|
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 );
|
||
|
|
||
|
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 );
|
||
|
|
||
|
void CG_ClearLightStyles (void);
|
||
|
void CG_RunLightStyles (void);
|
||
|
void CG_SetLightstyle (int i);
|
||
|
|
||
|
/*
|
||
|
Ghoul2 Insert End
|
||
|
*/
|
||
|
|
||
|
extern cgameImport_t *trap;
|