Sync CGame with ioquake3

Fix clientNum in engine/code/cgame/cg_players.c
Add \n to printf in engine/code/cgame/cg_snapshot.c
Misc whitespace and comment syncing to ioq3 in engine/code/cgame/
This commit is contained in:
zturtleman 2017-12-03 11:36:57 +00:00
parent c55f11d8b9
commit 7f60501f09
18 changed files with 209 additions and 319 deletions

View file

@ -738,4 +738,3 @@ void CG_InitConsoleCommands( void ) {
trap_AddCommand ("teamtask");
trap_AddCommand ("loaddefered"); // spelled wrong, but not changing for demo
}

View file

@ -545,21 +545,18 @@ static void CG_DrawStatusBar( void ) {
vec4_t hcolor;
vec3_t angles;
vec3_t origin;
#ifdef MISSIONPACK
qhandle_t handle;
#endif
static float colors[4][4] = {
// { 0.2, 1.0, 0.2, 1.0 } , { 1.0, 0.2, 0.2, 1.0 }, {0.5, 0.5, 0.5, 1} };
{ 1.0f, 0.69f, 0.0f, 1.0f } , // normal
{ 1.0f, 0.2f, 0.2f, 1.0f }, // low health
{0.5f, 0.5f, 0.5f, 1.0f}, // weapon firing
{ 1.0f, 1.0f, 1.0f, 1.0f } }; // health > 100
{ 1.0f, 0.69f, 0.0f, 1.0f }, // normal
{ 1.0f, 0.2f, 0.2f, 1.0f }, // low health
{ 0.5f, 0.5f, 0.5f, 1.0f }, // weapon firing
{ 1.0f, 1.0f, 1.0f, 1.0f } }; // health > 100
if ( cg_drawStatus.integer == 0 ) {
return;
}
// draw the team background
CG_DrawTeamBackground( 0, 420, 640, 60, 0.33f, cg.snap->ps.persistant[PERS_TEAM] );
@ -596,20 +593,6 @@ static void CG_DrawStatusBar( void ) {
CG_Draw3DModel( 370 + CHAR_WIDTH*3 + TEXT_ICON_SPACE, 432, ICON_SIZE, ICON_SIZE,
cgs.media.armorModel, 0, origin, angles );
}
#ifdef MISSIONPACK
if( cgs.gametype == GT_HARVESTER ) {
origin[0] = 90;
origin[1] = 0;
origin[2] = -10;
angles[YAW] = ( cg.time & 2047 ) * 360 / 2048.0;
if( cg.snap->ps.persistant[PERS_TEAM] == TEAM_BLUE ) {
handle = cgs.media.redCubeModel;
} else {
handle = cgs.media.blueCubeModel;
}
CG_Draw3DModel( 640 - (TEXT_ICON_SPACE + ICON_SIZE), 416, ICON_SIZE, ICON_SIZE, handle, 0, origin, angles );
}
#endif
//
// ammo
//
@ -682,31 +665,7 @@ static void CG_DrawStatusBar( void ) {
}
}
#ifdef MISSIONPACK
//
// cubes
//
if( cgs.gametype == GT_HARVESTER ) {
value = ps->generic1;
if( value > 99 ) {
value = 99;
}
trap_R_SetColor( colors[0] );
CG_DrawField (640 - (CHAR_WIDTH*2 + TEXT_ICON_SPACE + ICON_SIZE), 432, 2, value);
trap_R_SetColor( NULL );
// if we didn't draw a 3D icon, draw a 2D icon for armor
if ( !cg_draw3dIcons.integer && cg_drawIcons.integer ) {
if( cg.snap->ps.persistant[PERS_TEAM] == TEAM_BLUE ) {
handle = cgs.media.redCubeIcon;
} else {
handle = cgs.media.blueCubeIcon;
}
CG_DrawPic( 640 - (TEXT_ICON_SPACE + ICON_SIZE), 432, ICON_SIZE, ICON_SIZE, handle );
}
}
#endif
}
#endif
@ -1650,9 +1609,9 @@ static float CG_DrawPowerups( float y ) {
float size;
float f;
static float colors[2][4] = {
{ 0.2f, 1.0f, 0.2f, 1.0f } ,
{ 1.0f, 0.2f, 0.2f, 1.0f }
};
{ 0.2f, 1.0f, 0.2f, 1.0f } ,
{ 1.0f, 0.2f, 0.2f, 1.0f }
};
ps = &cg.snap->ps;
@ -1872,7 +1831,7 @@ static float CG_DrawRallyPowerups( float y ) {
return y;
}
#endif
#endif // MISSIONPACK
// Q3Rally Code END
@ -3153,9 +3112,6 @@ static void CG_DrawWarmup( void ) {
*/
// Q3Rally Code END
//==================================================================================
#ifdef MISSIONPACK
/*
@ -3265,7 +3221,6 @@ static void CG_Draw2D(stereoFrame_t stereoFrame)
CG_DrawTeamVote();
CG_DrawLagometer();
#ifdef MISSIONPACK
if (!cg_paused.integer) {
@ -3358,4 +3313,3 @@ void CG_DrawActive( stereoFrame_t stereoView ) {

View file

@ -458,11 +458,6 @@ void CG_ColorForHealth( vec4_t hcolor ) {
}
// bk001205 - code below duplicated in q3_ui/ui-atoms.c
// bk001205 - FIXME: does this belong in ui_shared.c?
// bk001205 - FIXME: HARD_LINKED flags not visible here
#ifndef Q3_STATIC // bk001205 - q_shared defines not visible here
/*
=================
UI_DrawProportionalString2
@ -769,7 +764,7 @@ UI_DrawBannerString
static void UI_DrawBannerString2( int x, int y, const char* str, vec4_t color )
{
const char* s;
unsigned char ch; // bk001204 : array subscript
unsigned char ch;
float ax;
float ay;
float aw;
@ -879,7 +874,7 @@ int UI_ProportionalStringWidth( const char* str ) {
static void UI_DrawProportionalString2( int x, int y, const char* str, vec4_t color, float sizeScale, qhandle_t charset )
{
const char* s;
unsigned char ch; // bk001204 - unsigned
unsigned char ch;
float ax;
float ay;
float aw;
@ -893,7 +888,7 @@ static void UI_DrawProportionalString2( int x, int y, const char* str, vec4_t co
trap_R_SetColor( color );
ax = x * cgs.screenXScale + cgs.screenXBias;
ay = y * cgs.screenXScale;
ay = y * cgs.screenYScale;
s = str;
while ( *s )
@ -994,4 +989,3 @@ void UI_DrawProportionalString( int x, int y, const char* str, int style, vec4_t
UI_DrawProportionalString2( x, y, str, color, sizeScale, cgs.media.charsetProp );
}
#endif // Q3STATIC

View file

@ -132,7 +132,7 @@ static void CG_EntityEffects( centity_t *cent ) {
CG_SetEntitySoundPosition( cent );
// add loop sound
if ( cent->currentState.loopSound) {
if ( cent->currentState.loopSound ) {
if (cent->currentState.eType != ET_SPEAKER) {
trap_S_AddLoopingSound( cent->currentState.number, cent->lerpOrigin, vec3_origin,
cgs.gameSounds[ cent->currentState.loopSound ] );
@ -144,7 +144,7 @@ static void CG_EntityEffects( centity_t *cent ) {
else {
trap_S_StopLoopingSound(cent->currentState.number);
}
// constant light glow
if(cent->currentState.constantLight)
@ -529,15 +529,14 @@ static void CG_Missile( centity_t *cent ) {
return;
}
if ( cent->currentState.weapon == WP_FLAME_THROWER ) {
ent.reType = RT_SPRITE;
ent.radius = 32;
ent.rotation = 0;
ent.customShader = cgs.media.flameBallShader;
trap_R_AddRefEntityToScene( &ent );
return;
}
if ( cent->currentState.weapon == WP_FLAME_THROWER ) {
ent.reType = RT_SPRITE;
ent.radius = 32;
ent.rotation = 0;
ent.customShader = cgs.media.flameBallShader;
trap_R_AddRefEntityToScene( &ent );
return;
}
// Q3Rally Code Start
if (cent->currentState.weapon == RWP_MINE){
@ -1179,16 +1178,16 @@ void CG_AddCEntity( centity_t *cent ) {
break;
// Q3Rally Code Start
case ET_BREAKGLASS:
CG_Mover( cent );
break;
case ET_BREAKWOOD:
CG_Mover( cent );
break;
case ET_BREAKMETAL:
CG_Mover( cent );
break;
CG_Mover( cent );
break;
case ET_BREAKWOOD:
CG_Mover( cent );
break;
case ET_BREAKMETAL:
CG_Mover( cent );
break;
// Q3Rally Code END
case ET_BEAM:
case ET_BEAM:
CG_Beam( cent );
break;
case ET_PORTAL:

View file

@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "cg_local.h"
// for the voice chats
#ifdef MISSIONPACK // bk001205
#ifdef MISSIONPACK
#include "../../ui/menudef.h"
#endif
//==========================================================================
@ -247,8 +247,8 @@ static void CG_Obituary( entityState_t *ent ) {
message = "should have used a smaller gun";
break;
case MOD_FLAME_THROWER:
message = "was flame grilled by";
break;
message = "was flame grilled by";
break;
#ifdef MISSIONPACK
case MOD_PROXIMITY_MINE:
if( gender == GENDER_FEMALE ) {
@ -1091,7 +1091,6 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
}
break;
#ifdef MISSIONPACK
case EV_PROXIMITY_MINE_STICK:
DEBUGNAME("EV_PROXIMITY_MINE_STICK");
@ -1325,7 +1324,6 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
}
case EV_PAIN:
// local player sounds are triggered in CG_CheckLocalSounds,
// so ignore events on the player
DEBUGNAME("EV_PAIN");
@ -1417,8 +1415,6 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
// Q3Rally Code END
break;
case EV_STOPLOOPINGSOUND:
DEBUGNAME("EV_STOPLOOPINGSOUND");
trap_S_StopLoopingSound( es->number );
@ -1518,6 +1514,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
CG_Error( "Unknown event: %i", event );
break;
}
}

View file

@ -822,8 +822,8 @@ typedef struct {
qhandle_t charsetPropB;
qhandle_t whiteShader;
// Q3Rally Code Start
qhandle_t flameBallShader;
qhandle_t flameExplosionShader;
qhandle_t flameBallShader;
qhandle_t flameExplosionShader;
// Q3Rally Code END
#ifdef MISSIONPACK
@ -973,17 +973,17 @@ typedef struct {
qhandle_t waterBubbleShader;
qhandle_t bloodTrailShader;
// Q3Rally Code Start
qhandle_t glass01;
qhandle_t glass02;
qhandle_t glass03;
qhandle_t glass01;
qhandle_t glass02;
qhandle_t glass03;
qhandle_t wood01;
qhandle_t wood02;
qhandle_t wood03;
qhandle_t wood01;
qhandle_t wood02;
qhandle_t wood03;
qhandle_t metal01;
qhandle_t metal02;
qhandle_t metal03;
qhandle_t metal01;
qhandle_t metal02;
qhandle_t metal03;
// Q3Rally Code END
#ifdef MISSIONPACK

View file

@ -419,7 +419,6 @@ static cvarTable_t cvarTable[] = {
{ &cg_smoothClients, "cg_smoothClients", "0", CVAR_USERINFO | CVAR_ARCHIVE},
{ &cg_cameraMode, "com_cameraMode", "0", CVAR_CHEAT},
{ &pmove_fixed, "pmove_fixed", "0", CVAR_SYSTEMINFO},
{ &pmove_msec, "pmove_msec", "8", CVAR_SYSTEMINFO},
#ifdef MISSIONPACK
@ -431,7 +430,7 @@ static cvarTable_t cvarTable[] = {
{ &cg_oldRail, "cg_oldRail", "1", CVAR_ARCHIVE},
{ &cg_oldRocket, "cg_oldRocket", "1", CVAR_ARCHIVE},
{ &cg_oldPlasma, "cg_oldPlasma", "1", CVAR_ARCHIVE},
{ &cg_trueLightning, "cg_trueLightning", "0.0", CVAR_ARCHIVE},
{ &cg_trueLightning, "cg_trueLightning", "0.0", CVAR_ARCHIVE}
// { &cg_pmove_fixed, "cg_pmove_fixed", "0", CVAR_USERINFO | CVAR_ARCHIVE }
};
@ -559,9 +558,6 @@ void QDECL CG_Error( const char *msg, ... ) {
trap_Error( text );
}
#ifndef CGAME_HARD_LINKED
// this is only here so the functions in q_shared.c and bg_*.c can link (FIXME)
void QDECL Com_Error( int level, const char *error, ... ) {
va_list argptr;
char text[1024];
@ -584,8 +580,6 @@ void QDECL Com_Printf( const char *msg, ... ) {
trap_Print( text );
}
#endif
/*
================
CG_Argv

View file

@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
#ifndef MISSIONPACK // bk001204
#ifndef MISSIONPACK
#error This file not be used for classic Q3A.
#endif
@ -41,7 +41,7 @@ int drawTeamOverlayModificationCount = -1;
//static char teamChat1[256];
//static char teamChat2[256];
void CG_InitTeamChat() {
void CG_InitTeamChat(void) {
memset(teamChat1, 0, sizeof(teamChat1));
memset(teamChat2, 0, sizeof(teamChat2));
memset(systemChat, 0, sizeof(systemChat));
@ -56,7 +56,7 @@ void CG_SetPrintString(int type, const char *p) {
}
}
void CG_CheckOrderPending() {
void CG_CheckOrderPending(void) {
if (cgs.gametype < GT_CTF) {
return;
}
@ -120,7 +120,7 @@ void CG_CheckOrderPending() {
}
}
static void CG_SetSelectedPlayerName() {
static void CG_SetSelectedPlayerName( void ) {
if (cg_currentSelectedPlayer.integer >= 0 && cg_currentSelectedPlayer.integer < numSortedTeamPlayers) {
clientInfo_t *ci = cgs.clientinfo + sortedTeamPlayers[cg_currentSelectedPlayer.integer];
if (ci) {
@ -132,14 +132,14 @@ static void CG_SetSelectedPlayerName() {
trap_Cvar_Set("cg_selectedPlayerName", "Everyone");
}
}
int CG_GetSelectedPlayer() {
int CG_GetSelectedPlayer( void ) {
if (cg_currentSelectedPlayer.integer < 0 || cg_currentSelectedPlayer.integer >= numSortedTeamPlayers) {
cg_currentSelectedPlayer.integer = 0;
}
return cg_currentSelectedPlayer.integer;
}
void CG_SelectNextPlayer() {
void CG_SelectNextPlayer( void ) {
CG_CheckOrderPending();
if (cg_currentSelectedPlayer.integer >= 0 && cg_currentSelectedPlayer.integer < numSortedTeamPlayers) {
cg_currentSelectedPlayer.integer++;
@ -149,7 +149,7 @@ void CG_SelectNextPlayer() {
CG_SetSelectedPlayerName();
}
void CG_SelectPrevPlayer() {
void CG_SelectPrevPlayer( void ) {
CG_CheckOrderPending();
if (cg_currentSelectedPlayer.integer > 0 && cg_currentSelectedPlayer.integer < numSortedTeamPlayers) {
cg_currentSelectedPlayer.integer--;
@ -168,22 +168,21 @@ static void CG_DrawPlayerArmorIcon( rectDef_t *rect, qboolean draw2D ) {
return;
}
if ( draw2D || !cg_draw3dIcons.integer && cg_drawIcons.integer ) {
if ( draw2D || ( !cg_draw3dIcons.integer && cg_drawIcons.integer) ) {
CG_DrawPic( rect->x, rect->y + rect->h/2 + 1, rect->w, rect->h, cgs.media.armorIcon );
} else if (cg_draw3dIcons.integer) {
VectorClear( angles );
origin[0] = 90;
origin[1] = 0;
origin[2] = -10;
angles[YAW] = ( cg.time & 2047 ) * 360 / 2048.0;
angles[YAW] = ( cg.time & 2047 ) * 360 / 2048.0f;
CG_Draw3DModel( rect->x, rect->y, rect->w, rect->h, cgs.media.armorModel, 0, origin, angles );
}
}
static void CG_DrawPlayerArmorValue(rectDef_t *rect, float scale, vec4_t color, qhandle_t shader, int textStyle) {
char num[16];
int value;
int value;
playerState_t *ps;
ps = &cg.snap->ps;
@ -208,7 +207,7 @@ static void CG_DrawPlayerAmmoIcon( rectDef_t *rect, qboolean draw2D ) {
cent = &cg_entities[cg.snap->ps.clientNum];
if ( draw2D || !cg_draw3dIcons.integer && cg_drawIcons.integer ) {
if ( draw2D || (!cg_draw3dIcons.integer && cg_drawIcons.integer) ) {
qhandle_t icon;
icon = cg_weapons[ cg.predictedPlayerState.weapon ].ammoIcon;
if ( icon ) {
@ -792,6 +791,10 @@ static void CG_OneFlagStatus(rectDef_t *rect) {
static void CG_DrawCTFPowerUp(rectDef_t *rect) {
int value;
if (cgs.gametype < GT_CTF) {
return;
}
value = cg.snap->ps.stats[STAT_PERSISTANT_POWERUP];
if ( value ) {
CG_RegisterItemVisuals( value );
@ -935,7 +938,7 @@ float CG_GetValue(int ownerDraw) {
return -1;
}
qboolean CG_OtherTeamHasFlag() {
qboolean CG_OtherTeamHasFlag(void) {
if (cgs.gametype == GT_CTF || cgs.gametype == GT_1FCTF) {
int team = cg.snap->ps.persistant[PERS_TEAM];
if (cgs.gametype == GT_1FCTF) {
@ -959,7 +962,7 @@ qboolean CG_OtherTeamHasFlag() {
return qfalse;
}
qboolean CG_YourTeamHasFlag() {
qboolean CG_YourTeamHasFlag(void) {
if (cgs.gametype == GT_CTF || cgs.gametype == GT_1FCTF) {
int team = cg.snap->ps.persistant[PERS_TEAM];
if (cgs.gametype == GT_1FCTF) {
@ -1061,7 +1064,7 @@ qboolean CG_OwnerDrawVisible(int flags) {
}
if (flags & CG_SHOW_HEALTHOK) {
if (cg.snap->ps.stats[STAT_HEALTH] > 25) {
if (cg.snap->ps.stats[STAT_HEALTH] >= 25) {
return qtrue;
}
}
@ -1114,7 +1117,7 @@ static void CG_DrawAreaChat(rectDef_t *rect, float scale, vec4_t color, qhandle_
CG_Text_Paint(rect->x, rect->y + rect->h, scale, color, teamChat2, 0, 0, 0);
}
const char *CG_GetKillerText() {
const char *CG_GetKillerText(void) {
const char *s = "";
if ( cg.killerName[0] ) {
s = va("Fragged by %s", cg.killerName );
@ -1150,7 +1153,7 @@ static void CG_Draw2ndPlace(rectDef_t *rect, float scale, vec4_t color, qhandle_
}
}
const char *CG_GetGameStatusText() {
const char *CG_GetGameStatusText(void) {
const char *s = "";
if ( cgs.gametype < GT_TEAM) {
if (cg.snap->ps.persistant[PERS_TEAM] != TEAM_SPECTATOR ) {
@ -1197,7 +1200,7 @@ static void CG_DrawGameStatus(rectDef_t *rect, float scale, vec4_t color, qhandl
CG_Text_Paint(rect->x, rect->y + rect->h, scale, color, CG_GetGameStatusText(), 0, 0, textStyle);
}
const char *CG_GameTypeString() {
const char *CG_GameTypeString(void) {
if ( cgs.gametype == GT_FFA ) {
return "Free For All";
} else if ( cgs.gametype == GT_TEAM ) {
@ -1222,7 +1225,7 @@ static void CG_Text_Paint_Limit(float *maxX, float x, float y, float scale, vec4
vec4_t newColor;
glyphInfo_t *glyph;
if (text) {
const char *s = text;
const char *s = text;
float max = *maxX;
float useScale;
fontInfo_t *font = &cgDC.Assets.textFont;
@ -1749,7 +1752,7 @@ CG_HideTeamMenus
==================
*/
void CG_HideTeamMenu() {
void CG_HideTeamMenu( void ) {
Menus_CloseByName("teamMenu");
Menus_CloseByName("getMenu");
}
@ -1760,7 +1763,7 @@ CG_ShowTeamMenus
==================
*/
void CG_ShowTeamMenu() {
void CG_ShowTeamMenu( void ) {
Menus_OpenByName("teamMenu");
}
@ -1830,7 +1833,7 @@ int CG_ClientNumFromName(const char *p) {
return -1;
}
void CG_ShowResponseHead() {
void CG_ShowResponseHead(void) {
Menus_OpenByName("voiceMenu");
trap_Cvar_Set("cl_conXOffset", "72");
cg.voiceTime = cg.time;
@ -1842,17 +1845,17 @@ void CG_RunMenuScript(char **args) {
void CG_GetTeamColor(vec4_t *color) {
if (cg.snap->ps.persistant[PERS_TEAM] == TEAM_RED) {
(*color)[0] = 1;
(*color)[3] = .25f;
(*color)[1] = (*color)[2] = 0;
(*color)[0] = 1.0f;
(*color)[3] = 0.25f;
(*color)[1] = (*color)[2] = 0.0f;
} else if (cg.snap->ps.persistant[PERS_TEAM] == TEAM_BLUE) {
(*color)[0] = (*color)[1] = 0;
(*color)[2] = 1;
(*color)[3] = .25f;
(*color)[0] = (*color)[1] = 0.0f;
(*color)[2] = 1.0f;
(*color)[3] = 0.25f;
} else {
(*color)[0] = (*color)[2] = 0;
(*color)[1] = .17f;
(*color)[3] = .25f;
(*color)[0] = (*color)[2] = 0.0f;
(*color)[1] = 0.17f;
(*color)[3] = 0.25f;
}
}

View file

@ -15,7 +15,7 @@ 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 Foobar; if not, write to the Free Software
along with Quake III Arena source code; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/

View file

@ -48,6 +48,7 @@ char *cg_customSoundNames[MAX_CUSTOM_SOUNDS] = {
"*pain50_1.wav",
"*pain75_1.wav",
"*pain100_1.wav",
"*falling1.wav",
"*gasp.wav",
"*drown.wav",
"*fall1.wav",
@ -126,6 +127,7 @@ static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci )
}
if ( len >= sizeof( text ) - 1 ) {
CG_Printf( "File %s too long\n", filename );
trap_FS_FCloseFile( f );
return qfalse;
}
trap_FS_Read( text, len, f );
@ -204,6 +206,7 @@ static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci )
}
if ( len >= sizeof( text ) - 1 ) {
CG_Printf( "File %s too long\n", filename );
trap_FS_FCloseFile( f );
return qfalse;
}
trap_FS_Read( text, len, f );
@ -399,7 +402,7 @@ CG_FileExists
static qboolean CG_FileExists(const char *filename) {
int len;
len = trap_FS_FOpenFile( filename, 0, FS_READ );
len = trap_FS_FOpenFile( filename, NULL, FS_READ );
if (len>0) {
return qtrue;
}
@ -934,11 +937,10 @@ Load it now, taking the disk hits.
This will usually be deferred to a safe time
===================
*/
static void CG_LoadClientInfo( clientInfo_t *ci ) {
static void CG_LoadClientInfo( int clientNum, clientInfo_t *ci ) {
const char *dir, *fallback;
int i, modelloaded;
const char *s;
int clientNum;
char teamname[MAX_QPATH];
teamname[0] = 0;
@ -1047,7 +1049,6 @@ static void CG_LoadClientInfo( clientInfo_t *ci ) {
// reset any existing players and bodies, because they might be in bad
// frames for this new model
clientNum = ci - cgs.clientinfo;
for ( i = 0 ; i < MAX_GENTITIES ; i++ ) {
if ( cg_entities[i].currentState.clientNum == clientNum
&& cg_entities[i].currentState.eType == ET_PLAYER ) {
@ -1148,7 +1149,7 @@ We aren't going to load it now, so grab some other
client's info to use until we have some spare time.
======================
*/
static void CG_SetDeferredClientInfo( clientInfo_t *ci ) {
static void CG_SetDeferredClientInfo( int clientNum, clientInfo_t *ci ) {
int i;
clientInfo_t *match;
@ -1172,7 +1173,7 @@ static void CG_SetDeferredClientInfo( clientInfo_t *ci ) {
}
// just load the real info cause it uses the same models and skins
CG_LoadClientInfo( ci );
CG_LoadClientInfo( clientNum, ci );
return;
}
@ -1195,7 +1196,7 @@ static void CG_SetDeferredClientInfo( clientInfo_t *ci ) {
// an improper team skin. This will cause a hitch for the first
// player, when the second enters. Combat shouldn't be going on
// yet, so it shouldn't matter
CG_LoadClientInfo( ci );
CG_LoadClientInfo( clientNum, ci );
return;
}
@ -1214,7 +1215,7 @@ static void CG_SetDeferredClientInfo( clientInfo_t *ci ) {
// we should never get here...
CG_Printf( "CG_SetDeferredClientInfo: no valid clients!\n" );
CG_LoadClientInfo( ci );
CG_LoadClientInfo( clientNum, ci );
}
@ -1446,17 +1447,16 @@ void CG_NewClientInfo( int clientNum ) {
forceDefer = trap_MemoryRemaining() < 4000000;
// if we are defering loads, just have it pick the first valid
if ( forceDefer || ( cg_deferPlayers.integer && !cg_buildScript.integer && !cg.loading ) ) {
if ( forceDefer || (cg_deferPlayers.integer && !cg_buildScript.integer && !cg.loading ) ) {
// keep whatever they had if it won't violate team skins
CG_SetDeferredClientInfo( &newInfo );
CG_SetDeferredClientInfo( clientNum, &newInfo );
// if we are low on memory, leave them with this model
if ( forceDefer ) {
CG_Printf( "Memory is low. Using deferred model.\n" );
newInfo.deferred = qfalse;
}
} else {
CG_LoadClientInfo( &newInfo );
CG_LoadClientInfo( clientNum, &newInfo );
}
}
@ -1489,7 +1489,7 @@ void CG_LoadDeferredPlayers( void ) {
ci->deferred = qfalse;
continue;
}
CG_LoadClientInfo( ci );
CG_LoadClientInfo( i, ci );
// break;
}
}
@ -1850,6 +1850,7 @@ static void CG_PlayerAngles( centity_t *cent, vec3_t legs[3], vec3_t torso[3], v
torsoAngles[YAW] = cent->pe.torso.yawAngle;
legsAngles[YAW] = cent->pe.legs.yawAngle;
// --------- pitch -------------
// only show a fraction of the pitch angle in the torso
@ -1914,6 +1915,7 @@ static void CG_PlayerAngles( centity_t *cent, vec3_t legs[3], vec3_t torso[3], v
*/
// END
//==========================================================================
/*
@ -2202,7 +2204,7 @@ static void CG_PlayerFlag( centity_t *cent, qhandle_t hSkin, refEntity_t *torso
}
#ifdef MISSIONPACK // bk001204
#ifdef MISSIONPACK
/*
===============
CG_PlayerTokens
@ -2588,7 +2590,7 @@ static qboolean CG_PlayerShadow( centity_t *cent, float *shadowPlane ) {
// fade the shadow out with height
alpha = 1.0 - trace.fraction;
// bk0101022 - hack / FPE - bogus planes?
// hack / FPE - bogus planes?
//assert( DotProduct( trace.plane.normal, trace.plane.normal ) != 0.0f )
// add the mark as a temporary, so it goes directly to the renderer
@ -3486,7 +3488,8 @@ void CG_Player( centity_t *cent ) {
CG_PlayerEngineSmoke(cent, &body);
// END
/* Q3Rally Code Start
// Q3Rally Code Start
#if 0
//
// add the legs
//
@ -3572,12 +3575,14 @@ void CG_Player( centity_t *cent ) {
angles[2] = 0;
AnglesToAxis( angles, skull.axis );
// dir[2] = 0;
// VectorInverse(dir);
// VectorCopy(dir, skull.axis[1]);
// VectorNormalize(skull.axis[1]);
// VectorSet(skull.axis[2], 0, 0, 1);
// CrossProduct(skull.axis[1], skull.axis[2], skull.axis[0]);
/*
dir[2] = 0;
VectorInverse(dir);
VectorCopy(dir, skull.axis[1]);
VectorNormalize(skull.axis[1]);
VectorSet(skull.axis[2], 0, 0, 1);
CrossProduct(skull.axis[1], skull.axis[2], skull.axis[0]);
*/
skull.hModel = cgs.media.kamikazeHeadModel;
trap_R_AddRefEntityToScene( &skull );
@ -3601,11 +3606,13 @@ void CG_Player( centity_t *cent ) {
angles[2] = 0;
AnglesToAxis( angles, skull.axis );
// dir[2] = 0;
// VectorCopy(dir, skull.axis[1]);
// VectorNormalize(skull.axis[1]);
// VectorSet(skull.axis[2], 0, 0, 1);
// CrossProduct(skull.axis[1], skull.axis[2], skull.axis[0]);
/*
dir[2] = 0;
VectorCopy(dir, skull.axis[1]);
VectorNormalize(skull.axis[1]);
VectorSet(skull.axis[2], 0, 0, 1);
CrossProduct(skull.axis[1], skull.axis[2], skull.axis[0]);
*/
skull.hModel = cgs.media.kamikazeHeadModel;
trap_R_AddRefEntityToScene( &skull );
@ -3729,10 +3736,13 @@ void CG_Player( centity_t *cent ) {
trap_R_AddRefEntityToScene( &powerup );
}
#endif // MISSIONPACK
*/
#endif // Q3Rally
// STONELANCE( add head support )
/*
//
// add the head
//
head.hModel = ci->headModel;
if (!head.hModel) {
return;
@ -3997,6 +4007,7 @@ void CG_Player( centity_t *cent ) {
// add the gun / barrel / flash
//
// Q3Rally Code Start
// CG_AddPlayerWeapon( &torso, NULL, cent, ci->team );
CG_AddPlayerWeapon( &body, NULL, cent, ci->team );
// END

View file

@ -226,7 +226,6 @@ void CG_CheckPlayerstateEvents( playerState_t *ps, playerState_t *ops ) {
cent = &cg_entities[ ps->clientNum ];
cent->currentState.event = ps->externalEvent;
cent->currentState.eventParm = ps->externalEventParm;
CG_EntityEvent( cent, cent->lerpOrigin );
}
@ -515,7 +514,7 @@ void CG_TransitionPlayerState( playerState_t *ps, playerState_t *ops ) {
// STONELANCE using damagePitch and Yaw for view
/*
if ( ps->damageEvent != ops->damageEvent && ps->damageCount ) {
CG_DamageFeedback( ps->damageYaw, ps->damagePitch, ps->damageCount );
// CG_DamageFeedback( ps->damageYaw, ps->damagePitch, ps->damageCount );
CG_DamageFeedback( 0, 0, ps->damageCount );
}
*/

View file

@ -237,4 +237,3 @@ typedef enum {
} cgameExport_t;
//----------------------------------------------

View file

@ -1,54 +0,0 @@
/*
===========================================================================
Copyright (C) 1999-2005 Id Software, Inc.
Copyright (C) 2002-2015 Q3Rally Team (Per Thormann - q3rally@gmail.com)
This file is part of q3rally source code.
q3rally source code is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
q3rally source code 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 q3rally; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
#include "cg_local.h"
/*
================
CG_RankRunFrame
================
*/
void CG_RankRunFrame(void)
{
grank_status_t status;
if (! cgs.localServer)
trap_CL_RankPoll();
status = trap_CL_RankUserStatus();
if( cgs.client_status != status )
{
// GRank status changed
// inform UI of current status
trap_Cvar_Set("client_status", va("%i",(int)(status)));
// show rankings status dialog if error
trap_CL_RankShowStatus((int)status);
cgs.client_status = status;
}
return;
}

View file

@ -91,6 +91,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
static qboolean localClient; // true if local client has been displayed
/*
=================
CG_DrawScoreboard
@ -692,6 +693,8 @@ void CG_DrawTourneyScoreboard( void ) {
y += 64;
}
}
}
#endif
// END

View file

@ -263,7 +263,6 @@ void CG_SetConfigValues( void ) {
cgs.redflag = s[0] - '0';
cgs.blueflag = s[1] - '0';
}
#ifdef MISSIONPACK
else if( cgs.gametype == GT_1FCTF ) {
s = CG_ConfigString( CS_FLAGSTATUS );
@ -343,15 +342,13 @@ static void CG_ConfigStringModified( void ) {
cgs.scores1 = atoi( str );
} else if ( num == CS_SCORES2 ) {
cgs.scores2 = atoi( str );
}
// Q3Rally Code Start
else if ( num == CS_SCORES3 ) {
} else if ( num == CS_SCORES3 ) {
cgs.scores3 = atoi( str );
} else if ( num == CS_SCORES4 ) {
cgs.scores4 = atoi( str );
}
// END
else if ( num == CS_LEVEL_START_TIME ) {
} else if ( num == CS_LEVEL_START_TIME ) {
cgs.levelStartTime = atoi( str );
} else if ( num == CS_VOTE_TIME ) {
cgs.voteTime = atoi( str );
@ -404,8 +401,6 @@ static void CG_ConfigStringModified( void ) {
}
#endif
}
else if ( num == CS_SHADERSTATE ) {
CG_ShaderStateChanged();
}
@ -1293,4 +1288,3 @@ void CG_ExecuteNewServerCommands( int latestSequence ) {
}
}
}

View file

@ -267,7 +267,7 @@ static snapshot_t *CG_ReadNextSnapshot( void ) {
snapshot_t *dest;
if ( cg.latestSnapshotNum > cgs.processedSnapshotNum + 1000 ) {
CG_Printf( "WARNING: CG_ReadNextSnapshot: way out of range, %i > %i",
CG_Printf( "WARNING: CG_ReadNextSnapshot: way out of range, %i > %i\n",
cg.latestSnapshotNum, cgs.processedSnapshotNum );
}

View file

@ -292,6 +292,7 @@ static void CG_OffsetThirdPersonView( void ) {
}
}
VectorCopy( view, cg.refdef.vieworg );
// select pitch to look at focus point from vieword
@ -630,7 +631,7 @@ static vec3_t oldAngles; // used for joystick and keyboard control modes
// END
static int CG_CalcViewValues( void ) {
playerState_t *ps;
memset( &cg.refdef, 0, sizeof( cg.refdef ) );
// strings for in game rendering
@ -641,7 +642,6 @@ static int CG_CalcViewValues( void ) {
CG_CalcVrect();
ps = &cg.predictedPlayerState;
/*
if (cg.cameraMode) {
vec3_t origin, angles;

View file

@ -226,13 +226,6 @@ void CG_RailTrail (clientInfo_t *ci, vec3_t start, vec3_t end) {
#define SPACING 5
start[2] -= 4;
VectorCopy (start, move);
VectorSubtract (end, start, vec);
len = VectorNormalize (vec);
PerpendicularVector(temp, vec);
for (i = 0 ; i < 36; i++) {
RotatePointAroundVector(axis[i], vec, temp, i * 10);//banshee 2.4 was 10
}
le = CG_AllocLocalEntity();
re = &le->refEntity;
@ -250,9 +243,9 @@ void CG_RailTrail (clientInfo_t *ci, vec3_t start, vec3_t end) {
VectorCopy(end, re->oldorigin);
re->shaderRGBA[0] = ci->color1[0] * 255;
re->shaderRGBA[1] = ci->color1[1] * 255;
re->shaderRGBA[2] = ci->color1[2] * 255;
re->shaderRGBA[3] = 255;
re->shaderRGBA[1] = ci->color1[1] * 255;
re->shaderRGBA[2] = ci->color1[2] * 255;
re->shaderRGBA[3] = 255;
le->color[0] = ci->color1[0] * 0.75;
le->color[1] = ci->color1[1] * 0.75;
@ -261,59 +254,72 @@ void CG_RailTrail (clientInfo_t *ci, vec3_t start, vec3_t end) {
AxisClear( re->axis );
VectorMA(move, 20, vec, move);
VectorScale (vec, SPACING, vec);
if (cg_oldRail.integer != 0) {
if (cg_oldRail.integer)
{
// nudge down a bit so it isn't exactly in center
re->origin[2] -= 8;
re->oldorigin[2] -= 8;
return;
}
VectorCopy (start, move);
VectorSubtract (end, start, vec);
len = VectorNormalize (vec);
PerpendicularVector(temp, vec);
for (i = 0 ; i < 36; i++)
{
RotatePointAroundVector(axis[i], vec, temp, i * 10);//banshee 2.4 was 10
}
VectorMA(move, 20, vec, move);
VectorScale (vec, SPACING, vec);
skip = -1;
j = 18;
for (i = 0; i < len; i += SPACING) {
if (i != skip) {
for (i = 0; i < len; i += SPACING)
{
if (i != skip)
{
skip = i + SPACING;
le = CG_AllocLocalEntity();
re = &le->refEntity;
le->leFlags = LEF_PUFF_DONT_SCALE;
re = &le->refEntity;
le->leFlags = LEF_PUFF_DONT_SCALE;
le->leType = LE_MOVE_SCALE_FADE;
le->startTime = cg.time;
le->endTime = cg.time + (i>>1) + 600;
le->lifeRate = 1.0 / (le->endTime - le->startTime);
le->startTime = cg.time;
le->endTime = cg.time + (i>>1) + 600;
le->lifeRate = 1.0 / (le->endTime - le->startTime);
re->shaderTime = cg.time / 1000.0f;
re->reType = RT_SPRITE;
re->radius = 1.1f;
re->shaderTime = cg.time / 1000.0f;
re->reType = RT_SPRITE;
re->radius = 1.1f;
re->customShader = cgs.media.railRingsShader;
re->shaderRGBA[0] = ci->color2[0] * 255;
re->shaderRGBA[1] = ci->color2[1] * 255;
re->shaderRGBA[2] = ci->color2[2] * 255;
re->shaderRGBA[3] = 255;
re->shaderRGBA[0] = ci->color2[0] * 255;
re->shaderRGBA[1] = ci->color2[1] * 255;
re->shaderRGBA[2] = ci->color2[2] * 255;
re->shaderRGBA[3] = 255;
le->color[0] = ci->color2[0] * 0.75;
le->color[1] = ci->color2[1] * 0.75;
le->color[2] = ci->color2[2] * 0.75;
le->color[3] = 1.0f;
le->color[0] = ci->color2[0] * 0.75;
le->color[1] = ci->color2[1] * 0.75;
le->color[2] = ci->color2[2] * 0.75;
le->color[3] = 1.0f;
le->pos.trType = TR_LINEAR;
le->pos.trTime = cg.time;
le->pos.trType = TR_LINEAR;
le->pos.trTime = cg.time;
VectorCopy( move, move2);
VectorMA(move2, RADIUS , axis[j], move2);
VectorCopy(move2, le->pos.trBase);
VectorMA(move2, RADIUS , axis[j], move2);
VectorCopy(move2, le->pos.trBase);
le->pos.trDelta[0] = axis[j][0]*6;
le->pos.trDelta[1] = axis[j][1]*6;
le->pos.trDelta[2] = axis[j][2]*6;
le->pos.trDelta[0] = axis[j][0]*6;
le->pos.trDelta[1] = axis[j][1]*6;
le->pos.trDelta[2] = axis[j][2]*6;
}
VectorAdd (move, vec, move);
VectorAdd (move, vec, move);
j = j + ROTATION < 36 ? j + ROTATION : (j + ROTATION) % 36;
j = (j + ROTATION) % 36;
}
}
@ -453,7 +459,6 @@ static void CG_NailTrail( centity_t *ent, const weaponInfo_t *wi ) {
}
#endif
/*
==========================
CG_PlasmaTrail
@ -542,8 +547,8 @@ static void CG_PlasmaTrail( centity_t *cent, const weaponInfo_t *wi ) {
le->angles.trDelta[0] = 1;
le->angles.trDelta[1] = 0.5;
le->angles.trDelta[2] = 0;
}
}
/*
==========================
CG_GrappleTrail
@ -705,13 +710,12 @@ void CG_RegisterWeapon( int weaponNum ) {
break;
*/
case WP_FLAME_THROWER:
weaponInfo->missileSound = trap_S_RegisterSound( "sound/weapons/plasma/lasfly.wav", qfalse );
MAKERGB( weaponInfo->flashDlightColor, 0.6, 0.6, 1 );
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/plasma/hyprbf1a.wav", qfalse );
cgs.media.flameExplosionShader = trap_R_RegisterShader( "rocketExplosion" );
break;
case WP_FLAME_THROWER:
weaponInfo->missileSound = trap_S_RegisterSound( "sound/weapons/plasma/lasfly.wav", qfalse );
MAKERGB( weaponInfo->flashDlightColor, 0.6, 0.6, 1 );
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/plasma/hyprbf1a.wav", qfalse );
cgs.media.flameExplosionShader = trap_R_RegisterShader( "rocketExplosion" );
break;
// Q3Rally Code END
#ifdef MISSIONPACK
@ -997,6 +1001,7 @@ static void CG_CalculateWeaponPosition( vec3_t origin, vec3_t angles ) {
*/
// END
/*
===============
CG_LightningBolt
@ -1009,10 +1014,10 @@ angle)
===============
*/
static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
trace_t trace;
refEntity_t beam;
vec3_t forward;
vec3_t muzzlePoint, endPoint;
trace_t trace;
refEntity_t beam;
vec3_t forward;
vec3_t muzzlePoint, endPoint;
//int anim;
// Q3Rally Code Start
@ -1023,7 +1028,7 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
//centity_t *traceEnt;
// END
if ( cent->currentState.weapon != WP_LIGHTNING ) {
if (cent->currentState.weapon != WP_LIGHTNING) {
return;
}
@ -1190,7 +1195,6 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
*/
/*
======================
CG_MachinegunSpinAngle
@ -1272,7 +1276,6 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
weapon_t weaponNum;
weaponInfo_t *weapon;
centity_t *nonPredictedCent;
// int col;
weaponNum = cent->currentState.weapon;
@ -1446,6 +1449,7 @@ void CG_AddViewWeapon( playerState_t *ps ) {
return;
}
// allow the gun to be completely removed
if ( !cg_drawGun.integer ) {
vec3_t origin;
@ -1554,7 +1558,7 @@ void CG_DrawWeaponSelect( void ) {
bits = cg.snap->ps.stats[ STAT_WEAPONS ];
count = 0;
// Q3Rally Code Start
// for ( i = 1 ; i < 16 ; i++ ) {
// for ( i = 1 ; i < MAX_WEAPONS ; i++ ) {
for ( i = 1 ; i < RWP_SMOKE ; i++ ) {
// END
if ( bits & ( 1 << i ) ) {
@ -1566,7 +1570,7 @@ void CG_DrawWeaponSelect( void ) {
y = 380;
// Q3Rally Code Start
// for ( i = 1 ; i < 16 ; i++ ) {
// for ( i = 1 ; i < MAX_WEAPONS ; i++ ) {
for ( i = 1 ; i < RWP_SMOKE ; i++ ) {
// END
if ( !( bits & ( 1 << i ) ) ) {
@ -1645,9 +1649,9 @@ void CG_NextWeapon_f( void ) {
cg.weaponSelectTime = cg.time;
original = cg.weaponSelect;
for ( i = 0 ; i < 16 ; i++ ) {
for ( i = 0 ; i < MAX_WEAPONS ; i++ ) {
cg.weaponSelect++;
if ( cg.weaponSelect == 16 ) {
if ( cg.weaponSelect == MAX_WEAPONS ) {
cg.weaponSelect = 0;
}
if ( cg.weaponSelect == WP_GAUNTLET ) {
@ -1657,7 +1661,7 @@ void CG_NextWeapon_f( void ) {
break;
}
}
if ( i == 16 ) {
if ( i == MAX_WEAPONS ) {
cg.weaponSelect = original;
}
}
@ -1681,10 +1685,10 @@ void CG_PrevWeapon_f( void ) {
cg.weaponSelectTime = cg.time;
original = cg.weaponSelect;
for ( i = 0 ; i < 16 ; i++ ) {
for ( i = 0 ; i < MAX_WEAPONS ; i++ ) {
cg.weaponSelect--;
if ( cg.weaponSelect == -1 ) {
cg.weaponSelect = 15;
cg.weaponSelect = MAX_WEAPONS - 1;
}
if ( cg.weaponSelect == WP_GAUNTLET ) {
continue; // never cycle to gauntlet
@ -1693,7 +1697,7 @@ void CG_PrevWeapon_f( void ) {
break;
}
}
if ( i == 16 ) {
if ( i == MAX_WEAPONS ) {
cg.weaponSelect = original;
}
}
@ -1716,7 +1720,7 @@ void CG_Weapon_f( void ) {
num = atoi( CG_Argv( 1 ) );
// Q3Rally Code Start
// if ( num < 1 || num > 15 ) {
// if ( num < 1 || num > MAX_WEAPONS-1 ) {
if ( num < 1 || num >= RWP_SMOKE ) {
// END
return;
@ -1743,7 +1747,7 @@ void CG_OutOfAmmoChange( void ) {
cg.weaponSelectTime = cg.time;
for ( i = 15 ; i > 0 ; i-- ) {
for ( i = MAX_WEAPONS-1 ; i > 0 ; i-- ) {
if ( CG_WeaponSelectable( i ) ) {
cg.weaponSelect = i;
break;
@ -2020,13 +2024,14 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, im
break;
// Q3Rally Code Start
case WP_FLAME_THROWER:
mod = cgs.media.dishFlashModel;
shader = cgs.media.flameExplosionShader;
sfx = cgs.media.sfx_plasmaexp;
mark = cgs.media.burnMarkShader;
radius = 16;
break;
mod = cgs.media.dishFlashModel;
shader = cgs.media.flameExplosionShader;
sfx = cgs.media.sfx_plasmaexp;
mark = cgs.media.burnMarkShader;
radius = 16;
break;
// Q3Rally Code END
#ifdef MISSIONPACK
case WP_CHAINGUN:
mod = cgs.media.bulletFlashModel;
@ -2153,28 +2158,23 @@ static void CG_ShotgunPellet( vec3_t start, vec3_t end, int skipNum ) {
sourceContentType = CG_PointContents( start, 0 );
destContentType = CG_PointContents( tr.endpos, 0 );
// FIXME: should probably move this cruft into CG_BubbleTrail
if ( sourceContentType == destContentType ) {
if ( sourceContentType & CONTENTS_WATER ) {
CG_BubbleTrail( start, tr.endpos, 32 );
}
} else if ( sourceContentType & CONTENTS_WATER ) {
trace_t trace;
trap_CM_BoxTrace( &trace, end, start, NULL, NULL, 0, CONTENTS_WATER );
CG_BubbleTrail( start, trace.endpos, 32 );
}
else if ( destContentType & CONTENTS_WATER ) {
} else if ( destContentType & CONTENTS_WATER ) {
trace_t trace;
trap_CM_BoxTrace( &trace, start, end, NULL, NULL, 0, CONTENTS_WATER );
CG_BubbleTrail( tr.endpos, trace.endpos, 32 );
}
if ( tr.surfaceFlags & SURF_NOIMPACT ) {
return;
@ -2445,5 +2445,3 @@ void CG_Bullet( vec3_t end, int sourceEntityNum, vec3_t normal, qboolean flesh,
}
}