summaryrefslogtreecommitdiff
path: root/src/cgame
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgame')
-rw-r--r--src/cgame/cg_animmapobj.c69
-rw-r--r--src/cgame/cg_buildable.c38
-rw-r--r--src/cgame/cg_consolecmds.c245
-rw-r--r--src/cgame/cg_draw.c149
-rw-r--r--src/cgame/cg_drawtools.c661
-rw-r--r--src/cgame/cg_ents.c426
-rw-r--r--src/cgame/cg_event.c1524
-rw-r--r--src/cgame/cg_local.h1
-rw-r--r--src/cgame/cg_main.c1240
-rw-r--r--src/cgame/cg_marks.c417
-rw-r--r--src/cgame/cg_players.c1225
-rw-r--r--src/cgame/cg_playerstate.c457
-rw-r--r--src/cgame/cg_predict.c384
-rw-r--r--src/cgame/cg_scanner.c4
-rw-r--r--src/cgame/cg_servercmds.c886
-rw-r--r--src/cgame/cg_snapshot.c522
-rw-r--r--src/cgame/cg_syscalls.asm196
-rw-r--r--src/cgame/cg_syscalls.c412
-rw-r--r--src/cgame/cg_trails.c1308
-rw-r--r--src/cgame/cg_view.c539
-rw-r--r--src/cgame/cg_weapons.c1493
-rw-r--r--src/cgame/tr_types.h273
22 files changed, 5323 insertions, 7146 deletions
diff --git a/src/cgame/cg_animmapobj.c b/src/cgame/cg_animmapobj.c
index d911604a..c7218b00 100644
--- a/src/cgame/cg_animmapobj.c
+++ b/src/cgame/cg_animmapobj.c
@@ -27,74 +27,77 @@ static void CG_RunAMOLerpFrame( lerpFrame_t *lf )
animation_t *anim;
// debugging tool to get no animations
- if ( cg_animSpeed.integer == 0 ) {
+ if( cg_animSpeed.integer == 0 )
+ {
lf->oldFrame = lf->frame = lf->backlerp = 0;
return;
}
// if we have passed the current frame, move it to
// oldFrame and calculate a new frame
- if ( cg.time >= lf->frameTime ) {
+ if( cg.time >= lf->frameTime )
+ {
lf->oldFrame = lf->frame;
lf->oldFrameTime = lf->frameTime;
// get the next frame based on the animation
anim = lf->animation;
- if ( !anim->frameLerp ) {
+ if( !anim->frameLerp )
return; // shouldn't happen
- }
- if ( cg.time < lf->animationTime ) {
+
+ if( cg.time < lf->animationTime )
lf->frameTime = lf->animationTime; // initial lerp
- } else {
+ else
lf->frameTime = lf->oldFrameTime + anim->frameLerp;
- }
+
f = ( lf->frameTime - lf->animationTime ) / anim->frameLerp;
numFrames = anim->numFrames;
- if (anim->flipflop) {
+ if( anim->flipflop )
numFrames *= 2;
- }
- if ( f >= numFrames ) {
+
+ if( f >= numFrames )
+ {
f -= numFrames;
- if ( anim->loopFrames ) {
+ if( anim->loopFrames )
+ {
f %= anim->loopFrames;
f += anim->numFrames - anim->loopFrames;
- } else {
+ }
+ else
+ {
f = numFrames - 1;
// the animation is stuck at the end, so it
// can immediately transition to another sequence
lf->frameTime = cg.time;
}
}
- if ( anim->reversed ) {
+
+ if( anim->reversed )
lf->frame = anim->firstFrame + anim->numFrames - 1 - f;
- }
- else if (anim->flipflop && f>=anim->numFrames) {
- lf->frame = anim->firstFrame + anim->numFrames - 1 - (f%anim->numFrames);
- }
- else {
+ else if( anim->flipflop && f>=anim->numFrames )
+ lf->frame = anim->firstFrame + anim->numFrames - 1 - ( f % anim->numFrames );
+ else
lf->frame = anim->firstFrame + f;
- }
- if ( cg.time > lf->frameTime ) {
+
+ if( cg.time > lf->frameTime )
+ {
lf->frameTime = cg.time;
- if ( cg_debugAnim.integer ) {
- CG_Printf( "Clamp lf->frameTime\n");
- }
+ if( cg_debugAnim.integer )
+ CG_Printf( "Clamp lf->frameTime\n" );
}
}
- if ( lf->frameTime > cg.time + 200 ) {
+ if( lf->frameTime > cg.time + 200 )
lf->frameTime = cg.time;
- }
- if ( lf->oldFrameTime > cg.time ) {
+ if( lf->oldFrameTime > cg.time )
lf->oldFrameTime = cg.time;
- }
+
// calculate current lerp value
- if ( lf->frameTime == lf->oldFrameTime ) {
+ if( lf->frameTime == lf->oldFrameTime )
lf->backlerp = 0;
- } else {
+ else
lf->backlerp = 1.0 - (float)( cg.time - lf->oldFrameTime ) / ( lf->frameTime - lf->oldFrameTime );
- }
}
@@ -160,9 +163,9 @@ void CG_animMapObj( centity_t *cent )
if( es->angles2[ 0 ] )
{
scale = es->angles2[ 0 ];
- VectorScale( ent.axis[0], scale, ent.axis[0] );
- VectorScale( ent.axis[1], scale, ent.axis[1] );
- VectorScale( ent.axis[2], scale, ent.axis[2] );
+ VectorScale( ent.axis[ 0 ], scale, ent.axis[ 0 ] );
+ VectorScale( ent.axis[ 1 ], scale, ent.axis[ 1 ] );
+ VectorScale( ent.axis[ 2 ], scale, ent.axis[ 2 ] );
ent.nonNormalizedAxes = qtrue;
}
diff --git a/src/cgame/cg_buildable.c b/src/cgame/cg_buildable.c
index 4c5e13ec..90cb2e76 100644
--- a/src/cgame/cg_buildable.c
+++ b/src/cgame/cg_buildable.c
@@ -44,14 +44,14 @@ models/buildables/hivemind/animation.cfg, etc
*/
static qboolean CG_ParseBuildableAnimationFile( const char *filename, buildable_t buildable )
{
- char *text_p, *prev;
- int len;
- int i;
- char *token;
- float fps;
- char text[ 20000 ];
+ char *text_p, *prev;
+ int len;
+ int i;
+ char *token;
+ float fps;
+ char text[ 20000 ];
fileHandle_t f;
- animation_t *animations;
+ animation_t *animations;
animations = cg_buildables[ buildable ].animations;
@@ -135,13 +135,13 @@ sound/buildables/hivemind/sound.cfg, etc
*/
static qboolean CG_ParseBuildableSoundFile( const char *filename, buildable_t buildable )
{
- char *text_p, *prev;
- int len;
- int i;
- char *token;
- char text[ 20000 ];
+ char *text_p, *prev;
+ int len;
+ int i;
+ char *token;
+ char text[ 20000 ];
fileHandle_t f;
- sound_t *sounds;
+ sound_t *sounds;
sounds = cg_buildables[ buildable ].sounds;
@@ -198,12 +198,12 @@ Initialises the animation db
*/
void CG_InitBuildables( )
{
- char filename[ MAX_QPATH ];
- char soundfile[ MAX_QPATH ];
- char *buildableName;
- char *modelFile;
- int i;
- int j;
+ char filename[ MAX_QPATH ];
+ char soundfile[ MAX_QPATH ];
+ char *buildableName;
+ char *modelFile;
+ int i;
+ int j;
fileHandle_t f;
memset( cg_buildables, 0, sizeof( cg_buildables ) );
diff --git a/src/cgame/cg_consolecmds.c b/src/cgame/cg_consolecmds.c
index c53ee166..43c78675 100644
--- a/src/cgame/cg_consolecmds.c
+++ b/src/cgame/cg_consolecmds.c
@@ -20,14 +20,14 @@
-void CG_TargetCommand_f( void ) {
+void CG_TargetCommand_f( void )
+{
int targetNum;
- char test[4];
+ char test[ 4 ];
- targetNum = CG_CrosshairPlayer();
- if (!targetNum ) {
+ targetNum = CG_CrosshairPlayer( );
+ if( !targetNum )
return;
- }
trap_Argv( 1, test, 4 );
trap_SendConsoleCommand( va( "gc %i %i", targetNum, atoi( test ) ) );
@@ -42,8 +42,9 @@ CG_SizeUp_f
Keybinding command
=================
*/
-static void CG_SizeUp_f (void) {
- trap_Cvar_Set("cg_viewsize", va("%i",(int)(cg_viewsize.integer+10)));
+static void CG_SizeUp_f( void )
+{
+ trap_Cvar_Set( "cg_viewsize", va( "%i", (int)( cg_viewsize.integer + 10 ) ) );
}
@@ -54,8 +55,9 @@ CG_SizeDown_f
Keybinding command
=================
*/
-static void CG_SizeDown_f (void) {
- trap_Cvar_Set("cg_viewsize", va("%i",(int)(cg_viewsize.integer-10)));
+static void CG_SizeDown_f( void )
+{
+ trap_Cvar_Set( "cg_viewsize", va( "%i", (int)( cg_viewsize.integer - 10 ) ) );
}
@@ -66,15 +68,18 @@ CG_Viewpos_f
Debugging command to print the current position
=============
*/
-static void CG_Viewpos_f (void) {
- CG_Printf ("(%i %i %i) : %i\n", (int)cg.refdef.vieworg[0],
- (int)cg.refdef.vieworg[1], (int)cg.refdef.vieworg[2],
- (int)cg.refdefViewAngles[YAW]);
+static void CG_Viewpos_f( void )
+{
+ CG_Printf( "(%i %i %i) : %i\n", (int)cg.refdef.vieworg[ 0 ],
+ (int)cg.refdef.vieworg[ 1 ], (int)cg.refdef.vieworg[ 2 ],
+ (int)cg.refdefViewAngles[ YAW ] );
}
-static void CG_ScoresDown_f( void ) {
- if ( cg.scoresRequestTime + 2000 < cg.time ) {
+static void CG_ScoresDown_f( void )
+{
+ if( cg.scoresRequestTime + 2000 < cg.time )
+ {
// the scores are more than two seconds out of data,
// so request new ones
cg.scoresRequestTime = cg.time;
@@ -82,108 +87,59 @@ static void CG_ScoresDown_f( void ) {
// leave the current scores up if they were already
// displayed, but if this is the first hit, clear them out
- if ( !cg.showScores ) {
+ if( !cg.showScores )
+ {
cg.showScores = qtrue;
cg.numScores = 0;
}
- } else {
+ }
+ else
+ {
// show the cached contents even if they just pressed if it
// is within two seconds
cg.showScores = qtrue;
}
}
-static void CG_ScoresUp_f( void ) {
- if ( cg.showScores ) {
+static void CG_ScoresUp_f( void )
+{
+ if( cg.showScores )
+ {
cg.showScores = qfalse;
cg.scoreFadeTime = cg.time;
}
}
-static void CG_TellTarget_f( void ) {
+static void CG_TellTarget_f( void )
+{
int clientNum;
- char command[128];
- char message[128];
+ char command[ 128 ];
+ char message[ 128 ];
- clientNum = CG_CrosshairPlayer();
- if ( clientNum == -1 ) {
+ clientNum = CG_CrosshairPlayer( );
+ if( clientNum == -1 )
return;
- }
trap_Args( message, 128 );
Com_sprintf( command, 128, "tell %i %s", clientNum, message );
trap_SendClientCommand( command );
}
-static void CG_TellAttacker_f( void ) {
+static void CG_TellAttacker_f( void )
+{
int clientNum;
- char command[128];
- char message[128];
+ char command[ 128 ];
+ char message[ 128 ];
- clientNum = CG_LastAttacker();
- if ( clientNum == -1 ) {
+ clientNum = CG_LastAttacker( );
+ if( clientNum == -1 )
return;
- }
trap_Args( message, 128 );
Com_sprintf( command, 128, "tell %i %s", clientNum, message );
trap_SendClientCommand( command );
}
-static void CG_VoiceTellTarget_f( void ) {
- int clientNum;
- char command[128];
- char message[128];
-
- clientNum = CG_CrosshairPlayer();
- if ( clientNum == -1 ) {
- return;
- }
-
- trap_Args( message, 128 );
- Com_sprintf( command, 128, "vtell %i %s", clientNum, message );
- trap_SendClientCommand( command );
-}
-
-static void CG_VoiceTellAttacker_f( void ) {
- int clientNum;
- char command[128];
- char message[128];
-
- clientNum = CG_LastAttacker();
- if ( clientNum == -1 ) {
- return;
- }
-
- trap_Args( message, 128 );
- Com_sprintf( command, 128, "vtell %i %s", clientNum, message );
- trap_SendClientCommand( command );
-}
-
-/*
-==================
-CG_StartOrbit_f
-==================
-*/
-
-static void CG_StartOrbit_f( void ) {
- char var[MAX_TOKEN_CHARS];
-
- trap_Cvar_VariableStringBuffer( "developer", var, sizeof( var ) );
- if ( !atoi(var) ) {
- return;
- }
- if (cg_cameraOrbit.value != 0) {
- trap_Cvar_Set("cg_cameraOrbit", "0");
- trap_Cvar_Set("cg_thirdPerson", "0");
- } else {
- trap_Cvar_Set("cg_cameraOrbit", "5");
- trap_Cvar_Set("cg_thirdPerson", "1");
- trap_Cvar_Set("cg_thirdPersonAngle", "0");
- trap_Cvar_Set("cg_thirdPersonRange", "100");
- }
-}
-
/*
==================
CG_DecodeMP3_f
@@ -194,7 +150,7 @@ void CG_DecodeMP3_f( void )
char mp3file[ MAX_QPATH ];
char wavfile[ MAX_QPATH ];
- if( trap_Argc() < 2 )
+ if( trap_Argc( ) < 2 )
{
CG_Printf( "usage: decodeMP3 <mp3file> <wavfile>\n" );
return;
@@ -206,12 +162,14 @@ void CG_DecodeMP3_f( void )
S_decodeMP3( mp3file, wavfile );
}
-typedef struct {
+typedef struct
+{
char *cmd;
- void (*function)(void);
+ void (*function)( void );
} consoleCommand_t;
-static consoleCommand_t commands[] = {
+static consoleCommand_t commands[ ] =
+{
{ "testgun", CG_TestGun_f },
{ "testmodel", CG_TestModel_f },
{ "nextframe", CG_TestModelNextFrame_f },
@@ -230,10 +188,7 @@ static consoleCommand_t commands[] = {
{ "weapon", CG_Weapon_f },
{ "tell_target", CG_TellTarget_f },
{ "tell_attacker", CG_TellAttacker_f },
- { "vtell_target", CG_VoiceTellTarget_f },
- { "vtell_attacker", CG_VoiceTellAttacker_f },
{ "tcmd", CG_TargetCommand_f },
- { "startOrbit", CG_StartOrbit_f },
{ "decodeMP3", CG_DecodeMP3_f },
{ "loaddeferred", CG_LoadDeferredPlayers }
};
@@ -247,12 +202,13 @@ The string has been tokenized and can be retrieved with
Cmd_Argc() / Cmd_Argv()
=================
*/
-qboolean CG_ConsoleCommand( void ) {
+qboolean CG_ConsoleCommand( void )
+{
const char *cmd;
const char *arg1;
- int i;
+ int i;
- cmd = CG_Argv(0);
+ cmd = CG_Argv( 0 );
//TA: ugly hacky special case
if( !Q_stricmp( cmd, "ui_menu" ) )
@@ -262,9 +218,11 @@ qboolean CG_ConsoleCommand( void ) {
return qtrue;
}
- for ( i = 0 ; i < sizeof( commands ) / sizeof( commands[0] ) ; i++ ) {
- if ( !Q_stricmp( cmd, commands[i].cmd ) ) {
- commands[i].function();
+ for( i = 0; i < sizeof( commands ) / sizeof( commands[ 0 ] ); i++ )
+ {
+ if( !Q_stricmp( cmd, commands[ i ].cmd ) )
+ {
+ commands[ i ].function( );
return qtrue;
}
}
@@ -281,57 +239,56 @@ Let the client system know about all of our commands
so it can perform tab completion
=================
*/
-void CG_InitConsoleCommands( void ) {
+void CG_InitConsoleCommands( void )
+{
int i;
- for ( i = 0 ; i < sizeof( commands ) / sizeof( commands[0] ) ; i++ ) {
- trap_AddCommand( commands[i].cmd );
- }
+ for( i = 0 ; i < sizeof( commands ) / sizeof( commands[ 0 ] ) ; i++ )
+ trap_AddCommand( commands[ i ].cmd );
//
// the game server will interpret these commands, which will be automatically
// forwarded to the server after they are not recognized locally
//
- trap_AddCommand ("kill");
- trap_AddCommand ("say");
- trap_AddCommand ("say_team");
- trap_AddCommand ("tell");
- trap_AddCommand ("vsay");
- trap_AddCommand ("vsay_team");
- trap_AddCommand ("vtell");
- trap_AddCommand ("vtaunt");
- trap_AddCommand ("vosay");
- trap_AddCommand ("vosay_team");
- trap_AddCommand ("votell");
- trap_AddCommand ("give");
- trap_AddCommand ("god");
- trap_AddCommand ("notarget");
- trap_AddCommand ("noclip");
- trap_AddCommand ("team");
- trap_AddCommand ("follow");
- trap_AddCommand ("levelshot");
- trap_AddCommand ("addbot");
- trap_AddCommand ("setviewpos");
- trap_AddCommand ("callvote");
- trap_AddCommand ("vote");
- trap_AddCommand ("callteamvote");
- trap_AddCommand ("teamvote");
- trap_AddCommand ("stats");
- trap_AddCommand ("teamtask");
- trap_AddCommand ("class");
- trap_AddCommand ("build");
- trap_AddCommand ("buy");
- trap_AddCommand ("sell");
- trap_AddCommand ("deposit");
- trap_AddCommand ("withdraw");
- trap_AddCommand ("spawnbody");
- trap_AddCommand ("itemact");
- trap_AddCommand ("itemdeact");
- trap_AddCommand ("itemtoggle");
- trap_AddCommand ("destroy");
- trap_AddCommand ("deconstruct");
- trap_AddCommand ("torch");
- trap_AddCommand ("menu");
- trap_AddCommand ("ui_menu");
- trap_AddCommand ("loaddefered"); // spelled wrong, but not changing for demo
+ trap_AddCommand( "kill" );
+ trap_AddCommand( "say" );
+ trap_AddCommand( "say_team" );
+ trap_AddCommand( "tell" );
+ trap_AddCommand( "vsay" );
+ trap_AddCommand( "vsay_team" );
+ trap_AddCommand( "vtell" );
+ trap_AddCommand( "vtaunt" );
+ trap_AddCommand( "vosay" );
+ trap_AddCommand( "vosay_team" );
+ trap_AddCommand( "votell" );
+ trap_AddCommand( "give" );
+ trap_AddCommand( "god" );
+ trap_AddCommand( "notarget" );
+ trap_AddCommand( "noclip" );
+ trap_AddCommand( "team" );
+ trap_AddCommand( "follow" );
+ trap_AddCommand( "levelshot" );
+ trap_AddCommand( "addbot" );
+ trap_AddCommand( "setviewpos" );
+ trap_AddCommand( "callvote" );
+ trap_AddCommand( "vote" );
+ trap_AddCommand( "callteamvote" );
+ trap_AddCommand( "teamvote" );
+ trap_AddCommand( "stats" );
+ trap_AddCommand( "teamtask" );
+ trap_AddCommand( "class" );
+ trap_AddCommand( "build" );
+ trap_AddCommand( "buy" );
+ trap_AddCommand( "sell" );
+ trap_AddCommand( "deposit" );
+ trap_AddCommand( "withdraw" );
+ trap_AddCommand( "spawnbody" );
+ trap_AddCommand( "itemact" );
+ trap_AddCommand( "itemdeact" );
+ trap_AddCommand( "itemtoggle" );
+ trap_AddCommand( "destroy" );
+ trap_AddCommand( "deconstruct" );
+ trap_AddCommand( "menu" );
+ trap_AddCommand( "ui_menu" );
+ trap_AddCommand( "loaddefered" ); // spelled wrong, but not changing for demo
}
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index 7b77489a..3938aa4a 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -27,9 +27,9 @@ int drawTeamOverlayModificationCount = -1;
int sortedTeamPlayers[TEAM_MAXOVERLAY];
int numSortedTeamPlayers;
-char systemChat[256];
-char teamChat1[256];
-char teamChat2[256];
+char systemChat[ 256 ];
+char teamChat1[ 256 ];
+char teamChat2[ 256 ];
//TA UI
int CG_Text_Width( const char *text, float scale, int limit )
@@ -881,8 +881,8 @@ static void CG_DrawKiller( rectDef_t *rect, float scale, vec4_t color,
static void CG_Text_Paint_Limit( float *maxX, float x, float y, float scale,
vec4_t color, const char* text, float adjust, int limit )
{
- int len, count;
- vec4_t newColor;
+ int len, count;
+ vec4_t newColor;
glyphInfo_t *glyph;
if( text )
@@ -1219,11 +1219,11 @@ LAGOMETER
typedef struct
{
- int frameSamples[ LAG_SAMPLES ];
- int frameCount;
- int snapshotFlags[ LAG_SAMPLES ];
- int snapshotSamples[ LAG_SAMPLES ];
- int snapshotCount;
+ int frameSamples[ LAG_SAMPLES ];
+ int frameCount;
+ int snapshotFlags[ LAG_SAMPLES ];
+ int snapshotSamples[ LAG_SAMPLES ];
+ int snapshotCount;
} lagometer_t;
lagometer_t lagometer;
@@ -1319,11 +1319,12 @@ CG_DrawLagometer
*/
static void CG_DrawLagometer( rectDef_t *rect, qhandle_t shader )
{
- int a, x, y, i;
- float v;
- float ax, ay, aw, ah, mid, range;
- int color;
- float vscale;
+ int a, x, y, i;
+ float v;
+ float ax, ay, aw, ah, mid, range;
+ int color;
+ float vscale;
+ vec4_t white = { 1.0f, 1.0f, 1.0f, 1.0f };
if( !cg_lagometer.integer )
{
@@ -1437,9 +1438,9 @@ static void CG_DrawLagometer( rectDef_t *rect, qhandle_t shader )
trap_R_SetColor( NULL );
if( cg_nopredict.integer || cg_synchronousClients.integer )
- CG_DrawBigString( ax, ay, "snc", 1.0 );
+ CG_Text_Paint( ax, ay, 0.5, white, "snc", 0, 0, ITEM_TEXTSTYLE_NORMAL );
- CG_DrawDisconnect();
+ CG_DrawDisconnect( );
}
/*
@@ -1678,7 +1679,7 @@ CG_ShowTeamMenus
*/
void CG_ShowTeamMenu( )
{
- Menus_OpenByName("teamMenu");
+ Menus_OpenByName( "teamMenu" );
}
/*
@@ -1695,24 +1696,14 @@ void CG_EventHandling( int type )
cgs.eventHandling = type;
if( type == CGAME_EVENT_NONE )
- {
CG_HideTeamMenu( );
- }
- else if( type == CGAME_EVENT_TEAMMENU )
- {
- //CG_ShowTeamMenu();
- }
- else if( type == CGAME_EVENT_SCOREBOARD )
- {
-
- }
}
void CG_KeyEvent( int key, qboolean down )
{
- if( !down)
+ if( !down )
return;
if( cg.predictedPlayerState.pm_type == PM_NORMAL ||
@@ -1727,9 +1718,7 @@ void CG_KeyEvent( int key, qboolean down )
Display_HandleKey( key, down, cgs.cursorX, cgs.cursorY );
if( cgs.capturedItem )
- {
cgs.capturedItem = NULL;
- }
else
{
if( key == K_MOUSE2 && down )
@@ -1763,11 +1752,11 @@ void CG_RunMenuScript( char **args )
}
-void CG_GetTeamColor(vec4_t *color)
+void CG_GetTeamColor( vec4_t *color )
{
- (*color)[0] = (*color)[2] = 0.0f;
- (*color)[1] = 0.17f;
- (*color)[3] = 0.25f;
+ (*color)[ 0 ] = (*color)[ 2 ] = 0.0f;
+ (*color)[ 1 ] = 0.17f;
+ (*color)[ 3 ] = 0.25f;
}
//END TA UI
@@ -1782,7 +1771,7 @@ static void CG_DrawLighting( void )
{
centity_t *cent;
- cent = &cg_entities[cg.snap->ps.clientNum];
+ cent = &cg_entities[ cg.snap->ps.clientNum ];
//fade to black if stamina is low
if( ( cg.snap->ps.stats[ STAT_STAMINA ] < -800 ) &&
@@ -1797,16 +1786,6 @@ static void CG_DrawLighting( void )
}
/*
-===========================================================================================
-
- LOWER RIGHT CORNER
-
-===========================================================================================
-*/
-
-
-
-/*
===============================================================================
CENTER PRINTING
@@ -2059,8 +2038,9 @@ CG_DrawVote
*/
static void CG_DrawVote( void )
{
- char *s;
- int sec;
+ char *s;
+ int sec;
+ vec4_t white = { 1.0f, 1.0f, 1.0f, 1.0f };
if( !cgs.voteTime )
return;
@@ -2078,9 +2058,9 @@ static void CG_DrawVote( void )
sec = 0;
s = va( "VOTE(%i):%s yes:%i no:%i", sec, cgs.voteString, cgs.voteYes, cgs.voteNo );
- CG_DrawSmallString( 0, 58, s, 1.0F );
+ CG_Text_Paint( 0, 58, 0.3f, white, s, 0, 0, ITEM_TEXTSTYLE_NORMAL );
s = "or press ESC then click Vote";
- CG_DrawSmallString( 0, 58 + SMALLCHAR_HEIGHT + 2, s, 1.0F );
+ CG_Text_Paint( 0, 78, 0.3f, white, s, 0, 0, ITEM_TEXTSTYLE_NORMAL );
}
/*
@@ -2090,8 +2070,9 @@ CG_DrawTeamVote
*/
static void CG_DrawTeamVote( void )
{
- char *s;
- int sec, cs_offset;
+ char *s;
+ int sec, cs_offset;
+ vec4_t white = { 1.0f, 1.0f, 1.0f, 1.0f };
if( cg.predictedPlayerState.stats[ STAT_PTEAM ] == PTE_HUMANS )
cs_offset = 0;
@@ -2118,7 +2099,7 @@ static void CG_DrawTeamVote( void )
s = va( "TEAMVOTE(%i):%s yes:%i no:%i", sec, cgs.teamVoteString[ cs_offset ],
cgs.teamVoteYes[cs_offset], cgs.teamVoteNo[ cs_offset ] );
- CG_DrawSmallString( 0, 90, s, 1.0F );
+ CG_Text_Paint( 0, 90, 0.3f, white, s, 0, 0, ITEM_TEXTSTYLE_NORMAL );
}
@@ -2180,67 +2161,6 @@ static void CG_DrawIntermission( void )
cg.scoreBoardShowing = CG_DrawScoreboard( );
}
-/*
-=================
-CG_DrawFollow
-=================
-*/
-static qboolean CG_DrawFollow( void )
-{
- float x;
- vec4_t color;
- const char *name;
-
- if( !( cg.snap->ps.pm_flags & PMF_FOLLOW ) )
- return qfalse;
-
- color[ 0 ] = 1;
- color[ 1 ] = 1;
- color[ 2 ] = 1;
- color[ 3 ] = 1;
-
-
- CG_DrawBigString( 320 - 9 * 8, 24, "following", 1.0F );
-
- name = cgs.clientinfo[ cg.snap->ps.clientNum ].name;
-
- x = 0.5 * ( 640 - GIANT_WIDTH * CG_DrawStrlen( name ) );
-
- CG_DrawStringExt( x, 40, name, color, qtrue, qtrue, GIANT_WIDTH, GIANT_HEIGHT, 0 );
-
- return qtrue;
-}
-
-
-
-/*
-=================
-CG_DrawAmmoWarning
-=================
-*/
-static void CG_DrawAmmoWarning( void )
-{
- const char *s;
- int w;
-
- if( cg.snap->ps.weapon == WP_NONE )
- return;
-
- if ( cg_drawAmmoWarning.integer == 0 )
- return;
-
- if ( !cg.lowAmmoWarning )
- return;
-
- if ( cg.lowAmmoWarning == 2 )
- s = "OUT OF AMMO";
- else
- s = "LOW AMMO WARNING";
-
- w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH;
- CG_DrawBigString( 320 - w / 2, 64, s, 1.0F );
-}
-
//==================================================================================
#define SPECTATOR_STRING "SPECTATOR"
@@ -2291,7 +2211,6 @@ static void CG_Draw2D( void )
if( cg_drawStatus.integer )
Menu_Paint( menu, qtrue );
- CG_DrawAmmoWarning( );
CG_DrawCrosshair( );
if( BG_gotItem( UP_HELMET, cg.snap->ps.stats ) )
diff --git a/src/cgame/cg_drawtools.c b/src/cgame/cg_drawtools.c
index 6cc0b74f..31f7f2e3 100644
--- a/src/cgame/cg_drawtools.c
+++ b/src/cgame/cg_drawtools.c
@@ -75,7 +75,8 @@ CG_AdjustFrom640
Adjusted for resolution and screen aspect ratio
================
*/
-void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) {
+void CG_AdjustFrom640( float *x, float *y, float *w, float *h )
+{
#if 0
// adjust for wide screens
if ( cgs.glconfig.vidWidth * 480 > cgs.glconfig.vidHeight * 640 ) {
@@ -96,7 +97,8 @@ CG_FillRect
Coordinates are 640*480 virtual values
=================
*/
-void CG_FillRect( float x, float y, float width, float height, const float *color ) {
+void CG_FillRect( float x, float y, float width, float height, const float *color )
+{
trap_R_SetColor( color );
CG_AdjustFrom640( &x, &y, &width, &height );
@@ -113,14 +115,16 @@ CG_DrawSides
Coords are virtual 640x480
================
*/
-void CG_DrawSides(float x, float y, float w, float h, float size) {
+void CG_DrawSides( float x, float y, float w, float h, float size )
+{
CG_AdjustFrom640( &x, &y, &w, &h );
size *= cgs.screenXScale;
trap_R_DrawStretchPic( x, y, size, h, 0, 0, 0, 0, cgs.media.whiteShader );
trap_R_DrawStretchPic( x + w - size, y, size, h, 0, 0, 0, 0, cgs.media.whiteShader );
}
-void CG_DrawTopBottom(float x, float y, float w, float h, float size) {
+void CG_DrawTopBottom( float x, float y, float w, float h, float size )
+{
CG_AdjustFrom640( &x, &y, &w, &h );
size *= cgs.screenYScale;
trap_R_DrawStretchPic( x, y, w, size, 0, 0, 0, 0, cgs.media.whiteShader );
@@ -135,11 +139,12 @@ CG_DrawRect
Coordinates are 640*480 virtual values
=================
*/
-void CG_DrawRect( float x, float y, float width, float height, float size, const float *color ) {
+void CG_DrawRect( float x, float y, float width, float height, float size, const float *color )
+{
trap_R_SetColor( color );
- CG_DrawTopBottom(x, y, width, height, size);
- CG_DrawSides(x, y, width, height, size);
+ CG_DrawTopBottom( x, y, width, height, size );
+ CG_DrawSides( x, y, width, height, size );
trap_R_SetColor( NULL );
}
@@ -152,7 +157,8 @@ CG_DrawPic
Coordinates are 640*480 virtual values
=================
*/
-void CG_DrawPic( float x, float y, float width, float height, qhandle_t hShader ) {
+void CG_DrawPic( float x, float y, float width, float height, qhandle_t hShader )
+{
CG_AdjustFrom640( &x, &y, &width, &height );
trap_R_DrawStretchPic( x, y, width, height, 0, 0, 1, 1, hShader );
}
@@ -166,7 +172,8 @@ CG_DrawFadePic
Coordinates are 640*480 virtual values
=================
*/
-void CG_DrawFadePic( float x, float y, float width, float height, vec4_t fcolor, vec4_t tcolor, float amount, qhandle_t hShader )
+void CG_DrawFadePic( float x, float y, float width, float height, vec4_t fcolor,
+ vec4_t tcolor, float amount, qhandle_t hShader )
{
vec4_t finalcolor;
float inverse;
@@ -175,143 +182,16 @@ void CG_DrawFadePic( float x, float y, float width, float height, vec4_t fcolor,
CG_AdjustFrom640( &x, &y, &width, &height );
- finalcolor[0] = ( ( inverse * fcolor[0] ) + ( amount * tcolor[0] ) ) / 100;
- finalcolor[1] = ( ( inverse * fcolor[1] ) + ( amount * tcolor[1] ) ) / 100;
- finalcolor[2] = ( ( inverse * fcolor[2] ) + ( amount * tcolor[2] ) ) / 100;
- finalcolor[3] = ( ( inverse * fcolor[3] ) + ( amount * tcolor[3] ) ) / 100;
+ finalcolor[ 0 ] = ( ( inverse * fcolor[ 0 ] ) + ( amount * tcolor[ 0 ] ) ) / 100;
+ finalcolor[ 1 ] = ( ( inverse * fcolor[ 1 ] ) + ( amount * tcolor[ 1 ] ) ) / 100;
+ finalcolor[ 2 ] = ( ( inverse * fcolor[ 2 ] ) + ( amount * tcolor[ 2 ] ) ) / 100;
+ finalcolor[ 3 ] = ( ( inverse * fcolor[ 3 ] ) + ( amount * tcolor[ 3 ] ) ) / 100;
trap_R_SetColor( finalcolor );
trap_R_DrawStretchPic( x, y, width, height, 0, 0, 1, 1, hShader );
trap_R_SetColor( NULL );
}
-
-/*
-===============
-CG_DrawChar
-
-Coordinates and size in 640*480 virtual screen size
-===============
-*/
-void CG_DrawChar( int x, int y, int width, int height, int ch ) {
- int row, col;
- float frow, fcol;
- float size;
- float ax, ay, aw, ah;
-
- ch &= 255;
-
- if ( ch == ' ' ) {
- return;
- }
-
- ax = x;
- ay = y;
- aw = width;
- ah = height;
- CG_AdjustFrom640( &ax, &ay, &aw, &ah );
-
- row = ch>>4;
- col = ch&15;
-
- frow = row*0.0625;
- fcol = col*0.0625;
- size = 0.0625;
-
- trap_R_DrawStretchPic( ax, ay, aw, ah,
- fcol, frow,
- fcol + size, frow + size,
- cgs.media.charsetShader );
-}
-
-
-/*
-==================
-CG_DrawStringExt
-
-Draws a multi-colored string with a drop shadow, optionally forcing
-to a fixed color.
-
-Coordinates are at 640 by 480 virtual resolution
-==================
-*/
-void CG_DrawStringExt( int x, int y, const char *string, const float *setColor,
- qboolean forceColor, qboolean shadow, int charWidth, int charHeight, int maxChars ) {
- vec4_t color;
- const char *s;
- int xx;
- int cnt;
-
- if (maxChars <= 0)
- maxChars = 32767; // do them all!
-
- // draw the drop shadow
- if (shadow) {
- color[0] = color[1] = color[2] = 0;
- color[3] = setColor[3];
- trap_R_SetColor( color );
- s = string;
- xx = x;
- cnt = 0;
- while ( *s && cnt < maxChars) {
- if ( Q_IsColorString( s ) ) {
- s += 2;
- continue;
- }
- CG_DrawChar( xx + 2, y + 2, charWidth, charHeight, *s );
- cnt++;
- xx += charWidth;
- s++;
- }
- }
-
- // draw the colored text
- s = string;
- xx = x;
- cnt = 0;
- trap_R_SetColor( setColor );
- while ( *s && cnt < maxChars) {
- if ( Q_IsColorString( s ) ) {
- if ( !forceColor ) {
- memcpy( color, g_color_table[ColorIndex(*(s+1))], sizeof( color ) );
- color[3] = setColor[3];
- trap_R_SetColor( color );
- }
- s += 2;
- continue;
- }
- CG_DrawChar( xx, y, charWidth, charHeight, *s );
- xx += charWidth;
- cnt++;
- s++;
- }
- trap_R_SetColor( NULL );
-}
-
-void CG_DrawBigString( int x, int y, const char *s, float alpha ) {
- float color[4];
-
- color[0] = color[1] = color[2] = 1.0;
- color[3] = alpha;
- CG_DrawStringExt( x, y, s, color, qfalse, qtrue, BIGCHAR_WIDTH, BIGCHAR_HEIGHT, 0 );
-}
-
-void CG_DrawBigStringColor( int x, int y, const char *s, vec4_t color ) {
- CG_DrawStringExt( x, y, s, color, qtrue, qtrue, BIGCHAR_WIDTH, BIGCHAR_HEIGHT, 0 );
-}
-
-void CG_DrawSmallString( int x, int y, const char *s, float alpha ) {
- float color[4];
-
- color[0] = color[1] = color[2] = 1.0;
- color[3] = alpha;
- CG_DrawStringExt( x, y, s, color, qfalse, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 0 );
-}
-
-void CG_DrawSmallStringColor( int x, int y, const char *s, vec4_t color ) {
- CG_DrawStringExt( x, y, s, color, qtrue, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 0 );
-}
-
/*
=================
CG_DrawStrlen
@@ -319,14 +199,17 @@ CG_DrawStrlen
Returns character count, skiping color escape codes
=================
*/
-int CG_DrawStrlen( const char *str ) {
- const char *s = str;
- int count = 0;
+int CG_DrawStrlen( const char *str )
+{
+ const char *s = str;
+ int count = 0;
- while ( *s ) {
- if ( Q_IsColorString( s ) ) {
+ while( *s )
+ {
+ if( Q_IsColorString( s ) )
s += 2;
- } else {
+ else
+ {
count++;
s++;
}
@@ -343,13 +226,14 @@ This repeats a 64*64 tile graphic to fill the screen around a sized down
refresh window.
=============
*/
-static void CG_TileClearBox( int x, int y, int w, int h, qhandle_t hShader ) {
+static void CG_TileClearBox( int x, int y, int w, int h, qhandle_t hShader )
+{
float s1, t1, s2, t2;
- s1 = x/64.0;
- t1 = y/64.0;
- s2 = (x+w)/64.0;
- t2 = (y+h)/64.0;
+ s1 = x / 64.0;
+ t1 = y / 64.0;
+ s2 = ( x + w ) / 64.0;
+ t2 = ( y + h ) / 64.0;
trap_R_DrawStretchPic( x, y, w, h, s1, t1, s2, t2, hShader );
}
@@ -362,22 +246,22 @@ CG_TileClear
Clear around a sized down screen
==============
*/
-void CG_TileClear( void ) {
+void CG_TileClear( void )
+{
int top, bottom, left, right;
int w, h;
w = cgs.glconfig.vidWidth;
h = cgs.glconfig.vidHeight;
- if ( cg.refdef.x == 0 && cg.refdef.y == 0 &&
- cg.refdef.width == w && cg.refdef.height == h ) {
+ if( cg.refdef.x == 0 && cg.refdef.y == 0 &&
+ cg.refdef.width == w && cg.refdef.height == h )
return; // full screen rendering
- }
top = cg.refdef.y;
- bottom = top + cg.refdef.height-1;
+ bottom = top + cg.refdef.height - 1;
left = cg.refdef.x;
- right = left + cg.refdef.width-1;
+ right = left + cg.refdef.width - 1;
// clear above view screen
CG_TileClearBox( 0, 0, w, top, cgs.media.backTileShader );
@@ -399,27 +283,26 @@ void CG_TileClear( void ) {
CG_FadeColor
================
*/
-float *CG_FadeColor( int startMsec, int totalMsec ) {
+float *CG_FadeColor( int startMsec, int totalMsec )
+{
static vec4_t color;
int t;
- if ( startMsec == 0 ) {
+ if( startMsec == 0 )
return NULL;
- }
t = cg.time - startMsec;
- if ( t >= totalMsec ) {
+ if( t >= totalMsec )
return NULL;
- }
// fade out
- if ( totalMsec - t < FADE_TIME ) {
- color[3] = ( totalMsec - t ) * 1.0/FADE_TIME;
- } else {
- color[3] = 1.0;
- }
- color[0] = color[1] = color[2] = 1;
+ if( totalMsec - t < FADE_TIME )
+ color[ 3 ] = ( totalMsec - t ) * 1.0 / FADE_TIME;
+ else
+ color[ 3 ] = 1.0;
+
+ color[ 0 ] = color[ 1 ] = color[ 2 ] = 1;
return color;
}
@@ -430,42 +313,45 @@ float *CG_FadeColor( int startMsec, int totalMsec ) {
CG_GetColorForHealth
=================
*/
-void CG_GetColorForHealth( int health, int armor, vec4_t hcolor ) {
+void CG_GetColorForHealth( int health, int armor, vec4_t hcolor )
+{
int count;
int max;
// calculate the total points of damage that can
// be sustained at the current health / armor level
- if ( health <= 0 ) {
+ if( health <= 0 )
+ {
VectorClear( hcolor ); // black
- hcolor[3] = 1;
+ hcolor[ 3 ] = 1;
return;
}
+
count = armor;
max = health * ARMOR_PROTECTION / ( 1.0 - ARMOR_PROTECTION );
- if ( max < count ) {
+
+ if( max < count )
count = max;
- }
+
health += count;
// set the color based on health
- hcolor[0] = 1.0;
- hcolor[3] = 1.0;
- if ( health >= 100 ) {
- hcolor[2] = 1.0;
- } else if ( health < 66 ) {
- hcolor[2] = 0;
- } else {
- hcolor[2] = ( health - 66 ) / 33.0;
- }
-
- if ( health > 60 ) {
- hcolor[1] = 1.0;
- } else if ( health < 30 ) {
- hcolor[1] = 0;
- } else {
- hcolor[1] = ( health - 30 ) / 30.0;
- }
+ hcolor[ 0 ] = 1.0;
+ hcolor[ 3 ] = 1.0;
+
+ if( health >= 100 )
+ hcolor[ 2 ] = 1.0;
+ else if( health < 66 )
+ hcolor[ 2 ] = 0;
+ else
+ hcolor[ 2 ] = ( health - 66 ) / 33.0;
+
+ if( health > 60 )
+ hcolor[ 1 ] = 1.0;
+ else if( health < 30 )
+ hcolor[ 1 ] = 0;
+ else
+ hcolor[ 1 ] = ( health - 30 ) / 30.0;
}
/*
@@ -473,398 +359,7 @@ void CG_GetColorForHealth( int health, int armor, vec4_t hcolor ) {
CG_ColorForHealth
=================
*/
-void CG_ColorForHealth( vec4_t hcolor ) {
-
- CG_GetColorForHealth( cg.snap->ps.stats[STAT_HEALTH],
- 0, 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
-=================
-*/
-static int propMap[128][3] = {
-{0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1},
-{0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1},
-
-{0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1},
-{0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1},
-
-{0, 0, PROP_SPACE_WIDTH}, // SPACE
-{11, 122, 7}, // !
-{154, 181, 14}, // "
-{55, 122, 17}, // #
-{79, 122, 18}, // $
-{101, 122, 23}, // %
-{153, 122, 18}, // &
-{9, 93, 7}, // '
-{207, 122, 8}, // (
-{230, 122, 9}, // )
-{177, 122, 18}, // *
-{30, 152, 18}, // +
-{85, 181, 7}, // ,
-{34, 93, 11}, // -
-{110, 181, 6}, // .
-{130, 152, 14}, // /
-
-{22, 64, 17}, // 0
-{41, 64, 12}, // 1
-{58, 64, 17}, // 2
-{78, 64, 18}, // 3
-{98, 64, 19}, // 4
-{120, 64, 18}, // 5
-{141, 64, 18}, // 6
-{204, 64, 16}, // 7
-{162, 64, 17}, // 8
-{182, 64, 18}, // 9
-{59, 181, 7}, // :
-{35,181, 7}, // ;
-{203, 152, 14}, // <
-{56, 93, 14}, // =
-{228, 152, 14}, // >
-{177, 181, 18}, // ?
-
-{28, 122, 22}, // @
-{5, 4, 18}, // A
-{27, 4, 18}, // B
-{48, 4, 18}, // C
-{69, 4, 17}, // D
-{90, 4, 13}, // E
-{106, 4, 13}, // F
-{121, 4, 18}, // G
-{143, 4, 17}, // H
-{164, 4, 8}, // I
-{175, 4, 16}, // J
-{195, 4, 18}, // K
-{216, 4, 12}, // L
-{230, 4, 23}, // M
-{6, 34, 18}, // N
-{27, 34, 18}, // O
-
-{48, 34, 18}, // P
-{68, 34, 18}, // Q
-{90, 34, 17}, // R
-{110, 34, 18}, // S
-{130, 34, 14}, // T
-{146, 34, 18}, // U
-{166, 34, 19}, // V
-{185, 34, 29}, // W
-{215, 34, 18}, // X
-{234, 34, 18}, // Y
-{5, 64, 14}, // Z
-{60, 152, 7}, // [
-{106, 151, 13}, // '\'
-{83, 152, 7}, // ]
-{128, 122, 17}, // ^
-{4, 152, 21}, // _
-
-{134, 181, 5}, // '
-{5, 4, 18}, // A
-{27, 4, 18}, // B
-{48, 4, 18}, // C
-{69, 4, 17}, // D
-{90, 4, 13}, // E
-{106, 4, 13}, // F
-{121, 4, 18}, // G
-{143, 4, 17}, // H
-{164, 4, 8}, // I
-{175, 4, 16}, // J
-{195, 4, 18}, // K
-{216, 4, 12}, // L
-{230, 4, 23}, // M
-{6, 34, 18}, // N
-{27, 34, 18}, // O
-
-{48, 34, 18}, // P
-{68, 34, 18}, // Q
-{90, 34, 17}, // R
-{110, 34, 18}, // S
-{130, 34, 14}, // T
-{146, 34, 18}, // U
-{166, 34, 19}, // V
-{185, 34, 29}, // W
-{215, 34, 18}, // X
-{234, 34, 18}, // Y
-{5, 64, 14}, // Z
-{153, 152, 13}, // {
-{11, 181, 5}, // |
-{180, 152, 13}, // }
-{79, 93, 17}, // ~
-{0, 0, -1} // DEL
-};
-
-static int propMapB[26][3] = {
-{11, 12, 33},
-{49, 12, 31},
-{85, 12, 31},
-{120, 12, 30},
-{156, 12, 21},
-{183, 12, 21},
-{207, 12, 32},
-
-{13, 55, 30},
-{49, 55, 13},
-{66, 55, 29},
-{101, 55, 31},
-{135, 55, 21},
-{158, 55, 40},
-{204, 55, 32},
-
-{12, 97, 31},
-{48, 97, 31},
-{82, 97, 30},
-{118, 97, 30},
-{153, 97, 30},
-{185, 97, 25},
-{213, 97, 30},
-
-{11, 139, 32},
-{42, 139, 51},
-{93, 139, 32},
-{126, 139, 31},
-{158, 139, 25},
-};
-
-#define PROPB_GAP_WIDTH 4
-#define PROPB_SPACE_WIDTH 12
-#define PROPB_HEIGHT 36
-
-/*
-=================
-UI_DrawBannerString
-=================
-*/
-static void UI_DrawBannerString2( int x, int y, const char* str, vec4_t color )
+void CG_ColorForHealth( vec4_t hcolor )
{
- const char* s;
- unsigned char ch;
- float ax;
- float ay;
- float aw;
- float ah;
- float frow;
- float fcol;
- float fwidth;
- float fheight;
-
- // draw the colored text
- trap_R_SetColor( color );
-
- ax = x * cgs.screenXScale + cgs.screenXBias;
- ay = y * cgs.screenXScale;
-
- s = str;
- while ( *s )
- {
- ch = *s & 127;
- if ( ch == ' ' ) {
- ax += ((float)PROPB_SPACE_WIDTH + (float)PROPB_GAP_WIDTH)* cgs.screenXScale;
- }
- else if ( ch >= 'A' && ch <= 'Z' ) {
- ch -= 'A';
- fcol = (float)propMapB[ch][0] / 256.0f;
- frow = (float)propMapB[ch][1] / 256.0f;
- fwidth = (float)propMapB[ch][2] / 256.0f;
- fheight = (float)PROPB_HEIGHT / 256.0f;
- aw = (float)propMapB[ch][2] * cgs.screenXScale;
- ah = (float)PROPB_HEIGHT * cgs.screenXScale;
- trap_R_DrawStretchPic( ax, ay, aw, ah, fcol, frow, fcol+fwidth, frow+fheight, cgs.media.charsetPropB );
- ax += (aw + (float)PROPB_GAP_WIDTH * cgs.screenXScale);
- }
- s++;
- }
-
- trap_R_SetColor( NULL );
-}
-
-void UI_DrawBannerString( int x, int y, const char* str, int style, vec4_t color ) {
- const char * s;
- int ch;
- int width;
- vec4_t drawcolor;
-
- // find the width of the drawn text
- s = str;
- width = 0;
- while ( *s ) {
- ch = *s;
- if ( ch == ' ' ) {
- width += PROPB_SPACE_WIDTH;
- }
- else if ( ch >= 'A' && ch <= 'Z' ) {
- width += propMapB[ch - 'A'][2] + PROPB_GAP_WIDTH;
- }
- s++;
- }
- width -= PROPB_GAP_WIDTH;
-
- switch( style & UI_FORMATMASK ) {
- case UI_CENTER:
- x -= width / 2;
- break;
-
- case UI_RIGHT:
- x -= width;
- break;
-
- case UI_LEFT:
- default:
- break;
- }
-
- if ( style & UI_DROPSHADOW ) {
- drawcolor[0] = drawcolor[1] = drawcolor[2] = 0;
- drawcolor[3] = color[3];
- UI_DrawBannerString2( x+2, y+2, str, drawcolor );
- }
-
- UI_DrawBannerString2( x, y, str, color );
-}
-
-
-int UI_ProportionalStringWidth( const char* str ) {
- const char * s;
- int ch;
- int charWidth;
- int width;
-
- s = str;
- width = 0;
- while ( *s ) {
- ch = *s & 127;
- charWidth = propMap[ch][2];
- if ( charWidth != -1 ) {
- width += charWidth;
- width += PROP_GAP_WIDTH;
- }
- s++;
- }
-
- width -= PROP_GAP_WIDTH;
- return width;
-}
-
-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;
- float ax;
- float ay;
- float aw;
- float ah;
- float frow;
- float fcol;
- float fwidth;
- float fheight;
-
- // draw the colored text
- trap_R_SetColor( color );
-
- ax = x * cgs.screenXScale + cgs.screenXBias;
- ay = y * cgs.screenXScale;
-
- s = str;
- while ( *s )
- {
- ch = *s & 127;
- if ( ch == ' ' ) {
- aw = (float)PROP_SPACE_WIDTH * cgs.screenXScale * sizeScale;
- } else if ( propMap[ch][2] != -1 ) {
- fcol = (float)propMap[ch][0] / 256.0f;
- frow = (float)propMap[ch][1] / 256.0f;
- fwidth = (float)propMap[ch][2] / 256.0f;
- fheight = (float)PROP_HEIGHT / 256.0f;
- aw = (float)propMap[ch][2] * cgs.screenXScale * sizeScale;
- ah = (float)PROP_HEIGHT * cgs.screenXScale * sizeScale;
- trap_R_DrawStretchPic( ax, ay, aw, ah, fcol, frow, fcol+fwidth, frow+fheight, charset );
- } else {
- aw = 0;
- }
-
- ax += (aw + (float)PROP_GAP_WIDTH * cgs.screenXScale * sizeScale);
- s++;
- }
-
- trap_R_SetColor( NULL );
-}
-
-/*
-=================
-UI_ProportionalSizeScale
-=================
-*/
-float UI_ProportionalSizeScale( int style ) {
- if( style & UI_SMALLFONT ) {
- return 0.75;
- }
-
- return 1.00;
-}
-
-
-/*
-=================
-UI_DrawProportionalString
-=================
-*/
-void UI_DrawProportionalString( int x, int y, const char* str, int style, vec4_t color ) {
- vec4_t drawcolor;
- int width;
- float sizeScale;
-
- sizeScale = UI_ProportionalSizeScale( style );
-
- switch( style & UI_FORMATMASK ) {
- case UI_CENTER:
- width = UI_ProportionalStringWidth( str ) * sizeScale;
- x -= width / 2;
- break;
-
- case UI_RIGHT:
- width = UI_ProportionalStringWidth( str ) * sizeScale;
- x -= width;
- break;
-
- case UI_LEFT:
- default:
- break;
- }
-
- if ( style & UI_DROPSHADOW ) {
- drawcolor[0] = drawcolor[1] = drawcolor[2] = 0;
- drawcolor[3] = color[3];
- UI_DrawProportionalString2( x+2, y+2, str, drawcolor, sizeScale, cgs.media.charsetProp );
- }
-
- if ( style & UI_INVERSE ) {
- drawcolor[0] = color[0] * 0.8;
- drawcolor[1] = color[1] * 0.8;
- drawcolor[2] = color[2] * 0.8;
- drawcolor[3] = color[3];
- UI_DrawProportionalString2( x, y, str, drawcolor, sizeScale, cgs.media.charsetProp );
- return;
- }
-
- if ( style & UI_PULSE ) {
- drawcolor[0] = color[0] * 0.8;
- drawcolor[1] = color[1] * 0.8;
- drawcolor[2] = color[2] * 0.8;
- drawcolor[3] = color[3];
- UI_DrawProportionalString2( x, y, str, color, sizeScale, cgs.media.charsetProp );
-
- drawcolor[0] = color[0];
- drawcolor[1] = color[1];
- drawcolor[2] = color[2];
- drawcolor[3] = 0.5 + 0.5 * sin( cg.time / PULSE_DIVISOR );
- UI_DrawProportionalString2( x, y, str, drawcolor, sizeScale, cgs.media.charsetPropGlow );
- return;
- }
-
- UI_DrawProportionalString2( x, y, str, color, sizeScale, cgs.media.charsetProp );
+ CG_GetColorForHealth( cg.snap->ps.stats[ STAT_HEALTH ], 0, hcolor );
}
-#endif // Q3STATIC
diff --git a/src/cgame/cg_ents.c b/src/cgame/cg_ents.c
index f0e10574..c4b287aa 100644
--- a/src/cgame/cg_ents.c
+++ b/src/cgame/cg_ents.c
@@ -27,22 +27,22 @@ tag location
======================
*/
void CG_PositionEntityOnTag( refEntity_t *entity, const refEntity_t *parent,
- qhandle_t parentModel, char *tagName ) {
- int i;
+ qhandle_t parentModel, char *tagName )
+{
+ int i;
orientation_t lerped;
// lerp the tag
trap_R_LerpTag( &lerped, parentModel, parent->oldframe, parent->frame,
- 1.0 - parent->backlerp, tagName );
+ 1.0 - parent->backlerp, tagName );
// FIXME: allow origin offsets along tag?
VectorCopy( parent->origin, entity->origin );
- for ( i = 0 ; i < 3 ; i++ ) {
- VectorMA( entity->origin, lerped.origin[i], parent->axis[i], entity->origin );
- }
+ for( i = 0; i < 3; i++ )
+ VectorMA( entity->origin, lerped.origin[ i ], parent->axis[ i ], entity->origin );
// had to cast away the const to avoid compiler problems...
- MatrixMultiply( lerped.axis, ((refEntity_t *)parent)->axis, entity->axis );
+ MatrixMultiply( lerped.axis, ( (refEntity_t *)parent )->axis, entity->axis );
entity->backlerp = parent->backlerp;
}
@@ -56,25 +56,25 @@ tag location
======================
*/
void CG_PositionRotatedEntityOnTag( refEntity_t *entity, const refEntity_t *parent,
- qhandle_t parentModel, char *tagName ) {
- int i;
+ qhandle_t parentModel, char *tagName )
+{
+ int i;
orientation_t lerped;
- vec3_t tempAxis[3];
+ vec3_t tempAxis[ 3 ];
//AxisClear( entity->axis );
// lerp the tag
trap_R_LerpTag( &lerped, parentModel, parent->oldframe, parent->frame,
- 1.0 - parent->backlerp, tagName );
+ 1.0 - parent->backlerp, tagName );
// FIXME: allow origin offsets along tag?
VectorCopy( parent->origin, entity->origin );
- for ( i = 0 ; i < 3 ; i++ ) {
- VectorMA( entity->origin, lerped.origin[i], parent->axis[i], entity->origin );
- }
+ for( i = 0; i < 3; i++ )
+ VectorMA( entity->origin, lerped.origin[ i ], parent->axis[ i ], entity->origin );
// had to cast away the const to avoid compiler problems...
MatrixMultiply( entity->axis, lerped.axis, tempAxis );
- MatrixMultiply( tempAxis, ((refEntity_t *)parent)->axis, entity->axis );
+ MatrixMultiply( tempAxis, ( (refEntity_t *)parent )->axis, entity->axis );
}
@@ -94,17 +94,19 @@ CG_SetEntitySoundPosition
Also called by event processing code
======================
*/
-void CG_SetEntitySoundPosition( centity_t *cent ) {
- if ( cent->currentState.solid == SOLID_BMODEL ) {
+void CG_SetEntitySoundPosition( centity_t *cent )
+{
+ if( cent->currentState.solid == SOLID_BMODEL )
+ {
vec3_t origin;
- float *v;
+ float *v;
v = cgs.inlineModelMidpoints[ cent->currentState.modelindex ];
VectorAdd( cent->lerpOrigin, v, origin );
trap_S_UpdateEntityPosition( cent->currentState.number, origin );
- } else {
- trap_S_UpdateEntityPosition( cent->currentState.number, cent->lerpOrigin );
}
+ else
+ trap_S_UpdateEntityPosition( cent->currentState.number, cent->lerpOrigin );
}
/*
@@ -114,19 +116,23 @@ CG_EntityEffects
Add continuous entity effects, like local entity emission and lighting
==================
*/
-static void CG_EntityEffects( centity_t *cent ) {
-
+static void CG_EntityEffects( centity_t *cent )
+{
// update sound origins
CG_SetEntitySoundPosition( cent );
// add loop sound
- if ( cent->currentState.loopSound ) {
- if (cent->currentState.eType != ET_SPEAKER) {
+ 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 ] );
- } else {
+ cgs.gameSounds[ cent->currentState.loopSound ] );
+ }
+ else
+ {
trap_S_AddRealLoopingSound( cent->currentState.number, cent->lerpOrigin, vec3_origin,
- cgs.gameSounds[ cent->currentState.loopSound ] );
+ cgs.gameSounds[ cent->currentState.loopSound ] );
}
}
@@ -153,18 +159,18 @@ static void CG_EntityEffects( centity_t *cent ) {
CG_General
==================
*/
-static void CG_General( centity_t *cent ) {
+static void CG_General( centity_t *cent )
+{
refEntity_t ent;
entityState_t *s1;
s1 = &cent->currentState;
// if set to invisible, skip
- if (!s1->modelindex) {
+ if( !s1->modelindex )
return;
- }
- memset (&ent, 0, sizeof(ent));
+ memset( &ent, 0, sizeof( ent ) );
// set frame
@@ -175,18 +181,17 @@ static void CG_General( centity_t *cent ) {
VectorCopy( cent->lerpOrigin, ent.origin);
VectorCopy( cent->lerpOrigin, ent.oldorigin);
- ent.hModel = cgs.gameModels[s1->modelindex];
+ ent.hModel = cgs.gameModels[ s1->modelindex ];
// player model
- if (s1->number == cg.snap->ps.clientNum) {
+ if( s1->number == cg.snap->ps.clientNum )
ent.renderfx |= RF_THIRD_PERSON; // only draw from mirrors
- }
// convert angles to axis
AnglesToAxis( cent->lerpAngles, ent.axis );
// add to refresh list
- trap_R_AddRefEntityToScene (&ent);
+ trap_R_AddRefEntityToScene( &ent );
}
/*
@@ -196,20 +201,21 @@ CG_Speaker
Speaker entities can automatically play sounds
==================
*/
-static void CG_Speaker( centity_t *cent ) {
- if ( ! cent->currentState.clientNum ) { // FIXME: use something other than clientNum...
+static void CG_Speaker( centity_t *cent )
+{
+ if( ! cent->currentState.clientNum )
+ { // FIXME: use something other than clientNum...
return; // not auto triggering
}
- if ( cg.time < cent->miscTime ) {
+ if( cg.time < cent->miscTime )
return;
- }
- trap_S_StartSound (NULL, cent->currentState.number, CHAN_ITEM, cgs.gameSounds[cent->currentState.eventParm] );
+ trap_S_StartSound( NULL, cent->currentState.number, CHAN_ITEM, cgs.gameSounds[ cent->currentState.eventParm ] );
// ent->s.frame = ent->wait * 10;
// ent->s.clientNum = ent->random * 10;
- cent->miscTime = cg.time + cent->currentState.frame * 100 + cent->currentState.clientNum * 100 * crandom();
+ cent->miscTime = cg.time + cent->currentState.frame * 100 + cent->currentState.clientNum * 100 * crandom( );
}
@@ -230,55 +236,42 @@ static void CG_Missile( centity_t *cent )
int index;
s1 = &cent->currentState;
- if ( s1->weapon > WP_NUM_WEAPONS ) {
+ if( s1->weapon > WP_NUM_WEAPONS )
s1->weapon = 0;
- }
- weapon = &cg_weapons[s1->weapon];
+
+ weapon = &cg_weapons[ s1->weapon ];
// calculate the axis
- VectorCopy( s1->angles, cent->lerpAngles);
+ VectorCopy( s1->angles, cent->lerpAngles );
// add trails
- if ( weapon->missileTrailFunc )
- {
+ if( weapon->missileTrailFunc )
weapon->missileTrailFunc( cent, weapon );
- }
// add dynamic light
- if ( weapon->missileDlight ) {
- trap_R_AddLightToScene(cent->lerpOrigin, weapon->missileDlight,
- weapon->missileDlightColor[0], weapon->missileDlightColor[1], weapon->missileDlightColor[2] );
+ if( weapon->missileDlight )
+ {
+ trap_R_AddLightToScene( cent->lerpOrigin, weapon->missileDlight,
+ weapon->missileDlightColor[ 0 ], weapon->missileDlightColor[ 1 ], weapon->missileDlightColor[ 2 ] );
}
// add missile sound
- if ( weapon->missileSound ) {
+ if( weapon->missileSound )
+ {
vec3_t velocity;
BG_EvaluateTrajectoryDelta( &cent->currentState.pos, cg.time, velocity );
- //TA: FIXME: hack until i figure out why trap_S_ALS has a problem with velocity`
- if( s1->weapon == WP_PLASMAGUN )
- VectorClear( velocity );
-
trap_S_AddLoopingSound( cent->currentState.number, cent->lerpOrigin, velocity, weapon->missileSound );
}
// create the render entity
- memset (&ent, 0, sizeof(ent));
- VectorCopy( cent->lerpOrigin, ent.origin);
- VectorCopy( cent->lerpOrigin, ent.oldorigin);
+ memset( &ent, 0, sizeof( ent ) );
+ VectorCopy( cent->lerpOrigin, ent.origin );
+ VectorCopy( cent->lerpOrigin, ent.oldorigin );
switch( cent->currentState.weapon )
{
- case WP_PLASMAGUN:
- ent.reType = RT_SPRITE;
- ent.radius = 16;
- ent.rotation = 0;
- ent.customShader = cgs.media.plasmaBallShader;
- trap_R_AddRefEntityToScene( &ent );
- return;
- break;
-
case WP_PULSE_RIFLE:
ent.reType = RT_SPRITE;
ent.radius = 4;
@@ -335,66 +328,18 @@ static void CG_Missile( centity_t *cent )
/*
===============
-CG_Grapple
-
-This is called when the grapple is sitting up against the wall
-===============
-*/
-static void CG_Grapple( centity_t *cent ) {
- refEntity_t ent;
- entityState_t *s1;
- const weaponInfo_t *weapon;
-
- s1 = &cent->currentState;
- if ( s1->weapon > WP_NUM_WEAPONS ) {
- s1->weapon = 0;
- }
- weapon = &cg_weapons[s1->weapon];
-
- // calculate the axis
- VectorCopy( s1->angles, cent->lerpAngles);
-
-#if 0 // FIXME add grapple pull sound here..?
- // add missile sound
- if ( weapon->missileSound ) {
- trap_S_AddLoopingSound( cent->currentState.number, cent->lerpOrigin, vec3_origin, weapon->missileSound );
- }
-#endif
-
- // Will draw cable if needed
- CG_GrappleTrail ( cent, weapon );
-
- // create the render entity
- memset (&ent, 0, sizeof(ent));
- VectorCopy( cent->lerpOrigin, ent.origin);
- VectorCopy( cent->lerpOrigin, ent.oldorigin);
-
- // flicker between two skins
- ent.skinNum = cg.clientFrame & 1;
- ent.hModel = weapon->missileModel;
- ent.renderfx = weapon->missileRenderfx | RF_NOSHADOW;
-
- // convert direction of travel into axis
- if ( VectorNormalize2( s1->pos.trDelta, ent.axis[0] ) == 0 ) {
- ent.axis[0][2] = 1;
- }
-
- trap_R_AddRefEntityToScene( &ent );
-}
-
-/*
-===============
CG_Mover
===============
*/
-static void CG_Mover( centity_t *cent ) {
+static void CG_Mover( centity_t *cent )
+{
refEntity_t ent;
entityState_t *s1;
s1 = &cent->currentState;
// create the render entity
- memset (&ent, 0, sizeof(ent));
+ memset( &ent, 0, sizeof( ent ) );
VectorCopy( cent->lerpOrigin, ent.origin);
VectorCopy( cent->lerpOrigin, ent.oldorigin);
AnglesToAxis( cent->lerpAngles, ent.axis );
@@ -405,20 +350,20 @@ static void CG_Mover( centity_t *cent ) {
ent.skinNum = ( cg.time >> 6 ) & 1;
// get the model, either as a bmodel or a modelindex
- if ( s1->solid == SOLID_BMODEL ) {
- ent.hModel = cgs.inlineDrawModel[s1->modelindex];
- } else {
- ent.hModel = cgs.gameModels[s1->modelindex];
- }
+ if( s1->solid == SOLID_BMODEL )
+ ent.hModel = cgs.inlineDrawModel[ s1->modelindex ];
+ else
+ ent.hModel = cgs.gameModels[ s1->modelindex ];
// add to refresh list
- trap_R_AddRefEntityToScene(&ent);
+ trap_R_AddRefEntityToScene( &ent );
// add the secondary model
- if ( s1->modelindex2 ) {
+ if( s1->modelindex2 )
+ {
ent.skinNum = 0;
- ent.hModel = cgs.gameModels[s1->modelindex2];
- trap_R_AddRefEntityToScene(&ent);
+ ent.hModel = cgs.gameModels[ s1->modelindex2 ];
+ trap_R_AddRefEntityToScene( &ent );
}
}
@@ -430,14 +375,15 @@ CG_Beam
Also called as an event
===============
*/
-void CG_Beam( centity_t *cent ) {
+void CG_Beam( centity_t *cent )
+{
refEntity_t ent;
entityState_t *s1;
s1 = &cent->currentState;
// create the render entity
- memset (&ent, 0, sizeof(ent));
+ memset( &ent, 0, sizeof( ent ) );
VectorCopy( s1->pos.trBase, ent.origin );
VectorCopy( s1->origin2, ent.oldorigin );
AxisClear( ent.axis );
@@ -446,7 +392,7 @@ void CG_Beam( centity_t *cent ) {
ent.renderfx = RF_NOSHADOW;
// add to refresh list
- trap_R_AddRefEntityToScene(&ent);
+ trap_R_AddRefEntityToScene( &ent );
}
@@ -455,31 +401,32 @@ void CG_Beam( centity_t *cent ) {
CG_Portal
===============
*/
-static void CG_Portal( centity_t *cent ) {
+static void CG_Portal( centity_t *cent )
+{
refEntity_t ent;
entityState_t *s1;
s1 = &cent->currentState;
// create the render entity
- memset (&ent, 0, sizeof(ent));
+ memset( &ent, 0, sizeof( ent ) );
VectorCopy( cent->lerpOrigin, ent.origin );
VectorCopy( s1->origin2, ent.oldorigin );
- ByteToDir( s1->eventParm, ent.axis[0] );
- PerpendicularVector( ent.axis[1], ent.axis[0] );
+ ByteToDir( s1->eventParm, ent.axis[ 0 ] );
+ PerpendicularVector( ent.axis[ 1 ], ent.axis[ 0 ] );
// negating this tends to get the directions like they want
// we really should have a camera roll value
- VectorSubtract( vec3_origin, ent.axis[1], ent.axis[1] );
+ VectorSubtract( vec3_origin, ent.axis[ 1 ], ent.axis[ 1 ] );
- CrossProduct( ent.axis[0], ent.axis[1], ent.axis[2] );
+ CrossProduct( ent.axis[ 0 ], ent.axis[ 1 ], ent.axis[ 2 ] );
ent.reType = RT_PORTALSURFACE;
ent.oldframe = s1->powerups;
ent.frame = s1->frame; // rotation speed
- ent.skinNum = s1->clientNum/256.0 * 360; // roll offset
+ ent.skinNum = s1->clientNum / 256.0 * 360; // roll offset
// add to refresh list
- trap_R_AddRefEntityToScene(&ent);
+ trap_R_AddRefEntityToScene( &ent );
}
//============================================================================
@@ -548,18 +495,22 @@ CG_AdjustPositionForMover
Also called by client movement prediction code
=========================
*/
-void CG_AdjustPositionForMover( const vec3_t in, int moverNum, int fromTime, int toTime, vec3_t out ) {
+void CG_AdjustPositionForMover( const vec3_t in, int moverNum, int fromTime, int toTime, vec3_t out )
+{
centity_t *cent;
- vec3_t oldOrigin, origin, deltaOrigin;
- vec3_t oldAngles, angles, deltaAngles;
+ vec3_t oldOrigin, origin, deltaOrigin;
+ vec3_t oldAngles, angles, deltaAngles;
- if ( moverNum <= 0 || moverNum >= ENTITYNUM_MAX_NORMAL ) {
+ if( moverNum <= 0 || moverNum >= ENTITYNUM_MAX_NORMAL )
+ {
VectorCopy( in, out );
return;
}
cent = &cg_entities[ moverNum ];
- if ( cent->currentState.eType != ET_MOVER ) {
+
+ if( cent->currentState.eType != ET_MOVER )
+ {
VectorCopy( in, out );
return;
}
@@ -584,15 +535,15 @@ void CG_AdjustPositionForMover( const vec3_t in, int moverNum, int fromTime, int
CG_InterpolateEntityPosition
=============================
*/
-static void CG_InterpolateEntityPosition( centity_t *cent ) {
+static void CG_InterpolateEntityPosition( centity_t *cent )
+{
vec3_t current, next;
- float f;
+ float f;
// it would be an internal error to find an entity that interpolates without
// a snapshot ahead of the current one
- if ( cg.nextSnap == NULL ) {
+ if( cg.nextSnap == NULL )
CG_Error( "CG_InterpoateEntityPosition: cg.nextSnap == NULL" );
- }
f = cg.frameInterpolation;
@@ -601,16 +552,16 @@ static void CG_InterpolateEntityPosition( centity_t *cent ) {
BG_EvaluateTrajectory( &cent->currentState.pos, cg.snap->serverTime, current );
BG_EvaluateTrajectory( &cent->nextState.pos, cg.nextSnap->serverTime, next );
- cent->lerpOrigin[0] = current[0] + f * ( next[0] - current[0] );
- cent->lerpOrigin[1] = current[1] + f * ( next[1] - current[1] );
- cent->lerpOrigin[2] = current[2] + f * ( next[2] - current[2] );
+ cent->lerpOrigin[ 0 ] = current[ 0 ] + f * ( next[ 0 ] - current[ 0 ] );
+ cent->lerpOrigin[ 1 ] = current[ 1 ] + f * ( next[ 1 ] - current[ 1 ] );
+ cent->lerpOrigin[ 2 ] = current[ 2 ] + f * ( next[ 2 ] - current[ 2 ] );
BG_EvaluateTrajectory( &cent->currentState.apos, cg.snap->serverTime, current );
BG_EvaluateTrajectory( &cent->nextState.apos, cg.nextSnap->serverTime, next );
- cent->lerpAngles[0] = LerpAngle( current[0], next[0], f );
- cent->lerpAngles[1] = LerpAngle( current[1], next[1], f );
- cent->lerpAngles[2] = LerpAngle( current[2], next[2], f );
+ cent->lerpAngles[ 0 ] = LerpAngle( current[ 0 ], next[ 0 ], f );
+ cent->lerpAngles[ 1 ] = LerpAngle( current[ 1 ], next[ 1 ], f );
+ cent->lerpAngles[ 2 ] = LerpAngle( current[ 2 ], next[ 2 ], f );
}
@@ -620,25 +571,30 @@ CG_CalcEntityLerpPositions
===============
*/
-static void CG_CalcEntityLerpPositions( centity_t *cent ) {
+static void CG_CalcEntityLerpPositions( centity_t *cent )
+{
// if this player does not want to see extrapolated players
- if ( !cg_smoothClients.integer ) {
+ if( !cg_smoothClients.integer )
+ {
// make sure the clients use TR_INTERPOLATE
- if ( cent->currentState.number < MAX_CLIENTS ) {
+ if( cent->currentState.number < MAX_CLIENTS )
+ {
cent->currentState.pos.trType = TR_INTERPOLATE;
cent->nextState.pos.trType = TR_INTERPOLATE;
}
}
- if ( cent->interpolate && cent->currentState.pos.trType == TR_INTERPOLATE ) {
+ if( cent->interpolate && cent->currentState.pos.trType == TR_INTERPOLATE )
+ {
CG_InterpolateEntityPosition( cent );
return;
}
// first see if we can interpolate between two snaps for
// linear extrapolated clients
- if ( cent->interpolate && cent->currentState.pos.trType == TR_LINEAR_STOP &&
- cent->currentState.number < MAX_CLIENTS) {
+ if( cent->interpolate && cent->currentState.pos.trType == TR_LINEAR_STOP &&
+ cent->currentState.number < MAX_CLIENTS )
+ {
CG_InterpolateEntityPosition( cent );
return;
}
@@ -649,9 +605,10 @@ static void CG_CalcEntityLerpPositions( centity_t *cent ) {
// adjust for riding a mover if it wasn't rolled into the predicted
// player state
- if ( cent != &cg.predictedPlayerEntity ) {
+ if( cent != &cg.predictedPlayerEntity )
+ {
CG_AdjustPositionForMover( cent->lerpOrigin, cent->currentState.groundEntityNum,
- cg.snap->serverTime, cg.time, cent->lerpOrigin );
+ cg.snap->serverTime, cg.time, cent->lerpOrigin );
}
}
@@ -663,11 +620,11 @@ CG_AddCEntity
===============
*/
-static void CG_AddCEntity( centity_t *cent ) {
+static void CG_AddCEntity( centity_t *cent )
+{
// event-only entities will have been dealt with already
- if ( cent->currentState.eType >= ET_EVENTS ) {
+ if( cent->currentState.eType >= ET_EVENTS )
return;
- }
// calculate the current origin
CG_CalcEntityLerpPositions( cent );
@@ -675,53 +632,64 @@ static void CG_AddCEntity( centity_t *cent ) {
// add automatic effects
CG_EntityEffects( cent );
- switch ( cent->currentState.eType ) {
- default:
- CG_Error( "Bad entity type: %i\n", cent->currentState.eType );
- break;
- case ET_INVISIBLE:
- case ET_PUSH_TRIGGER:
- case ET_TELEPORT_TRIGGER:
- break;
- case ET_GENERAL:
- CG_General( cent );
- break;
- case ET_CORPSE:
- CG_Corpse( cent );
- break;
- case ET_PLAYER:
- CG_Player( cent );
- break;
- case ET_BUILDABLE:
- CG_Buildable( cent );
- break;
- case ET_MISSILE:
- CG_Missile( cent );
- break;
- case ET_MOVER:
- CG_Mover( cent );
- break;
- case ET_BEAM:
- CG_Beam( cent );
- break;
- case ET_PORTAL:
- CG_Portal( cent );
- break;
- case ET_SPEAKER:
- CG_Speaker( cent );
- break;
- case ET_GRAPPLE:
- CG_Grapple( cent );
- break;
- case ET_SPRITER:
- CG_Spriter( cent );
- break;
- case ET_ANIMMAPOBJ:
- CG_animMapObj( cent );
- break;
- case ET_LIGHTFLARE:
- CG_LightFlare( cent );
- break;
+ switch( cent->currentState.eType )
+ {
+ default:
+ CG_Error( "Bad entity type: %i\n", cent->currentState.eType );
+ break;
+
+ case ET_INVISIBLE:
+ case ET_PUSH_TRIGGER:
+ case ET_TELEPORT_TRIGGER:
+ break;
+
+ case ET_GENERAL:
+ CG_General( cent );
+ break;
+
+ case ET_CORPSE:
+ CG_Corpse( cent );
+ break;
+
+ case ET_PLAYER:
+ CG_Player( cent );
+ break;
+
+ case ET_BUILDABLE:
+ CG_Buildable( cent );
+ break;
+
+ case ET_MISSILE:
+ CG_Missile( cent );
+ break;
+
+ case ET_MOVER:
+ CG_Mover( cent );
+ break;
+
+ case ET_BEAM:
+ CG_Beam( cent );
+ break;
+
+ case ET_PORTAL:
+ CG_Portal( cent );
+ break;
+
+ case ET_SPEAKER:
+ CG_Speaker( cent );
+ break;
+
+ case ET_SPRITER:
+ CG_Spriter( cent );
+ break;
+
+ case ET_ANIMMAPOBJ:
+ CG_animMapObj( cent );
+ break;
+
+ case ET_LIGHTFLARE:
+ CG_LightFlare( cent );
+ break;
}
}
@@ -731,34 +699,38 @@ CG_AddPacketEntities
===============
*/
-void CG_AddPacketEntities( void ) {
- int num;
- centity_t *cent;
+void CG_AddPacketEntities( void )
+{
+ int num;
+ centity_t *cent;
playerState_t *ps;
// set cg.frameInterpolation
- if ( cg.nextSnap ) {
+ if( cg.nextSnap )
+ {
int delta;
- delta = (cg.nextSnap->serverTime - cg.snap->serverTime);
- if ( delta == 0 ) {
+ delta = ( cg.nextSnap->serverTime - cg.snap->serverTime );
+
+ if( delta == 0 )
cg.frameInterpolation = 0;
- } else {
+ else
cg.frameInterpolation = (float)( cg.time - cg.snap->serverTime ) / delta;
- }
- } else {
+ }
+ else
+ {
cg.frameInterpolation = 0; // actually, it should never be used, because
// no entities should be marked as interpolating
}
// the auto-rotating items will all have the same axis
- cg.autoAngles[0] = 0;
- cg.autoAngles[1] = ( cg.time & 2047 ) * 360 / 2048.0;
- cg.autoAngles[2] = 0;
+ cg.autoAngles[ 0 ] = 0;
+ cg.autoAngles[ 1 ] = ( cg.time & 2047 ) * 360 / 2048.0;
+ cg.autoAngles[ 2 ] = 0;
- cg.autoAnglesFast[0] = 0;
- cg.autoAnglesFast[1] = ( cg.time & 1023 ) * 360 / 1024.0f;
- cg.autoAnglesFast[2] = 0;
+ cg.autoAnglesFast[ 0 ] = 0;
+ cg.autoAnglesFast[ 1 ] = ( cg.time & 1023 ) * 360 / 1024.0f;
+ cg.autoAnglesFast[ 2 ] = 0;
AnglesToAxis( cg.autoAngles, cg.autoAxis );
AnglesToAxis( cg.autoAnglesFast, cg.autoAxisFast );
diff --git a/src/cgame/cg_event.c b/src/cgame/cg_event.c
index b8c5e44c..98337c45 100644
--- a/src/cgame/cg_event.c
+++ b/src/cgame/cg_event.c
@@ -17,271 +17,239 @@
#include "cg_local.h"
-// for the voice chats
-#include "../../ui/menudef.h"
-
-//==========================================================================
-
-/*
-===================
-CG_PlaceString
-
-Also called by scoreboard drawing
-===================
-*/
-const char *CG_PlaceString( int rank ) {
- static char str[64];
- char *s, *t;
-
- if ( rank & RANK_TIED_FLAG ) {
- rank &= ~RANK_TIED_FLAG;
- t = "Tied for ";
- } else {
- t = "";
- }
-
- if ( rank == 1 ) {
- s = S_COLOR_BLUE "1st" S_COLOR_WHITE; // draw in blue
- } else if ( rank == 2 ) {
- s = S_COLOR_RED "2nd" S_COLOR_WHITE; // draw in red
- } else if ( rank == 3 ) {
- s = S_COLOR_YELLOW "3rd" S_COLOR_WHITE; // draw in yellow
- } else if ( rank == 11 ) {
- s = "11th";
- } else if ( rank == 12 ) {
- s = "12th";
- } else if ( rank == 13 ) {
- s = "13th";
- } else if ( rank % 10 == 1 ) {
- s = va("%ist", rank);
- } else if ( rank % 10 == 2 ) {
- s = va("%ind", rank);
- } else if ( rank % 10 == 3 ) {
- s = va("%ird", rank);
- } else {
- s = va("%ith", rank);
- }
-
- Com_sprintf( str, sizeof( str ), "%s%s", t, s );
- return str;
-}
-
/*
=============
CG_Obituary
=============
*/
-static void CG_Obituary( entityState_t *ent ) {
- int mod;
- int target, attacker;
- char *message;
- char *message2;
- const char *targetInfo;
- const char *attackerInfo;
- char targetName[32];
- char attackerName[32];
- gender_t gender;
+static void CG_Obituary( entityState_t *ent )
+{
+ int mod;
+ int target, attacker;
+ char *message;
+ char *message2;
+ const char *targetInfo;
+ const char *attackerInfo;
+ char targetName[ 32 ];
+ char attackerName[ 32 ];
+ gender_t gender;
clientInfo_t *ci;
target = ent->otherEntityNum;
attacker = ent->otherEntityNum2;
mod = ent->eventParm;
- if ( target < 0 || target >= MAX_CLIENTS ) {
+ if( target < 0 || target >= MAX_CLIENTS )
CG_Error( "CG_Obituary: target out of range" );
- }
- ci = &cgs.clientinfo[target];
+
+ ci = &cgs.clientinfo[ target ];
- if ( attacker < 0 || attacker >= MAX_CLIENTS ) {
+ if( attacker < 0 || attacker >= MAX_CLIENTS )
+ {
attacker = ENTITYNUM_WORLD;
attackerInfo = NULL;
- } else {
- attackerInfo = CG_ConfigString( CS_PLAYERS + attacker );
}
+ else
+ attackerInfo = CG_ConfigString( CS_PLAYERS + attacker );
targetInfo = CG_ConfigString( CS_PLAYERS + target );
- if ( !targetInfo ) {
+
+ if( !targetInfo )
return;
- }
- Q_strncpyz( targetName, Info_ValueForKey( targetInfo, "n" ), sizeof(targetName) - 2);
+
+ Q_strncpyz( targetName, Info_ValueForKey( targetInfo, "n" ), sizeof( targetName ) - 2);
strcat( targetName, S_COLOR_WHITE );
message2 = "";
// check for single client messages
- switch( mod ) {
- case MOD_SUICIDE:
- message = "suicides";
- break;
- case MOD_FALLING:
- message = "cratered";
- break;
- case MOD_CRUSH:
- message = "was squished";
- break;
- case MOD_WATER:
- message = "sank like a rock";
- break;
- case MOD_SLIME:
- message = "melted";
- break;
- case MOD_LAVA:
- message = "does a back flip into the lava";
- break;
- case MOD_TARGET_LASER:
- message = "saw the light";
- break;
- case MOD_TRIGGER_HURT:
- message = "was in the wrong place";
- break;
- case MOD_HSPAWN:
- message = "should have run further";
- break;
- case MOD_ASPAWN:
- message = "was melted by the acid blood";
- break;
- default:
- message = NULL;
- break;
- }
-
- if (attacker == target) {
- gender = ci->gender;
- switch (mod) {
- case MOD_GRENADE_SPLASH:
- if ( gender == GENDER_FEMALE )
- message = "tripped on her own grenade";
- else if ( gender == GENDER_NEUTER )
- message = "tripped on its own grenade";
- else
- message = "tripped on his own grenade";
+ switch( mod )
+ {
+ case MOD_SUICIDE:
+ message = "suicides";
break;
- case MOD_ROCKET_SPLASH:
- if ( gender == GENDER_FEMALE )
- message = "blew herself up";
- else if ( gender == GENDER_NEUTER )
- message = "blew itself up";
- else
- message = "blew himself up";
+ case MOD_FALLING:
+ message = "cratered";
break;
- case MOD_FLAMER_SPLASH:
- if ( gender == GENDER_FEMALE )
- message = "toasted herself";
- else if ( gender == GENDER_NEUTER )
- message = "toasted itself";
- else
- message = "toasted himself";
+ case MOD_CRUSH:
+ message = "was squished";
+ break;
+ case MOD_WATER:
+ message = "sank like a rock";
+ break;
+ case MOD_SLIME:
+ message = "melted";
+ break;
+ case MOD_LAVA:
+ message = "does a back flip into the lava";
+ break;
+ case MOD_TARGET_LASER:
+ message = "saw the light";
+ break;
+ case MOD_TRIGGER_HURT:
+ message = "was in the wrong place";
break;
- case MOD_BFG_SPLASH:
- message = "should have used a smaller gun";
+ case MOD_HSPAWN:
+ message = "should have run further";
+ break;
+ case MOD_ASPAWN:
+ message = "was melted by the acid blood";
break;
default:
- if ( gender == GENDER_FEMALE )
- message = "killed herself";
- else if ( gender == GENDER_NEUTER )
- message = "killed itself";
- else
- message = "killed himself";
+ message = NULL;
break;
+ }
+
+ if( attacker == target )
+ {
+ gender = ci->gender;
+ switch( mod )
+ {
+ case MOD_GRENADE_SPLASH:
+ if( gender == GENDER_FEMALE )
+ message = "tripped on her own grenade";
+ else if( gender == GENDER_NEUTER )
+ message = "tripped on its own grenade";
+ else
+ message = "tripped on his own grenade";
+ break;
+
+ case MOD_ROCKET_SPLASH:
+ if( gender == GENDER_FEMALE )
+ message = "blew herself up";
+ else if( gender == GENDER_NEUTER )
+ message = "blew itself up";
+ else
+ message = "blew himself up";
+ break;
+
+ case MOD_FLAMER_SPLASH:
+ if( gender == GENDER_FEMALE )
+ message = "toasted herself";
+ else if( gender == GENDER_NEUTER )
+ message = "toasted itself";
+ else
+ message = "toasted himself";
+ break;
+
+ case MOD_BFG_SPLASH:
+ message = "should have used a smaller gun";
+ break;
+
+ default:
+ if( gender == GENDER_FEMALE )
+ message = "killed herself";
+ else if( gender == GENDER_NEUTER )
+ message = "killed itself";
+ else
+ message = "killed himself";
+ break;
}
}
- if (message) {
- CG_Printf( "%s %s.\n", targetName, message);
+ if( message )
+ {
+ CG_Printf( "%s %s.\n", targetName, message );
return;
}
// check for kill messages from the current clientNum
- if ( attacker == cg.snap->ps.clientNum ) {
+ if( attacker == cg.snap->ps.clientNum )
+ {
char *s;
- s = va("You fragged %s", targetName );
+ s = va( "You fragged %s", targetName );
CG_CenterPrint( s, SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
// print the text message as well
}
// check for double client messages
- if ( !attackerInfo ) {
+ if( !attackerInfo )
+ {
attacker = ENTITYNUM_WORLD;
strcpy( attackerName, "noname" );
- } else {
- Q_strncpyz( attackerName, Info_ValueForKey( attackerInfo, "n" ), sizeof(attackerName) - 2);
+ }
+ else
+ {
+ Q_strncpyz( attackerName, Info_ValueForKey( attackerInfo, "n" ), sizeof( attackerName ) - 2);
strcat( attackerName, S_COLOR_WHITE );
// check for kill messages about the current clientNum
- if ( target == cg.snap->ps.clientNum ) {
+ if( target == cg.snap->ps.clientNum )
Q_strncpyz( cg.killerName, attackerName, sizeof( cg.killerName ) );
- }
}
- if ( attacker != ENTITYNUM_WORLD ) {
- switch (mod) {
- case MOD_GRAPPLE:
- message = "was caught by";
- break;
- case MOD_GAUNTLET:
- message = "was pummeled by";
- break;
- case MOD_MACHINEGUN:
- message = "was machinegunned by";
- break;
- case MOD_CHAINGUN:
- message = "was chaingunned by";
- break;
- case MOD_SHOTGUN:
- message = "was gunned down by";
- break;
- case MOD_GRENADE:
- message = "ate";
- message2 = "'s grenade";
- break;
- case MOD_GRENADE_SPLASH:
- message = "was shredded by";
- message2 = "'s shrapnel";
- break;
- case MOD_ROCKET:
- message = "ate";
- message2 = "'s rocket";
- break;
- case MOD_ROCKET_SPLASH:
- message = "almost dodged";
- message2 = "'s rocket";
- break;
- case MOD_FLAMER:
- message = "was toasted by";
- message2 = "'s flamer";
- break;
- case MOD_FLAMER_SPLASH:
- message = "was toasted by";
- message2 = "'s flamer";
- break;
- case MOD_RAILGUN:
- message = "was railed by";
- break;
- case MOD_LIGHTNING:
- message = "was electrocuted by";
- break;
- case MOD_VENOM:
- message = "was biten by";
- break;
- case MOD_BFG:
- case MOD_BFG_SPLASH:
- message = "was blasted by";
- message2 = "'s BFG";
- break;
- case MOD_TELEFRAG:
- message = "tried to invade";
- message2 = "'s personal space";
- break;
- default:
- message = "was killed by";
- break;
+ if( attacker != ENTITYNUM_WORLD )
+ {
+ switch( mod )
+ {
+ case MOD_GRAPPLE:
+ message = "was caught by";
+ break;
+ case MOD_GAUNTLET:
+ message = "was pummeled by";
+ break;
+ case MOD_MACHINEGUN:
+ message = "was machinegunned by";
+ break;
+ case MOD_CHAINGUN:
+ message = "was chaingunned by";
+ break;
+ case MOD_SHOTGUN:
+ message = "was gunned down by";
+ break;
+ case MOD_GRENADE:
+ message = "ate";
+ message2 = "'s grenade";
+ break;
+ case MOD_GRENADE_SPLASH:
+ message = "was shredded by";
+ message2 = "'s shrapnel";
+ break;
+ case MOD_ROCKET:
+ message = "ate";
+ message2 = "'s rocket";
+ break;
+ case MOD_ROCKET_SPLASH:
+ message = "almost dodged";
+ message2 = "'s rocket";
+ break;
+ case MOD_FLAMER:
+ message = "was toasted by";
+ message2 = "'s flamer";
+ break;
+ case MOD_FLAMER_SPLASH:
+ message = "was toasted by";
+ message2 = "'s flamer";
+ break;
+ case MOD_RAILGUN:
+ message = "was railed by";
+ break;
+ case MOD_LIGHTNING:
+ message = "was electrocuted by";
+ break;
+ case MOD_VENOM:
+ message = "was biten by";
+ break;
+ case MOD_BFG:
+ case MOD_BFG_SPLASH:
+ message = "was blasted by";
+ message2 = "'s BFG";
+ break;
+ case MOD_TELEFRAG:
+ message = "tried to invade";
+ message2 = "'s personal space";
+ break;
+ default:
+ message = "was killed by";
+ break;
}
- if (message) {
+ if( message )
+ {
CG_Printf( "%s %s %s%s\n",
- targetName, message, attackerName, message2);
+ targetName, message, attackerName, message2 );
return;
}
}
@@ -293,94 +261,29 @@ static void CG_Obituary( entityState_t *ent ) {
//==========================================================================
/*
-===============
-CG_UseItem
-===============
-*/
-static void CG_UseItem( centity_t *cent ) {
- clientInfo_t *ci;
- int itemNum, clientNum;
- gitem_t *item;
- entityState_t *es;
-
- es = &cent->currentState;
-
- itemNum = (es->event & ~EV_EVENT_BITS) - EV_USE_ITEM0;
- if ( itemNum < 0 || itemNum > HI_NUM_HOLDABLE ) {
- itemNum = 0;
- }
-
- // print a message if the local player
- if ( es->number == cg.snap->ps.clientNum ) {
- if ( !itemNum ) {
- CG_CenterPrint( "No item to use", SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
- } else {
- /*item = BG_FindItemForHoldable( itemNum );*/
- CG_CenterPrint( va("Use %s", item->pickup_name), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
- }
- }
-
- switch ( itemNum ) {
- default:
- case HI_NONE:
- trap_S_StartSound (NULL, es->number, CHAN_BODY, cgs.media.useNothingSound );
- break;
-
- case HI_TELEPORTER:
- break;
-
- case HI_MEDKIT:
- clientNum = cent->currentState.clientNum;
- if ( clientNum >= 0 && clientNum < MAX_CLIENTS ) {
- ci = &cgs.clientinfo[ clientNum ];
- ci->medkitUsageTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_BODY, cgs.media.medkitSound );
- break;
- }
-
-}
-
-/*
-================
-CG_ItemPickup
-
-A new item was picked up this frame
-================
-*/
-static void CG_ItemPickup( int itemNum ) {
- cg.itemPickup = itemNum;
- cg.itemPickupTime = cg.time;
- cg.itemPickupBlendTime = cg.time;
- // see if it should be the grabbed weapon
-
-}
-
-
-/*
================
CG_PainEvent
Also called by playerstate transition
================
*/
-void CG_PainEvent( centity_t *cent, int health ) {
+void CG_PainEvent( centity_t *cent, int health )
+{
char *snd;
// don't do more than two pain sounds a second
- if ( cg.time - cent->pe.painTime < 500 ) {
+ if( cg.time - cent->pe.painTime < 500 )
return;
- }
- if ( health < 25 ) {
+ if( health < 25 )
snd = "*pain25_1.wav";
- } else if ( health < 50 ) {
+ else if( health < 50 )
snd = "*pain50_1.wav";
- } else if ( health < 75 ) {
+ else if( health < 75 )
snd = "*pain75_1.wav";
- } else {
+ else
snd = "*pain100_1.wav";
- }
+
trap_S_StartSound( NULL, cent->currentState.number, CHAN_VOICE,
CG_CustomSound( cent->currentState.number, snd ) );
@@ -584,597 +487,509 @@ void CG_EntityEvent( centity_t *cent, vec3_t position )
es = &cent->currentState;
event = es->event & ~EV_EVENT_BITS;
- if ( cg_debugEvents.integer ) {
+ if( cg_debugEvents.integer )
CG_Printf( "ent:%3i event:%3i ", es->number, event );
- }
- if ( !event ) {
+ if( !event )
+ {
DEBUGNAME("ZEROEVENT");
return;
}
clientNum = es->clientNum;
- if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
+ if( clientNum < 0 || clientNum >= MAX_CLIENTS )
clientNum = 0;
- }
+
ci = &cgs.clientinfo[ clientNum ];
- switch ( event ) {
- //
- // movement generated events
- //
- case EV_FOOTSTEP:
- DEBUGNAME("EV_FOOTSTEP");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ ci->footsteps ][rand()&3] );
- }
- break;
- case EV_FOOTSTEP_METAL:
- DEBUGNAME("EV_FOOTSTEP_METAL");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_METAL ][rand()&3] );
- }
- break;
- case EV_FOOTSTEP_SQUELCH:
- DEBUGNAME("EV_FOOTSTEP_SQUELCH");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_FLESH ][rand()&3] );
- }
- break;
- case EV_FOOTSPLASH:
- DEBUGNAME("EV_FOOTSPLASH");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
- }
- break;
- case EV_FOOTWADE:
- DEBUGNAME("EV_FOOTWADE");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
- }
- break;
- case EV_SWIM:
- DEBUGNAME("EV_SWIM");
- if (cg_footsteps.integer) {
- trap_S_StartSound (NULL, es->number, CHAN_BODY,
- cgs.media.footsteps[ FOOTSTEP_SPLASH ][rand()&3] );
- }
- break;
+ switch( event )
+ {
+ //
+ // movement generated events
+ //
+ case EV_FOOTSTEP:
+ DEBUGNAME( "EV_FOOTSTEP" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ ci->footsteps ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTSTEP_METAL:
+ DEBUGNAME( "EV_FOOTSTEP_METAL" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_METAL ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTSTEP_SQUELCH:
+ DEBUGNAME( "EV_FOOTSTEP_SQUELCH" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_FLESH ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTSPLASH:
+ DEBUGNAME( "EV_FOOTSPLASH" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_FOOTWADE:
+ DEBUGNAME( "EV_FOOTWADE" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] );
+ }
+ break;
+
+ case EV_SWIM:
+ DEBUGNAME( "EV_SWIM" );
+ if( cg_footsteps.integer )
+ {
+ trap_S_StartSound( NULL, es->number, CHAN_BODY,
+ cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] );
+ }
+ break;
- case EV_FALL_SHORT:
- DEBUGNAME("EV_FALL_SHORT");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.landSound );
- if ( clientNum == cg.predictedPlayerState.clientNum ) {
- // smooth landing z changes
- cg.landChange = -8;
- cg.landTime = cg.time;
- }
- break;
- case EV_FALL_MEDIUM:
- DEBUGNAME("EV_FALL_MEDIUM");
- // use normal pain sound
- trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*pain100_1.wav" ) );
- if ( clientNum == cg.predictedPlayerState.clientNum ) {
- // smooth landing z changes
- cg.landChange = -16;
- cg.landTime = cg.time;
- }
- break;
- case EV_FALL_FAR:
- DEBUGNAME("EV_FALL_FAR");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*fall1.wav" ) );
- cent->pe.painTime = cg.time; // don't play a pain sound right after this
- if ( clientNum == cg.predictedPlayerState.clientNum ) {
- // smooth landing z changes
- cg.landChange = -24;
- cg.landTime = cg.time;
- }
- break;
-
- case EV_STEP_4:
- case EV_STEP_8:
- case EV_STEP_12:
- case EV_STEP_16: // smooth out step up transitions
- case EV_STEPDN_4:
- case EV_STEPDN_8:
- case EV_STEPDN_12:
- case EV_STEPDN_16: // smooth out step down transitions
- DEBUGNAME("EV_STEP");
- {
- float oldStep;
- int delta;
- int step;
-
- if( clientNum != cg.predictedPlayerState.clientNum )
- break;
-
- // if we are interpolating, we don't need to smooth steps
- if( cg.demoPlayback || ( cg.snap->ps.pm_flags & PMF_FOLLOW ) ||
- cg_nopredict.integer || cg_synchronousClients.integer )
- break;
-
- // check for stepping up before a previous step is completed
- delta = cg.time - cg.stepTime;
-
- if( delta < STEP_TIME )
- oldStep = cg.stepChange * ( STEP_TIME - delta ) / STEP_TIME;
- else
- oldStep = 0;
+ case EV_FALL_SHORT:
+ DEBUGNAME( "EV_FALL_SHORT" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.landSound );
+
+ if( clientNum == cg.predictedPlayerState.clientNum )
+ {
+ // smooth landing z changes
+ cg.landChange = -8;
+ cg.landTime = cg.time;
+ }
+ break;
+
+ case EV_FALL_MEDIUM:
+ DEBUGNAME( "EV_FALL_MEDIUM" );
+ // use normal pain sound
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*pain100_1.wav" ) );
+
+ if( clientNum == cg.predictedPlayerState.clientNum )
+ {
+ // smooth landing z changes
+ cg.landChange = -16;
+ cg.landTime = cg.time;
+ }
+ break;
+
+ case EV_FALL_FAR:
+ DEBUGNAME( "EV_FALL_FAR" );
+ trap_S_StartSound (NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*fall1.wav" ) );
+ cent->pe.painTime = cg.time; // don't play a pain sound right after this
+
+ if( clientNum == cg.predictedPlayerState.clientNum )
+ {
+ // smooth landing z changes
+ cg.landChange = -24;
+ cg.landTime = cg.time;
+ }
+ break;
- // add this amount
- if( event >= EV_STEPDN_4 )
- {
- step = 4 * ( event - EV_STEPDN_4 + 1 );
- cg.stepChange = oldStep - step;
- }
- else
- {
- step = 4 * ( event - EV_STEP_4 + 1 );
- cg.stepChange = oldStep + step;
- }
+ case EV_STEP_4:
+ case EV_STEP_8:
+ case EV_STEP_12:
+ case EV_STEP_16: // smooth out step up transitions
+ case EV_STEPDN_4:
+ case EV_STEPDN_8:
+ case EV_STEPDN_12:
+ case EV_STEPDN_16: // smooth out step down transitions
+ DEBUGNAME( "EV_STEP" );
+ {
+ float oldStep;
+ int delta;
+ int step;
+
+ if( clientNum != cg.predictedPlayerState.clientNum )
+ break;
+
+ // if we are interpolating, we don't need to smooth steps
+ if( cg.demoPlayback || ( cg.snap->ps.pm_flags & PMF_FOLLOW ) ||
+ cg_nopredict.integer || cg_synchronousClients.integer )
+ break;
+
+ // check for stepping up before a previous step is completed
+ delta = cg.time - cg.stepTime;
+
+ if( delta < STEP_TIME )
+ oldStep = cg.stepChange * ( STEP_TIME - delta ) / STEP_TIME;
+ else
+ oldStep = 0;
+
+ // add this amount
+ if( event >= EV_STEPDN_4 )
+ {
+ step = 4 * ( event - EV_STEPDN_4 + 1 );
+ cg.stepChange = oldStep - step;
+ }
+ else
+ {
+ step = 4 * ( event - EV_STEP_4 + 1 );
+ cg.stepChange = oldStep + step;
+ }
+
+ if( cg.stepChange > MAX_STEP_CHANGE )
+ cg.stepChange = MAX_STEP_CHANGE;
+ else if( cg.stepChange < -MAX_STEP_CHANGE )
+ cg.stepChange = -MAX_STEP_CHANGE;
+
+ cg.stepTime = cg.time;
+ break;
+ }
+
+ case EV_JUMP_PAD:
+ DEBUGNAME( "EV_JUMP_PAD" );
+ // CG_Printf( "EV_JUMP_PAD w/effect #%i\n", es->eventParm );
+ {
+ localEntity_t *smoke;
+ vec3_t up = { 0, 0, 1 };
+
+
+ smoke = CG_SmokePuff( cent->lerpOrigin, up,
+ 32,
+ 1, 1, 1, 0.33f,
+ 1000,
+ cg.time, 0,
+ LEF_PUFF_DONT_SCALE,
+ cgs.media.smokePuffShader );
+ }
- if( cg.stepChange > MAX_STEP_CHANGE )
- cg.stepChange = MAX_STEP_CHANGE;
- else if( cg.stepChange < -MAX_STEP_CHANGE )
- cg.stepChange = -MAX_STEP_CHANGE;
-
- cg.stepTime = cg.time;
- break;
- }
-
- case EV_JUMP_PAD:
- DEBUGNAME("EV_JUMP_PAD");
-// CG_Printf( "EV_JUMP_PAD w/effect #%i\n", es->eventParm );
- {
- localEntity_t *smoke;
- vec3_t up = {0, 0, 1};
+ // boing sound at origin, jump sound on player
+ trap_S_StartSound( cent->lerpOrigin, -1, CHAN_VOICE, cgs.media.jumpPadSound );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
+ break;
+ case EV_JUMP:
+ DEBUGNAME( "EV_JUMP" );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
+ break;
+
+ case EV_TAUNT:
+ DEBUGNAME( "EV_TAUNT" );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*taunt.wav" ) );
+ break;
+
+ case EV_WATER_TOUCH:
+ DEBUGNAME( "EV_WATER_TOUCH" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrInSound );
+ break;
+
+ case EV_WATER_LEAVE:
+ DEBUGNAME( "EV_WATER_LEAVE" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrOutSound );
+ break;
+
+ case EV_WATER_UNDER:
+ DEBUGNAME( "EV_WATER_UNDER" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrUnSound );
+ break;
+
+ case EV_WATER_CLEAR:
+ DEBUGNAME( "EV_WATER_CLEAR" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*gasp.wav" ) );
+ break;
- smoke = CG_SmokePuff( cent->lerpOrigin, up,
- 32,
- 1, 1, 1, 0.33f,
- 1000,
- cg.time, 0,
- LEF_PUFF_DONT_SCALE,
- cgs.media.smokePuffShader );
- }
- // boing sound at origin, jump sound on player
- trap_S_StartSound ( cent->lerpOrigin, -1, CHAN_VOICE, cgs.media.jumpPadSound );
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
- break;
-
- case EV_JUMP:
- DEBUGNAME("EV_JUMP");
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) );
- break;
- case EV_TAUNT:
- DEBUGNAME("EV_TAUNT");
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*taunt.wav" ) );
- break;
- case EV_WATER_TOUCH:
- DEBUGNAME("EV_WATER_TOUCH");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.watrInSound );
- break;
- case EV_WATER_LEAVE:
- DEBUGNAME("EV_WATER_LEAVE");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.watrOutSound );
- break;
- case EV_WATER_UNDER:
- DEBUGNAME("EV_WATER_UNDER");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.watrUnSound );
- break;
- case EV_WATER_CLEAR:
- DEBUGNAME("EV_WATER_CLEAR");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*gasp.wav" ) );
- break;
-
- case EV_ITEM_PICKUP:
- DEBUGNAME("EV_ITEM_PICKUP");
- {
- }
- break;
+ case EV_ITEM_PICKUP:
+ DEBUGNAME( "EV_ITEM_PICKUP" );
+ {
+ }
+ break;
- case EV_GLOBAL_ITEM_PICKUP:
- DEBUGNAME("EV_GLOBAL_ITEM_PICKUP");
- {
- }
- break;
-
- //
- // weapon events
- //
- case EV_NOAMMO:
- DEBUGNAME("EV_NOAMMO");
-// trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.noAmmoSound );
- if ( es->number == cg.snap->ps.clientNum ) {
- CG_OutOfAmmoChange();
- }
- break;
- case EV_CHANGE_WEAPON:
- DEBUGNAME("EV_CHANGE_WEAPON");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.selectSound );
- break;
- case EV_NEXT_WEAPON:
- DEBUGNAME("EV_NEXT_WEAPON");
- CG_NextWeapon_f( );
- break;
- case EV_FIRE_WEAPON:
- DEBUGNAME("EV_FIRE_WEAPON");
- CG_FireWeapon( cent, 0 );
- break;
- case EV_FIRE_WEAPON2:
- DEBUGNAME("EV_FIRE_WEAPON2");
- CG_FireWeapon( cent, 1 ); //FIXME:??
- break;
- case EV_FIRE_WEAPON3:
- DEBUGNAME("EV_FIRE_WEAPON3");
- CG_FireWeapon( cent, 2 ); //FIXME:??
- break;
- case EV_USE_ITEM0:
- DEBUGNAME("EV_USE_ITEM0");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM1:
- DEBUGNAME("EV_USE_ITEM1");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM2:
- DEBUGNAME("EV_USE_ITEM2");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM3:
- DEBUGNAME("EV_USE_ITEM3");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM4:
- DEBUGNAME("EV_USE_ITEM4");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM5:
- DEBUGNAME("EV_USE_ITEM5");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM6:
- DEBUGNAME("EV_USE_ITEM6");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM7:
- DEBUGNAME("EV_USE_ITEM7");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM8:
- DEBUGNAME("EV_USE_ITEM8");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM9:
- DEBUGNAME("EV_USE_ITEM9");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM10:
- DEBUGNAME("EV_USE_ITEM10");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM11:
- DEBUGNAME("EV_USE_ITEM11");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM12:
- DEBUGNAME("EV_USE_ITEM12");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM13:
- DEBUGNAME("EV_USE_ITEM13");
- CG_UseItem( cent );
- break;
- case EV_USE_ITEM14:
- DEBUGNAME("EV_USE_ITEM14");
- CG_UseItem( cent );
- break;
-
- //=================================================================
-
- //
- // other events
- //
- case EV_PLAYER_TELEPORT_IN:
- DEBUGNAME("EV_PLAYER_TELEPORT_IN");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.teleInSound );
- CG_SpawnEffect( position);
- break;
-
- case EV_PLAYER_TELEPORT_OUT:
- DEBUGNAME("EV_PLAYER_TELEPORT_OUT");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.teleOutSound );
- CG_SpawnEffect( position);
- break;
-
- case EV_ITEM_POP:
- DEBUGNAME("EV_ITEM_POP");
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.respawnSound );
- break;
- case EV_ITEM_RESPAWN:
- DEBUGNAME("EV_ITEM_RESPAWN");
- cent->miscTime = cg.time; // scale up from this
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.respawnSound );
- break;
-
- //TA: make alien items "grow"
- case EV_BUILD_CONSTRUCT:
- DEBUGNAME("EV_BUILD_CONSTRUCT");
- cent->miscTime = cg.time; // scale up from this
- //probably a better place for this, but for the time being it lives here
- memset( &cent->lerpFrame, 0, sizeof( lerpFrame_t ) );
- cent->buildableAnim = es->eventParm;
- break;
-
- //TA: make alien creep "recede"
- case EV_BUILD_DESTROY:
- DEBUGNAME("EV_BUILD_DESTROY");
- cent->miscTime = -cg.time; // scale down from this
- break;
-
- //TA: trigger an anim on a buildable item
- case EV_BUILD_ANIM:
- DEBUGNAME("EV_BUILD_ANIM");
- if( cent->buildableAnim == es->torsoAnim || es->eventParm & ANIM_TOGGLEBIT )
+ case EV_GLOBAL_ITEM_PICKUP:
+ DEBUGNAME( "EV_GLOBAL_ITEM_PICKUP" );
+ {
+ }
+ break;
+
+ //
+ // weapon events
+ //
+ case EV_NOAMMO:
+ DEBUGNAME( "EV_NOAMMO" );
+ // trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.noAmmoSound );
+ {
+ }
+ break;
+
+ case EV_CHANGE_WEAPON:
+ DEBUGNAME( "EV_CHANGE_WEAPON" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.selectSound );
+ break;
+
+ case EV_NEXT_WEAPON:
+ DEBUGNAME( "EV_NEXT_WEAPON" );
+ CG_NextWeapon_f( );
+ break;
+
+ case EV_FIRE_WEAPON:
+ DEBUGNAME( "EV_FIRE_WEAPON" );
+ CG_FireWeapon( cent, 0 );
+ break;
+
+ case EV_FIRE_WEAPON2:
+ DEBUGNAME( "EV_FIRE_WEAPON2" );
+ CG_FireWeapon( cent, 1 ); //FIXME:??
+ break;
+
+ case EV_FIRE_WEAPON3:
+ DEBUGNAME( "EV_FIRE_WEAPON3" );
+ CG_FireWeapon( cent, 2 ); //FIXME:??
+ break;
+
+ //=================================================================
+
+ //
+ // other events
+ //
+ case EV_PLAYER_TELEPORT_IN:
+ DEBUGNAME( "EV_PLAYER_TELEPORT_IN" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.teleInSound );
+ CG_SpawnEffect( position );
+ break;
+
+ case EV_PLAYER_TELEPORT_OUT:
+ DEBUGNAME( "EV_PLAYER_TELEPORT_OUT" );
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.teleOutSound );
+ CG_SpawnEffect( position );
+ break;
+
+ case EV_BUILD_CONSTRUCT:
+ DEBUGNAME( "EV_BUILD_CONSTRUCT" );
+ cent->miscTime = cg.time; // scale up from this
+ //probably a better place for this, but for the time being it lives here
+ memset( &cent->lerpFrame, 0, sizeof( lerpFrame_t ) );
cent->buildableAnim = es->eventParm;
- break;
-
- case EV_GRENADE_BOUNCE:
- DEBUGNAME("EV_GRENADE_BOUNCE");
- if ( rand() & 1 ) {
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.hgrenb1aSound );
- } else {
- trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.hgrenb2aSound );
- }
- break;
-
- //
- // missile impacts
- //
- case EV_MISSILE_HIT:
- DEBUGNAME("EV_MISSILE_HIT");
- ByteToDir( es->eventParm, dir );
- CG_MissileHitPlayer( es->weapon, position, dir, es->otherEntityNum, es->generic1 );
- break;
-
- case EV_MISSILE_MISS:
- DEBUGNAME("EV_MISSILE_MISS");
- ByteToDir( es->eventParm, dir );
- CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_DEFAULT, es->generic1 );
- break;
-
- case EV_MISSILE_MISS_METAL:
- DEBUGNAME("EV_MISSILE_MISS_METAL");
- ByteToDir( es->eventParm, dir );
- CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_METAL, es->generic1 );
- break;
-
- case EV_ITEM_EXPLOSION:
- DEBUGNAME("EV_ITEM_EXPLOSION");
- ByteToDir( es->eventParm, dir );
- CG_Explosion( 0, position, dir );
- break;
-
- case EV_RAILTRAIL:
-/* DEBUGNAME("EV_RAILTRAIL");
- cent->currentState.weapon = WP_RAILGUN;
- // if the end was on a nomark surface, don't make an explosion
- CG_RailTrail( es->origin2, es->pos.trBase );
- if ( es->eventParm != 255 ) {
+ break;
+
+ case EV_BUILD_DESTROY:
+ DEBUGNAME( "EV_BUILD_DESTROY" );
+ cent->miscTime = -cg.time; // scale down from this
+ break;
+
+ //TA: trigger an anim on a buildable item
+ case EV_BUILD_ANIM:
+ DEBUGNAME( "EV_BUILD_ANIM" );
+ if( cent->buildableAnim == es->torsoAnim || es->eventParm & ANIM_TOGGLEBIT )
+ cent->buildableAnim = es->eventParm;
+ break;
+
+ case EV_GRENADE_BOUNCE:
+ DEBUGNAME( "EV_GRENADE_BOUNCE" );
+ if( rand( ) & 1 )
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.hgrenb1aSound );
+ else
+ trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.hgrenb2aSound );
+ break;
+
+ //
+ // missile impacts
+ //
+ case EV_MISSILE_HIT:
+ DEBUGNAME( "EV_MISSILE_HIT" );
ByteToDir( es->eventParm, dir );
- CG_MissileHitWall( es->weapon, es->clientNum, position, dir, IMPACTSOUND_DEFAULT );
- }*/
- break;
-
- case EV_TESLATRAIL:
- DEBUGNAME("EV_TESLATRAIL");
- cent->currentState.weapon = WP_TESLAGEN;
- CG_TeslaTrail( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
- break;
-
- case EV_ALIENZAP:
- DEBUGNAME("EV_ALIENZAP");
- CG_AlienZap( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
- break;
-
- case EV_BULLET_HIT_WALL:
- DEBUGNAME("EV_BULLET_HIT_WALL");
- ByteToDir( es->eventParm, dir );
- CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
- break;
-
- case EV_BULLET_HIT_FLESH:
- DEBUGNAME("EV_BULLET_HIT_FLESH");
- CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
- break;
-
- case EV_LAS_HIT_WALL:
- DEBUGNAME("EV_LAS_HIT_WALL");
- ByteToDir( es->eventParm, dir );
- CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
- break;
-
- case EV_LAS_HIT_FLESH:
- DEBUGNAME("EV_LAS_HIT_FLESH");
- CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
- break;
-
+ CG_MissileHitPlayer( es->weapon, position, dir, es->otherEntityNum, es->generic1 );
+ break;
+
+ case EV_MISSILE_MISS:
+ DEBUGNAME( "EV_MISSILE_MISS" );
+ ByteToDir( es->eventParm, dir );
+ CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_DEFAULT, es->generic1 );
+ break;
+
+ case EV_MISSILE_MISS_METAL:
+ DEBUGNAME( "EV_MISSILE_MISS_METAL" );
+ ByteToDir( es->eventParm, dir );
+ CG_MissileHitWall( es->weapon, 0, position, dir, IMPACTSOUND_METAL, es->generic1 );
+ break;
+
+ case EV_BUILDABLE_EXPLOSION:
+ DEBUGNAME( "EV_BUILDABLE_EXPLOSION" );
+ ByteToDir( es->eventParm, dir );
+ CG_Explosion( 0, position, dir );
+ break;
+
+ case EV_TESLATRAIL:
+ DEBUGNAME( "EV_TESLATRAIL" );
+ cent->currentState.weapon = WP_TESLAGEN;
+ CG_TeslaTrail( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
+ break;
+
+ case EV_ALIENZAP:
+ DEBUGNAME( "EV_ALIENZAP" );
+ CG_AlienZap( es->origin2, es->pos.trBase, es->generic1, es->clientNum );
+ break;
+
+ case EV_BULLET_HIT_WALL:
+ DEBUGNAME( "EV_BULLET_HIT_WALL" );
+ ByteToDir( es->eventParm, dir );
+ CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
+ break;
+
+ case EV_BULLET_HIT_FLESH:
+ DEBUGNAME( "EV_BULLET_HIT_FLESH" );
+ CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
+ break;
+
+ case EV_LAS_HIT_WALL:
+ DEBUGNAME( "EV_LAS_HIT_WALL" );
+ ByteToDir( es->eventParm, dir );
+ CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD );
+ break;
+
+ case EV_LAS_HIT_FLESH:
+ DEBUGNAME( "EV_LAS_HIT_FLESH" );
+ CG_LasGunHit( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm );
+ break;
+
#define MASS_EJECTION_VEL 300
- case EV_MASS_DRIVER_HIT:
- DEBUGNAME("EV_MASS_DRIVER_HIT");
- for( i = 0; i <= 10; i++ )
- {
- qhandle_t spark;
- vec3_t velocity;
- vec3_t accel = { 0.0f, 0.0f, -DEFAULT_GRAVITY };
- vec3_t origin, normal;
+ case EV_MASS_DRIVER_HIT:
+ DEBUGNAME( "EV_MASS_DRIVER_HIT" );
+ for( i = 0; i <= 10; i++ )
+ {
+ qhandle_t spark;
+ vec3_t velocity;
+ vec3_t accel = { 0.0f, 0.0f, -DEFAULT_GRAVITY };
+ vec3_t origin, normal;
+
+ ByteToDir( es->eventParm, normal );
+
+ VectorMA( es->pos.trBase, 10.0f, normal, origin );
+
+ if( crandom( ) > 0.5f )
+ spark = cgs.media.gibSpark1;
+ else
+ spark = cgs.media.gibSpark2;
+
+ velocity[ 0 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
+ velocity[ 1 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
+ velocity[ 2 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
+
+ CG_LaunchSprite( origin, velocity, accel, 0.0f, 0.5f, 4.0f, 2.0f, 255, 0, rand( ) % 360,
+ cg.time, cg.time, 5000 + ( crandom( ) * 3000 ),
+ spark, qfalse, qfalse );
+ }
- ByteToDir( es->eventParm, normal );
+ break;
- VectorMA( es->pos.trBase, 10.0f, normal, origin );
+ case EV_GENERAL_SOUND:
+ DEBUGNAME( "EV_GENERAL_SOUND" );
+ if( cgs.gameSounds[ es->eventParm ] )
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.gameSounds[ es->eventParm ] );
+ else
+ {
+ s = CG_ConfigString( CS_SOUNDS + es->eventParm );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, s ) );
+ }
+ break;
- if( crandom( ) > 0.5f )
- spark = cgs.media.gibSpark1;
+ case EV_GLOBAL_SOUND: // play from the player's head so it never diminishes
+ DEBUGNAME( "EV_GLOBAL_SOUND" );
+ if( cgs.gameSounds[ es->eventParm ] )
+ trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_AUTO, cgs.gameSounds[ es->eventParm ] );
else
- spark = cgs.media.gibSpark2;
+ {
+ s = CG_ConfigString( CS_SOUNDS + es->eventParm );
+ trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_AUTO, CG_CustomSound( es->number, s ) );
+ }
+ break;
- velocity[ 0 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
- velocity[ 1 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
- velocity[ 2 ] = ( 2 * random( ) - 1.0f ) * MASS_EJECTION_VEL;
-
- CG_LaunchSprite( origin, velocity, accel, 0.0f, 0.5f, 4.0f, 2.0f, 255, 0, rand( ) % 360,
- cg.time, cg.time, 5000 + ( crandom( ) * 3000 ),
- spark, qfalse, qfalse );
- }
+ case EV_PAIN:
+ // local player sounds are triggered in CG_CheckLocalSounds,
+ // so ignore events on the player
+ DEBUGNAME( "EV_PAIN" );
+ if( cent->currentState.number != cg.snap->ps.clientNum )
+ CG_PainEvent( cent, es->eventParm );
+ break;
- break;
+ case EV_DEATH1:
+ case EV_DEATH2:
+ case EV_DEATH3:
+ DEBUGNAME( "EV_DEATHx" );
+ trap_S_StartSound( NULL, es->number, CHAN_VOICE,
+ CG_CustomSound( es->number, va( "*death%i.wav", event - EV_DEATH1 + 1 ) ) );
+ break;
- case EV_SHOTGUN:
- DEBUGNAME("EV_SHOTGUN");
- CG_ShotgunFire( es );
- break;
+ case EV_OBITUARY:
+ DEBUGNAME( "EV_OBITUARY" );
+ CG_Obituary( es );
+ break;
- case EV_GENERAL_SOUND:
- DEBUGNAME("EV_GENERAL_SOUND");
- if ( cgs.gameSounds[ es->eventParm ] ) {
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, cgs.gameSounds[ es->eventParm ] );
- } else {
- s = CG_ConfigString( CS_SOUNDS + es->eventParm );
- trap_S_StartSound (NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, s ) );
- }
- break;
-
- case EV_GLOBAL_SOUND: // play from the player's head so it never diminishes
- DEBUGNAME("EV_GLOBAL_SOUND");
- if ( cgs.gameSounds[ es->eventParm ] ) {
- trap_S_StartSound (NULL, cg.snap->ps.clientNum, CHAN_AUTO, cgs.gameSounds[ es->eventParm ] );
- } else {
- s = CG_ConfigString( CS_SOUNDS + es->eventParm );
- trap_S_StartSound (NULL, cg.snap->ps.clientNum, CHAN_AUTO, CG_CustomSound( es->number, s ) );
- }
- break;
-
- case EV_PAIN:
- // local player sounds are triggered in CG_CheckLocalSounds,
- // so ignore events on the player
- DEBUGNAME("EV_PAIN");
- if ( cent->currentState.number != cg.snap->ps.clientNum ) {
- CG_PainEvent( cent, es->eventParm );
- }
- break;
-
- case EV_DEATH1:
- case EV_DEATH2:
- case EV_DEATH3:
- DEBUGNAME("EV_DEATHx");
- trap_S_StartSound( NULL, es->number, CHAN_VOICE,
- CG_CustomSound( es->number, va("*death%i.wav", event - EV_DEATH1 + 1) ) );
- break;
-
-
- case EV_OBITUARY:
- DEBUGNAME("EV_OBITUARY");
- CG_Obituary( es );
- break;
-
- //
- // powerup events
- //
- case EV_POWERUP_QUAD:
- DEBUGNAME("EV_POWERUP_QUAD");
- if ( es->number == cg.snap->ps.clientNum ) {
- cg.powerupActive = PW_QUAD;
- cg.powerupTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_ITEM, cgs.media.quadSound );
- break;
- case EV_POWERUP_BATTLESUIT:
- DEBUGNAME("EV_POWERUP_BATTLESUIT");
- if ( es->number == cg.snap->ps.clientNum ) {
- cg.powerupActive = PW_BATTLESUIT;
- cg.powerupTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_ITEM, cgs.media.protectSound );
- break;
- case EV_POWERUP_REGEN:
- DEBUGNAME("EV_POWERUP_REGEN");
- if ( es->number == cg.snap->ps.clientNum ) {
- cg.powerupActive = PW_REGEN;
- cg.powerupTime = cg.time;
- }
- trap_S_StartSound (NULL, es->number, CHAN_ITEM, cgs.media.regenSound );
- break;
-
- case EV_GIB_PLAYER:
- DEBUGNAME("EV_GIB_PLAYER");
- trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
- CG_GibPlayer( cent->lerpOrigin );
- break;
-
- case EV_GIB_ALIEN:
- DEBUGNAME("EV_GIB_ALIEN");
- trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
- CG_GenericGib( cent->lerpOrigin );
- break;
-
- case EV_STOPLOOPINGSOUND:
- DEBUGNAME("EV_STOPLOOPINGSOUND");
- trap_S_StopLoopingSound( es->number );
- es->loopSound = 0;
- break;
-
- case EV_DEBUG_LINE:
- DEBUGNAME("EV_DEBUG_LINE");
- CG_Beam( cent );
- break;
-
- case EV_MENU:
- DEBUGNAME("EV_MENU");
- if( es->number == cg.clientNum )
- CG_Menu( es->eventParm );
- break;
-
- case EV_BUILD_DELAY:
- DEBUGNAME("EV_BUILD_DELAY");
- //FIXME: change to "negative" sound
- trap_S_StartLocalSound( cgs.media.hitSound, CHAN_LOCAL_SOUND );
- cg.lastBuildAttempt = cg.time;
- break;
-
- case EV_POISONCLOUD:
- DEBUGNAME("EV_POISONCLOUD");
- cg.firstPoisonedTime = cg.time;
- break;
-
- case EV_KNOCKOVER:
- DEBUGNAME("EV_KNOCKOVER");
- cg.firstKnockedTime = cg.time;
- break;
-
- case EV_GETUP:
- DEBUGNAME("EV_GETUP");
- cg.firstGetUpTime = cg.time;
- break;
-
- case EV_PLAYER_RESPAWN:
- DEBUGNAME("EV_PLAYER_RESPAWN");
- if( es->number == cg.clientNum )
- cg.spawnTime = cg.time;
- break;
-
- default:
- DEBUGNAME("UNKNOWN");
- CG_Error( "Unknown event: %i", event );
- break;
- }
+ case EV_GIB_PLAYER:
+ DEBUGNAME( "EV_GIB_PLAYER" );
+ trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
+ CG_GibPlayer( cent->lerpOrigin );
+ break;
+
+ case EV_GIB_ALIEN:
+ DEBUGNAME( "EV_GIB_ALIEN" );
+ trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
+ CG_GenericGib( cent->lerpOrigin );
+ break;
+
+ case EV_STOPLOOPINGSOUND:
+ DEBUGNAME( "EV_STOPLOOPINGSOUND" );
+ trap_S_StopLoopingSound( es->number );
+ es->loopSound = 0;
+ break;
+
+ case EV_DEBUG_LINE:
+ DEBUGNAME( "EV_DEBUG_LINE" );
+ CG_Beam( cent );
+ break;
+
+ case EV_MENU:
+ DEBUGNAME( "EV_MENU" );
+ if( es->number == cg.clientNum )
+ CG_Menu( es->eventParm );
+ break;
+
+ case EV_BUILD_DELAY:
+ DEBUGNAME( "EV_BUILD_DELAY" );
+ //FIXME: change to "negative" sound
+ trap_S_StartLocalSound( cgs.media.hitSound, CHAN_LOCAL_SOUND );
+ cg.lastBuildAttempt = cg.time;
+ break;
+
+ case EV_POISONCLOUD:
+ DEBUGNAME( "EV_POISONCLOUD" );
+ cg.firstPoisonedTime = cg.time;
+ break;
+
+ case EV_KNOCKOVER:
+ DEBUGNAME( "EV_KNOCKOVER" );
+ cg.firstKnockedTime = cg.time;
+ break;
+ case EV_GETUP:
+ DEBUGNAME( "EV_GETUP" );
+ cg.firstGetUpTime = cg.time;
+ break;
+
+ case EV_PLAYER_RESPAWN:
+ DEBUGNAME( "EV_PLAYER_RESPAWN" );
+ if( es->number == cg.clientNum )
+ cg.spawnTime = cg.time;
+ break;
+
+ default:
+ DEBUGNAME( "UNKNOWN" );
+ CG_Error( "Unknown event: %i", event );
+ break;
+ }
}
@@ -1184,24 +999,27 @@ CG_CheckEvents
==============
*/
-void CG_CheckEvents( centity_t *cent ) {
+void CG_CheckEvents( centity_t *cent )
+{
// check for event-only entities
- if ( cent->currentState.eType > ET_EVENTS ) {
- if ( cent->previousEvent ) {
+ if( cent->currentState.eType > ET_EVENTS )
+ {
+ if( cent->previousEvent )
return; // already fired
- }
+
cent->previousEvent = 1;
cent->currentState.event = cent->currentState.eType - ET_EVENTS;
- } else {
+ }
+ else
+ {
// check for events riding with another entity
- if ( cent->currentState.event == cent->previousEvent ) {
+ if( cent->currentState.event == cent->previousEvent )
return;
- }
+
cent->previousEvent = cent->currentState.event;
- if ( ( cent->currentState.event & ~EV_EVENT_BITS ) == 0 ) {
+ if( ( cent->currentState.event & ~EV_EVENT_BITS ) == 0 )
return;
- }
}
// calculate the position at exactly the frame time
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index e6855a35..15be6a51 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -1295,6 +1295,7 @@ extern vmCvar_t ui_currentClass;
extern vmCvar_t ui_carriage;
extern vmCvar_t ui_stages;
extern vmCvar_t ui_dialog;
+extern vmCvar_t ui_loading;
//
// cg_main.c
diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c
index 8d233476..cf99e93e 100644
--- a/src/cgame/cg_main.c
+++ b/src/cgame/cg_main.c
@@ -34,52 +34,65 @@ This is the only way control passes into the module.
This must be the very first function compiled into the .q3vm file
================
*/
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11 ) {
- switch ( command ) {
- case CG_INIT:
- CG_Init( arg0, arg1, arg2 );
- return 0;
- case CG_SHUTDOWN:
- CG_Shutdown();
- return 0;
- case CG_CONSOLE_COMMAND:
- return CG_ConsoleCommand();
- case CG_DRAW_ACTIVE_FRAME:
- CG_DrawActiveFrame( arg0, arg1, arg2 );
- return 0;
- case CG_CROSSHAIR_PLAYER:
- return CG_CrosshairPlayer();
- case CG_LAST_ATTACKER:
- return CG_LastAttacker();
- case CG_KEY_EVENT:
- CG_KeyEvent(arg0, arg1);
- return 0;
- case CG_MOUSE_EVENT:
- cgDC.cursorx = cgs.cursorX;
- cgDC.cursory = cgs.cursorY;
- CG_MouseEvent(arg0, arg1);
- return 0;
- case CG_EVENT_HANDLING:
- CG_EventHandling(arg0);
- return 0;
- default:
- CG_Error( "vmMain: unknown command %i", command );
- break;
+int vmMain( int command, int arg0, int arg1, int arg2, int arg3,
+ int arg4, int arg5, int arg6, int arg7,
+ int arg8, int arg9, int arg10, int arg11 )
+{
+ switch( command )
+ {
+ case CG_INIT:
+ CG_Init( arg0, arg1, arg2 );
+ return 0;
+
+ case CG_SHUTDOWN:
+ CG_Shutdown( );
+ return 0;
+
+ case CG_CONSOLE_COMMAND:
+ return CG_ConsoleCommand( );
+
+ case CG_DRAW_ACTIVE_FRAME:
+ CG_DrawActiveFrame( arg0, arg1, arg2 );
+ return 0;
+
+ case CG_CROSSHAIR_PLAYER:
+ return CG_CrosshairPlayer( );
+
+ case CG_LAST_ATTACKER:
+ return CG_LastAttacker( );
+
+ case CG_KEY_EVENT:
+ CG_KeyEvent( arg0, arg1 );
+ return 0;
+
+ case CG_MOUSE_EVENT:
+ cgDC.cursorx = cgs.cursorX;
+ cgDC.cursory = cgs.cursorY;
+ CG_MouseEvent( arg0, arg1 );
+ return 0;
+
+ case CG_EVENT_HANDLING:
+ CG_EventHandling( arg0 );
+ return 0;
+
+ default:
+ CG_Error( "vmMain: unknown command %i", command );
+ break;
}
+
return -1;
}
cg_t cg;
cgs_t cgs;
-centity_t cg_entities[MAX_GENTITIES];
+centity_t cg_entities[ MAX_GENTITIES ];
//TA: weapons limit expanded:
//weaponInfo_t cg_weapons[MAX_WEAPONS];
-weaponInfo_t cg_weapons[32];
-upgradeInfo_t cg_upgrades[32];
+weaponInfo_t cg_weapons[ 32 ];
+upgradeInfo_t cg_upgrades[ 32 ];
-itemInfo_t cg_items[MAX_ITEMS];
buildableInfo_t cg_buildables[ BA_NUM_BUILDABLES ];
vmCvar_t cg_teslaTrailTime;
@@ -190,16 +203,19 @@ vmCvar_t ui_currentClass;
vmCvar_t ui_carriage;
vmCvar_t ui_stages;
vmCvar_t ui_dialog;
+vmCvar_t ui_loading;
-typedef struct {
+typedef struct
+{
vmCvar_t *vmCvar;
- char *cvarName;
- char *defaultString;
- int cvarFlags;
+ char *cvarName;
+ char *defaultString;
+ int cvarFlags;
} cvarTable_t;
-static cvarTable_t cvarTable[] = {
+static cvarTable_t cvarTable[ ] =
+{
{ &cg_ignore, "cg_ignore", "0", 0 }, // used for debugging
{ &cg_autoswitch, "cg_autoswitch", "1", CVAR_ARCHIVE },
{ &cg_drawGun, "cg_drawGun", "1", CVAR_ARCHIVE },
@@ -281,6 +297,7 @@ static cvarTable_t cvarTable[] = {
{ &ui_carriage, "ui_carriage", "", 0 },
{ &ui_stages, "ui_stages", "0 0", 0 },
{ &ui_dialog, "ui_dialog", "Text not set", 0 },
+ { &ui_loading, "ui_loading", "0", 0 },
// the following variables are created in other parts of the system,
// but we also reference them here
@@ -318,25 +335,30 @@ static int cvarTableSize = sizeof( cvarTable ) / sizeof( cvarTable[0] );
CG_RegisterCvars
=================
*/
-void CG_RegisterCvars( void ) {
- int i;
+void CG_RegisterCvars( void )
+{
+ int i;
cvarTable_t *cv;
- char var[MAX_TOKEN_CHARS];
+ char var[ MAX_TOKEN_CHARS ];
- for ( i = 0, cv = cvarTable ; i < cvarTableSize ; i++, cv++ ) {
+ for( i = 0, cv = cvarTable; i < cvarTableSize; i++, cv++ )
+ {
trap_Cvar_Register( cv->vmCvar, cv->cvarName,
cv->defaultString, cv->cvarFlags );
}
+ //repress standard Q3 console
+ trap_Cvar_Set( "con_notifytime", "-2" );
+
// see if we are also running the server on this machine
trap_Cvar_VariableStringBuffer( "sv_running", var, sizeof( var ) );
cgs.localServer = atoi( var );
forceModelModificationCount = cg_forceModel.modificationCount;
- trap_Cvar_Register(NULL, "model", DEFAULT_MODEL, CVAR_USERINFO | CVAR_ARCHIVE );
- trap_Cvar_Register(NULL, "headmodel", DEFAULT_MODEL, CVAR_USERINFO | CVAR_ARCHIVE );
- trap_Cvar_Register(NULL, "team_model", DEFAULT_TEAM_MODEL, CVAR_USERINFO | CVAR_ARCHIVE );
- trap_Cvar_Register(NULL, "team_headmodel", DEFAULT_TEAM_HEAD, CVAR_USERINFO | CVAR_ARCHIVE );
+ trap_Cvar_Register( NULL, "model", DEFAULT_MODEL, CVAR_USERINFO | CVAR_ARCHIVE );
+ trap_Cvar_Register( NULL, "headmodel", DEFAULT_MODEL, CVAR_USERINFO | CVAR_ARCHIVE );
+ trap_Cvar_Register( NULL, "team_model", DEFAULT_TEAM_MODEL, CVAR_USERINFO | CVAR_ARCHIVE );
+ trap_Cvar_Register( NULL, "team_headmodel", DEFAULT_TEAM_HEAD, CVAR_USERINFO | CVAR_ARCHIVE );
}
@@ -345,16 +367,19 @@ void CG_RegisterCvars( void ) {
CG_ForceModelChange
===================
*/
-static void CG_ForceModelChange( void ) {
+static void CG_ForceModelChange( void )
+{
int i;
- for (i=0 ; i<MAX_CLIENTS ; i++) {
+ for( i = 0; i < MAX_CLIENTS; i++ )
+ {
const char *clientInfo;
- clientInfo = CG_ConfigString( CS_PLAYERS+i );
- if ( !clientInfo[0] ) {
+ clientInfo = CG_ConfigString( CS_PLAYERS + i );
+
+ if( !clientInfo[ 0 ] )
continue;
- }
+
CG_NewClientInfo( i );
}
}
@@ -365,51 +390,52 @@ static void CG_ForceModelChange( void ) {
CG_UpdateCvars
=================
*/
-void CG_UpdateCvars( void ) {
- int i;
+void CG_UpdateCvars( void )
+{
+ int i;
cvarTable_t *cv;
- for ( i = 0, cv = cvarTable ; i < cvarTableSize ; i++, cv++ ) {
+ for( i = 0, cv = cvarTable; i < cvarTableSize; i++, cv++ )
trap_Cvar_Update( cv->vmCvar );
- }
// check for modications here
// If team overlay is on, ask for updates from the server. If its off,
// let the server know so we don't receive it
- if ( drawTeamOverlayModificationCount != cg_drawTeamOverlay.modificationCount ) {
+ if( drawTeamOverlayModificationCount != cg_drawTeamOverlay.modificationCount )
+ {
drawTeamOverlayModificationCount = cg_drawTeamOverlay.modificationCount;
- if ( cg_drawTeamOverlay.integer > 0 ) {
+ if( cg_drawTeamOverlay.integer > 0 )
trap_Cvar_Set( "teamoverlay", "1" );
- } else {
+ else
trap_Cvar_Set( "teamoverlay", "0" );
- }
- // FIXME E3 HACK
- trap_Cvar_Set( "teamoverlay", "1" );
}
// if force model changed
- if ( forceModelModificationCount != cg_forceModel.modificationCount ) {
+ if( forceModelModificationCount != cg_forceModel.modificationCount )
+ {
forceModelModificationCount = cg_forceModel.modificationCount;
- CG_ForceModelChange();
+ CG_ForceModelChange( );
}
}
-int CG_CrosshairPlayer( void ) {
- if ( cg.time > ( cg.crosshairClientTime + 1000 ) ) {
+int CG_CrosshairPlayer( void )
+{
+ if( cg.time > ( cg.crosshairClientTime + 1000 ) )
return -1;
- }
+
return cg.crosshairClientNum;
}
-int CG_LastAttacker( void ) {
- if ( !cg.attackerTime ) {
+int CG_LastAttacker( void )
+{
+ if( !cg.attackerTime )
return -1;
- }
- return cg.snap->ps.persistant[PERS_ATTACKER];
+
+ return cg.snap->ps.persistant[ PERS_ATTACKER ];
}
void CG_RemoveConsoleLine( void )
@@ -433,13 +459,14 @@ void CG_RemoveConsoleLine( void )
cg.numConsoleLines--;
}
-void QDECL CG_Printf( const char *msg, ... ) {
- va_list argptr;
- char text[1024];
+void QDECL CG_Printf( const char *msg, ... )
+{
+ va_list argptr;
+ char text[ 1024 ];
- va_start (argptr, msg);
- vsprintf (text, msg, argptr);
- va_end (argptr);
+ va_start( argptr, msg );
+ vsprintf( text, msg, argptr );
+ va_end( argptr );
//TA: team arena UI based console
if( cg.numConsoleLines == MAX_CONSOLE_LINES )
@@ -456,13 +483,14 @@ void QDECL CG_Printf( const char *msg, ... ) {
trap_Print( text );
}
-void QDECL CG_Error( const char *msg, ... ) {
- va_list argptr;
- char text[1024];
+void QDECL CG_Error( const char *msg, ... )
+{
+ va_list argptr;
+ char text[ 1024 ];
- va_start (argptr, msg);
- vsprintf (text, msg, argptr);
- va_end (argptr);
+ va_start( argptr, msg );
+ vsprintf( text, msg, argptr );
+ va_end( argptr );
trap_Error( text );
}
@@ -470,15 +498,16 @@ void QDECL CG_Error( const char *msg, ... ) {
#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;
+void QDECL Com_Error( int level, const char *error, ... )
+{
+ va_list argptr;
char text[1024];
- va_start (argptr, error);
- vsprintf (text, error, argptr);
- va_end (argptr);
+ va_start( argptr, error );
+ vsprintf( text, error, argptr );
+ va_end( argptr );
- CG_Error( "%s", text);
+ CG_Error( "%s", text );
}
void QDECL Com_Printf( const char *msg, ... ) {
@@ -513,8 +542,9 @@ void QDECL Com_Printf( const char *msg, ... ) {
CG_Argv
================
*/
-const char *CG_Argv( int arg ) {
- static char buffer[MAX_STRING_CHARS];
+const char *CG_Argv( int arg )
+{
+ static char buffer[ MAX_STRING_CHARS ];
trap_Argv( arg, buffer, sizeof( buffer ) );
@@ -531,7 +561,8 @@ CG_RegisterItemSounds
The server says this item is used on this level
=================
*/
-static void CG_RegisterItemSounds( int itemNum ) {
+static void CG_RegisterItemSounds( int itemNum )
+{
}
@@ -542,125 +573,98 @@ CG_RegisterSounds
called during a precache command
=================
*/
-static void CG_RegisterSounds( void ) {
- int i;
- char items[MAX_ITEMS+1];
- char name[MAX_QPATH];
+static void CG_RegisterSounds( void )
+{
+ int i;
+ char items[ MAX_ITEMS + 1 ];
+ char name[ MAX_QPATH ];
const char *soundName;
// voice commands
- cgs.media.oneMinuteSound = trap_S_RegisterSound( "sound/feedback/1_minute.wav", qtrue );
- cgs.media.fiveMinuteSound = trap_S_RegisterSound( "sound/feedback/5_minute.wav", qtrue );
- cgs.media.suddenDeathSound = trap_S_RegisterSound( "sound/feedback/sudden_death.wav", qtrue );
- cgs.media.oneFragSound = trap_S_RegisterSound( "sound/feedback/1_frag.wav", qtrue );
- cgs.media.twoFragSound = trap_S_RegisterSound( "sound/feedback/2_frags.wav", qtrue );
- cgs.media.threeFragSound = trap_S_RegisterSound( "sound/feedback/3_frags.wav", qtrue );
- cgs.media.count3Sound = trap_S_RegisterSound( "sound/feedback/three.wav", qtrue );
- cgs.media.count2Sound = trap_S_RegisterSound( "sound/feedback/two.wav", qtrue );
- cgs.media.count1Sound = trap_S_RegisterSound( "sound/feedback/one.wav", qtrue );
- cgs.media.countFightSound = trap_S_RegisterSound( "sound/feedback/fight.wav", qtrue );
- cgs.media.countPrepareSound = trap_S_RegisterSound( "sound/feedback/prepare.wav", qtrue );
-
- cgs.media.alienStageTransition = trap_S_RegisterSound( "sound/announcements/overmindevolved.wav", qtrue );
- cgs.media.humanStageTransition = trap_S_RegisterSound( "sound/announcements/reinforcement.wav", qtrue );
+ cgs.media.alienStageTransition = trap_S_RegisterSound( "sound/announcements/overmindevolved.wav", qtrue );
+ cgs.media.humanStageTransition = trap_S_RegisterSound( "sound/announcements/reinforcement.wav", qtrue );
- cgs.media.tracerSound = trap_S_RegisterSound( "sound/weapons/machinegun/buletby1.wav", qfalse );
- cgs.media.selectSound = trap_S_RegisterSound( "sound/weapons/change.wav", qfalse );
- cgs.media.wearOffSound = trap_S_RegisterSound( "sound/items/wearoff.wav", qfalse );
- cgs.media.useNothingSound = trap_S_RegisterSound( "sound/items/use_nothing.wav", qfalse );
- cgs.media.gibSound = trap_S_RegisterSound( "sound/player/gibsplt1.wav", qfalse );
- cgs.media.gibBounce1Sound = trap_S_RegisterSound( "sound/player/gibimp1.wav", qfalse );
- cgs.media.gibBounce2Sound = trap_S_RegisterSound( "sound/player/gibimp2.wav", qfalse );
- cgs.media.gibBounce3Sound = trap_S_RegisterSound( "sound/player/gibimp3.wav", qfalse );
+ cgs.media.tracerSound = trap_S_RegisterSound( "sound/weapons/machinegun/buletby1.wav", qfalse );
+ cgs.media.selectSound = trap_S_RegisterSound( "sound/weapons/change.wav", qfalse );
+ cgs.media.wearOffSound = trap_S_RegisterSound( "sound/items/wearoff.wav", qfalse );
+ cgs.media.useNothingSound = trap_S_RegisterSound( "sound/items/use_nothing.wav", qfalse );
+ cgs.media.gibSound = trap_S_RegisterSound( "sound/player/gibsplt1.wav", qfalse );
+ cgs.media.gibBounce1Sound = trap_S_RegisterSound( "sound/player/gibimp1.wav", qfalse );
+ cgs.media.gibBounce2Sound = trap_S_RegisterSound( "sound/player/gibimp2.wav", qfalse );
+ cgs.media.gibBounce3Sound = trap_S_RegisterSound( "sound/player/gibimp3.wav", qfalse );
- cgs.media.teleInSound = trap_S_RegisterSound( "sound/world/telein.wav", qfalse );
- cgs.media.teleOutSound = trap_S_RegisterSound( "sound/world/teleout.wav", qfalse );
- cgs.media.respawnSound = trap_S_RegisterSound( "sound/items/respawn1.wav", qfalse );
+ cgs.media.teleInSound = trap_S_RegisterSound( "sound/world/telein.wav", qfalse );
+ cgs.media.teleOutSound = trap_S_RegisterSound( "sound/world/teleout.wav", qfalse );
+ cgs.media.respawnSound = trap_S_RegisterSound( "sound/items/respawn1.wav", qfalse );
- cgs.media.noAmmoSound = trap_S_RegisterSound( "sound/weapons/noammo.wav", qfalse );
+ cgs.media.noAmmoSound = trap_S_RegisterSound( "sound/weapons/noammo.wav", qfalse );
- cgs.media.talkSound = trap_S_RegisterSound( "sound/player/talk.wav", qfalse );
- cgs.media.landSound = trap_S_RegisterSound( "sound/player/land1.wav", qfalse);
+ cgs.media.talkSound = trap_S_RegisterSound( "sound/player/talk.wav", qfalse );
+ cgs.media.landSound = trap_S_RegisterSound( "sound/player/land1.wav", qfalse );
- cgs.media.hitSound = trap_S_RegisterSound( "sound/feedback/hit.wav", qfalse );
+ cgs.media.hitSound = trap_S_RegisterSound( "sound/feedback/hit.wav", qfalse );
- cgs.media.impressiveSound = trap_S_RegisterSound( "sound/feedback/impressive.wav", qtrue );
- cgs.media.excellentSound = trap_S_RegisterSound( "sound/feedback/excellent.wav", qtrue );
- cgs.media.deniedSound = trap_S_RegisterSound( "sound/feedback/denied.wav", qtrue );
- cgs.media.humiliationSound = trap_S_RegisterSound( "sound/feedback/humiliation.wav", qtrue );
- cgs.media.assistSound = trap_S_RegisterSound( "sound/feedback/assist.wav", qtrue );
- cgs.media.defendSound = trap_S_RegisterSound( "sound/feedback/defense.wav", qtrue );
+ cgs.media.watrInSound = trap_S_RegisterSound( "sound/player/watr_in.wav", qfalse );
+ cgs.media.watrOutSound = trap_S_RegisterSound( "sound/player/watr_out.wav", qfalse );
+ cgs.media.watrUnSound = trap_S_RegisterSound( "sound/player/watr_un.wav", qfalse );
- cgs.media.takenLeadSound = trap_S_RegisterSound( "sound/feedback/takenlead.wav", qtrue);
- cgs.media.tiedLeadSound = trap_S_RegisterSound( "sound/feedback/tiedlead.wav", qtrue);
- cgs.media.lostLeadSound = trap_S_RegisterSound( "sound/feedback/lostlead.wav", qtrue);
+ cgs.media.jumpPadSound = trap_S_RegisterSound( "sound/world/jumppad.wav", qfalse );
- cgs.media.watrInSound = trap_S_RegisterSound( "sound/player/watr_in.wav", qfalse);
- cgs.media.watrOutSound = trap_S_RegisterSound( "sound/player/watr_out.wav", qfalse);
- cgs.media.watrUnSound = trap_S_RegisterSound( "sound/player/watr_un.wav", qfalse);
-
- cgs.media.jumpPadSound = trap_S_RegisterSound ("sound/world/jumppad.wav", qfalse );
-
- for (i=0 ; i<4 ; i++) {
- Com_sprintf (name, sizeof(name), "sound/player/footsteps/step%i.wav", i+1);
- cgs.media.footsteps[FOOTSTEP_NORMAL][i] = trap_S_RegisterSound (name, qfalse);
+ for( i = 0; i < 4; i++ )
+ {
+ Com_sprintf( name, sizeof( name ), "sound/player/footsteps/step%i.wav", i + 1 );
+ cgs.media.footsteps[ FOOTSTEP_NORMAL ][ i ] = trap_S_RegisterSound( name, qfalse );
- Com_sprintf (name, sizeof(name), "sound/player/footsteps/boot%i.wav", i+1);
- cgs.media.footsteps[FOOTSTEP_BOOT][i] = trap_S_RegisterSound (name, qfalse);
+ Com_sprintf( name, sizeof( name ), "sound/player/footsteps/boot%i.wav", i + 1 );
+ cgs.media.footsteps[ FOOTSTEP_BOOT ][ i ] = trap_S_RegisterSound( name, qfalse );
- Com_sprintf (name, sizeof(name), "sound/player/footsteps/flesh%i.wav", i+1);
- cgs.media.footsteps[FOOTSTEP_FLESH][i] = trap_S_RegisterSound (name, qfalse);
+ Com_sprintf( name, sizeof( name ), "sound/player/footsteps/flesh%i.wav", i + 1 );
+ cgs.media.footsteps[ FOOTSTEP_FLESH ][ i ] = trap_S_RegisterSound( name, qfalse );
- Com_sprintf (name, sizeof(name), "sound/player/footsteps/mech%i.wav", i+1);
- cgs.media.footsteps[FOOTSTEP_MECH][i] = trap_S_RegisterSound (name, qfalse);
+ Com_sprintf( name, sizeof( name ), "sound/player/footsteps/mech%i.wav", i + 1 );
+ cgs.media.footsteps[ FOOTSTEP_MECH ][ i ] = trap_S_RegisterSound( name, qfalse );
- Com_sprintf (name, sizeof(name), "sound/player/footsteps/energy%i.wav", i+1);
- cgs.media.footsteps[FOOTSTEP_ENERGY][i] = trap_S_RegisterSound (name, qfalse);
+ Com_sprintf( name, sizeof( name ), "sound/player/footsteps/energy%i.wav", i + 1 );
+ cgs.media.footsteps[ FOOTSTEP_ENERGY ][ i ] = trap_S_RegisterSound( name, qfalse );
- Com_sprintf (name, sizeof(name), "sound/player/footsteps/splash%i.wav", i+1);
- cgs.media.footsteps[FOOTSTEP_SPLASH][i] = trap_S_RegisterSound (name, qfalse);
+ Com_sprintf( name, sizeof( name ), "sound/player/footsteps/splash%i.wav", i + 1 );
+ cgs.media.footsteps[ FOOTSTEP_SPLASH ][ i ] = trap_S_RegisterSound( name, qfalse );
- Com_sprintf (name, sizeof(name), "sound/player/footsteps/clank%i.wav", i+1);
- cgs.media.footsteps[FOOTSTEP_METAL][i] = trap_S_RegisterSound (name, qfalse);
+ Com_sprintf( name, sizeof( name ), "sound/player/footsteps/clank%i.wav", i + 1 );
+ cgs.media.footsteps[ FOOTSTEP_METAL ][ i ] = trap_S_RegisterSound( name, qfalse );
}
// only register the items that the server says we need
strcpy( items, CG_ConfigString( CS_ITEMS ) );
- for ( i = 1 ; i < MAX_SOUNDS ; i++ ) {
- soundName = CG_ConfigString( CS_SOUNDS+i );
- if ( !soundName[0] ) {
+ for( i = 1 ; i < MAX_SOUNDS ; i++ )
+ {
+ soundName = CG_ConfigString( CS_SOUNDS + i );
+
+ if( !soundName[ 0 ] )
break;
- }
- if ( soundName[0] == '*' ) {
+
+ if( soundName[ 0 ] == '*' )
continue; // custom sound
- }
- cgs.gameSounds[i] = trap_S_RegisterSound( soundName, qfalse );
+
+ cgs.gameSounds[ i ] = trap_S_RegisterSound( soundName, qfalse );
}
//TA:
cgs.media.jetpackDescendSound = trap_S_RegisterSound( "sound/upgrades/jetpack/low.wav", qfalse );
- cgs.media.jetpackIdleSound = trap_S_RegisterSound( "sound/upgrades/jetpack/idle.wav", qfalse );
- cgs.media.jetpackAscendSound = trap_S_RegisterSound( "sound/upgrades/jetpack/hi.wav", qfalse );
+ cgs.media.jetpackIdleSound = trap_S_RegisterSound( "sound/upgrades/jetpack/idle.wav", qfalse );
+ cgs.media.jetpackAscendSound = trap_S_RegisterSound( "sound/upgrades/jetpack/hi.wav", qfalse );
// FIXME: only needed with item
- cgs.media.flightSound = trap_S_RegisterSound( "sound/items/flight.wav", qfalse );
- cgs.media.medkitSound = trap_S_RegisterSound ("sound/items/use_medkit.wav", qfalse);
- cgs.media.quadSound = trap_S_RegisterSound("sound/items/damage3.wav", qfalse);
- cgs.media.sfx_ric1 = trap_S_RegisterSound ("sound/weapons/machinegun/ric1.wav", qfalse);
- cgs.media.sfx_ric2 = trap_S_RegisterSound ("sound/weapons/machinegun/ric2.wav", qfalse);
- cgs.media.sfx_ric3 = trap_S_RegisterSound ("sound/weapons/machinegun/ric3.wav", qfalse);
- cgs.media.sfx_railg = trap_S_RegisterSound ("sound/weapons/railgun/railgf1a.wav", qfalse);
- cgs.media.sfx_rockexp = trap_S_RegisterSound ("sound/weapons/rocket/rocklx1a.wav", qfalse);
- cgs.media.sfx_plasmaexp = trap_S_RegisterSound ("sound/weapons/plasma/plasmx1a.wav", qfalse);
- cgs.media.sfx_flamerexp = trap_S_RegisterSound ("sound/weapons/flamer/fireimpc.wav", qfalse);
-
- cgs.media.regenSound = trap_S_RegisterSound("sound/items/regen.wav", qfalse);
- cgs.media.protectSound = trap_S_RegisterSound("sound/items/protect3.wav", qfalse);
- cgs.media.n_healthSound = trap_S_RegisterSound("sound/items/n_health.wav", qfalse );
- cgs.media.hgrenb1aSound = trap_S_RegisterSound("sound/weapons/grenade/hgrenb1a.wav", qfalse);
- cgs.media.hgrenb2aSound = trap_S_RegisterSound("sound/weapons/grenade/hgrenb2a.wav", qfalse);
+ cgs.media.sfx_ric1 = trap_S_RegisterSound( "sound/weapons/machinegun/ric1.wav", qfalse );
+ cgs.media.sfx_ric2 = trap_S_RegisterSound( "sound/weapons/machinegun/ric2.wav", qfalse );
+ cgs.media.sfx_ric3 = trap_S_RegisterSound( "sound/weapons/machinegun/ric3.wav", qfalse );
+ cgs.media.sfx_plasmaexp = trap_S_RegisterSound( "sound/weapons/plasma/plasmx1a.wav", qfalse );
+ cgs.media.sfx_flamerexp = trap_S_RegisterSound( "sound/weapons/flamer/fireimpc.wav", qfalse );
+
+ cgs.media.hgrenb1aSound = trap_S_RegisterSound( "sound/weapons/grenade/hgrenb1a.wav", qfalse );
+ cgs.media.hgrenb2aSound = trap_S_RegisterSound( "sound/weapons/grenade/hgrenb2a.wav", qfalse );
}
@@ -674,10 +678,12 @@ CG_RegisterGraphics
This function may execute for a couple of minutes with a slow disk.
=================
*/
-static void CG_RegisterGraphics( void ) {
- int i;
- char items[MAX_ITEMS+1];
- static char *sb_nums[11] = {
+static void CG_RegisterGraphics( void )
+{
+ int i;
+ char items[ MAX_ITEMS + 1 ];
+ static char *sb_nums[ 11 ] =
+ {
"gfx/2d/numbers/zero_32b",
"gfx/2d/numbers/one_32b",
"gfx/2d/numbers/two_32b",
@@ -693,144 +699,98 @@ static void CG_RegisterGraphics( void ) {
// clear any references to old media
memset( &cg.refdef, 0, sizeof( cg.refdef ) );
- trap_R_ClearScene();
+ trap_R_ClearScene( );
trap_R_LoadWorldMap( cgs.mapname );
CG_UpdateMediaFraction( 0.66f );
- for ( i=0 ; i<11 ; i++) {
- cgs.media.numberShaders[i] = trap_R_RegisterShader( sb_nums[i] );
- }
-
- cgs.media.botSkillShaders[0] = trap_R_RegisterShader( "menu/art/skill1.tga" );
- cgs.media.botSkillShaders[1] = trap_R_RegisterShader( "menu/art/skill2.tga" );
- cgs.media.botSkillShaders[2] = trap_R_RegisterShader( "menu/art/skill3.tga" );
- cgs.media.botSkillShaders[3] = trap_R_RegisterShader( "menu/art/skill4.tga" );
- cgs.media.botSkillShaders[4] = trap_R_RegisterShader( "menu/art/skill5.tga" );
+ for( i = 0; i < 11; i++ )
+ cgs.media.numberShaders[ i ] = trap_R_RegisterShader( sb_nums[ i ] );
- cgs.media.viewBloodShader = trap_R_RegisterShader( "viewBloodBlend" );
+ cgs.media.viewBloodShader = trap_R_RegisterShader( "viewBloodBlend" );
- cgs.media.deferShader = trap_R_RegisterShaderNoMip( "gfx/2d/defer.tga" );
+ cgs.media.deferShader = trap_R_RegisterShaderNoMip( "gfx/2d/defer.tga" );
- cgs.media.scoreboardName = trap_R_RegisterShaderNoMip( "menu/tab/name.tga" );
- cgs.media.scoreboardPing = trap_R_RegisterShaderNoMip( "menu/tab/ping.tga" );
- cgs.media.scoreboardScore = trap_R_RegisterShaderNoMip( "menu/tab/score.tga" );
- cgs.media.scoreboardTime = trap_R_RegisterShaderNoMip( "menu/tab/time.tga" );
-
- cgs.media.smokePuffShader = trap_R_RegisterShader( "smokePuff" );
- cgs.media.smokePuffRageProShader = trap_R_RegisterShader( "smokePuffRagePro" );
- cgs.media.shotgunSmokePuffShader = trap_R_RegisterShader( "shotgunSmokePuff" );
- cgs.media.plasmaBallShader = trap_R_RegisterShader( "sprites/plasma1" );
- cgs.media.bloodTrailShader = trap_R_RegisterShader( "bloodTrail" );
- cgs.media.lagometerShader = trap_R_RegisterShader("lagometer" );
- cgs.media.connectionShader = trap_R_RegisterShader( "disconnected" );
+ cgs.media.smokePuffShader = trap_R_RegisterShader( "smokePuff" );
+ cgs.media.smokePuffRageProShader = trap_R_RegisterShader( "smokePuffRagePro" );
+ cgs.media.shotgunSmokePuffShader = trap_R_RegisterShader( "shotgunSmokePuff" );
+ cgs.media.plasmaBallShader = trap_R_RegisterShader( "sprites/plasma1" );
+ cgs.media.bloodTrailShader = trap_R_RegisterShader( "bloodTrail" );
+ cgs.media.connectionShader = trap_R_RegisterShader( "disconnected" );
//TA: extra stuff
- cgs.media.explosionShader = trap_R_RegisterShader( "grenadeExplosion" );
- cgs.media.greenBloodTrailShader = trap_R_RegisterShader( "greenBloodTrail" );
+ cgs.media.explosionShader = trap_R_RegisterShader( "grenadeExplosion" );
+ cgs.media.greenBloodTrailShader = trap_R_RegisterShader( "greenBloodTrail" );
cgs.media.greenBloodExplosionShader = trap_R_RegisterShader( "greenBloodExplosion" );
- cgs.media.greenBloodMarkShader = trap_R_RegisterShader( "greenBloodMark" );
- cgs.media.explosionTrailShader = trap_R_RegisterShader( "explosionTrail" );
- cgs.media.poisonCloudShader = trap_R_RegisterShader( "poisonCloud" );
+ cgs.media.greenBloodMarkShader = trap_R_RegisterShader( "greenBloodMark" );
+ cgs.media.explosionTrailShader = trap_R_RegisterShader( "explosionTrail" );
+ cgs.media.poisonCloudShader = trap_R_RegisterShader( "poisonCloud" );
for( i = 0; i < 32; i++ )
cgs.media.flameShader[ i ] = trap_R_RegisterShader( va( "fireball%d", i + 1 ) );
- /*cgs.media.creepShader = trap_R_RegisterShader( "creep" );*/
-
- cgs.media.scannerBlipShader = trap_R_RegisterShader( "gfx/2d/droidhealth" );
- cgs.media.scannerLineShader = trap_R_RegisterShader( "white" );
+ cgs.media.scannerBlipShader = trap_R_RegisterShader( "gfx/2d/blip" );
+ cgs.media.scannerLineShader = trap_R_RegisterShader( "white" );
/*cgs.media.scannerShader = trap_R_RegisterShader( "gfx/2d/scanner" );*/
- cgs.media.waterBubbleShader = trap_R_RegisterShader( "waterBubble" );
+ cgs.media.waterBubbleShader = trap_R_RegisterShader( "waterBubble" );
- cgs.media.tracerShader = trap_R_RegisterShader( "gfx/misc/tracer" );
- cgs.media.selectShader = trap_R_RegisterShader( "gfx/2d/select" );
+ cgs.media.tracerShader = trap_R_RegisterShader( "gfx/misc/tracer" );
+ cgs.media.selectShader = trap_R_RegisterShader( "gfx/2d/select" );
- for ( i = 0 ; i < NUM_CROSSHAIRS ; i++ ) {
- cgs.media.crosshairShader[i] = trap_R_RegisterShader( va("gfx/2d/crosshair%c", 'a'+i) );
- }
+ for( i = 0 ; i < NUM_CROSSHAIRS ; i++ )
+ cgs.media.crosshairShader[ i ] = trap_R_RegisterShader( va( "gfx/2d/crosshair%c", 'a' + i ) );
- cgs.media.backTileShader = trap_R_RegisterShader( "gfx/2d/backtile" );
- cgs.media.noammoShader = trap_R_RegisterShader( "icons/noammo" );
+ cgs.media.backTileShader = trap_R_RegisterShader( "gfx/2d/backtile" );
+ cgs.media.noammoShader = trap_R_RegisterShader( "icons/noammo" );
+ cgs.media.friendShader = trap_R_RegisterShader( "sprites/foe" );
+
//TA: building shaders
- cgs.media.greenBuildShader = trap_R_RegisterShader("gfx/2d/greenbuild" );
- cgs.media.redBuildShader = trap_R_RegisterShader("gfx/2d/redbuild" );
- cgs.media.noPowerShader = trap_R_RegisterShader("gfx/2d/nopower" );
-
- // powerup shaders
- cgs.media.quadShader = trap_R_RegisterShader("powerups/quad" );
- cgs.media.quadWeaponShader = trap_R_RegisterShader("powerups/quadWeapon" );
- cgs.media.battleSuitShader = trap_R_RegisterShader("powerups/battleSuit" );
- cgs.media.battleWeaponShader = trap_R_RegisterShader("powerups/battleWeapon" );
- cgs.media.invisShader = trap_R_RegisterShader("powerups/invisibility" );
- cgs.media.regenShader = trap_R_RegisterShader("powerups/regen" );
- cgs.media.hastePuffShader = trap_R_RegisterShader("hasteSmokePuff" );
-
- //TA: screenfades
- cgs.media.humanNV = trap_R_RegisterShader( "humanNV" );
- cgs.media.humanTorch8 = trap_R_RegisterShader( "humanTorch8" );
- cgs.media.humanTorch7 = trap_R_RegisterShader( "humanTorch7" );
- cgs.media.humanTorch6 = trap_R_RegisterShader( "humanTorch6" );
- cgs.media.humanTorch5 = trap_R_RegisterShader( "humanTorch5" );
- cgs.media.humanTorch4 = trap_R_RegisterShader( "humanTorch4" );
- cgs.media.humanTorch3 = trap_R_RegisterShader( "humanTorch3" );
- cgs.media.humanTorch2 = trap_R_RegisterShader( "humanTorch2" );
- cgs.media.humanTorch1 = trap_R_RegisterShader( "humanTorch1" );
- cgs.media.alienHealth = trap_R_RegisterShader( "gfx/2d/droidhealth.tga" );
-
- cgs.media.armorModel = trap_R_RegisterModel( "models/powerups/armor/armor_yel.md3" );
- cgs.media.armorIcon = trap_R_RegisterShaderNoMip( "icons/iconr_yellow" );
-
- cgs.media.machinegunBrassModel = trap_R_RegisterModel( "models/weapons2/shells/m_shell.md3" );
- cgs.media.shotgunBrassModel = trap_R_RegisterModel( "models/weapons2/shells/s_shell.md3" );
-
- cgs.media.gibAbdomen = trap_R_RegisterModel( "models/gibs/abdomen.md3" );
- cgs.media.gibArm = trap_R_RegisterModel( "models/gibs/arm.md3" );
- cgs.media.gibChest = trap_R_RegisterModel( "models/gibs/chest.md3" );
- cgs.media.gibFist = trap_R_RegisterModel( "models/gibs/fist.md3" );
- cgs.media.gibFoot = trap_R_RegisterModel( "models/gibs/foot.md3" );
- cgs.media.gibForearm = trap_R_RegisterModel( "models/gibs/forearm.md3" );
- cgs.media.gibIntestine = trap_R_RegisterModel( "models/gibs/intestine.md3" );
- cgs.media.gibLeg = trap_R_RegisterModel( "models/gibs/leg.md3" );
- cgs.media.gibSkull = trap_R_RegisterModel( "models/gibs/skull.md3" );
- cgs.media.gibBrain = trap_R_RegisterModel( "models/gibs/brain.md3" );
-
- cgs.media.metalGib1 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib1.md3" );
- cgs.media.metalGib2 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib2.md3" );
- cgs.media.metalGib3 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib3.md3" );
- cgs.media.metalGib4 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib4.md3" );
- cgs.media.metalGib5 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib5.md3" );
- cgs.media.metalGib6 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib6.md3" );
- cgs.media.metalGib7 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib7.md3" );
- cgs.media.metalGib8 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib8.md3" );
+ cgs.media.greenBuildShader = trap_R_RegisterShader("gfx/2d/greenbuild" );
+ cgs.media.redBuildShader = trap_R_RegisterShader("gfx/2d/redbuild" );
+ cgs.media.noPowerShader = trap_R_RegisterShader("gfx/2d/nopower" );
+
+ cgs.media.machinegunBrassModel = trap_R_RegisterModel( "models/weapons2/shells/m_shell.md3" );
+ cgs.media.shotgunBrassModel = trap_R_RegisterModel( "models/weapons2/shells/s_shell.md3" );
+
+ cgs.media.gibAbdomen = trap_R_RegisterModel( "models/gibs/abdomen.md3" );
+ cgs.media.gibArm = trap_R_RegisterModel( "models/gibs/arm.md3" );
+ cgs.media.gibChest = trap_R_RegisterModel( "models/gibs/chest.md3" );
+ cgs.media.gibFist = trap_R_RegisterModel( "models/gibs/fist.md3" );
+ cgs.media.gibFoot = trap_R_RegisterModel( "models/gibs/foot.md3" );
+ cgs.media.gibForearm = trap_R_RegisterModel( "models/gibs/forearm.md3" );
+ cgs.media.gibIntestine = trap_R_RegisterModel( "models/gibs/intestine.md3" );
+ cgs.media.gibLeg = trap_R_RegisterModel( "models/gibs/leg.md3" );
+ cgs.media.gibSkull = trap_R_RegisterModel( "models/gibs/skull.md3" );
+ cgs.media.gibBrain = trap_R_RegisterModel( "models/gibs/brain.md3" );
+
+ cgs.media.metalGib1 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib1.md3" );
+ cgs.media.metalGib2 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib2.md3" );
+ cgs.media.metalGib3 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib3.md3" );
+ cgs.media.metalGib4 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib4.md3" );
+ cgs.media.metalGib5 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib5.md3" );
+ cgs.media.metalGib6 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib6.md3" );
+ cgs.media.metalGib7 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib7.md3" );
+ cgs.media.metalGib8 = trap_R_RegisterModel( "models/fx/metal_gibs/m_gib8.md3" );
- cgs.media.gibSpark1 = trap_R_RegisterShader( "models/fx/metal_gibs/spark.jpg" );
- cgs.media.gibSpark2 = trap_R_RegisterShader( "models/fx/metal_gibs/spark2.jpg" );
+ cgs.media.gibSpark1 = trap_R_RegisterShader( "models/fx/metal_gibs/spark.jpg" );
+ cgs.media.gibSpark2 = trap_R_RegisterShader( "models/fx/metal_gibs/spark2.jpg" );
- cgs.media.smoke2 = trap_R_RegisterModel( "models/weapons2/shells/s_shell.md3" );
-
- cgs.media.balloonShader = trap_R_RegisterShader( "sprites/balloon3" );
+ cgs.media.smoke2 = trap_R_RegisterModel( "models/weapons2/shells/s_shell.md3" );
- cgs.media.bloodExplosionShader = trap_R_RegisterShader( "bloodExplosion" );
+ cgs.media.balloonShader = trap_R_RegisterShader( "sprites/balloon3" );
- cgs.media.bulletFlashModel = trap_R_RegisterModel("models/weaphits/bullet.md3");
- cgs.media.ringFlashModel = trap_R_RegisterModel("models/weaphits/ring02.md3");
- cgs.media.dishFlashModel = trap_R_RegisterModel("models/weaphits/boom01.md3");
- cgs.media.teleportEffectModel = trap_R_RegisterModel( "models/misc/telep.md3" );
- cgs.media.teleportEffectShader = trap_R_RegisterShader( "teleportEffect" );
+ cgs.media.bloodExplosionShader = trap_R_RegisterShader( "bloodExplosion" );
- cgs.media.medalImpressive = trap_R_RegisterShaderNoMip( "medal_impressive" );
- cgs.media.medalExcellent = trap_R_RegisterShaderNoMip( "medal_excellent" );
- cgs.media.medalGauntlet = trap_R_RegisterShaderNoMip( "medal_gauntlet" );
- cgs.media.medalDefend = trap_R_RegisterShaderNoMip( "medal_defend" );
- cgs.media.medalAssist = trap_R_RegisterShaderNoMip( "medal_assist" );
- cgs.media.medalCapture = trap_R_RegisterShaderNoMip( "medal_capture" );
+ cgs.media.bulletFlashModel = trap_R_RegisterModel( "models/weaphits/bullet.md3" );
+ cgs.media.ringFlashModel = trap_R_RegisterModel( "models/weaphits/ring02.md3" );
+ cgs.media.dishFlashModel = trap_R_RegisterModel( "models/weaphits/boom01.md3" );
+ cgs.media.teleportEffectModel = trap_R_RegisterModel( "models/misc/telep.md3" );
+ cgs.media.teleportEffectShader = trap_R_RegisterShader( "teleportEffect" );
CG_UpdateMediaFraction( 0.7f );
- memset( cg_items, 0, sizeof( cg_items ) );
memset( cg_weapons, 0, sizeof( cg_weapons ) );
memset( cg_upgrades, 0, sizeof( cg_upgrades ) );
@@ -838,51 +798,58 @@ static void CG_RegisterGraphics( void ) {
strcpy( items, CG_ConfigString( CS_ITEMS) );
// wall marks
- cgs.media.bulletMarkShader = trap_R_RegisterShader( "gfx/damage/bullet_mrk" );
- cgs.media.burnMarkShader = trap_R_RegisterShader( "gfx/damage/burn_med_mrk" );
- cgs.media.holeMarkShader = trap_R_RegisterShader( "gfx/damage/hole_lg_mrk" );
- cgs.media.energyMarkShader = trap_R_RegisterShader( "gfx/damage/plasma_mrk" );
- cgs.media.shadowMarkShader = trap_R_RegisterShader( "markShadow" );
- cgs.media.wakeMarkShader = trap_R_RegisterShader( "wake" );
- cgs.media.bloodMarkShader = trap_R_RegisterShader( "bloodMark" );
+ cgs.media.bulletMarkShader = trap_R_RegisterShader( "gfx/damage/bullet_mrk" );
+ cgs.media.burnMarkShader = trap_R_RegisterShader( "gfx/damage/burn_med_mrk" );
+ cgs.media.holeMarkShader = trap_R_RegisterShader( "gfx/damage/hole_lg_mrk" );
+ cgs.media.energyMarkShader = trap_R_RegisterShader( "gfx/damage/plasma_mrk" );
+ cgs.media.shadowMarkShader = trap_R_RegisterShader( "markShadow" );
+ cgs.media.wakeMarkShader = trap_R_RegisterShader( "wake" );
+ cgs.media.bloodMarkShader = trap_R_RegisterShader( "bloodMark" );
// register the inline models
- cgs.numInlineModels = trap_CM_NumInlineModels();
- for ( i = 1 ; i < cgs.numInlineModels ; i++ ) {
- char name[10];
- vec3_t mins, maxs;
- int j;
-
- Com_sprintf( name, sizeof(name), "*%i", i );
- cgs.inlineDrawModel[i] = trap_R_RegisterModel( name );
- trap_R_ModelBounds( cgs.inlineDrawModel[i], mins, maxs );
- for ( j = 0 ; j < 3 ; j++ ) {
- cgs.inlineModelMidpoints[i][j] = mins[j] + 0.5 * ( maxs[j] - mins[j] );
- }
+ cgs.numInlineModels = trap_CM_NumInlineModels( );
+
+ for( i = 1; i < cgs.numInlineModels; i++ )
+ {
+ char name[ 10 ];
+ vec3_t mins, maxs;
+ int j;
+
+ Com_sprintf( name, sizeof( name ), "*%i", i );
+
+ cgs.inlineDrawModel[ i ] = trap_R_RegisterModel( name );
+ trap_R_ModelBounds( cgs.inlineDrawModel[ i ], mins, maxs );
+
+ for( j = 0 ; j < 3 ; j++ )
+ cgs.inlineModelMidpoints[ i ][ j ] = mins[ j ] + 0.5 * ( maxs[ j ] - mins[ j ] );
}
// register all the server specified models
- for (i=1 ; i<MAX_MODELS ; i++) {
- const char *modelName;
+ for( i = 1; i < MAX_MODELS; i++ )
+ {
+ const char *modelName;
modelName = CG_ConfigString( CS_MODELS+i );
- if ( !modelName[0] ) {
+
+ if( !modelName[ 0 ] )
break;
- }
- cgs.gameModels[i] = trap_R_RegisterModel( modelName );
+
+ cgs.gameModels[ i ] = trap_R_RegisterModel( modelName );
}
CG_UpdateMediaFraction( 0.8f );
// register all the server specified shaders
- for (i=1 ; i<MAX_SHADERS ; i++) {
- const char *shaderName;
+ for( i = 1; i < MAX_SHADERS; i++ )
+ {
+ const char *shaderName;
shaderName = CG_ConfigString( CS_SHADERS+i );
- if ( !shaderName[0] ) {
+
+ if( !shaderName[ 0 ] )
break;
- }
- cgs.gameShaders[i] = trap_R_RegisterShader( shaderName );
+
+ cgs.gameShaders[ i ] = trap_R_RegisterShader( shaderName );
}
}
@@ -893,16 +860,22 @@ CG_BuildSpectatorString
=======================
*/
-void CG_BuildSpectatorString() {
+void CG_BuildSpectatorString( void )
+{
int i;
- cg.spectatorList[0] = 0;
- for (i = 0; i < MAX_CLIENTS; i++) {
- if (cgs.clientinfo[i].infoValid && cgs.clientinfo[i].team == PTE_NONE ) {
- Q_strcat(cg.spectatorList, sizeof(cg.spectatorList), va("%s ", cgs.clientinfo[i].name));
- }
+
+ cg.spectatorList[ 0 ] = 0;
+
+ for( i = 0; i < MAX_CLIENTS; i++ )
+ {
+ if( cgs.clientinfo[ i ].infoValid && cgs.clientinfo[ i ].team == PTE_NONE )
+ Q_strcat( cg.spectatorList, sizeof( cg.spectatorList ), va( "%s ", cgs.clientinfo[ i ].name ) );
}
- i = strlen(cg.spectatorList);
- if (i != cg.spectatorLen) {
+
+ i = strlen( cg.spectatorList );
+
+ if( i != cg.spectatorLen )
+ {
cg.spectatorLen = i;
cg.spectatorWidth = -1;
}
@@ -928,7 +901,7 @@ static void CG_RegisterClients( void )
const char *clientInfo;
clientInfo = CG_ConfigString( CS_PRECACHES + i );
- if ( !clientInfo[0] )
+ if( !clientInfo[0] )
continue;
CG_PrecacheClientInfo( i );
@@ -949,7 +922,7 @@ static void CG_RegisterClients( void )
CG_NewClientInfo( i );
}
- CG_BuildSpectatorString();
+ CG_BuildSpectatorString( );
}
//===========================================================================
@@ -959,10 +932,11 @@ static void CG_RegisterClients( void )
CG_ConfigString
=================
*/
-const char *CG_ConfigString( int index ) {
- if ( index < 0 || index >= MAX_CONFIGSTRINGS ) {
+const char *CG_ConfigString( int index )
+{
+ if( index < 0 || index >= MAX_CONFIGSTRINGS )
CG_Error( "CG_ConfigString: bad index: %i", index );
- }
+
return cgs.gameState.stringData + cgs.gameState.stringOffsets[ index ];
}
@@ -974,9 +948,10 @@ CG_StartMusic
======================
*/
-void CG_StartMusic( void ) {
+void CG_StartMusic( void )
+{
char *s;
- char parm1[MAX_QPATH], parm2[MAX_QPATH];
+ char parm1[ MAX_QPATH ], parm2[ MAX_QPATH ];
// start the background music
s = (char *)CG_ConfigString( CS_MUSIC );
@@ -992,18 +967,24 @@ void CG_StartMusic( void ) {
// new hud stuff ( mission pack )
// ==============================
//
-char *CG_GetMenuBuffer(const char *filename) {
- int len;
+char *CG_GetMenuBuffer( const char *filename )
+{
+ int len;
fileHandle_t f;
- static char buf[MAX_MENUFILE];
+ static char buf[ MAX_MENUFILE ];
len = trap_FS_FOpenFile( filename, &f, FS_READ );
- if ( !f ) {
+
+ if( !f )
+ {
trap_Print( va( S_COLOR_RED "menu file not found: %s, using default\n", filename ) );
return NULL;
}
- if ( len >= MAX_MENUFILE ) {
- trap_Print( va( S_COLOR_RED "menu file too large: %s is %i, max allowed is %i", filename, len, MAX_MENUFILE ) );
+
+ if( len >= MAX_MENUFILE )
+ {
+ trap_Print( va( S_COLOR_RED "menu file too large: %s is %i, max allowed is %i",
+ filename, len, MAX_MENUFILE ) );
trap_FS_FCloseFile( f );
return NULL;
}
@@ -1015,167 +996,190 @@ char *CG_GetMenuBuffer(const char *filename) {
return buf;
}
-qboolean CG_Asset_Parse(int handle) {
+qboolean CG_Asset_Parse( int handle )
+{
pc_token_t token;
const char *tempStr;
- if (!trap_PC_ReadToken(handle, &token))
+ if( !trap_PC_ReadToken( handle, &token ) )
return qfalse;
- if (Q_stricmp(token.string, "{") != 0) {
+
+ if( Q_stricmp( token.string, "{" ) != 0 )
return qfalse;
- }
- while ( 1 ) {
- if (!trap_PC_ReadToken(handle, &token))
+ while( 1 )
+ {
+ if( !trap_PC_ReadToken( handle, &token ) )
return qfalse;
- if (Q_stricmp(token.string, "}") == 0) {
+ if( Q_stricmp( token.string, "}" ) == 0 )
return qtrue;
- }
// font
- if (Q_stricmp(token.string, "font") == 0) {
+ if( Q_stricmp( token.string, "font" ) == 0 )
+ {
int pointSize;
- if (!PC_String_Parse(handle, &tempStr) || !PC_Int_Parse(handle, &pointSize)) {
+
+ if( !PC_String_Parse( handle, &tempStr ) || !PC_Int_Parse( handle, &pointSize ) )
return qfalse;
- }
- cgDC.registerFont(tempStr, pointSize, &cgDC.Assets.textFont);
+
+ cgDC.registerFont( tempStr, pointSize, &cgDC.Assets.textFont );
continue;
}
// smallFont
- if (Q_stricmp(token.string, "smallFont") == 0) {
+ if( Q_stricmp( token.string, "smallFont" ) == 0 )
+ {
int pointSize;
- if (!PC_String_Parse(handle, &tempStr) || !PC_Int_Parse(handle, &pointSize)) {
+
+ if( !PC_String_Parse( handle, &tempStr ) || !PC_Int_Parse( handle, &pointSize ) )
return qfalse;
- }
- cgDC.registerFont(tempStr, pointSize, &cgDC.Assets.smallFont);
+
+ cgDC.registerFont( tempStr, pointSize, &cgDC.Assets.smallFont );
continue;
}
// font
- if (Q_stricmp(token.string, "bigfont") == 0) {
+ if( Q_stricmp( token.string, "bigfont" ) == 0 )
+ {
int pointSize;
- if (!PC_String_Parse(handle, &tempStr) || !PC_Int_Parse(handle, &pointSize)) {
+
+ if( !PC_String_Parse( handle, &tempStr ) || !PC_Int_Parse( handle, &pointSize ) )
return qfalse;
- }
- cgDC.registerFont(tempStr, pointSize, &cgDC.Assets.bigFont);
+
+ cgDC.registerFont( tempStr, pointSize, &cgDC.Assets.bigFont );
continue;
}
// gradientbar
- if (Q_stricmp(token.string, "gradientbar") == 0) {
- if (!PC_String_Parse(handle, &tempStr)) {
+ if( Q_stricmp( token.string, "gradientbar" ) == 0 )
+ {
+ if( !PC_String_Parse( handle, &tempStr ) )
return qfalse;
- }
- cgDC.Assets.gradientBar = trap_R_RegisterShaderNoMip(tempStr);
+
+ cgDC.Assets.gradientBar = trap_R_RegisterShaderNoMip( tempStr );
continue;
}
// enterMenuSound
- if (Q_stricmp(token.string, "menuEnterSound") == 0) {
- if (!PC_String_Parse(handle, &tempStr)) {
+ if( Q_stricmp( token.string, "menuEnterSound" ) == 0 )
+ {
+ if( !PC_String_Parse( handle, &tempStr ) )
return qfalse;
- }
+
cgDC.Assets.menuEnterSound = trap_S_RegisterSound( tempStr, qfalse );
continue;
}
// exitMenuSound
- if (Q_stricmp(token.string, "menuExitSound") == 0) {
- if (!PC_String_Parse(handle, &tempStr)) {
+ if( Q_stricmp( token.string, "menuExitSound" ) == 0 )
+ {
+ if( !PC_String_Parse( handle, &tempStr ) )
return qfalse;
- }
+
cgDC.Assets.menuExitSound = trap_S_RegisterSound( tempStr, qfalse );
continue;
}
// itemFocusSound
- if (Q_stricmp(token.string, "itemFocusSound") == 0) {
- if (!PC_String_Parse(handle, &tempStr)) {
+ if( Q_stricmp( token.string, "itemFocusSound" ) == 0 )
+ {
+ if( !PC_String_Parse( handle, &tempStr ) )
return qfalse;
- }
+
cgDC.Assets.itemFocusSound = trap_S_RegisterSound( tempStr, qfalse );
continue;
}
// menuBuzzSound
- if (Q_stricmp(token.string, "menuBuzzSound") == 0) {
- if (!PC_String_Parse(handle, &tempStr)) {
+ if( Q_stricmp( token.string, "menuBuzzSound" ) == 0 )
+ {
+ if( !PC_String_Parse( handle, &tempStr ) )
return qfalse;
- }
+
cgDC.Assets.menuBuzzSound = trap_S_RegisterSound( tempStr, qfalse );
continue;
}
- if (Q_stricmp(token.string, "cursor") == 0) {
- if (!PC_String_Parse(handle, &cgDC.Assets.cursorStr)) {
+ if( Q_stricmp( token.string, "cursor" ) == 0 )
+ {
+ if( !PC_String_Parse( handle, &cgDC.Assets.cursorStr ) )
return qfalse;
- }
- cgDC.Assets.cursor = trap_R_RegisterShaderNoMip( cgDC.Assets.cursorStr);
+
+ cgDC.Assets.cursor = trap_R_RegisterShaderNoMip( cgDC.Assets.cursorStr );
continue;
}
- if (Q_stricmp(token.string, "fadeClamp") == 0) {
- if (!PC_Float_Parse(handle, &cgDC.Assets.fadeClamp)) {
+ if( Q_stricmp( token.string, "fadeClamp" ) == 0 )
+ {
+ if( !PC_Float_Parse( handle, &cgDC.Assets.fadeClamp ) )
return qfalse;
- }
+
continue;
}
- if (Q_stricmp(token.string, "fadeCycle") == 0) {
- if (!PC_Int_Parse(handle, &cgDC.Assets.fadeCycle)) {
+ if( Q_stricmp( token.string, "fadeCycle" ) == 0 )
+ {
+ if( !PC_Int_Parse( handle, &cgDC.Assets.fadeCycle ) )
return qfalse;
- }
+
continue;
}
- if (Q_stricmp(token.string, "fadeAmount") == 0) {
- if (!PC_Float_Parse(handle, &cgDC.Assets.fadeAmount)) {
+ if( Q_stricmp( token.string, "fadeAmount" ) == 0 )
+ {
+ if( !PC_Float_Parse( handle, &cgDC.Assets.fadeAmount ) )
return qfalse;
- }
+
continue;
}
- if (Q_stricmp(token.string, "shadowX") == 0) {
- if (!PC_Float_Parse(handle, &cgDC.Assets.shadowX)) {
+ if( Q_stricmp( token.string, "shadowX" ) == 0 )
+ {
+ if( !PC_Float_Parse( handle, &cgDC.Assets.shadowX ) )
return qfalse;
- }
+
continue;
}
- if (Q_stricmp(token.string, "shadowY") == 0) {
- if (!PC_Float_Parse(handle, &cgDC.Assets.shadowY)) {
+ if( Q_stricmp( token.string, "shadowY" ) == 0 )
+ {
+ if( !PC_Float_Parse( handle, &cgDC.Assets.shadowY ) )
return qfalse;
- }
+
continue;
}
- if (Q_stricmp(token.string, "shadowColor") == 0) {
- if (!PC_Color_Parse(handle, &cgDC.Assets.shadowColor)) {
+ if( Q_stricmp( token.string, "shadowColor" ) == 0 )
+ {
+ if( !PC_Color_Parse( handle, &cgDC.Assets.shadowColor ) )
return qfalse;
- }
- cgDC.Assets.shadowFadeClamp = cgDC.Assets.shadowColor[3];
+
+ cgDC.Assets.shadowFadeClamp = cgDC.Assets.shadowColor[ 3 ];
continue;
}
}
+
return qfalse; // bk001204 - why not?
}
-void CG_ParseMenu(const char *menuFile) {
- pc_token_t token;
- int handle;
+void CG_ParseMenu( const char *menuFile )
+{
+ pc_token_t token;
+ int handle;
- handle = trap_PC_LoadSource(menuFile);
- if (!handle)
- handle = trap_PC_LoadSource("ui/testhud.menu");
- if (!handle)
+ handle = trap_PC_LoadSource( menuFile );
+
+ if( !handle )
+ handle = trap_PC_LoadSource( "ui/testhud.menu" );
+
+ if( !handle )
return;
- while ( 1 ) {
- if (!trap_PC_ReadToken( handle, &token )) {
+ while( 1 )
+ {
+ if( !trap_PC_ReadToken( handle, &token ) )
break;
- }
//if ( Q_stricmp( token, "{" ) ) {
// Com_Printf( "Missing { in menu file\n" );
@@ -1187,125 +1191,119 @@ void CG_ParseMenu(const char *menuFile) {
// break;
//}
- if ( token.string[0] == '}' ) {
+ if( token.string[ 0 ] == '}' )
break;
- }
- if (Q_stricmp(token.string, "assetGlobalDef") == 0) {
- if (CG_Asset_Parse(handle)) {
+ if( Q_stricmp( token.string, "assetGlobalDef" ) == 0 )
+ {
+ if( CG_Asset_Parse( handle ) )
continue;
- } else {
- break;
- }
+ else
+ break;
}
- if (Q_stricmp(token.string, "menudef") == 0) {
+ if( Q_stricmp( token.string, "menudef" ) == 0 )
+ {
// start a new menu
- Menu_New(handle);
+ Menu_New( handle );
}
}
- trap_PC_FreeSource(handle);
+
+ trap_PC_FreeSource( handle );
}
-qboolean CG_Load_Menu(char **p) {
+qboolean CG_Load_Menu( char **p )
+{
char *token;
- token = COM_ParseExt(p, qtrue);
+ token = COM_ParseExt( p, qtrue );
- if (token[0] != '{') {
+ if( token[ 0 ] != '{' )
return qfalse;
- }
-
- while ( 1 ) {
- token = COM_ParseExt(p, qtrue);
+ while( 1 )
+ {
+ token = COM_ParseExt( p, qtrue );
- if (Q_stricmp(token, "}") == 0) {
+ if( Q_stricmp( token, "}" ) == 0 )
return qtrue;
- }
- if ( !token || token[0] == 0 ) {
+ if( !token || token[ 0 ] == 0 )
return qfalse;
- }
- CG_ParseMenu(token);
+ CG_ParseMenu( token );
}
return qfalse;
}
-void CG_LoadMenus(const char *menuFile) {
- char *token;
- char *p;
- int len, start;
+void CG_LoadMenus( const char *menuFile )
+{
+ char *token;
+ char *p;
+ int len, start;
fileHandle_t f;
- static char buf[MAX_MENUDEFFILE];
+ static char buf[ MAX_MENUDEFFILE ];
- start = trap_Milliseconds();
+ start = trap_Milliseconds( );
len = trap_FS_FOpenFile( menuFile, &f, FS_READ );
- if ( !f ) {
+
+ if( !f )
+ {
trap_Error( va( S_COLOR_YELLOW "menu file not found: %s, using default\n", menuFile ) );
len = trap_FS_FOpenFile( "ui/hud.txt", &f, FS_READ );
- if (!f) {
+
+ if( !f )
trap_Error( va( S_COLOR_RED "default menu file not found: ui/hud.txt, unable to continue!\n", menuFile ) );
- }
}
- if ( len >= MAX_MENUDEFFILE ) {
- trap_Error( va( S_COLOR_RED "menu file too large: %s is %i, max allowed is %i", menuFile, len, MAX_MENUDEFFILE ) );
+ if( len >= MAX_MENUDEFFILE )
+ {
+ trap_Error( va( S_COLOR_RED "menu file too large: %s is %i, max allowed is %i",
+ menuFile, len, MAX_MENUDEFFILE ) );
trap_FS_FCloseFile( f );
return;
}
trap_FS_Read( buf, len, f );
- buf[len] = 0;
+ buf[ len ] = 0;
trap_FS_FCloseFile( f );
- COM_Compress(buf);
+ COM_Compress( buf );
- Menu_Reset();
+ Menu_Reset( );
p = buf;
- while ( 1 ) {
+ while( 1 )
+ {
token = COM_ParseExt( &p, qtrue );
- if( !token || token[0] == 0 || token[0] == '}') {
+
+ if( !token || token[ 0 ] == 0 || token[ 0 ] == '}' )
break;
- }
-
- //if ( Q_stricmp( token, "{" ) ) {
- // Com_Printf( "Missing { in menu file\n" );
- // break;
- //}
-
- //if ( menuCount == MAX_MENUS ) {
- // Com_Printf( "Too many menus!\n" );
- // break;
- //}
- if ( Q_stricmp( token, "}" ) == 0 ) {
+ if( Q_stricmp( token, "}" ) == 0 )
break;
- }
- if (Q_stricmp(token, "loadmenu") == 0) {
- if (CG_Load_Menu(&p)) {
+ if( Q_stricmp( token, "loadmenu" ) == 0 )
+ {
+ if( CG_Load_Menu( &p ) )
continue;
- } else {
+ else
break;
- }
}
}
- Com_Printf("UI menu load time = %d milli seconds\n", trap_Milliseconds() - start);
-
+ Com_Printf( "UI menu load time = %d milli seconds\n", trap_Milliseconds( ) - start );
}
-static qboolean CG_OwnerDrawHandleKey(int ownerDraw, int flags, float *special, int key) {
+static qboolean CG_OwnerDrawHandleKey( int ownerDraw, int flags, float *special, int key )
+{
return qfalse;
}
@@ -1445,7 +1443,8 @@ static const char *CG_FeederItemText( float feederID, int index, int column, qha
return "";
}
-static qhandle_t CG_FeederItemImage(float feederID, int index) {
+static qhandle_t CG_FeederItemImage( float feederID, int index )
+{
return 0;
}
@@ -1467,152 +1466,146 @@ static void CG_FeederSelection( float feederID, int index )
}
}
-static float CG_Cvar_Get(const char *cvar) {
- char buff[128];
- memset(buff, 0, sizeof(buff));
- trap_Cvar_VariableStringBuffer(cvar, buff, sizeof(buff));
- return atof(buff);
+static float CG_Cvar_Get( const char *cvar )
+{
+ char buff[ 128 ];
+
+ memset( buff, 0, sizeof( buff ) );
+ trap_Cvar_VariableStringBuffer( cvar, buff, sizeof( buff ) );
+ return atof( buff );
}
-void CG_Text_PaintWithCursor(float x, float y, float scale, vec4_t color, const char *text, int cursorPos, char cursor, int limit, int style) {
- CG_Text_Paint(x, y, scale, color, text, 0, limit, style);
+void CG_Text_PaintWithCursor( float x, float y, float scale, vec4_t color, const char *text,
+ int cursorPos, char cursor, int limit, int style )
+{
+ CG_Text_Paint( x, y, scale, color, text, 0, limit, style );
}
-static int CG_OwnerDrawWidth(int ownerDraw, float scale) {
- switch (ownerDraw) {
-/* case CG_GAME_TYPE:
- return CG_Text_Width(CG_GameTypeString(), scale, 0);*/
-/* case CG_GAME_STATUS:
- return CG_Text_Width(CG_GetGameStatusText(), scale, 0);
- break;*/
+static int CG_OwnerDrawWidth( int ownerDraw, float scale )
+{
+ switch( ownerDraw )
+ {
case CG_KILLER:
- return CG_Text_Width(CG_GetKillerText(), scale, 0);
- break;
-/* case CG_RED_NAME:
- return CG_Text_Width(cg_redTeamName.string, scale, 0);
+ return CG_Text_Width( CG_GetKillerText( ), scale, 0 );
break;
- case CG_BLUE_NAME:
- return CG_Text_Width(cg_blueTeamName.string, scale, 0);
- break;*/
-
-
}
+
return 0;
}
-static int CG_PlayCinematic(const char *name, float x, float y, float w, float h) {
- return trap_CIN_PlayCinematic(name, x, y, w, h, CIN_loop);
+static int CG_PlayCinematic( const char *name, float x, float y, float w, float h )
+{
+ return trap_CIN_PlayCinematic( name, x, y, w, h, CIN_loop );
}
-static void CG_StopCinematic(int handle) {
- trap_CIN_StopCinematic(handle);
+static void CG_StopCinematic( int handle )
+{
+ trap_CIN_StopCinematic( handle );
}
-static void CG_DrawCinematic(int handle, float x, float y, float w, float h) {
- trap_CIN_SetExtents(handle, x, y, w, h);
- trap_CIN_DrawCinematic(handle);
+static void CG_DrawCinematic( int handle, float x, float y, float w, float h )
+{
+ trap_CIN_SetExtents( handle, x, y, w, h );
+ trap_CIN_DrawCinematic( handle );
}
-static void CG_RunCinematicFrame(int handle) {
- trap_CIN_RunCinematic(handle);
+static void CG_RunCinematicFrame( int handle )
+{
+ trap_CIN_RunCinematic( handle );
}
/*
=================
-CG_LoadHudMenu();
-
+CG_LoadHudMenu
=================
*/
-void CG_LoadHudMenu() {
- char buff[1024];
- const char *hudSet;
-
- cgDC.registerShaderNoMip = &trap_R_RegisterShaderNoMip;
- cgDC.setColor = &trap_R_SetColor;
- cgDC.drawHandlePic = &CG_DrawPic;
- cgDC.drawStretchPic = &trap_R_DrawStretchPic;
- cgDC.drawText = &CG_Text_Paint;
- cgDC.textWidth = &CG_Text_Width;
- cgDC.textHeight = &CG_Text_Height;
- cgDC.registerModel = &trap_R_RegisterModel;
- cgDC.modelBounds = &trap_R_ModelBounds;
- cgDC.fillRect = &CG_FillRect;
- cgDC.drawRect = &CG_DrawRect;
- cgDC.drawSides = &CG_DrawSides;
- cgDC.drawTopBottom = &CG_DrawTopBottom;
- cgDC.clearScene = &trap_R_ClearScene;
- cgDC.addRefEntityToScene = &trap_R_AddRefEntityToScene;
- cgDC.renderScene = &trap_R_RenderScene;
- cgDC.registerFont = &trap_R_RegisterFont;
- cgDC.ownerDrawItem = &CG_OwnerDraw;
- cgDC.getValue = &CG_GetValue;
- cgDC.ownerDrawVisible = NULL; //&CG_OwnerDrawVisible;
- cgDC.runScript = &CG_RunMenuScript;
- cgDC.getTeamColor = &CG_GetTeamColor;
- cgDC.setCVar = trap_Cvar_Set;
- cgDC.getCVarString = trap_Cvar_VariableStringBuffer;
- cgDC.getCVarValue = CG_Cvar_Get;
- cgDC.drawTextWithCursor = &CG_Text_PaintWithCursor;
- //cgDC.setOverstrikeMode = &trap_Key_SetOverstrikeMode;
- //cgDC.getOverstrikeMode = &trap_Key_GetOverstrikeMode;
- cgDC.startLocalSound = &trap_S_StartLocalSound;
- cgDC.ownerDrawHandleKey = &CG_OwnerDrawHandleKey;
- cgDC.feederCount = &CG_FeederCount;
- cgDC.feederItemImage = &CG_FeederItemImage;
- cgDC.feederItemText = &CG_FeederItemText;
- cgDC.feederSelection = &CG_FeederSelection;
- //cgDC.setBinding = &trap_Key_SetBinding;
- //cgDC.getBindingBuf = &trap_Key_GetBindingBuf;
- //cgDC.keynumToStringBuf = &trap_Key_KeynumToStringBuf;
- //cgDC.executeText = &trap_Cmd_ExecuteText;
- cgDC.Error = &Com_Error;
- cgDC.Print = &Com_Printf;
- cgDC.ownerDrawWidth = &CG_OwnerDrawWidth;
- //cgDC.Pause = &CG_Pause;
- cgDC.registerSound = &trap_S_RegisterSound;
+void CG_LoadHudMenu( )
+{
+ char buff[ 1024 ];
+ const char *hudSet;
+
+ cgDC.registerShaderNoMip = &trap_R_RegisterShaderNoMip;
+ cgDC.setColor = &trap_R_SetColor;
+ cgDC.drawHandlePic = &CG_DrawPic;
+ cgDC.drawStretchPic = &trap_R_DrawStretchPic;
+ cgDC.drawText = &CG_Text_Paint;
+ cgDC.textWidth = &CG_Text_Width;
+ cgDC.textHeight = &CG_Text_Height;
+ cgDC.registerModel = &trap_R_RegisterModel;
+ cgDC.modelBounds = &trap_R_ModelBounds;
+ cgDC.fillRect = &CG_FillRect;
+ cgDC.drawRect = &CG_DrawRect;
+ cgDC.drawSides = &CG_DrawSides;
+ cgDC.drawTopBottom = &CG_DrawTopBottom;
+ cgDC.clearScene = &trap_R_ClearScene;
+ cgDC.addRefEntityToScene = &trap_R_AddRefEntityToScene;
+ cgDC.renderScene = &trap_R_RenderScene;
+ cgDC.registerFont = &trap_R_RegisterFont;
+ cgDC.ownerDrawItem = &CG_OwnerDraw;
+ cgDC.getValue = &CG_GetValue;
+ cgDC.ownerDrawVisible = NULL; //&CG_OwnerDrawVisible;
+ cgDC.runScript = &CG_RunMenuScript;
+ cgDC.getTeamColor = &CG_GetTeamColor;
+ cgDC.setCVar = trap_Cvar_Set;
+ cgDC.getCVarString = trap_Cvar_VariableStringBuffer;
+ cgDC.getCVarValue = CG_Cvar_Get;
+ cgDC.drawTextWithCursor = &CG_Text_PaintWithCursor;
+ //cgDC.setOverstrikeMode = &trap_Key_SetOverstrikeMode;
+ //cgDC.getOverstrikeMode = &trap_Key_GetOverstrikeMode;
+ cgDC.startLocalSound = &trap_S_StartLocalSound;
+ cgDC.ownerDrawHandleKey = &CG_OwnerDrawHandleKey;
+ cgDC.feederCount = &CG_FeederCount;
+ cgDC.feederItemImage = &CG_FeederItemImage;
+ cgDC.feederItemText = &CG_FeederItemText;
+ cgDC.feederSelection = &CG_FeederSelection;
+ //cgDC.setBinding = &trap_Key_SetBinding;
+ //cgDC.getBindingBuf = &trap_Key_GetBindingBuf;
+ //cgDC.keynumToStringBuf = &trap_Key_KeynumToStringBuf;
+ //cgDC.executeText = &trap_Cmd_ExecuteText;
+ cgDC.Error = &Com_Error;
+ cgDC.Print = &Com_Printf;
+ cgDC.ownerDrawWidth = &CG_OwnerDrawWidth;
+ //cgDC.Pause = &CG_Pause;
+ cgDC.registerSound = &trap_S_RegisterSound;
cgDC.startBackgroundTrack = &trap_S_StartBackgroundTrack;
- cgDC.stopBackgroundTrack = &trap_S_StopBackgroundTrack;
- cgDC.playCinematic = &CG_PlayCinematic;
- cgDC.stopCinematic = &CG_StopCinematic;
- cgDC.drawCinematic = &CG_DrawCinematic;
- cgDC.runCinematicFrame = &CG_RunCinematicFrame;
+ cgDC.stopBackgroundTrack = &trap_S_StopBackgroundTrack;
+ cgDC.playCinematic = &CG_PlayCinematic;
+ cgDC.stopCinematic = &CG_StopCinematic;
+ cgDC.drawCinematic = &CG_DrawCinematic;
+ cgDC.runCinematicFrame = &CG_RunCinematicFrame;
- Init_Display(&cgDC);
+ Init_Display( &cgDC );
- Menu_Reset();
+ Menu_Reset( );
- trap_Cvar_VariableStringBuffer("cg_hudFiles", buff, sizeof(buff));
+ trap_Cvar_VariableStringBuffer( "cg_hudFiles", buff, sizeof( buff ) );
hudSet = buff;
- if (hudSet[0] == '\0') {
+
+ if( hudSet[ 0 ] == '\0' )
hudSet = "ui/hud.txt";
- }
- CG_LoadMenus(hudSet);
+ CG_LoadMenus( hudSet );
}
-void CG_AssetCache() {
- //if (Assets.textFont == NULL) {
- // trap_R_RegisterFont("fonts/arial.ttf", 72, &Assets.textFont);
- //}
- //Assets.background = trap_R_RegisterShaderNoMip( ASSET_BACKGROUND );
- //Com_Printf("Menu Size: %i bytes\n", sizeof(Menus));
- cgDC.Assets.gradientBar = trap_R_RegisterShaderNoMip( ASSET_GRADIENTBAR );
- cgDC.Assets.fxBasePic = trap_R_RegisterShaderNoMip( ART_FX_BASE );
- cgDC.Assets.fxPic[0] = trap_R_RegisterShaderNoMip( ART_FX_RED );
- cgDC.Assets.fxPic[1] = trap_R_RegisterShaderNoMip( ART_FX_YELLOW );
- cgDC.Assets.fxPic[2] = trap_R_RegisterShaderNoMip( ART_FX_GREEN );
- cgDC.Assets.fxPic[3] = trap_R_RegisterShaderNoMip( ART_FX_TEAL );
- cgDC.Assets.fxPic[4] = trap_R_RegisterShaderNoMip( ART_FX_BLUE );
- cgDC.Assets.fxPic[5] = trap_R_RegisterShaderNoMip( ART_FX_CYAN );
- cgDC.Assets.fxPic[6] = trap_R_RegisterShaderNoMip( ART_FX_WHITE );
- cgDC.Assets.scrollBar = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR );
- cgDC.Assets.scrollBarArrowDown = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWDOWN );
- cgDC.Assets.scrollBarArrowUp = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWUP );
- cgDC.Assets.scrollBarArrowLeft = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWLEFT );
+void CG_AssetCache( void )
+{
+ cgDC.Assets.gradientBar = trap_R_RegisterShaderNoMip( ASSET_GRADIENTBAR );
+ cgDC.Assets.fxBasePic = trap_R_RegisterShaderNoMip( ART_FX_BASE );
+ cgDC.Assets.fxPic[ 0 ] = trap_R_RegisterShaderNoMip( ART_FX_RED );
+ cgDC.Assets.fxPic[ 1 ] = trap_R_RegisterShaderNoMip( ART_FX_YELLOW );
+ cgDC.Assets.fxPic[ 2 ] = trap_R_RegisterShaderNoMip( ART_FX_GREEN );
+ cgDC.Assets.fxPic[ 3 ] = trap_R_RegisterShaderNoMip( ART_FX_TEAL );
+ cgDC.Assets.fxPic[ 4 ] = trap_R_RegisterShaderNoMip( ART_FX_BLUE );
+ cgDC.Assets.fxPic[ 5 ] = trap_R_RegisterShaderNoMip( ART_FX_CYAN );
+ cgDC.Assets.fxPic[ 6 ] = trap_R_RegisterShaderNoMip( ART_FX_WHITE );
+ cgDC.Assets.scrollBar = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR );
+ cgDC.Assets.scrollBarArrowDown = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWDOWN );
+ cgDC.Assets.scrollBarArrowUp = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWUP );
+ cgDC.Assets.scrollBarArrowLeft = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWLEFT );
cgDC.Assets.scrollBarArrowRight = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWRIGHT );
- cgDC.Assets.scrollBarThumb = trap_R_RegisterShaderNoMip( ASSET_SCROLL_THUMB );
- cgDC.Assets.sliderBar = trap_R_RegisterShaderNoMip( ASSET_SLIDER_BAR );
- cgDC.Assets.sliderThumb = trap_R_RegisterShaderNoMip( ASSET_SLIDER_THUMB );
+ cgDC.Assets.scrollBarThumb = trap_R_RegisterShaderNoMip( ASSET_SCROLL_THUMB );
+ cgDC.Assets.sliderBar = trap_R_RegisterShaderNoMip( ASSET_SLIDER_BAR );
+ cgDC.Assets.sliderThumb = trap_R_RegisterShaderNoMip( ASSET_SLIDER_THUMB );
}
//TA: FIXME: preliminary integration of CG TA UI stuff
@@ -1624,14 +1617,14 @@ Called after every level change or subsystem restart
Will perform callbacks to make the loading info screen update.
=================
*/
-void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) {
+void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum )
+{
const char *s;
// clear everything
memset( &cgs, 0, sizeof( cgs ) );
memset( &cg, 0, sizeof( cg ) );
- memset( cg_entities, 0, sizeof(cg_entities) );
- memset( cg_items, 0, sizeof(cg_items) );
+ memset( cg_entities, 0, sizeof( cg_entities ) );
cg.clientNum = clientNum;
@@ -1639,31 +1632,26 @@ void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) {
cgs.serverCommandSequence = serverCommandSequence;
// load a few needed things before we do any screen updates
+ cgs.media.whiteShader = trap_R_RegisterShader( "white" );
cgs.media.charsetShader = trap_R_RegisterShader( "gfx/2d/bigchars" );
- cgs.media.whiteShader = trap_R_RegisterShader( "white" );
- cgs.media.charsetProp = trap_R_RegisterShaderNoMip( "menu/art/font1_prop.tga" );
- cgs.media.charsetPropGlow = trap_R_RegisterShaderNoMip( "menu/art/font1_prop_glo.tga" );
- cgs.media.charsetPropB = trap_R_RegisterShaderNoMip( "menu/art/font2_prop.tga" );
+ //inform UI to repress cursor whilst loading
+ trap_Cvar_Set( "ui_loading", "1" );
+
//TA: dyn memory
CG_InitMemory( );
- CG_RegisterCvars();
+ CG_RegisterCvars( );
- CG_InitConsoleCommands();
+ CG_InitConsoleCommands( );
- //repress standard Q3 console
- trap_Cvar_Set( "con_notifytime", "-2" );
-
//TA: moved up for LoadHudMenu
- String_Init();
+ String_Init( );
//TA: FIXME: TA UI
- CG_AssetCache();
- CG_LoadHudMenu(); // load new hud stuff
+ CG_AssetCache( );
+ CG_LoadHudMenu( ); // load new hud stuff
- //cg.weaponSelect = WP_MACHINEGUN;
- //TA: if it does weird things, this is why:
cg.weaponSelect = WP_NONE;
cgs.redflag = cgs.blueflag = -1; // For compatibily, default to unset for
@@ -1680,14 +1668,14 @@ void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) {
// check version
s = CG_ConfigString( CS_GAME_VERSION );
- if ( strcmp( s, GAME_VERSION ) ) {
+
+ if( strcmp( s, GAME_VERSION ) )
CG_Error( "Client/Server game mismatch: %s/%s", GAME_VERSION, s );
- }
s = CG_ConfigString( CS_LEVEL_START_TIME );
cgs.levelStartTime = atoi( s );
- CG_ParseServerinfo();
+ CG_ParseServerinfo( );
// load the new map
trap_CM_LoadMap( cgs.mapname );
@@ -1707,27 +1695,29 @@ void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) {
//TA:
CG_InitBuildables( );
- CG_RegisterClients(); // if low on memory, some clients will be deferred
+ CG_RegisterClients( ); // if low on memory, some clients will be deferred
cg.loading = qfalse; // future players will be deferred
- CG_InitLocalEntities();
+ CG_InitLocalEntities( );
- CG_InitMarkPolys();
+ CG_InitMarkPolys( );
// remove the last loading update
- cg.infoScreenText[0] = 0;
+ cg.infoScreenText[ 0 ] = 0;
// Make sure we have update values (scores)
- CG_SetConfigValues();
+ CG_SetConfigValues( );
- CG_StartMusic();
+ CG_StartMusic( );
- CG_ShaderStateChanged();
+ CG_ShaderStateChanged( );
trap_S_ClearLoopingSounds( qtrue );
cg.consoleValid = qtrue;
+
+ trap_Cvar_Set( "ui_loading", "0" );
}
/*
@@ -1737,28 +1727,8 @@ CG_Shutdown
Called before every level change or subsystem restart
=================
*/
-void CG_Shutdown( void ) {
+void CG_Shutdown( void )
+{
// some mods may need to do cleanup work here,
// like closing files or archiving session data
}
-
-/*
-==================
-CG_EventHandling
-==================
- type 0 - no event handling
- 1 - team menu
- 2 - hud editor
-
-*/
-/*void CG_EventHandling(int type) {
-}
-
-
-
-void CG_KeyEvent(int key, qboolean down) {
-}
-
-void CG_MouseEvent(int x, int y) {
-}
-*/
diff --git a/src/cgame/cg_marks.c b/src/cgame/cg_marks.c
index 7dbb7c1f..deb31c4d 100644
--- a/src/cgame/cg_marks.c
+++ b/src/cgame/cg_marks.c
@@ -26,10 +26,10 @@ MARK POLYS
*/
-markPoly_t cg_activeMarkPolys; // double linked list
-markPoly_t *cg_freeMarkPolys; // single linked list
-markPoly_t cg_markPolys[MAX_MARK_POLYS];
-static int markTotal;
+markPoly_t cg_activeMarkPolys; // double linked list
+markPoly_t *cg_freeMarkPolys; // single linked list
+markPoly_t cg_markPolys[ MAX_MARK_POLYS ];
+static int markTotal;
/*
===================
@@ -38,17 +38,18 @@ CG_InitMarkPolys
This is called at startup and for tournement restarts
===================
*/
-void CG_InitMarkPolys( void ) {
- int i;
-
- memset( cg_markPolys, 0, sizeof(cg_markPolys) );
-
- cg_activeMarkPolys.nextMark = &cg_activeMarkPolys;
- cg_activeMarkPolys.prevMark = &cg_activeMarkPolys;
- cg_freeMarkPolys = cg_markPolys;
- for ( i = 0 ; i < MAX_MARK_POLYS - 1 ; i++ ) {
- cg_markPolys[i].nextMark = &cg_markPolys[i+1];
- }
+void CG_InitMarkPolys( void )
+{
+ int i;
+
+ memset( cg_markPolys, 0, sizeof( cg_markPolys ) );
+
+ cg_activeMarkPolys.nextMark = &cg_activeMarkPolys;
+ cg_activeMarkPolys.prevMark = &cg_activeMarkPolys;
+ cg_freeMarkPolys = cg_markPolys;
+
+ for( i = 0; i < MAX_MARK_POLYS - 1; i++ )
+ cg_markPolys[ i ].nextMark = &cg_markPolys[ i + 1 ];
}
@@ -57,18 +58,18 @@ void CG_InitMarkPolys( void ) {
CG_FreeMarkPoly
==================
*/
-void CG_FreeMarkPoly( markPoly_t *le ) {
- if ( !le->prevMark ) {
- CG_Error( "CG_FreeLocalEntity: not active" );
- }
-
- // remove from the doubly linked active list
- le->prevMark->nextMark = le->nextMark;
- le->nextMark->prevMark = le->prevMark;
-
- // the free list is only singly linked
- le->nextMark = cg_freeMarkPolys;
- cg_freeMarkPolys = le;
+void CG_FreeMarkPoly( markPoly_t *le )
+{
+ if( !le->prevMark )
+ CG_Error( "CG_FreeLocalEntity: not active" );
+
+ // remove from the doubly linked active list
+ le->prevMark->nextMark = le->nextMark;
+ le->nextMark->prevMark = le->prevMark;
+
+ // the free list is only singly linked
+ le->nextMark = cg_freeMarkPolys;
+ cg_freeMarkPolys = le;
}
/*
@@ -78,30 +79,32 @@ CG_AllocMark
Will allways succeed, even if it requires freeing an old active mark
===================
*/
-markPoly_t *CG_AllocMark( void ) {
- markPoly_t *le;
- int time;
-
- if ( !cg_freeMarkPolys ) {
- // no free entities, so free the one at the end of the chain
- // remove the oldest active entity
- time = cg_activeMarkPolys.prevMark->time;
- while (cg_activeMarkPolys.prevMark && time == cg_activeMarkPolys.prevMark->time) {
- CG_FreeMarkPoly( cg_activeMarkPolys.prevMark );
- }
- }
-
- le = cg_freeMarkPolys;
- cg_freeMarkPolys = cg_freeMarkPolys->nextMark;
-
- memset( le, 0, sizeof( *le ) );
-
- // link into the active list
- le->nextMark = cg_activeMarkPolys.nextMark;
- le->prevMark = &cg_activeMarkPolys;
- cg_activeMarkPolys.nextMark->prevMark = le;
- cg_activeMarkPolys.nextMark = le;
- return le;
+markPoly_t *CG_AllocMark( void )
+{
+ markPoly_t *le;
+ int time;
+
+ if( !cg_freeMarkPolys )
+ {
+ // no free entities, so free the one at the end of the chain
+ // remove the oldest active entity
+ time = cg_activeMarkPolys.prevMark->time;
+
+ while( cg_activeMarkPolys.prevMark && time == cg_activeMarkPolys.prevMark->time )
+ CG_FreeMarkPoly( cg_activeMarkPolys.prevMark );
+ }
+
+ le = cg_freeMarkPolys;
+ cg_freeMarkPolys = cg_freeMarkPolys->nextMark;
+
+ memset( le, 0, sizeof( *le ) );
+
+ // link into the active list
+ le->nextMark = cg_activeMarkPolys.nextMark;
+ le->prevMark = &cg_activeMarkPolys;
+ cg_activeMarkPolys.nextMark->prevMark = le;
+ cg_activeMarkPolys.nextMark = le;
+ return le;
}
@@ -117,101 +120,104 @@ temporary marks will not be stored or randomly oriented, but immediately
passed to the renderer.
=================
*/
-#define MAX_MARK_FRAGMENTS 128
-#define MAX_MARK_POINTS 384
+#define MAX_MARK_FRAGMENTS 128
+#define MAX_MARK_POINTS 384
void CG_ImpactMark( qhandle_t markShader, const vec3_t origin, const vec3_t dir,
- float orientation, float red, float green, float blue, float alpha,
- qboolean alphaFade, float radius, qboolean temporary ) {
- vec3_t axis[3];
- float texCoordScale;
- vec3_t originalPoints[4];
- byte colors[4];
- int i, j;
- int numFragments;
- markFragment_t markFragments[MAX_MARK_FRAGMENTS], *mf;
- vec3_t markPoints[MAX_MARK_POINTS];
- vec3_t projection;
-
- if ( !cg_addMarks.integer ) {
- return;
- }
-
- if ( radius <= 0 ) {
- CG_Error( "CG_ImpactMark called with <= 0 radius" );
- }
+ float orientation, float red, float green, float blue, float alpha,
+ qboolean alphaFade, float radius, qboolean temporary )
+{
+ vec3_t axis[ 3 ];
+ float texCoordScale;
+ vec3_t originalPoints[ 4 ];
+ byte colors[ 4 ];
+ int i, j;
+ int numFragments;
+ markFragment_t markFragments[ MAX_MARK_FRAGMENTS ], *mf;
+ vec3_t markPoints[ MAX_MARK_POINTS ];
+ vec3_t projection;
+
+ if( !cg_addMarks.integer )
+ return;
+
+ if( radius <= 0 )
+ CG_Error( "CG_ImpactMark called with <= 0 radius" );
//if ( markTotal >= MAX_MARK_POLYS ) {
// return;
//}
- // create the texture axis
- VectorNormalize2( dir, axis[0] );
- PerpendicularVector( axis[1], axis[0] );
- RotatePointAroundVector( axis[2], axis[0], axis[1], orientation );
- CrossProduct( axis[0], axis[2], axis[1] );
-
- texCoordScale = 0.5 * 1.0 / radius;
-
- // create the full polygon
- for ( i = 0 ; i < 3 ; i++ ) {
- originalPoints[0][i] = origin[i] - radius * axis[1][i] - radius * axis[2][i];
- originalPoints[1][i] = origin[i] + radius * axis[1][i] - radius * axis[2][i];
- originalPoints[2][i] = origin[i] + radius * axis[1][i] + radius * axis[2][i];
- originalPoints[3][i] = origin[i] - radius * axis[1][i] + radius * axis[2][i];
- }
-
- // get the fragments
- VectorScale( dir, -20, projection );
- numFragments = trap_CM_MarkFragments( 4, (void *)originalPoints,
- projection, MAX_MARK_POINTS, markPoints[0],
- MAX_MARK_FRAGMENTS, markFragments );
-
- colors[0] = red * 255;
- colors[1] = green * 255;
- colors[2] = blue * 255;
- colors[3] = alpha * 255;
-
- for ( i = 0, mf = markFragments ; i < numFragments ; i++, mf++ ) {
- polyVert_t *v;
- polyVert_t verts[MAX_VERTS_ON_POLY];
- markPoly_t *mark;
-
- // we have an upper limit on the complexity of polygons
- // that we store persistantly
- if ( mf->numPoints > MAX_VERTS_ON_POLY ) {
- mf->numPoints = MAX_VERTS_ON_POLY;
- }
- for ( j = 0, v = verts ; j < mf->numPoints ; j++, v++ ) {
- vec3_t delta;
-
- VectorCopy( markPoints[mf->firstPoint + j], v->xyz );
-
- VectorSubtract( v->xyz, origin, delta );
- v->st[0] = 0.5 + DotProduct( delta, axis[1] ) * texCoordScale;
- v->st[1] = 0.5 + DotProduct( delta, axis[2] ) * texCoordScale;
- *(int *)v->modulate = *(int *)colors;
- }
-
- // if it is a temporary (shadow) mark, add it immediately and forget about it
- if ( temporary ) {
- trap_R_AddPolyToScene( markShader, mf->numPoints, verts );
- continue;
- }
-
- // otherwise save it persistantly
- mark = CG_AllocMark();
- mark->time = cg.time;
- mark->alphaFade = alphaFade;
- mark->markShader = markShader;
- mark->poly.numVerts = mf->numPoints;
- mark->color[0] = red;
- mark->color[1] = green;
- mark->color[2] = blue;
- mark->color[3] = alpha;
- memcpy( mark->verts, verts, mf->numPoints * sizeof( verts[0] ) );
+ // create the texture axis
+ VectorNormalize2( dir, axis[ 0 ] );
+ PerpendicularVector( axis[ 1 ], axis[ 0 ] );
+ RotatePointAroundVector( axis[ 2 ], axis[ 0 ], axis[ 1 ], orientation );
+ CrossProduct( axis[ 0 ], axis[ 2 ], axis[ 1 ] );
+
+ texCoordScale = 0.5 * 1.0 / radius;
+
+ // create the full polygon
+ for( i = 0; i < 3; i++ )
+ {
+ originalPoints[ 0 ][ i ] = origin[ i ] - radius * axis[ 1 ][ i ] - radius * axis[ 2 ][ i ];
+ originalPoints[ 1 ][ i ] = origin[ i ] + radius * axis[ 1 ][ i ] - radius * axis[ 2 ][ i ];
+ originalPoints[ 2 ][ i ] = origin[ i ] + radius * axis[ 1 ][ i ] + radius * axis[ 2 ][ i ];
+ originalPoints[ 3 ][ i ] = origin[ i ] - radius * axis[ 1 ][ i ] + radius * axis[ 2 ][ i ];
+ }
+
+ // get the fragments
+ VectorScale( dir, -20, projection );
+ numFragments = trap_CM_MarkFragments( 4, (void *)originalPoints,
+ projection, MAX_MARK_POINTS, markPoints[ 0 ],
+ MAX_MARK_FRAGMENTS, markFragments );
+
+ colors[ 0 ] = red * 255;
+ colors[ 1 ] = green * 255;
+ colors[ 2 ] = blue * 255;
+ colors[ 3 ] = alpha * 255;
+
+ for( i = 0, mf = markFragments; i < numFragments; i++, mf++ )
+ {
+ polyVert_t *v;
+ polyVert_t verts[ MAX_VERTS_ON_POLY ];
+ markPoly_t *mark;
+
+ // we have an upper limit on the complexity of polygons
+ // that we store persistantly
+ if( mf->numPoints > MAX_VERTS_ON_POLY )
+ mf->numPoints = MAX_VERTS_ON_POLY;
+
+ for( j = 0, v = verts; j < mf->numPoints; j++, v++ )
+ {
+ vec3_t delta;
+
+ VectorCopy( markPoints[ mf->firstPoint + j ], v->xyz );
+
+ VectorSubtract( v->xyz, origin, delta );
+ v->st[ 0 ] = 0.5 + DotProduct( delta, axis[ 1 ] ) * texCoordScale;
+ v->st[ 1 ] = 0.5 + DotProduct( delta, axis[ 2 ] ) * texCoordScale;
+ *(int *)v->modulate = *(int *)colors;
+ }
+
+ // if it is a temporary (shadow) mark, add it immediately and forget about it
+ if( temporary )
+ {
+ trap_R_AddPolyToScene( markShader, mf->numPoints, verts );
+ continue;
+ }
+
+ // otherwise save it persistantly
+ mark = CG_AllocMark( );
+ mark->time = cg.time;
+ mark->alphaFade = alphaFade;
+ mark->markShader = markShader;
+ mark->poly.numVerts = mf->numPoints;
+ mark->color[ 0 ] = red;
+ mark->color[ 1 ] = green;
+ mark->color[ 2 ] = blue;
+ mark->color[ 3 ] = alpha;
+ memcpy( mark->verts, verts, mf->numPoints * sizeof( verts[ 0 ] ) );
markTotal++;
- }
+ }
}
@@ -220,68 +226,77 @@ void CG_ImpactMark( qhandle_t markShader, const vec3_t origin, const vec3_t dir,
CG_AddMarks
===============
*/
-#define MARK_TOTAL_TIME 10000
-#define MARK_FADE_TIME 1000
-
-void CG_AddMarks( void ) {
- int j;
- markPoly_t *mp, *next;
- int t;
- int fade;
-
- if ( !cg_addMarks.integer ) {
- return;
- }
-
- mp = cg_activeMarkPolys.nextMark;
- for ( ; mp != &cg_activeMarkPolys ; mp = next ) {
- // grab next now, so if the local entity is freed we
- // still have it
- next = mp->nextMark;
-
- // see if it is time to completely remove it
- if ( cg.time > mp->time + MARK_TOTAL_TIME ) {
- CG_FreeMarkPoly( mp );
- continue;
- }
-
- // fade out the energy bursts
- if ( mp->markShader == cgs.media.energyMarkShader ) {
-
- fade = 450 - 450 * ( (cg.time - mp->time ) / 3000.0 );
- if ( fade < 255 ) {
- if ( fade < 0 ) {
- fade = 0;
- }
- if ( mp->verts[0].modulate[0] != 0 ) {
- for ( j = 0 ; j < mp->poly.numVerts ; j++ ) {
- mp->verts[j].modulate[0] = mp->color[0] * fade;
- mp->verts[j].modulate[1] = mp->color[1] * fade;
- mp->verts[j].modulate[2] = mp->color[2] * fade;
- }
- }
- }
- }
-
- // fade all marks out with time
- t = mp->time + MARK_TOTAL_TIME - cg.time;
- if ( t < MARK_FADE_TIME ) {
- fade = 255 * t / MARK_FADE_TIME;
- if ( mp->alphaFade ) {
- for ( j = 0 ; j < mp->poly.numVerts ; j++ ) {
- mp->verts[j].modulate[3] = fade;
- }
- } else {
- for ( j = 0 ; j < mp->poly.numVerts ; j++ ) {
- mp->verts[j].modulate[0] = mp->color[0] * fade;
- mp->verts[j].modulate[1] = mp->color[1] * fade;
- mp->verts[j].modulate[2] = mp->color[2] * fade;
- }
- }
- }
-
-
- trap_R_AddPolyToScene( mp->markShader, mp->poly.numVerts, mp->verts );
- }
+#define MARK_TOTAL_TIME 10000
+#define MARK_FADE_TIME 1000
+
+void CG_AddMarks( void )
+{
+ int j;
+ markPoly_t *mp, *next;
+ int t;
+ int fade;
+
+ if( !cg_addMarks.integer )
+ return;
+
+ mp = cg_activeMarkPolys.nextMark;
+ for ( ; mp != &cg_activeMarkPolys; mp = next )
+ {
+ // grab next now, so if the local entity is freed we
+ // still have it
+ next = mp->nextMark;
+
+ // see if it is time to completely remove it
+ if( cg.time > mp->time + MARK_TOTAL_TIME )
+ {
+ CG_FreeMarkPoly( mp );
+ continue;
+ }
+
+ // fade out the energy bursts
+ if( mp->markShader == cgs.media.energyMarkShader )
+ {
+
+ fade = 450 - 450 * ( (cg.time - mp->time ) / 3000.0 );
+ if( fade < 255 )
+ {
+ if( fade < 0 )
+ fade = 0;
+
+ if( mp->verts[ 0 ].modulate[ 0 ] != 0 )
+ {
+ for( j = 0; j < mp->poly.numVerts; j++ )
+ {
+ mp->verts[ j ].modulate[ 0 ] = mp->color[ 0 ] * fade;
+ mp->verts[ j ].modulate[ 1 ] = mp->color[ 1 ] * fade;
+ mp->verts[ j ].modulate[ 2 ] = mp->color[ 2 ] * fade;
+ }
+ }
+ }
+ }
+
+ // fade all marks out with time
+ t = mp->time + MARK_TOTAL_TIME - cg.time;
+ if( t < MARK_FADE_TIME )
+ {
+ fade = 255 * t / MARK_FADE_TIME;
+ if( mp->alphaFade )
+ {
+ for( j = 0; j < mp->poly.numVerts; j++ )
+ mp->verts[ j ].modulate[ 3 ] = fade;
+ }
+ else
+ {
+ for( j = 0; j < mp->poly.numVerts; j++ )
+ {
+ mp->verts[ j ].modulate[ 0 ] = mp->color[ 0 ] * fade;
+ mp->verts[ j ].modulate[ 1 ] = mp->color[ 1 ] * fade;
+ mp->verts[ j ].modulate[ 2 ] = mp->color[ 2 ] * fade;
+ }
+ }
+ }
+
+ trap_R_AddPolyToScene( mp->markShader, mp->poly.numVerts, mp->verts );
+ }
}
diff --git a/src/cgame/cg_players.c b/src/cgame/cg_players.c
index 09098e31..b553fbc2 100644
--- a/src/cgame/cg_players.c
+++ b/src/cgame/cg_players.c
@@ -17,7 +17,8 @@
#include "cg_local.h"
-char *cg_customSoundNames[MAX_CUSTOM_SOUNDS] = {
+char *cg_customSoundNames[ MAX_CUSTOM_SOUNDS ] =
+{
"*death1.wav",
"*death2.wav",
"*death3.wav",
@@ -40,23 +41,23 @@ CG_CustomSound
================
*/
-sfxHandle_t CG_CustomSound( int clientNum, const char *soundName ) {
- clientInfo_t *ci;
- int i;
+sfxHandle_t CG_CustomSound( int clientNum, const char *soundName )
+{
+ clientInfo_t *ci;
+ int i;
- if ( soundName[0] != '*' ) {
+ if( soundName[ 0 ] != '*' )
return trap_S_RegisterSound( soundName, qfalse );
- }
- if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
+ if( clientNum < 0 || clientNum >= MAX_CLIENTS )
clientNum = 0;
- }
+
ci = &cgs.clientinfo[ clientNum ];
- for ( i = 0 ; i < MAX_CUSTOM_SOUNDS && cg_customSoundNames[i] ; i++ ) {
- if ( !strcmp( soundName, cg_customSoundNames[i] ) ) {
- return ci->sounds[i];
- }
+ for( i = 0; i < MAX_CUSTOM_SOUNDS && cg_customSoundNames[ i ]; i++ )
+ {
+ if( !strcmp( soundName, cg_customSoundNames[ i ] ) )
+ return ci->sounds[ i ];
}
CG_Error( "Unknown custom sound: %s", soundName );
@@ -81,30 +82,33 @@ Read a configuration file containing animation coutns and rates
models/players/visor/animation.cfg, etc
======================
*/
-static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci ) {
- char *text_p, *prev;
- int len;
- int i;
- char *token;
- float fps;
- int skip;
- char text[20000];
+static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci )
+{
+ char *text_p, *prev;
+ int len;
+ int i;
+ char *token;
+ float fps;
+ int skip;
+ char text[ 20000 ];
fileHandle_t f;
- animation_t *animations;
+ animation_t *animations;
animations = ci->animations;
// load the file
len = trap_FS_FOpenFile( filename, &f, FS_READ );
- if ( len <= 0 ) {
+ if( len <= 0 )
return qfalse;
- }
- if ( len >= sizeof( text ) - 1 ) {
+
+ if( len >= sizeof( text ) - 1 )
+ {
CG_Printf( "File %s too long\n", filename );
return qfalse;
}
+
trap_FS_Read( text, len, f );
- text[len] = 0;
+ text[ len ] = 0;
trap_FS_FCloseFile( f );
// parse the text
@@ -118,166 +122,184 @@ static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci )
ci->fixedtorso = qfalse;
// read optional parameters
- while ( 1 ) {
+ while( 1 )
+ {
prev = text_p; // so we can unget
token = COM_Parse( &text_p );
- if ( !token ) {
+
+ if( !token )
break;
- }
- if ( !Q_stricmp( token, "footsteps" ) ) {
+
+ if( !Q_stricmp( token, "footsteps" ) )
+ {
token = COM_Parse( &text_p );
- if ( !token ) {
+ if( !token )
break;
- }
- if ( !Q_stricmp( token, "default" ) || !Q_stricmp( token, "normal" ) ) {
+
+ if( !Q_stricmp( token, "default" ) || !Q_stricmp( token, "normal" ) )
ci->footsteps = FOOTSTEP_NORMAL;
- } else if ( !Q_stricmp( token, "boot" ) ) {
+ else if( !Q_stricmp( token, "boot" ) )
ci->footsteps = FOOTSTEP_BOOT;
- } else if ( !Q_stricmp( token, "flesh" ) ) {
+ else if( !Q_stricmp( token, "flesh" ) )
ci->footsteps = FOOTSTEP_FLESH;
- } else if ( !Q_stricmp( token, "mech" ) ) {
+ else if( !Q_stricmp( token, "mech" ) )
ci->footsteps = FOOTSTEP_MECH;
- } else if ( !Q_stricmp( token, "energy" ) ) {
+ else if( !Q_stricmp( token, "energy" ) )
ci->footsteps = FOOTSTEP_ENERGY;
- } else {
+ else
CG_Printf( "Bad footsteps parm in %s: %s\n", filename, token );
- }
+
continue;
- } else if ( !Q_stricmp( token, "headoffset" ) ) {
- for ( i = 0 ; i < 3 ; i++ ) {
+ }
+ else if( !Q_stricmp( token, "headoffset" ) )
+ {
+ for( i = 0 ; i < 3 ; i++ )
+ {
token = COM_Parse( &text_p );
- if ( !token ) {
+ if( !token )
break;
- }
- ci->headOffset[i] = atof( token );
+
+ ci->headOffset[ i ] = atof( token );
}
+
continue;
- } else if ( !Q_stricmp( token, "sex" ) ) {
+ }
+ else if( !Q_stricmp( token, "sex" ) )
+ {
token = COM_Parse( &text_p );
- if ( !token ) {
+
+ if( !token )
break;
- }
- if ( token[0] == 'f' || token[0] == 'F' ) {
+
+ if( token[ 0 ] == 'f' || token[ 0 ] == 'F' )
ci->gender = GENDER_FEMALE;
- } else if ( token[0] == 'n' || token[0] == 'N' ) {
+ else if( token[ 0 ] == 'n' || token[ 0 ] == 'N' )
ci->gender = GENDER_NEUTER;
- } else {
+ else
ci->gender = GENDER_MALE;
- }
+
continue;
- } else if ( !Q_stricmp( token, "fixedlegs" ) ) {
+ }
+ else if( !Q_stricmp( token, "fixedlegs" ) )
+ {
ci->fixedlegs = qtrue;
continue;
- } else if ( !Q_stricmp( token, "fixedtorso" ) ) {
+ }
+ else if( !Q_stricmp( token, "fixedtorso" ) )
+ {
ci->fixedtorso = qtrue;
continue;
}
// if it is a number, start parsing animations
- if ( token[0] >= '0' && token[0] <= '9' ) {
+ if( token[ 0 ] >= '0' && token[ 0 ] <= '9' )
+ {
text_p = prev; // unget the token
break;
}
+
Com_Printf( "unknown token '%s' is %s\n", token, filename );
}
// read information for each frame
- for ( i = 0 ; i < MAX_PLAYER_ANIMATIONS ; i++ ) {
-
+ for( i = 0; i < MAX_PLAYER_ANIMATIONS; i++ )
+ {
token = COM_Parse( &text_p );
- if ( !*token ) {
- if( i >= TORSO_GETFLAG && i <= TORSO_NEGATIVE ) {
- animations[i].firstFrame = animations[TORSO_GESTURE].firstFrame;
- animations[i].frameLerp = animations[TORSO_GESTURE].frameLerp;
- animations[i].initialLerp = animations[TORSO_GESTURE].initialLerp;
- animations[i].loopFrames = animations[TORSO_GESTURE].loopFrames;
- animations[i].numFrames = animations[TORSO_GESTURE].numFrames;
- animations[i].reversed = qfalse;
- animations[i].flipflop = qfalse;
+
+ if( !*token )
+ {
+ if( i >= TORSO_GETFLAG && i <= TORSO_NEGATIVE )
+ {
+ animations[ i ].firstFrame = animations[ TORSO_GESTURE ].firstFrame;
+ animations[ i ].frameLerp = animations[ TORSO_GESTURE ].frameLerp;
+ animations[ i ].initialLerp = animations[ TORSO_GESTURE ].initialLerp;
+ animations[ i ].loopFrames = animations[ TORSO_GESTURE ].loopFrames;
+ animations[ i ].numFrames = animations[ TORSO_GESTURE ].numFrames;
+ animations[ i ].reversed = qfalse;
+ animations[ i ].flipflop = qfalse;
continue;
}
+
break;
}
- animations[i].firstFrame = atoi( token );
+
+ animations[ i ].firstFrame = atoi( token );
+
// leg only frames are adjusted to not count the upper body only frames
- if ( i == LEGS_WALKCR ) {
- skip = animations[LEGS_WALKCR].firstFrame - animations[TORSO_GESTURE].firstFrame;
- }
- if ( i >= LEGS_WALKCR && i<TORSO_GETFLAG ) {
- animations[i].firstFrame -= skip;
- }
+ if( i == LEGS_WALKCR )
+ skip = animations[ LEGS_WALKCR ].firstFrame - animations[ TORSO_GESTURE ].firstFrame;
+
+ if( i >= LEGS_WALKCR && i<TORSO_GETFLAG )
+ animations[ i ].firstFrame -= skip;
token = COM_Parse( &text_p );
- if ( !*token ) {
+ if( !*token )
break;
- }
- animations[i].numFrames = atoi( token );
- animations[i].reversed = qfalse;
- animations[i].flipflop = qfalse;
+
+ animations[ i ].numFrames = atoi( token );
+ animations[ i ].reversed = qfalse;
+ animations[ i ].flipflop = qfalse;
+
// if numFrames is negative the animation is reversed
- if (animations[i].numFrames < 0) {
- animations[i].numFrames = -animations[i].numFrames;
- animations[i].reversed = qtrue;
+ if( animations[ i ].numFrames < 0 )
+ {
+ animations[ i ].numFrames = -animations[ i ].numFrames;
+ animations[ i ].reversed = qtrue;
}
token = COM_Parse( &text_p );
- if ( !*token ) {
+
+ if( !*token )
break;
- }
- animations[i].loopFrames = atoi( token );
+
+ animations[ i ].loopFrames = atoi( token );
token = COM_Parse( &text_p );
- if ( !*token ) {
+
+ if( !*token )
break;
- }
+
fps = atof( token );
- if ( fps == 0 ) {
+ if( fps == 0 )
fps = 1;
- }
- animations[i].frameLerp = 1000 / fps;
- animations[i].initialLerp = 1000 / fps;
+
+ animations[ i ].frameLerp = 1000 / fps;
+ animations[ i ].initialLerp = 1000 / fps;
}
- if ( i != MAX_PLAYER_ANIMATIONS ) {
+ if( i != MAX_PLAYER_ANIMATIONS )
+ {
CG_Printf( "Error parsing animation file: %s", filename );
return qfalse;
}
// crouch backward animation
- memcpy(&animations[LEGS_BACKCR], &animations[LEGS_WALKCR], sizeof(animation_t));
- animations[LEGS_BACKCR].reversed = qtrue;
+ memcpy( &animations[ LEGS_BACKCR ], &animations[ LEGS_WALKCR ], sizeof( animation_t ) );
+ animations[ LEGS_BACKCR ].reversed = qtrue;
// walk backward animation
- memcpy(&animations[LEGS_BACKWALK], &animations[LEGS_WALK], sizeof(animation_t));
- animations[LEGS_BACKWALK].reversed = qtrue;
+ memcpy( &animations[ LEGS_BACKWALK ], &animations[ LEGS_WALK ], sizeof( animation_t ) );
+ animations[ LEGS_BACKWALK ].reversed = qtrue;
// flag moving fast
- animations[FLAG_RUN].firstFrame = 0;
- animations[FLAG_RUN].numFrames = 16;
- animations[FLAG_RUN].loopFrames = 16;
- animations[FLAG_RUN].frameLerp = 1000 / 15;
- animations[FLAG_RUN].initialLerp = 1000 / 15;
- animations[FLAG_RUN].reversed = qfalse;
+ animations[ FLAG_RUN ].firstFrame = 0;
+ animations[ FLAG_RUN ].numFrames = 16;
+ animations[ FLAG_RUN ].loopFrames = 16;
+ animations[ FLAG_RUN ].frameLerp = 1000 / 15;
+ animations[ FLAG_RUN ].initialLerp = 1000 / 15;
+ animations[ FLAG_RUN ].reversed = qfalse;
// flag not moving or moving slowly
- animations[FLAG_STAND].firstFrame = 16;
- animations[FLAG_STAND].numFrames = 5;
- animations[FLAG_STAND].loopFrames = 0;
- animations[FLAG_STAND].frameLerp = 1000 / 20;
- animations[FLAG_STAND].initialLerp = 1000 / 20;
- animations[FLAG_STAND].reversed = qfalse;
+ animations[ FLAG_STAND ].firstFrame = 16;
+ animations[ FLAG_STAND ].numFrames = 5;
+ animations[ FLAG_STAND ].loopFrames = 0;
+ animations[ FLAG_STAND ].frameLerp = 1000 / 20;
+ animations[ FLAG_STAND ].initialLerp = 1000 / 20;
+ animations[ FLAG_STAND ].reversed = qfalse;
// flag speeding up
- animations[FLAG_STAND2RUN].firstFrame = 16;
- animations[FLAG_STAND2RUN].numFrames = 5;
- animations[FLAG_STAND2RUN].loopFrames = 1;
- animations[FLAG_STAND2RUN].frameLerp = 1000 / 15;
- animations[FLAG_STAND2RUN].initialLerp = 1000 / 15;
- animations[FLAG_STAND2RUN].reversed = qtrue;
- //
- // new anims changes
- //
-// animations[TORSO_GETFLAG].flipflop = qtrue;
-// animations[TORSO_GUARDBASE].flipflop = qtrue;
-// animations[TORSO_PATROL].flipflop = qtrue;
-// animations[TORSO_AFFIRMATIVE].flipflop = qtrue;
-// animations[TORSO_NEGATIVE].flipflop = qtrue;
- //
+ animations[ FLAG_STAND2RUN ].firstFrame = 16;
+ animations[ FLAG_STAND2RUN ].numFrames = 5;
+ animations[ FLAG_STAND2RUN ].loopFrames = 1;
+ animations[ FLAG_STAND2RUN ].frameLerp = 1000 / 15;
+ animations[ FLAG_STAND2RUN ].initialLerp = 1000 / 15;
+ animations[ FLAG_STAND2RUN ].reversed = qtrue;
+
return qtrue;
}
@@ -286,30 +308,27 @@ static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci )
CG_RegisterClientSkin
==========================
*/
-static qboolean CG_RegisterClientSkin( clientInfo_t *ci, const char *modelName, const char *skinName ) {
- char filename[MAX_QPATH];
+static qboolean CG_RegisterClientSkin( clientInfo_t *ci, const char *modelName, const char *skinName )
+{
+ char filename[ MAX_QPATH ];
Com_sprintf( filename, sizeof( filename ), "models/players/%s/lower_%s.skin", modelName, skinName );
ci->legsSkin = trap_R_RegisterSkin( filename );
- if (!ci->legsSkin) {
+ if( !ci->legsSkin )
Com_Printf( "Leg skin load failure: %s\n", filename );
- }
Com_sprintf( filename, sizeof( filename ), "models/players/%s/upper_%s.skin", modelName, skinName );
ci->torsoSkin = trap_R_RegisterSkin( filename );
- if (!ci->torsoSkin) {
+ if( !ci->torsoSkin )
Com_Printf( "Torso skin load failure: %s\n", filename );
- }
Com_sprintf( filename, sizeof( filename ), "models/players/%s/head_%s.skin", modelName, skinName );
ci->headSkin = trap_R_RegisterSkin( filename );
- if (!ci->headSkin) {
+ if( !ci->headSkin )
Com_Printf( "Head skin load failure: %s\n", filename );
- }
- if ( !ci->legsSkin || !ci->torsoSkin || !ci->headSkin ) {
+ if( !ci->legsSkin || !ci->torsoSkin || !ci->headSkin )
return qfalse;
- }
return qtrue;
}
@@ -319,48 +338,55 @@ static qboolean CG_RegisterClientSkin( clientInfo_t *ci, const char *modelName,
CG_RegisterClientModelname
==========================
*/
-static qboolean CG_RegisterClientModelname( clientInfo_t *ci, const char *modelName, const char *skinName ) {
- char filename[MAX_QPATH*2];
+static qboolean CG_RegisterClientModelname( clientInfo_t *ci, const char *modelName, const char *skinName )
+{
+ char filename[ MAX_QPATH * 2 ];
// load cmodels before models so filecache works
Com_sprintf( filename, sizeof( filename ), "models/players/%s/lower.md3", modelName );
ci->legsModel = trap_R_RegisterModel( filename );
- if ( !ci->legsModel ) {
+ if( !ci->legsModel )
+ {
Com_Printf( "Failed to load model file %s\n", filename );
return qfalse;
}
Com_sprintf( filename, sizeof( filename ), "models/players/%s/upper.md3", modelName );
ci->torsoModel = trap_R_RegisterModel( filename );
- if ( !ci->torsoModel ) {
+ if( !ci->torsoModel )
+ {
Com_Printf( "Failed to load model file %s\n", filename );
return qfalse;
}
Com_sprintf( filename, sizeof( filename ), "models/players/%s/head.md3", modelName );
ci->headModel = trap_R_RegisterModel( filename );
- if ( !ci->headModel ) {
+ if( !ci->headModel )
+ {
Com_Printf( "Failed to load model file %s\n", filename );
return qfalse;
}
// if any skins failed to load, return failure
- if ( !CG_RegisterClientSkin( ci, modelName, skinName ) ) {
+ if( !CG_RegisterClientSkin( ci, modelName, skinName ) )
+ {
Com_Printf( "Failed to load skin file: %s : %s\n", modelName, skinName );
return qfalse;
}
// load the animations
Com_sprintf( filename, sizeof( filename ), "models/players/%s/animation.cfg", modelName );
- if ( !CG_ParseAnimationFile( filename, ci ) ) {
+ if( !CG_ParseAnimationFile( filename, ci ) )
+ {
Com_Printf( "Failed to load animation file %s\n", filename );
return qfalse;
}
Com_sprintf( filename, sizeof( filename ), "models/players/%s/icon_%s.tga", modelName, skinName );
ci->modelIcon = trap_R_RegisterShaderNoMip( filename );
- if ( !ci->modelIcon ) {
+ if( !ci->modelIcon )
+ {
Com_Printf( "Failed to load icon file: %s\n", filename );
return qfalse;
}
@@ -373,27 +399,28 @@ static qboolean CG_RegisterClientModelname( clientInfo_t *ci, const char *modelN
CG_ColorFromString
====================
*/
-static void CG_ColorFromString( const char *v, vec3_t color ) {
+static void CG_ColorFromString( const char *v, vec3_t color )
+{
int val;
VectorClear( color );
val = atoi( v );
- if ( val < 1 || val > 7 ) {
+ if( val < 1 || val > 7 )
+ {
VectorSet( color, 1, 1, 1 );
return;
}
- if ( val & 1 ) {
- color[2] = 1.0f;
- }
- if ( val & 2 ) {
- color[1] = 1.0f;
- }
- if ( val & 4 ) {
- color[0] = 1.0f;
- }
+ if( val & 1 )
+ color[ 2 ] = 1.0f;
+
+ if( val & 2 )
+ color[ 1 ] = 1.0f;
+
+ if( val & 4 )
+ color[ 0 ] = 1.0f;
}
@@ -405,16 +432,17 @@ 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( clientInfo_t *ci )
+{
const char *dir, *fallback;
- int i;
+ int i;
const char *s;
- int clientNum;
+ int clientNum;
- if ( !CG_RegisterClientModelname( ci, ci->modelName, ci->skinName ) ) {
- if ( cg_buildScript.integer ) {
+ if( !CG_RegisterClientModelname( ci, ci->modelName, ci->skinName ) )
+ {
+ if( cg_buildScript.integer )
CG_Error( "CG_RegisterClientModelname( %s, %s ) failed", ci->modelName, ci->skinName );
- }
// fall back
if( !CG_RegisterClientModelname( ci, DEFAULT_MODEL, "default" ) )
@@ -425,15 +453,16 @@ static void CG_LoadClientInfo( clientInfo_t *ci ) {
dir = ci->modelName;
fallback = DEFAULT_MODEL;
- for ( i = 0 ; i < MAX_CUSTOM_SOUNDS ; i++ ) {
- s = cg_customSoundNames[i];
- if ( !s ) {
+ for( i = 0 ; i < MAX_CUSTOM_SOUNDS ; i++ )
+ {
+ s = cg_customSoundNames[ i ];
+
+ if( !s )
break;
- }
- ci->sounds[i] = trap_S_RegisterSound( va("sound/player/%s/%s", dir, s + 1), qfalse );
- if ( !ci->sounds[i] ) {
- ci->sounds[i] = trap_S_RegisterSound( va("sound/player/%s/%s", fallback, s + 1), qfalse );
- }
+
+ ci->sounds[ i ] = trap_S_RegisterSound( va( "sound/player/%s/%s", dir, s + 1 ), qfalse );
+ if( !ci->sounds[ i ] )
+ ci->sounds[ i ] = trap_S_RegisterSound( va( "sound/player/%s/%s", fallback, s + 1 ), qfalse );
}
ci->deferred = qfalse;
@@ -443,11 +472,11 @@ static void CG_LoadClientInfo( clientInfo_t *ci ) {
if( clientNum <= MAX_CLIENTS )
{
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 ) {
- CG_ResetPlayerEntity( &cg_entities[i] );
- }
+ for( i = 0; i < MAX_GENTITIES; i++ )
+ {
+ if( cg_entities[ i ].currentState.clientNum == clientNum &&
+ cg_entities[ i ].currentState.eType == ET_PLAYER )
+ CG_ResetPlayerEntity( &cg_entities[ i ] );
}
}
}
@@ -457,7 +486,8 @@ static void CG_LoadClientInfo( clientInfo_t *ci ) {
CG_CopyClientInfoModel
======================
*/
-static void CG_CopyClientInfoModel( clientInfo_t *from, clientInfo_t *to ) {
+static void CG_CopyClientInfoModel( clientInfo_t *from, clientInfo_t *to )
+{
VectorCopy( from->headOffset, to->headOffset );
to->footsteps = from->footsteps;
to->gender = from->gender;
@@ -480,24 +510,27 @@ static void CG_CopyClientInfoModel( clientInfo_t *from, clientInfo_t *to ) {
CG_GetCorpseNum
======================
*/
-static int CG_GetCorpseNum( int pclass ) {
+static int CG_GetCorpseNum( int pclass )
+{
int i;
clientInfo_t *match;
char *modelName;
modelName = BG_FindModelNameForClass( pclass );
- for ( i = PCL_NONE + 1 ; i < PCL_NUM_CLASSES; i++ )
+ for( i = PCL_NONE + 1; i < PCL_NUM_CLASSES; i++ )
{
match = &cgs.corpseinfo[ i ];
- if ( !match->infoValid )
+
+ if( !match->infoValid )
continue;
- if ( match->deferred )
+ if( match->deferred )
continue;
- if ( !Q_stricmp( modelName, match->modelName )
- /*&& !Q_stricmp( modelName, match->skinName )*/ ) {
+ if( !Q_stricmp( modelName, match->modelName )
+ /*&& !Q_stricmp( modelName, match->skinName )*/ )
+ {
// this clientinfo is identical, so use it's handles
return i;
}
@@ -513,22 +546,24 @@ static int CG_GetCorpseNum( int pclass ) {
CG_ScanForExistingClientInfo
======================
*/
-static qboolean CG_ScanForExistingClientInfo( clientInfo_t *ci ) {
+static qboolean CG_ScanForExistingClientInfo( clientInfo_t *ci )
+{
int i;
clientInfo_t *match;
- for ( i = 0 ; i < cgs.maxclients ; i++ ) {
+ for( i = 0 ; i < cgs.maxclients ; i++ )
+ {
match = &cgs.clientinfo[ i ];
- if ( !match->infoValid ) {
+ if( !match->infoValid )
continue;
- }
- if ( match->deferred ) {
+
+ if( match->deferred )
continue;
- }
- if ( !Q_stricmp( ci->modelName, match->modelName )
- && !Q_stricmp( ci->skinName, match->skinName ) ) {
- // this clientinfo is identical, so use it's handles
+ if( !Q_stricmp( ci->modelName, match->modelName ) &&
+ !Q_stricmp( ci->skinName, match->skinName ) )
+ {
+ // this clientinfo is identical, so use it's handles
ci->deferred = qfalse;
CG_CopyClientInfoModel( match, ci );
@@ -549,16 +584,17 @@ 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 ) {
- int i;
+static void CG_SetDeferredClientInfo( clientInfo_t *ci )
+{
+ int i;
clientInfo_t *match;
// find the first valid clientinfo and grab its stuff
- for ( i = 0 ; i < cgs.maxclients ; i++ ) {
+ for( i = 0; i < cgs.maxclients; i++ )
+ {
match = &cgs.clientinfo[ i ];
- if ( !match->infoValid ) {
+ if( !match->infoValid )
continue;
- }
ci->deferred = qtrue;
CG_CopyClientInfoModel( match, ci );
@@ -577,28 +613,28 @@ static void CG_SetDeferredClientInfo( clientInfo_t *ci ) {
CG_PrecacheClientInfo
======================
*/
-void CG_PrecacheClientInfo( int clientNum ) {
- clientInfo_t *ci;
- clientInfo_t newInfo;
- const char *configstring;
- const char *v;
- char *slash;
+void CG_PrecacheClientInfo( int clientNum )
+{
+ clientInfo_t *ci;
+ clientInfo_t newInfo;
+ const char *configstring;
+ const char *v;
+ char *slash;
ci = &cgs.corpseinfo[ clientNum ];
//CG_Printf( "%d %d\n", clientNum, (clientNum - MAX_CLIENTS ) );
configstring = CG_ConfigString( clientNum + CS_PRECACHES );
- if ( !configstring[0] ) {
+ if( !configstring[ 0 ] )
return; // player just left
- }
// build into a temp buffer so the defer checks can use
// the old value
memset( &newInfo, 0, sizeof( newInfo ) );
// isolate the player's name
- v = Info_ValueForKey(configstring, "n");
+ v = Info_ValueForKey( configstring, "n" );
Q_strncpyz( newInfo.name, v, sizeof( newInfo.name ) );
// colors
@@ -630,27 +666,30 @@ void CG_PrecacheClientInfo( int clientNum ) {
// team task
v = Info_ValueForKey( configstring, "tt" );
- newInfo.teamTask = atoi(v);
+ newInfo.teamTask = atoi( v );
// team leader
v = Info_ValueForKey( configstring, "tl" );
- newInfo.teamLeader = atoi(v);
+ newInfo.teamLeader = atoi( v );
v = Info_ValueForKey( configstring, "g_redteam" );
- Q_strncpyz(newInfo.redTeam, v, MAX_TEAMNAME);
+ Q_strncpyz( newInfo.redTeam, v, MAX_TEAMNAME );
v = Info_ValueForKey( configstring, "g_blueteam" );
- Q_strncpyz(newInfo.blueTeam, v, MAX_TEAMNAME);
+ Q_strncpyz( newInfo.blueTeam, v, MAX_TEAMNAME );
// model
v = Info_ValueForKey( configstring, "model" );
Q_strncpyz( newInfo.modelName, v, sizeof( newInfo.modelName ) );
slash = strchr( newInfo.modelName, '/' );
- if ( !slash ) {
+ if( !slash )
+ {
// modelName didn not include a skin name
Q_strncpyz( newInfo.skinName, "default", sizeof( newInfo.skinName ) );
- } else {
+ }
+ else
+ {
Q_strncpyz( newInfo.skinName, slash + 1, sizeof( newInfo.skinName ) );
// truncate modelName
*slash = 0;
@@ -663,10 +702,14 @@ void CG_PrecacheClientInfo( int clientNum ) {
Q_strncpyz( newInfo.headModelName, v, sizeof( newInfo.headModelName ) );
slash = strchr( newInfo.headModelName, '/' );
- if ( !slash ) {
+
+ if( !slash )
+ {
// modelName didn not include a skin name
Q_strncpyz( newInfo.headSkinName, "default", sizeof( newInfo.headSkinName ) );
- } else {
+ }
+ else
+ {
Q_strncpyz( newInfo.headSkinName, slash + 1, sizeof( newInfo.headSkinName ) );
// truncate modelName
*slash = 0;
@@ -684,17 +727,19 @@ void CG_PrecacheClientInfo( int clientNum ) {
CG_NewClientInfo
======================
*/
-void CG_NewClientInfo( int clientNum ) {
- clientInfo_t *ci;
- clientInfo_t newInfo;
- const char *configstring;
- const char *v;
- char *slash;
+void CG_NewClientInfo( int clientNum )
+{
+ clientInfo_t *ci;
+ clientInfo_t newInfo;
+ const char *configstring;
+ const char *v;
+ char *slash;
- ci = &cgs.clientinfo[clientNum];
+ ci = &cgs.clientinfo[ clientNum ];
configstring = CG_ConfigString( clientNum + CS_PLAYERS );
- if ( !configstring[0] ) {
+ if( !configstring[0] )
+ {
memset( ci, 0, sizeof( *ci ) );
return; // player just left
}
@@ -704,7 +749,7 @@ void CG_NewClientInfo( int clientNum ) {
memset( &newInfo, 0, sizeof( newInfo ) );
// isolate the player's name
- v = Info_ValueForKey(configstring, "n");
+ v = Info_ValueForKey( configstring, "n" );
Q_strncpyz( newInfo.name, v, sizeof( newInfo.name ) );
// colors
@@ -736,27 +781,31 @@ void CG_NewClientInfo( int clientNum ) {
// team task
v = Info_ValueForKey( configstring, "tt" );
- newInfo.teamTask = atoi(v);
+ newInfo.teamTask = atoi( v );
// team leader
v = Info_ValueForKey( configstring, "tl" );
- newInfo.teamLeader = atoi(v);
+ newInfo.teamLeader = atoi( v );
v = Info_ValueForKey( configstring, "g_redteam" );
- Q_strncpyz(newInfo.redTeam, v, MAX_TEAMNAME);
+ Q_strncpyz( newInfo.redTeam, v, MAX_TEAMNAME );
v = Info_ValueForKey( configstring, "g_blueteam" );
- Q_strncpyz(newInfo.blueTeam, v, MAX_TEAMNAME);
+ Q_strncpyz( newInfo.blueTeam, v, MAX_TEAMNAME );
// model
v = Info_ValueForKey( configstring, "model" );
Q_strncpyz( newInfo.modelName, v, sizeof( newInfo.modelName ) );
slash = strchr( newInfo.modelName, '/' );
- if ( !slash ) {
+
+ if( !slash )
+ {
// modelName didn not include a skin name
Q_strncpyz( newInfo.skinName, "default", sizeof( newInfo.skinName ) );
- } else {
+ }
+ else
+ {
Q_strncpyz( newInfo.skinName, slash + 1, sizeof( newInfo.skinName ) );
// truncate modelName
*slash = 0;
@@ -769,10 +818,14 @@ void CG_NewClientInfo( int clientNum ) {
Q_strncpyz( newInfo.headModelName, v, sizeof( newInfo.headModelName ) );
slash = strchr( newInfo.headModelName, '/' );
- if ( !slash ) {
+
+ if( !slash )
+ {
// modelName didn not include a skin name
Q_strncpyz( newInfo.headSkinName, "default", sizeof( newInfo.headSkinName ) );
- } else {
+ }
+ else
+ {
Q_strncpyz( newInfo.headSkinName, slash + 1, sizeof( newInfo.headSkinName ) );
// truncate modelName
*slash = 0;
@@ -780,18 +833,18 @@ void CG_NewClientInfo( int clientNum ) {
// scan for an existing clientinfo that matches this modelname
// so we can avoid loading checks if possible
- if ( !CG_ScanForExistingClientInfo( &newInfo ) ) {
+ if( !CG_ScanForExistingClientInfo( &newInfo ) )
+ {
qboolean forceDefer;
- forceDefer = trap_MemoryRemaining() < 4000000;
+ forceDefer = trap_MemoryRemaining( ) < 4000000;
// if we are defering loads, just have it pick the first valid
//TA: we should only defer models when ABSOLUTELY TOTALLY necessary since models are precached
- if ( forceDefer ) //|| ( cg_deferPlayers.integer && !cg_buildScript.integer && !cg.loading ) )
+ if( forceDefer )
{
// keep whatever they had if it won't violate team skins
- if ( ci->infoValid &&
- ( !Q_stricmp( newInfo.skinName, ci->skinName ) ) )
+ if ( ci->infoValid && ( !Q_stricmp( newInfo.skinName, ci->skinName ) ) )
{
CG_CopyClientInfoModel( ci, &newInfo );
newInfo.deferred = qtrue;
@@ -803,16 +856,14 @@ void CG_NewClientInfo( int clientNum ) {
}
// if we are low on memory, leave them with this model
- if ( forceDefer )
+ if( forceDefer )
{
CG_Printf( "Memory is low. Using deferred model.\n" );
newInfo.deferred = qfalse;
}
}
else
- {
CG_LoadClientInfo( &newInfo );
- }
}
// replace whatever was there with the new one
@@ -831,21 +882,25 @@ and the scoreboard is up
so deferred players can be loaded
======================
*/
-void CG_LoadDeferredPlayers( void ) {
- int i;
+void CG_LoadDeferredPlayers( void )
+{
+ int i;
clientInfo_t *ci;
// scan for a deferred player to load
- for ( i = 0, ci = cgs.clientinfo ; i < cgs.maxclients ; i++, ci++ ) {
- if ( ci->infoValid && ci->deferred ) {
+ for( i = 0, ci = cgs.clientinfo; i < cgs.maxclients; i++, ci++ )
+ {
+ if( ci->infoValid && ci->deferred )
+ {
// if we are low on memory, leave it deferred
- if ( trap_MemoryRemaining() < 4000000 ) {
+ if( trap_MemoryRemaining( ) < 4000000 )
+ {
CG_Printf( "Memory is low. Using deferred model.\n" );
ci->deferred = qfalse;
continue;
}
+
CG_LoadClientInfo( ci );
-// break;
}
}
}
@@ -866,24 +921,23 @@ CG_SetLerpFrameAnimation
may include ANIM_TOGGLEBIT
===============
*/
-static void CG_SetLerpFrameAnimation( clientInfo_t *ci, lerpFrame_t *lf, int newAnimation ) {
+static void CG_SetLerpFrameAnimation( clientInfo_t *ci, lerpFrame_t *lf, int newAnimation )
+{
animation_t *anim;
lf->animationNumber = newAnimation;
newAnimation &= ~ANIM_TOGGLEBIT;
- if ( newAnimation < 0 || newAnimation >= MAX_PLAYER_TOTALANIMATIONS ) {
+ if( newAnimation < 0 || newAnimation >= MAX_PLAYER_TOTALANIMATIONS )
CG_Error( "Bad animation number: %i", newAnimation );
- }
anim = &ci->animations[ newAnimation ];
lf->animation = anim;
lf->animationTime = lf->frameTime + anim->initialLerp;
- if ( cg_debugAnim.integer ) {
+ if( cg_debugAnim.integer )
CG_Printf( "Anim: %i\n", newAnimation );
- }
}
/*
@@ -894,85 +948,92 @@ Sets cg.snap, cg.oldFrame, and cg.backlerp
cg.time should be between oldFrameTime and frameTime after exit
===============
*/
-static void CG_RunLerpFrame( clientInfo_t *ci, lerpFrame_t *lf, int newAnimation, float speedScale ) {
- int f, numFrames;
+static void CG_RunLerpFrame( clientInfo_t *ci, lerpFrame_t *lf, int newAnimation, float speedScale )
+{
+ int f, numFrames;
animation_t *anim;
// debugging tool to get no animations
- if ( cg_animSpeed.integer == 0 ) {
+ if( cg_animSpeed.integer == 0 )
+ {
lf->oldFrame = lf->frame = lf->backlerp = 0;
return;
}
// see if the animation sequence is switching
- if ( newAnimation != lf->animationNumber || !lf->animation ) {
+ if( newAnimation != lf->animationNumber || !lf->animation )
+ {
CG_SetLerpFrameAnimation( ci, lf, newAnimation );
}
// if we have passed the current frame, move it to
// oldFrame and calculate a new frame
- if ( cg.time >= lf->frameTime ) {
+ if( cg.time >= lf->frameTime )
+ {
lf->oldFrame = lf->frame;
lf->oldFrameTime = lf->frameTime;
// get the next frame based on the animation
anim = lf->animation;
- if ( !anim->frameLerp ) {
+ if( !anim->frameLerp )
return; // shouldn't happen
- }
- if ( cg.time < lf->animationTime ) {
+
+ if( cg.time < lf->animationTime )
lf->frameTime = lf->animationTime; // initial lerp
- } else {
+ else
lf->frameTime = lf->oldFrameTime + anim->frameLerp;
- }
+
f = ( lf->frameTime - lf->animationTime ) / anim->frameLerp;
f *= speedScale; // adjust for haste, etc
numFrames = anim->numFrames;
- if (anim->flipflop) {
+
+ if( anim->flipflop )
numFrames *= 2;
- }
- if ( f >= numFrames ) {
+
+ if( f >= numFrames )
+ {
f -= numFrames;
- if ( anim->loopFrames ) {
+ if( anim->loopFrames )
+ {
f %= anim->loopFrames;
f += anim->numFrames - anim->loopFrames;
- } else {
+ }
+ else
+ {
f = numFrames - 1;
// the animation is stuck at the end, so it
// can immediately transition to another sequence
lf->frameTime = cg.time;
}
}
- if ( anim->reversed ) {
+
+ if( anim->reversed )
lf->frame = anim->firstFrame + anim->numFrames - 1 - f;
- }
- else if (anim->flipflop && f>=anim->numFrames) {
- lf->frame = anim->firstFrame + anim->numFrames - 1 - (f%anim->numFrames);
- }
- else {
+ else if( anim->flipflop && f>=anim->numFrames )
+ lf->frame = anim->firstFrame + anim->numFrames - 1 - ( f % anim->numFrames );
+ else
lf->frame = anim->firstFrame + f;
- }
- if ( cg.time > lf->frameTime ) {
+
+ if( cg.time > lf->frameTime )
+ {
lf->frameTime = cg.time;
- if ( cg_debugAnim.integer ) {
- CG_Printf( "Clamp lf->frameTime\n");
- }
+
+ if( cg_debugAnim.integer )
+ CG_Printf( "Clamp lf->frameTime\n" );
}
}
- if ( lf->frameTime > cg.time + 200 ) {
+ if( lf->frameTime > cg.time + 200 )
lf->frameTime = cg.time;
- }
- if ( lf->oldFrameTime > cg.time ) {
+ if( lf->oldFrameTime > cg.time )
lf->oldFrameTime = cg.time;
- }
+
// calculate current lerp value
- if ( lf->frameTime == lf->oldFrameTime ) {
+ if( lf->frameTime == lf->oldFrameTime )
lf->backlerp = 0;
- } else {
+ else
lf->backlerp = 1.0 - (float)( cg.time - lf->oldFrameTime ) / ( lf->frameTime - lf->oldFrameTime );
- }
}
@@ -981,7 +1042,8 @@ static void CG_RunLerpFrame( clientInfo_t *ci, lerpFrame_t *lf, int newAnimation
CG_ClearLerpFrame
===============
*/
-static void CG_ClearLerpFrame( clientInfo_t *ci, lerpFrame_t *lf, int animationNumber ) {
+static void CG_ClearLerpFrame( clientInfo_t *ci, lerpFrame_t *lf, int animationNumber )
+{
lf->frameTime = lf->oldFrameTime = cg.time;
CG_SetLerpFrameAnimation( ci, lf, animationNumber );
lf->oldFrame = lf->frame = lf->animation->firstFrame;
@@ -994,32 +1056,27 @@ CG_PlayerAnimation
===============
*/
static void CG_PlayerAnimation( centity_t *cent, int *legsOld, int *legs, float *legsBackLerp,
- int *torsoOld, int *torso, float *torsoBackLerp ) {
+ int *torsoOld, int *torso, float *torsoBackLerp )
+{
clientInfo_t *ci;
- int clientNum;
- float speedScale;
+ int clientNum;
+ float speedScale = 1.0f;
clientNum = cent->currentState.clientNum;
- if ( cg_noPlayerAnims.integer ) {
+ if( cg_noPlayerAnims.integer )
+ {
*legsOld = *legs = *torsoOld = *torso = 0;
return;
}
- /*if ( cent->currentState.powerups & ( 1 << PW_HASTE ) ) {
- speedScale = 1.5;
- } else*/ {
- speedScale = 1;
- }
-
ci = &cgs.clientinfo[ clientNum ];
// do the shuffle turn frames locally
- if ( cent->pe.legs.yawing && ( cent->currentState.legsAnim & ~ANIM_TOGGLEBIT ) == LEGS_IDLE ) {
+ if( cent->pe.legs.yawing && ( cent->currentState.legsAnim & ~ANIM_TOGGLEBIT ) == LEGS_IDLE )
CG_RunLerpFrame( ci, &cent->pe.legs, LEGS_TURN, speedScale );
- } else {
+ else
CG_RunLerpFrame( ci, &cent->pe.legs, cent->currentState.legsAnim, speedScale );
- }
*legsOld = cent->pe.legs.oldFrame;
*legs = cent->pe.legs.frame;
@@ -1046,46 +1103,54 @@ CG_SwingAngles
==================
*/
static void CG_SwingAngles( float destination, float swingTolerance, float clampTolerance,
- float speed, float *angle, qboolean *swinging ) {
+ float speed, float *angle, qboolean *swinging )
+{
float swing;
float move;
float scale;
- if ( !*swinging ) {
+ if( !*swinging )
+ {
// see if a swing should be started
swing = AngleSubtract( *angle, destination );
- if ( swing > swingTolerance || swing < -swingTolerance ) {
+
+ if( swing > swingTolerance || swing < -swingTolerance )
*swinging = qtrue;
- }
}
- if ( !*swinging ) {
+ if( !*swinging )
return;
- }
// modify the speed depending on the delta
// so it doesn't seem so linear
swing = AngleSubtract( destination, *angle );
scale = fabs( swing );
- if ( scale < swingTolerance * 0.5 ) {
+
+ if( scale < swingTolerance * 0.5 )
scale = 0.5;
- } else if ( scale < swingTolerance ) {
+ else if( scale < swingTolerance )
scale = 1.0;
- } else {
+ else
scale = 2.0;
- }
// swing towards the destination angle
- if ( swing >= 0 ) {
+ if( swing >= 0 )
+ {
move = cg.frametime * scale * speed;
- if ( move >= swing ) {
+
+ if( move >= swing )
+ {
move = swing;
*swinging = qfalse;
}
*angle = AngleMod( *angle + move );
- } else if ( swing < 0 ) {
+ }
+ else if( swing < 0 )
+ {
move = cg.frametime * scale * -speed;
- if ( move <= swing ) {
+
+ if( move <= swing )
+ {
move = swing;
*swinging = qfalse;
}
@@ -1094,11 +1159,10 @@ static void CG_SwingAngles( float destination, float swingTolerance, float clamp
// clamp to no more than tolerance
swing = AngleSubtract( destination, *angle );
- if ( swing > clampTolerance ) {
- *angle = AngleMod( destination - (clampTolerance - 1) );
- } else if ( swing < -clampTolerance ) {
- *angle = AngleMod( destination + (clampTolerance - 1) );
- }
+ if( swing > clampTolerance )
+ *angle = AngleMod( destination - ( clampTolerance - 1 ) );
+ else if( swing < -clampTolerance )
+ *angle = AngleMod( destination + ( clampTolerance - 1 ) );
}
/*
@@ -1106,22 +1170,22 @@ static void CG_SwingAngles( float destination, float swingTolerance, float clamp
CG_AddPainTwitch
=================
*/
-static void CG_AddPainTwitch( centity_t *cent, vec3_t torsoAngles ) {
+static void CG_AddPainTwitch( centity_t *cent, vec3_t torsoAngles )
+{
int t;
float f;
t = cg.time - cent->pe.painTime;
- if ( t >= PAIN_TWITCH_TIME ) {
+
+ if( t >= PAIN_TWITCH_TIME )
return;
- }
f = 1.0 - (float)t / PAIN_TWITCH_TIME;
- if ( cent->pe.painDirection ) {
- torsoAngles[ROLL] += 20 * f;
- } else {
- torsoAngles[ROLL] -= 20 * f;
- }
+ if( cent->pe.painDirection )
+ torsoAngles[ ROLL ] += 20 * f;
+ else
+ torsoAngles[ ROLL ] -= 20 * f;
}
@@ -1139,26 +1203,28 @@ Handles seperate torso motion
if < 45 degrees, also show in torso
===============
*/
-static void CG_PlayerAngles( centity_t *cent, vec3_t srcAngles, vec3_t legs[3], vec3_t torso[3], vec3_t head[3] )
+static void CG_PlayerAngles( centity_t *cent, vec3_t srcAngles,
+ vec3_t legs[ 3 ], vec3_t torso[ 3 ], vec3_t head[ 3 ] )
{
- vec3_t legsAngles, torsoAngles, headAngles;
- float dest;
- static int movementOffsets[8] = { 0, 22, 45, -22, 0, 22, -45, -22 };
- vec3_t velocity;
- float speed;
- int dir, clientNum;
+ vec3_t legsAngles, torsoAngles, headAngles;
+ float dest;
+ static int movementOffsets[ 8 ] = { 0, 22, 45, -22, 0, 22, -45, -22 };
+ vec3_t velocity;
+ float speed;
+ int dir, clientNum;
clientInfo_t *ci;
VectorCopy( srcAngles, headAngles );
- headAngles[YAW] = AngleMod( headAngles[YAW] );
+ headAngles[ YAW ] = AngleMod( headAngles[ YAW ] );
VectorClear( legsAngles );
VectorClear( torsoAngles );
// --------- yaw -------------
// allow yaw to drift a bit
- if ( ( cent->currentState.legsAnim & ~ANIM_TOGGLEBIT ) != LEGS_IDLE
- || ( cent->currentState.torsoAnim & ~ANIM_TOGGLEBIT ) != TORSO_STAND ) {
+ if( ( cent->currentState.legsAnim & ~ANIM_TOGGLEBIT ) != LEGS_IDLE ||
+ ( cent->currentState.torsoAnim & ~ANIM_TOGGLEBIT ) != TORSO_STAND )
+ {
// if not standing still, always point all in the same direction
cent->pe.torso.yawing = qtrue; // always center
cent->pe.torso.pitching = qtrue; // always center
@@ -1166,56 +1232,60 @@ static void CG_PlayerAngles( centity_t *cent, vec3_t srcAngles, vec3_t legs[3],
}
// adjust legs for movement dir
- if ( cent->currentState.eFlags & EF_DEAD ) {
+ if( cent->currentState.eFlags & EF_DEAD )
+ {
// don't let dead bodies twitch
dir = 0;
- } else {
+ }
+ else
+ {
//TA: did use angles2.. now uses time2.. looks a bit funny but time2 isn't used othwise
dir = cent->currentState.time2;
- if ( dir < 0 || dir > 7 ) {
+ if( dir < 0 || dir > 7 )
CG_Error( "Bad player movement angle" );
- }
}
- legsAngles[YAW] = headAngles[YAW] + movementOffsets[ dir ];
- torsoAngles[YAW] = headAngles[YAW] + 0.25 * movementOffsets[ dir ];
+
+ legsAngles[ YAW ] = headAngles[ YAW ] + movementOffsets[ dir ];
+ torsoAngles[ YAW ] = headAngles[ YAW ] + 0.25 * movementOffsets[ dir ];
// torso
if( cent->currentState.eFlags & EF_DEAD )
{
- CG_SwingAngles( torsoAngles[YAW], 0, 0, cg_swingSpeed.value,
+ CG_SwingAngles( torsoAngles[ YAW ], 0, 0, cg_swingSpeed.value,
&cent->pe.torso.yawAngle, &cent->pe.torso.yawing );
- CG_SwingAngles( legsAngles[YAW], 0, 0, cg_swingSpeed.value,
+ CG_SwingAngles( legsAngles[ YAW ], 0, 0, cg_swingSpeed.value,
&cent->pe.legs.yawAngle, &cent->pe.legs.yawing );
}
else
{
- CG_SwingAngles( torsoAngles[YAW], 25, 90, cg_swingSpeed.value,
+ CG_SwingAngles( torsoAngles[ YAW ], 25, 90, cg_swingSpeed.value,
&cent->pe.torso.yawAngle, &cent->pe.torso.yawing );
- CG_SwingAngles( legsAngles[YAW], 40, 90, cg_swingSpeed.value,
+ CG_SwingAngles( legsAngles[ YAW ], 40, 90, cg_swingSpeed.value,
&cent->pe.legs.yawAngle, &cent->pe.legs.yawing );
}
- torsoAngles[YAW] = cent->pe.torso.yawAngle;
- legsAngles[YAW] = cent->pe.legs.yawAngle;
+ torsoAngles[ YAW ] = cent->pe.torso.yawAngle;
+ legsAngles[ YAW ] = cent->pe.legs.yawAngle;
// --------- pitch -------------
// only show a fraction of the pitch angle in the torso
- if ( headAngles[PITCH] > 180 ) {
- dest = (-360 + headAngles[PITCH]) * 0.75f;
- } else {
- dest = headAngles[PITCH] * 0.75f;
- }
+ if( headAngles[ PITCH ] > 180 )
+ dest = ( -360 + headAngles[ PITCH ] ) * 0.75f;
+ else
+ dest = headAngles[ PITCH ] * 0.75f;
+
CG_SwingAngles( dest, 15, 30, 0.1f, &cent->pe.torso.pitchAngle, &cent->pe.torso.pitching );
- torsoAngles[PITCH] = cent->pe.torso.pitchAngle;
+ torsoAngles[ PITCH ] = cent->pe.torso.pitchAngle;
//
clientNum = cent->currentState.clientNum;
- if ( clientNum >= 0 && clientNum < MAX_CLIENTS ) {
+
+ if( clientNum >= 0 && clientNum < MAX_CLIENTS )
+ {
ci = &cgs.clientinfo[ clientNum ];
- if ( ci->fixedtorso ) {
- torsoAngles[PITCH] = 0.0f;
- }
+ if( ci->fixedtorso )
+ torsoAngles[ PITCH ] = 0.0f;
}
// --------- roll -------------
@@ -1224,28 +1294,34 @@ static void CG_PlayerAngles( centity_t *cent, vec3_t srcAngles, vec3_t legs[3],
// lean towards the direction of travel
VectorCopy( cent->currentState.pos.trDelta, velocity );
speed = VectorNormalize( velocity );
- if ( speed ) {
- vec3_t axis[3];
- float side;
+
+ if( speed )
+ {
+ vec3_t axis[ 3 ];
+ float side;
speed *= 0.05f;
AnglesToAxis( legsAngles, axis );
- side = speed * DotProduct( velocity, axis[1] );
- legsAngles[ROLL] -= side;
+ side = speed * DotProduct( velocity, axis[ 1 ] );
+ legsAngles[ ROLL ] -= side;
- side = speed * DotProduct( velocity, axis[0] );
- legsAngles[PITCH] += side;
+ side = speed * DotProduct( velocity, axis[ 0 ] );
+ legsAngles[ PITCH ] += side;
}
//
clientNum = cent->currentState.clientNum;
- if ( clientNum >= 0 && clientNum < MAX_CLIENTS ) {
+
+ if( clientNum >= 0 && clientNum < MAX_CLIENTS )
+ {
ci = &cgs.clientinfo[ clientNum ];
- if ( ci->fixedlegs ) {
- legsAngles[YAW] = torsoAngles[YAW];
- legsAngles[PITCH] = 0.0f;
- legsAngles[ROLL] = 0.0f;
+
+ if( ci->fixedlegs )
+ {
+ legsAngles[ YAW ] = torsoAngles[ YAW ];
+ legsAngles[ PITCH ] = 0.0f;
+ legsAngles[ ROLL ] = 0.0f;
}
}
@@ -1263,70 +1339,6 @@ static void CG_PlayerAngles( centity_t *cent, vec3_t srcAngles, vec3_t legs[3],
//==========================================================================
-/*
-===============
-CG_HasteTrail
-===============
-*/
-static void CG_HasteTrail( centity_t *cent ) {
- localEntity_t *smoke;
- vec3_t origin;
- int anim;
-
- if ( cent->trailTime > cg.time ) {
- return;
- }
- anim = cent->pe.legs.animationNumber & ~ANIM_TOGGLEBIT;
- if ( anim != LEGS_RUN && anim != LEGS_BACK ) {
- return;
- }
-
- cent->trailTime += 100;
- if ( cent->trailTime < cg.time ) {
- cent->trailTime = cg.time;
- }
-
- VectorCopy( cent->lerpOrigin, origin );
- origin[2] -= 16;
-
- smoke = CG_SmokePuff( origin, vec3_origin,
- 8,
- 1, 1, 1, 1,
- 500,
- cg.time,
- 0,
- 0,
- cgs.media.hastePuffShader );
-
- // use the optimized local entity add
- smoke->leType = LE_SCALE_FADE;
-}
-
-/*
-===============
-CG_TrailItem
-===============
-*/
-static void CG_TrailItem( centity_t *cent, qhandle_t hModel ) {
- refEntity_t ent;
- vec3_t angles;
- vec3_t axis[3];
-
- VectorCopy( cent->lerpAngles, angles );
- angles[PITCH] = 0;
- angles[ROLL] = 0;
- AnglesToAxis( angles, axis );
-
- memset( &ent, 0, sizeof( ent ) );
- VectorMA( cent->lerpOrigin, -16, axis[0], ent.origin );
- ent.origin[2] += 16;
- angles[YAW] += 90;
- AnglesToAxis( angles, ent.axis );
-
- ent.hModel = hModel;
- trap_R_AddRefEntityToScene( &ent );
-}
-
#define JET_SPREAD 30.0f
#define JET_LIFETIME 1500
@@ -1404,37 +1416,6 @@ static void CG_PlayerUpgrades( centity_t *cent, refEntity_t *torso )
}
}
}
- /*powerups = cent->currentState.powerups;
- if ( !powerups ) {
- return;
- }
-
- // quad gives a dlight
- if ( powerups & ( 1 << PW_QUAD ) ) {
- trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 0.2, 0.2, 1 );
- }
-
- // flight plays a looped sound
- if ( powerups & ( 1 << PW_FLIGHT ) ) {
- trap_S_AddLoopingSound( cent->currentState.number, cent->lerpOrigin, vec3_origin, cgs.media.flightSound );
- }
-
- // redflag
- if ( powerups & ( 1 << PW_REDFLAG ) ) {
- CG_TrailItem( cent, cgs.media.redFlagModel );
- trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 1, 0.2, 0.2 );
- }
-
- // blueflag
- if ( powerups & ( 1 << PW_BLUEFLAG ) ) {
- CG_TrailItem( cent, cgs.media.blueFlagModel );
- trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 0.2, 0.2, 1 );
- }
-
- // haste leaves smoke trails
- if ( powerups & ( 1 << PW_HASTE ) ) {
- CG_HasteTrail( cent );
- }*/
}
@@ -1445,27 +1426,27 @@ CG_PlayerFloatSprite
Float a sprite over the player's head
===============
*/
-static void CG_PlayerFloatSprite( centity_t *cent, qhandle_t shader ) {
- int rf;
+static void CG_PlayerFloatSprite( centity_t *cent, qhandle_t shader )
+{
+ int rf;
refEntity_t ent;
- if ( cent->currentState.number == cg.snap->ps.clientNum && !cg.renderingThirdPerson ) {
+ if( cent->currentState.number == cg.snap->ps.clientNum && !cg.renderingThirdPerson )
rf = RF_THIRD_PERSON; // only show in mirrors
- } else {
+ else
rf = 0;
- }
memset( &ent, 0, sizeof( ent ) );
VectorCopy( cent->lerpOrigin, ent.origin );
- ent.origin[2] += 48;
+ ent.origin[ 2 ] += 48;
ent.reType = RT_SPRITE;
ent.customShader = shader;
ent.radius = 10;
ent.renderfx = rf;
- ent.shaderRGBA[0] = 255;
- ent.shaderRGBA[1] = 255;
- ent.shaderRGBA[2] = 255;
- ent.shaderRGBA[3] = 255;
+ ent.shaderRGBA[ 0 ] = 255;
+ ent.shaderRGBA[ 1 ] = 255;
+ ent.shaderRGBA[ 2 ] = 255;
+ ent.shaderRGBA[ 3 ] = 255;
trap_R_AddRefEntityToScene( &ent );
}
@@ -1503,38 +1484,31 @@ Returns the Z component of the surface being shadowed
===============
*/
#define SHADOW_DISTANCE 128
-static qboolean CG_PlayerShadow( centity_t *cent, float *shadowPlane ) {
- vec3_t end, mins = {-15, -15, 0}, maxs = {15, 15, 2};
+static qboolean CG_PlayerShadow( centity_t *cent, float *shadowPlane )
+{
+ vec3_t end, mins = { -15, -15, 0 }, maxs = { 15, 15, 2 };
trace_t trace;
- float alpha;
+ float alpha;
*shadowPlane = 0;
- if ( cg_shadows.integer == 0 ) {
- return qfalse;
- }
-
- // no shadows when invisible
- /*if ( cent->currentState.powerups & ( 1 << PW_INVIS ) ) {
+ if( cg_shadows.integer == 0 )
return qfalse;
- }*/
// send a trace down from the player to the ground
VectorCopy( cent->lerpOrigin, end );
- end[2] -= SHADOW_DISTANCE;
+ end[ 2 ] -= SHADOW_DISTANCE;
trap_CM_BoxTrace( &trace, cent->lerpOrigin, end, mins, maxs, 0, MASK_PLAYERSOLID );
// no shadow if too high
- if ( trace.fraction == 1.0 || trace.startsolid || trace.allsolid ) {
+ if( trace.fraction == 1.0 || trace.startsolid || trace.allsolid )
return qfalse;
- }
- *shadowPlane = trace.endpos[2] + 1;
+ *shadowPlane = trace.endpos[ 2 ] + 1;
- if ( cg_shadows.integer != 1 ) { // no mark for stencil or projection shadows
+ if( cg_shadows.integer != 1 ) // no mark for stencil or projection shadows
return qtrue;
- }
// fade the shadow out with height
alpha = 1.0 - trace.fraction;
@@ -1542,7 +1516,7 @@ static qboolean CG_PlayerShadow( centity_t *cent, float *shadowPlane ) {
// add the mark as a temporary, so it goes directly to the renderer
// without taking a spot in the cg_marks array
CG_ImpactMark( cgs.media.shadowMarkShader, trace.endpos, trace.plane.normal,
- cent->pe.legs.yawAngle, alpha,alpha,alpha,1, qfalse, 24, qtrue );
+ cent->pe.legs.yawAngle, alpha,alpha,alpha,1, qfalse, 24, qtrue );
return qtrue;
}
@@ -1555,82 +1529,81 @@ CG_PlayerSplash
Draw a mark at the water surface
===============
*/
-static void CG_PlayerSplash( centity_t *cent ) {
- vec3_t start, end;
- trace_t trace;
- int contents;
- polyVert_t verts[4];
+static void CG_PlayerSplash( centity_t *cent )
+{
+ vec3_t start, end;
+ trace_t trace;
+ int contents;
+ polyVert_t verts[ 4 ];
- if ( !cg_shadows.integer ) {
+ if( !cg_shadows.integer )
return;
- }
VectorCopy( cent->lerpOrigin, end );
- end[2] -= 24;
+ end[ 2 ] -= 24;
// if the feet aren't in liquid, don't make a mark
// this won't handle moving water brushes, but they wouldn't draw right anyway...
contents = trap_CM_PointContents( end, 0 );
- if ( !( contents & ( CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) ) ) {
+
+ if( !( contents & ( CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) ) )
return;
- }
VectorCopy( cent->lerpOrigin, start );
- start[2] += 32;
+ start[ 2 ] += 32;
// if the head isn't out of liquid, don't make a mark
contents = trap_CM_PointContents( start, 0 );
- if ( contents & ( CONTENTS_SOLID | CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) ) {
+
+ if( contents & ( CONTENTS_SOLID | CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) )
return;
- }
// trace down to find the surface
trap_CM_BoxTrace( &trace, start, end, NULL, NULL, 0, ( CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) );
- if ( trace.fraction == 1.0 ) {
+ if( trace.fraction == 1.0 )
return;
- }
// create a mark polygon
- VectorCopy( trace.endpos, verts[0].xyz );
- verts[0].xyz[0] -= 32;
- verts[0].xyz[1] -= 32;
- verts[0].st[0] = 0;
- verts[0].st[1] = 0;
- verts[0].modulate[0] = 255;
- verts[0].modulate[1] = 255;
- verts[0].modulate[2] = 255;
- verts[0].modulate[3] = 255;
-
- VectorCopy( trace.endpos, verts[1].xyz );
- verts[1].xyz[0] -= 32;
- verts[1].xyz[1] += 32;
- verts[1].st[0] = 0;
- verts[1].st[1] = 1;
- verts[1].modulate[0] = 255;
- verts[1].modulate[1] = 255;
- verts[1].modulate[2] = 255;
- verts[1].modulate[3] = 255;
-
- VectorCopy( trace.endpos, verts[2].xyz );
- verts[2].xyz[0] += 32;
- verts[2].xyz[1] += 32;
- verts[2].st[0] = 1;
- verts[2].st[1] = 1;
- verts[2].modulate[0] = 255;
- verts[2].modulate[1] = 255;
- verts[2].modulate[2] = 255;
- verts[2].modulate[3] = 255;
-
- VectorCopy( trace.endpos, verts[3].xyz );
- verts[3].xyz[0] += 32;
- verts[3].xyz[1] -= 32;
- verts[3].st[0] = 1;
- verts[3].st[1] = 0;
- verts[3].modulate[0] = 255;
- verts[3].modulate[1] = 255;
- verts[3].modulate[2] = 255;
- verts[3].modulate[3] = 255;
+ VectorCopy( trace.endpos, verts[ 0 ].xyz );
+ verts[ 0 ].xyz[ 0 ] -= 32;
+ verts[ 0 ].xyz[ 1 ] -= 32;
+ verts[ 0 ].st[ 0 ] = 0;
+ verts[ 0 ].st[ 1 ] = 0;
+ verts[ 0 ].modulate[ 0 ] = 255;
+ verts[ 0 ].modulate[ 1 ] = 255;
+ verts[ 0 ].modulate[ 2 ] = 255;
+ verts[ 0 ].modulate[ 3 ] = 255;
+
+ VectorCopy( trace.endpos, verts[ 1 ].xyz );
+ verts[ 1 ].xyz[ 0 ] -= 32;
+ verts[ 1 ].xyz[ 1 ] += 32;
+ verts[ 1 ].st[ 0 ] = 0;
+ verts[ 1 ].st[ 1 ] = 1;
+ verts[ 1 ].modulate[ 0 ] = 255;
+ verts[ 1 ].modulate[ 1 ] = 255;
+ verts[ 1 ].modulate[ 2 ] = 255;
+ verts[ 1 ].modulate[ 3 ] = 255;
+
+ VectorCopy( trace.endpos, verts[ 2 ].xyz );
+ verts[ 2 ].xyz[ 0 ] += 32;
+ verts[ 2 ].xyz[ 1 ] += 32;
+ verts[ 2 ].st[ 0 ] = 1;
+ verts[ 2 ].st[ 1 ] = 1;
+ verts[ 2 ].modulate[ 0 ] = 255;
+ verts[ 2 ].modulate[ 1 ] = 255;
+ verts[ 2 ].modulate[ 2 ] = 255;
+ verts[ 2 ].modulate[ 3 ] = 255;
+
+ VectorCopy( trace.endpos, verts[ 3 ].xyz );
+ verts[ 3 ].xyz[ 0 ] += 32;
+ verts[ 3 ].xyz[ 1 ] -= 32;
+ verts[ 3 ].st[ 0 ] = 1;
+ verts[ 3 ].st[ 1 ] = 0;
+ verts[ 3 ].modulate[ 0 ] = 255;
+ verts[ 3 ].modulate[ 1 ] = 255;
+ verts[ 3 ].modulate[ 2 ] = 255;
+ verts[ 3 ].modulate[ 3 ] = 255;
trap_R_AddPolyToScene( cgs.media.wakeMarkShader, 4, verts );
}
@@ -1645,33 +1618,9 @@ Adds a piece with modifications or duplications for powerups
Also called by CG_Missile for quad rockets, but nobody can tell...
===============
*/
-void CG_AddRefEntityWithPowerups( refEntity_t *ent, int powerups, int team ) {
-
- /*if ( powerups & ( 1 << PW_INVIS ) ) {
- ent->customShader = cgs.media.invisShader;
- trap_R_AddRefEntityToScene( ent );
- } else {*/
- trap_R_AddRefEntityToScene( ent );
-
- /*if ( powerups & ( 1 << PW_QUAD ) )
- {
- if (team == TEAM_HUMANS)
- ent->customShader = cgs.media.redQuadShader;
- else
- ent->customShader = cgs.media.quadShader;
- trap_R_AddRefEntityToScene( ent );
- }
- if ( powerups & ( 1 << PW_REGEN ) ) {
- if ( ( ( cg.time / 100 ) % 10 ) == 1 ) {
- ent->customShader = cgs.media.regenShader;
- trap_R_AddRefEntityToScene( ent );
- }
- }
- if ( powerups & ( 1 << PW_BATTLESUIT ) ) {
- ent->customShader = cgs.media.battleSuitShader;
- trap_R_AddRefEntityToScene( ent );
- }
- }*/
+void CG_AddRefEntityWithPowerups( refEntity_t *ent, int powerups, int team )
+{
+ trap_R_AddRefEntityToScene( ent );
}
@@ -1688,36 +1637,43 @@ int CG_LightVerts( vec3_t normal, int numVerts, polyVert_t *verts )
vec3_t lightDir;
vec3_t directedLight;
- trap_R_LightForPoint( verts[0].xyz, ambientLight, directedLight, lightDir );
+ trap_R_LightForPoint( verts[ 0 ].xyz, ambientLight, directedLight, lightDir );
- for (i = 0; i < numVerts; i++) {
- incoming = DotProduct (normal, lightDir);
- if ( incoming <= 0 ) {
- verts[i].modulate[0] = ambientLight[0];
- verts[i].modulate[1] = ambientLight[1];
- verts[i].modulate[2] = ambientLight[2];
- verts[i].modulate[3] = 255;
+ for( i = 0; i < numVerts; i++ )
+ {
+ incoming = DotProduct( normal, lightDir );
+
+ if( incoming <= 0 )
+ {
+ verts[ i ].modulate[ 0 ] = ambientLight[ 0 ];
+ verts[ i ].modulate[ 1 ] = ambientLight[ 1 ];
+ verts[ i ].modulate[ 2 ] = ambientLight[ 2 ];
+ verts[ i ].modulate[ 3 ] = 255;
continue;
}
- j = ( ambientLight[0] + incoming * directedLight[0] );
- if ( j > 255 ) {
+
+ j = ( ambientLight[ 0 ] + incoming * directedLight[ 0 ] );
+
+ if( j > 255 )
j = 255;
- }
- verts[i].modulate[0] = j;
+
+ verts[ i ].modulate[ 0 ] = j;
- j = ( ambientLight[1] + incoming * directedLight[1] );
- if ( j > 255 ) {
+ j = ( ambientLight[ 1 ] + incoming * directedLight[ 1 ] );
+
+ if( j > 255 )
j = 255;
- }
- verts[i].modulate[1] = j;
- j = ( ambientLight[2] + incoming * directedLight[2] );
- if ( j > 255 ) {
+ verts[ i ].modulate[ 1 ] = j;
+
+ j = ( ambientLight[ 2 ] + incoming * directedLight[ 2 ] );
+
+ if( j > 255 )
j = 255;
- }
- verts[i].modulate[2] = j;
- verts[i].modulate[3] = 255;
+ verts[ i ].modulate[ 2 ] = j;
+
+ verts[ i ].modulate[ 3 ] = 255;
}
return qtrue;
}
@@ -1739,33 +1695,38 @@ int CG_LightFromDirection( vec3_t point, vec3_t direction )
trap_R_LightForPoint( point, ambientLight, directedLight, lightDir );
- incoming = DotProduct (direction, lightDir);
- if ( incoming <= 0 ) {
- result[0] = ambientLight[0];
- result[1] = ambientLight[1];
- result[2] = ambientLight[2];
- return (int)((float)( result[0] + result[1] + result[2] ) / 3.0f );
+ incoming = DotProduct( direction, lightDir );
+
+ if( incoming <= 0 )
+ {
+ result[ 0 ] = ambientLight[ 0 ];
+ result[ 1 ] = ambientLight[ 1 ];
+ result[ 2 ] = ambientLight[ 2 ];
+ return (int)( (float)( result[ 0 ] + result[ 1 ] + result[ 2 ] ) / 3.0f );
}
- j = ( ambientLight[0] + incoming * directedLight[0] );
- if ( j > 255 ) {
+ j = ( ambientLight[ 0 ] + incoming * directedLight[ 0 ] );
+
+ if( j > 255 )
j = 255;
- }
- result[0] = j;
- j = ( ambientLight[1] + incoming * directedLight[1] );
- if ( j > 255 ) {
+ result[ 0 ] = j;
+
+ j = ( ambientLight[ 1 ] + incoming * directedLight[ 1 ] );
+
+ if( j > 255 )
j = 255;
- }
- result[1] = j;
- j = ( ambientLight[2] + incoming * directedLight[2] );
- if ( j > 255 ) {
+ result[ 1 ] = j;
+
+ j = ( ambientLight[ 2 ] + incoming * directedLight[ 2 ] );
+
+ if( j > 255 )
j = 255;
- }
- result[2] = j;
- return (int)((float)( result[0] + result[1] + result[2] ) / 3.0f );
+ result[ 2 ] = j;
+
+ return (int)((float)( result[ 0 ] + result[ 1 ] + result[ 2 ] ) / 3.0f );
}
@@ -1783,10 +1744,10 @@ int CG_AmbientLight( vec3_t point )
trap_R_LightForPoint( point, ambientLight, directedLight, lightDir );
- result[0] = ambientLight[0];
- result[1] = ambientLight[1];
- result[2] = ambientLight[2];
- return (int)((float)( result[0] + result[1] + result[2] ) / 3.0f );
+ result[ 0 ] = ambientLight[ 0 ];
+ result[ 1 ] = ambientLight[ 1 ];
+ result[ 2 ] = ambientLight[ 2 ];
+ return (int)((float)( result[ 0 ] + result[ 1 ] + result[ 2 ] ) / 3.0f );
}
#define TRACE_DEPTH 128.0f
@@ -1864,7 +1825,7 @@ void CG_Player( centity_t *cent )
// get the animation state (after rotation, to allow feet shuffle)
CG_PlayerAnimation( cent, &legs.oldframe, &legs.frame, &legs.backlerp,
- &torso.oldframe, &torso.frame, &torso.backlerp );
+ &torso.oldframe, &torso.frame, &torso.backlerp );
// add the talk baloon or disconnect icon
CG_PlayerSprites( cent );
@@ -1990,14 +1951,15 @@ void CG_Corpse( centity_t *cent )
refEntity_t legs;
refEntity_t torso;
refEntity_t head;
- int corpseNum;
- int renderfx;
- qboolean shadow;
- float shadowPlane;
- vec3_t origin, liveZ, deadZ;
+ int corpseNum;
+ int renderfx;
+ qboolean shadow;
+ float shadowPlane;
+ vec3_t origin, liveZ, deadZ;
corpseNum = CG_GetCorpseNum( cent->currentState.clientNum );
- if ( corpseNum < 0 || corpseNum >= MAX_CLIENTS )
+
+ if( corpseNum < 0 || corpseNum >= MAX_CLIENTS )
CG_Error( "Bad corpseNum on corpse entity: %d", corpseNum );
ci = &cgs.corpseinfo[ corpseNum ];
@@ -2007,9 +1969,9 @@ void CG_Corpse( centity_t *cent )
if( !ci->infoValid )
return;
- memset( &legs, 0, sizeof(legs) );
- memset( &torso, 0, sizeof(torso) );
- memset( &head, 0, sizeof(head) );
+ memset( &legs, 0, sizeof( legs ) );
+ memset( &torso, 0, sizeof( torso ) );
+ memset( &head, 0, sizeof( head ) );
VectorCopy( cent->lerpOrigin, origin );
BG_FindBBoxForClass( cent->currentState.clientNum, liveZ, NULL, NULL, deadZ, NULL );
@@ -2020,7 +1982,7 @@ void CG_Corpse( centity_t *cent )
CG_PlayerAngles( cent, cent->lerpAngles, legs.axis, torso.axis, head.axis );
//set the correct frame (should always be dead)
- if ( cg_noPlayerAnims.integer )
+ if( cg_noPlayerAnims.integer )
legs.oldframe = legs.frame = torso.oldframe = torso.frame = 0;
else
{
@@ -2041,6 +2003,7 @@ void CG_Corpse( centity_t *cent )
// get the player model information
renderfx = 0;
+
if( cg_shadows.integer == 3 && shadow )
renderfx |= RF_SHADOW_PLANE;
@@ -2057,7 +2020,7 @@ void CG_Corpse( centity_t *cent )
VectorCopy( origin, legs.lightingOrigin );
legs.shadowPlane = shadowPlane;
legs.renderfx = renderfx;
- VectorCopy (legs.origin, legs.oldorigin); // don't positionally lerp at all
+ VectorCopy( legs.origin, legs.oldorigin ); // don't positionally lerp at all
//CG_AddRefEntityWithPowerups( &legs, cent->currentState.powerups, ci->team );
trap_R_AddRefEntityToScene( &legs );
@@ -2077,7 +2040,7 @@ void CG_Corpse( centity_t *cent )
VectorCopy( origin, torso.lightingOrigin );
- CG_PositionRotatedEntityOnTag( &torso, &legs, ci->legsModel, "tag_torso");
+ CG_PositionRotatedEntityOnTag( &torso, &legs, ci->legsModel, "tag_torso" );
torso.shadowPlane = shadowPlane;
torso.renderfx = renderfx;
@@ -2110,7 +2073,7 @@ void CG_Corpse( centity_t *cent )
cent->currentState.powerups == 65535 ) //65535 = 16bit signed -1
{
//draw indicator
- CG_PlayerFloatSprite( cent, cgs.media.medalImpressive );
+ CG_PlayerFloatSprite( cent, cgs.media.friendShader );
}
}
}
@@ -2125,12 +2088,15 @@ CG_ResetPlayerEntity
A player just came into view or teleported, so reset all animation info
===============
*/
-void CG_ResetPlayerEntity( centity_t *cent ) {
+void CG_ResetPlayerEntity( centity_t *cent )
+{
cent->errorTime = -99999; // guarantee no error decay added
cent->extrapolated = qfalse;
- CG_ClearLerpFrame( &cgs.clientinfo[ cent->currentState.clientNum ], &cent->pe.legs, cent->currentState.legsAnim );
- CG_ClearLerpFrame( &cgs.clientinfo[ cent->currentState.clientNum ], &cent->pe.torso, cent->currentState.torsoAnim );
+ CG_ClearLerpFrame( &cgs.clientinfo[ cent->currentState.clientNum ],
+ &cent->pe.legs, cent->currentState.legsAnim );
+ CG_ClearLerpFrame( &cgs.clientinfo[ cent->currentState.clientNum ],
+ &cent->pe.torso, cent->currentState.torsoAnim );
BG_EvaluateTrajectory( &cent->currentState.pos, cg.time, cent->lerpOrigin );
BG_EvaluateTrajectory( &cent->currentState.apos, cg.time, cent->lerpAngles );
@@ -2139,19 +2105,18 @@ void CG_ResetPlayerEntity( centity_t *cent ) {
VectorCopy( cent->lerpAngles, cent->rawAngles );
memset( &cent->pe.legs, 0, sizeof( cent->pe.legs ) );
- cent->pe.legs.yawAngle = cent->rawAngles[YAW];
+ cent->pe.legs.yawAngle = cent->rawAngles[ YAW ];
cent->pe.legs.yawing = qfalse;
cent->pe.legs.pitchAngle = 0;
cent->pe.legs.pitching = qfalse;
memset( &cent->pe.torso, 0, sizeof( cent->pe.legs ) );
- cent->pe.torso.yawAngle = cent->rawAngles[YAW];
+ cent->pe.torso.yawAngle = cent->rawAngles[ YAW ];
cent->pe.torso.yawing = qfalse;
- cent->pe.torso.pitchAngle = cent->rawAngles[PITCH];
+ cent->pe.torso.pitchAngle = cent->rawAngles[ PITCH ];
cent->pe.torso.pitching = qfalse;
- if ( cg_debugPosition.integer ) {
- CG_Printf("%i ResetPlayerEntity yaw=%i\n", cent->currentState.number, cent->pe.torso.yawAngle );
- }
+ if( cg_debugPosition.integer )
+ CG_Printf( "%i ResetPlayerEntity yaw=%i\n", cent->currentState.number, cent->pe.torso.yawAngle );
}
diff --git a/src/cgame/cg_playerstate.c b/src/cgame/cg_playerstate.c
index 4a307481..1e39ad70 100644
--- a/src/cgame/cg_playerstate.c
+++ b/src/cgame/cg_playerstate.c
@@ -22,156 +22,103 @@
/*
==============
-CG_CheckAmmo
-
-If the ammo has gone low enough to generate the warning, play a sound
+CG_DamageFeedback
==============
*/
-void CG_CheckAmmo( void ) {
- int i;
- int total;
- int previous;
- int ammo, clips, maxclips;
-
- // see about how many seconds of ammo we have remaining
- total = 0;
- for ( i = WP_MACHINEGUN ; i < WP_NUM_WEAPONS ; i++ ) {
- if ( !BG_gotWeapon( i, cg.snap->ps.stats ) ) {
- continue;
- }
-
- BG_unpackAmmoArray( i, cg.snap->ps.ammo, cg.snap->ps.powerups, &ammo, &clips, &maxclips );
+void CG_DamageFeedback( int yawByte, int pitchByte, int damage )
+{
+ float left, front, up;
+ float kick;
+ int health;
+ float scale;
+ vec3_t dir;
+ vec3_t angles;
+ float dist;
+ float yaw, pitch;
+
+ // show the attacking player's head and name in corner
+ cg.attackerTime = cg.time;
+
+ // the lower on health you are, the greater the view kick will be
+ health = cg.snap->ps.stats[STAT_HEALTH];
+
+ if( health < 40 )
+ scale = 1;
+ else
+ scale = 40.0 / health;
+
+ kick = damage * scale;
+
+ if( kick < 5 )
+ kick = 5;
+
+ if( kick > 10 )
+ kick = 10;
+
+ // if yaw and pitch are both 255, make the damage always centered (falling, etc)
+ if( yawByte == 255 && pitchByte == 255 )
+ {
+ cg.damageX = 0;
+ cg.damageY = 0;
+ cg.v_dmg_roll = 0;
+ cg.v_dmg_pitch = -kick;
+ }
+ else
+ {
+ // positional
+ pitch = pitchByte / 255.0 * 360;
+ yaw = yawByte / 255.0 * 360;
+
+ angles[ PITCH ] = pitch;
+ angles[ YAW ] = yaw;
+ angles[ ROLL ] = 0;
+
+ AngleVectors( angles, dir, NULL, NULL );
+ VectorSubtract( vec3_origin, dir, dir );
+
+ front = DotProduct( dir, cg.refdef.viewaxis[ 0 ] );
+ left = DotProduct( dir, cg.refdef.viewaxis[ 1 ] );
+ up = DotProduct( dir, cg.refdef.viewaxis[ 2 ] );
+
+ dir[ 0 ] = front;
+ dir[ 1 ] = left;
+ dir[ 2 ] = 0;
+ dist = VectorLength( dir );
- switch ( i ) {
- /*case WP_ROCKET_LAUNCHER:*/
- case WP_LOCKBLOB_LAUNCHER:
- /*case WP_GRENADE_LAUNCHER:*/
- /*case WP_RAILGUN:*/
- /*case WP_SHOTGUN:*/
- total += ammo * 1000;
- break;
- default:
- if( clips )
- total += 5000;
- total += ammo * 200;
- break;
- }
- if ( total >= 5000 || BG_FindInfinteAmmoForWeapon( i ) )
- {
- cg.lowAmmoWarning = 0;
- return;
- }
- }
-
- previous = cg.lowAmmoWarning;
-
- if ( total == 0 ) {
- cg.lowAmmoWarning = 2;
- } else {
- cg.lowAmmoWarning = 1;
- }
-
- // play a sound on transitions
- if ( cg.lowAmmoWarning != previous ) {
- trap_S_StartLocalSound( cgs.media.noAmmoSound, CHAN_LOCAL_SOUND );
- }
-}
+ if( dist < 0.1f )
+ dist = 0.1f;
-/*
-==============
-CG_DamageFeedback
-==============
-*/
-void CG_DamageFeedback( int yawByte, int pitchByte, int damage ) {
- float left, front, up;
- float kick;
- int health;
- float scale;
- vec3_t dir;
- vec3_t angles;
- float dist;
- float yaw, pitch;
-
- // show the attacking player's head and name in corner
- cg.attackerTime = cg.time;
-
- // the lower on health you are, the greater the view kick will be
- health = cg.snap->ps.stats[STAT_HEALTH];
- if ( health < 40 ) {
- scale = 1;
- } else {
- scale = 40.0 / health;
- }
- kick = damage * scale;
-
- if (kick < 5)
- kick = 5;
- if (kick > 10)
- kick = 10;
-
- // if yaw and pitch are both 255, make the damage always centered (falling, etc)
- if ( yawByte == 255 && pitchByte == 255 ) {
- cg.damageX = 0;
- cg.damageY = 0;
- cg.v_dmg_roll = 0;
- cg.v_dmg_pitch = -kick;
- } else {
- // positional
- pitch = pitchByte / 255.0 * 360;
- yaw = yawByte / 255.0 * 360;
-
- angles[PITCH] = pitch;
- angles[YAW] = yaw;
- angles[ROLL] = 0;
-
- AngleVectors( angles, dir, NULL, NULL );
- VectorSubtract( vec3_origin, dir, dir );
-
- front = DotProduct (dir, cg.refdef.viewaxis[0] );
- left = DotProduct (dir, cg.refdef.viewaxis[1] );
- up = DotProduct (dir, cg.refdef.viewaxis[2] );
-
- dir[0] = front;
- dir[1] = left;
- dir[2] = 0;
- dist = VectorLength( dir );
- if ( dist < 0.1 ) {
- dist = 0.1f;
- }
-
- cg.v_dmg_roll = kick * left;
-
- cg.v_dmg_pitch = -kick * front;
-
- if ( front <= 0.1 ) {
- front = 0.1f;
- }
- cg.damageX = -left / front;
- cg.damageY = up / dist;
- }
-
- // clamp the position
- if ( cg.damageX > 1.0 ) {
- cg.damageX = 1.0;
- }
- if ( cg.damageX < - 1.0 ) {
- cg.damageX = -1.0;
- }
-
- if ( cg.damageY > 1.0 ) {
- cg.damageY = 1.0;
- }
- if ( cg.damageY < - 1.0 ) {
- cg.damageY = -1.0;
- }
-
- // don't let the screen flashes vary as much
- if ( kick > 10 ) {
- kick = 10;
- }
- cg.damageValue = kick;
- cg.v_dmg_time = cg.time + DAMAGE_TIME;
- cg.damageTime = cg.snap->serverTime;
+ cg.v_dmg_roll = kick * left;
+
+ cg.v_dmg_pitch = -kick * front;
+
+ if( front <= 0.1 )
+ front = 0.1f;
+
+ cg.damageX = -left / front;
+ cg.damageY = up / dist;
+ }
+
+ // clamp the position
+ if( cg.damageX > 1.0 )
+ cg.damageX = 1.0;
+
+ if( cg.damageX < - 1.0 )
+ cg.damageX = -1.0;
+
+ if( cg.damageY > 1.0 )
+ cg.damageY = 1.0;
+
+ if( cg.damageY < - 1.0 )
+ cg.damageY = -1.0;
+
+ // don't let the screen flashes vary as much
+ if( kick > 10 )
+ kick = 10;
+
+ cg.damageValue = kick;
+ cg.v_dmg_time = cg.time + DAMAGE_TIME;
+ cg.damageTime = cg.snap->serverTime;
}
@@ -184,57 +131,60 @@ CG_Respawn
A respawn happened this snapshot
================
*/
-void CG_Respawn( void ) {
- // no error decay on player movement
- cg.thisFrameTeleport = qtrue;
+void CG_Respawn( void )
+{
+ // no error decay on player movement
+ cg.thisFrameTeleport = qtrue;
- // display weapons available
- cg.weaponSelectTime = cg.time;
+ // display weapons available
+ cg.weaponSelectTime = cg.time;
- // select the weapon the server says we are using
- cg.weaponSelect = cg.snap->ps.weapon;
+ // select the weapon the server says we are using
+ cg.weaponSelect = cg.snap->ps.weapon;
}
-extern char *eventnames[];
-
/*
==============
CG_CheckPlayerstateEvents
==============
*/
-void CG_CheckPlayerstateEvents( playerState_t *ps, playerState_t *ops ) {
- int i;
- int event;
- centity_t *cent;
+void CG_CheckPlayerstateEvents( playerState_t *ps, playerState_t *ops )
+{
+ int i;
+ int event;
+ centity_t *cent;
- if ( ps->externalEvent && ps->externalEvent != ops->externalEvent ) {
- cent = &cg_entities[ ps->clientNum ];
- cent->currentState.event = ps->externalEvent;
- cent->currentState.eventParm = ps->externalEventParm;
- CG_EntityEvent( cent, cent->lerpOrigin );
- }
+ if( ps->externalEvent && ps->externalEvent != ops->externalEvent )
+ {
+ cent = &cg_entities[ ps->clientNum ];
+ cent->currentState.event = ps->externalEvent;
+ cent->currentState.eventParm = ps->externalEventParm;
+ CG_EntityEvent( cent, cent->lerpOrigin );
+ }
- cent = &cg.predictedPlayerEntity; // cg_entities[ ps->clientNum ];
+ cent = &cg.predictedPlayerEntity; // cg_entities[ ps->clientNum ];
// go through the predictable events buffer
- for ( i = ps->eventSequence - MAX_PS_EVENTS ; i < ps->eventSequence ; i++ ) {
+ for( i = ps->eventSequence - MAX_PS_EVENTS; i < ps->eventSequence; i++ )
+ {
// if we have a new predictable event
- if ( i >= ops->eventSequence
+ if( i >= ops->eventSequence ||
// or the server told us to play another event instead of a predicted event we already issued
// or something the server told us changed our prediction causing a different event
- || (i > ops->eventSequence - MAX_PS_EVENTS && ps->events[i & (MAX_PS_EVENTS-1)] != ops->events[i & (MAX_PS_EVENTS-1)]) ) {
-
- event = ps->events[ i & (MAX_PS_EVENTS-1) ];
+ ( i > ops->eventSequence - MAX_PS_EVENTS && ps->events[ i & ( MAX_PS_EVENTS - 1 ) ] !=
+ ops->events[ i & ( MAX_PS_EVENTS - 1 ) ] ) )
+ {
+ event = ps->events[ i & ( MAX_PS_EVENTS - 1 ) ];
- cent->currentState.event = event;
- cent->currentState.eventParm = ps->eventParms[ i & (MAX_PS_EVENTS-1) ];
- CG_EntityEvent( cent, cent->lerpOrigin );
- cg.predictableEvents[ i & (MAX_PREDICTED_EVENTS-1) ] = event;
+ cent->currentState.event = event;
+ cent->currentState.eventParm = ps->eventParms[ i & ( MAX_PS_EVENTS - 1 ) ];
+ CG_EntityEvent( cent, cent->lerpOrigin );
+ cg.predictableEvents[ i & ( MAX_PREDICTED_EVENTS - 1 ) ] = event;
cg.eventSequence++;
- }
- }
+ }
+ }
}
@@ -243,32 +193,35 @@ void CG_CheckPlayerstateEvents( playerState_t *ps, playerState_t *ops ) {
CG_CheckChangedPredictableEvents
==================
*/
-void CG_CheckChangedPredictableEvents( playerState_t *ps ) {
- int i;
- int event;
+void CG_CheckChangedPredictableEvents( playerState_t *ps )
+{
+ int i;
+ int event;
centity_t *cent;
cent = &cg.predictedPlayerEntity;
- for ( i = ps->eventSequence - MAX_PS_EVENTS ; i < ps->eventSequence ; i++ ) {
+
+ for( i = ps->eventSequence - MAX_PS_EVENTS; i < ps->eventSequence; i++ )
+ {
//
- if (i >= cg.eventSequence) {
+ if( i >= cg.eventSequence )
continue;
- }
+
// if this event is not further back in than the maximum predictable events we remember
- if (i > cg.eventSequence - MAX_PREDICTED_EVENTS) {
+ if( i > cg.eventSequence - MAX_PREDICTED_EVENTS )
+ {
// if the new playerstate event is different from a previously predicted one
- if ( ps->events[i & (MAX_PS_EVENTS-1)] != cg.predictableEvents[i & (MAX_PREDICTED_EVENTS-1) ] ) {
-
- event = ps->events[ i & (MAX_PS_EVENTS-1) ];
+ if( ps->events[ i & ( MAX_PS_EVENTS - 1 ) ] != cg.predictableEvents[ i & ( MAX_PREDICTED_EVENTS - 1 ) ] )
+ {
+ event = ps->events[ i & ( MAX_PS_EVENTS - 1 ) ];
cent->currentState.event = event;
- cent->currentState.eventParm = ps->eventParms[ i & (MAX_PS_EVENTS-1) ];
+ cent->currentState.eventParm = ps->eventParms[ i & ( MAX_PS_EVENTS - 1 ) ];
CG_EntityEvent( cent, cent->lerpOrigin );
- cg.predictableEvents[ i & (MAX_PREDICTED_EVENTS-1) ] = event;
+ cg.predictableEvents[ i & ( MAX_PREDICTED_EVENTS - 1 ) ] = event;
- if ( cg_showmiss.integer ) {
- CG_Printf("WARNING: changed predicted event\n");
- }
+ if( cg_showmiss.integer )
+ CG_Printf( "WARNING: changed predicted event\n" );
}
}
}
@@ -276,72 +229,62 @@ void CG_CheckChangedPredictableEvents( playerState_t *ps ) {
/*
==================
-pushReward
-==================
-*/
-static void pushReward(sfxHandle_t sfx, qhandle_t shader, int rewardCount) {
- if (cg.rewardStack < (MAX_REWARDSTACK-1)) {
- cg.rewardStack++;
- cg.rewardSound[cg.rewardStack] = sfx;
- cg.rewardShader[cg.rewardStack] = shader;
- cg.rewardCount[cg.rewardStack] = rewardCount;
- }
-}
-
-
-/*
-==================
CG_CheckLocalSounds
==================
*/
-void CG_CheckLocalSounds( playerState_t *ps, playerState_t *ops ) {
- int highScore, health, armor, reward;
+void CG_CheckLocalSounds( playerState_t *ps, playerState_t *ops )
+{
+ int highScore, health, armor, reward;
sfxHandle_t sfx;
// don't play the sounds if the player just changed teams
- if ( ps->persistant[PERS_TEAM] != ops->persistant[PERS_TEAM] ) {
+ if( ps->persistant[ PERS_TEAM ] != ops->persistant[ PERS_TEAM ] )
return;
- }
// hit changes
- if ( ps->persistant[PERS_HITS] > ops->persistant[PERS_HITS] ) {
+ if( ps->persistant[ PERS_HITS ] > ops->persistant[ PERS_HITS ] )
+ {
/*armor = ps->persistant[PERS_ATTACKEE_ARMOR] & 0xff;
health = ps->persistant[PERS_ATTACKEE_ARMOR] >> 8;*/
trap_S_StartLocalSound( cgs.media.hitSound, CHAN_LOCAL_SOUND );
- } else if ( ps->persistant[PERS_HITS] < ops->persistant[PERS_HITS] ) {
- trap_S_StartLocalSound( cgs.media.hitTeamSound, CHAN_LOCAL_SOUND );
}
+ else if( ps->persistant[ PERS_HITS ] < ops->persistant[ PERS_HITS ] )
+ trap_S_StartLocalSound( cgs.media.hitTeamSound, CHAN_LOCAL_SOUND );
// health changes of more than -1 should make pain sounds
- if ( ps->stats[STAT_HEALTH] < ops->stats[STAT_HEALTH] - 1 ) {
- if ( ps->stats[STAT_HEALTH] > 0 ) {
- CG_PainEvent( &cg.predictedPlayerEntity, ps->stats[STAT_HEALTH] );
- }
+ if( ps->stats[ STAT_HEALTH ] < ops->stats[ STAT_HEALTH ] - 1 )
+ {
+ if( ps->stats[ STAT_HEALTH ] > 0 )
+ CG_PainEvent( &cg.predictedPlayerEntity, ps->stats[ STAT_HEALTH ] );
}
// if we are going into the intermission, don't start any voices
- if ( cg.intermissionStarted ) {
+ if( cg.intermissionStarted )
return;
- }
// reward sounds
reward = qfalse;
// timelimit warnings
- if ( cgs.timelimit > 0 ) {
+ if( cgs.timelimit > 0 )
+ {
int msec;
msec = cg.time - cgs.levelStartTime;
- if ( !( cg.timelimitWarnings & 4 ) && msec > ( cgs.timelimit * 60 + 2 ) * 1000 ) {
+
+ if( !( cg.timelimitWarnings & 4 ) && msec > ( cgs.timelimit * 60 + 2 ) * 1000 )
+ {
cg.timelimitWarnings |= 1 | 2 | 4;
trap_S_StartLocalSound( cgs.media.suddenDeathSound, CHAN_ANNOUNCER );
}
- else if ( !( cg.timelimitWarnings & 2 ) && msec > (cgs.timelimit - 1) * 60 * 1000 ) {
+ else if( !( cg.timelimitWarnings & 2 ) && msec > ( cgs.timelimit - 1 ) * 60 * 1000 )
+ {
cg.timelimitWarnings |= 1 | 2;
trap_S_StartLocalSound( cgs.media.oneMinuteSound, CHAN_ANNOUNCER );
}
- else if ( cgs.timelimit > 5 && !( cg.timelimitWarnings & 1 ) && msec > (cgs.timelimit - 5) * 60 * 1000 ) {
+ else if( cgs.timelimit > 5 && !( cg.timelimitWarnings & 1 ) && msec > ( cgs.timelimit - 5 ) * 60 * 1000 )
+ {
cg.timelimitWarnings |= 1;
trap_S_StartLocalSound( cgs.media.fiveMinuteSound, CHAN_ANNOUNCER );
}
@@ -355,44 +298,42 @@ CG_TransitionPlayerState
===============
*/
-void CG_TransitionPlayerState( playerState_t *ps, playerState_t *ops ) {
- // check for changing follow mode
- if ( ps->clientNum != ops->clientNum ) {
- cg.thisFrameTeleport = qtrue;
- // make sure we don't get any unwanted transition effects
- *ops = *ps;
- }
-
- // damage events (player is getting wounded)
- if ( ps->damageEvent != ops->damageEvent && ps->damageCount ) {
- CG_DamageFeedback( ps->damageYaw, ps->damagePitch, ps->damageCount );
- }
-
- // respawning
- if ( ps->persistant[PERS_SPAWN_COUNT] != ops->persistant[PERS_SPAWN_COUNT] ) {
- CG_Respawn();
- }
-
- if ( cg.mapRestart ) {
- CG_Respawn();
- cg.mapRestart = qfalse;
+void CG_TransitionPlayerState( playerState_t *ps, playerState_t *ops )
+{
+ // check for changing follow mode
+ if( ps->clientNum != ops->clientNum )
+ {
+ cg.thisFrameTeleport = qtrue;
+ // make sure we don't get any unwanted transition effects
+ *ops = *ps;
}
- if ( cg.snap->ps.pm_type != PM_INTERMISSION
- && ps->persistant[PERS_TEAM] != TEAM_SPECTATOR ) {
- CG_CheckLocalSounds( ps, ops );
- }
+ // damage events (player is getting wounded)
+ if( ps->damageEvent != ops->damageEvent && ps->damageCount )
+ CG_DamageFeedback( ps->damageYaw, ps->damagePitch, ps->damageCount );
+
+ // respawning
+ if( ps->persistant[ PERS_SPAWN_COUNT ] != ops->persistant[ PERS_SPAWN_COUNT ] )
+ CG_Respawn( );
+
+ if( cg.mapRestart )
+ {
+ CG_Respawn( );
+ cg.mapRestart = qfalse;
+ }
- // check for going low on ammo
- //CG_CheckAmmo(); //TA: don't display ammo warnings
+ if( cg.snap->ps.pm_type != PM_INTERMISSION &&
+ ps->persistant[ PERS_TEAM ] != TEAM_SPECTATOR )
+ CG_CheckLocalSounds( ps, ops );
- // run events
- CG_CheckPlayerstateEvents( ps, ops );
+ // run events
+ CG_CheckPlayerstateEvents( ps, ops );
- // smooth the ducking viewheight change
- if ( ps->viewheight != ops->viewheight ) {
- cg.duckChange = ps->viewheight - ops->viewheight;
- cg.duckTime = cg.time;
- }
+ // smooth the ducking viewheight change
+ if( ps->viewheight != ops->viewheight )
+ {
+ cg.duckChange = ps->viewheight - ops->viewheight;
+ cg.duckTime = cg.time;
+ }
}
diff --git a/src/cgame/cg_predict.c b/src/cgame/cg_predict.c
index d28c9ba6..fabe1065 100644
--- a/src/cgame/cg_predict.c
+++ b/src/cgame/cg_predict.c
@@ -36,33 +36,36 @@ of the entities that are actually solid, to make for more
efficient collision detection
====================
*/
-void CG_BuildSolidList( void ) {
- int i;
- centity_t *cent;
- snapshot_t *snap;
+void CG_BuildSolidList( void )
+{
+ int i;
+ centity_t *cent;
+ snapshot_t *snap;
entityState_t *ent;
cg_numSolidEntities = 0;
cg_numTriggerEntities = 0;
- if ( cg.nextSnap && !cg.nextFrameTeleport && !cg.thisFrameTeleport ) {
+ if( cg.nextSnap && !cg.nextFrameTeleport && !cg.thisFrameTeleport )
snap = cg.nextSnap;
- } else {
+ else
snap = cg.snap;
- }
- for ( i = 0 ; i < snap->numEntities ; i++ ) {
+ for( i = 0; i < snap->numEntities; i++ )
+ {
cent = &cg_entities[ snap->entities[ i ].number ];
ent = &cent->currentState;
- if ( ent->eType == ET_ITEM || ent->eType == ET_PUSH_TRIGGER || ent->eType == ET_TELEPORT_TRIGGER ) {
- cg_triggerEntities[cg_numTriggerEntities] = cent;
+ if( ent->eType == ET_ITEM || ent->eType == ET_PUSH_TRIGGER || ent->eType == ET_TELEPORT_TRIGGER )
+ {
+ cg_triggerEntities[ cg_numTriggerEntities ] = cent;
cg_numTriggerEntities++;
continue;
}
- if ( cent->nextState.solid ) {
- cg_solidEntities[cg_numSolidEntities] = cent;
+ if( cent->nextState.solid )
+ {
+ cg_solidEntities[ cg_numSolidEntities ] = cent;
cg_numSolidEntities++;
continue;
}
@@ -76,38 +79,42 @@ CG_ClipMoveToEntities
====================
*/
static void CG_ClipMoveToEntities ( const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end,
- int skipNumber, int mask, trace_t *tr, qboolean capsule ) {
- int i, x, zd, zu;
- trace_t trace;
+ int skipNumber, int mask, trace_t *tr, qboolean capsule )
+{
+ int i, x, zd, zu;
+ trace_t trace;
entityState_t *ent;
clipHandle_t cmodel;
- vec3_t bmins, bmaxs;
- vec3_t origin, angles;
- centity_t *cent;
+ vec3_t bmins, bmaxs;
+ vec3_t origin, angles;
+ centity_t *cent;
- for ( i = 0 ; i < cg_numSolidEntities ; i++ ) {
+ for( i = 0; i < cg_numSolidEntities; i++ )
+ {
cent = cg_solidEntities[ i ];
ent = &cent->currentState;
- if ( ent->number == skipNumber ) {
+ if( ent->number == skipNumber )
continue;
- }
- if ( ent->solid == SOLID_BMODEL ) {
+ if( ent->solid == SOLID_BMODEL )
+ {
// special value for bmodel
cmodel = trap_CM_InlineModel( ent->modelindex );
VectorCopy( cent->lerpAngles, angles );
BG_EvaluateTrajectory( &cent->currentState.pos, cg.physicsTime, origin );
- } else {
+ }
+ else
+ {
// encoded bbox
- x = (ent->solid & 255);
- zd = ((ent->solid>>8) & 255);
- zu = ((ent->solid>>16) & 255) - 32;
+ x = ( ent->solid & 255 );
+ zd = ( ( ent->solid >> 8 ) & 255 );
+ zu = ( ( ent->solid >> 16 ) & 255 ) - 32;
- bmins[0] = bmins[1] = -x;
- bmaxs[0] = bmaxs[1] = x;
- bmins[2] = -zd;
- bmaxs[2] = zu;
+ bmins[ 0 ] = bmins[ 1 ] = -x;
+ bmaxs[ 0 ] = bmaxs[ 1 ] = x;
+ bmins[ 2 ] = -zd;
+ bmaxs[ 2 ] = zu;
cmodel = trap_CM_TempBoxModel( bmins, bmaxs );
VectorCopy( vec3_origin, angles );
@@ -118,23 +125,24 @@ static void CG_ClipMoveToEntities ( const vec3_t start, const vec3_t mins, const
if( capsule )
{
trap_CM_TransformedCapsuleTrace ( &trace, start, end,
- mins, maxs, cmodel, mask, origin, angles);
- }
+ mins, maxs, cmodel, mask, origin, angles );
+ }
else
{
trap_CM_TransformedBoxTrace ( &trace, start, end,
- mins, maxs, cmodel, mask, origin, angles);
+ mins, maxs, cmodel, mask, origin, angles );
}
- if (trace.allsolid || trace.fraction < tr->fraction) {
+ if( trace.allsolid || trace.fraction < tr->fraction )
+ {
trace.entityNum = ent->number;
*tr = trace;
- } else if (trace.startsolid) {
- tr->startsolid = qtrue;
}
- if ( tr->allsolid ) {
+ else if( trace.startsolid )
+ tr->startsolid = qtrue;
+
+ if( tr->allsolid )
return;
- }
}
}
@@ -144,13 +152,14 @@ CG_Trace
================
*/
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 ) {
+ int skipNumber, int mask )
+{
trace_t t;
- trap_CM_BoxTrace ( &t, start, end, mins, maxs, 0, mask);
+ trap_CM_BoxTrace( &t, start, end, mins, maxs, 0, mask );
t.entityNum = t.fraction != 1.0 ? ENTITYNUM_WORLD : ENTITYNUM_NONE;
// check all other solid models
- CG_ClipMoveToEntities (start, mins, maxs, end, skipNumber, mask, &t, qfalse);
+ CG_ClipMoveToEntities( start, mins, maxs, end, skipNumber, mask, &t, qfalse );
*result = t;
}
@@ -161,13 +170,14 @@ CG_CapTrace
================
*/
void CG_CapTrace( trace_t *result, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end,
- int skipNumber, int mask ) {
+ int skipNumber, int mask )
+{
trace_t t;
- trap_CM_CapsuleTrace ( &t, start, end, mins, maxs, 0, mask);
+ trap_CM_CapsuleTrace( &t, start, end, mins, maxs, 0, mask );
t.entityNum = t.fraction != 1.0 ? ENTITYNUM_WORLD : ENTITYNUM_NONE;
// check all other solid models
- CG_ClipMoveToEntities (start, mins, maxs, end, skipNumber, mask, &t, qtrue);
+ CG_ClipMoveToEntities( start, mins, maxs, end, skipNumber, mask, &t, qtrue );
*result = t;
}
@@ -219,9 +229,10 @@ Generates cg.predictedPlayerState by interpolating between
cg.snap->player_state and cg.nextFrame->player_state
========================
*/
-static void CG_InterpolatePlayerState( qboolean grabAngles ) {
- float f;
- int i;
+static void CG_InterpolatePlayerState( qboolean grabAngles )
+{
+ float f;
+ int i;
playerState_t *out;
snapshot_t *prev, *next;
@@ -232,84 +243,42 @@ static void CG_InterpolatePlayerState( qboolean grabAngles ) {
*out = cg.snap->ps;
// if we are still allowing local input, short circuit the view angles
- if ( grabAngles ) {
+ if( grabAngles )
+ {
usercmd_t cmd;
int cmdNum;
- cmdNum = trap_GetCurrentCmdNumber();
+ cmdNum = trap_GetCurrentCmdNumber( );
trap_GetUserCmd( cmdNum, &cmd );
PM_UpdateViewAngles( out, &cmd );
}
// if the next frame is a teleport, we can't lerp to it
- if ( cg.nextFrameTeleport ) {
+ if( cg.nextFrameTeleport )
return;
- }
- if ( !next || next->serverTime <= prev->serverTime ) {
+ if( !next || next->serverTime <= prev->serverTime )
return;
- }
f = (float)( cg.time - prev->serverTime ) / ( next->serverTime - prev->serverTime );
i = next->ps.bobCycle;
- if ( i < prev->ps.bobCycle ) {
+ if( i < prev->ps.bobCycle )
i += 256; // handle wraparound
- }
+
out->bobCycle = prev->ps.bobCycle + f * ( i - prev->ps.bobCycle );
- for ( i = 0 ; i < 3 ; i++ ) {
- out->origin[i] = prev->ps.origin[i] + f * (next->ps.origin[i] - prev->ps.origin[i] );
- if ( !grabAngles ) {
- out->viewangles[i] = LerpAngle(
- prev->ps.viewangles[i], next->ps.viewangles[i], f );
- }
- out->velocity[i] = prev->ps.velocity[i] +
- f * (next->ps.velocity[i] - prev->ps.velocity[i] );
- }
-
-}
-
-/*
-===================
-CG_TouchItem
-===================
-*/
-static void CG_TouchItem( centity_t *cent ) {
- gitem_t *item;
- int ammo, clips, maxclips;
-
- BG_unpackAmmoArray( item->giTag, cg.predictedPlayerState.ammo, cg.predictedPlayerState.powerups, &ammo, &clips, &maxclips );
-
- if ( !cg_predictItems.integer ) {
- return;
+ for( i = 0; i < 3; i++ )
+ {
+ out->origin[ i ] = prev->ps.origin[ i ] + f * ( next->ps.origin[ i ] - prev->ps.origin[ i ] );
+
+ if( !grabAngles )
+ out->viewangles[ i ] = LerpAngle( prev->ps.viewangles[ i ], next->ps.viewangles[ i ], f );
+
+ out->velocity[ i ] = prev->ps.velocity[ i ] +
+ f * (next->ps.velocity[ i ] - prev->ps.velocity[ i ] );
}
-/* if ( !BG_PlayerTouchesItem( &cg.predictedPlayerState, &cent->currentState, cg.time ) ) {
- return;
- }*/
-
- // never pick an item up twice in a prediction
- if ( cent->miscTime == cg.time ) {
- return;
- }
-
- // grab it
- BG_AddPredictableEventToPlayerstate( EV_ITEM_PICKUP, cent->currentState.modelindex , &cg.predictedPlayerState);
-
- // remove it from the frame so it won't be drawn
- cent->currentState.eFlags |= EF_NODRAW;
-
- // don't touch it again this prediction
- cent->miscTime = cg.time;
-
- // if its a weapon, give them some predicted ammo so the autoswitch will work
-/* if ( item->giType == IT_WEAPON ) {
- BG_packWeapon( item->giTag, cg.predictedPlayerState.stats );
- if ( ammo == 0 && clips == 0 ) {
- BG_packAmmoArray( item->giTag, cg.predictedPlayerState.ammo, cg.predictedPlayerState.powerups, 1, 0, 0 );
- }
- }*/
}
@@ -320,59 +289,51 @@ CG_TouchTriggerPrediction
Predict push triggers and items
=========================
*/
-static void CG_TouchTriggerPrediction( void ) {
- int i;
- trace_t trace;
+static void CG_TouchTriggerPrediction( void )
+{
+ int i;
+ trace_t trace;
entityState_t *ent;
- clipHandle_t cmodel;
- centity_t *cent;
- qboolean spectator;
+ clipHandle_t cmodel;
+ centity_t *cent;
+ qboolean spectator;
// dead clients don't activate triggers
- if ( cg.predictedPlayerState.stats[STAT_HEALTH] <= 0 ) {
+ if( cg.predictedPlayerState.stats[ STAT_HEALTH ] <= 0 )
return;
- }
spectator = ( cg.predictedPlayerState.pm_type == PM_SPECTATOR );
- if ( cg.predictedPlayerState.pm_type != PM_NORMAL && !spectator ) {
+ if( cg.predictedPlayerState.pm_type != PM_NORMAL && !spectator )
return;
- }
- for ( i = 0 ; i < cg_numTriggerEntities ; i++ ) {
+ for( i = 0; i < cg_numTriggerEntities; i++ )
+ {
cent = cg_triggerEntities[ i ];
ent = &cent->currentState;
- if ( ent->eType == ET_ITEM && !spectator ) {
- CG_TouchItem( cent );
+ if( ent->solid != SOLID_BMODEL )
continue;
- }
-
- if ( ent->solid != SOLID_BMODEL ) {
- continue;
- }
cmodel = trap_CM_InlineModel( ent->modelindex );
- if ( !cmodel ) {
+ if( !cmodel )
continue;
- }
trap_CM_BoxTrace( &trace, cg.predictedPlayerState.origin, cg.predictedPlayerState.origin,
- cg_pmove.mins, cg_pmove.maxs, cmodel, -1 );
+ cg_pmove.mins, cg_pmove.maxs, cmodel, -1 );
- if ( !trace.startsolid ) {
+ if( !trace.startsolid )
continue;
- }
- if ( ent->eType == ET_TELEPORT_TRIGGER ) {
+ if( ent->eType == ET_TELEPORT_TRIGGER )
cg.hyperspace = qtrue;
- } else if ( ent->eType == ET_PUSH_TRIGGER ) {
+ else if( ent->eType == ET_PUSH_TRIGGER )
BG_TouchJumpPad( &cg.predictedPlayerState, ent );
- }
}
// if we didn't touch a jump pad this pmove frame
- if ( cg.predictedPlayerState.jumppad_frame != cg.predictedPlayerState.pmove_framecount ) {
+ if( cg.predictedPlayerState.jumppad_frame != cg.predictedPlayerState.pmove_framecount )
+ {
cg.predictedPlayerState.jumppad_frame = 0;
cg.predictedPlayerState.jumppad_ent = 0;
}
@@ -406,7 +367,8 @@ We detect prediction errors and allow them to be decayed off over several frames
to ease the jerk.
=================
*/
-void CG_PredictPlayerState( void ) {
+void CG_PredictPlayerState( void )
+{
int cmdNum, current, i;
playerState_t oldPlayerState;
qboolean moved;
@@ -418,20 +380,23 @@ void CG_PredictPlayerState( void ) {
// if this is the first frame we must guarantee
// predictedPlayerState is valid even if there is some
// other error condition
- if ( !cg.validPPS ) {
+ if( !cg.validPPS )
+ {
cg.validPPS = qtrue;
cg.predictedPlayerState = cg.snap->ps;
}
// demo playback just copies the moves
- if ( cg.demoPlayback || (cg.snap->ps.pm_flags & PMF_FOLLOW) ) {
+ if( cg.demoPlayback || (cg.snap->ps.pm_flags & PMF_FOLLOW) )
+ {
CG_InterpolatePlayerState( qfalse );
return;
}
// non-predicting local movement will grab the latest angles
- if ( cg_nopredict.integer || cg_synchronousClients.integer ) {
+ if( cg_nopredict.integer || cg_synchronousClients.integer )
+ {
CG_InterpolatePlayerState( qtrue );
return;
}
@@ -441,33 +406,33 @@ void CG_PredictPlayerState( void ) {
cg_pmove.trace = CG_Trace;
cg_pmove.pointcontents = CG_PointContents;
- //TA: FIXME BIG NEON SIGN..... COULD MAYBE BE A FIX FOR THAT HACK IN bg_pmove.c.. MAYBE \/
- if ( cg_pmove.ps->pm_type == PM_DEAD ) {
+ if( cg_pmove.ps->pm_type == PM_DEAD )
cg_pmove.tracemask = MASK_PLAYERSOLID & ~CONTENTS_BODY;
- }
- else {
+ else
cg_pmove.tracemask = MASK_PLAYERSOLID;
- }
- if ( cg.snap->ps.persistant[PERS_TEAM] == TEAM_SPECTATOR ) {
+
+ if( cg.snap->ps.persistant[ PERS_TEAM ] == TEAM_SPECTATOR )
cg_pmove.tracemask &= ~CONTENTS_BODY; // spectators can fly through bodies
- }
+
cg_pmove.noFootsteps = ( cgs.dmflags & DF_NO_FOOTSTEPS ) > 0;
// save the state before the pmove so we can detect transitions
oldPlayerState = cg.predictedPlayerState;
- current = trap_GetCurrentCmdNumber();
+ current = trap_GetCurrentCmdNumber( );
// if we don't have the commands right after the snapshot, we
// can't accurately predict a current position, so just freeze at
// the last good position we had
cmdNum = current - CMD_BACKUP + 1;
trap_GetUserCmd( cmdNum, &oldestCmd );
- if ( oldestCmd.serverTime > cg.snap->ps.commandTime
- && oldestCmd.serverTime < cg.time ) { // special check for map_restart
- if ( cg_showmiss.integer ) {
- CG_Printf ("exceeded PACKET_BACKUP on commands\n");
- }
+
+ if( oldestCmd.serverTime > cg.snap->ps.commandTime &&
+ oldestCmd.serverTime < cg.time )
+ { // special check for map_restart
+ if( cg_showmiss.integer )
+ CG_Printf( "exceeded PACKET_BACKUP on commands\n" );
+
return;
}
@@ -478,92 +443,103 @@ void CG_PredictPlayerState( void ) {
// the server time is beyond our current cg.time,
// because predicted player positions are going to
// be ahead of everything else anyway
- if ( cg.nextSnap && !cg.nextFrameTeleport && !cg.thisFrameTeleport ) {
+ if( cg.nextSnap && !cg.nextFrameTeleport && !cg.thisFrameTeleport )
+ {
cg.predictedPlayerState = cg.nextSnap->ps;
cg.physicsTime = cg.nextSnap->serverTime;
- } else {
+ }
+ else
+ {
cg.predictedPlayerState = cg.snap->ps;
cg.physicsTime = cg.snap->serverTime;
}
- if ( pmove_msec.integer < 8 ) {
- trap_Cvar_Set("pmove_msec", "8");
- }
- else if (pmove_msec.integer > 33) {
- trap_Cvar_Set("pmove_msec", "33");
- }
+ if( pmove_msec.integer < 8 )
+ trap_Cvar_Set( "pmove_msec", "8" );
+ else if( pmove_msec.integer > 33 )
+ trap_Cvar_Set( "pmove_msec", "33" );
cg_pmove.pmove_fixed = pmove_fixed.integer;// | cg_pmove_fixed.integer;
cg_pmove.pmove_msec = pmove_msec.integer;
// run cmds
moved = qfalse;
- for ( cmdNum = current - CMD_BACKUP + 1 ; cmdNum <= current ; cmdNum++ ) {
+
+ for( cmdNum = current - CMD_BACKUP + 1; cmdNum <= current; cmdNum++ )
+ {
// get the command
trap_GetUserCmd( cmdNum, &cg_pmove.cmd );
- if ( cg_pmove.pmove_fixed ) {
+ if( cg_pmove.pmove_fixed )
PM_UpdateViewAngles( cg_pmove.ps, &cg_pmove.cmd );
- }
// don't do anything if the time is before the snapshot player time
- if ( cg_pmove.cmd.serverTime <= cg.predictedPlayerState.commandTime ) {
+ if( cg_pmove.cmd.serverTime <= cg.predictedPlayerState.commandTime )
continue;
- }
// don't do anything if the command was from a previous map_restart
- if ( cg_pmove.cmd.serverTime > latestCmd.serverTime ) {
+ if( cg_pmove.cmd.serverTime > latestCmd.serverTime )
continue;
- }
// check for a prediction error from last frame
// on a lan, this will often be the exact value
// from the snapshot, but on a wan we will have
// to predict several commands to get to the point
// we want to compare
- if ( cg.predictedPlayerState.commandTime == oldPlayerState.commandTime ) {
+ if( cg.predictedPlayerState.commandTime == oldPlayerState.commandTime )
+ {
vec3_t delta;
- float len;
+ float len;
- if ( cg.thisFrameTeleport ) {
+ if( cg.thisFrameTeleport )
+ {
// a teleport will not cause an error decay
VectorClear( cg.predictedError );
- if ( cg_showmiss.integer ) {
+
+ if( cg_showmiss.integer )
CG_Printf( "PredictionTeleport\n" );
- }
+
cg.thisFrameTeleport = qfalse;
- } else {
+ }
+ else
+ {
vec3_t adjusted;
CG_AdjustPositionForMover( cg.predictedPlayerState.origin,
cg.predictedPlayerState.groundEntityNum, cg.physicsTime, cg.oldTime, adjusted );
- if ( cg_showmiss.integer ) {
- if (!VectorCompare( oldPlayerState.origin, adjusted )) {
+ if( cg_showmiss.integer )
+ {
+ if( !VectorCompare( oldPlayerState.origin, adjusted ) )
CG_Printf("prediction error\n");
- }
}
+
VectorSubtract( oldPlayerState.origin, adjusted, delta );
len = VectorLength( delta );
- if ( len > 0.1 ) {
- if ( cg_showmiss.integer ) {
- CG_Printf("Prediction miss: %f\n", len);
- }
- if ( cg_errorDecay.integer ) {
+
+ if( len > 0.1 )
+ {
+ if( cg_showmiss.integer )
+ CG_Printf( "Prediction miss: %f\n", len );
+
+ if( cg_errorDecay.integer )
+ {
int t;
float f;
t = cg.time - cg.predictedErrorTime;
f = ( cg_errorDecay.value - t ) / cg_errorDecay.value;
- if ( f < 0 ) {
+
+ if( f < 0 )
f = 0;
- }
- if ( f > 0 && cg_showmiss.integer ) {
- CG_Printf("Double prediction decay: %f\n", f);
- }
+
+ if( f > 0 && cg_showmiss.integer )
+ CG_Printf( "Double prediction decay: %f\n", f );
+
VectorScale( cg.predictedError, f, cg.predictedError );
- } else {
- VectorClear( cg.predictedError );
}
+ else
+ VectorClear( cg.predictedError );
+
VectorAdd( delta, cg.predictedError, cg.predictedError );
cg.predictedErrorTime = cg.oldTime;
}
@@ -575,29 +551,29 @@ void CG_PredictPlayerState( void ) {
for( i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++ )
cg_pmove.autoWeaponHit[ i ] = qfalse;
- if ( cg_pmove.pmove_fixed ) {
- cg_pmove.cmd.serverTime = ((cg_pmove.cmd.serverTime + pmove_msec.integer-1) / pmove_msec.integer) * pmove_msec.integer;
- }
+ if( cg_pmove.pmove_fixed )
+ cg_pmove.cmd.serverTime = ( ( cg_pmove.cmd.serverTime + pmove_msec.integer - 1 ) /
+ pmove_msec.integer ) * pmove_msec.integer;
- Pmove (&cg_pmove);
+ Pmove( &cg_pmove );
moved = qtrue;
// add push trigger movement effects
- CG_TouchTriggerPrediction();
+ CG_TouchTriggerPrediction( );
// check for predictable events that changed from previous predictions
//CG_CheckChangedPredictableEvents(&cg.predictedPlayerState);
}
- if ( cg_showmiss.integer > 1 ) {
+ if( cg_showmiss.integer > 1 )
CG_Printf( "[%i : %i] ", cg_pmove.cmd.serverTime, cg.time );
- }
- if ( !moved ) {
- if ( cg_showmiss.integer ) {
+ if( !moved )
+ {
+ if( cg_showmiss.integer )
CG_Printf( "not moved\n" );
- }
+
return;
}
@@ -606,21 +582,21 @@ void CG_PredictPlayerState( void ) {
cg.predictedPlayerState.groundEntityNum,
cg.physicsTime, cg.time, cg.predictedPlayerState.origin );
- if ( cg_showmiss.integer ) {
- if (cg.predictedPlayerState.eventSequence > oldPlayerState.eventSequence + MAX_PS_EVENTS) {
- CG_Printf("WARNING: dropped event\n");
- }
+ if( cg_showmiss.integer )
+ {
+ if( cg.predictedPlayerState.eventSequence > oldPlayerState.eventSequence + MAX_PS_EVENTS )
+ CG_Printf( "WARNING: dropped event\n" );
}
// fire events and other transition triggered things
CG_TransitionPlayerState( &cg.predictedPlayerState, &oldPlayerState );
- if ( cg_showmiss.integer ) {
- if (cg.eventSequence > cg.predictedPlayerState.eventSequence) {
- CG_Printf("WARNING: double event\n");
+ if( cg_showmiss.integer )
+ {
+ if( cg.eventSequence > cg.predictedPlayerState.eventSequence )
+ {
+ CG_Printf( "WARNING: double event\n" );
cg.eventSequence = cg.predictedPlayerState.eventSequence;
}
}
}
-
-
diff --git a/src/cgame/cg_scanner.c b/src/cgame/cg_scanner.c
index bec5f195..4135eec9 100644
--- a/src/cgame/cg_scanner.c
+++ b/src/cgame/cg_scanner.c
@@ -113,7 +113,7 @@ static void CG_DrawDir( vec3_t origin, vec4_t colour )
CG_AlienSense
=============
*/
-void CG_AlienSense( )
+void CG_AlienSense( void )
{
int i;
vec3_t origin;
@@ -149,7 +149,7 @@ void CG_AlienSense( )
CG_Scanner
=============
*/
-void CG_Scanner( )
+void CG_Scanner( void )
{
int i;
vec3_t origin;
diff --git a/src/cgame/cg_servercmds.c b/src/cgame/cg_servercmds.c
index 4107cc49..88df68f2 100644
--- a/src/cgame/cg_servercmds.c
+++ b/src/cgame/cg_servercmds.c
@@ -19,60 +19,41 @@
#include "cg_local.h"
-#include "../../ui/menudef.h"
-
-typedef struct {
- const char *order;
- int taskNum;
-} orderTask_t;
-
-static const orderTask_t validOrders[] = {
- /*{ VOICECHAT_GETFLAG, TEAMTASK_OFFENSE },
- { VOICECHAT_OFFENSE, TEAMTASK_OFFENSE },
- { VOICECHAT_DEFEND, TEAMTASK_DEFENSE },
- { VOICECHAT_DEFENDFLAG, TEAMTASK_DEFENSE },
- { VOICECHAT_PATROL, TEAMTASK_PATROL },
- { VOICECHAT_CAMP, TEAMTASK_CAMP },
- { VOICECHAT_FOLLOWME, TEAMTASK_FOLLOW },
- { VOICECHAT_RETURNFLAG, TEAMTASK_RETRIEVE },
- { VOICECHAT_FOLLOWFLAGCARRIER, TEAMTASK_ESCORT }*/
- { NULL, 0 }
-};
-
-static const int numValidOrders = sizeof(validOrders) / sizeof(orderTask_t);
-
/*
=================
CG_ParseScores
=================
*/
-static void CG_ParseScores( void ) {
+static void CG_ParseScores( void )
+{
int i, powerups;
cg.numScores = atoi( CG_Argv( 1 ) );
- if ( cg.numScores > MAX_CLIENTS ) {
+
+ if( cg.numScores > MAX_CLIENTS )
cg.numScores = MAX_CLIENTS;
- }
- cg.teamScores[0] = atoi( CG_Argv( 2 ) );
- cg.teamScores[1] = atoi( CG_Argv( 3 ) );
+ cg.teamScores[ 0 ] = atoi( CG_Argv( 2 ) );
+ cg.teamScores[ 1 ] = atoi( CG_Argv( 3 ) );
memset( cg.scores, 0, sizeof( cg.scores ) );
- for ( i = 0 ; i < cg.numScores ; i++ ) {
+
+ for( i = 0; i < cg.numScores; i++ )
+ {
//
- cg.scores[i].client = atoi( CG_Argv( i * 4 + 4 ) );
- cg.scores[i].score = atoi( CG_Argv( i * 4 + 5 ) );
- cg.scores[i].ping = atoi( CG_Argv( i * 4 + 6 ) );
- cg.scores[i].time = atoi( CG_Argv( i * 4 + 7 ) );
+ cg.scores[ i ].client = atoi( CG_Argv( i * 4 + 4 ) );
+ cg.scores[ i ].score = atoi( CG_Argv( i * 4 + 5 ) );
+ cg.scores[ i ].ping = atoi( CG_Argv( i * 4 + 6 ) );
+ cg.scores[ i ].time = atoi( CG_Argv( i * 4 + 7 ) );
- if ( cg.scores[i].client < 0 || cg.scores[i].client >= MAX_CLIENTS ) {
- cg.scores[i].client = 0;
- }
- cgs.clientinfo[ cg.scores[i].client ].score = cg.scores[i].score;
- cgs.clientinfo[ cg.scores[i].client ].powerups = powerups;
+ if( cg.scores[ i ].client < 0 || cg.scores[ i ].client >= MAX_CLIENTS )
+ cg.scores[ i ].client = 0;
+
+ cgs.clientinfo[ cg.scores[ i ].client ].score = cg.scores[ i ].score;
+ cgs.clientinfo[ cg.scores[ i ].client ].powerups = powerups;
- cg.scores[i].team = cgs.clientinfo[cg.scores[i].client].team;
+ cg.scores[ i ].team = cgs.clientinfo[ cg.scores[ i ].client ].team;
}
}
@@ -82,16 +63,18 @@ CG_ParseTeamInfo
=================
*/
-static void CG_ParseTeamInfo( void ) {
+static void CG_ParseTeamInfo( void )
+{
int i;
int client;
numSortedTeamPlayers = atoi( CG_Argv( 1 ) );
- for ( i = 0 ; i < numSortedTeamPlayers ; i++ ) {
+ for( i = 0; i < numSortedTeamPlayers; i++ )
+ {
client = atoi( CG_Argv( i * 6 + 2 ) );
- sortedTeamPlayers[i] = client;
+ sortedTeamPlayers[ i ] = client;
cgs.clientinfo[ client ].location = atoi( CG_Argv( i * 6 + 3 ) );
cgs.clientinfo[ client ].health = atoi( CG_Argv( i * 6 + 4 ) );
@@ -110,23 +93,18 @@ This is called explicitly when the gamestate is first received,
and whenever the server updates any serverinfo flagged cvars
================
*/
-void CG_ParseServerinfo( void ) {
+void CG_ParseServerinfo( void )
+{
const char *info;
char *mapname;
info = CG_ConfigString( CS_SERVERINFO );
cgs.dmflags = atoi( Info_ValueForKey( info, "dmflags" ) );
cgs.teamflags = atoi( Info_ValueForKey( info, "teamflags" ) );
- cgs.fraglimit = atoi( Info_ValueForKey( info, "fraglimit" ) );
- cgs.capturelimit = atoi( Info_ValueForKey( info, "capturelimit" ) );
cgs.timelimit = atoi( Info_ValueForKey( info, "timelimit" ) );
cgs.maxclients = atoi( Info_ValueForKey( info, "sv_maxclients" ) );
mapname = Info_ValueForKey( info, "mapname" );
Com_sprintf( cgs.mapname, sizeof( cgs.mapname ), "maps/%s.bsp", mapname );
- Q_strncpyz( cgs.redTeam, Info_ValueForKey( info, "g_redTeam" ), sizeof(cgs.redTeam) );
- trap_Cvar_Set("g_redTeam", cgs.redTeam);
- Q_strncpyz( cgs.blueTeam, Info_ValueForKey( info, "g_blueTeam" ), sizeof(cgs.blueTeam) );
- trap_Cvar_Set("g_blueTeam", cgs.blueTeam);
}
/*
@@ -134,20 +112,21 @@ void CG_ParseServerinfo( void ) {
CG_ParseWarmup
==================
*/
-static void CG_ParseWarmup( void ) {
+static void CG_ParseWarmup( void )
+{
const char *info;
- int warmup;
+ int warmup;
info = CG_ConfigString( CS_WARMUP );
warmup = atoi( info );
cg.warmupCount = -1;
- if ( warmup == 0 && cg.warmup ) {
-
- } else if ( warmup > 0 && cg.warmup <= 0 ) {
- trap_S_StartLocalSound( cgs.media.countPrepareSound, CHAN_ANNOUNCER );
+ if( warmup == 0 && cg.warmup )
+ {
}
+ else if( warmup > 0 && cg.warmup <= 0 )
+ trap_S_StartLocalSound( cgs.media.countPrepareSound, CHAN_ANNOUNCER );
cg.warmup = warmup;
}
@@ -185,38 +164,48 @@ void CG_SetConfigValues( void )
CG_ShaderStateChanged
=====================
*/
-void CG_ShaderStateChanged(void) {
- char originalShader[MAX_QPATH];
- char newShader[MAX_QPATH];
- char timeOffset[16];
- const char *o;
- char *n,*t;
+void CG_ShaderStateChanged( void )
+{
+ char originalShader[ MAX_QPATH ];
+ char newShader[ MAX_QPATH ];
+ char timeOffset[ 16 ];
+ const char *o;
+ char *n, *t;
o = CG_ConfigString( CS_SHADERSTATE );
- while (o && *o) {
- n = strstr(o, "=");
- if (n && *n) {
- strncpy(originalShader, o, n-o);
- originalShader[n-o] = 0;
+
+ while( o && *o )
+ {
+ n = strstr( o, "=" );
+
+ if( n && *n )
+ {
+ strncpy( originalShader, o, n - o );
+ originalShader[ n - o ] = 0;
n++;
- t = strstr(n, ":");
- if (t && *t) {
- strncpy(newShader, n, t-n);
- newShader[t-n] = 0;
- } else {
- break;
+ t = strstr( n, ":" );
+
+ if( t && *t )
+ {
+ strncpy( newShader, n, t - n );
+ newShader[ t - n ] = 0;
}
+ else
+ break;
+
t++;
- o = strstr(t, "@");
- if (o) {
- strncpy(timeOffset, t, o-t);
- timeOffset[o-t] = 0;
+ o = strstr( t, "@" );
+
+ if( o )
+ {
+ strncpy( timeOffset, t, o - t );
+ timeOffset[ o - t ] = 0;
o++;
trap_R_RemapShader( originalShader, newShader, timeOffset );
}
- } else {
- break;
}
+ else
+ break;
}
}
@@ -254,9 +243,10 @@ CG_ConfigStringModified
================
*/
-static void CG_ConfigStringModified( void ) {
+static void CG_ConfigStringModified( void )
+{
const char *str;
- int num;
+ int num;
num = atoi( CG_Argv( 1 ) );
@@ -268,23 +258,23 @@ static void CG_ConfigStringModified( void ) {
str = CG_ConfigString( num );
// do something with it if necessary
- if ( num == CS_MUSIC ) {
- CG_StartMusic();
- } else if ( num == CS_SERVERINFO ) {
- CG_ParseServerinfo();
- } else if ( num == CS_WARMUP ) {
- CG_ParseWarmup();
- } else if ( num == CS_SCORES1 ) {
+ if( num == CS_MUSIC )
+ CG_StartMusic( );
+ else if( num == CS_SERVERINFO )
+ CG_ParseServerinfo( );
+ else if( num == CS_WARMUP )
+ CG_ParseWarmup( );
+ else if( num == CS_SCORES1 )
cgs.scores1 = atoi( str );
- } else if ( num == CS_SCORES2 ) {
+ else if( num == CS_SCORES2 )
cgs.scores2 = atoi( str );
- } else if( num == CS_BUILDPOINTS ) {
+ else if( num == CS_BUILDPOINTS )
sscanf( str, "%d %d %d %d %d", &cgs.alienBuildPoints,
&cgs.alienBuildPointsTotal,
&cgs.humanBuildPoints,
&cgs.humanBuildPointsTotal,
&cgs.humanBuildPointsPowered );
- } else if( num == CS_STAGES )
+ else if( num == CS_STAGES )
{
stage_t oldAlienStage = cgs.alienStage;
stage_t oldHumanStage = cgs.humanStage;
@@ -297,49 +287,67 @@ static void CG_ConfigStringModified( void ) {
if( cgs.humanStage != oldHumanStage )
CG_AnnounceHumanStageTransistion( oldHumanStage, cgs.humanStage );
}
- else if ( num == CS_LEVEL_START_TIME ) {
+ else if( num == CS_LEVEL_START_TIME )
cgs.levelStartTime = atoi( str );
- } else if ( num == CS_VOTE_TIME ) {
+ else if( num == CS_VOTE_TIME )
+ {
cgs.voteTime = atoi( str );
cgs.voteModified = qtrue;
- } else if ( num == CS_VOTE_YES ) {
+ }
+ else if( num == CS_VOTE_YES )
+ {
cgs.voteYes = atoi( str );
cgs.voteModified = qtrue;
- } else if ( num == CS_VOTE_NO ) {
+ }
+ else if( num == CS_VOTE_NO )
+ {
cgs.voteNo = atoi( str );
cgs.voteModified = qtrue;
- } else if ( num == CS_VOTE_STRING ) {
+ }
+ else if( num == CS_VOTE_STRING )
Q_strncpyz( cgs.voteString, str, sizeof( cgs.voteString ) );
- } else if ( num >= CS_TEAMVOTE_TIME && num <= CS_TEAMVOTE_TIME + 1) {
- cgs.teamVoteTime[num-CS_TEAMVOTE_TIME] = atoi( str );
- cgs.teamVoteModified[num-CS_TEAMVOTE_TIME] = qtrue;
- } else if ( num >= CS_TEAMVOTE_YES && num <= CS_TEAMVOTE_YES + 1) {
- cgs.teamVoteYes[num-CS_TEAMVOTE_YES] = atoi( str );
- cgs.teamVoteModified[num-CS_TEAMVOTE_YES] = qtrue;
- } else if ( num >= CS_TEAMVOTE_NO && num <= CS_TEAMVOTE_NO + 1) {
- cgs.teamVoteNo[num-CS_TEAMVOTE_NO] = atoi( str );
- cgs.teamVoteModified[num-CS_TEAMVOTE_NO] = qtrue;
- } else if ( num >= CS_TEAMVOTE_STRING && num <= CS_TEAMVOTE_STRING + 1) {
- Q_strncpyz( cgs.teamVoteString[num-CS_TEAMVOTE_STRING], str, sizeof( cgs.teamVoteString ) );
- } else if ( num == CS_INTERMISSION ) {
+ else if( num >= CS_TEAMVOTE_TIME && num <= CS_TEAMVOTE_TIME + 1 )
+ {
+ cgs.teamVoteTime[ num - CS_TEAMVOTE_TIME ] = atoi( str );
+ cgs.teamVoteModified[ num - CS_TEAMVOTE_TIME ] = qtrue;
+ }
+ else if( num >= CS_TEAMVOTE_YES && num <= CS_TEAMVOTE_YES + 1 )
+ {
+ cgs.teamVoteYes[ num - CS_TEAMVOTE_YES ] = atoi( str );
+ cgs.teamVoteModified[ num - CS_TEAMVOTE_YES ] = qtrue;
+ }
+ else if( num >= CS_TEAMVOTE_NO && num <= CS_TEAMVOTE_NO + 1 )
+ {
+ cgs.teamVoteNo[ num - CS_TEAMVOTE_NO ] = atoi( str );
+ cgs.teamVoteModified[ num - CS_TEAMVOTE_NO ] = qtrue;
+ }
+ else if( num >= CS_TEAMVOTE_STRING && num <= CS_TEAMVOTE_STRING + 1 )
+ Q_strncpyz( cgs.teamVoteString[ num - CS_TEAMVOTE_STRING ], str, sizeof( cgs.teamVoteString ) );
+ else if( num == CS_INTERMISSION )
cg.intermissionStarted = atoi( str );
- } else if ( num >= CS_MODELS && num < CS_MODELS+MAX_MODELS ) {
- cgs.gameModels[ num-CS_MODELS ] = trap_R_RegisterModel( str );
- } else if ( num >= CS_SHADERS && num < CS_SHADERS+MAX_SHADERS ) {
- cgs.gameShaders[ num-CS_SHADERS ] = trap_R_RegisterShader( str );
- } else if ( num >= CS_SOUNDS && num < CS_SOUNDS+MAX_SOUNDS ) {
- if ( str[0] != '*' ) { // player specific sounds don't register here
- cgs.gameSounds[ num-CS_SOUNDS] = trap_S_RegisterSound( str, qfalse );
+ else if( num >= CS_MODELS && num < CS_MODELS+MAX_MODELS )
+ cgs.gameModels[ num - CS_MODELS ] = trap_R_RegisterModel( str );
+ else if( num >= CS_SHADERS && num < CS_SHADERS+MAX_SHADERS )
+ cgs.gameShaders[ num - CS_SHADERS ] = trap_R_RegisterShader( str );
+ else if( num >= CS_SOUNDS && num < CS_SOUNDS+MAX_SOUNDS )
+ {
+ if( str[ 0 ] != '*' )
+ { // player specific sounds don't register here
+ cgs.gameSounds[ num - CS_SOUNDS ] = trap_S_RegisterSound( str, qfalse );
}
- } else if ( num >= CS_PLAYERS && num < CS_PLAYERS+MAX_CLIENTS ) {
+ }
+ else if( num >= CS_PLAYERS && num < CS_PLAYERS+MAX_CLIENTS )
+ {
CG_NewClientInfo( num - CS_PLAYERS );
- CG_BuildSpectatorString();
- } else if ( num == CS_FLAGSTATUS ) {
+ CG_BuildSpectatorString( );
}
- else if ( num == CS_SHADERSTATE ) {
- CG_ShaderStateChanged();
+ else if( num == CS_FLAGSTATUS )
+ {
+ }
+ else if( num == CS_SHADERSTATE )
+ {
+ CG_ShaderStateChanged( );
}
-
}
@@ -349,19 +357,20 @@ CG_AddToTeamChat
=======================
*/
-static void CG_AddToTeamChat( const char *str ) {
- int len;
- char *p, *ls;
- int lastcolor;
- int chatHeight;
+static void CG_AddToTeamChat( const char *str )
+{
+ int len;
+ char *p, *ls;
+ int lastcolor;
+ int chatHeight;
- if (cg_teamChatHeight.integer < TEAMCHAT_HEIGHT) {
+ if( cg_teamChatHeight.integer < TEAMCHAT_HEIGHT )
chatHeight = cg_teamChatHeight.integer;
- } else {
+ else
chatHeight = TEAMCHAT_HEIGHT;
- }
- if (chatHeight <= 0 || cg_teamChatTime.integer <= 0) {
+ if( chatHeight <= 0 || cg_teamChatTime.integer <= 0 )
+ {
// team chat disabled, dump into normal chat
cgs.teamChatPos = cgs.teamLastChatPos = 0;
return;
@@ -375,19 +384,23 @@ static void CG_AddToTeamChat( const char *str ) {
lastcolor = '7';
ls = NULL;
- while (*str) {
- if (len > TEAMCHAT_WIDTH - 1) {
- if (ls) {
- str -= (p - ls);
+ while( *str )
+ {
+ if( len > TEAMCHAT_WIDTH - 1 )
+ {
+ if( ls )
+ {
+ str -= ( p - ls );
str++;
- p -= (p - ls);
+ p -= ( p - ls );
}
+
*p = 0;
- cgs.teamChatMsgTimes[cgs.teamChatPos % chatHeight] = cg.time;
+ cgs.teamChatMsgTimes[ cgs.teamChatPos % chatHeight ] = cg.time;
cgs.teamChatPos++;
- p = cgs.teamChatMsgs[cgs.teamChatPos % chatHeight];
+ p = cgs.teamChatMsgs[ cgs.teamChatPos % chatHeight ];
*p = 0;
*p++ = Q_COLOR_ESCAPE;
*p++ = lastcolor;
@@ -395,24 +408,26 @@ static void CG_AddToTeamChat( const char *str ) {
ls = NULL;
}
- if ( Q_IsColorString( str ) ) {
+ if( Q_IsColorString( str ) )
+ {
*p++ = *str++;
lastcolor = *str;
*p++ = *str++;
continue;
}
- if (*str == ' ') {
+
+ if( *str == ' ' )
ls = p;
- }
+
*p++ = *str++;
len++;
}
*p = 0;
- cgs.teamChatMsgTimes[cgs.teamChatPos % chatHeight] = cg.time;
+ cgs.teamChatMsgTimes[ cgs.teamChatPos % chatHeight ] = cg.time;
cgs.teamChatPos++;
- if (cgs.teamChatPos - cgs.teamLastChatPos > chatHeight)
+ if( cgs.teamChatPos - cgs.teamLastChatPos > chatHeight )
cgs.teamLastChatPos = cgs.teamChatPos - chatHeight;
}
@@ -429,16 +444,16 @@ A tournement restart will clear everything, but doesn't
require a reload of all the media
===============
*/
-static void CG_MapRestart( void ) {
- if ( cg_showmiss.integer ) {
+static void CG_MapRestart( void )
+{
+ if( cg_showmiss.integer )
CG_Printf( "CG_MapRestart\n" );
- }
- CG_InitLocalEntities();
- CG_InitMarkPolys();
+ CG_InitLocalEntities( );
+ CG_InitMarkPolys( );
// Ridah, trails
- CG_ClearTrails ();
+ CG_ClearTrails( );
// done.
// make sure the "3 frags left" warnings play again
@@ -452,9 +467,9 @@ static void CG_MapRestart( void ) {
cg.mapRestart = qtrue;
- CG_StartMusic();
+ CG_StartMusic( );
- trap_S_ClearLoopingSounds(qtrue);
+ trap_S_ClearLoopingSounds( qtrue );
// we really should clear more parts of cg here and stop sounds
@@ -462,470 +477,10 @@ static void CG_MapRestart( void ) {
if( cg.warmup == 0 )
{
trap_S_StartLocalSound( cgs.media.countFightSound, CHAN_ANNOUNCER );
- CG_CenterPrint( "FIGHT!", 120, GIANTCHAR_WIDTH*2 );
- }
- trap_Cvar_Set("cg_thirdPerson", "0");
-}
-
-#define MAX_VOICEFILESIZE 16384
-#define MAX_VOICEFILES 8
-#define MAX_VOICECHATS 64
-#define MAX_VOICESOUNDS 64
-#define MAX_CHATSIZE 64
-#define MAX_HEADMODELS 64
-
-typedef struct voiceChat_s
-{
- char id[64];
- int numSounds;
- sfxHandle_t sounds[MAX_VOICESOUNDS];
- char chats[MAX_VOICESOUNDS][MAX_CHATSIZE];
-} voiceChat_t;
-
-typedef struct voiceChatList_s
-{
- char name[64];
- int gender;
- int numVoiceChats;
- voiceChat_t voiceChats[MAX_VOICECHATS];
-} voiceChatList_t;
-
-typedef struct headModelVoiceChat_s
-{
- char headmodel[64];
- int voiceChatNum;
-} headModelVoiceChat_t;
-
-voiceChatList_t voiceChatLists[MAX_VOICEFILES];
-headModelVoiceChat_t headModelVoiceChat[MAX_HEADMODELS];
-
-/*
-=================
-CG_ParseVoiceChats
-=================
-*/
-int CG_ParseVoiceChats( const char *filename, voiceChatList_t *voiceChatList, int maxVoiceChats ) {
- int len, i;
- fileHandle_t f;
- char buf[MAX_VOICEFILESIZE];
- char **p, *ptr;
- char *token;
- voiceChat_t *voiceChats;
- qboolean compress;
-
- compress = qtrue;
- if (cg_buildScript.integer) {
- compress = qfalse;
- }
-
- len = trap_FS_FOpenFile( filename, &f, FS_READ );
- if ( !f ) {
- //trap_Print( va( S_COLOR_RED "voice chat file not found: %s\n", filename ) );
- return qfalse;
- }
- if ( len >= MAX_VOICEFILESIZE ) {
- trap_Print( va( S_COLOR_RED "voice chat file too large: %s is %i, max allowed is %i", filename, len, MAX_VOICEFILESIZE ) );
- trap_FS_FCloseFile( f );
- return qfalse;
- }
-
- trap_FS_Read( buf, len, f );
- buf[len] = 0;
- trap_FS_FCloseFile( f );
-
- ptr = buf;
- p = &ptr;
-
- Com_sprintf(voiceChatList->name, sizeof(voiceChatList->name), "%s", filename);
- voiceChats = voiceChatList->voiceChats;
- for ( i = 0; i < maxVoiceChats; i++ ) {
- voiceChats[i].id[0] = 0;
- }
- token = COM_ParseExt(p, qtrue);
- if (!token || token[0] == 0) {
- return qtrue;
- }
- if (!Q_stricmp(token, "female")) {
- voiceChatList->gender = GENDER_FEMALE;
- }
- else if (!Q_stricmp(token, "male")) {
- voiceChatList->gender = GENDER_MALE;
- }
- else if (!Q_stricmp(token, "neuter")) {
- voiceChatList->gender = GENDER_NEUTER;
- }
- else {
- trap_Print( va( S_COLOR_RED "expected gender not found in voice chat file: %s\n", filename ) );
- return qfalse;
- }
-
- voiceChatList->numVoiceChats = 0;
- while ( 1 ) {
- token = COM_ParseExt(p, qtrue);
- if (!token || token[0] == 0) {
- return qtrue;
- }
- Com_sprintf(voiceChats[voiceChatList->numVoiceChats].id, sizeof( voiceChats[voiceChatList->numVoiceChats].id ), "%s", token);
- token = COM_ParseExt(p, qtrue);
- if (Q_stricmp(token, "{")) {
- trap_Print( va( S_COLOR_RED "expected { found %s in voice chat file: %s\n", token, filename ) );
- return qfalse;
- }
- voiceChats[voiceChatList->numVoiceChats].numSounds = 0;
- while(1) {
- token = COM_ParseExt(p, qtrue);
- if (!token || token[0] == 0) {
- return qtrue;
- }
- if (!Q_stricmp(token, "}"))
- break;
- voiceChats[voiceChatList->numVoiceChats].sounds[voiceChats[voiceChatList->numVoiceChats].numSounds] =
- trap_S_RegisterSound( token , compress );
- token = COM_ParseExt(p, qtrue);
- if (!token || token[0] == 0) {
- return qtrue;
- }
- Com_sprintf(voiceChats[voiceChatList->numVoiceChats].chats[
- voiceChats[voiceChatList->numVoiceChats].numSounds], MAX_CHATSIZE, "%s", token);
- voiceChats[voiceChatList->numVoiceChats].numSounds++;
- if (voiceChats[voiceChatList->numVoiceChats].numSounds >= MAX_VOICESOUNDS)
- break;
- }
- voiceChatList->numVoiceChats++;
- if (voiceChatList->numVoiceChats >= maxVoiceChats)
- return qtrue;
- }
- return qtrue;
-}
-
-/*
-=================
-CG_LoadVoiceChats
-=================
-*/
-void CG_LoadVoiceChats( void ) {
- int size;
-
- size = trap_MemoryRemaining();
- CG_ParseVoiceChats( "scripts/female1.voice", &voiceChatLists[0], MAX_VOICECHATS );
- CG_ParseVoiceChats( "scripts/female2.voice", &voiceChatLists[1], MAX_VOICECHATS );
- CG_ParseVoiceChats( "scripts/female3.voice", &voiceChatLists[2], MAX_VOICECHATS );
- CG_ParseVoiceChats( "scripts/male1.voice", &voiceChatLists[3], MAX_VOICECHATS );
- CG_ParseVoiceChats( "scripts/male2.voice", &voiceChatLists[4], MAX_VOICECHATS );
- CG_ParseVoiceChats( "scripts/male3.voice", &voiceChatLists[5], MAX_VOICECHATS );
- CG_ParseVoiceChats( "scripts/male4.voice", &voiceChatLists[6], MAX_VOICECHATS );
- CG_ParseVoiceChats( "scripts/male5.voice", &voiceChatLists[7], MAX_VOICECHATS );
- CG_Printf("voice chat memory size = %d\n", size - trap_MemoryRemaining());
-}
-
-/*
-=================
-CG_HeadModelVoiceChats
-=================
-*/
-int CG_HeadModelVoiceChats( char *filename ) {
- int len, i;
- fileHandle_t f;
- char buf[MAX_VOICEFILESIZE];
- char **p, *ptr;
- char *token;
-
- len = trap_FS_FOpenFile( filename, &f, FS_READ );
- if ( !f ) {
- trap_Print( va( "voice chat file not found: %s\n", filename ) );
- return -1;
- }
- if ( len >= MAX_VOICEFILESIZE ) {
- trap_Print( va( S_COLOR_RED "voice chat file too large: %s is %i, max allowed is %i", filename, len, MAX_VOICEFILESIZE ) );
- trap_FS_FCloseFile( f );
- return -1;
- }
-
- trap_FS_Read( buf, len, f );
- buf[len] = 0;
- trap_FS_FCloseFile( f );
-
- ptr = buf;
- p = &ptr;
-
- token = COM_ParseExt(p, qtrue);
- if (!token || token[0] == 0) {
- return -1;
- }
-
- for ( i = 0; i < MAX_VOICEFILES; i++ ) {
- if ( !Q_stricmp(token, voiceChatLists[i].name) ) {
- return i;
- }
- }
-
- //FIXME: maybe try to load the .voice file which name is stored in token?
-
- return -1;
-}
-
-/*
-=================
-CG_GetVoiceChat
-=================
-*/
-int CG_GetVoiceChat( voiceChatList_t *voiceChatList, const char *id, sfxHandle_t *snd, char **chat) {
- int i, rnd;
-
- for ( i = 0; i < voiceChatList->numVoiceChats; i++ ) {
- if ( !Q_stricmp( id, voiceChatList->voiceChats[i].id ) ) {
- rnd = random() * voiceChatList->voiceChats[i].numSounds;
- *snd = voiceChatList->voiceChats[i].sounds[rnd];
- *chat = voiceChatList->voiceChats[i].chats[rnd];
- return qtrue;
- }
+ CG_CenterPrint( "FIGHT!", 120, GIANTCHAR_WIDTH * 2 );
}
- return qfalse;
-}
-
-/*
-=================
-CG_VoiceChatListForClient
-=================
-*/
-voiceChatList_t *CG_VoiceChatListForClient( int clientNum ) {
- clientInfo_t *ci;
- int voiceChatNum, i, j, k, gender;
- char filename[MAX_QPATH], headModelName[MAX_QPATH];
- if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
- clientNum = 0;
- }
- ci = &cgs.clientinfo[ clientNum ];
-
- for ( k = 0; k < 2; k++ ) {
- if ( k == 0 ) {
- if (ci->headModelName[0] == '*') {
- Com_sprintf( headModelName, sizeof(headModelName), "%s/%s", ci->headModelName+1, ci->headSkinName );
- }
- else {
- Com_sprintf( headModelName, sizeof(headModelName), "%s/%s", ci->headModelName, ci->headSkinName );
- }
- }
- else {
- if (ci->headModelName[0] == '*') {
- Com_sprintf( headModelName, sizeof(headModelName), "%s", ci->headModelName+1 );
- }
- else {
- Com_sprintf( headModelName, sizeof(headModelName), "%s", ci->headModelName );
- }
- }
- // find the voice file for the head model the client uses
- for ( i = 0; i < MAX_HEADMODELS; i++ ) {
- if (!Q_stricmp(headModelVoiceChat[i].headmodel, headModelName)) {
- break;
- }
- }
- if (i < MAX_HEADMODELS) {
- return &voiceChatLists[headModelVoiceChat[i].voiceChatNum];
- }
- // find a <headmodelname>.vc file
- for ( i = 0; i < MAX_HEADMODELS; i++ ) {
- if (!strlen(headModelVoiceChat[i].headmodel)) {
- Com_sprintf(filename, sizeof(filename), "scripts/%s.vc", headModelName);
- voiceChatNum = CG_HeadModelVoiceChats(filename);
- if (voiceChatNum == -1)
- break;
- Com_sprintf(headModelVoiceChat[i].headmodel, sizeof ( headModelVoiceChat[i].headmodel ),
- "%s", headModelName);
- headModelVoiceChat[i].voiceChatNum = voiceChatNum;
- return &voiceChatLists[headModelVoiceChat[i].voiceChatNum];
- }
- }
- }
- gender = ci->gender;
- for (k = 0; k < 2; k++) {
- // just pick the first with the right gender
- for ( i = 0; i < MAX_VOICEFILES; i++ ) {
- if (strlen(voiceChatLists[i].name)) {
- if (voiceChatLists[i].gender == gender) {
- // store this head model with voice chat for future reference
- for ( j = 0; j < MAX_HEADMODELS; j++ ) {
- if (!strlen(headModelVoiceChat[j].headmodel)) {
- Com_sprintf(headModelVoiceChat[j].headmodel, sizeof ( headModelVoiceChat[j].headmodel ),
- "%s", headModelName);
- headModelVoiceChat[j].voiceChatNum = i;
- break;
- }
- }
- return &voiceChatLists[i];
- }
- }
- }
- // fall back to male gender because we don't have neuter in the mission pack
- if (gender == GENDER_MALE)
- break;
- gender = GENDER_MALE;
- }
- // store this head model with voice chat for future reference
- for ( j = 0; j < MAX_HEADMODELS; j++ ) {
- if (!strlen(headModelVoiceChat[j].headmodel)) {
- Com_sprintf(headModelVoiceChat[j].headmodel, sizeof ( headModelVoiceChat[j].headmodel ),
- "%s", headModelName);
- headModelVoiceChat[j].voiceChatNum = 0;
- break;
- }
- }
- // just return the first voice chat list
- return &voiceChatLists[0];
-}
-
-#define MAX_VOICECHATBUFFER 32
-
-typedef struct bufferedVoiceChat_s
-{
- int clientNum;
- sfxHandle_t snd;
- int voiceOnly;
- char cmd[MAX_SAY_TEXT];
- char message[MAX_SAY_TEXT];
-} bufferedVoiceChat_t;
-
-bufferedVoiceChat_t voiceChatBuffer[MAX_VOICECHATBUFFER];
-
-/*
-=================
-CG_PlayVoiceChat
-=================
-*/
-void CG_PlayVoiceChat( bufferedVoiceChat_t *vchat ) {
-#ifdef MISSIONPACK
- // if we are going into the intermission, don't start any voices
- if ( cg.intermissionStarted ) {
- return;
- }
-
- if ( !cg_noVoiceChats.integer ) {
- trap_S_StartLocalSound( vchat->snd, CHAN_VOICE);
- }
- if (!vchat->voiceOnly && !cg_noVoiceText.integer) {
- CG_AddToTeamChat( vchat->message );
- CG_Printf( "%s\n", vchat->message );
- }
- voiceChatBuffer[cg.voiceChatBufferOut].snd = 0;
-#endif
-}
-
-/*
-=====================
-CG_PlayBufferedVoiceChats
-=====================
-*/
-void CG_PlayBufferedVoiceChats( void ) {
-#ifdef MISSIONPACK
- if ( voiceChatTime < cg.time ) {
- if (voiceChatBufferOut != voiceChatBufferIn && voiceChatBuffer[voiceChatBufferOut].snd) {
- //
- CG_PlayVoiceChat(&voiceChatBuffer[voiceChatBufferOut]);
- //
- voiceChatBufferOut = (voiceChatBufferOut + 1) % MAX_VOICECHATBUFFER;
- voiceChatTime = cg.time + 1000;
- }
- }
-#endif
-}
-
-/*
-=====================
-CG_AddBufferedVoiceChat
-=====================
-*/
-void CG_AddBufferedVoiceChat( bufferedVoiceChat_t *vchat ) {
-#ifdef MISSIONPACK
- // if we are going into the intermission, don't start any voices
- if ( cg.intermissionStarted ) {
- return;
- }
-
- memcpy(&voiceChatBuffer[cg.voiceChatBufferIn], vchat, sizeof(bufferedVoiceChat_t));
- cg.voiceChatBufferIn = (cg.voiceChatBufferIn + 1) % MAX_VOICECHATBUFFER;
- if (cg.voiceChatBufferIn == cg.voiceChatBufferOut) {
- CG_PlayVoiceChat( &voiceChatBuffer[cg.voiceChatBufferOut] );
- cg.voiceChatBufferOut++;
- }
-#endif
-}
-
-/*
-=================
-CG_VoiceChatLocal
-=================
-*/
-void CG_VoiceChatLocal( int mode, qboolean voiceOnly, int clientNum, int color, const char *cmd ) {
-#ifdef MISSIONPACK
- char *chat;
- voiceChatList_t *voiceChatList;
- clientInfo_t *ci;
- sfxHandle_t snd;
- bufferedVoiceChat_t vchat;
-
- // if we are going into the intermission, don't start any voices
- if ( cg.intermissionStarted ) {
- return;
- }
-
- if ( clientNum < 0 || clientNum >= MAX_CLIENTS ) {
- clientNum = 0;
- }
- ci = &cgs.clientinfo[ clientNum ];
-
- cgs.currentVoiceClient = clientNum;
-
- voiceChatList = CG_VoiceChatListForClient( clientNum );
-
- if ( CG_GetVoiceChat( voiceChatList, cmd, &snd, &chat ) ) {
- //
- if ( mode == SAY_TEAM || !cg_teamChatsOnly.integer ) {
- vchat.clientNum = clientNum;
- vchat.snd = snd;
- vchat.voiceOnly = voiceOnly;
- Q_strncpyz(vchat.cmd, cmd, sizeof(vchat.cmd));
- if ( mode == SAY_TELL ) {
- Com_sprintf(vchat.message, sizeof(vchat.message), "[%s]: %c%c%s", ci->name, Q_COLOR_ESCAPE, color, chat);
- }
- else if ( mode == SAY_TEAM ) {
- Com_sprintf(vchat.message, sizeof(vchat.message), "(%s): %c%c%s", ci->name, Q_COLOR_ESCAPE, color, chat);
- }
- else {
- Com_sprintf(vchat.message, sizeof(vchat.message), "%s: %c%c%s", ci->name, Q_COLOR_ESCAPE, color, chat);
- }
- CG_AddBufferedVoiceChat(&vchat);
- }
- }
-#endif
-}
-
-/*
-=================
-CG_VoiceChat
-=================
-*/
-void CG_VoiceChat( int mode ) {
-#ifdef MISSIONPACK
- const char *cmd;
- int clientNum, color;
- qboolean voiceOnly;
-
- voiceOnly = atoi(CG_Argv(1));
- clientNum = atoi(CG_Argv(2));
- color = atoi(CG_Argv(3));
- cmd = CG_Argv(4);
-
- if (cg_noTaunt.integer != 0) {
- /*if (!strcmp(cmd, VOICECHAT_KILLINSULT) || !strcmp(cmd, VOICECHAT_TAUNT) || \
- !strcmp(cmd, VOICECHAT_DEATHINSULT) || !strcmp(cmd, VOICECHAT_KILLGAUNTLET) || \
- !strcmp(cmd, VOICECHAT_PRAISE)) {
- return;
- }*/
- }
-
- CG_VoiceChatLocal( mode, voiceOnly, clientNum, color, cmd );
-#endif
+ trap_Cvar_Set( "cg_thirdPerson", "0" );
}
/*
@@ -933,16 +488,20 @@ void CG_VoiceChat( int mode ) {
CG_RemoveChatEscapeChar
=================
*/
-static void CG_RemoveChatEscapeChar( char *text ) {
+static void CG_RemoveChatEscapeChar( char *text )
+{
int i, l;
l = 0;
- for ( i = 0; text[i]; i++ ) {
- if (text[i] == '\x19')
+ for( i = 0; text[ i ]; i++ )
+ {
+ if( text[ i ] == '\x19' )
continue;
- text[l++] = text[i];
+
+ text[ l++ ] = text[ i ];
}
- text[l] = '\0';
+
+ text[ l ] = '\0';
}
/*
@@ -953,95 +512,95 @@ The string has been tokenized and can be retrieved with
Cmd_Argc() / Cmd_Argv()
=================
*/
-static void CG_ServerCommand( void ) {
+static void CG_ServerCommand( void )
+{
const char *cmd;
- char text[MAX_SAY_TEXT];
+ char text[ MAX_SAY_TEXT ];
- cmd = CG_Argv(0);
+ cmd = CG_Argv( 0 );
- if ( !cmd[0] ) {
+ if( !cmd[ 0 ] )
+ {
// server claimed the command
return;
}
- if ( !strcmp( cmd, "cp" ) ) {
- CG_CenterPrint( CG_Argv(1), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
+ if( !strcmp( cmd, "cp" ) )
+ {
+ CG_CenterPrint( CG_Argv( 1 ), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
return;
}
- if ( !strcmp( cmd, "cs" ) ) {
- CG_ConfigStringModified();
+ if( !strcmp( cmd, "cs" ) )
+ {
+ CG_ConfigStringModified( );
return;
}
- if ( !strcmp( cmd, "print" ) ) {
- CG_Printf( "%s", CG_Argv(1) );
+ if( !strcmp( cmd, "print" ) )
+ {
+ CG_Printf( "%s", CG_Argv( 1 ) );
return;
}
- if ( !strcmp( cmd, "chat" ) ) {
- if ( !cg_teamChatsOnly.integer ) {
+ if( !strcmp( cmd, "chat" ) )
+ {
+ if( !cg_teamChatsOnly.integer )
+ {
trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND );
- Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT );
+ Q_strncpyz( text, CG_Argv( 1 ), MAX_SAY_TEXT );
CG_RemoveChatEscapeChar( text );
CG_Printf( "%s\n", text );
}
+
return;
}
- if ( !strcmp( cmd, "tchat" ) ) {
+ if( !strcmp( cmd, "tchat" ) )
+ {
trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND );
- Q_strncpyz( text, CG_Argv(1), MAX_SAY_TEXT );
+ Q_strncpyz( text, CG_Argv( 1 ), MAX_SAY_TEXT );
CG_RemoveChatEscapeChar( text );
CG_AddToTeamChat( text );
CG_Printf( "%s\n", text );
return;
}
- if ( !strcmp( cmd, "vchat" ) ) {
- CG_VoiceChat( SAY_ALL );
- return;
- }
-
- if ( !strcmp( cmd, "vtchat" ) ) {
- CG_VoiceChat( SAY_TEAM );
- return;
- }
-
- if ( !strcmp( cmd, "vtell" ) ) {
- CG_VoiceChat( SAY_TELL );
+
+ if( !strcmp( cmd, "scores" ) )
+ {
+ CG_ParseScores( );
return;
}
- if ( !strcmp( cmd, "scores" ) ) {
- CG_ParseScores();
+ if( !strcmp( cmd, "tinfo" ) )
+ {
+ CG_ParseTeamInfo( );
return;
}
- if ( !strcmp( cmd, "tinfo" ) ) {
- CG_ParseTeamInfo();
+ if( !strcmp( cmd, "map_restart" ) )
+ {
+ CG_MapRestart( );
return;
}
- if ( !strcmp( cmd, "map_restart" ) ) {
- CG_MapRestart();
- return;
+ if( Q_stricmp( cmd, "remapShader" ) == 0 )
+ {
+ if( trap_Argc( ) == 4 )
+ trap_R_RemapShader( CG_Argv( 1 ), CG_Argv( 2 ), CG_Argv( 3 ) );
}
-/* if ( Q_stricmp (cmd, "remapShader") == 0 ) {
- if (trap_Argc() == 4) {
- trap_R_RemapShader(CG_Argv(1), CG_Argv(2), CG_Argv(3));
- }
- }*/
-
// loaddeferred can be both a servercmd and a consolecmd
- if ( !strcmp( cmd, "loaddefered" ) ) { // FIXME: spelled wrong, but not changing for demo
- CG_LoadDeferredPlayers();
+ if( !strcmp( cmd, "loaddefered" ) )
+ { // FIXME: spelled wrong, but not changing for demo
+ CG_LoadDeferredPlayers( );
return;
}
// clientLevelShot is sent before taking a special screenshot for
// the menu system during development
- if ( !strcmp( cmd, "clientLevelShot" ) ) {
+ if( !strcmp( cmd, "clientLevelShot" ) )
+ {
cg.levelShot = qtrue;
return;
}
@@ -1058,10 +617,11 @@ Execute all of the server commands that were received along
with this this snapshot.
====================
*/
-void CG_ExecuteNewServerCommands( int latestSequence ) {
- while ( cgs.serverCommandSequence < latestSequence ) {
- if ( trap_GetServerCommand( ++cgs.serverCommandSequence ) ) {
- CG_ServerCommand();
- }
+void CG_ExecuteNewServerCommands( int latestSequence )
+{
+ while( cgs.serverCommandSequence < latestSequence )
+ {
+ if( trap_GetServerCommand( ++cgs.serverCommandSequence ) )
+ CG_ServerCommand( );
}
}
diff --git a/src/cgame/cg_snapshot.c b/src/cgame/cg_snapshot.c
index 60520dc1..0e8103fb 100644
--- a/src/cgame/cg_snapshot.c
+++ b/src/cgame/cg_snapshot.c
@@ -18,27 +18,25 @@
#include "cg_local.h"
-
-
/*
==================
CG_ResetEntity
==================
*/
-static void CG_ResetEntity( centity_t *cent ) {
+static void CG_ResetEntity( centity_t *cent )
+{
// if the previous snapshot this entity was updated in is at least
// an event window back in time then we can reset the previous event
- if ( cent->snapShotTime < cg.time - EVENT_VALID_MSEC ) {
- cent->previousEvent = 0;
- }
+ if( cent->snapShotTime < cg.time - EVENT_VALID_MSEC )
+ cent->previousEvent = 0;
- cent->trailTime = cg.snap->serverTime;
+ cent->trailTime = cg.snap->serverTime;
- VectorCopy (cent->currentState.origin, cent->lerpOrigin);
- VectorCopy (cent->currentState.angles, cent->lerpAngles);
- if ( cent->currentState.eType == ET_PLAYER ) {
- CG_ResetPlayerEntity( cent );
- }
+ VectorCopy( cent->currentState.origin, cent->lerpOrigin );
+ VectorCopy( cent->currentState.angles, cent->lerpAngles );
+
+ if( cent->currentState.eType == ET_PLAYER )
+ CG_ResetPlayerEntity( cent );
}
/*
@@ -48,20 +46,20 @@ CG_TransitionEntity
cent->nextState is moved to cent->currentState and events are fired
===============
*/
-static void CG_TransitionEntity( centity_t *cent ) {
- cent->currentState = cent->nextState;
- cent->currentValid = qtrue;
+static void CG_TransitionEntity( centity_t *cent )
+{
+ cent->currentState = cent->nextState;
+ cent->currentValid = qtrue;
- // reset if the entity wasn't in the last frame or was teleported
- if ( !cent->interpolate ) {
- CG_ResetEntity( cent );
- }
+ // reset if the entity wasn't in the last frame or was teleported
+ if( !cent->interpolate )
+ CG_ResetEntity( cent );
- // clear the next state. if will be set by the next CG_SetNextSnap
- cent->interpolate = qfalse;
+ // clear the next state. if will be set by the next CG_SetNextSnap
+ cent->interpolate = qfalse;
- // check for events
- CG_CheckEvents( cent );
+ // check for events
+ CG_CheckEvents( cent );
}
@@ -76,38 +74,40 @@ CG_TransitionSnapshot instead.
FIXME: Also called by map_restart?
==================
*/
-void CG_SetInitialSnapshot( snapshot_t *snap ) {
- int i;
- centity_t *cent;
- entityState_t *state;
+void CG_SetInitialSnapshot( snapshot_t *snap )
+{
+ int i;
+ centity_t *cent;
+ entityState_t *state;
- cg.snap = snap;
+ cg.snap = snap;
- BG_PlayerStateToEntityState( &snap->ps, &cg_entities[ snap->ps.clientNum ].currentState, qfalse );
+ BG_PlayerStateToEntityState( &snap->ps, &cg_entities[ snap->ps.clientNum ].currentState, qfalse );
- // sort out solid entities
- CG_BuildSolidList();
+ // sort out solid entities
+ CG_BuildSolidList( );
- CG_ExecuteNewServerCommands( snap->serverCommandSequence );
+ CG_ExecuteNewServerCommands( snap->serverCommandSequence );
- // set our local weapon selection pointer to
- // what the server has indicated the current weapon is
- CG_Respawn();
+ // set our local weapon selection pointer to
+ // what the server has indicated the current weapon is
+ CG_Respawn( );
- for ( i = 0 ; i < cg.snap->numEntities ; i++ ) {
- state = &cg.snap->entities[ i ];
- cent = &cg_entities[ state->number ];
+ for( i = 0; i < cg.snap->numEntities; i++ )
+ {
+ state = &cg.snap->entities[ i ];
+ cent = &cg_entities[ state->number ];
- memcpy(&cent->currentState, state, sizeof(entityState_t));
- //cent->currentState = *state;
- cent->interpolate = qfalse;
- cent->currentValid = qtrue;
+ memcpy( &cent->currentState, state, sizeof( entityState_t ) );
+ //cent->currentState = *state;
+ cent->interpolate = qfalse;
+ cent->currentValid = qtrue;
- CG_ResetEntity( cent );
+ CG_ResetEntity( cent );
- // check for events
- CG_CheckEvents( cent );
- }
+ // check for events
+ CG_CheckEvents( cent );
+ }
}
@@ -118,68 +118,66 @@ CG_TransitionSnapshot
The transition point from snap to nextSnap has passed
===================
*/
-static void CG_TransitionSnapshot( void ) {
- centity_t *cent;
- snapshot_t *oldFrame;
- int i;
-
- if ( !cg.snap ) {
- CG_Error( "CG_TransitionSnapshot: NULL cg.snap" );
- }
- if ( !cg.nextSnap ) {
- CG_Error( "CG_TransitionSnapshot: NULL cg.nextSnap" );
- }
-
- // execute any server string commands before transitioning entities
- CG_ExecuteNewServerCommands( cg.nextSnap->serverCommandSequence );
-
- // if we had a map_restart, set everthing with initial
- if ( !cg.snap ) {
- }
-
- // clear the currentValid flag for all entities in the existing snapshot
- for ( i = 0 ; i < cg.snap->numEntities ; i++ ) {
- cent = &cg_entities[ cg.snap->entities[ i ].number ];
- cent->currentValid = qfalse;
- }
-
- // move nextSnap to snap and do the transitions
- oldFrame = cg.snap;
- cg.snap = cg.nextSnap;
-
- BG_PlayerStateToEntityState( &cg.snap->ps, &cg_entities[ cg.snap->ps.clientNum ].currentState, qfalse );
- cg_entities[ cg.snap->ps.clientNum ].interpolate = qfalse;
-
- for ( i = 0 ; i < cg.snap->numEntities ; i++ ) {
- cent = &cg_entities[ cg.snap->entities[ i ].number ];
- CG_TransitionEntity( cent );
+static void CG_TransitionSnapshot( void )
+{
+ centity_t *cent;
+ snapshot_t *oldFrame;
+ int i;
+
+ if( !cg.snap )
+ CG_Error( "CG_TransitionSnapshot: NULL cg.snap" );
+
+ if( !cg.nextSnap )
+ CG_Error( "CG_TransitionSnapshot: NULL cg.nextSnap" );
+
+ // execute any server string commands before transitioning entities
+ CG_ExecuteNewServerCommands( cg.nextSnap->serverCommandSequence );
+
+ // if we had a map_restart, set everthing with initial
+ if( !cg.snap ) { } //TA: ?
+
+ // clear the currentValid flag for all entities in the existing snapshot
+ for( i = 0; i < cg.snap->numEntities; i++ )
+ {
+ cent = &cg_entities[ cg.snap->entities[ i ].number ];
+ cent->currentValid = qfalse;
+ }
+
+ // move nextSnap to snap and do the transitions
+ oldFrame = cg.snap;
+ cg.snap = cg.nextSnap;
+
+ BG_PlayerStateToEntityState( &cg.snap->ps, &cg_entities[ cg.snap->ps.clientNum ].currentState, qfalse );
+ cg_entities[ cg.snap->ps.clientNum ].interpolate = qfalse;
+
+ for( i = 0; i < cg.snap->numEntities; i++ )
+ {
+ cent = &cg_entities[ cg.snap->entities[ i ].number ];
+ CG_TransitionEntity( cent );
// remember time of snapshot this entity was last updated in
cent->snapShotTime = cg.snap->serverTime;
- }
-
- cg.nextSnap = NULL;
-
- // check for playerstate transition events
- if ( oldFrame ) {
- playerState_t *ops, *ps;
+ }
- ops = &oldFrame->ps;
- ps = &cg.snap->ps;
- // teleporting checks are irrespective of prediction
- if ( ( ps->eFlags ^ ops->eFlags ) & EF_TELEPORT_BIT ) {
- cg.thisFrameTeleport = qtrue; // will be cleared by prediction code
- }
+ cg.nextSnap = NULL;
- // if we are not doing client side movement prediction for any
- // reason, then the client events and view changes will be issued now
- if ( cg.demoPlayback || (cg.snap->ps.pm_flags & PMF_FOLLOW)
- || cg_nopredict.integer || cg_synchronousClients.integer ) {
- CG_TransitionPlayerState( ps, ops );
- }
+ // check for playerstate transition events
+ if( oldFrame )
+ {
+ playerState_t *ops, *ps;
- }
+ ops = &oldFrame->ps;
+ ps = &cg.snap->ps;
+ // teleporting checks are irrespective of prediction
+ if( ( ps->eFlags ^ ops->eFlags ) & EF_TELEPORT_BIT )
+ cg.thisFrameTeleport = qtrue; // will be cleared by prediction code
+ // if we are not doing client side movement prediction for any
+ // reason, then the client events and view changes will be issued now
+ if( cg.demoPlayback || ( cg.snap->ps.pm_flags & PMF_FOLLOW ) ||
+ cg_nopredict.integer || cg_synchronousClients.integer )
+ CG_TransitionPlayerState( ps, ops );
+ }
}
@@ -190,53 +188,51 @@ CG_SetNextSnap
A new snapshot has just been read in from the client system.
===================
*/
-static void CG_SetNextSnap( snapshot_t *snap ) {
- int num;
- entityState_t *es;
- centity_t *cent;
-
- cg.nextSnap = snap;
-
- BG_PlayerStateToEntityState( &snap->ps, &cg_entities[ snap->ps.clientNum ].nextState, qfalse );
- cg_entities[ cg.snap->ps.clientNum ].interpolate = qtrue;
-
- // check for extrapolation errors
- for ( num = 0 ; num < snap->numEntities ; num++ ) {
- es = &snap->entities[num];
- cent = &cg_entities[ es->number ];
-
- memcpy(&cent->nextState, es, sizeof(entityState_t));
- //cent->nextState = *es;
-
- // if this frame is a teleport, or the entity wasn't in the
- // previous frame, don't interpolate
- if ( !cent->currentValid || ( ( cent->currentState.eFlags ^ es->eFlags ) & EF_TELEPORT_BIT ) ) {
- cent->interpolate = qfalse;
- } else {
- cent->interpolate = qtrue;
- }
- }
-
- // if the next frame is a teleport for the playerstate, we
- // can't interpolate during demos
- if ( cg.snap && ( ( snap->ps.eFlags ^ cg.snap->ps.eFlags ) & EF_TELEPORT_BIT ) ) {
- cg.nextFrameTeleport = qtrue;
- } else {
- cg.nextFrameTeleport = qfalse;
- }
-
- // if changing follow mode, don't interpolate
- if ( cg.nextSnap->ps.clientNum != cg.snap->ps.clientNum ) {
- cg.nextFrameTeleport = qtrue;
- }
-
- // if changing server restarts, don't interpolate
- if ( ( cg.nextSnap->snapFlags ^ cg.snap->snapFlags ) & SNAPFLAG_SERVERCOUNT ) {
- cg.nextFrameTeleport = qtrue;
- }
-
- // sort out solid entities
- CG_BuildSolidList();
+static void CG_SetNextSnap( snapshot_t *snap )
+{
+ int num;
+ entityState_t *es;
+ centity_t *cent;
+
+ cg.nextSnap = snap;
+
+ BG_PlayerStateToEntityState( &snap->ps, &cg_entities[ snap->ps.clientNum ].nextState, qfalse );
+ cg_entities[ cg.snap->ps.clientNum ].interpolate = qtrue;
+
+ // check for extrapolation errors
+ for( num = 0 ; num < snap->numEntities ; num++ )
+ {
+ es = &snap->entities[ num ];
+ cent = &cg_entities[ es->number ];
+
+ memcpy( &cent->nextState, es, sizeof( entityState_t ) );
+ //cent->nextState = *es;
+
+ // if this frame is a teleport, or the entity wasn't in the
+ // previous frame, don't interpolate
+ if( !cent->currentValid || ( ( cent->currentState.eFlags ^ es->eFlags ) & EF_TELEPORT_BIT ) )
+ cent->interpolate = qfalse;
+ else
+ cent->interpolate = qtrue;
+ }
+
+ // if the next frame is a teleport for the playerstate, we
+ // can't interpolate during demos
+ if( cg.snap && ( ( snap->ps.eFlags ^ cg.snap->ps.eFlags ) & EF_TELEPORT_BIT ) )
+ cg.nextFrameTeleport = qtrue;
+ else
+ cg.nextFrameTeleport = qfalse;
+
+ // if changing follow mode, don't interpolate
+ if( cg.nextSnap->ps.clientNum != cg.snap->ps.clientNum )
+ cg.nextFrameTeleport = qtrue;
+
+ // if changing server restarts, don't interpolate
+ if( ( cg.nextSnap->snapFlags ^ cg.snap->snapFlags ) & SNAPFLAG_SERVERCOUNT )
+ cg.nextFrameTeleport = qtrue;
+
+ // sort out solid entities
+ CG_BuildSolidList( );
}
@@ -250,52 +246,56 @@ times if the client system fails to return a
valid snapshot.
========================
*/
-static snapshot_t *CG_ReadNextSnapshot( void ) {
- qboolean r;
- snapshot_t *dest;
+static snapshot_t *CG_ReadNextSnapshot( void )
+{
+ qboolean r;
+ snapshot_t *dest;
- if ( cg.latestSnapshotNum > cgs.processedSnapshotNum + 1000 ) {
+ if( cg.latestSnapshotNum > cgs.processedSnapshotNum + 1000 )
+ {
CG_Printf( "WARNING: CG_ReadNextSnapshot: way out of range, %i > %i",
- cg.latestSnapshotNum, cgs.processedSnapshotNum );
- }
+ cg.latestSnapshotNum, cgs.processedSnapshotNum );
+ }
- while ( cgs.processedSnapshotNum < cg.latestSnapshotNum ) {
- // decide which of the two slots to load it into
- if ( cg.snap == &cg.activeSnapshots[0] ) {
- dest = &cg.activeSnapshots[1];
- } else {
- dest = &cg.activeSnapshots[0];
- }
+ while( cgs.processedSnapshotNum < cg.latestSnapshotNum )
+ {
+ // decide which of the two slots to load it into
+ if( cg.snap == &cg.activeSnapshots[ 0 ] )
+ dest = &cg.activeSnapshots[ 1 ];
+ else
+ dest = &cg.activeSnapshots[ 0 ];
- // try to read the snapshot from the client system
- cgs.processedSnapshotNum++;
- r = trap_GetSnapshot( cgs.processedSnapshotNum, dest );
+ // try to read the snapshot from the client system
+ cgs.processedSnapshotNum++;
+ r = trap_GetSnapshot( cgs.processedSnapshotNum, dest );
// FIXME: why would trap_GetSnapshot return a snapshot with the same server time
- if ( cg.snap && r && dest->serverTime == cg.snap->serverTime ) {
+ if( cg.snap && r && dest->serverTime == cg.snap->serverTime )
+ {
//continue;
}
- // if it succeeded, return
- if ( r ) {
- CG_AddLagometerSnapshotInfo( dest );
- return dest;
- }
-
- // a GetSnapshot will return failure if the snapshot
- // never arrived, or is so old that its entities
- // have been shoved off the end of the circular
- // buffer in the client system.
-
- // record as a dropped packet
- CG_AddLagometerSnapshotInfo( NULL );
-
- // If there are additional snapshots, continue trying to
- // read them.
- }
-
- // nothing left to read
- return NULL;
+ // if it succeeded, return
+ if( r )
+ {
+ CG_AddLagometerSnapshotInfo( dest );
+ return dest;
+ }
+
+ // a GetSnapshot will return failure if the snapshot
+ // never arrived, or is so old that its entities
+ // have been shoved off the end of the circular
+ // buffer in the client system.
+
+ // record as a dropped packet
+ CG_AddLagometerSnapshotInfo( NULL );
+
+ // If there are additional snapshots, continue trying to
+ // read them.
+ }
+
+ // nothing left to read
+ return NULL;
}
@@ -318,79 +318,85 @@ of an interpolating one)
============
*/
-void CG_ProcessSnapshots( void ) {
- snapshot_t *snap;
- int n;
-
- // see what the latest snapshot the client system has is
- trap_GetCurrentSnapshotNumber( &n, &cg.latestSnapshotTime );
- if ( n != cg.latestSnapshotNum ) {
- if ( n < cg.latestSnapshotNum ) {
- // this should never happen
- CG_Error( "CG_ProcessSnapshots: n < cg.latestSnapshotNum" );
- }
- cg.latestSnapshotNum = n;
- }
-
- // If we have yet to receive a snapshot, check for it.
- // Once we have gotten the first snapshot, cg.snap will
- // always have valid data for the rest of the game
- while ( !cg.snap ) {
- snap = CG_ReadNextSnapshot();
- if ( !snap ) {
- // we can't continue until we get a snapshot
- return;
- }
-
- // set our weapon selection to what
- // the playerstate is currently using
- if ( !( snap->snapFlags & SNAPFLAG_NOT_ACTIVE ) ) {
- CG_SetInitialSnapshot( snap );
- }
- }
-
- // loop until we either have a valid nextSnap with a serverTime
- // greater than cg.time to interpolate towards, or we run
- // out of available snapshots
- do {
- // if we don't have a nextframe, try and read a new one in
- if ( !cg.nextSnap ) {
- snap = CG_ReadNextSnapshot();
-
- // if we still don't have a nextframe, we will just have to
- // extrapolate
- if ( !snap ) {
- break;
- }
-
- CG_SetNextSnap( snap );
-
- // if time went backwards, we have a level restart
- if ( cg.nextSnap->serverTime < cg.snap->serverTime ) {
- CG_Error( "CG_ProcessSnapshots: Server time went backwards" );
- }
- }
-
- // if our time is < nextFrame's, we have a nice interpolating state
- if ( cg.time >= cg.snap->serverTime && cg.time < cg.nextSnap->serverTime ) {
- break;
- }
-
- // we have passed the transition from nextFrame to frame
- CG_TransitionSnapshot();
- } while ( 1 );
-
- // assert our valid conditions upon exiting
- if ( cg.snap == NULL ) {
- CG_Error( "CG_ProcessSnapshots: cg.snap == NULL" );
- }
- if ( cg.time < cg.snap->serverTime ) {
- // this can happen right after a vid_restart
- cg.time = cg.snap->serverTime;
- }
- if ( cg.nextSnap != NULL && cg.nextSnap->serverTime <= cg.time ) {
- CG_Error( "CG_ProcessSnapshots: cg.nextSnap->serverTime <= cg.time" );
- }
+void CG_ProcessSnapshots( void )
+{
+ snapshot_t *snap;
+ int n;
+
+ // see what the latest snapshot the client system has is
+ trap_GetCurrentSnapshotNumber( &n, &cg.latestSnapshotTime );
+
+ if( n != cg.latestSnapshotNum )
+ {
+ if( n < cg.latestSnapshotNum )
+ {
+ // this should never happen
+ CG_Error( "CG_ProcessSnapshots: n < cg.latestSnapshotNum" );
+ }
+
+ cg.latestSnapshotNum = n;
+ }
+ // If we have yet to receive a snapshot, check for it.
+ // Once we have gotten the first snapshot, cg.snap will
+ // always have valid data for the rest of the game
+ while( !cg.snap )
+ {
+ snap = CG_ReadNextSnapshot( );
+
+ if( !snap )
+ {
+ // we can't continue until we get a snapshot
+ return;
+ }
+
+ // set our weapon selection to what
+ // the playerstate is currently using
+ if( !( snap->snapFlags & SNAPFLAG_NOT_ACTIVE ) )
+ CG_SetInitialSnapshot( snap );
+ }
+
+ // loop until we either have a valid nextSnap with a serverTime
+ // greater than cg.time to interpolate towards, or we run
+ // out of available snapshots
+ do
+ {
+ // if we don't have a nextframe, try and read a new one in
+ if( !cg.nextSnap )
+ {
+ snap = CG_ReadNextSnapshot( );
+
+ // if we still don't have a nextframe, we will just have to
+ // extrapolate
+ if( !snap )
+ break;
+
+ CG_SetNextSnap( snap );
+
+ // if time went backwards, we have a level restart
+ if( cg.nextSnap->serverTime < cg.snap->serverTime )
+ CG_Error( "CG_ProcessSnapshots: Server time went backwards" );
+ }
+
+ // if our time is < nextFrame's, we have a nice interpolating state
+ if( cg.time >= cg.snap->serverTime && cg.time < cg.nextSnap->serverTime )
+ break;
+
+ // we have passed the transition from nextFrame to frame
+ CG_TransitionSnapshot( );
+ } while( 1 );
+
+ // assert our valid conditions upon exiting
+ if( cg.snap == NULL )
+ CG_Error( "CG_ProcessSnapshots: cg.snap == NULL" );
+
+ if( cg.time < cg.snap->serverTime )
+ {
+ // this can happen right after a vid_restart
+ cg.time = cg.snap->serverTime;
+ }
+
+ if( cg.nextSnap != NULL && cg.nextSnap->serverTime <= cg.time )
+ CG_Error( "CG_ProcessSnapshots: cg.nextSnap->serverTime <= cg.time" );
}
diff --git a/src/cgame/cg_syscalls.asm b/src/cgame/cg_syscalls.asm
index 3f26c6dd..6cc032f8 100644
--- a/src/cgame/cg_syscalls.asm
+++ b/src/cgame/cg_syscalls.asm
@@ -1,104 +1,104 @@
code
-equ trap_Print -1
-equ trap_Error -2
-equ trap_Milliseconds -3
-equ trap_Cvar_Register -4
-equ trap_Cvar_Update -5
-equ trap_Cvar_Set -6
-equ trap_Cvar_VariableStringBuffer -7
-equ trap_Argc -8
-equ trap_Argv -9
-equ trap_Args -10
-equ trap_FS_FOpenFile -11
-equ trap_FS_Read -12
-equ trap_FS_Write -13
-equ trap_FS_FCloseFile -14
-equ trap_SendConsoleCommand -15
-equ trap_AddCommand -16
-equ trap_SendClientCommand -17
-equ trap_UpdateScreen -18
-equ trap_CM_LoadMap -19
-equ trap_CM_NumInlineModels -20
-equ trap_CM_InlineModel -21
-equ trap_CM_LoadModel -22
-equ trap_CM_TempBoxModel -23
-equ trap_CM_PointContents -24
-equ trap_CM_TransformedPointContents -25
-equ trap_CM_BoxTrace -26
-equ trap_CM_TransformedBoxTrace -27
-equ trap_CM_MarkFragments -28
-equ trap_S_StartSound -29
-equ trap_S_StartLocalSound -30
-equ trap_S_ClearLoopingSounds -31
-equ trap_S_AddLoopingSound -32
-equ trap_S_UpdateEntityPosition -33
-equ trap_S_Respatialize -34
-equ trap_S_RegisterSound -35
-equ trap_S_StartBackgroundTrack -36
-equ trap_R_LoadWorldMap -37
-equ trap_R_RegisterModel -38
-equ trap_R_RegisterSkin -39
-equ trap_R_RegisterShader -40
-equ trap_R_ClearScene -41
-equ trap_R_AddRefEntityToScene -42
-equ trap_R_AddPolyToScene -43
-equ trap_R_AddLightToScene -44
-equ trap_R_RenderScene -45
-equ trap_R_SetColor -46
-equ trap_R_DrawStretchPic -47
-equ trap_R_ModelBounds -48
-equ trap_R_LerpTag -49
-equ trap_GetGlconfig -50
-equ trap_GetGameState -51
-equ trap_GetCurrentSnapshotNumber -52
-equ trap_GetSnapshot -53
-equ trap_GetServerCommand -54
-equ trap_GetCurrentCmdNumber -55
-equ trap_GetUserCmd -56
-equ trap_SetUserCmdValue -57
-equ trap_R_RegisterShaderNoMip -58
-equ trap_MemoryRemaining -59
-equ trap_R_RegisterFont -60
-equ trap_Key_IsDown -61
-equ trap_Key_GetCatcher -62
-equ trap_Key_SetCatcher -63
-equ trap_Key_GetKey -64
-equ trap_PC_AddGlobalDefine -65
-equ trap_PC_LoadSource -66
-equ trap_PC_FreeSource -67
-equ trap_PC_ReadToken -68
-equ trap_PC_SourceFileAndLine -69
-equ trap_S_StopBackgroundTrack -70
-equ trap_RealTime -71
-equ trap_SnapVector -72
-equ trap_RemoveCommand -73
-equ trap_R_LightForPoint -74
-equ trap_CIN_PlayCinematic -75
-equ trap_CIN_StopCinematic -76
-equ trap_CIN_RunCinematic -77
-equ trap_CIN_DrawCinematic -78
-equ trap_CIN_SetExtents -79
-equ trap_R_RemapShader -80
-equ trap_S_AddRealLoopingSound -81
-equ trap_S_StopLoopingSound -82
-equ trap_CM_TempCapsuleModel -83
-equ trap_CM_CapsuleTrace -84
+equ trap_Print -1
+equ trap_Error -2
+equ trap_Milliseconds -3
+equ trap_Cvar_Register -4
+equ trap_Cvar_Update -5
+equ trap_Cvar_Set -6
+equ trap_Cvar_VariableStringBuffer -7
+equ trap_Argc -8
+equ trap_Argv -9
+equ trap_Args -10
+equ trap_FS_FOpenFile -11
+equ trap_FS_Read -12
+equ trap_FS_Write -13
+equ trap_FS_FCloseFile -14
+equ trap_SendConsoleCommand -15
+equ trap_AddCommand -16
+equ trap_SendClientCommand -17
+equ trap_UpdateScreen -18
+equ trap_CM_LoadMap -19
+equ trap_CM_NumInlineModels -20
+equ trap_CM_InlineModel -21
+equ trap_CM_LoadModel -22
+equ trap_CM_TempBoxModel -23
+equ trap_CM_PointContents -24
+equ trap_CM_TransformedPointContents -25
+equ trap_CM_BoxTrace -26
+equ trap_CM_TransformedBoxTrace -27
+equ trap_CM_MarkFragments -28
+equ trap_S_StartSound -29
+equ trap_S_StartLocalSound -30
+equ trap_S_ClearLoopingSounds -31
+equ trap_S_AddLoopingSound -32
+equ trap_S_UpdateEntityPosition -33
+equ trap_S_Respatialize -34
+equ trap_S_RegisterSound -35
+equ trap_S_StartBackgroundTrack -36
+equ trap_R_LoadWorldMap -37
+equ trap_R_RegisterModel -38
+equ trap_R_RegisterSkin -39
+equ trap_R_RegisterShader -40
+equ trap_R_ClearScene -41
+equ trap_R_AddRefEntityToScene -42
+equ trap_R_AddPolyToScene -43
+equ trap_R_AddLightToScene -44
+equ trap_R_RenderScene -45
+equ trap_R_SetColor -46
+equ trap_R_DrawStretchPic -47
+equ trap_R_ModelBounds -48
+equ trap_R_LerpTag -49
+equ trap_GetGlconfig -50
+equ trap_GetGameState -51
+equ trap_GetCurrentSnapshotNumber -52
+equ trap_GetSnapshot -53
+equ trap_GetServerCommand -54
+equ trap_GetCurrentCmdNumber -55
+equ trap_GetUserCmd -56
+equ trap_SetUserCmdValue -57
+equ trap_R_RegisterShaderNoMip -58
+equ trap_MemoryRemaining -59
+equ trap_R_RegisterFont -60
+equ trap_Key_IsDown -61
+equ trap_Key_GetCatcher -62
+equ trap_Key_SetCatcher -63
+equ trap_Key_GetKey -64
+equ trap_PC_AddGlobalDefine -65
+equ trap_PC_LoadSource -66
+equ trap_PC_FreeSource -67
+equ trap_PC_ReadToken -68
+equ trap_PC_SourceFileAndLine -69
+equ trap_S_StopBackgroundTrack -70
+equ trap_RealTime -71
+equ trap_SnapVector -72
+equ trap_RemoveCommand -73
+equ trap_R_LightForPoint -74
+equ trap_CIN_PlayCinematic -75
+equ trap_CIN_StopCinematic -76
+equ trap_CIN_RunCinematic -77
+equ trap_CIN_DrawCinematic -78
+equ trap_CIN_SetExtents -79
+equ trap_R_RemapShader -80
+equ trap_S_AddRealLoopingSound -81
+equ trap_S_StopLoopingSound -82
+equ trap_CM_TempCapsuleModel -83
+equ trap_CM_CapsuleTrace -84
equ trap_CM_TransformedCapsuleTrace -85
equ trap_R_AddAdditiveLightToScene -86
-equ trap_GetEntityToken -87
-equ trap_R_AddPolysToScene -88
-equ trap_R_inPVS -89
+equ trap_GetEntityToken -87
+equ trap_R_AddPolysToScene -88
+equ trap_R_inPVS -89
-equ memset -101
-equ memcpy -102
-equ strncpy -103
-equ sin -104
-equ cos -105
-equ atan2 -106
-equ sqrt -107
-equ floor -108
-equ ceil -109
-equ testPrintInt -110
-equ testPrintFloat -111
+equ memset -101
+equ memcpy -102
+equ strncpy -103
+equ sin -104
+equ cos -105
+equ atan2 -106
+equ sqrt -107
+equ floor -108
+equ ceil -109
+equ testPrintInt -110
+equ testPrintFloat -111
diff --git a/src/cgame/cg_syscalls.c b/src/cgame/cg_syscalls.c
index 517314d0..f5383a9d 100644
--- a/src/cgame/cg_syscalls.c
+++ b/src/cgame/cg_syscalls.c
@@ -21,390 +21,482 @@
static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1;
-void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) {
- syscall = syscallptr;
+void dllEntry( int (QDECL *syscallptr)( int arg,... ) )
+{
+ syscall = syscallptr;
}
-int PASSFLOAT( float x ) {
- float floatTemp;
- floatTemp = x;
- return *(int *)&floatTemp;
+int PASSFLOAT( float x )
+{
+ float floatTemp;
+ floatTemp = x;
+ return *(int *)&floatTemp;
}
-void trap_Print( const char *fmt ) {
- syscall( CG_PRINT, fmt );
+void trap_Print( const char *fmt )
+{
+ syscall( CG_PRINT, fmt );
}
-void trap_Error( const char *fmt ) {
- syscall( CG_ERROR, fmt );
+void trap_Error( const char *fmt )
+{
+ syscall( CG_ERROR, fmt );
}
-int trap_Milliseconds( void ) {
- return syscall( CG_MILLISECONDS );
+int trap_Milliseconds( void )
+{
+ return syscall( CG_MILLISECONDS );
}
-void trap_Cvar_Register( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags ) {
- syscall( CG_CVAR_REGISTER, vmCvar, varName, defaultValue, flags );
+void trap_Cvar_Register( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags )
+{
+ syscall( CG_CVAR_REGISTER, vmCvar, varName, defaultValue, flags );
}
-void trap_Cvar_Update( vmCvar_t *vmCvar ) {
- syscall( CG_CVAR_UPDATE, vmCvar );
+void trap_Cvar_Update( vmCvar_t *vmCvar )
+{
+ syscall( CG_CVAR_UPDATE, vmCvar );
}
-void trap_Cvar_Set( const char *var_name, const char *value ) {
- syscall( CG_CVAR_SET, var_name, value );
+void trap_Cvar_Set( const char *var_name, const char *value )
+{
+ syscall( CG_CVAR_SET, var_name, value );
}
-void trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize ) {
- syscall( CG_CVAR_VARIABLESTRINGBUFFER, var_name, buffer, bufsize );
+void trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize )
+{
+ syscall( CG_CVAR_VARIABLESTRINGBUFFER, var_name, buffer, bufsize );
}
-int trap_Argc( void ) {
- return syscall( CG_ARGC );
+int trap_Argc( void )
+{
+ return syscall( CG_ARGC );
}
-void trap_Argv( int n, char *buffer, int bufferLength ) {
- syscall( CG_ARGV, n, buffer, bufferLength );
+void trap_Argv( int n, char *buffer, int bufferLength )
+{
+ syscall( CG_ARGV, n, buffer, bufferLength );
}
-void trap_Args( char *buffer, int bufferLength ) {
- syscall( CG_ARGS, buffer, bufferLength );
+void trap_Args( char *buffer, int bufferLength )
+{
+ syscall( CG_ARGS, buffer, bufferLength );
}
-int trap_FS_FOpenFile( const char *qpath, fileHandle_t *f, fsMode_t mode ) {
- return syscall( CG_FS_FOPENFILE, qpath, f, mode );
+int trap_FS_FOpenFile( const char *qpath, fileHandle_t *f, fsMode_t mode )
+{
+ return syscall( CG_FS_FOPENFILE, qpath, f, mode );
}
-void trap_FS_Read( void *buffer, int len, fileHandle_t f ) {
- syscall( CG_FS_READ, buffer, len, f );
+void trap_FS_Read( void *buffer, int len, fileHandle_t f )
+{
+ syscall( CG_FS_READ, buffer, len, f );
}
-void trap_FS_Write( const void *buffer, int len, fileHandle_t f ) {
- syscall( CG_FS_WRITE, buffer, len, f );
+void trap_FS_Write( const void *buffer, int len, fileHandle_t f )
+{
+ syscall( CG_FS_WRITE, buffer, len, f );
}
-void trap_FS_FCloseFile( fileHandle_t f ) {
- syscall( CG_FS_FCLOSEFILE, f );
+void trap_FS_FCloseFile( fileHandle_t f )
+{
+ syscall( CG_FS_FCLOSEFILE, f );
}
-void trap_SendConsoleCommand( const char *text ) {
- syscall( CG_SENDCONSOLECOMMAND, text );
+void trap_SendConsoleCommand( const char *text )
+{
+ syscall( CG_SENDCONSOLECOMMAND, text );
}
-void trap_AddCommand( const char *cmdName ) {
- syscall( CG_ADDCOMMAND, cmdName );
+void trap_AddCommand( const char *cmdName )
+{
+ syscall( CG_ADDCOMMAND, cmdName );
}
-void trap_RemoveCommand( const char *cmdName ) {
+void trap_RemoveCommand( const char *cmdName )
+{
syscall( CG_REMOVECOMMAND, cmdName );
}
-void trap_SendClientCommand( const char *s ) {
- syscall( CG_SENDCLIENTCOMMAND, s );
+void trap_SendClientCommand( const char *s )
+{
+ syscall( CG_SENDCLIENTCOMMAND, s );
}
-void trap_UpdateScreen( void ) {
- syscall( CG_UPDATESCREEN );
+void trap_UpdateScreen( void )
+{
+ syscall( CG_UPDATESCREEN );
}
-void trap_CM_LoadMap( const char *mapname ) {
- syscall( CG_CM_LOADMAP, mapname );
+void trap_CM_LoadMap( const char *mapname )
+{
+ syscall( CG_CM_LOADMAP, mapname );
}
-int trap_CM_NumInlineModels( void ) {
- return syscall( CG_CM_NUMINLINEMODELS );
+int trap_CM_NumInlineModels( void )
+{
+ return syscall( CG_CM_NUMINLINEMODELS );
}
-clipHandle_t trap_CM_InlineModel( int index ) {
- return syscall( CG_CM_INLINEMODEL, index );
+clipHandle_t trap_CM_InlineModel( int index )
+{
+ return syscall( CG_CM_INLINEMODEL, index );
}
-clipHandle_t trap_CM_TempBoxModel( const vec3_t mins, const vec3_t maxs ) {
- return syscall( CG_CM_TEMPBOXMODEL, mins, maxs );
+clipHandle_t trap_CM_TempBoxModel( const vec3_t mins, const vec3_t maxs )
+{
+ return syscall( CG_CM_TEMPBOXMODEL, mins, maxs );
}
-clipHandle_t trap_CM_TempCapsuleModel( const vec3_t mins, const vec3_t maxs ) {
+clipHandle_t trap_CM_TempCapsuleModel( const vec3_t mins, const vec3_t maxs )
+{
return syscall( CG_CM_TEMPCAPSULEMODEL, mins, maxs );
}
-int trap_CM_PointContents( const vec3_t p, clipHandle_t model ) {
- return syscall( CG_CM_POINTCONTENTS, p, model );
+int trap_CM_PointContents( const vec3_t p, clipHandle_t model )
+{
+ return syscall( CG_CM_POINTCONTENTS, p, model );
}
-int trap_CM_TransformedPointContents( const vec3_t p, clipHandle_t model, const vec3_t origin, const vec3_t angles ) {
- return syscall( CG_CM_TRANSFORMEDPOINTCONTENTS, p, model, origin, angles );
+int trap_CM_TransformedPointContents( const vec3_t p, clipHandle_t model, const vec3_t origin,
+ const vec3_t angles )
+{
+ return syscall( CG_CM_TRANSFORMEDPOINTCONTENTS, p, model, origin, angles );
}
-void trap_CM_BoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
- const vec3_t mins, const vec3_t maxs,
- clipHandle_t model, int brushmask ) {
- syscall( CG_CM_BOXTRACE, results, start, end, mins, maxs, model, brushmask );
+void trap_CM_BoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
+ const vec3_t mins, const vec3_t maxs,
+ clipHandle_t model, int brushmask )
+{
+ syscall( CG_CM_BOXTRACE, results, start, end, mins, maxs, model, brushmask );
}
void trap_CM_CapsuleTrace( trace_t *results, const vec3_t start, const vec3_t end,
const vec3_t mins, const vec3_t maxs,
- clipHandle_t model, int brushmask ) {
+ clipHandle_t model, int brushmask )
+{
syscall( CG_CM_CAPSULETRACE, results, start, end, mins, maxs, model, brushmask );
}
-void trap_CM_TransformedBoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
- const vec3_t mins, const vec3_t maxs,
- clipHandle_t model, int brushmask,
- const vec3_t origin, const vec3_t angles ) {
- syscall( CG_CM_TRANSFORMEDBOXTRACE, results, start, end, mins, maxs, model, brushmask, origin, angles );
+void trap_CM_TransformedBoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
+ const vec3_t mins, const vec3_t maxs,
+ clipHandle_t model, int brushmask,
+ const vec3_t origin, const vec3_t angles )
+{
+ syscall( CG_CM_TRANSFORMEDBOXTRACE, results, start, end, mins, maxs, model, brushmask, origin, angles );
}
void trap_CM_TransformedCapsuleTrace( trace_t *results, const vec3_t start, const vec3_t end,
const vec3_t mins, const vec3_t maxs,
clipHandle_t model, int brushmask,
- const vec3_t origin, const vec3_t angles ) {
+ const vec3_t origin, const vec3_t angles )
+{
syscall( CG_CM_TRANSFORMEDCAPSULETRACE, results, start, end, mins, maxs, model, brushmask, origin, angles );
}
-int trap_CM_MarkFragments( int numPoints, const vec3_t *points,
- const vec3_t projection,
- int maxPoints, vec3_t pointBuffer,
- int maxFragments, markFragment_t *fragmentBuffer ) {
- return syscall( CG_CM_MARKFRAGMENTS, numPoints, points, projection, maxPoints, pointBuffer, maxFragments, fragmentBuffer );
+int trap_CM_MarkFragments( int numPoints, const vec3_t *points,
+ const vec3_t projection,
+ int maxPoints, vec3_t pointBuffer,
+ int maxFragments, markFragment_t *fragmentBuffer )
+{
+ return syscall( CG_CM_MARKFRAGMENTS, numPoints, points, projection, maxPoints,
+ pointBuffer, maxFragments, fragmentBuffer );
}
-void trap_S_StartSound( vec3_t origin, int entityNum, int entchannel, sfxHandle_t sfx ) {
- syscall( CG_S_STARTSOUND, origin, entityNum, entchannel, sfx );
+void trap_S_StartSound( vec3_t origin, int entityNum, int entchannel, sfxHandle_t sfx )
+{
+ syscall( CG_S_STARTSOUND, origin, entityNum, entchannel, sfx );
}
-void trap_S_StartLocalSound( sfxHandle_t sfx, int channelNum ) {
+void trap_S_StartLocalSound( sfxHandle_t sfx, int channelNum )
+{
syscall( CG_S_STARTLOCALSOUND, sfx, channelNum );
}
-void trap_S_ClearLoopingSounds( qboolean killall ) {
+void trap_S_ClearLoopingSounds( qboolean killall )
+{
syscall( CG_S_CLEARLOOPINGSOUNDS, killall );
}
-void trap_S_AddLoopingSound( int entityNum, const vec3_t origin, const vec3_t velocity, sfxHandle_t sfx ) {
- syscall( CG_S_ADDLOOPINGSOUND, entityNum, origin, velocity, sfx );
+void trap_S_AddLoopingSound( int entityNum, const vec3_t origin, const vec3_t velocity, sfxHandle_t sfx )
+{
+ syscall( CG_S_ADDLOOPINGSOUND, entityNum, origin, velocity, sfx );
}
-void trap_S_AddRealLoopingSound( int entityNum, const vec3_t origin, const vec3_t velocity, sfxHandle_t sfx ) {
+void trap_S_AddRealLoopingSound( int entityNum, const vec3_t origin, const vec3_t velocity, sfxHandle_t sfx )
+{
syscall( CG_S_ADDREALLOOPINGSOUND, entityNum, origin, velocity, sfx );
}
-void trap_S_StopLoopingSound( int entityNum ) {
+void trap_S_StopLoopingSound( int entityNum )
+{
syscall( CG_S_STOPLOOPINGSOUND, entityNum );
}
-void trap_S_UpdateEntityPosition( int entityNum, const vec3_t origin ) {
- syscall( CG_S_UPDATEENTITYPOSITION, entityNum, origin );
+void trap_S_UpdateEntityPosition( int entityNum, const vec3_t origin )
+{
+ syscall( CG_S_UPDATEENTITYPOSITION, entityNum, origin );
}
-void trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater ) {
- syscall( CG_S_RESPATIALIZE, entityNum, origin, axis, inwater );
+void trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater )
+{
+ syscall( CG_S_RESPATIALIZE, entityNum, origin, axis, inwater );
}
-sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ) {
+sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed )
+{
return syscall( CG_S_REGISTERSOUND, sample, compressed );
}
-void trap_S_StartBackgroundTrack( const char *intro, const char *loop ) {
- syscall( CG_S_STARTBACKGROUNDTRACK, intro, loop );
+void trap_S_StartBackgroundTrack( const char *intro, const char *loop )
+{
+ syscall( CG_S_STARTBACKGROUNDTRACK, intro, loop );
}
-void trap_R_LoadWorldMap( const char *mapname ) {
- syscall( CG_R_LOADWORLDMAP, mapname );
+void trap_R_LoadWorldMap( const char *mapname )
+{
+ syscall( CG_R_LOADWORLDMAP, mapname );
}
-qhandle_t trap_R_RegisterModel( const char *name ) {
- return syscall( CG_R_REGISTERMODEL, name );
+qhandle_t trap_R_RegisterModel( const char *name )
+{
+ return syscall( CG_R_REGISTERMODEL, name );
}
-qhandle_t trap_R_RegisterSkin( const char *name ) {
- return syscall( CG_R_REGISTERSKIN, name );
+qhandle_t trap_R_RegisterSkin( const char *name )
+{
+ return syscall( CG_R_REGISTERSKIN, name );
}
-qhandle_t trap_R_RegisterShader( const char *name ) {
- return syscall( CG_R_REGISTERSHADER, name );
+qhandle_t trap_R_RegisterShader( const char *name )
+{
+ return syscall( CG_R_REGISTERSHADER, name );
}
-qhandle_t trap_R_RegisterShaderNoMip( const char *name ) {
- return syscall( CG_R_REGISTERSHADERNOMIP, name );
+qhandle_t trap_R_RegisterShaderNoMip( const char *name )
+{
+ return syscall( CG_R_REGISTERSHADERNOMIP, name );
}
-void trap_R_RegisterFont(const char *fontName, int pointSize, fontInfo_t *font) {
+void trap_R_RegisterFont( const char *fontName, int pointSize, fontInfo_t *font )
+{
syscall(CG_R_REGISTERFONT, fontName, pointSize, font );
}
-void trap_R_ClearScene( void ) {
- syscall( CG_R_CLEARSCENE );
+void trap_R_ClearScene( void )
+{
+ syscall( CG_R_CLEARSCENE );
}
-void trap_R_AddRefEntityToScene( const refEntity_t *re ) {
- syscall( CG_R_ADDREFENTITYTOSCENE, re );
+void trap_R_AddRefEntityToScene( const refEntity_t *re )
+{
+ syscall( CG_R_ADDREFENTITYTOSCENE, re );
}
-void trap_R_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts ) {
- syscall( CG_R_ADDPOLYTOSCENE, hShader, numVerts, verts );
+void trap_R_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts )
+{
+ syscall( CG_R_ADDPOLYTOSCENE, hShader, numVerts, verts );
}
-void trap_R_AddPolysToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts, int num ) {
+void trap_R_AddPolysToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts, int num )
+{
syscall( CG_R_ADDPOLYSTOSCENE, hShader, numVerts, verts, num );
}
-int trap_R_LightForPoint( vec3_t point, vec3_t ambientLight, vec3_t directedLight, vec3_t lightDir ) {
+int trap_R_LightForPoint( vec3_t point, vec3_t ambientLight, vec3_t directedLight, vec3_t lightDir )
+{
return syscall( CG_R_LIGHTFORPOINT, point, ambientLight, directedLight, lightDir );
}
-void trap_R_AddLightToScene( const vec3_t org, float intensity, float r, float g, float b ) {
- syscall( CG_R_ADDLIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
+void trap_R_AddLightToScene( const vec3_t org, float intensity, float r, float g, float b )
+{
+ syscall( CG_R_ADDLIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
}
-void trap_R_AddAdditiveLightToScene( const vec3_t org, float intensity, float r, float g, float b ) {
- syscall( CG_R_ADDADDITIVELIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
+void trap_R_AddAdditiveLightToScene( const vec3_t org, float intensity, float r, float g, float b )
+{
+ syscall( CG_R_ADDADDITIVELIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
}
-void trap_R_RenderScene( const refdef_t *fd ) {
- syscall( CG_R_RENDERSCENE, fd );
+void trap_R_RenderScene( const refdef_t *fd )
+{
+ syscall( CG_R_RENDERSCENE, fd );
}
-void trap_R_SetColor( const float *rgba ) {
- syscall( CG_R_SETCOLOR, rgba );
+void trap_R_SetColor( const float *rgba )
+{
+ syscall( CG_R_SETCOLOR, rgba );
}
-void trap_R_DrawStretchPic( float x, float y, float w, float h,
- float s1, float t1, float s2, float t2, qhandle_t hShader ) {
- syscall( CG_R_DRAWSTRETCHPIC, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h), PASSFLOAT(s1), PASSFLOAT(t1), PASSFLOAT(s2), PASSFLOAT(t2), hShader );
+void trap_R_DrawStretchPic( float x, float y, float w, float h,
+ float s1, float t1, float s2, float t2, qhandle_t hShader )
+{
+ syscall( CG_R_DRAWSTRETCHPIC, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h),
+ PASSFLOAT(s1), PASSFLOAT(t1), PASSFLOAT(s2), PASSFLOAT(t2), hShader );
}
-void trap_R_ModelBounds( clipHandle_t model, vec3_t mins, vec3_t maxs ) {
- syscall( CG_R_MODELBOUNDS, model, mins, maxs );
+void trap_R_ModelBounds( clipHandle_t model, vec3_t mins, vec3_t maxs ) {
+ syscall( CG_R_MODELBOUNDS, model, mins, maxs );
}
int trap_R_LerpTag( orientation_t *tag, clipHandle_t mod, int startFrame, int endFrame,
- float frac, const char *tagName ) {
+ float frac, const char *tagName )
+{
return syscall( CG_R_LERPTAG, tag, mod, startFrame, endFrame, PASSFLOAT(frac), tagName );
}
-void trap_R_RemapShader( const char *oldShader, const char *newShader, const char *timeOffset ) {
+void trap_R_RemapShader( const char *oldShader, const char *newShader, const char *timeOffset )
+{
syscall( CG_R_REMAP_SHADER, oldShader, newShader, timeOffset );
}
-void trap_GetGlconfig( glconfig_t *glconfig ) {
- syscall( CG_GETGLCONFIG, glconfig );
+void trap_GetGlconfig( glconfig_t *glconfig )
+{
+ syscall( CG_GETGLCONFIG, glconfig );
}
-void trap_GetGameState( gameState_t *gamestate ) {
- syscall( CG_GETGAMESTATE, gamestate );
+void trap_GetGameState( gameState_t *gamestate )
+{
+ syscall( CG_GETGAMESTATE, gamestate );
}
-void trap_GetCurrentSnapshotNumber( int *snapshotNumber, int *serverTime ) {
- syscall( CG_GETCURRENTSNAPSHOTNUMBER, snapshotNumber, serverTime );
+void trap_GetCurrentSnapshotNumber( int *snapshotNumber, int *serverTime )
+{
+ syscall( CG_GETCURRENTSNAPSHOTNUMBER, snapshotNumber, serverTime );
}
-qboolean trap_GetSnapshot( int snapshotNumber, snapshot_t *snapshot ) {
- return syscall( CG_GETSNAPSHOT, snapshotNumber, snapshot );
+qboolean trap_GetSnapshot( int snapshotNumber, snapshot_t *snapshot )
+{
+ return syscall( CG_GETSNAPSHOT, snapshotNumber, snapshot );
}
-qboolean trap_GetServerCommand( int serverCommandNumber ) {
- return syscall( CG_GETSERVERCOMMAND, serverCommandNumber );
+qboolean trap_GetServerCommand( int serverCommandNumber )
+{
+ return syscall( CG_GETSERVERCOMMAND, serverCommandNumber );
}
-int trap_GetCurrentCmdNumber( void ) {
- return syscall( CG_GETCURRENTCMDNUMBER );
+int trap_GetCurrentCmdNumber( void )
+{
+ return syscall( CG_GETCURRENTCMDNUMBER );
}
-qboolean trap_GetUserCmd( int cmdNumber, usercmd_t *ucmd ) {
- return syscall( CG_GETUSERCMD, cmdNumber, ucmd );
+qboolean trap_GetUserCmd( int cmdNumber, usercmd_t *ucmd )
+{
+ return syscall( CG_GETUSERCMD, cmdNumber, ucmd );
}
-void trap_SetUserCmdValue( int stateValue, float sensitivityScale ) {
- syscall( CG_SETUSERCMDVALUE, stateValue, PASSFLOAT(sensitivityScale) );
+void trap_SetUserCmdValue( int stateValue, float sensitivityScale )
+{
+ syscall( CG_SETUSERCMDVALUE, stateValue, PASSFLOAT( sensitivityScale ) );
}
-void testPrintInt( char *string, int i ) {
- syscall( CG_TESTPRINTINT, string, i );
+void testPrintInt( char *string, int i )
+{
+ syscall( CG_TESTPRINTINT, string, i );
}
-void testPrintFloat( char *string, float f ) {
- syscall( CG_TESTPRINTFLOAT, string, PASSFLOAT(f) );
+void testPrintFloat( char *string, float f )
+{
+ syscall( CG_TESTPRINTFLOAT, string, PASSFLOAT(f) );
}
-int trap_MemoryRemaining( void ) {
- return syscall( CG_MEMORY_REMAINING );
+int trap_MemoryRemaining( void )
+{
+ return syscall( CG_MEMORY_REMAINING );
}
-qboolean trap_Key_IsDown( int keynum ) {
+qboolean trap_Key_IsDown( int keynum )
+{
return syscall( CG_KEY_ISDOWN, keynum );
}
-int trap_Key_GetCatcher( void ) {
+int trap_Key_GetCatcher( void )
+{
return syscall( CG_KEY_GETCATCHER );
}
-void trap_Key_SetCatcher( int catcher ) {
+void trap_Key_SetCatcher( int catcher )
+{
syscall( CG_KEY_SETCATCHER, catcher );
}
-int trap_Key_GetKey( const char *binding ) {
+int trap_Key_GetKey( const char *binding )
+{
return syscall( CG_KEY_GETKEY, binding );
}
-int trap_PC_AddGlobalDefine( char *define ) {
+int trap_PC_AddGlobalDefine( char *define )
+{
return syscall( CG_PC_ADD_GLOBAL_DEFINE, define );
}
-int trap_PC_LoadSource( const char *filename ) {
+int trap_PC_LoadSource( const char *filename )
+{
return syscall( CG_PC_LOAD_SOURCE, filename );
}
-int trap_PC_FreeSource( int handle ) {
+int trap_PC_FreeSource( int handle )
+{
return syscall( CG_PC_FREE_SOURCE, handle );
}
-int trap_PC_ReadToken( int handle, pc_token_t *pc_token ) {
+int trap_PC_ReadToken( int handle, pc_token_t *pc_token )
+{
return syscall( CG_PC_READ_TOKEN, handle, pc_token );
}
-int trap_PC_SourceFileAndLine( int handle, char *filename, int *line ) {
+int trap_PC_SourceFileAndLine( int handle, char *filename, int *line )
+{
return syscall( CG_PC_SOURCE_FILE_AND_LINE, handle, filename, line );
}
-void trap_S_StopBackgroundTrack( void ) {
+void trap_S_StopBackgroundTrack( void )
+{
syscall( CG_S_STOPBACKGROUNDTRACK );
}
-int trap_RealTime(qtime_t *qtime) {
+int trap_RealTime(qtime_t *qtime)
+{
return syscall( CG_REAL_TIME, qtime );
}
-void trap_SnapVector( float *v ) {
+void trap_SnapVector( float *v )
+{
syscall( CG_SNAPVECTOR, v );
}
// this returns a handle. arg0 is the name in the format "idlogo.roq", set arg1 to NULL, alteredstates to qfalse (do not alter gamestate)
-int trap_CIN_PlayCinematic( const char *arg0, int xpos, int ypos, int width, int height, int bits) {
+int trap_CIN_PlayCinematic( const char *arg0, int xpos, int ypos, int width, int height, int bits )
+{
return syscall(CG_CIN_PLAYCINEMATIC, arg0, xpos, ypos, width, height, bits);
}
// stops playing the cinematic and ends it. should always return FMV_EOF
// cinematics must be stopped in reverse order of when they are started
-e_status trap_CIN_StopCinematic(int handle) {
+e_status trap_CIN_StopCinematic( int handle )
+{
return syscall(CG_CIN_STOPCINEMATIC, handle);
}
// will run a frame of the cinematic but will not draw it. Will return FMV_EOF if the end of the cinematic has been reached.
-e_status trap_CIN_RunCinematic (int handle) {
+e_status trap_CIN_RunCinematic( int handle )
+{
return syscall(CG_CIN_RUNCINEMATIC, handle);
}
// draws the current frame
-void trap_CIN_DrawCinematic (int handle) {
+void trap_CIN_DrawCinematic( int handle )
+{
syscall(CG_CIN_DRAWCINEMATIC, handle);
}
// allows you to resize the animation dynamically
-void trap_CIN_SetExtents (int handle, int x, int y, int w, int h) {
+void trap_CIN_SetExtents( int handle, int x, int y, int w, int h )
+{
syscall(CG_CIN_SETEXTENTS, handle, x, y, w, h);
}
diff --git a/src/cgame/cg_trails.c b/src/cgame/cg_trails.c
index 9a2bc8a1..8839a757 100644
--- a/src/cgame/cg_trails.c
+++ b/src/cgame/cg_trails.c
@@ -4,35 +4,35 @@
typedef struct trailJunc_s
{
- struct trailJunc_s *nextGlobal, *prevGlobal; // next junction in the global list it is in (free or used)
- struct trailJunc_s *nextJunc; // next junction in the trail
- struct trailJunc_s *nextHead, *prevHead; // next head junc in the world
-
- qboolean inuse, freed;
- int ownerIndex;
- qhandle_t shader;
-
- int sType;
- int flags;
- float sTex;
- vec3_t pos;
- int spawnTime, endTime;
- float alphaStart, alphaEnd;
- vec3_t colorStart, colorEnd;
- float widthStart, widthEnd;
-
- // current settings
- float alpha;
- float width;
- vec3_t color;
+ struct trailJunc_s *nextGlobal, *prevGlobal; // next junction in the global list it is in (free or used)
+ struct trailJunc_s *nextJunc; // next junction in the trail
+ struct trailJunc_s *nextHead, *prevHead; // next head junc in the world
+
+ qboolean inuse, freed;
+ int ownerIndex;
+ qhandle_t shader;
+
+ int sType;
+ int flags;
+ float sTex;
+ vec3_t pos;
+ int spawnTime, endTime;
+ float alphaStart, alphaEnd;
+ vec3_t colorStart, colorEnd;
+ float widthStart, widthEnd;
+
+ // current settings
+ float alpha;
+ float width;
+ vec3_t color;
} trailJunc_t;
-#define MAX_TRAILJUNCS 4096
+#define MAX_TRAILJUNCS 4096
-trailJunc_t trailJuncs[MAX_TRAILJUNCS];
+trailJunc_t trailJuncs[ MAX_TRAILJUNCS ];
trailJunc_t *freeTrails, *activeTrails;
-trailJunc_t *headTrails;
+trailJunc_t *headTrails;
qboolean initTrails = qfalse;
@@ -43,31 +43,32 @@ int numTrailsInuse;
CG_ClearTrails
===============
*/
-void CG_ClearTrails (void)
+void CG_ClearTrails( void )
{
- int i;
+ int i;
- memset( trailJuncs, 0, sizeof(trailJunc_t) * MAX_TRAILJUNCS );
+ memset( trailJuncs, 0, sizeof( trailJunc_t ) * MAX_TRAILJUNCS );
- freeTrails = trailJuncs;
- activeTrails = NULL;
- headTrails = NULL;
+ freeTrails = trailJuncs;
+ activeTrails = NULL;
+ headTrails = NULL;
- for (i=0 ;i<MAX_TRAILJUNCS ; i++)
- {
- trailJuncs[i].nextGlobal = &trailJuncs[i+1];
+ for( i = 0; i < MAX_TRAILJUNCS; i++ )
+ {
+ trailJuncs[ i ].nextGlobal = &trailJuncs[ i + 1 ];
- if (i>0)
- trailJuncs[i].prevGlobal = &trailJuncs[i-1];
- else
- trailJuncs[i].prevGlobal = NULL;
+ if( i > 0 )
+ trailJuncs[ i ].prevGlobal = &trailJuncs[ i - 1 ];
+ else
+ trailJuncs[ i ].prevGlobal = NULL;
- trailJuncs[i].inuse = qfalse;
- }
- trailJuncs[MAX_TRAILJUNCS-1].nextGlobal = NULL;
+ trailJuncs[ i ].inuse = qfalse;
+ }
+
+ trailJuncs[ MAX_TRAILJUNCS - 1 ].nextGlobal = NULL;
- initTrails = qtrue;
- numTrailsInuse = 0;
+ initTrails = qtrue;
+ numTrailsInuse = 0;
}
/*
@@ -77,59 +78,70 @@ CG_SpawnTrailJunc
*/
trailJunc_t *CG_SpawnTrailJunc( trailJunc_t *headJunc )
{
- trailJunc_t *j;
-
- if (!freeTrails)
- return NULL;
-
- if ( cg_paused.integer )
- return NULL;
-
- // select the first free trail, and remove it from the list
- j = freeTrails;
- freeTrails = j->nextGlobal;
- if (freeTrails)
- freeTrails->prevGlobal = NULL;
-
- j->nextGlobal = activeTrails;
- if (activeTrails)
- activeTrails->prevGlobal = j;
- activeTrails = j;
- j->prevGlobal = NULL;
- j->inuse = qtrue;
- j->freed = qfalse;
-
- // if this owner has a headJunc, add us to the start
- if (headJunc) {
- // remove the headJunc from the list of heads
- if (headJunc == headTrails) {
- headTrails = headJunc->nextHead;
- if (headTrails)
- headTrails->prevHead = NULL;
- } else {
- if (headJunc->nextHead)
- headJunc->nextHead->prevHead = headJunc->prevHead;
- if (headJunc->prevHead)
- headJunc->prevHead->nextHead = headJunc->nextHead;
- }
- headJunc->prevHead = NULL;
- headJunc->nextHead = NULL;
- }
- // make us the headTrail
- if (headTrails)
- headTrails->prevHead = j;
- j->nextHead = headTrails;
- j->prevHead = NULL;
- headTrails = j;
-
- j->nextJunc = headJunc; // if headJunc is NULL, then we'll just be the end of the list
-
- numTrailsInuse++;
-
- // debugging
-// CG_Printf( "NumTrails: %i\n", numTrailsInuse );
-
- return j;
+ trailJunc_t *j;
+
+ if( !freeTrails )
+ return NULL;
+
+ if( cg_paused.integer )
+ return NULL;
+
+ // select the first free trail, and remove it from the list
+ j = freeTrails;
+ freeTrails = j->nextGlobal;
+
+ if( freeTrails )
+ freeTrails->prevGlobal = NULL;
+
+ j->nextGlobal = activeTrails;
+
+ if( activeTrails )
+ activeTrails->prevGlobal = j;
+
+ activeTrails = j;
+ j->prevGlobal = NULL;
+ j->inuse = qtrue;
+ j->freed = qfalse;
+
+ // if this owner has a headJunc, add us to the start
+ if( headJunc )
+ {
+ // remove the headJunc from the list of heads
+ if( headJunc == headTrails )
+ {
+ headTrails = headJunc->nextHead;
+
+ if( headTrails )
+ headTrails->prevHead = NULL;
+ }
+ else
+ {
+ if( headJunc->nextHead )
+ headJunc->nextHead->prevHead = headJunc->prevHead;
+
+ if( headJunc->prevHead )
+ headJunc->prevHead->nextHead = headJunc->nextHead;
+ }
+ headJunc->prevHead = NULL;
+ headJunc->nextHead = NULL;
+ }
+
+ // make us the headTrail
+ if( headTrails )
+ headTrails->prevHead = j;
+
+ j->nextHead = headTrails;
+ j->prevHead = NULL;
+ headTrails = j;
+
+ j->nextJunc = headJunc; // if headJunc is NULL, then we'll just be the end of the list
+
+ numTrailsInuse++;
+
+ // debugging
+// CG_Printf( "NumTrails: %i\n", numTrailsInuse );
+
+ return j;
}
@@ -142,59 +154,74 @@ CG_AddTrailJunc
Used for generic trails
===============
*/
-int CG_AddTrailJunc(int headJuncIndex, qhandle_t shader, int spawnTime, int sType, vec3_t pos, int trailLife, float alphaStart, float alphaEnd, float startWidth, float endWidth, int flags, vec3_t colorStart, vec3_t colorEnd, float sRatio, float animSpeed)
+int CG_AddTrailJunc( int headJuncIndex, qhandle_t shader, int spawnTime, int sType, vec3_t pos,
+ int trailLife, float alphaStart, float alphaEnd, float startWidth,
+ float endWidth, int flags, vec3_t colorStart, vec3_t colorEnd,
+ float sRatio, float animSpeed )
{
- trailJunc_t *j, *headJunc;
-
- if (headJuncIndex > 0) {
- headJunc = &trailJuncs[headJuncIndex-1];
-
- if (!headJunc->inuse)
- headJunc = NULL;
- }
- else
- headJunc = NULL;
-
- j = CG_SpawnTrailJunc(headJunc);
- if (!j) {
-// CG_Printf("couldnt spawn trail junc\n");
- return 0;
- }
-
- if (alphaStart > 1.0) alphaStart = 1.0;
- if (alphaStart < 0.0) alphaStart = 0.0;
- if (alphaEnd > 1.0) alphaEnd = 1.0;
- if (alphaEnd < 0.0) alphaEnd = 0.0;
-
- // setup the trail junction
- j->shader = shader;
- j->sType = sType;
- VectorCopy( pos, j->pos );
- j->flags = flags;
-
- j->spawnTime = spawnTime;
- j->endTime = spawnTime + trailLife;
-
- VectorCopy( colorStart, j->colorStart );
- VectorCopy( colorEnd, j->colorEnd );
-
- j->alphaStart = alphaStart;
- j->alphaEnd = alphaEnd;
-
- j->widthStart = startWidth;
- j->widthEnd = endWidth;
-
- if (sType == STYPE_REPEAT) {
- if (headJunc) {
- j->sTex = headJunc->sTex + ((Distance( headJunc->pos, pos ) / sRatio) / j->widthEnd);
- } else {
- // FIXME: need a way to specify offset timing
- j->sTex = (animSpeed * (1.0 - ((float)(cg.time%1000) / 1000.0))) / (sRatio);
-// j->sTex = 0;
- }
- }
-
- return ((int)(j - trailJuncs) + 1);
+ trailJunc_t *j, *headJunc;
+
+ if( headJuncIndex > 0 )
+ {
+ headJunc = &trailJuncs[ headJuncIndex - 1 ];
+
+ if( !headJunc->inuse )
+ headJunc = NULL;
+ }
+ else
+ headJunc = NULL;
+
+ j = CG_SpawnTrailJunc( headJunc );
+
+ if( !j )
+ {
+// CG_Printf("couldnt spawn trail junc\n");
+ return 0;
+ }
+
+ if( alphaStart > 1.0 )
+ alphaStart = 1.0;
+
+ if( alphaStart < 0.0 )
+ alphaStart = 0.0;
+
+ if( alphaEnd > 1.0 )
+ alphaEnd = 1.0;
+
+ if( alphaEnd < 0.0 )
+ alphaEnd = 0.0;
+
+ // setup the trail junction
+ j->shader = shader;
+ j->sType = sType;
+ VectorCopy( pos, j->pos );
+ j->flags = flags;
+
+ j->spawnTime = spawnTime;
+ j->endTime = spawnTime + trailLife;
+
+ VectorCopy( colorStart, j->colorStart );
+ VectorCopy( colorEnd, j->colorEnd );
+
+ j->alphaStart = alphaStart;
+ j->alphaEnd = alphaEnd;
+
+ j->widthStart = startWidth;
+ j->widthEnd = endWidth;
+
+ if( sType == STYPE_REPEAT )
+ {
+ if( headJunc )
+ j->sTex = headJunc->sTex + ( ( Distance( headJunc->pos, pos ) / sRatio) / j->widthEnd );
+ else
+ {
+ // FIXME: need a way to specify offset timing
+ j->sTex = ( animSpeed * ( 1.0 - ( (float)( cg.time % 1000 ) / 1000.0 ) ) ) / ( sRatio );
+// j->sTex = 0;
+ }
+ }
+
+ return ( (int)( j - trailJuncs ) + 1 );
}
/*
@@ -204,46 +231,49 @@ CG_AddSparkJunc
returns the index of the trail junction created
===============
*/
-int CG_AddSparkJunc(int headJuncIndex, qhandle_t shader, vec3_t pos, int trailLife, float alphaStart, float alphaEnd, float startWidth, float endWidth)
+int CG_AddSparkJunc( int headJuncIndex, qhandle_t shader, vec3_t pos, int trailLife,
+ float alphaStart, float alphaEnd, float startWidth, float endWidth )
{
- trailJunc_t *j, *headJunc;
-
- if (headJuncIndex > 0) {
- headJunc = &trailJuncs[headJuncIndex-1];
-
- if (!headJunc->inuse)
- headJunc = NULL;
- }
- else
- headJunc = NULL;
-
- j = CG_SpawnTrailJunc(headJunc);
- if (!j)
- return 0;
-
- // setup the trail junction
- j->shader = shader;
- j->sType = STYPE_STRETCH;
- VectorCopy( pos, j->pos );
- j->flags = TJFL_NOCULL; // don't worry about fading up close
-
- j->spawnTime = cg.time;
- j->endTime = cg.time + trailLife;
-
- VectorSet(j->colorStart, 1.0, 0.8 + 0.2 * alphaStart, 0.4 + 0.4 * alphaStart);
- VectorSet(j->colorEnd, 1.0, 0.8 + 0.2 * alphaEnd, 0.4 + 0.4 * alphaEnd);
-// VectorScale( j->colorStart, alphaStart, j->colorStart );
-// VectorScale( j->colorEnd, alphaEnd, j->colorEnd );
-
- j->alphaStart = alphaStart*2;
- j->alphaEnd = alphaEnd*2;
-// j->alphaStart = 1.0;
-// j->alphaEnd = 1.0;
-
- j->widthStart = startWidth;
- j->widthEnd = endWidth;
-
- return ((int)(j - trailJuncs) + 1);
+ trailJunc_t *j, *headJunc;
+
+ if( headJuncIndex > 0 )
+ {
+ headJunc = &trailJuncs[ headJuncIndex - 1 ];
+
+ if( !headJunc->inuse )
+ headJunc = NULL;
+ }
+ else
+ headJunc = NULL;
+
+ j = CG_SpawnTrailJunc( headJunc );
+
+ if( !j )
+ return 0;
+
+ // setup the trail junction
+ j->shader = shader;
+ j->sType = STYPE_STRETCH;
+ VectorCopy( pos, j->pos );
+ j->flags = TJFL_NOCULL; // don't worry about fading up close
+
+ j->spawnTime = cg.time;
+ j->endTime = cg.time + trailLife;
+
+ VectorSet( j->colorStart, 1.0, 0.8 + 0.2 * alphaStart, 0.4 + 0.4 * alphaStart );
+ VectorSet( j->colorEnd, 1.0, 0.8 + 0.2 * alphaEnd, 0.4 + 0.4 * alphaEnd );
+// VectorScale( j->colorStart, alphaStart, j->colorStart );
+// VectorScale( j->colorEnd, alphaEnd, j->colorEnd );
+
+ j->alphaStart = alphaStart*2;
+ j->alphaEnd = alphaEnd*2;
+// j->alphaStart = 1.0;
+// j->alphaEnd = 1.0;
+
+ j->widthStart = startWidth;
+ j->widthEnd = endWidth;
+
+ return ( (int)( j - trailJuncs ) + 1 );
}
/*
@@ -253,54 +283,58 @@ CG_AddSmokeJunc
returns the index of the trail junction created
===============
*/
-int CG_AddSmokeJunc(int headJuncIndex, qhandle_t shader, vec3_t pos, int trailLife, float alpha, float startWidth, float endWidth)
+int CG_AddSmokeJunc( int headJuncIndex, qhandle_t shader, vec3_t pos, int trailLife,
+ float alpha, float startWidth, float endWidth )
{
-#define ST_RATIO 4.0 // sprite image: width / height
- trailJunc_t *j, *headJunc;
-
- if (headJuncIndex > 0) {
- headJunc = &trailJuncs[headJuncIndex-1];
-
- if (!headJunc->inuse)
- headJunc = NULL;
- }
- else
- headJunc = NULL;
-
- j = CG_SpawnTrailJunc(headJunc);
- if (!j)
- return 0;
-
- // setup the trail junction
- j->shader = shader;
- j->sType = STYPE_REPEAT;
- VectorCopy( pos, j->pos );
- j->flags = TJFL_FADEIN;
-
- j->spawnTime = cg.time;
- j->endTime = cg.time + trailLife;
-
- // VectorSet(j->colorStart, 0.2, 0.2, 0.2);
- VectorSet(j->colorStart, 0.0, 0.0, 0.0);
- // VectorSet(j->colorEnd, 0.1, 0.1, 0.1);
- VectorSet(j->colorEnd, 0.0, 0.0, 0.0);
-
- j->alphaStart = alpha;
- j->alphaEnd = 0.0;
-
- j->widthStart = startWidth;
- j->widthEnd = endWidth;
-
- if (headJunc) {
- j->sTex = headJunc->sTex + ((Distance( headJunc->pos, pos ) / ST_RATIO) / j->widthEnd);
- } else {
- // first junction, so this will become the "tail" very soon, make it fade out
- j->sTex = 0;
- j->alphaStart = 0.0;
- j->alphaEnd = 0.0;
- }
-
- return ((int)(j - trailJuncs) + 1);
+#define ST_RATIO 4.0 // sprite image: width / height
+ trailJunc_t *j, *headJunc;
+
+ if( headJuncIndex > 0 )
+ {
+ headJunc = &trailJuncs[ headJuncIndex - 1 ];
+
+ if( !headJunc->inuse )
+ headJunc = NULL;
+ }
+ else
+ headJunc = NULL;
+
+ j = CG_SpawnTrailJunc( headJunc );
+
+ if( !j )
+ return 0;
+
+ // setup the trail junction
+ j->shader = shader;
+ j->sType = STYPE_REPEAT;
+ VectorCopy( pos, j->pos );
+ j->flags = TJFL_FADEIN;
+
+ j->spawnTime = cg.time;
+ j->endTime = cg.time + trailLife;
+
+ // VectorSet(j->colorStart, 0.2, 0.2, 0.2);
+ VectorSet(j->colorStart, 0.0, 0.0, 0.0);
+ // VectorSet(j->colorEnd, 0.1, 0.1, 0.1);
+ VectorSet(j->colorEnd, 0.0, 0.0, 0.0);
+
+ j->alphaStart = alpha;
+ j->alphaEnd = 0.0;
+
+ j->widthStart = startWidth;
+ j->widthEnd = endWidth;
+
+ if( headJunc )
+ j->sTex = headJunc->sTex + ( ( Distance( headJunc->pos, pos ) / ST_RATIO ) / j->widthEnd );
+ else
+ {
+ // first junction, so this will become the "tail" very soon, make it fade out
+ j->sTex = 0;
+ j->alphaStart = 0.0;
+ j->alphaEnd = 0.0;
+ }
+
+ return ( (int)( j - trailJuncs ) + 1 );
}
void CG_KillTrail( trailJunc_t *t );
@@ -312,38 +346,46 @@ CG_FreeTrailJunc
*/
void CG_FreeTrailJunc( trailJunc_t *junc )
{
- // kill any juncs after us, so they aren't left hanging
- if (junc->nextJunc)
- CG_KillTrail( junc );
-
- // make it non-active
- junc->inuse = qfalse;
- junc->freed = qtrue;
- if (junc->nextGlobal)
- junc->nextGlobal->prevGlobal = junc->prevGlobal;
- if (junc->prevGlobal)
- junc->prevGlobal->nextGlobal = junc->nextGlobal;
- if (junc == activeTrails)
- activeTrails = junc->nextGlobal;
-
- // if it's a head, remove it
- if (junc == headTrails)
- headTrails = junc->nextHead;
- if (junc->nextHead)
- junc->nextHead->prevHead = junc->prevHead;
- if (junc->prevHead)
- junc->prevHead->nextHead = junc->nextHead;
- junc->nextHead = NULL;
- junc->prevHead = NULL;
-
- // stick it in the free list
- junc->prevGlobal = NULL;
- junc->nextGlobal = freeTrails;
- if (freeTrails)
- freeTrails->prevGlobal = junc;
- freeTrails = junc;
-
- numTrailsInuse--;
+ // kill any juncs after us, so they aren't left hanging
+ if( junc->nextJunc )
+ CG_KillTrail( junc );
+
+ // make it non-active
+ junc->inuse = qfalse;
+ junc->freed = qtrue;
+
+ if( junc->nextGlobal )
+ junc->nextGlobal->prevGlobal = junc->prevGlobal;
+
+ if( junc->prevGlobal )
+ junc->prevGlobal->nextGlobal = junc->nextGlobal;
+
+ if( junc == activeTrails )
+ activeTrails = junc->nextGlobal;
+
+ // if it's a head, remove it
+ if( junc == headTrails )
+ headTrails = junc->nextHead;
+
+ if( junc->nextHead )
+ junc->nextHead->prevHead = junc->prevHead;
+
+ if( junc->prevHead )
+ junc->prevHead->nextHead = junc->nextHead;
+
+ junc->nextHead = NULL;
+ junc->prevHead = NULL;
+
+ // stick it in the free list
+ junc->prevGlobal = NULL;
+ junc->nextGlobal = freeTrails;
+
+ if( freeTrails )
+ freeTrails->prevGlobal = junc;
+
+ freeTrails = junc;
+
+ numTrailsInuse--;
}
/*
@@ -353,15 +395,15 @@ CG_KillTrail
*/
void CG_KillTrail( trailJunc_t *t )
{
- trailJunc_t *next;
+ trailJunc_t *next;
- next = t->nextJunc;
+ next = t->nextJunc;
- // kill the trail here
- t->nextJunc = NULL;
+ // kill the trail here
+ t->nextJunc = NULL;
- if (next)
- CG_FreeTrailJunc( next );
+ if( next )
+ CG_FreeTrailJunc( next );
}
/*
@@ -374,301 +416,331 @@ CG_AddTrailToScene
static vec3_t vforward, vright, vup;
//TA: staticised to please QVM
- #define MAX_TRAIL_VERTS 2048
-static polyVert_t verts[MAX_TRAIL_VERTS];
-static polyVert_t outVerts[MAX_TRAIL_VERTS*3];
+ #define MAX_TRAIL_VERTS 2048
+static polyVert_t verts[ MAX_TRAIL_VERTS ];
+static polyVert_t outVerts[ MAX_TRAIL_VERTS * 3 ];
void CG_AddTrailToScene( trailJunc_t *trail, int iteration, int numJuncs )
{
- int k, i, n, l, numOutVerts;
- polyVert_t mid;
- float mod[4];
- float sInc = 0.0f, s = 0.0f; // TTimo: init
- trailJunc_t *j, *jNext;
- vec3_t fwd, up, p, v;
- // clipping vars
- #define TRAIL_FADE_CLOSE_DIST 64.0
- #define TRAIL_FADE_FAR_SCALE 4.0
- vec3_t viewProj;
- float viewDist, fadeAlpha;
-
- // add spark shader at head position
- if (trail->flags & TJFL_SPARKHEADFLARE) {
- j = trail;
- VectorCopy( j->pos, p );
- VectorMA (p, -j->width*2, vup, p);
- VectorMA (p, -j->width*2, vright, p);
- VectorCopy (p, verts[0].xyz);
- verts[0].st[0] = 0;
- verts[0].st[1] = 0;
- verts[0].modulate[0] = 255;
- verts[0].modulate[1] = 255;
- verts[0].modulate[2] = 255;
- verts[0].modulate[3] = (unsigned char)(j->alpha*255.0);
-
- VectorCopy( j->pos, p );
- VectorMA (p, -j->width*2, vup, p);
- VectorMA (p, j->width*2, vright, p);
- VectorCopy (p, verts[1].xyz);
- verts[1].st[0] = 0;
- verts[1].st[1] = 1;
- verts[1].modulate[0] = 255;
- verts[1].modulate[1] = 255;
- verts[1].modulate[2] = 255;
- verts[1].modulate[3] = (unsigned char)(j->alpha*255.0);
-
- VectorCopy( j->pos, p );
- VectorMA (p, j->width*2, vup, p);
- VectorMA (p, j->width*2, vright, p);
- VectorCopy (p, verts[2].xyz);
- verts[2].st[0] = 1;
- verts[2].st[1] = 1;
- verts[2].modulate[0] = 255;
- verts[2].modulate[1] = 255;
- verts[2].modulate[2] = 255;
- verts[2].modulate[3] = (unsigned char)(j->alpha*255.0);
-
- VectorCopy( j->pos, p );
- VectorMA (p, j->width*2, vup, p);
- VectorMA (p, -j->width*2, vright, p);
- VectorCopy (p, verts[3].xyz);
- verts[3].st[0] = 1;
- verts[3].st[1] = 0;
- verts[3].modulate[0] = 255;
- verts[3].modulate[1] = 255;
- verts[3].modulate[2] = 255;
- verts[3].modulate[3] = (unsigned char)(j->alpha*255.0);
-
- trap_R_AddPolyToScene( cgs.media.sparkFlareShader, 4, verts );
- }
-
-// if (trail->flags & TJFL_CROSSOVER && iteration < 1) {
-// iteration = 1;
-// }
-
- if (!numJuncs) {
- // first count the number of juncs in the trail
- j = trail;
- numJuncs = 0;
- sInc = 0;
- while (j) {
- numJuncs++;
-
- // check for a dead next junc
- if (!j->inuse && j->nextJunc && !j->nextJunc->inuse) {
- CG_KillTrail( j );
- } else if (j->nextJunc && j->nextJunc->freed) {
- // not sure how this can happen, but it does, and causes infinite loops
- j->nextJunc = NULL;
- }
-
- if (j->nextJunc)
- sInc += VectorDistance( j->nextJunc->pos, j->pos );
-
- j = j->nextJunc;
- }
- }
-
- if (numJuncs < 2) {
- return;
- }
-
- if (trail->sType == STYPE_STRETCH) {
- //sInc = ((1.0 - 0.1) / (float)(numJuncs)); // hack, the end of funnel shows a bit of the start (looping)
- s = 0.05;
- //s = 0.05;
- } else if (trail->sType == STYPE_REPEAT) {
- s = trail->sTex;
- }
-
- // now traverse the list
- j = trail;
- jNext = j->nextJunc;
- i = 0;
- while (jNext) {
-
- // first get the directional vectors to the next junc
- VectorSubtract( jNext->pos, j->pos, fwd );
- GetPerpendicularViewVector( cg.refdef.vieworg, j->pos, jNext->pos, up );
-
- // if it's a crossover, draw it twice
- if (j->flags & TJFL_CROSSOVER) {
- if (iteration > 0) {
- ProjectPointOntoVector( cg.refdef.vieworg, j->pos, jNext->pos, viewProj );
- VectorSubtract( cg.refdef.vieworg, viewProj, v );
- VectorNormalize( v );
-
- if (iteration == 1) {
- VectorMA( up, 0.3, v, up );
- } else {
- VectorMA( up, -0.3, v, up );
- }
- VectorNormalize( up );
- }
- }
- // do fading when moving towards the projection point onto the trail segment vector
- else if (!(j->flags & TJFL_NOCULL) && (j->widthEnd > 4 || jNext->widthEnd > 4)) {
- ProjectPointOntoVector( cg.refdef.vieworg, j->pos, jNext->pos, viewProj );
- viewDist = Distance( viewProj, cg.refdef.vieworg );
- if (viewDist < (TRAIL_FADE_CLOSE_DIST * TRAIL_FADE_FAR_SCALE)) {
- if (viewDist < TRAIL_FADE_CLOSE_DIST) {
- fadeAlpha = 0.0;
- } else {
- fadeAlpha = (viewDist - TRAIL_FADE_CLOSE_DIST) / (TRAIL_FADE_CLOSE_DIST * TRAIL_FADE_FAR_SCALE);
- }
- if (fadeAlpha < j->alpha) {
- j->alpha = fadeAlpha;
- }
- if (fadeAlpha < jNext->alpha) {
- jNext->alpha = fadeAlpha;
- }
- }
- }
-
- // now output the QUAD for this segment
-
- // 1 ----
- VectorMA( j->pos, 0.5*j->width, up, p );
- VectorCopy( p, verts[i].xyz );
- verts[i].st[0] = s;
- verts[i].st[1] = 1.0;
- for (k=0; k<3; k++)
- verts[i].modulate[k] = (unsigned char)(j->color[k]*255.0);
- verts[i].modulate[3] = (unsigned char)(j->alpha*255.0);
-
- // blend this with the previous junc
- if (j != trail) {
- VectorAdd( verts[i].xyz, verts[i-1].xyz, verts[i].xyz );
- VectorScale( verts[i].xyz, 0.5, verts[i].xyz );
- VectorCopy( verts[i].xyz, verts[i-1].xyz );
- } else if (j->flags & TJFL_FADEIN) {
- verts[i].modulate[3] = 0; // fade in
- }
-
- i++;
-
- // 2 ----
- VectorMA( p, -1*j->width, up, p );
- VectorCopy( p, verts[i].xyz );
- verts[i].st[0] = s;
- verts[i].st[1] = 0.0;
- for (k=0; k<3; k++)
- verts[i].modulate[k] = (unsigned char)(j->color[k]*255.0);
- verts[i].modulate[3] = (unsigned char)(j->alpha*255.0);
-
- // blend this with the previous junc
- if (j != trail) {
- VectorAdd( verts[i].xyz, verts[i-3].xyz, verts[i].xyz );
- VectorScale( verts[i].xyz, 0.5, verts[i].xyz );
- VectorCopy( verts[i].xyz, verts[i-3].xyz );
- } else if (j->flags & TJFL_FADEIN) {
- verts[i].modulate[3] = 0; // fade in
- }
-
- i++;
-
- if (trail->sType == STYPE_REPEAT)
- s = jNext->sTex;
- else {
- //s += sInc;
- s += VectorDistance( j->pos, jNext->pos ) / sInc;
- if (s > 1.0) s = 1.0;
- }
-
- // 3 ----
- VectorMA( jNext->pos, -0.5*jNext->width, up, p );
- VectorCopy( p, verts[i].xyz );
- verts[i].st[0] = s;
- verts[i].st[1] = 0.0;
- for (k=0; k<3; k++)
- verts[i].modulate[k] = (unsigned char)(jNext->color[k]*255.0);
- verts[i].modulate[3] = (unsigned char)(jNext->alpha*255.0);
- i++;
-
- // 4 ----
- VectorMA( p, jNext->width, up, p );
- VectorCopy( p, verts[i].xyz );
- verts[i].st[0] = s;
- verts[i].st[1] = 1.0;
- for (k=0; k<3; k++)
- verts[i].modulate[k] = (unsigned char)(jNext->color[k]*255.0);
- verts[i].modulate[3] = (unsigned char)(jNext->alpha*255.0);
- i++;
-
- if (i+4 > MAX_TRAIL_VERTS)
- break;
-
- j = jNext;
- jNext = j->nextJunc;
- }
-
- if (trail->flags & TJFL_FIXDISTORT) {
- // build the list of outVerts, by dividing up the QUAD's into 4 Tri's each, so as to allow
- // any shaped (convex) Quad without bilinear distortion
- for (k=0, numOutVerts=0; k<i; k+=4) {
- VectorCopy(verts[k].xyz, mid.xyz);
- mid.st[0] = verts[k].st[0];
- mid.st[1] = verts[k].st[1];
- for (l=0; l<4; l++) {
- mod[l] = (float)verts[k].modulate[l];
- }
- for (n=1; n<4; n++) {
- VectorAdd( verts[k+n].xyz, mid.xyz, mid.xyz );
- mid.st[0] += verts[k+n].st[0];
- mid.st[1] += verts[k+n].st[1];
- for (l=0; l<4; l++) {
- mod[l] += (float)verts[k+n].modulate[l];
- }
- }
- VectorScale( mid.xyz, 0.25, mid.xyz );
- mid.st[0] *= 0.25;
- mid.st[1] *= 0.25;
- for (l=0; l<4; l++) {
- mid.modulate[l] = (unsigned char)(mod[l]/4.0);
- }
-
- // now output the tri's
- for (n=0; n<4; n++) {
- outVerts[numOutVerts++] = verts[k+n];
- outVerts[numOutVerts++] = mid;
- if (n<3) {
- outVerts[numOutVerts++] = verts[k+n+1];
- } else {
- outVerts[numOutVerts++] = verts[k];
- }
- }
-
- }
-
- if (!(trail->flags & TJFL_NOPOLYMERGE)) {
- trap_R_AddPolysToScene( trail->shader, 3, &outVerts[0], numOutVerts/3 );
- } else {
- int k;
- for (k=0; k<numOutVerts/3; k++) {
- trap_R_AddPolyToScene( trail->shader, 3, &outVerts[k*3] );
- }
- }
- }
- else
- {
- // send the polygons
- // FIXME: is it possible to send a GL_STRIP here? We are actually sending 2x the verts we really need to
- if (!(trail->flags & TJFL_NOPOLYMERGE)) {
- trap_R_AddPolysToScene( trail->shader, 4, &verts[0], i/4 );
- } else {
- int k;
- for (k=0; k<i/4; k++) {
- trap_R_AddPolyToScene( trail->shader, 4, &verts[k*4] );
- }
- }
- }
-
- // do we need to make another pass?
- if (trail->flags & TJFL_CROSSOVER) {
- if (iteration < 2) {
- CG_AddTrailToScene( trail, iteration + 1, numJuncs );
- }
- }
+ int k, i, n, l, numOutVerts;
+ polyVert_t mid;
+ float mod[ 4 ];
+ float sInc = 0.0f, s = 0.0f; // TTimo: init
+ trailJunc_t *j, *jNext;
+ vec3_t fwd, up, p, v;
+
+ // clipping vars
+ #define TRAIL_FADE_CLOSE_DIST 64.0
+ #define TRAIL_FADE_FAR_SCALE 4.0
+ vec3_t viewProj;
+ float viewDist, fadeAlpha;
+
+ // add spark shader at head position
+ if( trail->flags & TJFL_SPARKHEADFLARE )
+ {
+ j = trail;
+ VectorCopy( j->pos, p );
+ VectorMA( p, -j->width * 2, vup, p );
+ VectorMA( p, -j->width * 2, vright, p );
+ VectorCopy( p, verts[ 0 ].xyz );
+ verts[ 0 ].st[ 0 ] = 0;
+ verts[ 0 ].st[ 1 ] = 0;
+ verts[ 0 ].modulate[ 0 ] = 255;
+ verts[ 0 ].modulate[ 1 ] = 255;
+ verts[ 0 ].modulate[ 2 ] = 255;
+ verts[ 0 ].modulate[ 3 ] = (unsigned char)( j->alpha * 255.0 );
+
+ VectorCopy( j->pos, p );
+ VectorMA( p, -j->width * 2, vup, p );
+ VectorMA( p, j->width * 2, vright, p );
+ VectorCopy( p, verts[ 1 ].xyz );
+ verts[ 1 ].st[ 0 ] = 0;
+ verts[ 1 ].st[ 1 ] = 1;
+ verts[ 1 ].modulate[ 0 ] = 255;
+ verts[ 1 ].modulate[ 1 ] = 255;
+ verts[ 1 ].modulate[ 2 ] = 255;
+ verts[ 1 ].modulate[ 3 ] = (unsigned char)( j->alpha * 255.0 );
+
+ VectorCopy( j->pos, p );
+ VectorMA( p, j->width * 2, vup, p );
+ VectorMA( p, j->width * 2, vright, p );
+ VectorCopy( p, verts[ 2 ].xyz );
+ verts[ 2 ].st[ 0 ] = 1;
+ verts[ 2 ].st[ 1 ] = 1;
+ verts[ 2 ].modulate[ 0 ] = 255;
+ verts[ 2 ].modulate[ 1 ] = 255;
+ verts[ 2 ].modulate[ 2 ] = 255;
+ verts[ 2 ].modulate[ 3 ] = (unsigned char)( j->alpha * 255.0 );
+
+ VectorCopy( j->pos, p );
+ VectorMA( p, j->width * 2, vup, p );
+ VectorMA( p, -j->width * 2, vright, p );
+ VectorCopy( p, verts[ 3 ].xyz );
+ verts[ 3 ].st[ 0 ] = 1;
+ verts[ 3 ].st[ 1 ] = 0;
+ verts[ 3 ].modulate[ 0 ] = 255;
+ verts[ 3 ].modulate[ 1 ] = 255;
+ verts[ 3 ].modulate[ 2 ] = 255;
+ verts[ 3 ].modulate[ 3 ] = (unsigned char)( j->alpha * 255.0 );
+
+ trap_R_AddPolyToScene( cgs.media.sparkFlareShader, 4, verts );
+ }
+
+// if (trail->flags & TJFL_CROSSOVER && iteration < 1) {
+// iteration = 1;
+// }
+
+ if( !numJuncs )
+ {
+ // first count the number of juncs in the trail
+ j = trail;
+ numJuncs = 0;
+ sInc = 0;
+
+ while( j )
+ {
+ numJuncs++;
+
+ // check for a dead next junc
+ if( !j->inuse && j->nextJunc && !j->nextJunc->inuse )
+ CG_KillTrail( j );
+ else if( j->nextJunc && j->nextJunc->freed )
+ {
+ // not sure how this can happen, but it does, and causes infinite loops
+ j->nextJunc = NULL;
+ }
+
+ if( j->nextJunc )
+ sInc += VectorDistance( j->nextJunc->pos, j->pos );
+
+ j = j->nextJunc;
+ }
+ }
+
+ if( numJuncs < 2 )
+ return;
+
+ if( trail->sType == STYPE_STRETCH )
+ {
+ //sInc = ((1.0 - 0.1) / (float)(numJuncs)); // hack, the end of funnel shows a bit of the start (looping)
+ s = 0.05;
+ //s = 0.05;
+ }
+ else if( trail->sType == STYPE_REPEAT )
+ s = trail->sTex;
+
+ // now traverse the list
+ j = trail;
+ jNext = j->nextJunc;
+ i = 0;
+ while( jNext )
+ {
+ // first get the directional vectors to the next junc
+ VectorSubtract( jNext->pos, j->pos, fwd );
+ GetPerpendicularViewVector( cg.refdef.vieworg, j->pos, jNext->pos, up );
+
+ // if it's a crossover, draw it twice
+ if( j->flags & TJFL_CROSSOVER )
+ {
+ if( iteration > 0 )
+ {
+ ProjectPointOntoVector( cg.refdef.vieworg, j->pos, jNext->pos, viewProj );
+ VectorSubtract( cg.refdef.vieworg, viewProj, v );
+ VectorNormalize( v );
+
+ if( iteration == 1 )
+ VectorMA( up, 0.3, v, up );
+ else
+ VectorMA( up, -0.3, v, up );
+
+ VectorNormalize( up );
+ }
+ }
+ // do fading when moving towards the projection point onto the trail segment vector
+ else if( !( j->flags & TJFL_NOCULL ) && ( j->widthEnd > 4 || jNext->widthEnd > 4 ) )
+ {
+ ProjectPointOntoVector( cg.refdef.vieworg, j->pos, jNext->pos, viewProj );
+ viewDist = Distance( viewProj, cg.refdef.vieworg );
+
+ if( viewDist < ( TRAIL_FADE_CLOSE_DIST * TRAIL_FADE_FAR_SCALE ) )
+ {
+ if( viewDist < TRAIL_FADE_CLOSE_DIST )
+ fadeAlpha = 0.0;
+ else
+ fadeAlpha = ( viewDist - TRAIL_FADE_CLOSE_DIST ) / ( TRAIL_FADE_CLOSE_DIST * TRAIL_FADE_FAR_SCALE );
+
+ if( fadeAlpha < j->alpha )
+ j->alpha = fadeAlpha;
+
+ if( fadeAlpha < jNext->alpha )
+ jNext->alpha = fadeAlpha;
+ }
+ }
+
+ // now output the QUAD for this segment
+
+ // 1 ----
+ VectorMA( j->pos, 0.5 * j->width, up, p );
+ VectorCopy( p, verts[ i ].xyz );
+ verts[ i ].st[ 0 ] = s;
+ verts[ i ].st[ 1 ] = 1.0;
+
+ for( k = 0; k < 3; k++ )
+ verts[ i ].modulate[ k ] = (unsigned char)( j->color[ k ] * 255.0 );
+
+ verts[ i ].modulate[ 3 ] = (unsigned char)( j->alpha * 255.0 );
+
+ // blend this with the previous junc
+ if( j != trail )
+ {
+ VectorAdd( verts[ i ].xyz, verts[ i - 1 ].xyz, verts[ i ].xyz );
+ VectorScale( verts[ i ].xyz, 0.5, verts[ i ].xyz );
+ VectorCopy( verts[ i ].xyz, verts[ i - 1 ].xyz );
+ }
+ else if( j->flags & TJFL_FADEIN )
+ verts[ i ].modulate[ 3 ] = 0; // fade in
+
+ i++;
+
+ // 2 ----
+ VectorMA( p, -1 * j->width, up, p );
+ VectorCopy( p, verts[ i ].xyz );
+ verts[ i ].st[ 0 ] = s;
+ verts[ i ].st[ 1 ] = 0.0;
+
+ for( k = 0; k < 3; k++ )
+ verts[ i ].modulate[ k ] = (unsigned char)( j->color[ k ] * 255.0 );
+
+ verts[ i ].modulate[ 3 ] = (unsigned char)( j->alpha * 255.0 );
+
+ // blend this with the previous junc
+ if( j != trail )
+ {
+ VectorAdd( verts[ i ].xyz, verts[ i - 3 ].xyz, verts[ i ].xyz );
+ VectorScale( verts[ i ].xyz, 0.5, verts[ i ].xyz );
+ VectorCopy( verts[ i ].xyz, verts[ i - 3 ].xyz );
+ }
+ else if( j->flags & TJFL_FADEIN )
+ verts[ i ].modulate[ 3 ] = 0; // fade in
+
+ i++;
+
+ if( trail->sType == STYPE_REPEAT )
+ s = jNext->sTex;
+ else
+ {
+ //s += sInc;
+ s += VectorDistance( j->pos, jNext->pos ) / sInc;
+ if( s > 1.0 )
+ s = 1.0;
+ }
+
+ // 3 ----
+ VectorMA( jNext->pos, -0.5 * jNext->width, up, p );
+ VectorCopy( p, verts[ i ].xyz );
+ verts[ i ].st[ 0 ] = s;
+ verts[ i ].st[ 1 ] = 0.0;
+
+ for( k = 0; k < 3; k++ )
+ verts[ i ].modulate[ k ] = (unsigned char)( jNext->color[ k ] * 255.0 );
+
+ verts[ i ].modulate[ 3 ] = (unsigned char)( jNext->alpha * 255.0 );
+ i++;
+
+ // 4 ----
+ VectorMA( p, jNext->width, up, p );
+ VectorCopy( p, verts[ i ].xyz );
+ verts[ i ].st[ 0 ] = s;
+ verts[ i ].st[ 1 ] = 1.0;
+
+ for( k = 0; k < 3; k++ )
+ verts[ i ].modulate[ k ] = (unsigned char)( jNext->color[ k ] * 255.0 );
+
+ verts[ i ].modulate[ 3 ] = (unsigned char)( jNext->alpha * 255.0 );
+ i++;
+
+ if( i + 4 > MAX_TRAIL_VERTS )
+ break;
+
+ j = jNext;
+ jNext = j->nextJunc;
+ }
+
+ if( trail->flags & TJFL_FIXDISTORT )
+ {
+ // build the list of outVerts, by dividing up the QUAD's into 4 Tri's each, so as to allow
+ // any shaped (convex) Quad without bilinear distortion
+ for( k = 0, numOutVerts = 0; k < i; k += 4 )
+ {
+ VectorCopy( verts[ k ].xyz, mid.xyz );
+ mid.st[ 0 ] = verts[ k ].st[ 0 ];
+ mid.st[ 1 ] = verts[ k ].st[ 1 ];
+
+ for( l = 0; l < 4; l++ )
+ mod[ l ] = (float)verts[ k ].modulate[ l ];
+
+ for( n = 1; n < 4; n++ )
+ {
+ VectorAdd( verts[ k + n ].xyz, mid.xyz, mid.xyz );
+ mid.st[ 0 ] += verts[ k + n ].st[ 0 ];
+ mid.st[ 1 ] += verts[ k + n ].st[ 1 ];
+
+ for( l = 0; l < 4; l++ )
+ mod[ l ] += (float)verts[ k + n ].modulate[ l ];
+ }
+
+ VectorScale( mid.xyz, 0.25, mid.xyz );
+ mid.st[ 0 ] *= 0.25;
+ mid.st[ 1 ] *= 0.25;
+
+ for( l = 0; l < 4; l++ )
+ mid.modulate[ l ] = (unsigned char)( mod[ l ] / 4.0 );
+
+ // now output the tri's
+ for( n = 0; n < 4; n++ )
+ {
+ outVerts[ numOutVerts++ ] = verts[ k + n ];
+ outVerts[ numOutVerts++ ] = mid;
+
+ if( n < 3 )
+ outVerts[ numOutVerts++ ] = verts[ k + n + 1 ];
+ else
+ outVerts[ numOutVerts++ ] = verts[ k ];
+ }
+
+ }
+
+ if( !( trail->flags & TJFL_NOPOLYMERGE ) )
+ trap_R_AddPolysToScene( trail->shader, 3, &outVerts[ 0 ], numOutVerts / 3 );
+ else
+ {
+ int k;
+
+ for( k = 0; k < numOutVerts / 3; k++ )
+ trap_R_AddPolyToScene( trail->shader, 3, &outVerts[ k * 3 ] );
+ }
+ }
+ else
+ {
+ // send the polygons
+ // FIXME: is it possible to send a GL_STRIP here? We are actually sending 2x the verts we really need to
+ if( !( trail->flags & TJFL_NOPOLYMERGE ) )
+ trap_R_AddPolysToScene( trail->shader, 4, &verts[ 0 ], i / 4 );
+ else
+ {
+ int k;
+
+ for( k = 0; k < i / 4; k++ )
+ trap_R_AddPolyToScene( trail->shader, 4, &verts[ k * 4 ] );
+ }
+ }
+
+ // do we need to make another pass?
+ if( trail->flags & TJFL_CROSSOVER )
+ {
+ if( iteration < 2 )
+ CG_AddTrailToScene( trail, iteration + 1, numJuncs );
+ }
}
@@ -677,52 +749,68 @@ void CG_AddTrailToScene( trailJunc_t *trail, int iteration, int numJuncs )
CG_AddTrails
===============
*/
-void CG_AddTrails(void)
+void CG_AddTrails( void )
{
- float lifeFrac;
- trailJunc_t *j, *jNext;
-
- if (!initTrails) {
- CG_ClearTrails();
- }
-
- //AngleVectors( cg.snap->ps.viewangles, vforward, vright, vup );
- VectorCopy( cg.refdef.viewaxis[0], vforward );
- VectorCopy( cg.refdef.viewaxis[1], vright );
- VectorCopy( cg.refdef.viewaxis[2], vup );
-
- // update the settings for each junc
- j = activeTrails;
- while (j) {
- lifeFrac = (float)(cg.time - j->spawnTime) / (float)(j->endTime - j->spawnTime);
- if (lifeFrac >= 1.0) {
- j->inuse = qfalse; // flag it as dead
- j->width = j->widthEnd;
- j->alpha = j->alphaEnd;
- if (j->alpha > 1.0) j->alpha = 1.0;
- else if (j->alpha < 0.0) j->alpha = 0.0;
- VectorCopy( j->colorEnd, j->color );
- } else {
- j->width = j->widthStart + (j->widthEnd - j->widthStart) * lifeFrac;
- j->alpha = j->alphaStart + (j->alphaEnd - j->alphaStart) * lifeFrac;
- if (j->alpha > 1.0) j->alpha = 1.0;
- else if (j->alpha < 0.0) j->alpha = 0.0;
- VectorSubtract( j->colorEnd, j->colorStart, j->color );
- VectorMA( j->colorStart, lifeFrac, j->color, j->color );
- }
-
- j = j->nextGlobal;
- }
-
- // draw the trailHeads
- j = headTrails;
- while (j) {
- jNext = j->nextHead; // in case it gets removed
- if (!j->inuse) {
- CG_FreeTrailJunc(j);
- } else {
- CG_AddTrailToScene( j, 0, 0 );
- }
- j = jNext;
- }
+ float lifeFrac;
+ trailJunc_t *j, *jNext;
+
+ if( !initTrails )
+ CG_ClearTrails( );
+
+ //AngleVectors( cg.snap->ps.viewangles, vforward, vright, vup );
+ VectorCopy( cg.refdef.viewaxis[ 0 ], vforward );
+ VectorCopy( cg.refdef.viewaxis[ 1 ], vright );
+ VectorCopy( cg.refdef.viewaxis[ 2 ], vup );
+
+ // update the settings for each junc
+ j = activeTrails;
+
+ while( j )
+ {
+ lifeFrac = (float)( cg.time - j->spawnTime ) / (float)( j->endTime - j->spawnTime );
+
+ if( lifeFrac >= 1.0 )
+ {
+ j->inuse = qfalse; // flag it as dead
+ j->width = j->widthEnd;
+ j->alpha = j->alphaEnd;
+
+ if( j->alpha > 1.0 )
+ j->alpha = 1.0;
+ else if( j->alpha < 0.0 )
+ j->alpha = 0.0;
+
+ VectorCopy( j->colorEnd, j->color );
+ }
+ else
+ {
+ j->width = j->widthStart + ( j->widthEnd - j->widthStart ) * lifeFrac;
+ j->alpha = j->alphaStart + ( j->alphaEnd - j->alphaStart ) * lifeFrac;
+
+ if( j->alpha > 1.0 )
+ j->alpha = 1.0;
+ else if( j->alpha < 0.0 )
+ j->alpha = 0.0;
+
+ VectorSubtract( j->colorEnd, j->colorStart, j->color );
+ VectorMA( j->colorStart, lifeFrac, j->color, j->color );
+ }
+
+ j = j->nextGlobal;
+ }
+
+ // draw the trailHeads
+ j = headTrails;
+
+ while( j )
+ {
+ jNext = j->nextHead; // in case it gets removed
+
+ if( !j->inuse )
+ CG_FreeTrailJunc( j );
+ else
+ CG_AddTrailToScene( j, 0, 0 );
+
+ j = jNext;
+ }
}
diff --git a/src/cgame/cg_view.c b/src/cgame/cg_view.c
index 6c5d2ad3..afe9c979 100644
--- a/src/cgame/cg_view.c
+++ b/src/cgame/cg_view.c
@@ -62,32 +62,36 @@ Creates an entity in front of the current position, which
can then be moved around
=================
*/
-void CG_TestModel_f (void) {
+void CG_TestModel_f( void )
+{
vec3_t angles;
- memset( &cg.testModelEntity, 0, sizeof(cg.testModelEntity) );
- if ( trap_Argc() < 2 ) {
+ memset( &cg.testModelEntity, 0, sizeof( cg.testModelEntity ) );
+
+ if( trap_Argc( ) < 2 )
return;
- }
- Q_strncpyz (cg.testModelName, CG_Argv( 1 ), MAX_QPATH );
+ Q_strncpyz( cg.testModelName, CG_Argv( 1 ), MAX_QPATH );
cg.testModelEntity.hModel = trap_R_RegisterModel( cg.testModelName );
- if ( trap_Argc() == 3 ) {
+ if( trap_Argc( ) == 3 )
+ {
cg.testModelEntity.backlerp = atof( CG_Argv( 2 ) );
cg.testModelEntity.frame = 1;
cg.testModelEntity.oldframe = 0;
}
- if (! cg.testModelEntity.hModel ) {
+
+ if( !cg.testModelEntity.hModel )
+ {
CG_Printf( "Can't register model\n" );
return;
}
- VectorMA( cg.refdef.vieworg, 100, cg.refdef.viewaxis[0], cg.testModelEntity.origin );
+ VectorMA( cg.refdef.vieworg, 100, cg.refdef.viewaxis[ 0 ], cg.testModelEntity.origin );
- angles[PITCH] = 0;
- angles[YAW] = 180 + cg.refdefViewAngles[1];
- angles[ROLL] = 0;
+ angles[ PITCH ] = 0;
+ angles[ YAW ] = 180 + cg.refdefViewAngles[ 1 ];
+ angles[ ROLL ] = 0;
AnglesToAxis( angles, cg.testModelEntity.axis );
cg.testGun = qfalse;
@@ -100,61 +104,73 @@ CG_TestGun_f
Replaces the current view weapon with the given model
=================
*/
-void CG_TestGun_f (void) {
- CG_TestModel_f();
+void CG_TestGun_f( void )
+{
+ CG_TestModel_f( );
cg.testGun = qtrue;
cg.testModelEntity.renderfx = RF_MINLIGHT | RF_DEPTHHACK | RF_FIRST_PERSON;
}
-void CG_TestModelNextFrame_f (void) {
+void CG_TestModelNextFrame_f( void )
+{
cg.testModelEntity.frame++;
CG_Printf( "frame %i\n", cg.testModelEntity.frame );
}
-void CG_TestModelPrevFrame_f (void) {
+void CG_TestModelPrevFrame_f( void )
+{
cg.testModelEntity.frame--;
- if ( cg.testModelEntity.frame < 0 ) {
+
+ if( cg.testModelEntity.frame < 0 )
cg.testModelEntity.frame = 0;
- }
+
CG_Printf( "frame %i\n", cg.testModelEntity.frame );
}
-void CG_TestModelNextSkin_f (void) {
+void CG_TestModelNextSkin_f( void )
+{
cg.testModelEntity.skinNum++;
CG_Printf( "skin %i\n", cg.testModelEntity.skinNum );
}
-void CG_TestModelPrevSkin_f (void) {
+void CG_TestModelPrevSkin_f( void )
+{
cg.testModelEntity.skinNum--;
- if ( cg.testModelEntity.skinNum < 0 ) {
+
+ if( cg.testModelEntity.skinNum < 0 )
cg.testModelEntity.skinNum = 0;
- }
+
CG_Printf( "skin %i\n", cg.testModelEntity.skinNum );
}
-static void CG_AddTestModel (void) {
+static void CG_AddTestModel( void )
+{
int i;
// re-register the model, because the level may have changed
cg.testModelEntity.hModel = trap_R_RegisterModel( cg.testModelName );
- if (! cg.testModelEntity.hModel ) {
+
+ if( ! cg.testModelEntity.hModel )
+ {
CG_Printf ("Can't register model\n");
return;
}
// if testing a gun, set the origin reletive to the view origin
- if ( cg.testGun ) {
+ if( cg.testGun )
+ {
VectorCopy( cg.refdef.vieworg, cg.testModelEntity.origin );
- VectorCopy( cg.refdef.viewaxis[0], cg.testModelEntity.axis[0] );
- VectorCopy( cg.refdef.viewaxis[1], cg.testModelEntity.axis[1] );
- VectorCopy( cg.refdef.viewaxis[2], cg.testModelEntity.axis[2] );
+ VectorCopy( cg.refdef.viewaxis[ 0 ], cg.testModelEntity.axis[ 0 ] );
+ VectorCopy( cg.refdef.viewaxis[ 1 ], cg.testModelEntity.axis[ 1 ] );
+ VectorCopy( cg.refdef.viewaxis[ 2 ], cg.testModelEntity.axis[ 2 ] );
// allow the position to be adjusted
- for (i=0 ; i<3 ; i++) {
- cg.testModelEntity.origin[i] += cg.refdef.viewaxis[0][i] * cg_gun_x.value;
- cg.testModelEntity.origin[i] += cg.refdef.viewaxis[1][i] * cg_gun_y.value;
- cg.testModelEntity.origin[i] += cg.refdef.viewaxis[2][i] * cg_gun_z.value;
+ for( i = 0; i < 3; i++ )
+ {
+ cg.testModelEntity.origin[ i ] += cg.refdef.viewaxis[ 0 ][ i ] * cg_gun_x.value;
+ cg.testModelEntity.origin[ i ] += cg.refdef.viewaxis[ 1 ][ i ] * cg_gun_y.value;
+ cg.testModelEntity.origin[ i ] += cg.refdef.viewaxis[ 2 ][ i ] * cg_gun_z.value;
}
}
@@ -173,33 +189,38 @@ CG_CalcVrect
Sets the coordinates of the rendered window
=================
*/
-static void CG_CalcVrect (void) {
+static void CG_CalcVrect( void )
+{
int size;
// the intermission should allways be full screen
- if ( cg.snap->ps.pm_type == PM_INTERMISSION ) {
+ if( cg.snap->ps.pm_type == PM_INTERMISSION )
size = 100;
- } else {
+ else
+ {
// bound normal viewsize
- if (cg_viewsize.integer < 30) {
- trap_Cvar_Set ("cg_viewsize","30");
+ if( cg_viewsize.integer < 30 )
+ {
+ trap_Cvar_Set( "cg_viewsize", "30" );
size = 30;
- } else if (cg_viewsize.integer > 100) {
- trap_Cvar_Set ("cg_viewsize","100");
+ }
+ else if( cg_viewsize.integer > 100 )
+ {
+ trap_Cvar_Set( "cg_viewsize","100" );
size = 100;
- } else {
- size = cg_viewsize.integer;
}
-
+ else
+ size = cg_viewsize.integer;
}
- cg.refdef.width = cgs.glconfig.vidWidth*size/100;
+
+ cg.refdef.width = cgs.glconfig.vidWidth * size / 100;
cg.refdef.width &= ~1;
- cg.refdef.height = cgs.glconfig.vidHeight*size/100;
+ cg.refdef.height = cgs.glconfig.vidHeight * size / 100;
cg.refdef.height &= ~1;
- cg.refdef.x = (cgs.glconfig.vidWidth - cg.refdef.width)/2;
- cg.refdef.y = (cgs.glconfig.vidHeight - cg.refdef.height)/2;
+ cg.refdef.x = ( cgs.glconfig.vidWidth - cg.refdef.width ) / 2;
+ cg.refdef.y = ( cgs.glconfig.vidHeight - cg.refdef.height ) / 2;
}
//==============================================================================
@@ -328,7 +349,7 @@ static void CG_StepOffset( void )
if( ps->stats[ STAT_STATE ] & SS_WALLCLIMBING )
VectorMA( cg.refdef.vieworg, -stepChange, normal, cg.refdef.vieworg );
else
- cg.refdef.vieworg[2] -= stepChange;
+ cg.refdef.vieworg[ 2 ] -= stepChange;
}
}
@@ -345,17 +366,18 @@ CG_OffsetFirstPersonView
===============
*/
-static void CG_OffsetFirstPersonView( void ) {
- float *origin;
- float *angles;
- float bob;
- float ratio;
- float delta;
- float speed;
- float f;
- vec3_t predictedVelocity;
- int timeDelta;
- float bob2;
+static void CG_OffsetFirstPersonView( void )
+{
+ float *origin;
+ float *angles;
+ float bob;
+ float ratio;
+ float delta;
+ float speed;
+ float f;
+ vec3_t predictedVelocity;
+ int timeDelta;
+ float bob2;
vec3_t normal, baseOrigin;
playerState_t *ps = &cg.predictedPlayerState;
@@ -370,9 +392,8 @@ static void CG_OffsetFirstPersonView( void ) {
VectorSet( normal, 0.0f, 0.0f, 1.0f );
- if ( cg.snap->ps.pm_type == PM_INTERMISSION ) {
+ if( cg.snap->ps.pm_type == PM_INTERMISSION )
return;
- }
origin = cg.refdef.vieworg;
angles = cg.refdefViewAngles;
@@ -380,29 +401,35 @@ static void CG_OffsetFirstPersonView( void ) {
VectorCopy( origin, baseOrigin );
// if dead, fix the angle and don't add any kick
- if ( cg.snap->ps.stats[STAT_HEALTH] <= 0 ) {
- angles[ROLL] = 40;
- angles[PITCH] = -15;
- angles[YAW] = cg.snap->ps.generic1;
- origin[2] += cg.predictedPlayerState.viewheight;
+ if( cg.snap->ps.stats[ STAT_HEALTH ] <= 0 )
+ {
+ angles[ ROLL ] = 40;
+ angles[ PITCH ] = -15;
+ angles[ YAW ] = cg.snap->ps.generic1;
+ origin[ 2 ] += cg.predictedPlayerState.viewheight;
return;
}
// add angles based on weapon kick
- VectorAdd (angles, cg.kick_angles, angles);
+ VectorAdd( angles, cg.kick_angles, angles );
// add angles based on damage kick
- if ( cg.damageTime ) {
+ if( cg.damageTime )
+ {
ratio = cg.time - cg.damageTime;
- if ( ratio < DAMAGE_DEFLECT_TIME ) {
+ if( ratio < DAMAGE_DEFLECT_TIME )
+ {
ratio /= DAMAGE_DEFLECT_TIME;
- angles[PITCH] += ratio * cg.v_dmg_pitch;
- angles[ROLL] += ratio * cg.v_dmg_roll;
- } else {
+ angles[ PITCH ] += ratio * cg.v_dmg_pitch;
+ angles[ ROLL ] += ratio * cg.v_dmg_roll;
+ }
+ else
+ {
ratio = 1.0 - ( ratio - DAMAGE_DEFLECT_TIME ) / DAMAGE_RETURN_TIME;
- if ( ratio > 0 ) {
- angles[PITCH] += ratio * cg.v_dmg_pitch;
- angles[ROLL] += ratio * cg.v_dmg_roll;
+ if( ratio > 0 )
+ {
+ angles[ PITCH ] += ratio * cg.v_dmg_pitch;
+ angles[ ROLL ] += ratio * cg.v_dmg_roll;
}
}
}
@@ -418,11 +445,11 @@ static void CG_OffsetFirstPersonView( void ) {
// add angles based on velocity
VectorCopy( cg.predictedPlayerState.velocity, predictedVelocity );
- delta = DotProduct ( predictedVelocity, cg.refdef.viewaxis[0]);
- angles[PITCH] += delta * cg_runpitch.value;
+ delta = DotProduct( predictedVelocity, cg.refdef.viewaxis[ 0 ] );
+ angles[ PITCH ] += delta * cg_runpitch.value;
- delta = DotProduct ( predictedVelocity, cg.refdef.viewaxis[1]);
- angles[ROLL] -= delta * cg_runroll.value;
+ delta = DotProduct( predictedVelocity, cg.refdef.viewaxis[ 1 ] );
+ angles[ ROLL ] -= delta * cg_runroll.value;
// add angles based on bob
//TA: bob amount is class dependant
@@ -433,15 +460,18 @@ static void CG_OffsetFirstPersonView( void ) {
speed = cg.xyspeed > 200 ? cg.xyspeed : 200;
delta = cg.bobfracsin * ( bob2 ) * speed;
- if (cg.predictedPlayerState.pm_flags & PMF_DUCKED)
+ if( cg.predictedPlayerState.pm_flags & PMF_DUCKED )
delta *= 3; // crouching
- angles[PITCH] += delta;
+
+ angles[ PITCH ] += delta;
delta = cg.bobfracsin * ( bob2 ) * speed;
- if (cg.predictedPlayerState.pm_flags & PMF_DUCKED)
+ if( cg.predictedPlayerState.pm_flags & PMF_DUCKED )
delta *= 3; // crouching accentuates roll
- if (cg.bobcycle & 1)
+
+ if( cg.bobcycle & 1 )
delta = -delta;
- angles[ROLL] += delta;
+
+ angles[ ROLL ] += delta;
}
//provide some feedback for pouncing
@@ -665,77 +695,68 @@ static void CG_OffsetFirstPersonView( void ) {
if( cg.predictedPlayerState.stats[ STAT_STATE ] & SS_WALLCLIMBING )
VectorMA( origin, ps->viewheight, normal, origin );
else
- origin[2] += cg.predictedPlayerState.viewheight;
+ origin[ 2 ] += cg.predictedPlayerState.viewheight;
// smooth out duck height changes
timeDelta = cg.time - cg.duckTime;
- if ( timeDelta < DUCK_TIME) {
- cg.refdef.vieworg[2] -= cg.duckChange
- * (DUCK_TIME - timeDelta) / DUCK_TIME;
+ if( timeDelta < DUCK_TIME)
+ {
+ cg.refdef.vieworg[ 2 ] -= cg.duckChange
+ * ( DUCK_TIME - timeDelta ) / DUCK_TIME;
}
// add bob height
bob = cg.bobfracsin * cg.xyspeed * cg_bobup.value;
- if (bob > 6) {
+
+ if( bob > 6 )
bob = 6;
- }
//TA: likewise for bob
if( cg.predictedPlayerState.stats[ STAT_STATE ] & SS_WALLCLIMBING )
VectorMA( origin, bob, normal, origin );
else
- origin[2] += bob;
+ origin[ 2 ] += bob;
// add fall height
delta = cg.time - cg.landTime;
+
if( delta < LAND_DEFLECT_TIME )
{
f = delta / LAND_DEFLECT_TIME;
- cg.refdef.vieworg[2] += cg.landChange * f;
+ cg.refdef.vieworg[ 2 ] += cg.landChange * f;
}
else if( delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME )
{
delta -= LAND_DEFLECT_TIME;
f = 1.0 - ( delta / LAND_RETURN_TIME );
- cg.refdef.vieworg[2] += cg.landChange * f;
+ cg.refdef.vieworg[ 2 ] += cg.landChange * f;
}
// add step offset
- CG_StepOffset();
+ CG_StepOffset( );
// add kick offset
VectorAdd (origin, cg.kick_origin, origin);
-
- // pivot the eye based on a neck length
-#if 0
- {
-#define NECK_LENGTH 8
- vec3_t forward, up;
-
- cg.refdef.vieworg[2] -= NECK_LENGTH;
- AngleVectors( cg.refdefViewAngles, forward, NULL, up );
- VectorMA( cg.refdef.vieworg, 3, forward, cg.refdef.vieworg );
- VectorMA( cg.refdef.vieworg, NECK_LENGTH, up, cg.refdef.vieworg );
- }
-#endif
}
//======================================================================
-void CG_ZoomDown_f( void ) {
- if ( cg.zoomed ) {
+void CG_ZoomDown_f( void )
+{
+ if( cg.zoomed )
return;
- }
+
cg.zoomed = qtrue;
cg.zoomTime = cg.time;
}
-void CG_ZoomUp_f( void ) {
- if ( !cg.zoomed ) {
+void CG_ZoomUp_f( void )
+{
+ if( !cg.zoomed )
return;
- }
+
cg.zoomed = qfalse;
cg.zoomTime = cg.time;
}
@@ -753,7 +774,8 @@ Fixed fov at intermissions, otherwise account for fov variable and zooms.
#define FOVWARPTIME 400.0
-static int CG_CalcFov( void ) {
+static int CG_CalcFov( void )
+{
float x;
float phase;
float v;
@@ -768,7 +790,8 @@ static int CG_CalcFov( void ) {
attribFov = BG_FindFovForClass( cg.predictedPlayerState.stats[ STAT_PCLASS ] );
- if ( cg.predictedPlayerState.pm_type == PM_INTERMISSION ) {
+ if( cg.predictedPlayerState.pm_type == PM_INTERMISSION )
+ {
// if in intermission, use a fixed value
fov_x = 90;
}
@@ -832,16 +855,17 @@ static int CG_CalcFov( void ) {
// warp if underwater
contents = CG_PointContents( cg.refdef.vieworg, -1 );
- if ( contents & ( CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) ){
+
+ if( contents & ( CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) )
+ {
phase = cg.time / 1000.0 * WAVE_FREQUENCY * M_PI * 2;
v = WAVE_AMPLITUDE * sin( phase );
fov_x += v;
fov_y -= v;
inwater = qtrue;
}
- else {
+ else
inwater = qfalse;
- }
if( cg.predictedPlayerState.stats[ STAT_STATE ] & SS_POISONCLOUDED &&
cg.predictedPlayerState.stats[ STAT_HEALTH ] > 0 )
@@ -858,11 +882,10 @@ static int CG_CalcFov( void ) {
cg.refdef.fov_x = fov_x;
cg.refdef.fov_y = fov_y;
- if ( !cg.zoomed ) {
+ if( !cg.zoomed )
cg.zoomSensitivity = 1;
- } else {
+ else
cg.zoomSensitivity = cg.refdef.fov_y / 75.0;
- }
return inwater;
}
@@ -875,41 +898,40 @@ CG_DamageBlendBlob
===============
*/
-static void CG_DamageBlendBlob( void ) {
- int t;
- int maxTime;
- refEntity_t ent;
+static void CG_DamageBlendBlob( void )
+{
+ int t;
+ int maxTime;
+ refEntity_t ent;
- if ( !cg.damageValue ) {
+ if( !cg.damageValue )
return;
- }
// ragePro systems can't fade blends, so don't obscure the screen
- if ( cgs.glconfig.hardwareType == GLHW_RAGEPRO ) {
+ if( cgs.glconfig.hardwareType == GLHW_RAGEPRO )
return;
- }
maxTime = DAMAGE_TIME;
t = cg.time - cg.damageTime;
- if ( t <= 0 || t >= maxTime ) {
+
+ if( t <= 0 || t >= maxTime )
return;
- }
memset( &ent, 0, sizeof( ent ) );
ent.reType = RT_SPRITE;
ent.renderfx = RF_FIRST_PERSON;
- VectorMA( cg.refdef.vieworg, 8, cg.refdef.viewaxis[0], ent.origin );
- VectorMA( ent.origin, cg.damageX * -8, cg.refdef.viewaxis[1], ent.origin );
- VectorMA( ent.origin, cg.damageY * 8, cg.refdef.viewaxis[2], ent.origin );
+ VectorMA( cg.refdef.vieworg, 8, cg.refdef.viewaxis[ 0 ], ent.origin );
+ VectorMA( ent.origin, cg.damageX * -8, cg.refdef.viewaxis[ 1 ], ent.origin );
+ VectorMA( ent.origin, cg.damageY * 8, cg.refdef.viewaxis[ 2 ], ent.origin );
ent.radius = cg.damageValue * 3;
ent.customShader = cgs.media.viewBloodShader;
- ent.shaderRGBA[0] = 255;
- ent.shaderRGBA[1] = 255;
- ent.shaderRGBA[2] = 255;
- ent.shaderRGBA[3] = 200 * ( 1.0 - ((float)t / maxTime) );
+ ent.shaderRGBA[ 0 ] = 255;
+ ent.shaderRGBA[ 1 ] = 255;
+ ent.shaderRGBA[ 2 ] = 255;
+ ent.shaderRGBA[ 3 ] = 200 * ( 1.0 - ( (float)t / maxTime) );
trap_R_AddRefEntityToScene( &ent );
}
@@ -934,41 +956,41 @@ static void CG_DrawSurfNormal( void )
CG_Trace( &tr, cg.refdef.vieworg, NULL, NULL, end, cg.predictedPlayerState.clientNum, MASK_SOLID );
//CG_Printf( "%f %f %f\n", tr.plane.normal[ 0 ], tr.plane.normal[ 1 ], tr.plane.normal[ 2 ] );
- VectorCopy( tr.endpos, normal[0].xyz );
- normal[0].st[0] = 0;
- normal[0].st[1] = 0;
- normal[0].modulate[0] = 255;
- normal[0].modulate[1] = 255;
- normal[0].modulate[2] = 255;
- normal[0].modulate[3] = 255;
+ VectorCopy( tr.endpos, normal[ 0 ].xyz );
+ normal[ 0 ].st[ 0 ] = 0;
+ normal[ 0 ].st[ 1 ] = 0;
+ normal[ 0 ].modulate[ 0 ] = 255;
+ normal[ 0 ].modulate[ 1 ] = 255;
+ normal[ 0 ].modulate[ 2 ] = 255;
+ normal[ 0 ].modulate[ 3 ] = 255;
VectorAdd( up, tr.endpos, temp );
- VectorCopy( temp, normal[1].xyz);
- normal[1].st[0] = 0;
- normal[1].st[1] = 1;
- normal[1].modulate[0] = 255;
- normal[1].modulate[1] = 255;
- normal[1].modulate[2] = 255;
- normal[1].modulate[3] = 255;
+ VectorCopy( temp, normal[ 1 ].xyz);
+ normal[ 1 ].st[ 0 ] = 0;
+ normal[ 1 ].st[ 1 ] = 1;
+ normal[ 1 ].modulate[ 0 ] = 255;
+ normal[ 1 ].modulate[ 1 ] = 255;
+ normal[ 1 ].modulate[ 2 ] = 255;
+ normal[ 1 ].modulate[ 3 ] = 255;
VectorMA( tr.endpos, 64, tr.plane.normal, temp );
VectorAdd( temp, up, temp );
- VectorCopy( temp, normal[2].xyz );
- normal[2].st[0] = 1;
- normal[2].st[1] = 1;
- normal[2].modulate[0] = 255;
- normal[2].modulate[1] = 255;
- normal[2].modulate[2] = 255;
- normal[2].modulate[3] = 255;
+ VectorCopy( temp, normal[ 2 ].xyz );
+ normal[ 2 ].st[ 0 ] = 1;
+ normal[ 2 ].st[ 1 ] = 1;
+ normal[ 2 ].modulate[ 0 ] = 255;
+ normal[ 2 ].modulate[ 1 ] = 255;
+ normal[ 2 ].modulate[ 2 ] = 255;
+ normal[ 2 ].modulate[ 3 ] = 255;
VectorMA( tr.endpos, 64, tr.plane.normal, temp );
- VectorCopy( temp, normal[3].xyz );
- normal[3].st[0] = 1;
- normal[3].st[1] = 0;
- normal[3].modulate[0] = 255;
- normal[3].modulate[1] = 255;
- normal[3].modulate[2] = 255;
- normal[3].modulate[3] = 255;
+ VectorCopy( temp, normal[ 3 ].xyz );
+ normal[ 3 ].st[ 0 ] = 1;
+ normal[ 3 ].st[ 1 ] = 0;
+ normal[ 3 ].modulate[ 0 ] = 255;
+ normal[ 3 ].modulate[ 1 ] = 255;
+ normal[ 3 ].modulate[ 2 ] = 255;
+ normal[ 3 ].modulate[ 3 ] = 255;
trap_R_AddPolyToScene( cgs.media.whiteShader, 4, normal );
}
@@ -1096,7 +1118,8 @@ CG_CalcViewValues
Sets cg.refdef view values
===============
*/
-static int CG_CalcViewValues( void ) {
+static int CG_CalcViewValues( void )
+{
playerState_t *ps;
memset( &cg.refdef, 0, sizeof( cg.refdef ) );
@@ -1106,22 +1129,24 @@ static int CG_CalcViewValues( void ) {
// Q_strncpyz( cg.refdef.text[1], "19", sizeof(cg.refdef.text[1]) );
// calculate size of 3D view
- CG_CalcVrect();
+ CG_CalcVrect( );
ps = &cg.predictedPlayerState;
// intermission view
- if ( ps->pm_type == PM_INTERMISSION ) {
+ if( ps->pm_type == PM_INTERMISSION )
+ {
VectorCopy( ps->origin, cg.refdef.vieworg );
VectorCopy( ps->viewangles, cg.refdefViewAngles );
AnglesToAxis( cg.refdefViewAngles, cg.refdef.viewaxis );
- return CG_CalcFov();
+
+ return CG_CalcFov( );
}
cg.bobcycle = ( ps->bobCycle & 128 ) >> 7;
cg.bobfracsin = fabs( sin( ( ps->bobCycle & 127 ) / 127.0 * M_PI ) );
- cg.xyspeed = sqrt( ps->velocity[0] * ps->velocity[0] +
- ps->velocity[1] * ps->velocity[1] );
+ cg.xyspeed = sqrt( ps->velocity[ 0 ] * ps->velocity[ 0 ] +
+ ps->velocity[ 1 ] * ps->velocity[ 1 ] );
VectorCopy( ps->origin, cg.refdef.vieworg );
@@ -1133,72 +1158,44 @@ static int CG_CalcViewValues( void ) {
if( !( ps->stats[ STAT_STATE ] & SS_WALLCLIMBING ) )
VectorSet( cg.lastNormal, 0.0f, 0.0f, 1.0f );
- if (cg_cameraOrbit.integer) {
- if (cg.time > cg.nextOrbitTime) {
- cg.nextOrbitTime = cg.time + cg_cameraOrbitDelay.integer;
- cg_thirdPersonAngle.value += cg_cameraOrbit.value;
- }
- }
// add error decay
- if ( cg_errorDecay.value > 0 ) {
+ if( cg_errorDecay.value > 0 )
+ {
int t;
float f;
t = cg.time - cg.predictedErrorTime;
f = ( cg_errorDecay.value - t ) / cg_errorDecay.value;
- if ( f > 0 && f < 1 ) {
+
+ if( f > 0 && f < 1 )
VectorMA( cg.refdef.vieworg, f, cg.predictedError, cg.refdef.vieworg );
- } else {
+ else
cg.predictedErrorTime = 0;
- }
}
- if ( cg.renderingThirdPerson ) {
+ if( cg.renderingThirdPerson )
+ {
// back away from character
- CG_OffsetThirdPersonView();
- } else {
+ CG_OffsetThirdPersonView( );
+ }
+ else
+ {
// offset for local bobbing and kicks
- CG_OffsetFirstPersonView();
+ CG_OffsetFirstPersonView( );
}
// position eye reletive to origin
AnglesToAxis( cg.refdefViewAngles, cg.refdef.viewaxis );
- if ( cg.hyperspace ) {
+ if( cg.hyperspace )
cg.refdef.rdflags |= RDF_NOWORLDMODEL | RDF_HYPERSPACE;
- }
//draw the surface normal looking at
if( cg_drawSurfNormal.integer )
CG_DrawSurfNormal( );
// field of view
- return CG_CalcFov();
-}
-
-
-/*
-=====================
-CG_PowerupTimerSounds
-=====================
-*/
-static void CG_PowerupTimerSounds( void ) {
- int i;
- int t;
-
- // powerup timers going away
- for ( i = 0 ; i < MAX_POWERUPS ; i++ ) {
- t = cg.snap->ps.powerups[i];
- if ( t <= cg.time ) {
- continue;
- }
- if ( t - cg.time >= POWERUP_BLINKS * POWERUP_BLINK_TIME ) {
- continue;
- }
- if ( ( t - cg.time ) / POWERUP_BLINK_TIME != ( t - cg.oldTime ) / POWERUP_BLINK_TIME ) {
- trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_ITEM, cgs.media.wearOffSound );
- }
- }
+ return CG_CalcFov( );
}
/*
@@ -1206,14 +1203,16 @@ static void CG_PowerupTimerSounds( void ) {
CG_AddBufferedSound
=====================
*/
-void CG_AddBufferedSound( sfxHandle_t sfx ) {
- if ( !sfx )
+void CG_AddBufferedSound( sfxHandle_t sfx )
+{
+ if( !sfx )
return;
- cg.soundBuffer[cg.soundBufferIn] = sfx;
- cg.soundBufferIn = (cg.soundBufferIn + 1) % MAX_SOUNDBUFFER;
- if (cg.soundBufferIn == cg.soundBufferOut) {
+
+ cg.soundBuffer[ cg.soundBufferIn ] = sfx;
+ cg.soundBufferIn = ( cg.soundBufferIn + 1 ) % MAX_SOUNDBUFFER;
+
+ if( cg.soundBufferIn == cg.soundBufferOut )
cg.soundBufferOut++;
- }
}
/*
@@ -1221,12 +1220,15 @@ void CG_AddBufferedSound( sfxHandle_t sfx ) {
CG_PlayBufferedSounds
=====================
*/
-static void CG_PlayBufferedSounds( void ) {
- if ( cg.soundTime < cg.time ) {
- if (cg.soundBufferOut != cg.soundBufferIn && cg.soundBuffer[cg.soundBufferOut]) {
- trap_S_StartLocalSound(cg.soundBuffer[cg.soundBufferOut], CHAN_ANNOUNCER);
- cg.soundBuffer[cg.soundBufferOut] = 0;
- cg.soundBufferOut = (cg.soundBufferOut + 1) % MAX_SOUNDBUFFER;
+static void CG_PlayBufferedSounds( void )
+{
+ if( cg.soundTime < cg.time )
+ {
+ if( cg.soundBufferOut != cg.soundBufferIn && cg.soundBuffer[ cg.soundBufferOut ] )
+ {
+ trap_S_StartLocalSound( cg.soundBuffer[ cg.soundBufferOut ], CHAN_ANNOUNCER );
+ cg.soundBuffer[ cg.soundBufferOut ] = 0;
+ cg.soundBufferOut = ( cg.soundBufferOut + 1 ) % MAX_SOUNDBUFFER;
cg.soundTime = cg.time + 750;
}
}
@@ -1241,35 +1243,38 @@ CG_DrawActiveFrame
Generates and draws a game scene and status information at the given time.
=================
*/
-void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demoPlayback ) {
+void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demoPlayback )
+{
int inwater;
cg.time = serverTime;
cg.demoPlayback = demoPlayback;
// update cvars
- CG_UpdateCvars();
+ CG_UpdateCvars( );
// if we are only updating the screen as a loading
// pacifier, don't even try to read snapshots
- if ( cg.infoScreenText[0] != 0 ) {
+ if( cg.infoScreenText[ 0 ] != 0 )
+ {
CG_DrawLoadingScreen( );
return;
}
// any looped sounds will be respecified as entities
// are added to the render list
- trap_S_ClearLoopingSounds(qfalse);
+ trap_S_ClearLoopingSounds( qfalse );
// clear all the render lists
- trap_R_ClearScene();
+ trap_R_ClearScene( );
// set up cg.snap and possibly cg.nextSnap
- CG_ProcessSnapshots();
+ CG_ProcessSnapshots( );
// if we haven't received any snapshots yet, all
// we can draw is the information screen
- if ( !cg.snap || ( cg.snap->snapFlags & SNAPFLAG_NOT_ACTIVE ) ) {
+ if( !cg.snap || ( cg.snap->snapFlags & SNAPFLAG_NOT_ACTIVE ) )
+ {
CG_DrawLoadingScreen( );
return;
}
@@ -1281,46 +1286,41 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo
cg.clientFrame++;
// update cg.predictedPlayerState
- CG_PredictPlayerState();
+ CG_PredictPlayerState( );
// decide on third person view
- cg.renderingThirdPerson = cg_thirdPerson.integer || (cg.snap->ps.stats[STAT_HEALTH] <= 0);
+ cg.renderingThirdPerson = cg_thirdPerson.integer || ( cg.snap->ps.stats[ STAT_HEALTH ] <= 0 );
// build cg.refdef
- inwater = CG_CalcViewValues();
+ inwater = CG_CalcViewValues( );
// first person blend blobs, done after AnglesToAxis
- if ( !cg.renderingThirdPerson ) {
- CG_DamageBlendBlob();
- }
+ if( !cg.renderingThirdPerson )
+ CG_DamageBlendBlob( );
// build the render lists
- if ( !cg.hyperspace ) {
- CG_AddPacketEntities(); // adter calcViewValues, so predicted player state is correct
- CG_AddMarks();
- CG_AddLocalEntities();
+ if( !cg.hyperspace )
+ {
+ CG_AddPacketEntities( ); // adter calcViewValues, so predicted player state is correct
+ CG_AddMarks( );
+ CG_AddLocalEntities( );
//TA: wolf trails stuff
CG_AddTrails( ); // this must come last, so the trails dropped this frame get drawn
}
+
CG_AddViewWeapon( &cg.predictedPlayerState );
// add buffered sounds
- CG_PlayBufferedSounds();
-
- // play buffered voice chats
- CG_PlayBufferedVoiceChats();
+ CG_PlayBufferedSounds( );
// finish up the rest of the refdef
- if ( cg.testModelEntity.hModel ) {
- CG_AddTestModel();
- }
+ if( cg.testModelEntity.hModel )
+ CG_AddTestModel( );
+
cg.refdef.time = cg.time;
memcpy( cg.refdef.areamask, cg.snap->areamask, sizeof( cg.refdef.areamask ) );
- // warning sounds when powerup is wearing off
- /*CG_PowerupTimerSounds();*/
-
//remove expired console lines
if( cg.consoleLines[ 0 ].time + cg_consoleLatency.integer < cg.time && cg_consoleLatency.integer > 0 )
CG_RemoveConsoleLine( );
@@ -1329,35 +1329,40 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo
trap_S_Respatialize( cg.snap->ps.clientNum, cg.refdef.vieworg, cg.refdef.viewaxis, inwater );
// make sure the lagometerSample and frame timing isn't done twice when in stereo
- if ( stereoView != STEREO_RIGHT ) {
+ if( stereoView != STEREO_RIGHT )
+ {
cg.frametime = cg.time - cg.oldTime;
- if ( cg.frametime < 0 ) {
+
+ if( cg.frametime < 0 )
cg.frametime = 0;
- }
+
cg.oldTime = cg.time;
- CG_AddLagometerFrameInfo();
+ CG_AddLagometerFrameInfo( );
}
- if (cg_timescale.value != cg_timescaleFadeEnd.value) {
- if (cg_timescale.value < cg_timescaleFadeEnd.value) {
- cg_timescale.value += cg_timescaleFadeSpeed.value * ((float)cg.frametime) / 1000;
- if (cg_timescale.value > cg_timescaleFadeEnd.value)
+
+ if( cg_timescale.value != cg_timescaleFadeEnd.value )
+ {
+ if( cg_timescale.value < cg_timescaleFadeEnd.value )
+ {
+ cg_timescale.value += cg_timescaleFadeSpeed.value * ( (float)cg.frametime ) / 1000;
+ if( cg_timescale.value > cg_timescaleFadeEnd.value )
cg_timescale.value = cg_timescaleFadeEnd.value;
}
- else {
- cg_timescale.value -= cg_timescaleFadeSpeed.value * ((float)cg.frametime) / 1000;
- if (cg_timescale.value < cg_timescaleFadeEnd.value)
+ else
+ {
+ cg_timescale.value -= cg_timescaleFadeSpeed.value * ( (float)cg.frametime ) / 1000;
+ if( cg_timescale.value < cg_timescaleFadeEnd.value )
cg_timescale.value = cg_timescaleFadeEnd.value;
}
- if (cg_timescaleFadeSpeed.value) {
- trap_Cvar_Set("timescale", va("%f", cg_timescale.value));
- }
+
+ if( cg_timescaleFadeSpeed.value )
+ trap_Cvar_Set( "timescale", va( "%f", cg_timescale.value ) );
}
// actually issue the rendering calls
CG_DrawActive( stereoView );
- if ( cg_stats.integer ) {
+ if( cg_stats.integer )
CG_Printf( "cg.clientFrame:%i\n", cg.clientFrame );
- }
}
diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c
index 8f83e288..91b048e4 100644
--- a/src/cgame/cg_weapons.c
+++ b/src/cgame/cg_weapons.c
@@ -22,52 +22,51 @@
CG_MachineGunEjectBrass
==========================
*/
-static void CG_MachineGunEjectBrass( centity_t *cent ) {
+static void CG_MachineGunEjectBrass( centity_t *cent )
+{
localEntity_t *le;
refEntity_t *re;
- vec3_t velocity, xvelocity;
- vec3_t offset, xoffset;
- float waterScale = 1.0f;
- vec3_t v[3];
+ vec3_t velocity, xvelocity;
+ vec3_t offset, xoffset;
+ float waterScale = 1.0f;
+ vec3_t v[ 3 ];
- if ( cg_brassTime.integer <= 0 ) {
+ if( cg_brassTime.integer <= 0 )
return;
- }
- le = CG_AllocLocalEntity();
+ le = CG_AllocLocalEntity( );
re = &le->refEntity;
- velocity[0] = 0;
- velocity[1] = -50 + 40 * crandom();
- velocity[2] = 100 + 50 * crandom();
+ velocity[ 0 ] = 0;
+ velocity[ 1 ] = -50 + 40 * crandom( );
+ velocity[ 2 ] = 100 + 50 * crandom( );
le->leType = LE_FRAGMENT;
le->startTime = cg.time;
- le->endTime = le->startTime + cg_brassTime.integer + ( cg_brassTime.integer / 4 ) * random();
+ le->endTime = le->startTime + cg_brassTime.integer + ( cg_brassTime.integer / 4 ) * random( );
le->pos.trType = TR_GRAVITY;
- le->pos.trTime = cg.time - (rand()&15);
+ le->pos.trTime = cg.time - ( rand( ) & 15 );
AnglesToAxis( cent->lerpAngles, v );
- offset[0] = 8;
- offset[1] = -4;
- offset[2] = 24;
+ offset[ 0 ] = 8;
+ offset[ 1 ] = -4;
+ offset[ 2 ] = 24;
- xoffset[0] = offset[0] * v[0][0] + offset[1] * v[1][0] + offset[2] * v[2][0];
- xoffset[1] = offset[0] * v[0][1] + offset[1] * v[1][1] + offset[2] * v[2][1];
- xoffset[2] = offset[0] * v[0][2] + offset[1] * v[1][2] + offset[2] * v[2][2];
+ xoffset[ 0 ] = offset[ 0 ] * v[ 0 ][ 0 ] + offset[ 1 ] * v[ 1 ][ 0 ] + offset[ 2 ] * v[ 2 ][ 0 ];
+ xoffset[ 1 ] = offset[ 0 ] * v[ 0 ][ 1 ] + offset[ 1 ] * v[ 1 ][ 1 ] + offset[ 2 ] * v[ 2 ][ 1 ];
+ xoffset[ 2 ] = offset[ 0 ] * v[ 0 ][ 2 ] + offset[ 1 ] * v[ 1 ][ 2 ] + offset[ 2 ] * v[ 2 ][ 2 ];
VectorAdd( cent->lerpOrigin, xoffset, re->origin );
VectorCopy( re->origin, le->pos.trBase );
- if ( CG_PointContents( re->origin, -1 ) & CONTENTS_WATER ) {
+ if( CG_PointContents( re->origin, -1 ) & CONTENTS_WATER )
waterScale = 0.10f;
- }
- xvelocity[0] = velocity[0] * v[0][0] + velocity[1] * v[1][0] + velocity[2] * v[2][0];
- xvelocity[1] = velocity[0] * v[0][1] + velocity[1] * v[1][1] + velocity[2] * v[2][1];
- xvelocity[2] = velocity[0] * v[0][2] + velocity[1] * v[1][2] + velocity[2] * v[2][2];
+ xvelocity[ 0 ] = velocity[ 0 ] * v[ 0 ][ 0 ] + velocity[ 1 ] * v[ 1 ][ 0 ] + velocity[ 2 ] * v[ 2 ][ 0 ];
+ xvelocity[ 1 ] = velocity[ 0 ] * v[ 0 ][ 1 ] + velocity[ 1 ] * v[ 1 ][ 1 ] + velocity[ 2 ] * v[ 2 ][ 1 ];
+ xvelocity[ 2 ] = velocity[ 0 ] * v[ 0 ][ 2 ] + velocity[ 1 ] * v[ 1 ][ 2 ] + velocity[ 2 ] * v[ 2 ][ 2 ];
VectorScale( xvelocity, waterScale, le->pos.trDelta );
AxisCopy( axisDefault, re->axis );
@@ -77,12 +76,12 @@ static void CG_MachineGunEjectBrass( centity_t *cent ) {
le->angles.trType = TR_LINEAR;
le->angles.trTime = cg.time;
- le->angles.trBase[0] = rand()&31;
- le->angles.trBase[1] = rand()&31;
- le->angles.trBase[2] = rand()&31;
- le->angles.trDelta[0] = 2;
- le->angles.trDelta[1] = 1;
- le->angles.trDelta[2] = 0;
+ le->angles.trBase[ 0 ] = rand( ) & 31;
+ le->angles.trBase[ 1 ] = rand( ) & 31;
+ le->angles.trBase[ 2 ] = rand( ) & 31;
+ le->angles.trDelta[ 0 ] = 2;
+ le->angles.trDelta[ 1 ] = 1;
+ le->angles.trDelta[ 2 ] = 0;
le->leFlags = LEF_TUMBLE;
le->leBounceSoundType = LEBS_BRASS;
@@ -91,195 +90,6 @@ static void CG_MachineGunEjectBrass( centity_t *cent ) {
/*
==========================
-CG_ShotgunEjectBrass
-==========================
-*/
-static void CG_ShotgunEjectBrass( centity_t *cent ) {
- localEntity_t *le;
- refEntity_t *re;
- vec3_t velocity, xvelocity;
- vec3_t offset, xoffset;
- vec3_t v[3];
- int i;
-
- if ( cg_brassTime.integer <= 0 ) {
- return;
- }
-
- for ( i = 0; i < 2; i++ ) {
- float waterScale = 1.0f;
-
- le = CG_AllocLocalEntity();
- re = &le->refEntity;
-
- velocity[0] = 60 + 60 * crandom();
- if ( i == 0 ) {
- velocity[1] = 40 + 10 * crandom();
- } else {
- velocity[1] = -40 + 10 * crandom();
- }
- velocity[2] = 100 + 50 * crandom();
-
- le->leType = LE_FRAGMENT;
- le->startTime = cg.time;
- le->endTime = le->startTime + cg_brassTime.integer*3 + cg_brassTime.integer * random();
-
- le->pos.trType = TR_GRAVITY;
- le->pos.trTime = cg.time;
-
- AnglesToAxis( cent->lerpAngles, v );
-
- offset[0] = 8;
- offset[1] = 0;
- offset[2] = 24;
-
- xoffset[0] = offset[0] * v[0][0] + offset[1] * v[1][0] + offset[2] * v[2][0];
- xoffset[1] = offset[0] * v[0][1] + offset[1] * v[1][1] + offset[2] * v[2][1];
- xoffset[2] = offset[0] * v[0][2] + offset[1] * v[1][2] + offset[2] * v[2][2];
- VectorAdd( cent->lerpOrigin, xoffset, re->origin );
- VectorCopy( re->origin, le->pos.trBase );
- if ( CG_PointContents( re->origin, -1 ) & CONTENTS_WATER ) {
- waterScale = 0.10f;
- }
-
- xvelocity[0] = velocity[0] * v[0][0] + velocity[1] * v[1][0] + velocity[2] * v[2][0];
- xvelocity[1] = velocity[0] * v[0][1] + velocity[1] * v[1][1] + velocity[2] * v[2][1];
- xvelocity[2] = velocity[0] * v[0][2] + velocity[1] * v[1][2] + velocity[2] * v[2][2];
- VectorScale( xvelocity, waterScale, le->pos.trDelta );
-
- AxisCopy( axisDefault, re->axis );
- re->hModel = cgs.media.shotgunBrassModel;
- le->bounceFactor = 0.3f;
-
- le->angles.trType = TR_LINEAR;
- le->angles.trTime = cg.time;
- le->angles.trBase[0] = rand()&31;
- le->angles.trBase[1] = rand()&31;
- le->angles.trBase[2] = rand()&31;
- le->angles.trDelta[0] = 1;
- le->angles.trDelta[1] = 0.5;
- le->angles.trDelta[2] = 0;
-
- le->leFlags = LEF_TUMBLE;
- le->leBounceSoundType = LEBS_BRASS;
- le->leMarkType = LEMT_NONE;
- }
-}
-
-
-/*
-==========================
-CG_RailTrail
-==========================
-*/
-void CG_RailTrail( vec3_t start, vec3_t end )
-{
- vec3_t axis[36], move, move2, next_move, vec, temp;
- float len;
- int i, j, skip;
-
- localEntity_t *le;
- refEntity_t *re;
-
-#define RADIUS 4
-#define ROTATION 1
-#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;
-
- le->leType = LE_FADE_RGB;
- le->startTime = cg.time;
- le->endTime = cg.time + cg_railTrailTime.value;
- le->lifeRate = 1.0 / ( le->endTime - le->startTime );
-
- re->shaderTime = cg.time / 1000.0f;
- re->reType = RT_RAIL_CORE;
- re->customShader = cgs.media.railCoreShader;
-
- VectorCopy( start, re->origin );
- VectorCopy( end, re->oldorigin );
-
- re->shaderRGBA[0] = 255;
- re->shaderRGBA[1] = 255;
- re->shaderRGBA[2] = 255;
- re->shaderRGBA[3] = 255;
-
- le->color[0] = 0.75f;
- le->color[1] = 0.75f;
- le->color[2] = 0.75f;
- le->color[3] = 1.0f;
-
- AxisClear( re->axis );
-
- VectorMA(move, 20, vec, move);
- VectorCopy(move, next_move);
- VectorScale (vec, SPACING, vec);
-
- if (cg_oldRail.integer != 0) {
- // nudge down a bit so it isn't exactly in center
- re->origin[2] -= 8;
- re->oldorigin[2] -= 8;
- return;
- }
- skip = -1;
-
- j = 18;
- 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;
- 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);
-
- re->shaderTime = cg.time / 1000.0f;
- re->reType = RT_SPRITE;
- re->radius = 1.1f;
- re->customShader = cgs.media.railRingsShader;
-
- re->shaderRGBA[0] = 255;
- re->shaderRGBA[1] = 255;
- re->shaderRGBA[2] = 255;
- re->shaderRGBA[3] = 255;
-
- le->color[0] = 0.75f;
- le->color[1] = 0.75f;
- le->color[2] = 0.75f;
- le->color[3] = 1.0f;
-
- le->pos.trType = TR_LINEAR;
- le->pos.trTime = cg.time;
-
- VectorCopy( move, move2);
- 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;
- }
-
- VectorAdd (move, vec, move);
-
- j = j + ROTATION < 36 ? j + ROTATION : (j + ROTATION) % 36;
- }
-}
-
-/*
-==========================
CG_TeslaTrail
==========================
*/
@@ -301,7 +111,7 @@ void CG_TeslaTrail( vec3_t start, vec3_t end, int srcENum, int destENum )
le->srcENum = srcENum;
le->destENum = destENum;
le->vOffset = 28;
- le->maxRange = BG_FindRangeForBuildable( BA_H_DEF3 );
+ le->maxRange = BG_FindRangeForBuildable( BA_H_TESLAGEN );
VectorCopy( start, re->origin );
VectorCopy( end, re->oldorigin );
@@ -330,223 +140,15 @@ void CG_AlienZap( vec3_t start, vec3_t end, int srcENum, int destENum )
le->srcENum = srcENum;
le->destENum = destENum;
le->vOffset = -4;
- le->maxRange = BG_FindRangeForBuildable( BA_H_DEF3 );
+
+ //FIXME: share with server
+ le->maxRange = 200;
VectorCopy( start, re->origin );
VectorCopy( end, re->oldorigin );
}
/*
-==========================
-CG_RocketTrail
-==========================
-*/
-static void CG_RocketTrail( centity_t *ent, const weaponInfo_t *wi ) {
- int step;
- vec3_t origin, lastPos;
- int t;
- int startTime, contents;
- int lastContents;
- entityState_t *es;
- vec3_t up;
- localEntity_t *smoke;
-
- if ( cg_noProjectileTrail.integer ) {
- return;
- }
-
- up[0] = 0;
- up[1] = 0;
- up[2] = 0;
-
- step = 50;
-
- es = &ent->currentState;
- startTime = ent->trailTime;
- t = step * ( (startTime + step) / step );
-
- BG_EvaluateTrajectory( &es->pos, cg.time, origin );
- contents = CG_PointContents( origin, -1 );
-
- // if object (e.g. grenade) is stationary, don't toss up smoke
- if ( es->pos.trType == TR_STATIONARY ) {
- ent->trailTime = cg.time;
- return;
- }
-
- BG_EvaluateTrajectory( &es->pos, ent->trailTime, lastPos );
- lastContents = CG_PointContents( lastPos, -1 );
-
- ent->trailTime = cg.time;
-
- if ( contents & ( CONTENTS_WATER | CONTENTS_SLIME | CONTENTS_LAVA ) ) {
- if ( contents & lastContents & CONTENTS_WATER ) {
- CG_BubbleTrail( lastPos, origin, 8 );
- }
- return;
- }
-
- for ( ; t <= ent->trailTime ; t += step ) {
- BG_EvaluateTrajectory( &es->pos, t, lastPos );
-
- smoke = CG_SmokePuff( lastPos, up,
- wi->trailRadius,
- 1, 1, 1, 0.33f,
- wi->wiTrailTime,
- t,
- 0,
- 0,
- cgs.media.smokePuffShader );
- // use the optimized local entity add
- smoke->leType = LE_SCALE_FADE;
- }
-
-}
-
-/*
-==========================
-CG_PlasmaTrail
-==========================
-*/
-static void CG_PlasmaTrail( centity_t *cent, const weaponInfo_t *wi ) {
- localEntity_t *le;
- refEntity_t *re;
- entityState_t *es;
- vec3_t velocity, xvelocity, origin;
- vec3_t offset, xoffset;
- vec3_t v[3];
- int t, startTime, step;
-
- float waterScale = 1.0f;
-
- if ( cg_noProjectileTrail.integer || cg_oldPlasma.integer ) {
- return;
- }
-
- step = 50;
-
- es = &cent->currentState;
- startTime = cent->trailTime;
- t = step * ( (startTime + step) / step );
-
- BG_EvaluateTrajectory( &es->pos, cg.time, origin );
-
- le = CG_AllocLocalEntity();
- re = &le->refEntity;
-
- velocity[0] = 60 - 120 * crandom();
- velocity[1] = 40 - 80 * crandom();
- velocity[2] = 100 - 200 * crandom();
-
- le->leType = LE_MOVE_SCALE_FADE;
- le->leFlags = LEF_TUMBLE;
- le->leBounceSoundType = LEBS_NONE;
- le->leMarkType = LEMT_NONE;
-
- le->startTime = cg.time;
- le->endTime = le->startTime + 600;
-
- le->pos.trType = TR_GRAVITY;
- le->pos.trTime = cg.time;
-
- AnglesToAxis( cent->lerpAngles, v );
-
- offset[0] = 2;
- offset[1] = 2;
- offset[2] = 2;
-
- xoffset[0] = offset[0] * v[0][0] + offset[1] * v[1][0] + offset[2] * v[2][0];
- xoffset[1] = offset[0] * v[0][1] + offset[1] * v[1][1] + offset[2] * v[2][1];
- xoffset[2] = offset[0] * v[0][2] + offset[1] * v[1][2] + offset[2] * v[2][2];
-
- VectorAdd( origin, xoffset, re->origin );
- VectorCopy( re->origin, le->pos.trBase );
-
- if ( CG_PointContents( re->origin, -1 ) & CONTENTS_WATER ) {
- waterScale = 0.10f;
- }
-
- xvelocity[0] = velocity[0] * v[0][0] + velocity[1] * v[1][0] + velocity[2] * v[2][0];
- xvelocity[1] = velocity[0] * v[0][1] + velocity[1] * v[1][1] + velocity[2] * v[2][1];
- xvelocity[2] = velocity[0] * v[0][2] + velocity[1] * v[1][2] + velocity[2] * v[2][2];
- VectorScale( xvelocity, waterScale, le->pos.trDelta );
-
- AxisCopy( axisDefault, re->axis );
- re->shaderTime = cg.time / 1000.0f;
- re->reType = RT_SPRITE;
- re->radius = 0.25f;
- re->customShader = cgs.media.railRingsShader;
- le->bounceFactor = 0.3f;
-
- re->shaderRGBA[0] = wi->flashDlightColor[0] * 63;
- re->shaderRGBA[1] = wi->flashDlightColor[1] * 63;
- re->shaderRGBA[2] = wi->flashDlightColor[2] * 63;
- re->shaderRGBA[3] = 63;
-
- le->color[0] = wi->flashDlightColor[0] * 0.2;
- le->color[1] = wi->flashDlightColor[1] * 0.2;
- le->color[2] = wi->flashDlightColor[2] * 0.2;
- le->color[3] = 0.25f;
-
- le->angles.trType = TR_LINEAR;
- le->angles.trTime = cg.time;
- le->angles.trBase[0] = rand()&31;
- le->angles.trBase[1] = rand()&31;
- le->angles.trBase[2] = rand()&31;
- le->angles.trDelta[0] = 1;
- le->angles.trDelta[1] = 0.5;
- le->angles.trDelta[2] = 0;
-
-}
-
-/*
-==========================
-CG_GrappleTrail
-==========================
-*/
-void CG_GrappleTrail( centity_t *ent, const weaponInfo_t *wi ) {
- vec3_t origin;
- entityState_t *es;
- vec3_t forward, up;
- refEntity_t beam;
-
- es = &ent->currentState;
-
- BG_EvaluateTrajectory( &es->pos, cg.time, origin );
- ent->trailTime = cg.time;
-
- memset( &beam, 0, sizeof( beam ) );
- //FIXME adjust for muzzle position
- VectorCopy ( cg_entities[ ent->currentState.otherEntityNum ].lerpOrigin, beam.origin );
- beam.origin[2] += 26;
- AngleVectors( cg_entities[ ent->currentState.otherEntityNum ].lerpAngles, forward, NULL, up );
- VectorMA( beam.origin, -6, up, beam.origin );
- VectorCopy( origin, beam.oldorigin );
-
- if (Distance( beam.origin, beam.oldorigin ) < 64 )
- return; // Don't draw if close
-
- beam.reType = RT_LIGHTNING;
- beam.customShader = cgs.media.lightningShader;
-
- AxisClear( beam.axis );
- beam.shaderRGBA[0] = 0xff;
- beam.shaderRGBA[1] = 0xff;
- beam.shaderRGBA[2] = 0xff;
- beam.shaderRGBA[3] = 0xff;
- trap_R_AddRefEntityToScene( &beam );
-}
-
-/*
-==========================
-CG_GrenadeTrail
-==========================
-*/
-static void CG_GrenadeTrail( centity_t *ent, const weaponInfo_t *wi ) {
- CG_RocketTrail( ent, wi );
-}
-
-/*
=================
CG_RegisterUpgrade
@@ -587,7 +189,7 @@ CG_InitUpgrades
Precaches upgrades
===============
*/
-void CG_InitUpgrades( )
+void CG_InitUpgrades( void )
{
int i;
@@ -635,7 +237,7 @@ void CG_RegisterWeapon( int weaponNum )
// calc midpoint for rotation
trap_R_ModelBounds( weaponInfo->weaponModel, mins, maxs );
for( i = 0 ; i < 3 ; i++ )
- weaponInfo->weaponMidpoint[i] = mins[i] + 0.5 * ( maxs[i] - mins[i] );
+ weaponInfo->weaponMidpoint[ i ] = mins[ i ] + 0.5 * ( maxs[ i ] - mins[ i ] );
if( icon = BG_FindIconForWeapon( weaponNum ) )
{
@@ -658,9 +260,8 @@ void CG_RegisterWeapon( int weaponNum )
strcat( path, "_hand.md3" );
weaponInfo->handsModel = trap_R_RegisterModel( path );
- if ( !weaponInfo->handsModel ) {
+ if( !weaponInfo->handsModel )
weaponInfo->handsModel = trap_R_RegisterModel( "models/weapons2/shotgun/shotgun_hand.md3" );
- }
weaponInfo->loopFireSound = qfalse;
@@ -673,7 +274,7 @@ void CG_RegisterWeapon( int weaponNum )
weaponInfo->readySound = trap_S_RegisterSound( "sound/weapons/melee/fsthum.wav", qfalse );
weaponInfo->firingSound = trap_S_RegisterSound( "sound/weapons/lightning/lg_hum.wav", qfalse );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/lightning/lg_fire.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/lightning/lg_fire.wav", qfalse );
cgs.media.lightningShader = trap_R_RegisterShader( "models/ammo/tesla/tesla_bolt");
cgs.media.lightningExplosionModel = trap_R_RegisterModel( "models/weaphits/crackle.md3" );
cgs.media.sfx_lghit = trap_S_RegisterSound( "sound/weapons/lightning/lg_fire.wav", qfalse );
@@ -681,28 +282,28 @@ void CG_RegisterWeapon( int weaponNum )
case WP_MACHINEGUN:
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf1b.wav", qfalse );
- weaponInfo->flashSound[1] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf2b.wav", qfalse );
- weaponInfo->flashSound[2] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf3b.wav", qfalse );
- weaponInfo->flashSound[3] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf4b.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf1b.wav", qfalse );
+ weaponInfo->flashSound[ 1 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf2b.wav", qfalse );
+ weaponInfo->flashSound[ 2 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf3b.wav", qfalse );
+ weaponInfo->flashSound[ 3 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf4b.wav", qfalse );
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
break;
case WP_MASS_DRIVER:
MAKERGB( weaponInfo->flashDlightColor, 0, 0, 1 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf1b.wav", qfalse );
- weaponInfo->flashSound[1] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf2b.wav", qfalse );
- weaponInfo->flashSound[2] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf3b.wav", qfalse );
- weaponInfo->flashSound[3] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf4b.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf1b.wav", qfalse );
+ weaponInfo->flashSound[ 1 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf2b.wav", qfalse );
+ weaponInfo->flashSound[ 2 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf3b.wav", qfalse );
+ weaponInfo->flashSound[ 3 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf4b.wav", qfalse );
break;
case WP_CHAINGUN:
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf1b.wav", qfalse );
- weaponInfo->flashSound[1] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf2b.wav", qfalse );
- weaponInfo->flashSound[2] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf3b.wav", qfalse );
- weaponInfo->flashSound[3] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf4b.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf1b.wav", qfalse );
+ weaponInfo->flashSound[ 1 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf2b.wav", qfalse );
+ weaponInfo->flashSound[ 2 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf3b.wav", qfalse );
+ weaponInfo->flashSound[ 3 ] = trap_S_RegisterSound( "sound/weapons/machinegun/machgf4b.wav", qfalse );
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
break;
@@ -716,44 +317,35 @@ void CG_RegisterWeapon( int weaponNum )
MAKERGB( weaponInfo->missileDlightColor, 1, 0.75f, 0 );
MAKERGB( weaponInfo->flashDlightColor, 1, 0.75f, 0 );*/
weaponInfo->missileModel = trap_R_RegisterModel( "models/ammo/grenade1.md3" );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/rocket/rocklf1a.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/rocket/rocklf1a.wav", qfalse );
/*cgs.media.rocketExplosionShader = trap_R_RegisterShader( "rocketExplosion" );*/
break;
case WP_FLAMER:
weaponInfo->missileSound = trap_S_RegisterSound( "sound/weapons/flamer/fireloop.wav", qfalse );
MAKERGB( weaponInfo->flashDlightColor, 0.25, 0.1, 0 );
- //weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/railgun/railgf1a.wav", qfalse );
+ //weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/railgun/railgf1a.wav", qfalse );
/*cgs.media.flameExplShader = trap_R_RegisterShader( "rocketExplosion" );*/
break;
-
- case WP_PLASMAGUN:
- weaponInfo->missileTrailFunc = CG_PlasmaTrail;
- weaponInfo->missileSound = trap_S_RegisterSound( "sound/weapons/plasma/lasfly.wav", qfalse );
- MAKERGB( weaponInfo->flashDlightColor, 0.6f, 0.6f, 1.0f );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/plasma/hyprbf1a.wav", qfalse );
- cgs.media.plasmaExplosionShader = trap_R_RegisterShader( "plasmaExplosion" );
- cgs.media.railRingsShader = trap_R_RegisterShader( "railDisc" );
- break;
case WP_PULSE_RIFLE:
weaponInfo->missileSound = trap_S_RegisterSound( "sound/weapons/plasma/lasfly.wav", qfalse );
MAKERGB( weaponInfo->flashDlightColor, 0.6f, 0.6f, 1.0f );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/plasma/hyprbf1a.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/plasma/hyprbf1a.wav", qfalse );
cgs.media.plasmaExplosionShader = trap_R_RegisterShader( "plasmaExplosion" );
cgs.media.railRingsShader = trap_R_RegisterShader( "railDisc" );
break;
case WP_LAS_GUN:
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/plasma/hyprbf1a.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/plasma/hyprbf1a.wav", qfalse );
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
break;
case WP_LUCIFER_CANON:
weaponInfo->readySound = trap_S_RegisterSound( "sound/weapons/bfg/bfg_hum.wav", qfalse );
MAKERGB( weaponInfo->flashDlightColor, 1, 0.7f, 1 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/bfg/bfg_fire.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/bfg/bfg_fire.wav", qfalse );
cgs.media.bfgExplosionShader = trap_R_RegisterShader( "bfgExplosion" );
weaponInfo->missileModel = trap_R_RegisterModel( "models/weaphits/bfg.md3" );
weaponInfo->missileSound = trap_S_RegisterSound( "sound/weapons/rocket/rockfly.wav", qfalse );
@@ -761,30 +353,30 @@ void CG_RegisterWeapon( int weaponNum )
case WP_VENOM:
MAKERGB( weaponInfo->flashDlightColor, 0, 0, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
break;
case WP_PAIN_SAW:
MAKERGB( weaponInfo->flashDlightColor, 0, 0, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
break;
case WP_GRAB_CLAW:
case WP_GRAB_CLAW_UPG:
MAKERGB( weaponInfo->flashDlightColor, 0, 0, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
break;
case WP_POUNCE:
case WP_POUNCE_UPG:
MAKERGB( weaponInfo->flashDlightColor, 0, 0, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
weaponInfo->missileModel = trap_R_RegisterModel( "models/ammo/grenade1.md3" );
break;
case WP_GROUND_POUND:
MAKERGB( weaponInfo->flashDlightColor, 0, 0, 0 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
break;
case WP_ABUILD:
@@ -796,7 +388,7 @@ void CG_RegisterWeapon( int weaponNum )
default:
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 1 );
- weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/rocket/rocklf1a.wav", qfalse );
+ weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/rocket/rocklf1a.wav", qfalse );
break;
}
}
@@ -808,7 +400,7 @@ CG_InitWeapons
Precaches weapons
===============
*/
-void CG_InitWeapons( )
+void CG_InitWeapons( void )
{
int i;
@@ -833,25 +425,23 @@ CG_MapTorsoToWeaponFrame
=================
*/
-static int CG_MapTorsoToWeaponFrame( clientInfo_t *ci, int frame ) {
+static int CG_MapTorsoToWeaponFrame( clientInfo_t *ci, int frame )
+{
// change weapon
- if ( frame >= ci->animations[TORSO_DROP].firstFrame
- && frame < ci->animations[TORSO_DROP].firstFrame + 9 ) {
- return frame - ci->animations[TORSO_DROP].firstFrame + 6;
- }
+ if( frame >= ci->animations[ TORSO_DROP ].firstFrame &&
+ frame < ci->animations[ TORSO_DROP ].firstFrame + 9 )
+ return frame - ci->animations[ TORSO_DROP ].firstFrame + 6;
// stand attack
- if ( frame >= ci->animations[TORSO_ATTACK].firstFrame
- && frame < ci->animations[TORSO_ATTACK].firstFrame + 6 ) {
- return 1 + frame - ci->animations[TORSO_ATTACK].firstFrame;
- }
+ if( frame >= ci->animations[ TORSO_ATTACK ].firstFrame &&
+ frame < ci->animations[ TORSO_ATTACK ].firstFrame + 6 )
+ return 1 + frame - ci->animations[ TORSO_ATTACK ].firstFrame;
// stand attack 2
- if ( frame >= ci->animations[TORSO_ATTACK2].firstFrame
- && frame < ci->animations[TORSO_ATTACK2].firstFrame + 6 ) {
- return 1 + frame - ci->animations[TORSO_ATTACK].firstFrame;
- }
+ if( frame >= ci->animations[ TORSO_ATTACK2 ].firstFrame &&
+ frame < ci->animations[ TORSO_ATTACK2 ].firstFrame + 6 )
+ return 1 + frame - ci->animations[ TORSO_ATTACK ].firstFrame;
return 0;
}
@@ -862,7 +452,8 @@ static int CG_MapTorsoToWeaponFrame( clientInfo_t *ci, int frame ) {
CG_CalculateWeaponPosition
==============
*/
-static void CG_CalculateWeaponPosition( vec3_t origin, vec3_t angles ) {
+static void CG_CalculateWeaponPosition( vec3_t origin, vec3_t angles )
+{
float scale;
int delta;
float fracsin;
@@ -872,53 +463,38 @@ static void CG_CalculateWeaponPosition( vec3_t origin, vec3_t angles ) {
VectorCopy( cg.refdefViewAngles, angles );
// on odd legs, invert some angles
- if ( cg.bobcycle & 1 ) {
+ if( cg.bobcycle & 1 )
scale = -cg.xyspeed;
- } else {
+ else
scale = cg.xyspeed;
- }
// gun angles from bobbing
//TA: bob amount is class dependant
bob = BG_FindBobForClass( cg.predictedPlayerState.stats[ STAT_PCLASS ] );
+
if( bob != 0 )
{
- angles[ROLL] += scale * cg.bobfracsin * 0.005;
- angles[YAW] += scale * cg.bobfracsin * 0.01;
- angles[PITCH] += cg.xyspeed * cg.bobfracsin * 0.005;
+ angles[ ROLL ] += scale * cg.bobfracsin * 0.005;
+ angles[ YAW ] += scale * cg.bobfracsin * 0.01;
+ angles[ PITCH ] += cg.xyspeed * cg.bobfracsin * 0.005;
}
// drop the weapon when landing
if( !BG_ClassHasAbility( cg.predictedPlayerState.stats[ STAT_PCLASS ], SCA_NOWEAPONDRIFT ) )
{
delta = cg.time - cg.landTime;
- if ( delta < LAND_DEFLECT_TIME )
- {
- origin[2] += cg.landChange*0.25 * delta / LAND_DEFLECT_TIME;
- }
- else if ( delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME )
- {
- origin[2] += cg.landChange*0.25 *
- (LAND_DEFLECT_TIME + LAND_RETURN_TIME - delta) / LAND_RETURN_TIME;
- }
-
- //TA: huh? why drop the weapon when stair climbing... just as well this isn't actually used :)
-#if 0
- // drop the weapon when stair climbing
- delta = cg.time - cg.stepTime;
- if ( delta < STEP_TIME/2 ) {
- origin[2] -= cg.stepChange*0.25 * delta / (STEP_TIME/2);
- } else if ( delta < STEP_TIME ) {
- origin[2] -= cg.stepChange*0.25 * (STEP_TIME - delta) / (STEP_TIME/2);
- }
-#endif
+ if( delta < LAND_DEFLECT_TIME )
+ origin[ 2 ] += cg.landChange*0.25 * delta / LAND_DEFLECT_TIME;
+ else if( delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME )
+ origin[ 2 ] += cg.landChange*0.25 *
+ ( LAND_DEFLECT_TIME + LAND_RETURN_TIME - delta ) / LAND_RETURN_TIME;
- // idle drift
+ // idle drift
scale = cg.xyspeed + 40;
fracsin = sin( cg.time * 0.001 );
- angles[ROLL] += scale * fracsin * 0.01;
- angles[YAW] += scale * fracsin * 0.01;
- angles[PITCH] += scale * fracsin * 0.01;
+ angles[ ROLL ] += scale * fracsin * 0.01;
+ angles[ YAW ] += scale * fracsin * 0.01;
+ angles[ PITCH ] += scale * fracsin * 0.01;
}
}
@@ -934,52 +510,56 @@ so the endpoint will reflect the simulated strike (lagging the predicted
angle)
===============
*/
-static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
- trace_t trace;
+static void CG_LightningBolt( centity_t *cent, vec3_t origin )
+{
+ trace_t trace;
refEntity_t beam;
- vec3_t forward;
- vec3_t muzzlePoint, endPoint;
+ vec3_t forward;
+ vec3_t muzzlePoint, endPoint;
- if ( cent->currentState.weapon != WP_TESLAGEN ) {
+ if( cent->currentState.weapon != WP_TESLAGEN )
return;
- }
memset( &beam, 0, sizeof( beam ) );
- // CPMA "true" lightning
- if ((cent->currentState.number == cg.predictedPlayerState.clientNum) && (cg_trueLightning.value != 0)) {
- vec3_t angle;
- int i;
-
- for (i = 0; i < 3; i++) {
- float a = cent->lerpAngles[i] - cg.refdefViewAngles[i];
- if (a > 180) {
- a -= 360;
- }
- if (a < -180) {
- a += 360;
- }
-
- angle[i] = cg.refdefViewAngles[i] + a * (1.0 - cg_trueLightning.value);
- if (angle[i] < 0) {
- angle[i] += 360;
- }
- if (angle[i] > 360) {
- angle[i] -= 360;
- }
- }
-
- AngleVectors(angle, forward, NULL, NULL );
- VectorCopy(cent->lerpOrigin, muzzlePoint );
-// VectorCopy(cg.refdef.vieworg, muzzlePoint );
- } else {
- // !CPMA
- AngleVectors( cent->lerpAngles, forward, NULL, NULL );
- VectorCopy(cent->lerpOrigin, muzzlePoint );
- }
+ // CPMA "true" lightning
+ if( ( cent->currentState.number == cg.predictedPlayerState.clientNum ) &&
+ ( cg_trueLightning.value != 0 ) )
+ {
+ vec3_t angle;
+ int i;
+
+ for( i = 0; i < 3; i++ )
+ {
+ float a = cent->lerpAngles[ i ] - cg.refdefViewAngles[ i ];
+ if( a > 180 )
+ a -= 360;
+
+ if( a < -180 )
+ a += 360;
+
+ angle[ i ] = cg.refdefViewAngles[ i ] + a * ( 1.0 - cg_trueLightning.value );
+
+ if( angle[ i ] < 0 )
+ angle[ i ] += 360;
+
+ if( angle[ i ] > 360 )
+ angle[ i ] -= 360;
+ }
+
+ AngleVectors( angle, forward, NULL, NULL );
+ VectorCopy( cent->lerpOrigin, muzzlePoint );
+// VectorCopy(cg.refdef.vieworg, muzzlePoint );
+ }
+ else
+ {
+ // !CPMA
+ AngleVectors( cent->lerpAngles, forward, NULL, NULL );
+ VectorCopy( cent->lerpOrigin, muzzlePoint );
+ }
// FIXME: crouch
- muzzlePoint[2] += DEFAULT_VIEWHEIGHT;
+ muzzlePoint[ 2 ] += DEFAULT_VIEWHEIGHT;
VectorMA( muzzlePoint, 14, forward, muzzlePoint );
@@ -1002,7 +582,8 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
trap_R_AddRefEntityToScene( &beam );
// add the impact flare if it hit something
- if ( trace.fraction < 1.0 ) {
+ if( trace.fraction < 1.0 )
+ {
vec3_t angles;
vec3_t dir;
@@ -1015,9 +596,9 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
VectorMA( trace.endpos, -16, dir, beam.origin );
// make a random orientation
- angles[0] = rand() % 360;
- angles[1] = rand() % 360;
- angles[2] = rand() % 360;
+ angles[ 0 ] = rand( ) % 360;
+ angles[ 1 ] = rand( ) % 360;
+ angles[ 2 ] = rand( ) % 360;
AnglesToAxis( angles, beam.axis );
trap_R_AddRefEntityToScene( &beam );
}
@@ -1153,27 +734,30 @@ CG_MachinegunSpinAngle
*/
#define SPIN_SPEED 0.9
#define COAST_TIME 1000
-static float CG_MachinegunSpinAngle( centity_t *cent ) {
+static float CG_MachinegunSpinAngle( centity_t *cent )
+{
int delta;
float angle;
float speed;
delta = cg.time - cent->pe.barrelTime;
- if ( cent->pe.barrelSpinning ) {
+ if( cent->pe.barrelSpinning )
angle = cent->pe.barrelAngle + delta * SPIN_SPEED;
- } else {
- if ( delta > COAST_TIME ) {
+ else
+ {
+ if( delta > COAST_TIME )
delta = COAST_TIME;
- }
speed = 0.5 * ( SPIN_SPEED + (float)( COAST_TIME - delta ) / COAST_TIME );
angle = cent->pe.barrelAngle + delta * speed;
}
- if ( cent->pe.barrelSpinning == !(cent->currentState.eFlags & EF_FIRING) ) {
+ if( cent->pe.barrelSpinning == !( cent->currentState.eFlags & EF_FIRING ) )
+ {
cent->pe.barrelTime = cg.time;
cent->pe.barrelAngle = AngleMod( angle );
- cent->pe.barrelSpinning = !!(cent->currentState.eFlags & EF_FIRING);
+ cent->pe.barrelSpinning = !!( cent->currentState.eFlags & EF_FIRING );
+ //TA: um?
}
return angle;
@@ -1185,23 +769,9 @@ static float CG_MachinegunSpinAngle( centity_t *cent ) {
CG_AddWeaponWithPowerups
========================
*/
-static void CG_AddWeaponWithPowerups( refEntity_t *gun, int powerups ) {
- // add powerup effects
- /*if ( powerups & ( 1 << PW_INVIS ) ) {
- gun->customShader = cgs.media.invisShader;
- trap_R_AddRefEntityToScene( gun );
- } else*/ {
- trap_R_AddRefEntityToScene( gun );
-
- /*if ( powerups & ( 1 << PW_BATTLESUIT ) ) {
- gun->customShader = cgs.media.battleWeaponShader;
- trap_R_AddRefEntityToScene( gun );
- }
- if ( powerups & ( 1 << PW_QUAD ) ) {
- gun->customShader = cgs.media.quadWeaponShader;
- trap_R_AddRefEntityToScene( gun );
- }*/
- }
+static void CG_AddWeaponWithPowerups( refEntity_t *gun, int powerups )
+{
+ trap_R_AddRefEntityToScene( gun );
}
@@ -1216,13 +786,13 @@ sound should only be done on the world model case.
*/
void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent )
{
- refEntity_t gun;
- refEntity_t barrel;
- refEntity_t flash;
- vec3_t angles;
- weapon_t weaponNum;
+ refEntity_t gun;
+ refEntity_t barrel;
+ refEntity_t flash;
+ vec3_t angles;
+ weapon_t weaponNum;
weaponInfo_t *weapon;
- centity_t *nonPredictedCent;
+ centity_t *nonPredictedCent;
weaponNum = cent->currentState.weapon;
@@ -1288,9 +858,9 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
barrel.renderfx = parent->renderfx;
barrel.hModel = weapon->barrelModel;
- angles[YAW] = 0;
- angles[PITCH] = 0;
- angles[ROLL] = CG_MachinegunSpinAngle( cent );
+ angles[ YAW ] = 0;
+ angles[ PITCH ] = 0;
+ angles[ ROLL ] = CG_MachinegunSpinAngle( cent );
AnglesToAxis( angles, barrel.axis );
CG_PositionRotatedEntityOnTag( &barrel, &gun, weapon->weaponModel, "tag_barrel" );
@@ -1363,12 +933,13 @@ CG_AddViewWeapon
Add the weapon, and flash for the player's view
==============
*/
-void CG_AddViewWeapon( playerState_t *ps ) {
- refEntity_t hand;
- centity_t *cent;
+void CG_AddViewWeapon( playerState_t *ps )
+{
+ refEntity_t hand;
+ centity_t *cent;
clientInfo_t *ci;
- float fovOffset;
- vec3_t angles;
+ float fovOffset;
+ vec3_t angles;
weaponInfo_t *weapon;
if( ( ps->persistant[PERS_TEAM] == TEAM_SPECTATOR ) ||
@@ -1380,38 +951,38 @@ void CG_AddViewWeapon( playerState_t *ps ) {
if( ps->weapon == WP_NONE )
return;
- if ( ps->pm_type == PM_INTERMISSION ) {
+ if( ps->pm_type == PM_INTERMISSION )
return;
- }
//TA: draw a prospective buildable infront of the player
if( ( ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ) > BA_NONE )
CG_GhostBuildable( ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT );
// no gun if in third person view
- if ( cg.renderingThirdPerson ) {
+ if( cg.renderingThirdPerson )
return;
- }
// allow the gun to be completely removed
- if ( !cg_drawGun.integer ) {
- vec3_t origin;
+ if( !cg_drawGun.integer )
+ {
+ vec3_t origin;
- if ( cg.predictedPlayerState.eFlags & EF_FIRING ) {
+ if( cg.predictedPlayerState.eFlags & EF_FIRING )
+ {
// special hack for lightning gun...
// TA: and flamer
VectorCopy( cg.refdef.vieworg, origin );
- VectorMA( origin, -8, cg.refdef.viewaxis[2], origin );
- CG_LightningBolt( &cg_entities[ps->clientNum], origin );
+ VectorMA( origin, -8, cg.refdef.viewaxis[ 2 ], origin );
+ CG_LightningBolt( &cg_entities[ ps->clientNum ], origin );
CG_FlameTrail( &cg_entities[ ps->clientNum ] );
}
+
return;
}
// don't draw if testing a gun model
- if ( cg.testGun ) {
+ if( cg.testGun )
return;
- }
// drop gun lower at higher fov
//if ( cg_fov.integer > 90 ) {
@@ -1425,21 +996,21 @@ void CG_AddViewWeapon( playerState_t *ps ) {
CG_RegisterWeapon( ps->weapon );
weapon = &cg_weapons[ ps->weapon ];
- memset (&hand, 0, sizeof(hand));
+ memset( &hand, 0, sizeof( hand ) );
// set up gun position
CG_CalculateWeaponPosition( hand.origin, angles );
- VectorMA( hand.origin, cg_gun_x.value, cg.refdef.viewaxis[0], hand.origin );
- VectorMA( hand.origin, cg_gun_y.value, cg.refdef.viewaxis[1], hand.origin );
- VectorMA( hand.origin, (cg_gun_z.value+fovOffset), cg.refdef.viewaxis[2], hand.origin );
+ VectorMA( hand.origin, cg_gun_x.value, cg.refdef.viewaxis[ 0 ], hand.origin );
+ VectorMA( hand.origin, cg_gun_y.value, cg.refdef.viewaxis[ 1 ], hand.origin );
+ VectorMA( hand.origin, ( cg_gun_z.value + fovOffset ), cg.refdef.viewaxis[ 2 ], hand.origin );
if( ps->weapon == WP_LUCIFER_CANON && ps->stats[ STAT_MISC ] > 0 )
{
float fraction = (float)ps->stats[ STAT_MISC ] / (float)LC_TOTAL_CHARGE;
- VectorMA( hand.origin, random( ) * fraction, cg.refdef.viewaxis[0], hand.origin );
- VectorMA( hand.origin, random( ) * fraction, cg.refdef.viewaxis[1], hand.origin );
+ VectorMA( hand.origin, random( ) * fraction, cg.refdef.viewaxis[ 0 ], hand.origin );
+ VectorMA( hand.origin, random( ) * fraction, cg.refdef.viewaxis[ 1 ], hand.origin );
}
if( cg.predictedPlayerState.stats[ STAT_STATE ] & SS_KNOCKEDOVER )
@@ -1456,11 +1027,14 @@ void CG_AddViewWeapon( playerState_t *ps ) {
AnglesToAxis( angles, hand.axis );
// map torso animations to weapon animations
- if ( cg_gun_frame.integer ) {
+ if( cg_gun_frame.integer )
+ {
// development tool
hand.frame = hand.oldframe = cg_gun_frame.integer;
hand.backlerp = 0;
- } else {
+ }
+ else
+ {
// get clientinfo for animation map
ci = &cgs.clientinfo[ cent->currentState.clientNum ];
hand.frame = CG_MapTorsoToWeaponFrame( ci, cent->pe.torso.frame );
@@ -1472,7 +1046,8 @@ void CG_AddViewWeapon( playerState_t *ps ) {
hand.renderfx = RF_DEPTHHACK | RF_FIRST_PERSON | RF_MINLIGHT;
// add everything onto the hand
- CG_AddPlayerWeapon( &hand, ps, &cg.predictedPlayerEntity );}
+ CG_AddPlayerWeapon( &hand, ps, &cg.predictedPlayerEntity );
+}
/*
==============================================================================
@@ -1482,32 +1057,6 @@ WEAPON SELECTION
==============================================================================
*/
-qboolean haveWeapon( int *weapons, int num, int weapon )
-{
- int i;
-
- for( i = 0; i < num; i++ )
- {
- if( weapons[ i ] == weapon )
- return qtrue;
- }
-
- return qfalse;
-}
-
-qboolean haveUpgrade( int *upgrades, int num, int upgrade )
-{
- int i;
-
- for( i = 0; i < num; i++ )
- {
- if( upgrades[ i ] == upgrade )
- return qtrue;
- }
-
- return qfalse;
-}
-
#define ICON_BORDER 4
/*
@@ -1681,9 +1230,8 @@ CG_ItemSelectable
*/
static qboolean CG_ItemSelectable( int i )
{
- if( !BG_gotItem( i, cg.snap->ps.stats ) ) {
+ if( !BG_gotItem( i, cg.snap->ps.stats ) )
return qfalse;
- }
return qtrue;
}
@@ -1694,45 +1242,40 @@ static qboolean CG_ItemSelectable( int i )
CG_NextWeapon_f
===============
*/
-void CG_NextWeapon_f( void ) {
+void CG_NextWeapon_f( void )
+{
int i;
int original;
- if ( !cg.snap ) {
+ if( !cg.snap )
return;
- }
- if ( cg.snap->ps.pm_flags & PMF_FOLLOW ) {
+
+ if( cg.snap->ps.pm_flags & PMF_FOLLOW )
return;
- }
cg.weaponSelectTime = cg.time;
original = cg.weaponSelect;
- for ( i = 0 ; i < 64 ; i++ ) {
+ for( i = 0; i < 64; i++ )
+ {
cg.weaponSelect++;
- if ( cg.weaponSelect == 64 ) {
+ if( cg.weaponSelect == 64 )
cg.weaponSelect = 0;
- }
- /*if ( cg.weaponSelect == WP_GAUNTLET ) {
- continue; // never cycle to gauntlet
- }*/
if( cg.weaponSelect <= 32 )
{
- if ( CG_WeaponSelectable( cg.weaponSelect ) ) {
+ if( CG_WeaponSelectable( cg.weaponSelect ) )
break;
- }
}
else if( cg.weaponSelect > 32 )
{
- if ( CG_ItemSelectable( cg.weaponSelect - 32 ) ) {
+ if( CG_ItemSelectable( cg.weaponSelect - 32 ) )
break;
- }
}
}
- if ( i == 64 ) {
+
+ if( i == 64 )
cg.weaponSelect = original;
- }
}
/*
@@ -1740,44 +1283,40 @@ void CG_NextWeapon_f( void ) {
CG_PrevWeapon_f
===============
*/
-void CG_PrevWeapon_f( void ) {
+void CG_PrevWeapon_f( void )
+{
int i;
int original;
- if ( !cg.snap ) {
+ if( !cg.snap )
return;
- }
- if ( cg.snap->ps.pm_flags & PMF_FOLLOW ) {
+
+ if( cg.snap->ps.pm_flags & PMF_FOLLOW )
return;
- }
cg.weaponSelectTime = cg.time;
original = cg.weaponSelect;
- for ( i = 0 ; i < 64 ; i++ ) {
+ for( i = 0; i < 64; i++ )
+ {
cg.weaponSelect--;
- if ( cg.weaponSelect == -1 ) {
+ if( cg.weaponSelect == -1 )
cg.weaponSelect = 63;
- }
- /*if ( cg.weaponSelect == WP_GAUNTLET ) {
- continue; // never cycle to gauntlet
- }*/
+
if( cg.weaponSelect <= 32 )
{
- if ( CG_WeaponSelectable( cg.weaponSelect ) ) {
+ if( CG_WeaponSelectable( cg.weaponSelect ) )
break;
- }
}
else if( cg.weaponSelect > 32 )
{
- if ( CG_ItemSelectable( cg.weaponSelect - 32 ) ) {
+ if( CG_ItemSelectable( cg.weaponSelect - 32 ) )
break;
- }
}
}
- if ( i == 64 ) {
+
+ if( i == 64 )
cg.weaponSelect = original;
- }
}
/*
@@ -1785,53 +1324,29 @@ void CG_PrevWeapon_f( void ) {
CG_Weapon_f
===============
*/
-void CG_Weapon_f( void ) {
+void CG_Weapon_f( void )
+{
int num;
- if ( !cg.snap ) {
+ if( !cg.snap )
return;
- }
- if ( cg.snap->ps.pm_flags & PMF_FOLLOW ) {
+
+ if( cg.snap->ps.pm_flags & PMF_FOLLOW )
return;
- }
num = atoi( CG_Argv( 1 ) );
- if ( num < 1 || num > 31 ) {
+ if( num < 1 || num > 31 )
return;
- }
cg.weaponSelectTime = cg.time;
- if ( !BG_gotWeapon( num, cg.snap->ps.stats ) ) {
+ if( !BG_gotWeapon( num, cg.snap->ps.stats ) )
return; // don't have the weapon
- }
cg.weaponSelect = num;
}
-/*
-===================
-CG_OutOfAmmoChange
-
-The current weapon has just run out of ammo
-===================
-*/
-void CG_OutOfAmmoChange( void ) {
- int i;
-
- //TA: mwhaha, must manually change weapons
- /*cg.weaponSelectTime = cg.time;
-
- for ( i = 31 ; i > 0 ; i-- ) {
- if ( CG_WeaponSelectable( i ) ) {
- cg.weaponSelect = i;
- break;
- }
- }*/
-}
-
-
/*
===================================================================================================
@@ -1855,13 +1370,15 @@ void CG_FireWeapon( centity_t *cent, int mode )
weaponInfo_t *weap;
ent = &cent->currentState;
- if ( ent->weapon == WP_NONE ) {
+ if( ent->weapon == WP_NONE )
return;
- }
- if ( ent->weapon >= WP_NUM_WEAPONS ) {
+
+ if( ent->weapon >= WP_NUM_WEAPONS )
+ {
CG_Error( "CG_FireWeapon: ent->weapon >= WP_NUM_WEAPONS" );
return;
}
+
weap = &cg_weapons[ ent->weapon ];
// mark the entity as muzzle flashing, so when it is added it will
@@ -1872,35 +1389,29 @@ void CG_FireWeapon( centity_t *cent, int mode )
cent->firstPoisonTime = cg.time;
// lightning gun only does this this on initial press
- if ( ent->weapon == WP_TESLAGEN ) {
- if ( cent->pe.lightningFiring ) {
+ if( ent->weapon == WP_TESLAGEN )
+ {
+ if( cent->pe.lightningFiring )
return;
- }
}
- // play quad sound if needed
- /*if ( cent->currentState.powerups & ( 1 << PW_QUAD ) ) {
- trap_S_StartSound (NULL, cent->currentState.number, CHAN_ITEM, cgs.media.quadSound );
- }*/
-
// play a sound
- for ( c = 0 ; c < 4 ; c++ ) {
- if ( !weap->flashSound[c] ) {
+ for( c = 0; c < 4; c++ )
+ {
+ if( !weap->flashSound[ c ] )
break;
- }
}
- if ( c > 0 ) {
- c = rand() % c;
- if ( weap->flashSound[c] )
- {
- trap_S_StartSound( NULL, ent->number, CHAN_WEAPON, weap->flashSound[c] );
- }
+
+ if( c > 0 )
+ {
+ c = rand( ) % c;
+ if( weap->flashSound[ c ] )
+ trap_S_StartSound( NULL, ent->number, CHAN_WEAPON, weap->flashSound[ c ] );
}
// do brass ejection
- if ( weap->ejectBrassFunc && cg_brassTime.integer > 0 ) {
+ if( weap->ejectBrassFunc && cg_brassTime.integer > 0 )
weap->ejectBrassFunc( cent );
- }
}
@@ -1912,20 +1423,20 @@ Caused by an EV_MISSILE_MISS event, or directly by local bullet tracing
=================
*/
void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, impactSound_t soundType, int damage ) {
- qhandle_t mod;
- qhandle_t mark;
- qhandle_t shader;
+ qhandle_t mod;
+ qhandle_t mark;
+ qhandle_t shader;
sfxHandle_t sfx;
- float radius;
- float light;
- vec3_t lightColor;
+ float radius;
+ float light;
+ vec3_t lightColor;
localEntity_t *le;
- int r, i;
- qboolean alphaFade;
- qboolean isSprite;
- int duration;
- vec3_t sprOrg;
- vec3_t sprVel;
+ int r, i;
+ qboolean alphaFade;
+ qboolean isSprite;
+ int duration;
+ vec3_t sprOrg;
+ vec3_t sprVel;
mark = 0;
radius = 32;
@@ -1933,9 +1444,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, im
mod = 0;
shader = 0;
light = 0;
- lightColor[0] = 1;
- lightColor[1] = 1;
- lightColor[2] = 0;
+ lightColor[ 0 ] = 1;
+ lightColor[ 1 ] = 1;
+ lightColor[ 2 ] = 0;
// set defaults
isSprite = qfalse;
@@ -1943,118 +1454,111 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, im
switch( weapon )
{
- default:
- case WP_TESLAGEN:
- case WP_AREA_ZAP:
- case WP_DIRECT_ZAP:
- mod = cgs.media.lightningExplosionModel;
- shader = cgs.media.lightningShader;
- sfx = cgs.media.sfx_lghit;
- mark = cgs.media.energyMarkShader;
- radius = 24;
- break;
- case WP_LOCKBLOB_LAUNCHER:
- case WP_POUNCE_UPG:
- sfx = cgs.media.gibBounce1Sound;
- mark = cgs.media.greenBloodMarkShader;
- radius = 64;
- isSprite = qtrue;
- break;
- case WP_FLAMER:
- sfx = cgs.media.sfx_flamerexp;
- mark = cgs.media.burnMarkShader;
- radius = 32;
- break;
- case WP_PLASMAGUN:
- mod = cgs.media.ringFlashModel;
- shader = cgs.media.plasmaExplosionShader;
- sfx = cgs.media.sfx_plasmaexp;
- mark = cgs.media.energyMarkShader;
- radius = 16;
- break;
- case WP_PULSE_RIFLE:
- mod = cgs.media.ringFlashModel;
- shader = cgs.media.plasmaExplosionShader;
- sfx = cgs.media.sfx_plasmaexp;
- mark = cgs.media.energyMarkShader;
- radius = 16;
- break;
- case WP_MASS_DRIVER:
- shader = cgs.media.bulletExplosionShader;
- mark = cgs.media.bulletMarkShader;
- radius = 8;
- break;
- case WP_MACHINEGUN:
- case WP_CHAINGUN:
- case WP_LAS_GUN:
- mod = cgs.media.bulletFlashModel;
- shader = cgs.media.bulletExplosionShader;
- mark = cgs.media.bulletMarkShader;
-
- r = rand() & 3;
- if ( r == 0 ) {
- sfx = cgs.media.sfx_ric1;
- } else if ( r == 1 ) {
- sfx = cgs.media.sfx_ric2;
- } else {
- sfx = cgs.media.sfx_ric3;
- }
-
- radius = 8;
- break;
-
- #define LCANON_EJECTION_VEL 300
-
- case WP_LUCIFER_CANON:
- mod = cgs.media.dishFlashModel;
- shader = cgs.media.bfgExplosionShader;
- mark = cgs.media.bulletMarkShader;
- radius = 8;
- sfx = cgs.media.sfx_plasmaexp;
- isSprite = qtrue;
-
- for( i = 0; i <= damage / 20; i++ )
- {
- qhandle_t spark;
- vec3_t velocity;
- vec3_t accel = { 0.0f, 0.0f, -DEFAULT_GRAVITY };
-
- VectorMA( origin, 1.0f, dir, origin );
-
- if( random( ) > 0.5f )
- spark = cgs.media.gibSpark1;
+ default:
+ case WP_TESLAGEN:
+ case WP_AREA_ZAP:
+ case WP_DIRECT_ZAP:
+ mod = cgs.media.lightningExplosionModel;
+ shader = cgs.media.lightningShader;
+ sfx = cgs.media.sfx_lghit;
+ mark = cgs.media.energyMarkShader;
+ radius = 24;
+ break;
+
+ case WP_LOCKBLOB_LAUNCHER:
+ case WP_POUNCE_UPG:
+ sfx = cgs.media.gibBounce1Sound;
+ mark = cgs.media.greenBloodMarkShader;
+ radius = 64;
+ isSprite = qtrue;
+ break;
+
+ case WP_FLAMER:
+ sfx = cgs.media.sfx_flamerexp;
+ mark = cgs.media.burnMarkShader;
+ radius = 32;
+ break;
+
+ case WP_PULSE_RIFLE:
+ mod = cgs.media.ringFlashModel;
+ shader = cgs.media.plasmaExplosionShader;
+ sfx = cgs.media.sfx_plasmaexp;
+ mark = cgs.media.energyMarkShader;
+ radius = 16;
+ break;
+
+ case WP_MASS_DRIVER:
+ shader = cgs.media.bulletExplosionShader;
+ mark = cgs.media.bulletMarkShader;
+ radius = 8;
+ break;
+
+ case WP_MACHINEGUN:
+ case WP_CHAINGUN:
+ case WP_LAS_GUN:
+ mod = cgs.media.bulletFlashModel;
+ shader = cgs.media.bulletExplosionShader;
+ mark = cgs.media.bulletMarkShader;
+
+ r = rand( ) & 3;
+ if( r == 0 )
+ sfx = cgs.media.sfx_ric1;
+ else if( r == 1 )
+ sfx = cgs.media.sfx_ric2;
else
- spark = cgs.media.scannerBlipShader;
+ sfx = cgs.media.sfx_ric3;
- velocity[ 0 ] = ( 2 * random( ) - 1.0f ) * LCANON_EJECTION_VEL;
- velocity[ 1 ] = ( 2 * random( ) - 1.0f ) * LCANON_EJECTION_VEL;
- velocity[ 2 ] = ( 2 * random( ) - 1.0f ) * LCANON_EJECTION_VEL;
+ radius = 8;
+ break;
- CG_LaunchSprite( origin, velocity, accel, 0.0f,
- 0.9f, 1.0f, 40.0f, 255, 0, rand( ) % 360,
- cg.time, cg.time, 2000 + ( crandom( ) * 1000 ),
- spark, qfalse, qfalse );
- }
- break;
+ #define LCANON_EJECTION_VEL 300
+
+ case WP_LUCIFER_CANON:
+ mod = cgs.media.dishFlashModel;
+ shader = cgs.media.bfgExplosionShader;
+ mark = cgs.media.bulletMarkShader;
+ radius = 8;
+ sfx = cgs.media.sfx_plasmaexp;
+ isSprite = qtrue;
+
+ for( i = 0; i <= damage / 20; i++ )
+ {
+ qhandle_t spark;
+ vec3_t velocity;
+ vec3_t accel = { 0.0f, 0.0f, -DEFAULT_GRAVITY };
+
+ VectorMA( origin, 1.0f, dir, origin );
+
+ if( random( ) > 0.5f )
+ spark = cgs.media.gibSpark1;
+ else
+ spark = cgs.media.scannerBlipShader;
+
+ velocity[ 0 ] = ( 2 * random( ) - 1.0f ) * LCANON_EJECTION_VEL;
+ velocity[ 1 ] = ( 2 * random( ) - 1.0f ) * LCANON_EJECTION_VEL;
+ velocity[ 2 ] = ( 2 * random( ) - 1.0f ) * LCANON_EJECTION_VEL;
+
+ CG_LaunchSprite( origin, velocity, accel, 0.0f,
+ 0.9f, 1.0f, 40.0f, 255, 0, rand( ) % 360,
+ cg.time, cg.time, 2000 + ( crandom( ) * 1000 ),
+ spark, qfalse, qfalse );
+ }
+ break;
}
- if ( sfx ) {
+ if( sfx )
trap_S_StartSound( origin, ENTITYNUM_WORLD, CHAN_AUTO, sfx );
- }
//
// create the explosion
//
- if ( mod ) {
+ if( mod )
+ {
le = CG_MakeExplosion( origin, dir,
- mod, shader,
- duration, isSprite );
+ mod, shader,
+ duration, isSprite );
le->light = light;
VectorCopy( lightColor, le->lightColor );
-/* if ( weapon == WP_RAILGUN ) {
- // colorize with client color
- VectorCopy( cgs.clientinfo[clientNum].color1, le->color );
- }*/
}
//
@@ -2064,18 +1568,7 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, im
alphaFade = ( mark == cgs.media.energyMarkShader ||
mark == cgs.media.greenBloodMarkShader );
-/* if( weapon == WP_RAILGUN )
- {
- float *color;
-
- // colorize with client color
- color = cgs.clientinfo[clientNum].color2;
- CG_ImpactMark( mark, origin, dir, random()*360, color[0],color[1], color[2],1, alphaFade, radius, qfalse );
- }
- else*/
- {
- CG_ImpactMark( mark, origin, dir, random()*360, 1,1,1,1, alphaFade, radius, qfalse );
- }
+ CG_ImpactMark( mark, origin, dir, random( ) * 360, 1, 1, 1, 1, alphaFade, radius, qfalse );
}
@@ -2084,138 +1577,23 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, im
CG_MissileHitPlayer
=================
*/
-void CG_MissileHitPlayer( int weapon, vec3_t origin, vec3_t dir, int entityNum, int damage ) {
+void CG_MissileHitPlayer( int weapon, vec3_t origin, vec3_t dir, int entityNum, int damage )
+{
CG_Bleed( origin, entityNum );
// some weapons will make an explosion with the blood, while
// others will just make the blood
- switch ( weapon ) {
-/* case WP_GRENADE_LAUNCHER:
- case WP_ROCKET_LAUNCHER:
- CG_MissileHitWall( weapon, 0, origin, dir, IMPACTSOUND_FLESH );
- break;*/
- default:
- break;
- }
-}
-
-
-
-/*
-============================================================================
-
-SHOTGUN TRACING
-
-============================================================================
-*/
-
-/*
-================
-CG_ShotgunPellet
-================
-*/
-static void CG_ShotgunPellet( vec3_t start, vec3_t end, int skipNum ) {
- trace_t tr;
- int sourceContentType, destContentType;
-
- CG_Trace( &tr, start, NULL, NULL, end, skipNum, MASK_SHOT );
-
- sourceContentType = trap_CM_PointContents( start, 0 );
- destContentType = trap_CM_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 ) {
- 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;
- }
-
- if ( cg_entities[tr.entityNum].currentState.eType == ET_PLAYER ) {
- /*CG_MissileHitPlayer( WP_SHOTGUN, tr.endpos, tr.plane.normal, tr.entityNum );*/
- } else {
- if ( tr.surfaceFlags & SURF_NOIMPACT ) {
- // SURF_NOIMPACT will not make a flame puff or a mark
- return;
- }
- if ( tr.surfaceFlags & SURF_METALSTEPS ) {
- /*CG_MissileHitWall( WP_SHOTGUN, 0, tr.endpos, tr.plane.normal, IMPACTSOUND_METAL );*/
- } else {
- /*CG_MissileHitWall( WP_SHOTGUN, 0, tr.endpos, tr.plane.normal, IMPACTSOUND_DEFAULT );*/
- }
- }
-}
-
-/*
-================
-CG_ShotgunPattern
-
-Perform the same traces the server did to locate the
-hit splashes
-================
-*/
-static void CG_ShotgunPattern( vec3_t origin, vec3_t origin2, int seed, int otherEntNum ) {
- int i;
- float r, u;
- vec3_t end;
- vec3_t forward, right, up;
-
- // derive the right and up vectors from the forward vector, because
- // the client won't have any other information
- VectorNormalize2( origin2, forward );
- PerpendicularVector( right, forward );
- CrossProduct( forward, right, up );
-
- // generate the "random" spread pattern
- for ( i = 0 ; i < DEFAULT_SHOTGUN_COUNT ; i++ ) {
- r = Q_crandom( &seed ) * DEFAULT_SHOTGUN_SPREAD * 16;
- u = Q_crandom( &seed ) * DEFAULT_SHOTGUN_SPREAD * 16;
- VectorMA( origin, 8192 * 16, forward, end);
- VectorMA (end, r, right, end);
- VectorMA (end, u, up, end);
-
- CG_ShotgunPellet( origin, end, otherEntNum );
+ switch( weapon )
+ {
+ /* case WP_GRENADE_LAUNCHER:
+ case WP_ROCKET_LAUNCHER:
+ CG_MissileHitWall( weapon, 0, origin, dir, IMPACTSOUND_FLESH );
+ break;*/
+ default:
+ break;
}
}
-/*
-==============
-CG_ShotgunFire
-==============
-*/
-void CG_ShotgunFire( entityState_t *es ) {
- vec3_t v;
- int contents;
-
- VectorSubtract( es->origin2, es->pos.trBase, v );
- VectorNormalize( v );
- VectorScale( v, 32, v );
- VectorAdd( es->pos.trBase, v, v );
- if ( cgs.glconfig.hardwareType != GLHW_RAGEPRO ) {
- // ragepro can't alpha fade, so don't even bother with smoke
- vec3_t up;
-
- contents = trap_CM_PointContents( es->pos.trBase, 0 );
- if ( !( contents & CONTENTS_WATER ) ) {
- VectorSet( up, 0, 0, 8 );
- CG_SmokePuff( v, up, 32, 1, 1, 1, 0.33f, 900, cg.time, 0, LEF_PUFF_DONT_SCALE, cgs.media.shotgunSmokePuffShader );
- }
- }
- CG_ShotgunPattern( es->pos.trBase, es->origin2, es->eventParm, es->otherEntityNum );
-}
/*
============================================================================
@@ -2231,78 +1609,78 @@ BULLETS
CG_Tracer
===============
*/
-void CG_Tracer( vec3_t source, vec3_t dest ) {
- vec3_t forward, right;
- polyVert_t verts[4];
- vec3_t line;
- float len, begin, end;
- vec3_t start, finish;
- vec3_t midpoint;
+void CG_Tracer( vec3_t source, vec3_t dest )
+{
+ vec3_t forward, right;
+ polyVert_t verts[ 4 ];
+ vec3_t line;
+ float len, begin, end;
+ vec3_t start, finish;
+ vec3_t midpoint;
// tracer
VectorSubtract( dest, source, forward );
len = VectorNormalize( forward );
// start at least a little ways from the muzzle
- if ( len < 100 ) {
+ if( len < 100 )
return;
- }
- begin = 50 + random() * (len - 60);
+
+ begin = 50 + random( ) * ( len - 60 );
end = begin + cg_tracerLength.value;
- if ( end > len ) {
+ if( end > len )
end = len;
- }
+
VectorMA( source, begin, forward, start );
VectorMA( source, end, forward, finish );
- line[0] = DotProduct( forward, cg.refdef.viewaxis[1] );
- line[1] = DotProduct( forward, cg.refdef.viewaxis[2] );
+ line[ 0 ] = DotProduct( forward, cg.refdef.viewaxis[ 1 ] );
+ line[ 1 ] = DotProduct( forward, cg.refdef.viewaxis[ 2 ] );
- VectorScale( cg.refdef.viewaxis[1], line[1], right );
- VectorMA( right, -line[0], cg.refdef.viewaxis[2], right );
+ VectorScale( cg.refdef.viewaxis[ 1 ], line[ 1 ], right );
+ VectorMA( right, -line[ 0 ], cg.refdef.viewaxis[ 2 ], right );
VectorNormalize( right );
- VectorMA( finish, cg_tracerWidth.value, right, verts[0].xyz );
- verts[0].st[0] = 0;
- verts[0].st[1] = 1;
- verts[0].modulate[0] = 255;
- verts[0].modulate[1] = 255;
- verts[0].modulate[2] = 255;
- verts[0].modulate[3] = 255;
-
- VectorMA( finish, -cg_tracerWidth.value, right, verts[1].xyz );
- verts[1].st[0] = 1;
- verts[1].st[1] = 0;
- verts[1].modulate[0] = 255;
- verts[1].modulate[1] = 255;
- verts[1].modulate[2] = 255;
- verts[1].modulate[3] = 255;
-
- VectorMA( start, -cg_tracerWidth.value, right, verts[2].xyz );
- verts[2].st[0] = 1;
- verts[2].st[1] = 1;
- verts[2].modulate[0] = 255;
- verts[2].modulate[1] = 255;
- verts[2].modulate[2] = 255;
- verts[2].modulate[3] = 255;
-
- VectorMA( start, cg_tracerWidth.value, right, verts[3].xyz );
- verts[3].st[0] = 0;
- verts[3].st[1] = 0;
- verts[3].modulate[0] = 255;
- verts[3].modulate[1] = 255;
- verts[3].modulate[2] = 255;
- verts[3].modulate[3] = 255;
+ VectorMA( finish, cg_tracerWidth.value, right, verts[ 0 ].xyz );
+ verts[ 0 ].st[ 0 ] = 0;
+ verts[ 0 ].st[ 1 ] = 1;
+ verts[ 0 ].modulate[ 0 ] = 255;
+ verts[ 0 ].modulate[ 1 ] = 255;
+ verts[ 0 ].modulate[ 2 ] = 255;
+ verts[ 0 ].modulate[ 3 ] = 255;
+
+ VectorMA( finish, -cg_tracerWidth.value, right, verts[ 1 ].xyz );
+ verts[ 1 ].st[ 0 ] = 1;
+ verts[ 1 ].st[ 1 ] = 0;
+ verts[ 1 ].modulate[ 0 ] = 255;
+ verts[ 1 ].modulate[ 1 ] = 255;
+ verts[ 1 ].modulate[ 2 ] = 255;
+ verts[ 1 ].modulate[ 3 ] = 255;
+
+ VectorMA( start, -cg_tracerWidth.value, right, verts[ 2 ].xyz );
+ verts[ 2 ].st[ 0 ] = 1;
+ verts[ 2 ].st[ 1 ] = 1;
+ verts[ 2 ].modulate[ 0 ] = 255;
+ verts[ 2 ].modulate[ 1 ] = 255;
+ verts[ 2 ].modulate[ 2 ] = 255;
+ verts[ 2 ].modulate[ 3 ] = 255;
+
+ VectorMA( start, cg_tracerWidth.value, right, verts[ 3 ].xyz );
+ verts[ 3 ].st[ 0 ] = 0;
+ verts[ 3 ].st[ 1 ] = 0;
+ verts[ 3 ].modulate[ 0 ] = 255;
+ verts[ 3 ].modulate[ 1 ] = 255;
+ verts[ 3 ].modulate[ 2 ] = 255;
+ verts[ 3 ].modulate[ 3 ] = 255;
trap_R_AddPolyToScene( cgs.media.tracerShader, 4, verts );
- midpoint[0] = ( start[0] + finish[0] ) * 0.5;
- midpoint[1] = ( start[1] + finish[1] ) * 0.5;
- midpoint[2] = ( start[2] + finish[2] ) * 0.5;
+ midpoint[ 0 ] = ( start[ 0 ] + finish[ 0 ] ) * 0.5;
+ midpoint[ 1 ] = ( start[ 1 ] + finish[ 1 ] ) * 0.5;
+ midpoint[ 2 ] = ( start[ 2 ] + finish[ 2 ] ) * 0.5;
// add the tracer sound
trap_S_StartSound( midpoint, ENTITYNUM_WORLD, CHAN_AUTO, cgs.media.tracerSound );
-
}
@@ -2311,33 +1689,35 @@ void CG_Tracer( vec3_t source, vec3_t dest ) {
CG_CalcMuzzlePoint
======================
*/
-static qboolean CG_CalcMuzzlePoint( int entityNum, vec3_t muzzle ) {
+static qboolean CG_CalcMuzzlePoint( int entityNum, vec3_t muzzle )
+{
vec3_t forward;
centity_t *cent;
- int anim;
+ int anim;
- if ( entityNum == cg.snap->ps.clientNum ) {
+ if( entityNum == cg.snap->ps.clientNum )
+ {
VectorCopy( cg.snap->ps.origin, muzzle );
- muzzle[2] += cg.snap->ps.viewheight;
+ muzzle[ 2 ] += cg.snap->ps.viewheight;
AngleVectors( cg.snap->ps.viewangles, forward, NULL, NULL );
VectorMA( muzzle, 14, forward, muzzle );
return qtrue;
}
cent = &cg_entities[entityNum];
- if ( !cent->currentValid ) {
+
+ if( !cent->currentValid )
return qfalse;
- }
VectorCopy( cent->currentState.pos.trBase, muzzle );
AngleVectors( cent->currentState.apos.trBase, forward, NULL, NULL );
anim = cent->currentState.legsAnim & ~ANIM_TOGGLEBIT;
- if ( anim == LEGS_WALKCR || anim == LEGS_IDLECR ) {
- muzzle[2] += CROUCH_VIEWHEIGHT;
- } else {
- muzzle[2] += DEFAULT_VIEWHEIGHT;
- }
+
+ if( anim == LEGS_WALKCR || anim == LEGS_IDLECR )
+ muzzle[ 2 ] += CROUCH_VIEWHEIGHT;
+ else
+ muzzle[ 2 ] += DEFAULT_VIEWHEIGHT;
VectorMA( muzzle, 14, forward, muzzle );
@@ -2383,44 +1763,47 @@ CG_Bullet
Renders bullet effects.
======================
*/
-void CG_Bullet( vec3_t end, int sourceEntityNum, vec3_t normal, qboolean flesh, int fleshEntityNum ) {
+void CG_Bullet( vec3_t end, int sourceEntityNum, vec3_t normal, qboolean flesh, int fleshEntityNum )
+{
trace_t trace;
- int sourceContentType, destContentType;
- vec3_t start;
+ int sourceContentType, destContentType;
+ vec3_t start;
// if the shooter is currently valid, calc a source point and possibly
// do trail effects
- if ( sourceEntityNum >= 0 && cg_tracerChance.value > 0 ) {
- if ( CG_CalcMuzzlePoint( sourceEntityNum, start ) ) {
+ if( sourceEntityNum >= 0 && cg_tracerChance.value > 0 )
+ {
+ if( CG_CalcMuzzlePoint( sourceEntityNum, start ) )
+ {
sourceContentType = trap_CM_PointContents( start, 0 );
destContentType = trap_CM_PointContents( end, 0 );
// do a complete bubble trail if necessary
- if ( ( sourceContentType == destContentType ) && ( sourceContentType & CONTENTS_WATER ) ) {
+ if( ( sourceContentType == destContentType ) && ( sourceContentType & CONTENTS_WATER ) )
CG_BubbleTrail( start, end, 32 );
- }
+
// bubble trail from water into air
- else if ( ( sourceContentType & CONTENTS_WATER ) ) {
+ else if( ( sourceContentType & CONTENTS_WATER ) )
+ {
trap_CM_BoxTrace( &trace, end, start, NULL, NULL, 0, CONTENTS_WATER );
CG_BubbleTrail( start, trace.endpos, 32 );
}
// bubble trail from air into water
- else if ( ( destContentType & CONTENTS_WATER ) ) {
+ else if( ( destContentType & CONTENTS_WATER ) )
+ {
trap_CM_BoxTrace( &trace, start, end, NULL, NULL, 0, CONTENTS_WATER );
CG_BubbleTrail( trace.endpos, end, 32 );
}
// draw a tracer
- if ( random() < cg_tracerChance.value ) {
+ if( random( ) < cg_tracerChance.value )
CG_Tracer( start, end );
- }
}
}
// impact splash and mark
- if ( flesh ) {
+ if( flesh )
CG_Bleed( end, fleshEntityNum );
- } else {
+ else
CG_MissileHitWall( WP_MACHINEGUN, 0, end, normal, IMPACTSOUND_DEFAULT, 0 );
- }
}
diff --git a/src/cgame/tr_types.h b/src/cgame/tr_types.h
index fa5ae08f..e424cacc 100644
--- a/src/cgame/tr_types.h
+++ b/src/cgame/tr_types.h
@@ -18,115 +18,121 @@
#define __TR_TYPES_H
-#define MAX_DLIGHTS 32 // can't be increased, because bit flags are used on surfaces
-#define MAX_ENTITIES 1023 // can't be increased without changing drawsurf bit packing
+#define MAX_DLIGHTS 32 // can't be increased, because bit flags are used on surfaces
+#define MAX_ENTITIES 1023 // can't be increased without changing drawsurf bit packing
// renderfx flags
-#define RF_MINLIGHT 1 // allways have some light (viewmodel, some items)
-#define RF_THIRD_PERSON 2 // don't draw through eyes, only mirrors (player bodies, chat sprites)
-#define RF_FIRST_PERSON 4 // only draw through eyes (view weapon, damage blood blob)
-#define RF_DEPTHHACK 8 // for view weapon Z crunching
-#define RF_NOSHADOW 64 // don't add stencil shadows
-
-#define RF_LIGHTING_ORIGIN 128 // use refEntity->lightingOrigin instead of refEntity->origin
- // for lighting. This allows entities to sink into the floor
- // with their origin going solid, and allows all parts of a
- // player to get the same lighting
-#define RF_SHADOW_PLANE 256 // use refEntity->shadowPlane
-#define RF_WRAP_FRAMES 512 // mod the model frames by the maxframes to allow continuous
- // animation without needing to know the frame count
+#define RF_MINLIGHT 1 // allways have some light (viewmodel, some items)
+#define RF_THIRD_PERSON 2 // don't draw through eyes, only mirrors (player bodies, chat sprites)
+#define RF_FIRST_PERSON 4 // only draw through eyes (view weapon, damage blood blob)
+#define RF_DEPTHHACK 8 // for view weapon Z crunching
+#define RF_NOSHADOW 64 // don't add stencil shadows
+
+#define RF_LIGHTING_ORIGIN 128 // use refEntity->lightingOrigin instead of refEntity->origin
+ // for lighting. This allows entities to sink into the floor
+ // with their origin going solid, and allows all parts of a
+ // player to get the same lighting
+#define RF_SHADOW_PLANE 256 // use refEntity->shadowPlane
+#define RF_WRAP_FRAMES 512 // mod the model frames by the maxframes to allow continuous
+ // animation without needing to know the frame count
// refdef flags
-#define RDF_NOWORLDMODEL 1 // used for player configuration screen
-#define RDF_HYPERSPACE 4 // teleportation effect
-
-typedef struct {
- vec3_t xyz;
- float st[2];
- byte modulate[4];
+#define RDF_NOWORLDMODEL 1 // used for player configuration screen
+#define RDF_HYPERSPACE 4 // teleportation effect
+
+typedef struct
+{
+ vec3_t xyz;
+ float st[ 2 ];
+ byte modulate[ 4 ];
} polyVert_t;
-typedef struct poly_s {
- qhandle_t hShader;
- int numVerts;
- polyVert_t *verts;
+typedef struct poly_s
+{
+ qhandle_t hShader;
+ int numVerts;
+ polyVert_t *verts;
} poly_t;
-typedef enum {
- RT_MODEL,
- RT_POLY,
- RT_SPRITE,
- RT_BEAM,
- RT_RAIL_CORE,
- RT_RAIL_RINGS,
- RT_LIGHTNING,
- RT_PORTALSURFACE, // doesn't draw anything, just info for portals
-
- RT_MAX_REF_ENTITY_TYPE
+typedef enum
+{
+ RT_MODEL,
+ RT_POLY,
+ RT_SPRITE,
+ RT_BEAM,
+ RT_RAIL_CORE,
+ RT_RAIL_RINGS,
+ RT_LIGHTNING,
+ RT_PORTALSURFACE, // doesn't draw anything, just info for portals
+
+ RT_MAX_REF_ENTITY_TYPE
} refEntityType_t;
-typedef struct {
- refEntityType_t reType;
- int renderfx;
+typedef struct
+{
+ refEntityType_t reType;
+ int renderfx;
- qhandle_t hModel; // opaque type outside refresh
+ qhandle_t hModel; // opaque type outside refresh
- // most recent data
- vec3_t lightingOrigin; // so multi-part models can be lit identically (RF_LIGHTING_ORIGIN)
- float shadowPlane; // projection shadows go here, stencils go slightly lower
+ // most recent data
+ vec3_t lightingOrigin; // so multi-part models can be lit identically (RF_LIGHTING_ORIGIN)
+ float shadowPlane; // projection shadows go here, stencils go slightly lower
- vec3_t axis[3]; // rotation vectors
- qboolean nonNormalizedAxes; // axis are not normalized, i.e. they have scale
- float origin[3]; // also used as MODEL_BEAM's "from"
- int frame; // also used as MODEL_BEAM's diameter
+ vec3_t axis[ 3 ]; // rotation vectors
+ qboolean nonNormalizedAxes; // axis are not normalized, i.e. they have scale
+ float origin[ 3 ]; // also used as MODEL_BEAM's "from"
+ int frame; // also used as MODEL_BEAM's diameter
- // previous data for frame interpolation
- float oldorigin[3]; // also used as MODEL_BEAM's "to"
- int oldframe;
- float backlerp; // 0.0 = current, 1.0 = old
+ // previous data for frame interpolation
+ float oldorigin[ 3 ]; // also used as MODEL_BEAM's "to"
+ int oldframe;
+ float backlerp; // 0.0 = current, 1.0 = old
- // texturing
- int skinNum; // inline skin index
- qhandle_t customSkin; // NULL for default skin
- qhandle_t customShader; // use one image for the entire thing
+ // texturing
+ int skinNum; // inline skin index
+ qhandle_t customSkin; // NULL for default skin
+ qhandle_t customShader; // use one image for the entire thing
- // misc
- byte shaderRGBA[4]; // colors used by rgbgen entity shaders
- float shaderTexCoord[2]; // texture coordinates used by tcMod entity modifiers
- float shaderTime; // subtracted from refdef time to control effect start times
+ // misc
+ byte shaderRGBA[ 4 ]; // colors used by rgbgen entity shaders
+ float shaderTexCoord[ 2 ];// texture coordinates used by tcMod entity modifiers
+ float shaderTime; // subtracted from refdef time to control effect start times
- // extra sprite information
- float radius;
- float rotation;
+ // extra sprite information
+ float radius;
+ float rotation;
} refEntity_t;
-#define MAX_RENDER_STRINGS 8
-#define MAX_RENDER_STRING_LENGTH 32
+#define MAX_RENDER_STRINGS 8
+#define MAX_RENDER_STRING_LENGTH 32
-typedef struct {
- int x, y, width, height;
- float fov_x, fov_y;
- vec3_t vieworg;
- vec3_t viewaxis[3]; // transformation matrix
+typedef struct
+{
+ int x, y, width, height;
+ float fov_x, fov_y;
+ vec3_t vieworg;
+ vec3_t viewaxis[ 3 ]; // transformation matrix
- // time in milliseconds for shader effects and other time dependent rendering issues
- int time;
+ // time in milliseconds for shader effects and other time dependent rendering issues
+ int time;
- int rdflags; // RDF_NOWORLDMODEL, etc
+ int rdflags; // RDF_NOWORLDMODEL, etc
- // 1 bits will prevent the associated area from rendering at all
- byte areamask[MAX_MAP_AREA_BYTES];
+ // 1 bits will prevent the associated area from rendering at all
+ byte areamask[ MAX_MAP_AREA_BYTES ];
- // text messages for deform text shaders
- char text[MAX_RENDER_STRINGS][MAX_RENDER_STRING_LENGTH];
+ // text messages for deform text shaders
+ char text[ MAX_RENDER_STRINGS ][ MAX_RENDER_STRING_LENGTH ];
} refdef_t;
-typedef enum {
- STEREO_CENTER,
- STEREO_LEFT,
- STEREO_RIGHT
+typedef enum
+{
+ STEREO_CENTER,
+ STEREO_LEFT,
+ STEREO_RIGHT
} stereoFrame_t;
@@ -137,77 +143,82 @@ typedef enum {
** being run right now. These are constant once the OpenGL
** subsystem is initialized.
*/
-typedef enum {
- TC_NONE,
- TC_S3TC
+typedef enum
+{
+ TC_NONE,
+ TC_S3TC
} textureCompression_t;
-typedef enum {
- GLDRV_ICD, // driver is integrated with window system
- // WARNING: there are tests that check for
- // > GLDRV_ICD for minidriverness, so this
- // should always be the lowest value in this
- // enum set
- GLDRV_STANDALONE, // driver is a non-3Dfx standalone driver
- GLDRV_VOODOO // driver is a 3Dfx standalone driver
+typedef enum
+{
+ GLDRV_ICD, // driver is integrated with window system
+ // WARNING: there are tests that check for
+ // > GLDRV_ICD for minidriverness, so this
+ // should always be the lowest value in this
+ // enum set
+ GLDRV_STANDALONE, // driver is a non-3Dfx standalone driver
+ GLDRV_VOODOO // driver is a 3Dfx standalone driver
} glDriverType_t;
-typedef enum {
- GLHW_GENERIC, // where everthing works the way it should
- GLHW_3DFX_2D3D, // Voodoo Banshee or Voodoo3, relevant since if this is
- // the hardware type then there can NOT exist a secondary
- // display adapter
- GLHW_RIVA128, // where you can't interpolate alpha
- GLHW_RAGEPRO, // where you can't modulate alpha on alpha textures
- GLHW_PERMEDIA2 // where you don't have src*dst
+typedef enum
+{
+ GLHW_GENERIC, // where everthing works the way it should
+ GLHW_3DFX_2D3D, // Voodoo Banshee or Voodoo3, relevant since if this is
+ // the hardware type then there can NOT exist a secondary
+ // display adapter
+ GLHW_RIVA128, // where you can't interpolate alpha
+ GLHW_RAGEPRO, // where you can't modulate alpha on alpha textures
+ GLHW_PERMEDIA2 // where you don't have src*dst
} glHardwareType_t;
-typedef struct {
- char renderer_string[MAX_STRING_CHARS];
- char vendor_string[MAX_STRING_CHARS];
- char version_string[MAX_STRING_CHARS];
- char extensions_string[BIG_INFO_STRING];
+typedef struct
+{
+ char renderer_string[ MAX_STRING_CHARS ];
+ char vendor_string[ MAX_STRING_CHARS ];
+ char version_string[ MAX_STRING_CHARS ];
+ char extensions_string[ BIG_INFO_STRING ];
- int maxTextureSize; // queried from GL
- int maxActiveTextures; // multitexture ability
+ int maxTextureSize; // queried from GL
+ int maxActiveTextures; // multitexture ability
- int colorBits, depthBits, stencilBits;
+ int colorBits, depthBits, stencilBits;
- glDriverType_t driverType;
- glHardwareType_t hardwareType;
+ glDriverType_t driverType;
+ glHardwareType_t hardwareType;
- qboolean deviceSupportsGamma;
- textureCompression_t textureCompression;
- qboolean textureEnvAddAvailable;
+ qboolean deviceSupportsGamma;
+ textureCompression_t textureCompression;
+ qboolean textureEnvAddAvailable;
- int vidWidth, vidHeight;
- // aspect is the screen's physical width / height, which may be different
- // than scrWidth / scrHeight if the pixels are non-square
- // normal screens should be 4/3, but wide aspect monitors may be 16/9
- float windowAspect;
+ int vidWidth, vidHeight;
+
+ // aspect is the screen's physical width / height, which may be different
+ // than scrWidth / scrHeight if the pixels are non-square
+ // normal screens should be 4/3, but wide aspect monitors may be 16/9
+ float windowAspect;
- int displayFrequency;
+ int displayFrequency;
- // synonymous with "does rendering consume the entire screen?", therefore
- // a Voodoo or Voodoo2 will have this set to TRUE, as will a Win32 ICD that
- // used CDS.
- qboolean isFullscreen;
- qboolean stereoEnabled;
- qboolean smpActive; // dual processor
+ // synonymous with "does rendering consume the entire screen?", therefore
+ // a Voodoo or Voodoo2 will have this set to TRUE, as will a Win32 ICD that
+ // used CDS.
+ qboolean isFullscreen;
+ qboolean stereoEnabled;
+ qboolean smpActive; // dual processor
} glconfig_t;
#if !defined _WIN32
-#define _3DFX_DRIVER_NAME "libMesaVoodooGL.so"
-#define OPENGL_DRIVER_NAME "libGL.so"
+#define _3DFX_DRIVER_NAME "libMesaVoodooGL.so"
+#define OPENGL_DRIVER_NAME "libGL.so"
#else
-#define _3DFX_DRIVER_NAME "3dfxvgl"
-#define OPENGL_DRIVER_NAME "opengl32"
+#define _3DFX_DRIVER_NAME "3dfxvgl"
+#define OPENGL_DRIVER_NAME "opengl32"
-#endif // !defined _WIN32
+#endif // !defined _WIN32
-#endif // __TR_TYPES_H
+#endif // __TR_TYPES_H