mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 03:24:56 +08:00
engine: client: refactor variable declarations
This commit is contained in:
@@ -195,7 +195,6 @@ static int AVI_OpenCodecContext( AVCodecContext **dst_dec_ctx, AVFormatContext *
|
||||
AVI_SpewError( quiet, S_ERROR "Failed to allocate %s codec context", dec->name );
|
||||
return AVERROR( ENOMEM );
|
||||
}
|
||||
|
||||
if(( ret = pavcodec_parameters_to_context( dec_ctx, st->codecpar )) < 0 )
|
||||
{
|
||||
AVI_SpewAvError( quiet, "avcodec_parameters_to_context", ret );
|
||||
@@ -251,8 +250,7 @@ byte *AVI_GetVideoFrame( movie_state_t *Avi, int target )
|
||||
|
||||
static void AVI_StreamAudio( movie_state_t *Avi )
|
||||
{
|
||||
int buffer_samples, file_samples, file_bytes;
|
||||
rawchan_t *ch = NULL;
|
||||
rawchan_t *ch;
|
||||
|
||||
// keep the same semantics, when S_RAW_SOUND_SOUNDTRACK doesn't play if S_StartStreaming wasn't enabled
|
||||
qboolean disable_stream = Avi->entnum == S_RAW_SOUND_SOUNDTRACK ? !snd.streaming : false;
|
||||
@@ -273,11 +271,11 @@ static void AVI_StreamAudio( movie_state_t *Avi )
|
||||
|
||||
while( ch->s_rawend < snd.soundtime + ch->max_samples )
|
||||
{
|
||||
int buffer_samples = ch->max_samples - (ch->s_rawend - snd.soundtime);
|
||||
int file_samples = buffer_samples * ((float)Avi->rate / SOUND_DMA_SPEED);
|
||||
int file_bytes;
|
||||
size_t copy;
|
||||
|
||||
buffer_samples = ch->max_samples - (ch->s_rawend - snd.soundtime);
|
||||
|
||||
file_samples = buffer_samples * ((float)Avi->rate / SOUND_DMA_SPEED);
|
||||
if( file_samples <= 1 ) return; // no more samples need
|
||||
|
||||
file_bytes = file_samples * pav_get_bytes_per_sample( Avi->s_fmt ) * Avi->channels;
|
||||
@@ -308,8 +306,6 @@ static void AVI_HandleAudio( movie_state_t *Avi, const AVFrame *frame )
|
||||
{
|
||||
int samples = frame->nb_samples;
|
||||
size_t len = samples * pav_get_bytes_per_sample( Avi->s_fmt ) * Avi->channels;
|
||||
int outsamples;
|
||||
uint8_t *ptr;
|
||||
|
||||
// allocate data
|
||||
if( !Avi->cached_audio )
|
||||
@@ -337,8 +333,8 @@ static void AVI_HandleAudio( movie_state_t *Avi, const AVFrame *frame )
|
||||
}
|
||||
}
|
||||
|
||||
ptr = Avi->cached_audio + Avi->cached_audio_len;
|
||||
outsamples = pswr_convert( Avi->swr_ctx, &ptr, samples, (void *)frame->data, samples );
|
||||
uint8_t *ptr = Avi->cached_audio + Avi->cached_audio_len;
|
||||
int outsamples = pswr_convert( Avi->swr_ctx, &ptr, samples, (void *)frame->data, samples );
|
||||
Avi->cached_audio_len += outsamples * pav_get_bytes_per_sample( Avi->s_fmt ) * Avi->channels;
|
||||
|
||||
// Con_Printf( "%s: got audio chunk of size %d samples\n", __func__, outsamples );
|
||||
@@ -463,8 +459,6 @@ qboolean AVI_Think( movie_state_t *Avi )
|
||||
|
||||
void AVI_OpenVideo( movie_state_t *Avi, const char *filename, qboolean load_audio, int quiet )
|
||||
{
|
||||
byte *dst[4];
|
||||
int dst_linesize[4];
|
||||
int ret;
|
||||
|
||||
if( Avi->active )
|
||||
@@ -529,6 +523,8 @@ void AVI_OpenVideo( movie_state_t *Avi, const char *filename, qboolean load_audi
|
||||
return;
|
||||
}
|
||||
|
||||
byte *dst[4];
|
||||
int dst_linesize[4];
|
||||
if(( ret = pav_image_alloc( dst, dst_linesize, Avi->xres, Avi->yres, AV_PIX_FMT_BGR0, 1 )) < 0 )
|
||||
{
|
||||
AVI_SpewAvError( quiet, "av_image_alloc", ret );
|
||||
|
||||
@@ -61,16 +61,14 @@ Emulate audio-cd system
|
||||
*/
|
||||
void CL_PlayCDTrack_f( void )
|
||||
{
|
||||
const char *command;
|
||||
const char *pszTrack;
|
||||
static int track = 0;
|
||||
static qboolean paused = false;
|
||||
static qboolean looped = false;
|
||||
static qboolean enabled = true;
|
||||
|
||||
if( Cmd_Argc() < 2 ) return;
|
||||
command = Cmd_Argv( 1 );
|
||||
pszTrack = Cmd_Argv( 2 );
|
||||
const char *command = Cmd_Argv( 1 );
|
||||
const char *pszTrack = Cmd_Argv( 2 );
|
||||
|
||||
if( !enabled && Q_stricmp( command, "on" ))
|
||||
return; // CD-player is disabled
|
||||
@@ -238,9 +236,7 @@ static scrshot_t CL_GetScreenshotTypeFromString( const char *string )
|
||||
void CL_GenericShot_f( void )
|
||||
{
|
||||
const char *argv0 = Cmd_Argv( 0 );
|
||||
scrshot_t type;
|
||||
|
||||
type = CL_GetScreenshotTypeFromString( argv0 );
|
||||
scrshot_t type = CL_GetScreenshotTypeFromString( argv0 );
|
||||
|
||||
if( type == scrshot_normal || type == scrshot_snapshot )
|
||||
{
|
||||
@@ -272,7 +268,6 @@ void CL_GenericShot_f( void )
|
||||
case scrshot_snapshot:
|
||||
{
|
||||
string checkname;
|
||||
int i;
|
||||
|
||||
// allow overriding screenshot by users request
|
||||
if( Cmd_Argc() > 1 )
|
||||
@@ -284,7 +279,7 @@ void CL_GenericShot_f( void )
|
||||
if( type == scrshot_snapshot )
|
||||
FS_AllowDirectPaths( true );
|
||||
|
||||
for( i = 0; i < 9999; i++ )
|
||||
for( int i = 0; i < 9999; i++ )
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -383,17 +378,14 @@ CL_WavePlayLen_f
|
||||
*/
|
||||
void CL_WavePlayLen_f( void )
|
||||
{
|
||||
const char *name;
|
||||
uint msecs;
|
||||
|
||||
if( Cmd_Argc() != 2 )
|
||||
{
|
||||
Con_Printf( "waveplaylen <wave file name>: returns approximate number of milliseconds a wave file will take to play.\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
name = Cmd_Argv( 1 );
|
||||
msecs = Sound_GetApproxWavePlayLen( name );
|
||||
const char *name = Cmd_Argv( 1 );
|
||||
uint msecs = Sound_GetApproxWavePlayLen( name );
|
||||
|
||||
if( msecs == 0 )
|
||||
{
|
||||
|
||||
@@ -130,9 +130,7 @@ void CL_MoveToOnHandList( resource_t *pResource )
|
||||
|
||||
static void CL_ClearResourceList( resource_t *pList )
|
||||
{
|
||||
resource_t *p, *n;
|
||||
|
||||
for( p = pList->pNext; p != pList && p; p = n )
|
||||
for( resource_t *p = pList->pNext, *n; p != pList && p; p = n )
|
||||
{
|
||||
n = p->pNext;
|
||||
|
||||
|
||||
@@ -71,9 +71,7 @@ const char *CL_MsgInfo( int cmd )
|
||||
}
|
||||
else if( cmd > svc_lastmsg && cmd <= ( svc_lastmsg + MAX_USER_MESSAGES ))
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < MAX_USER_MESSAGES; i++ )
|
||||
for( int i = 0; i < MAX_USER_MESSAGES; i++ )
|
||||
{
|
||||
if( clgame.msg[i].number == cmd )
|
||||
{
|
||||
@@ -106,11 +104,9 @@ record new message params into debug buffer
|
||||
*/
|
||||
void CL_Parse_RecordCommand( int cmd, int startoffset )
|
||||
{
|
||||
int slot;
|
||||
|
||||
if( cmd == svc_nop ) return;
|
||||
|
||||
slot = ( cls_message_debug.currentcmd++ & MSG_MASK );
|
||||
int slot = ( cls_message_debug.currentcmd++ & MSG_MASK );
|
||||
cls_message_debug.oldcmd[slot].command = cmd;
|
||||
cls_message_debug.oldcmd[slot].starting_offset = startoffset;
|
||||
cls_message_debug.oldcmd[slot].frame_number = host.framecount;
|
||||
@@ -141,9 +137,7 @@ write net_message into buffer.dat for debugging
|
||||
static void CL_WriteErrorMessage( int current_count, sizebuf_t *msg )
|
||||
{
|
||||
const char *buffer_file = "buffer.dat";
|
||||
file_t *fp;
|
||||
|
||||
fp = FS_Open( buffer_file, "wb", false );
|
||||
file_t *fp = FS_Open( buffer_file, "wb", false );
|
||||
if( !fp )
|
||||
{
|
||||
Con_Printf( S_ERROR "%s: can't open %s for write\n", __func__, buffer_file );
|
||||
@@ -170,7 +164,7 @@ void CL_WriteMessageHistory( void )
|
||||
{
|
||||
oldcmd_t *old;
|
||||
sizebuf_t *msg = &net_message;
|
||||
int i, thecmd;
|
||||
int thecmd;
|
||||
|
||||
if( !cls.initialized || cls.state == ca_disconnected )
|
||||
return;
|
||||
@@ -184,7 +178,7 @@ void CL_WriteMessageHistory( void )
|
||||
thecmd = cls_message_debug.currentcmd - 1;
|
||||
thecmd -= ( MSG_COUNT - 1 ); // back up to here
|
||||
|
||||
for( i = 0; i < MSG_COUNT - 1; i++ )
|
||||
for( int i = 0; i < MSG_COUNT - 1; i++ )
|
||||
{
|
||||
thecmd &= MSG_MASK;
|
||||
old = &cls_message_debug.oldcmd[thecmd];
|
||||
|
||||
@@ -245,8 +245,6 @@ Writes the demo command header and time-delta
|
||||
*/
|
||||
static void CL_WriteDemoCmdHeader( byte cmd, file_t *file )
|
||||
{
|
||||
float dt;
|
||||
|
||||
Assert( cmd >= 1 && cmd <= dem_lastcmd );
|
||||
if( !file ) return;
|
||||
|
||||
@@ -254,7 +252,7 @@ static void CL_WriteDemoCmdHeader( byte cmd, file_t *file )
|
||||
FS_Write( file, &cmd, sizeof( byte ));
|
||||
|
||||
// time offset
|
||||
dt = (float)(CL_GetDemoRecordClock() - demo.starttime);
|
||||
float dt = (float)(CL_GetDemoRecordClock() - demo.starttime);
|
||||
FS_Write( file, &dt, sizeof( float ));
|
||||
}
|
||||
|
||||
@@ -395,11 +393,6 @@ Write demo header
|
||||
*/
|
||||
static void CL_WriteDemoHeader( const char *name )
|
||||
{
|
||||
double maxfps;
|
||||
int copysize;
|
||||
int savepos;
|
||||
int curpos;
|
||||
|
||||
Con_Printf( "recording to %s.\n", name );
|
||||
cls.demofile = FS_Open( name, "wb", false );
|
||||
cls.demotime = 0.0;
|
||||
@@ -413,7 +406,7 @@ static void CL_WriteDemoHeader( const char *name )
|
||||
cls.demorecording = true;
|
||||
cls.demowaiting = true; // don't start saving messages until a non-delta compressed message is received
|
||||
|
||||
maxfps = fps_override.value ? MAX_FPS_HARD : MAX_FPS_SOFT;
|
||||
double maxfps = fps_override.value ? MAX_FPS_HARD : MAX_FPS_SOFT;
|
||||
|
||||
memset( &demo.header, 0, sizeof( demo.header ));
|
||||
|
||||
@@ -442,6 +435,7 @@ static void CL_WriteDemoHeader( const char *name )
|
||||
FS_Flush( cls.demoheader );
|
||||
|
||||
// now copy the stuff we cached from the server.
|
||||
int copysize, savepos;
|
||||
copysize = savepos = FS_Tell( cls.demoheader );
|
||||
|
||||
FS_Seek( cls.demoheader, 0, SEEK_SET );
|
||||
@@ -458,7 +452,7 @@ static void CL_WriteDemoHeader( const char *name )
|
||||
cls.td_lastframe = -1; // get a new message this frame
|
||||
|
||||
// now move on to entry # 1, the first data chunk.
|
||||
curpos = FS_Tell( cls.demofile );
|
||||
int curpos = FS_Tell( cls.demofile );
|
||||
demo.entry->length = curpos - demo.entry->offset;
|
||||
|
||||
// now we are writing the first real lump.
|
||||
@@ -487,19 +481,15 @@ finish recording demo
|
||||
*/
|
||||
static void CL_StopRecord( void )
|
||||
{
|
||||
int i, curpos;
|
||||
float stoptime;
|
||||
int frames;
|
||||
|
||||
if( !cls.demorecording ) return;
|
||||
|
||||
// demo playback should read this as an incoming message.
|
||||
CL_WriteDemoCmdHeader( dem_stop, cls.demofile );
|
||||
|
||||
stoptime = CL_GetDemoRecordClock();
|
||||
float stoptime = CL_GetDemoRecordClock();
|
||||
if( clgame.hInstance ) clgame.dllFuncs.pfnReset();
|
||||
|
||||
curpos = FS_Tell( cls.demofile );
|
||||
int curpos = FS_Tell( cls.demofile );
|
||||
demo.entry->length = curpos - demo.entry->offset;
|
||||
demo.entry->playback_time = stoptime - demo.realstarttime;
|
||||
demo.entry->playback_frames = demo.framecount;
|
||||
@@ -507,7 +497,7 @@ static void CL_StopRecord( void )
|
||||
// Now write out the directory and free it and touch up the demo header.
|
||||
FS_Write( cls.demofile, &demo.directory.numentries, sizeof( int ));
|
||||
|
||||
for( i = 0; i < demo.directory.numentries; i++ )
|
||||
for( int i = 0; i < demo.directory.numentries; i++ )
|
||||
FS_Write( cls.demofile, &demo.directory.entries[i], sizeof( demoentry_t ));
|
||||
|
||||
Mem_Free( demo.directory.entries );
|
||||
@@ -525,7 +515,7 @@ static void CL_StopRecord( void )
|
||||
gameui.globals->demoname[0] = '\0';
|
||||
demo.header.host_fps = 0.0;
|
||||
|
||||
frames = cls.td_lastframe - cls.td_startframe;
|
||||
int frames = cls.td_lastframe - cls.td_startframe;
|
||||
Con_Printf( "Completed demo\nRecording time: %02d:%02d, frames %i\n", (int)(cls.demotime / 60.0f), (int)fmod(cls.demotime, 60.0f), frames );
|
||||
cls.demotime = 0.0;
|
||||
}
|
||||
@@ -539,13 +529,12 @@ void CL_DrawDemoRecording( void )
|
||||
{
|
||||
char string[64];
|
||||
rgba_t color = { 255, 255, 255, 255 };
|
||||
int pos;
|
||||
int len;
|
||||
|
||||
if(!( host_developer.value && cls.demorecording ))
|
||||
return;
|
||||
|
||||
pos = FS_Tell( cls.demofile );
|
||||
int pos = FS_Tell( cls.demofile );
|
||||
Q_snprintf( string, sizeof( string ), "^1RECORDING:^7 %s: %s time: %02d:%02d", cls.demoname,
|
||||
Q_memprint( pos ), (int)(cls.demotime / 60.0f ), (int)fmod( cls.demotime, 60.0f ));
|
||||
|
||||
@@ -847,7 +836,6 @@ static qboolean CL_DemoReadMessageQuake( byte *buffer, size_t *length )
|
||||
{
|
||||
vec3_t viewangles;
|
||||
int msglen = 0;
|
||||
demoangle_t *a;
|
||||
|
||||
*length = 0; // assume we fail
|
||||
|
||||
@@ -888,7 +876,7 @@ static qboolean CL_DemoReadMessageQuake( byte *buffer, size_t *length )
|
||||
{
|
||||
// select entry into circular buffer
|
||||
demo.angle_position = (demo.angle_position + 1) & ANGLE_MASK;
|
||||
a = &demo.cmds[demo.angle_position];
|
||||
demoangle_t *a = &demo.cmds[demo.angle_position];
|
||||
|
||||
// record update
|
||||
a->starttime = demo.timestamp;
|
||||
@@ -1060,8 +1048,7 @@ qboolean CL_DemoReadMessage( byte *buffer, size_t *length )
|
||||
|
||||
static void CL_DemoFindInterpolatedViewAngles( float t, float *frac, demoangle_t **prev, demoangle_t **next )
|
||||
{
|
||||
int i, i0, i1, imod;
|
||||
float at;
|
||||
int i0, i1, imod;
|
||||
|
||||
if( cls.timedemo ) return;
|
||||
|
||||
@@ -1071,9 +1058,9 @@ static void CL_DemoFindInterpolatedViewAngles( float t, float *frac, demoangle_t
|
||||
|
||||
if( demo.cmds[i0].starttime >= t )
|
||||
{
|
||||
for( i = 0; i < ANGLE_BACKUP - 2; i++ )
|
||||
for( int i = 0; i < ANGLE_BACKUP - 2; i++ )
|
||||
{
|
||||
at = demo.cmds[imod & ANGLE_MASK].starttime;
|
||||
float at = demo.cmds[imod & ANGLE_MASK].starttime;
|
||||
if( at == 0.0f ) break;
|
||||
|
||||
if( at < t )
|
||||
@@ -1114,7 +1101,6 @@ void CL_DemoInterpolateAngles( void )
|
||||
{
|
||||
demoangle_t *prev = NULL, *next = NULL;
|
||||
float frac = 0.0f;
|
||||
float curtime;
|
||||
|
||||
if( cls.demoplayback == DEMO_QUAKE1 )
|
||||
{
|
||||
@@ -1126,7 +1112,7 @@ void CL_DemoInterpolateAngles( void )
|
||||
}
|
||||
else
|
||||
{
|
||||
curtime = (CL_GetDemoPlaybackClock() - demo.starttime) - host.frametime;
|
||||
float curtime = (CL_GetDemoPlaybackClock() - demo.starttime) - host.frametime;
|
||||
if( curtime > demo.timestamp )
|
||||
curtime = demo.timestamp; // don't run too far
|
||||
|
||||
@@ -1239,7 +1225,6 @@ int GAME_EXPORT CL_GetDemoComment( const char *demoname, char *comment )
|
||||
demodirectory_t directory;
|
||||
demoentry_t entry;
|
||||
float playtime = 0.0f;
|
||||
int i;
|
||||
|
||||
if( !comment ) return false;
|
||||
|
||||
@@ -1279,7 +1264,7 @@ int GAME_EXPORT CL_GetDemoComment( const char *demoname, char *comment )
|
||||
return false;
|
||||
}
|
||||
|
||||
for( i = 0; i < directory.numentries; i++ )
|
||||
for( int i = 0; i < directory.numentries; i++ )
|
||||
{
|
||||
FS_Read( demfile, &entry, sizeof( demoentry_t ));
|
||||
playtime += entry.playback_time;
|
||||
@@ -1388,7 +1373,6 @@ void CL_Record_f( void )
|
||||
{
|
||||
string demoname, demopath;
|
||||
const char *name;
|
||||
int n;
|
||||
|
||||
if( Cmd_Argc() == 1 )
|
||||
{
|
||||
@@ -1425,6 +1409,7 @@ void CL_Record_f( void )
|
||||
if( !Q_stricmp( name, "new" ))
|
||||
{
|
||||
// scan for a free filename
|
||||
int n;
|
||||
for( n = 0; n < 10000; n++ )
|
||||
{
|
||||
CL_DemoGetName( n, demoname, sizeof( demoname ));
|
||||
@@ -1511,7 +1496,7 @@ void CL_PlayDemo_f( void )
|
||||
{
|
||||
char filename[MAX_QPATH];
|
||||
char demoname[MAX_QPATH];
|
||||
int i, ident;
|
||||
int ident;
|
||||
|
||||
if( Cmd_Argc() < 2 )
|
||||
{
|
||||
@@ -1584,7 +1569,7 @@ void CL_PlayDemo_f( void )
|
||||
// allocate demo entries
|
||||
demo.directory.entries = Mem_Malloc( cls.mempool, sizeof( *demo.directory.entries ) * demo.directory.numentries );
|
||||
|
||||
for( i = 0; i < demo.directory.numentries; i++ )
|
||||
for( int i = 0; i < demo.directory.numentries; i++ )
|
||||
{
|
||||
demoentry_t *entry = &demo.directory.entries[i];
|
||||
|
||||
@@ -1640,15 +1625,13 @@ CL_StartDemos_f
|
||||
*/
|
||||
void CL_StartDemos_f( void )
|
||||
{
|
||||
int i, c;
|
||||
|
||||
if( cls.key_dest != key_menu )
|
||||
{
|
||||
Con_Printf( "'startdemos' is not valid from the console\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
c = Cmd_Argc() - 1;
|
||||
int c = Cmd_Argc() - 1;
|
||||
if( c > MAX_DEMOS )
|
||||
{
|
||||
Con_DPrintf( S_WARN "%s: max %i demos in demoloop\n", __func__, MAX_DEMOS );
|
||||
@@ -1657,7 +1640,7 @@ void CL_StartDemos_f( void )
|
||||
|
||||
Con_Printf( "%i demo%s in loop\n", c, (c > 1) ? "s" : "" );
|
||||
|
||||
for( i = 1; i < c + 1; i++ )
|
||||
for( int i = 1; i < c + 1; i++ )
|
||||
Q_strncpy( cls.demos[i-1], Cmd_Argv( i ), sizeof( cls.demos[0] ));
|
||||
cls.demos_pending = true;
|
||||
}
|
||||
@@ -1717,7 +1700,6 @@ void CL_ListDemo_f( void )
|
||||
file_t *f;
|
||||
char filename[MAX_QPATH];
|
||||
char demoname[MAX_QPATH];
|
||||
int i;
|
||||
|
||||
if( Cmd_Argc() < 2 )
|
||||
{
|
||||
@@ -1751,7 +1733,7 @@ void CL_ListDemo_f( void )
|
||||
filename, hdr.net_protocol, hdr.dem_protocol, hdr.host_fps, hdr.mapname,
|
||||
hdr.comment, hdr.gamedir );
|
||||
|
||||
for( i = 0; i < num_entries; i++ )
|
||||
for( int i = 0; i < num_entries; i++ )
|
||||
{
|
||||
demoentry_t entry;
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ static efrag_t *cl_efrags;
|
||||
|
||||
static efrag_t *CL_AllocEfrags( int num )
|
||||
{
|
||||
int i;
|
||||
efrag_t *efrags;
|
||||
|
||||
if( !cl.worldmodel )
|
||||
@@ -55,7 +54,7 @@ static efrag_t *CL_AllocEfrags( int num )
|
||||
efrags = Mem_Calloc( cl.worldmodel->mempool, sizeof( *efrags ) * num );
|
||||
|
||||
// initialize linked list
|
||||
for( i = 0; i < num - 1; i++ )
|
||||
for( int i = 0; i < num - 1; i++ )
|
||||
efrags[i].entnext = &efrags[i + 1];
|
||||
|
||||
cl_efrags_num += num;
|
||||
@@ -81,8 +80,6 @@ R_SplitEntityOnNode
|
||||
*/
|
||||
static void R_SplitEntityOnNode( mnode_t *node )
|
||||
{
|
||||
efrag_t *ef;
|
||||
mleaf_t *leaf;
|
||||
int sides;
|
||||
|
||||
if( node->contents == CONTENTS_SOLID )
|
||||
@@ -91,6 +88,9 @@ static void R_SplitEntityOnNode( mnode_t *node )
|
||||
// add an efrag if the node is a leaf
|
||||
if( node->contents < 0 )
|
||||
{
|
||||
efrag_t *ef;
|
||||
mleaf_t *leaf;
|
||||
|
||||
if( !r_pefragtopnode )
|
||||
r_pefragtopnode = node;
|
||||
|
||||
@@ -142,7 +142,6 @@ void R_AddEfrags( cl_entity_t *ent )
|
||||
{
|
||||
matrix3x4 transform;
|
||||
vec3_t outmins, outmaxs;
|
||||
int i;
|
||||
|
||||
if( !ent->model )
|
||||
return;
|
||||
@@ -155,7 +154,7 @@ void R_AddEfrags( cl_entity_t *ent )
|
||||
Matrix3x4_CreateFromEntity( transform, ent->angles, vec3_origin, 1.0f );
|
||||
Matrix3x4_TransformAABB( transform, ent->model->mins, ent->model->maxs, outmins, outmaxs );
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
r_emins[i] = ent->origin[i] + outmins[i];
|
||||
r_emaxs[i] = ent->origin[i] + outmaxs[i];
|
||||
@@ -174,13 +173,11 @@ R_StoreEfrags
|
||||
void R_StoreEfrags( efrag_t **ppefrag, int framecount )
|
||||
{
|
||||
efrag_t *pefrag;
|
||||
cl_entity_t *pent;
|
||||
model_t *clmodel;
|
||||
|
||||
while(( pefrag = *ppefrag ) != NULL )
|
||||
{
|
||||
pent = pefrag->entity;
|
||||
clmodel = pent->model;
|
||||
cl_entity_t *pent = pefrag->entity;
|
||||
model_t *clmodel = pent->model;
|
||||
|
||||
// how this could happen?
|
||||
if( unlikely( clmodel->type < mod_brush || clmodel->type > mod_studio ))
|
||||
|
||||
@@ -44,21 +44,17 @@ find nearest color in particle palette
|
||||
*/
|
||||
short GAME_EXPORT R_LookupColor( byte r, byte g, byte b )
|
||||
{
|
||||
int i, best;
|
||||
float diff, bestdiff;
|
||||
float rf, gf, bf;
|
||||
float bestdiff = 999999;
|
||||
int best = -1;
|
||||
|
||||
bestdiff = 999999;
|
||||
best = -1;
|
||||
|
||||
for( i = 0; i < 256; i++ )
|
||||
for( int i = 0; i < 256; i++ )
|
||||
{
|
||||
rf = r - clgame.palette[i].r;
|
||||
gf = g - clgame.palette[i].g;
|
||||
bf = b - clgame.palette[i].b;
|
||||
float rf = r - clgame.palette[i].r;
|
||||
float gf = g - clgame.palette[i].g;
|
||||
float bf = b - clgame.palette[i].b;
|
||||
|
||||
// convert color to monochrome
|
||||
diff = rf * (rf * 0.2f) + gf * (gf * 0.5f) + bf * (bf * 0.3f);
|
||||
float diff = rf * (rf * 0.2f) + gf * (gf * 0.5f) + bf * (bf * 0.3f);
|
||||
|
||||
if ( diff < bestdiff )
|
||||
{
|
||||
@@ -90,13 +86,11 @@ CL_InitParticles
|
||||
*/
|
||||
void CL_InitParticles( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
cl_particles = Mem_Calloc( cls.mempool, sizeof( particle_t ) * GI->max_particles );
|
||||
CL_ClearParticles ();
|
||||
|
||||
// this is used for EF_BRIGHTFIELD
|
||||
for( i = 0; i < NUMVERTEXNORMALS; i++ )
|
||||
for( int i = 0; i < NUMVERTEXNORMALS; i++ )
|
||||
{
|
||||
cl_avelocities[i][0] = COM_RandomFloat( 0.0f, 2.55f );
|
||||
cl_avelocities[i][1] = COM_RandomFloat( 0.0f, 2.55f );
|
||||
@@ -116,15 +110,13 @@ CL_ClearParticles
|
||||
*/
|
||||
void CL_ClearParticles( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !cl_particles ) return;
|
||||
|
||||
cl_free_particles = cl_particles;
|
||||
cl_active_particles = NULL;
|
||||
cl_active_tracers = NULL;
|
||||
|
||||
for( i = 0; i < GI->max_particles - 1; i++ )
|
||||
for( int i = 0; i < GI->max_particles - 1; i++ )
|
||||
cl_particles[i].next = &cl_particles[i+1];
|
||||
|
||||
cl_particles[GI->max_particles-1].next = NULL;
|
||||
@@ -357,15 +349,13 @@ CL_ClearViewBeams
|
||||
*/
|
||||
void CL_ClearViewBeams( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !cl_viewbeams ) return;
|
||||
|
||||
// clear beams
|
||||
cl_free_beams = cl_viewbeams;
|
||||
cl_active_beams = NULL;
|
||||
|
||||
for( i = 0; i < GI->max_beams - 1; i++ )
|
||||
for( int i = 0; i < GI->max_beams - 1; i++ )
|
||||
cl_viewbeams[i].next = &cl_viewbeams[i+1];
|
||||
cl_viewbeams[GI->max_beams - 1].next = NULL;
|
||||
}
|
||||
@@ -470,16 +460,13 @@ Optimized version of pointfile - use beams instead of particles
|
||||
*/
|
||||
void CL_ReadLineFile_f( void )
|
||||
{
|
||||
byte *afile;
|
||||
char *pfile;
|
||||
vec3_t p1, p2;
|
||||
int count, modelIndex;
|
||||
int modelIndex;
|
||||
char filename[MAX_QPATH];
|
||||
model_t *model;
|
||||
string token;
|
||||
|
||||
Q_snprintf( filename, sizeof( filename ), "maps/%s.lin", clgame.mapname );
|
||||
afile = FS_LoadFile( filename, NULL, false );
|
||||
byte *afile = FS_LoadFile( filename, NULL, false );
|
||||
|
||||
if( !afile )
|
||||
{
|
||||
@@ -489,9 +476,9 @@ void CL_ReadLineFile_f( void )
|
||||
|
||||
Con_Printf( "Reading %s...\n", filename );
|
||||
|
||||
count = 0;
|
||||
pfile = (char *)afile;
|
||||
model = CL_LoadModel( DEFAULT_LASERBEAM_PATH, &modelIndex );
|
||||
int count = 0;
|
||||
char *pfile = (char *)afile;
|
||||
model_t *model = CL_LoadModel( DEFAULT_LASERBEAM_PATH, &modelIndex );
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
@@ -1063,24 +1050,20 @@ set EF_BRIGHTFIELD effect
|
||||
*/
|
||||
void GAME_EXPORT R_EntityParticles( cl_entity_t *ent )
|
||||
{
|
||||
float angle;
|
||||
float sr, sp, sy, cr, cp, cy;
|
||||
vec3_t forward;
|
||||
particle_t *p;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < NUMVERTEXNORMALS; i++ )
|
||||
for( int i = 0; i < NUMVERTEXNORMALS; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
angle = cl.time * cl_avelocities[i][0];
|
||||
float sr, sp, sy, cr, cp, cy;
|
||||
float angle = cl.time * cl_avelocities[i][0];
|
||||
SinCos( angle, &sy, &cy );
|
||||
angle = cl.time * cl_avelocities[i][1];
|
||||
SinCos( angle, &sp, &cp );
|
||||
angle = cl.time * cl_avelocities[i][2];
|
||||
SinCos( angle, &sr, &cr );
|
||||
|
||||
vec3_t forward;
|
||||
VectorSet( forward, cp * cy, cp * sy, -sp );
|
||||
|
||||
p->die = cl.time + 0.001f;
|
||||
@@ -1098,19 +1081,16 @@ R_ParticleExplosion
|
||||
*/
|
||||
void GAME_EXPORT R_ParticleExplosion( const vec3_t org )
|
||||
{
|
||||
particle_t *p;
|
||||
int i, j;
|
||||
|
||||
for( i = 0; i < 1024; i++ )
|
||||
for( int i = 0; i < 1024; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + 5.0f;
|
||||
p->ramp = COM_RandomLong( 0, 3 );
|
||||
p->color = ramp1[0];
|
||||
|
||||
for( j = 0; j < 3; j++ )
|
||||
for( int j = 0; j < 3; j++ )
|
||||
{
|
||||
p->org[j] = org[j] + COM_RandomFloat( -16.0f, 16.0f );
|
||||
p->vel[j] = COM_RandomFloat( -256.0f, 256.0f );
|
||||
@@ -1129,15 +1109,12 @@ R_ParticleExplosion2
|
||||
*/
|
||||
void GAME_EXPORT R_ParticleExplosion2( const vec3_t org, int colorStart, int colorLength )
|
||||
{
|
||||
int i, j;
|
||||
int colorMod = 0, packedColor;
|
||||
particle_t *p;
|
||||
int colorMod = 0;
|
||||
int packedColor = Host_IsQuakeCompatible( ) ? 255 : 0; // use old code for blob particles
|
||||
|
||||
packedColor = Host_IsQuakeCompatible( ) ? 255 : 0; // use old code for blob particles
|
||||
|
||||
for( i = 0; i < 512; i++ )
|
||||
for( int i = 0; i < 512; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + 0.3f;
|
||||
@@ -1147,7 +1124,7 @@ void GAME_EXPORT R_ParticleExplosion2( const vec3_t org, int colorStart, int col
|
||||
|
||||
p->type = pt_blob;
|
||||
|
||||
for( j = 0; j < 3; j++ )
|
||||
for( int j = 0; j < 3; j++ )
|
||||
{
|
||||
p->org[j] = org[j] + COM_RandomFloat( -16.0f, 16.0f );
|
||||
p->vel[j] = COM_RandomFloat( -256.0f, 256.0f );
|
||||
@@ -1163,14 +1140,11 @@ R_BlobExplosion
|
||||
*/
|
||||
void GAME_EXPORT R_BlobExplosion( const vec3_t org )
|
||||
{
|
||||
particle_t *p;
|
||||
int i, j, packedColor;
|
||||
int packedColor = Host_IsQuakeCompatible( ) ? 255 : 0; // use old code for blob particles
|
||||
|
||||
packedColor = Host_IsQuakeCompatible( ) ? 255 : 0; // use old code for blob particles
|
||||
|
||||
for( i = 0; i < 1024; i++ )
|
||||
for( int i = 0; i < 1024; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + COM_RandomFloat( 1.0f, 1.4f );
|
||||
@@ -1187,7 +1161,7 @@ void GAME_EXPORT R_BlobExplosion( const vec3_t org )
|
||||
p->color = COM_RandomLong( 150, 155 );
|
||||
}
|
||||
|
||||
for( j = 0; j < 3; j++ )
|
||||
for( int j = 0; j < 3; j++ )
|
||||
{
|
||||
p->org[j] = org[j] + COM_RandomFloat( -16.0f, 16.0f );
|
||||
p->vel[j] = COM_RandomFloat( -256.0f, 256.0f );
|
||||
@@ -1204,9 +1178,6 @@ PARTICLE_EFFECT on server
|
||||
*/
|
||||
void GAME_EXPORT R_RunParticleEffect( const vec3_t org, const vec3_t dir, int color, int count )
|
||||
{
|
||||
particle_t *p;
|
||||
int i;
|
||||
|
||||
if( count == 1024 )
|
||||
{
|
||||
// rocket explosion
|
||||
@@ -1214,9 +1185,9 @@ void GAME_EXPORT R_RunParticleEffect( const vec3_t org, const vec3_t dir, int co
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->color = (color & ~7) + COM_RandomLong( 0, 7 );
|
||||
@@ -1238,20 +1209,18 @@ particle spray
|
||||
void GAME_EXPORT R_Blood( const vec3_t org, const vec3_t ndir, int pcolor, int speed )
|
||||
{
|
||||
vec3_t pos, dir, vec;
|
||||
int i, j;
|
||||
int pspeed = speed * 3;
|
||||
particle_t *p;
|
||||
|
||||
VectorNormalize2( ndir, dir );
|
||||
|
||||
for( i = 0; i < (speed / 2); i++ )
|
||||
for( int i = 0; i < (speed / 2); i++ )
|
||||
{
|
||||
VectorAddScalar( org, COM_RandomFloat( -3.0f, 3.0f ), pos );
|
||||
VectorAddScalar( dir, COM_RandomFloat( -0.06f, 0.06f ), vec );
|
||||
|
||||
for( j = 0; j < 8; j++ )
|
||||
for( int j = 0; j < 8; j++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + 1.5f;
|
||||
@@ -1275,17 +1244,15 @@ particle spray 2
|
||||
*/
|
||||
void GAME_EXPORT R_BloodStream( const vec3_t org, const vec3_t ndir, int pcolor, int speed )
|
||||
{
|
||||
particle_t *p;
|
||||
int i, j;
|
||||
float arc;
|
||||
int accel = speed; // must be integer due to bug in GoldSrc
|
||||
vec3_t dir;
|
||||
|
||||
VectorNormalize2( ndir, dir );
|
||||
|
||||
for( arc = 0.05f, i = 0; i < 100; i++ )
|
||||
float arc = 0.05f;
|
||||
for( int i = 0; i < 100; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + 2.0f;
|
||||
@@ -1301,11 +1268,10 @@ void GAME_EXPORT R_BloodStream( const vec3_t org, const vec3_t ndir, int pcolor,
|
||||
accel -= 0.00001f; // so last few will drip
|
||||
}
|
||||
|
||||
for( arc = 0.075f, i = 0; i < ( speed / 5 ); i++ )
|
||||
arc = 0.075f;
|
||||
for( int i = 0; i < ( speed / 5 ); i++ )
|
||||
{
|
||||
float num;
|
||||
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + 3.0f;
|
||||
@@ -1318,14 +1284,14 @@ void GAME_EXPORT R_BloodStream( const vec3_t org, const vec3_t ndir, int pcolor,
|
||||
p->vel[2] -= arc;
|
||||
arc -= 0.005f;
|
||||
|
||||
num = COM_RandomFloat( 0.0f, 1.0f );
|
||||
float num = COM_RandomFloat( 0.0f, 1.0f );
|
||||
accel = speed * num;
|
||||
num *= 1.7f;
|
||||
|
||||
VectorScale( p->vel, num, p->vel );
|
||||
VectorScale( p->vel, accel, p->vel );
|
||||
|
||||
for( j = 0; j < 2; j++ )
|
||||
for( int j = 0; j < 2; j++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
@@ -1352,18 +1318,15 @@ R_LavaSplash
|
||||
*/
|
||||
void GAME_EXPORT R_LavaSplash( const vec3_t org )
|
||||
{
|
||||
particle_t *p;
|
||||
float vel;
|
||||
vec3_t dir;
|
||||
int i, j, k;
|
||||
|
||||
for( i = -16; i < 16; i++ )
|
||||
for( int i = -16; i < 16; i++ )
|
||||
{
|
||||
for( j = -16; j <16; j++ )
|
||||
for( int j = -16; j <16; j++ )
|
||||
{
|
||||
for( k = 0; k < 1; k++ )
|
||||
for( int k = 0; k < 1; k++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + COM_RandomFloat( 2.0f, 2.62f );
|
||||
@@ -1379,7 +1342,7 @@ void GAME_EXPORT R_LavaSplash( const vec3_t org )
|
||||
p->org[2] = org[2] + COM_RandomFloat( 0.0f, 63.0f );
|
||||
|
||||
VectorNormalize( dir );
|
||||
vel = COM_RandomFloat( 50.0f, 113.0f );
|
||||
float vel = COM_RandomFloat( 50.0f, 113.0f );
|
||||
VectorScale( dir, vel, p->vel );
|
||||
}
|
||||
}
|
||||
@@ -1394,16 +1357,13 @@ R_ParticleBurst
|
||||
*/
|
||||
void GAME_EXPORT R_ParticleBurst( const vec3_t org, int size, int color, float life )
|
||||
{
|
||||
particle_t *p;
|
||||
vec3_t dir, dest;
|
||||
int i, j;
|
||||
float dist;
|
||||
|
||||
for( i = 0; i < 32; i++ )
|
||||
for( int i = 0; i < 32; i++ )
|
||||
{
|
||||
for( j = 0; j < 32; j++ )
|
||||
for( int j = 0; j < 32; j++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + life + COM_RandomFloat( -0.5f, 0.5f );
|
||||
@@ -1413,7 +1373,7 @@ void GAME_EXPORT R_ParticleBurst( const vec3_t org, int size, int color, float l
|
||||
VectorCopy( org, p->org );
|
||||
VectorAddScalar( org, COM_RandomFloat( -size, size ), dest );
|
||||
VectorSubtract( dest, p->org, dir );
|
||||
dist = VectorNormalizeLength( dir );
|
||||
float dist = VectorNormalizeLength( dir );
|
||||
VectorScale( dir, ( dist / life ), p->vel );
|
||||
}
|
||||
}
|
||||
@@ -1427,16 +1387,13 @@ R_LargeFunnel
|
||||
*/
|
||||
void GAME_EXPORT R_LargeFunnel( const vec3_t org, int reverse )
|
||||
{
|
||||
particle_t *p;
|
||||
float vel, dist;
|
||||
vec3_t dir, dest;
|
||||
int i, j;
|
||||
|
||||
for( i = -8; i < 8; i++ )
|
||||
for( int i = -8; i < 8; i++ )
|
||||
{
|
||||
for( j = -8; j < 8; j++ )
|
||||
for( int j = -8; j < 8; j++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
dest[0] = (i * 32.0f) + org[0];
|
||||
@@ -1454,10 +1411,10 @@ void GAME_EXPORT R_LargeFunnel( const vec3_t org, int reverse )
|
||||
VectorSubtract( org, p->org, dir );
|
||||
}
|
||||
|
||||
vel = dest[2] / 8.0f;
|
||||
float vel = dest[2] / 8.0f;
|
||||
if( vel < 64.0f ) vel = 64.0f;
|
||||
|
||||
dist = VectorNormalizeLength( dir );
|
||||
float dist = VectorNormalizeLength( dir );
|
||||
vel += COM_RandomFloat( 64.0f, 128.0f );
|
||||
VectorScale( dir, vel, p->vel );
|
||||
p->die = cl.time + (dist / vel );
|
||||
@@ -1474,18 +1431,15 @@ R_TeleportSplash
|
||||
*/
|
||||
void GAME_EXPORT R_TeleportSplash( const vec3_t org )
|
||||
{
|
||||
particle_t *p;
|
||||
vec3_t dir;
|
||||
float vel;
|
||||
int i, j, k;
|
||||
|
||||
for( i = -16; i < 16; i += 4 )
|
||||
for( int i = -16; i < 16; i += 4 )
|
||||
{
|
||||
for( j = -16; j < 16; j += 4 )
|
||||
for( int j = -16; j < 16; j += 4 )
|
||||
{
|
||||
for( k = -24; k < 32; k += 4 )
|
||||
for( int k = -24; k < 32; k += 4 )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + COM_RandomFloat( 0.2f, 0.34f );
|
||||
@@ -1501,7 +1455,7 @@ void GAME_EXPORT R_TeleportSplash( const vec3_t org )
|
||||
p->org[2] = org[2] + k + COM_RandomFloat( 0.0f, 3.0f );
|
||||
|
||||
VectorNormalize( dir );
|
||||
vel = COM_RandomFloat( 50.0f, 113.0f );
|
||||
float vel = COM_RandomFloat( 50.0f, 113.0f );
|
||||
VectorScale( dir, vel, p->vel );
|
||||
}
|
||||
}
|
||||
@@ -1638,13 +1592,12 @@ draw line from particles
|
||||
*/
|
||||
static void PM_ParticleLine( const vec3_t start, const vec3_t end, int pcolor, float life, float zvel )
|
||||
{
|
||||
float len, curdist;
|
||||
vec3_t diff, pos;
|
||||
|
||||
// determine distance
|
||||
VectorSubtract( end, start, diff );
|
||||
len = VectorNormalizeLength( diff );
|
||||
curdist = 0;
|
||||
float len = VectorNormalizeLength( diff );
|
||||
float curdist = 0;
|
||||
|
||||
while( curdist <= len )
|
||||
{
|
||||
@@ -1678,9 +1631,8 @@ static void PM_DrawBBox( const vec3_t mins, const vec3_t maxs, const vec3_t orig
|
||||
{
|
||||
vec3_t p[8], tmp;
|
||||
float gap = BOX_GAP;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < 8; i++ )
|
||||
for( int i = 0; i < 8; i++ )
|
||||
{
|
||||
tmp[0] = (i & 1) ? mins[0] - gap : maxs[0] + gap;
|
||||
tmp[1] = (i & 2) ? mins[1] - gap : maxs[1] + gap ;
|
||||
@@ -1690,7 +1642,7 @@ static void PM_DrawBBox( const vec3_t mins, const vec3_t maxs, const vec3_t orig
|
||||
VectorCopy( tmp, p[i] );
|
||||
}
|
||||
|
||||
for( i = 0; i < 6; i++ )
|
||||
for( int i = 0; i < 6; i++ )
|
||||
{
|
||||
PM_DrawRectangle( p[boxpnt[i][1]], p[boxpnt[i][0]], p[boxpnt[i][2]], p[boxpnt[i][3]], pcolor, life );
|
||||
}
|
||||
@@ -1704,9 +1656,7 @@ R_ParticleLine
|
||||
*/
|
||||
void GAME_EXPORT R_ParticleLine( const vec3_t start, const vec3_t end, byte r, byte g, byte b, float life )
|
||||
{
|
||||
int pcolor;
|
||||
|
||||
pcolor = R_LookupColor( r, g, b );
|
||||
int pcolor = R_LookupColor( r, g, b );
|
||||
PM_ParticleLine( start, end, pcolor, life, 0 );
|
||||
}
|
||||
|
||||
@@ -1720,9 +1670,8 @@ void GAME_EXPORT R_ParticleBox( const vec3_t absmin, const vec3_t absmax, byte r
|
||||
{
|
||||
vec3_t mins, maxs;
|
||||
vec3_t origin;
|
||||
int pcolor;
|
||||
|
||||
pcolor = R_LookupColor( r, g, b );
|
||||
int pcolor = R_LookupColor( r, g, b );
|
||||
|
||||
VectorAverage( absmax, absmin, origin );
|
||||
VectorSubtract( absmax, origin, maxs );
|
||||
@@ -1740,11 +1689,9 @@ R_ShowLine
|
||||
void GAME_EXPORT R_ShowLine( const vec3_t start, const vec3_t end )
|
||||
{
|
||||
vec3_t dir, org;
|
||||
float len;
|
||||
particle_t *p;
|
||||
|
||||
VectorSubtract( end, start, dir );
|
||||
len = VectorNormalizeLength( dir );
|
||||
float len = VectorNormalizeLength( dir );
|
||||
VectorScale( dir, 5.0f, dir );
|
||||
VectorCopy( start, org );
|
||||
|
||||
@@ -1752,7 +1699,7 @@ void GAME_EXPORT R_ShowLine( const vec3_t start, const vec3_t end )
|
||||
{
|
||||
len -= 5.0f;
|
||||
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die = cl.time + 30;
|
||||
@@ -1771,25 +1718,21 @@ R_BulletImpactParticles
|
||||
*/
|
||||
void GAME_EXPORT R_BulletImpactParticles( const vec3_t pos )
|
||||
{
|
||||
int i, quantity;
|
||||
int color;
|
||||
float dist;
|
||||
vec3_t dir;
|
||||
particle_t *p;
|
||||
|
||||
VectorSubtract( pos, refState.vieworg, dir );
|
||||
dist = VectorLength( dir );
|
||||
float dist = VectorLength( dir );
|
||||
if( dist > 1000.0f ) dist = 1000.0f;
|
||||
|
||||
quantity = (1000.0f - dist) / 100.0f;
|
||||
int quantity = (1000.0f - dist) / 100.0f;
|
||||
if( quantity == 0 ) quantity = 1;
|
||||
|
||||
color = 3 - ((30 * quantity) / 100 );
|
||||
int color = 3 - ((30 * quantity) / 100 );
|
||||
R_SparkStreaks( pos, 2, -200, 200 );
|
||||
|
||||
for( i = 0; i < quantity * 4; i++ )
|
||||
for( int i = 0; i < quantity * 4; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
VectorCopy( pos, p->org);
|
||||
@@ -1813,12 +1756,9 @@ R_FlickerParticles
|
||||
*/
|
||||
void GAME_EXPORT R_FlickerParticles( const vec3_t org )
|
||||
{
|
||||
particle_t *p;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < 15; i++ )
|
||||
for( int i = 0; i < 15; i++ )
|
||||
{
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
VectorCopy( org, p->org );
|
||||
@@ -1842,15 +1782,13 @@ create a splash of streaks
|
||||
void GAME_EXPORT R_StreakSplash( const vec3_t pos, const vec3_t dir, int color, int count, float speed, int velocityMin, int velocityMax )
|
||||
{
|
||||
vec3_t vel, vel2;
|
||||
particle_t *p;
|
||||
int i;
|
||||
|
||||
VectorScale( dir, speed, vel );
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
VectorAddScalar( vel, COM_RandomFloat( velocityMin, velocityMax ), vel2 );
|
||||
p = R_AllocTracer( pos, vel2, COM_RandomFloat( 0.1f, 0.5f ));
|
||||
particle_t *p = R_AllocTracer( pos, vel2, COM_RandomFloat( 0.1f, 0.5f ));
|
||||
if( !p ) return;
|
||||
|
||||
p->type = pt_grav;
|
||||
@@ -1868,9 +1806,7 @@ pmove debugging particle
|
||||
*/
|
||||
void CL_Particle( const vec3_t org, int color, float life, int zpos, int zvel )
|
||||
{
|
||||
particle_t *p;
|
||||
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
if( org ) VectorCopy( org, p->org );
|
||||
@@ -1888,17 +1824,15 @@ R_TracerEffect
|
||||
void GAME_EXPORT R_TracerEffect( const vec3_t start, const vec3_t end )
|
||||
{
|
||||
vec3_t pos, vel, dir;
|
||||
float len, speed;
|
||||
float offset;
|
||||
|
||||
speed = Q_max( tracerspeed.value, 3.0f );
|
||||
float speed = Q_max( tracerspeed.value, 3.0f );
|
||||
|
||||
VectorSubtract( end, start, dir );
|
||||
len = VectorLength( dir );
|
||||
float len = VectorLength( dir );
|
||||
if( len == 0.0f ) return;
|
||||
|
||||
VectorScale( dir, 1.0f / len, dir ); // normalize
|
||||
offset = COM_RandomFloat( -10.0f, 9.0f ) + traceroffset.value;
|
||||
float offset = COM_RandomFloat( -10.0f, 9.0f ) + traceroffset.value;
|
||||
VectorScale( dir, offset, vel );
|
||||
VectorAdd( start, vel, pos );
|
||||
VectorScale( dir, speed, vel );
|
||||
@@ -1949,17 +1883,15 @@ create a streak tracers
|
||||
*/
|
||||
void GAME_EXPORT R_SparkStreaks( const vec3_t pos, int count, int velocityMin, int velocityMax )
|
||||
{
|
||||
particle_t *p;
|
||||
vec3_t vel;
|
||||
int i;
|
||||
|
||||
for( i = 0; i<count; i++ )
|
||||
for( int i = 0; i<count; i++ )
|
||||
{
|
||||
vel[0] = COM_RandomFloat( velocityMin, velocityMax );
|
||||
vel[1] = COM_RandomFloat( velocityMin, velocityMax );
|
||||
vel[2] = COM_RandomFloat( velocityMin, velocityMax );
|
||||
|
||||
p = R_AllocTracer( pos, vel, COM_RandomFloat( 0.1f, 0.5f ));
|
||||
particle_t *p = R_AllocTracer( pos, vel, COM_RandomFloat( 0.1f, 0.5f ));
|
||||
if( !p ) return;
|
||||
|
||||
p->color = 5;
|
||||
@@ -1979,14 +1911,11 @@ void GAME_EXPORT R_Implosion( const vec3_t end, float radius, int count, float l
|
||||
{
|
||||
float dist = ( radius / 100.0f );
|
||||
vec3_t start, temp, vel;
|
||||
float factor;
|
||||
particle_t *p;
|
||||
int i;
|
||||
|
||||
if( life <= 0.0f ) life = 0.1f; // to avoid divide by zero
|
||||
factor = -1.0 / life;
|
||||
float factor = -1.0 / life;
|
||||
|
||||
for ( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
temp[0] = dist * COM_RandomFloat( -100.0f, 100.0f );
|
||||
temp[1] = dist * COM_RandomFloat( -100.0f, 100.0f );
|
||||
@@ -1994,7 +1923,8 @@ void GAME_EXPORT R_Implosion( const vec3_t end, float radius, int count, float l
|
||||
VectorScale( temp, factor, vel );
|
||||
VectorAdd( temp, end, start );
|
||||
|
||||
if(( p = R_AllocTracer( start, vel, life )) == NULL )
|
||||
particle_t *p = R_AllocTracer( start, vel, life );
|
||||
if( p == NULL )
|
||||
return;
|
||||
|
||||
p->type = pt_explode;
|
||||
@@ -2059,16 +1989,12 @@ CL_ReadPointFile_f
|
||||
*/
|
||||
void CL_ReadPointFile_f( void )
|
||||
{
|
||||
byte *afile;
|
||||
char *pfile;
|
||||
vec3_t org;
|
||||
int count;
|
||||
particle_t *p;
|
||||
char filename[64];
|
||||
string token;
|
||||
|
||||
Q_snprintf( filename, sizeof( filename ), "maps/%s.pts", clgame.mapname );
|
||||
afile = FS_LoadFile( filename, NULL, false );
|
||||
byte *afile = FS_LoadFile( filename, NULL, false );
|
||||
|
||||
if( !afile )
|
||||
{
|
||||
@@ -2078,8 +2004,8 @@ void CL_ReadPointFile_f( void )
|
||||
|
||||
Con_Printf( "Reading %s...\n", filename );
|
||||
|
||||
count = 0;
|
||||
pfile = (char *)afile;
|
||||
int count = 0;
|
||||
char *pfile = (char *)afile;
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
@@ -2105,7 +2031,7 @@ void CL_ReadPointFile_f( void )
|
||||
|
||||
// NOTE: can't use R_AllocParticle because this command
|
||||
// may be executed from the console, while frametime is 0
|
||||
p = cl_free_particles;
|
||||
particle_t *p = cl_free_particles;
|
||||
cl_free_particles = p->next;
|
||||
p->next = cl_active_particles;
|
||||
cl_active_particles = p;
|
||||
|
||||
@@ -42,10 +42,6 @@ compute velocity for a given client
|
||||
*/
|
||||
static void CL_CalcPlayerVelocity( int idx, vec3_t velocity )
|
||||
{
|
||||
clientdata_t *pcd;
|
||||
vec3_t delta;
|
||||
double dt;
|
||||
|
||||
VectorClear( velocity );
|
||||
|
||||
if( idx <= 0 || idx > cl.maxclients )
|
||||
@@ -53,15 +49,16 @@ static void CL_CalcPlayerVelocity( int idx, vec3_t velocity )
|
||||
|
||||
if( idx == cl.playernum + 1 )
|
||||
{
|
||||
pcd = &cl.frames[cl.parsecountmod].clientdata;
|
||||
clientdata_t *pcd = &cl.frames[cl.parsecountmod].clientdata;
|
||||
VectorCopy( pcd->velocity, velocity );
|
||||
}
|
||||
else
|
||||
{
|
||||
dt = clgame.entities[idx].curstate.animtime - clgame.entities[idx].prevstate.animtime;
|
||||
double dt = clgame.entities[idx].curstate.animtime - clgame.entities[idx].prevstate.animtime;
|
||||
|
||||
if( dt != 0.0 )
|
||||
{
|
||||
vec3_t delta;
|
||||
VectorSubtract( clgame.entities[idx].curstate.velocity, clgame.entities[idx].prevstate.velocity, delta );
|
||||
VectorScale( delta, 1.0f / dt, velocity );
|
||||
}
|
||||
@@ -130,16 +127,13 @@ CL_SetEventIndex
|
||||
*/
|
||||
void CL_SetEventIndex( const char *szEvName, int ev_index )
|
||||
{
|
||||
cl_user_event_t *ev;
|
||||
int i;
|
||||
|
||||
if( !szEvName || !*szEvName )
|
||||
return; // ignore blank names
|
||||
|
||||
// search event by name to link with
|
||||
for( i = 0; i < MAX_EVENTS; i++ )
|
||||
for( int i = 0; i < MAX_EVENTS; i++ )
|
||||
{
|
||||
ev = clgame.events[i];
|
||||
cl_user_event_t *ev = clgame.events[i];
|
||||
if( !ev ) break;
|
||||
|
||||
if( !Q_stricmp( ev->name, szEvName ))
|
||||
@@ -158,12 +152,10 @@ CL_EventIndex
|
||||
*/
|
||||
word CL_EventIndex( const char *name )
|
||||
{
|
||||
word i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( name ))
|
||||
return 0;
|
||||
|
||||
for( i = 1; i < MAX_EVENTS && cl.event_precache[i][0]; i++ )
|
||||
for( word i = 1; i < MAX_EVENTS && cl.event_precache[i][0]; i++ )
|
||||
{
|
||||
if( !Q_stricmp( cl.event_precache[i], name ))
|
||||
return i;
|
||||
@@ -204,28 +196,24 @@ CL_FireEvent
|
||||
*/
|
||||
static qboolean CL_FireEvent( event_info_t *ei, int slot )
|
||||
{
|
||||
cl_user_event_t *ev;
|
||||
const char *name;
|
||||
int i, idx;
|
||||
|
||||
if( !ei || !ei->index )
|
||||
return false;
|
||||
|
||||
// get the func pointer
|
||||
for( i = 0; i < MAX_EVENTS; i++ )
|
||||
for( int i = 0; i < MAX_EVENTS; i++ )
|
||||
{
|
||||
ev = clgame.events[i];
|
||||
cl_user_event_t *ev = clgame.events[i];
|
||||
|
||||
if( !ev )
|
||||
{
|
||||
idx = bound( 1, ei->index, ( MAX_EVENTS - 1 ));
|
||||
int idx = bound( 1, ei->index, ( MAX_EVENTS - 1 ));
|
||||
Con_Reportf( S_ERROR "%s: %s not precached\n", __func__, cl.event_precache[idx] );
|
||||
break;
|
||||
}
|
||||
|
||||
if( ev->index == ei->index )
|
||||
{
|
||||
name = cl.event_precache[ei->index];
|
||||
const char *name = cl.event_precache[ei->index];
|
||||
|
||||
if( cl_trace_events.value )
|
||||
{
|
||||
@@ -261,15 +249,11 @@ called right before draw frame
|
||||
*/
|
||||
void CL_FireEvents( void )
|
||||
{
|
||||
event_state_t *es;
|
||||
event_info_t *ei;
|
||||
int i;
|
||||
event_state_t *es = &cl.events;
|
||||
|
||||
es = &cl.events;
|
||||
|
||||
for( i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
for( int i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
{
|
||||
ei = &es->ei[i];
|
||||
event_info_t *ei = &es->ei[i];
|
||||
|
||||
if( ei->index == 0 )
|
||||
continue;
|
||||
@@ -294,16 +278,12 @@ find first empty event
|
||||
*/
|
||||
static event_info_t *CL_FindEmptyEvent( void )
|
||||
{
|
||||
int i;
|
||||
event_state_t *es;
|
||||
event_info_t *ei;
|
||||
|
||||
es = &cl.events;
|
||||
event_state_t *es = &cl.events;
|
||||
|
||||
// look for first slot where index is != 0
|
||||
for( i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
for( int i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
{
|
||||
ei = &es->ei[i];
|
||||
event_info_t *ei = &es->ei[i];
|
||||
if( ei->index != 0 )
|
||||
continue;
|
||||
return ei;
|
||||
@@ -322,15 +302,11 @@ replace only unreliable events
|
||||
*/
|
||||
static event_info_t *CL_FindUnreliableEvent( void )
|
||||
{
|
||||
event_state_t *es;
|
||||
event_info_t *ei;
|
||||
int i;
|
||||
event_state_t *es = &cl.events;
|
||||
|
||||
es = &cl.events;
|
||||
|
||||
for ( i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
for ( int i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
{
|
||||
ei = &es->ei[i];
|
||||
event_info_t *ei = &es->ei[i];
|
||||
if( ei->index != 0 )
|
||||
{
|
||||
// it's reliable, so skip it
|
||||
@@ -423,16 +399,10 @@ CL_ParseEvent
|
||||
*/
|
||||
void CL_ParseEvent( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
int event_index;
|
||||
int i, num_events;
|
||||
int packet_index;
|
||||
const event_args_t nullargs = { 0 };
|
||||
event_args_t args = { 0 };
|
||||
entity_state_t *state;
|
||||
float delay;
|
||||
int entity_bits;
|
||||
|
||||
num_events = MSG_ReadUBitLong( msg, 5 );
|
||||
int num_events = MSG_ReadUBitLong( msg, 5 );
|
||||
|
||||
if( proto == PROTO_GOLDSRC )
|
||||
entity_bits = MAX_GOLDSRC_ENTITY_BITS;
|
||||
@@ -440,9 +410,11 @@ void CL_ParseEvent( sizebuf_t *msg, connprotocol_t proto )
|
||||
entity_bits = MAX_ENTITY_BITS;
|
||||
|
||||
// parse events queue
|
||||
for( i = 0 ; i < num_events; i++ )
|
||||
for( int i = 0 ; i < num_events; i++ )
|
||||
{
|
||||
event_index = MSG_ReadUBitLong( msg, MAX_EVENT_BITS );
|
||||
int packet_index;
|
||||
float delay;
|
||||
int event_index = MSG_ReadUBitLong( msg, MAX_EVENT_BITS );
|
||||
|
||||
if( MSG_ReadOneBit( msg ))
|
||||
{
|
||||
@@ -467,7 +439,7 @@ void CL_ParseEvent( sizebuf_t *msg, connprotocol_t proto )
|
||||
|
||||
if( packet_index < frame->num_entities )
|
||||
{
|
||||
state = &cls.packet_entities[(frame->first_entity+packet_index)%cls.num_client_entities];
|
||||
entity_state_t *state = &cls.packet_entities[(frame->first_entity+packet_index)%cls.num_client_entities];
|
||||
args.entindex = state->number;
|
||||
|
||||
if( VectorIsNull( args.origin ))
|
||||
|
||||
@@ -39,17 +39,14 @@ qboolean CL_FixedFont( cl_font_t *font )
|
||||
|
||||
static int CL_LoadFontTexture( const char *fontname, uint texFlags, int *width )
|
||||
{
|
||||
int font_width;
|
||||
int tex;
|
||||
|
||||
if( !g_fsapi.FileExists( fontname, false ))
|
||||
return 0;
|
||||
|
||||
tex = ref.dllFuncs.GL_LoadTexture( fontname, NULL, 0, texFlags );
|
||||
int tex = ref.dllFuncs.GL_LoadTexture( fontname, NULL, 0, texFlags );
|
||||
if( !tex )
|
||||
return 0;
|
||||
|
||||
font_width = REF_GET_PARM( PARM_TEX_WIDTH, tex );
|
||||
int font_width = REF_GET_PARM( PARM_TEX_WIDTH, tex );
|
||||
if( !font_width )
|
||||
{
|
||||
ref.dllFuncs.GL_FreeTexture( tex );
|
||||
@@ -89,7 +86,7 @@ void CL_SetFontColor( cl_font_t *font, const rgba_t color )
|
||||
|
||||
qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float scale, convar_t *rendermode, uint texFlags )
|
||||
{
|
||||
int font_width, i;
|
||||
int font_width;
|
||||
|
||||
if( !rendermode )
|
||||
return false;
|
||||
@@ -107,7 +104,7 @@ qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float sc
|
||||
font->rendermode = rendermode;
|
||||
font->charHeight = Q_rint( font_width / 16 * scale );
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( font->fontRc ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( font->fontRc ); i++ )
|
||||
{
|
||||
font->fontRc[i].left = ( i * font_width / 16 ) % font_width;
|
||||
font->fontRc[i].right = font->fontRc[i].left + font_width / 16;
|
||||
@@ -124,8 +121,7 @@ qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float
|
||||
{
|
||||
fs_offset_t length;
|
||||
qfont_t src;
|
||||
byte *pfile;
|
||||
int font_width, i;
|
||||
int font_width;
|
||||
|
||||
if( !rendermode )
|
||||
return false;
|
||||
@@ -133,7 +129,7 @@ qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float
|
||||
if( font->valid )
|
||||
return true;
|
||||
|
||||
pfile = g_fsapi.LoadFile( fontname, &length, false );
|
||||
byte *pfile = g_fsapi.LoadFile( fontname, &length, false );
|
||||
if( !pfile )
|
||||
return false;
|
||||
|
||||
@@ -157,7 +153,7 @@ qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float
|
||||
font->rendermode = rendermode;
|
||||
font->charHeight = Q_rint( src.rowheight * scale );
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( font->fontRc ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( font->fontRc ); i++ )
|
||||
{
|
||||
const charinfo *ci = &src.fontinfo[i];
|
||||
|
||||
@@ -195,11 +191,6 @@ static int CL_CalcTabStop( const cl_font_t *font, int x )
|
||||
|
||||
int CL_DrawCharacter( float x, float y, int number, const rgba_t color, cl_font_t *font, int flags )
|
||||
{
|
||||
wrect_t *rc;
|
||||
float w, h;
|
||||
float s1, t1, s2, t2, half = 0.5f;
|
||||
int texw, texh;
|
||||
|
||||
if( !font || !font->valid || y < -font->charHeight )
|
||||
return 0;
|
||||
|
||||
@@ -220,21 +211,23 @@ int CL_DrawCharacter( float x, float y, int number, const rgba_t color, cl_font_
|
||||
if( !number || !font->charWidths[number])
|
||||
return 0;
|
||||
|
||||
int texw, texh;
|
||||
R_GetTextureParms( &texw, &texh, font->hFontTexture );
|
||||
if( !texw || !texh )
|
||||
return font->charWidths[number];
|
||||
|
||||
rc = &font->fontRc[number];
|
||||
wrect_t *rc = &font->fontRc[number];
|
||||
float half = 0.5f;
|
||||
|
||||
if( font->scale <= 1.f || !REF_GET_PARM( PARM_TEX_FILTERING, font->hFontTexture ))
|
||||
half = 0;
|
||||
|
||||
s1 = ((float)rc->left + half ) / texw;
|
||||
t1 = ((float)rc->top + half ) / texh;
|
||||
s2 = ((float)rc->right - half ) / texw;
|
||||
t2 = ((float)rc->bottom - half ) / texh;
|
||||
w = ( rc->right - rc->left ) * font->scale;
|
||||
h = ( rc->bottom - rc->top ) * font->scale;
|
||||
float s1 = ((float)rc->left + half ) / texw;
|
||||
float t1 = ((float)rc->top + half ) / texh;
|
||||
float s2 = ((float)rc->right - half ) / texw;
|
||||
float t2 = ((float)rc->bottom - half ) / texh;
|
||||
float w = ( rc->right - rc->left ) * font->scale;
|
||||
float h = ( rc->bottom - rc->top ) * font->scale;
|
||||
|
||||
if( FBitSet( flags, FONT_DRAW_HUD ))
|
||||
SPR_AdjustSize( &x, &y, &w, &h );
|
||||
|
||||
@@ -41,12 +41,10 @@ Store another position into interpolation circular buffer
|
||||
*/
|
||||
static void CL_UpdatePositions( cl_entity_t *ent )
|
||||
{
|
||||
position_history_t *ph, *prev;
|
||||
|
||||
prev = &ent->ph[ent->current_position & HISTORY_MASK];
|
||||
position_history_t *prev = &ent->ph[ent->current_position & HISTORY_MASK];
|
||||
|
||||
ent->current_position = (ent->current_position + 1) & HISTORY_MASK;
|
||||
ph = &ent->ph[ent->current_position];
|
||||
position_history_t *ph = &ent->ph[ent->current_position];
|
||||
VectorCopy( ent->curstate.origin, ph->origin );
|
||||
VectorCopy( ent->curstate.angles, ph->angles );
|
||||
|
||||
@@ -94,14 +92,13 @@ we don't want interpolate this
|
||||
*/
|
||||
static qboolean CL_EntityTeleported( cl_entity_t *ent )
|
||||
{
|
||||
float len, maxlen;
|
||||
vec3_t delta;
|
||||
|
||||
VectorSubtract( ent->curstate.origin, ent->prevstate.origin, delta );
|
||||
|
||||
// compute potential max movement in units per frame and compare with entity movement
|
||||
maxlen = ( clgame.movevars.maxvelocity * ( 1.0f / GAME_FPS ));
|
||||
len = VectorLength( delta );
|
||||
float maxlen = ( clgame.movevars.maxvelocity * ( 1.0f / GAME_FPS ));
|
||||
float len = VectorLength( delta );
|
||||
|
||||
return (len > maxlen);
|
||||
}
|
||||
@@ -169,22 +166,23 @@ check for parametrical moved entities
|
||||
*/
|
||||
static qboolean CL_ParametricMove( cl_entity_t *ent )
|
||||
{
|
||||
float frac, dt, t;
|
||||
vec3_t delta;
|
||||
|
||||
if( ent->curstate.starttime == 0.0f || ent->curstate.impacttime == 0.0f )
|
||||
return false;
|
||||
|
||||
VectorSubtract( ent->curstate.endpos, ent->curstate.startpos, delta );
|
||||
dt = ent->curstate.impacttime - ent->curstate.starttime;
|
||||
float dt = ent->curstate.impacttime - ent->curstate.starttime;
|
||||
|
||||
if( dt != 0.0f )
|
||||
{
|
||||
float t;
|
||||
|
||||
if( ent->lastmove > cl.time )
|
||||
t = ent->lastmove;
|
||||
else t = cl.time;
|
||||
|
||||
frac = ( t - ent->curstate.starttime ) / dt;
|
||||
float frac = ( t - ent->curstate.starttime ) / dt;
|
||||
frac = bound( 0.0f, frac, 1.0f );
|
||||
VectorMA( ent->curstate.startpos, frac, delta, ent->curstate.origin );
|
||||
|
||||
@@ -239,18 +237,14 @@ CL_GetStudioEstimatedFrame
|
||||
*/
|
||||
static float CL_GetStudioEstimatedFrame( cl_entity_t *ent )
|
||||
{
|
||||
studiohdr_t *pstudiohdr;
|
||||
mstudioseqdesc_t *pseqdesc;
|
||||
int sequence;
|
||||
|
||||
if( ent->model != NULL && ent->model->type == mod_studio )
|
||||
{
|
||||
pstudiohdr = (studiohdr_t *)Mod_StudioExtradata( ent->model );
|
||||
studiohdr_t *pstudiohdr = (studiohdr_t *)Mod_StudioExtradata( ent->model );
|
||||
|
||||
if( pstudiohdr && pstudiohdr->numseq > 0 )
|
||||
{
|
||||
sequence = bound( 0, ent->curstate.sequence, pstudiohdr->numseq - 1 );
|
||||
pseqdesc = (mstudioseqdesc_t *)((byte *)pstudiohdr + pstudiohdr->seqindex) + sequence;
|
||||
int sequence = bound( 0, ent->curstate.sequence, pstudiohdr->numseq - 1 );
|
||||
mstudioseqdesc_t *pseqdesc = (mstudioseqdesc_t *)((byte *)pstudiohdr + pstudiohdr->seqindex) + sequence;
|
||||
return ref.dllFuncs.R_StudioEstimateFrame( ent, pseqdesc, cl.time );
|
||||
}
|
||||
}
|
||||
@@ -301,8 +295,6 @@ apply changes since new frame received
|
||||
*/
|
||||
static void CL_ProcessEntityUpdate( cl_entity_t *ent )
|
||||
{
|
||||
qboolean parametric;
|
||||
|
||||
ent->model = CL_ModelHandle( ent->curstate.modelindex );
|
||||
ent->index = ent->curstate.number;
|
||||
|
||||
@@ -324,7 +316,7 @@ static void CL_ProcessEntityUpdate( cl_entity_t *ent )
|
||||
VectorCopy( aiment->origin, ent->curstate.origin );
|
||||
}
|
||||
|
||||
parametric = ent->curstate.starttime != 0.0f && ent->curstate.impacttime != 0.0f;
|
||||
qboolean parametric = ent->curstate.starttime != 0.0f && ent->curstate.impacttime != 0.0f;
|
||||
|
||||
// allow interpolation on bmodels too
|
||||
if( ent->model && ent->model->type == mod_brush )
|
||||
@@ -363,13 +355,11 @@ find two timestamps
|
||||
static qboolean CL_FindInterpolationUpdates( cl_entity_t *ent, double targettime, position_history_t **ph0, position_history_t **ph1 )
|
||||
{
|
||||
qboolean extrapolate = true;
|
||||
uint i, i0, i1, imod;
|
||||
uint imod = ent->current_position;
|
||||
uint i0 = (imod - 0) & HISTORY_MASK; // curpos (lerp end)
|
||||
uint i1 = (imod - 1) & HISTORY_MASK; // oldpos (lerp start)
|
||||
|
||||
imod = ent->current_position;
|
||||
i0 = (imod - 0) & HISTORY_MASK; // curpos (lerp end)
|
||||
i1 = (imod - 1) & HISTORY_MASK; // oldpos (lerp start)
|
||||
|
||||
for( i = 1; i < HISTORY_MAX - 1; i++ )
|
||||
for( uint i = 1; i < HISTORY_MAX - 1; i++ )
|
||||
{
|
||||
double at = ent->ph[( imod - i ) & HISTORY_MASK].animtime;
|
||||
|
||||
@@ -401,19 +391,19 @@ non-local players interpolation
|
||||
*/
|
||||
static void CL_PureOrigin( cl_entity_t *ent, double t, vec3_t outorigin, vec3_t outangles )
|
||||
{
|
||||
double t1, t0, frac;
|
||||
position_history_t *ph0, *ph1;
|
||||
vec3_t delta;
|
||||
|
||||
// NOTE: ph0 is next, ph1 is a prev
|
||||
CL_FindInterpolationUpdates( ent, t, &ph0, &ph1 );
|
||||
|
||||
t0 = ph0->animtime;
|
||||
t1 = ph1->animtime;
|
||||
double t0 = ph0->animtime;
|
||||
double t1 = ph1->animtime;
|
||||
|
||||
if( t0 != 0.0 )
|
||||
{
|
||||
vec4_t q, q1, q2;
|
||||
vec3_t delta;
|
||||
double frac;
|
||||
|
||||
VectorSubtract( ph0->origin, ph1->origin, delta );
|
||||
|
||||
@@ -449,7 +439,6 @@ static int CL_InterpolateModel( cl_entity_t *e )
|
||||
{
|
||||
position_history_t *ph0 = NULL, *ph1 = NULL;
|
||||
vec3_t origin, angles, delta;
|
||||
double t, t1, t2, frac;
|
||||
vec4_t q, q1, q2;
|
||||
|
||||
VectorCopy( e->curstate.origin, e->origin );
|
||||
@@ -478,11 +467,11 @@ static int CL_InterpolateModel( cl_entity_t *e )
|
||||
if( cl.local.moving && cl.local.onground == e->index )
|
||||
return 1;
|
||||
|
||||
t = cl.time - cl_interp.value;
|
||||
double t = cl.time - cl_interp.value;
|
||||
CL_FindInterpolationUpdates( e, t, &ph0, &ph1 );
|
||||
|
||||
t1 = ph1->animtime;
|
||||
t2 = ph0->animtime;
|
||||
double t1 = ph1->animtime;
|
||||
double t2 = ph0->animtime;
|
||||
|
||||
if( t - t1 < 0.0f )
|
||||
return 0;
|
||||
@@ -502,7 +491,7 @@ static int CL_InterpolateModel( cl_entity_t *e )
|
||||
}
|
||||
|
||||
VectorSubtract( ph0->origin, ph1->origin, delta );
|
||||
frac = (t - t1) / (t2 - t1);
|
||||
double frac = (t - t1) / (t2 - t1);
|
||||
|
||||
if( frac < 0.0f )
|
||||
return 0;
|
||||
@@ -532,8 +521,6 @@ interpolate non-local clients
|
||||
*/
|
||||
void CL_ComputePlayerOrigin( cl_entity_t *ent )
|
||||
{
|
||||
double targettime;
|
||||
vec4_t q, q1, q2;
|
||||
vec3_t origin;
|
||||
vec3_t angles;
|
||||
|
||||
@@ -549,6 +536,8 @@ void CL_ComputePlayerOrigin( cl_entity_t *ent )
|
||||
|
||||
if( cls.demoplayback == DEMO_QUAKE1 )
|
||||
{
|
||||
vec4_t q, q1, q2;
|
||||
|
||||
// quake lerping is easy
|
||||
VectorLerp( ent->prevstate.origin, cl.lerpFrac, ent->curstate.origin, ent->origin );
|
||||
AngleQuaternion( ent->prevstate.angles, q1, false );
|
||||
@@ -558,7 +547,7 @@ void CL_ComputePlayerOrigin( cl_entity_t *ent )
|
||||
return;
|
||||
}
|
||||
|
||||
targettime = cl.time - cl_interp.value;
|
||||
double targettime = cl.time - cl_interp.value;
|
||||
CL_PureOrigin( ent, targettime, origin, angles );
|
||||
|
||||
VectorCopy( angles, ent->angles );
|
||||
@@ -574,9 +563,7 @@ process player states after the new packet has received
|
||||
*/
|
||||
static void CL_ProcessPlayerState( int playerindex, entity_state_t *state )
|
||||
{
|
||||
entity_state_t *ps;
|
||||
|
||||
ps = &cl.frames[cl.parsecountmod].playerstate[playerindex];
|
||||
entity_state_t *ps = &cl.frames[cl.parsecountmod].playerstate[playerindex];
|
||||
ps->number = state->number;
|
||||
ps->messagenum = cl.parsecount;
|
||||
ps->msg_time = cl.mtime[0];
|
||||
@@ -617,19 +604,15 @@ process player states after the new packet has received
|
||||
*/
|
||||
void CL_ProcessPacket( frame_t *frame )
|
||||
{
|
||||
entity_state_t *state;
|
||||
cl_entity_t *ent;
|
||||
int pnum;
|
||||
|
||||
for( pnum = 0; pnum < frame->num_entities; pnum++ )
|
||||
for( int pnum = 0; pnum < frame->num_entities; pnum++ )
|
||||
{
|
||||
// request the entity state from circular buffer
|
||||
state = &cls.packet_entities[(frame->first_entity+pnum) % cls.num_client_entities];
|
||||
entity_state_t *state = &cls.packet_entities[(frame->first_entity+pnum) % cls.num_client_entities];
|
||||
state->messagenum = cl.parsecount;
|
||||
state->msg_time = cl.mtime[0];
|
||||
|
||||
// mark all the players
|
||||
ent = &clgame.entities[state->number];
|
||||
cl_entity_t *ent = &clgame.entities[state->number];
|
||||
ent->player = CL_IsPlayerIndex( state->number );
|
||||
|
||||
if( state->number == ( cl.playernum + 1 ))
|
||||
@@ -675,7 +658,6 @@ Read and ignore whole entity packet.
|
||||
*/
|
||||
static void CL_FlushEntityPacket( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
int newnum;
|
||||
entity_state_t from, to;
|
||||
|
||||
memset( &from, 0, sizeof( from ));
|
||||
@@ -686,6 +668,8 @@ static void CL_FlushEntityPacket( sizebuf_t *msg, connprotocol_t proto )
|
||||
// read it all, but ignore it
|
||||
while( 1 )
|
||||
{
|
||||
int newnum;
|
||||
|
||||
if( !CL_ParseEntityNumFromPacket( msg, &newnum, proto ))
|
||||
break; // done
|
||||
|
||||
@@ -815,22 +799,19 @@ rest of the data stream.
|
||||
*/
|
||||
int CL_ParsePacketEntities( sizebuf_t *msg, qboolean delta, connprotocol_t proto )
|
||||
{
|
||||
frame_t *newframe, *oldframe;
|
||||
frame_t *oldframe;
|
||||
int oldindex, newnum, oldnum;
|
||||
int playerbytes = 0;
|
||||
int bufStart;
|
||||
entity_state_t *oldent;
|
||||
qboolean player;
|
||||
int count;
|
||||
|
||||
// save first uncompressed packet as timestamp
|
||||
if( cls.changelevel && !delta && cls.demorecording )
|
||||
CL_WriteDemoJumpTime();
|
||||
|
||||
// sentinel count. save it for debug checking
|
||||
count = MSG_ReadUBitLong( msg, MAX_VISIBLE_PACKET_BITS ) + 1;
|
||||
int count = MSG_ReadUBitLong( msg, MAX_VISIBLE_PACKET_BITS ) + 1;
|
||||
|
||||
newframe = &cl.frames[cl.parsecountmod];
|
||||
frame_t *newframe = &cl.frames[cl.parsecountmod];
|
||||
|
||||
// allocate parse entities
|
||||
memset( newframe->flags, 0, sizeof( newframe->flags ));
|
||||
@@ -871,7 +852,7 @@ int CL_ParsePacketEntities( sizebuf_t *msg, qboolean delta, connprotocol_t proto
|
||||
if( MSG_CheckOverflow( msg ))
|
||||
Host_Error( "%s: overflow\n", __func__ );
|
||||
|
||||
player = CL_IsPlayerIndex( newnum );
|
||||
qboolean player = CL_IsPlayerIndex( newnum );
|
||||
|
||||
while( oldnum < newnum )
|
||||
{
|
||||
@@ -883,7 +864,7 @@ int CL_ParsePacketEntities( sizebuf_t *msg, qboolean delta, connprotocol_t proto
|
||||
if( oldnum == newnum )
|
||||
{
|
||||
// delta from previous state
|
||||
bufStart = MSG_GetNumBytesRead( msg );
|
||||
int bufStart = MSG_GetNumBytesRead( msg );
|
||||
CL_DeltaEntity( msg, newframe, newnum, oldent, true );
|
||||
if( player ) playerbytes += MSG_GetNumBytesRead( msg ) - bufStart;
|
||||
oldnum = CL_UpdateOldEntNum( ++oldindex, oldframe, &oldent );
|
||||
@@ -893,7 +874,7 @@ int CL_ParsePacketEntities( sizebuf_t *msg, qboolean delta, connprotocol_t proto
|
||||
if( oldnum > newnum )
|
||||
{
|
||||
// delta from baseline ?
|
||||
bufStart = MSG_GetNumBytesRead( msg );
|
||||
int bufStart = MSG_GetNumBytesRead( msg );
|
||||
CL_DeltaEntity( msg, newframe, newnum, NULL, true );
|
||||
if( player ) playerbytes += MSG_GetNumBytesRead( msg ) - bufStart;
|
||||
continue;
|
||||
@@ -1029,12 +1010,10 @@ for all current players
|
||||
*/
|
||||
static void CL_LinkPlayers( frame_t *frame )
|
||||
{
|
||||
cl_entity_t *ent = CL_GetLocalPlayer();
|
||||
entity_state_t *state;
|
||||
cl_entity_t *ent;
|
||||
int i;
|
||||
|
||||
ent = CL_GetLocalPlayer();
|
||||
|
||||
// apply muzzleflash to weaponmodel
|
||||
if( ent && FBitSet( ent->curstate.effects, EF_MUZZLEFLASH ))
|
||||
SetBits( clgame.viewent.curstate.effects, EF_MUZZLEFLASH );
|
||||
@@ -1112,15 +1091,9 @@ CL_LinkPacketEntities
|
||||
*/
|
||||
static void CL_LinkPacketEntities( frame_t *frame )
|
||||
{
|
||||
cl_entity_t *ent;
|
||||
entity_state_t *state;
|
||||
qboolean parametric;
|
||||
qboolean interpolate;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < frame->num_entities; i++ )
|
||||
for( int i = 0; i < frame->num_entities; i++ )
|
||||
{
|
||||
state = &cls.packet_entities[(frame->first_entity + i) % cls.num_client_entities];
|
||||
entity_state_t *state = &cls.packet_entities[(frame->first_entity + i) % cls.num_client_entities];
|
||||
|
||||
// clients are should be done in CL_LinkPlayers
|
||||
if( state->number >= 1 && state->number <= cl.maxclients )
|
||||
@@ -1130,7 +1103,7 @@ static void CL_LinkPacketEntities( frame_t *frame )
|
||||
if( !state->modelindex || FBitSet( state->effects, EF_NODRAW ))
|
||||
continue;
|
||||
|
||||
ent = CL_GetEntityByIndex( state->number );
|
||||
cl_entity_t *ent = CL_GetEntityByIndex( state->number );
|
||||
|
||||
if( !ent )
|
||||
{
|
||||
@@ -1141,7 +1114,7 @@ static void CL_LinkPacketEntities( frame_t *frame )
|
||||
// animtime must keep an actual
|
||||
ent->curstate.animtime = state->animtime;
|
||||
ent->curstate.frame = state->frame;
|
||||
interpolate = false;
|
||||
qboolean interpolate = false;
|
||||
|
||||
if( !ent->model ) continue;
|
||||
|
||||
@@ -1155,7 +1128,7 @@ static void CL_LinkPacketEntities( frame_t *frame )
|
||||
}
|
||||
}
|
||||
|
||||
parametric = ( ent->curstate.impacttime != 0.0f && ent->curstate.starttime != 0.0f );
|
||||
qboolean parametric = ( ent->curstate.impacttime != 0.0f && ent->curstate.starttime != 0.0f );
|
||||
|
||||
if( !parametric && ent->curstate.movetype != MOVETYPE_COMPOUND )
|
||||
{
|
||||
@@ -1368,9 +1341,6 @@ SOUND ENGINE IMPLEMENTATION
|
||||
*/
|
||||
qboolean CL_GetEntitySpatialization( channel_t *ch )
|
||||
{
|
||||
cl_entity_t *ent;
|
||||
qboolean valid_origin;
|
||||
|
||||
if( ch->entnum == 0 )
|
||||
{
|
||||
SetBits( ch->flags, FL_CHAN_STATIC_SOUND );
|
||||
@@ -1383,8 +1353,8 @@ qboolean CL_GetEntitySpatialization( channel_t *ch )
|
||||
return true;
|
||||
}
|
||||
|
||||
valid_origin = VectorIsNull( ch->origin ) ? false : true;
|
||||
ent = CL_GetEntityByIndex( ch->entnum );
|
||||
qboolean valid_origin = VectorIsNull( ch->origin ) ? false : true;
|
||||
cl_entity_t *ent = CL_GetEntityByIndex( ch->entnum );
|
||||
|
||||
// entity is not present on the client but has valid origin
|
||||
if( !ent || !ent->model || ent->curstate.messagenum != cl.parsecount )
|
||||
|
||||
@@ -315,7 +315,6 @@ should be put at.
|
||||
static float CL_LerpPoint( void )
|
||||
{
|
||||
double f = cl_serverframetime();
|
||||
double frac;
|
||||
|
||||
if( f == 0.0 || cls.timedemo )
|
||||
{
|
||||
@@ -332,7 +331,7 @@ static float CL_LerpPoint( void )
|
||||
if( cl_interp.value <= 0.001 )
|
||||
return 1.0f;
|
||||
|
||||
frac = ( cl.time - cl.mtime[0] ) / cl_interp.value;
|
||||
double frac = ( cl.time - cl.mtime[0] ) / cl_interp.value;
|
||||
|
||||
return frac;
|
||||
}
|
||||
@@ -346,20 +345,17 @@ Drift interpolation value (this is used for server unlag system)
|
||||
*/
|
||||
static int CL_DriftInterpolationAmount( int goal )
|
||||
{
|
||||
float fgoal, maxmove, diff;
|
||||
int msec;
|
||||
|
||||
fgoal = (float)goal / 1000.0f;
|
||||
float fgoal = (float)goal / 1000.0f;
|
||||
|
||||
if( fgoal != cl.local.interp_amount )
|
||||
{
|
||||
maxmove = host.frametime * 0.05;
|
||||
diff = fgoal - cl.local.interp_amount;
|
||||
float maxmove = host.frametime * 0.05;
|
||||
float diff = fgoal - cl.local.interp_amount;
|
||||
diff = bound( -maxmove, diff, maxmove );
|
||||
cl.local.interp_amount += diff;
|
||||
}
|
||||
|
||||
msec = cl.local.interp_amount * 1000.0f;
|
||||
int msec = cl.local.interp_amount * 1000.0f;
|
||||
msec = bound( 0, msec, 100 );
|
||||
|
||||
return msec;
|
||||
@@ -420,14 +416,14 @@ CL_ComputePacketLoss
|
||||
*/
|
||||
static void CL_ComputePacketLoss( void )
|
||||
{
|
||||
int i, lost = 0;
|
||||
int lost = 0;
|
||||
|
||||
if( host.realtime < cls.packet_loss_recalc_time )
|
||||
return;
|
||||
|
||||
cls.packet_loss_recalc_time = host.realtime + 1.0;
|
||||
|
||||
for( i = cls.netchan.incoming_sequence - CL_UPDATE_BACKUP + 1; i <= cls.netchan.incoming_sequence; i++ )
|
||||
for( int i = cls.netchan.incoming_sequence - CL_UPDATE_BACKUP + 1; i <= cls.netchan.incoming_sequence; i++ )
|
||||
{
|
||||
if( cl.frames[i & CL_UPDATE_MASK].receivedtime == -1.0 )
|
||||
lost++;
|
||||
@@ -455,18 +451,15 @@ void CL_UpdateFrameLerp( void )
|
||||
|
||||
static void CL_FindInterpolatedAddAngle( float t, float *frac, pred_viewangle_t **prev, pred_viewangle_t **next )
|
||||
{
|
||||
int i, i0, i1, imod;
|
||||
float at;
|
||||
|
||||
imod = cl.angle_position - 1;
|
||||
i0 = (imod + 1) & ANGLE_MASK;
|
||||
i1 = (imod + 0) & ANGLE_MASK;
|
||||
int imod = cl.angle_position - 1;
|
||||
int i0 = (imod + 1) & ANGLE_MASK;
|
||||
int i1 = (imod + 0) & ANGLE_MASK;
|
||||
|
||||
if( cl.predicted_angle[i0].starttime >= t )
|
||||
{
|
||||
for( i = 0; i < ANGLE_BACKUP - 2; i++ )
|
||||
for( int i = 0; i < ANGLE_BACKUP - 2; i++ )
|
||||
{
|
||||
at = cl.predicted_angle[imod & ANGLE_MASK].starttime;
|
||||
float at = cl.predicted_angle[imod & ANGLE_MASK].starttime;
|
||||
if( at == 0.0f ) break;
|
||||
|
||||
if( at < t )
|
||||
@@ -534,14 +527,12 @@ navigate around texture atlas
|
||||
static qboolean CL_ProcessShowTexturesCmds( usercmd_t *cmd )
|
||||
{
|
||||
static int oldbuttons;
|
||||
int changed;
|
||||
int released;
|
||||
|
||||
if( !r_showtextures.value || CL_IsDevOverviewMode( ))
|
||||
return false;
|
||||
|
||||
changed = (oldbuttons ^ cmd->buttons);
|
||||
released = changed & (~cmd->buttons);
|
||||
int changed = (oldbuttons ^ cmd->buttons);
|
||||
int released = changed & (~cmd->buttons);
|
||||
|
||||
if( released & ( IN_RIGHT|IN_MOVERIGHT ))
|
||||
Cvar_SetValue( "r_showtextures", r_showtextures.value + 1 );
|
||||
@@ -642,11 +633,9 @@ static void CL_CreateCmd( void )
|
||||
{
|
||||
usercmd_t nullcmd = { 0 }, *cmd;
|
||||
runcmd_t *pcmd;
|
||||
qboolean active;
|
||||
double accurate_ms;
|
||||
vec3_t angles;
|
||||
int input_override;
|
||||
int i, ms;
|
||||
int ms;
|
||||
|
||||
if( cls.state <= ca_connected || cls.state == ca_cinematic )
|
||||
return;
|
||||
@@ -656,7 +645,7 @@ static void CL_CreateCmd( void )
|
||||
input_override = 0;
|
||||
|
||||
// fix rounding error and framerate depending player move
|
||||
accurate_ms = host.frametime * 1000;
|
||||
double accurate_ms = host.frametime * 1000;
|
||||
ms = (int)accurate_ms;
|
||||
cl.frametime_remainder += accurate_ms - ms; // accumulate rounding error each frame
|
||||
|
||||
@@ -677,7 +666,7 @@ static void CL_CreateCmd( void )
|
||||
CL_SetSolidPlayers( cl.playernum );
|
||||
|
||||
// message we are constructing.
|
||||
i = cls.netchan.outgoing_sequence & CL_UPDATE_MASK;
|
||||
int i = cls.netchan.outgoing_sequence & CL_UPDATE_MASK;
|
||||
pcmd = &cl.commands[i];
|
||||
|
||||
if( !cls.demoplayback )
|
||||
@@ -695,7 +684,7 @@ static void CL_CreateCmd( void )
|
||||
cmd = &nullcmd;
|
||||
}
|
||||
|
||||
active = (( cls.signon == SIGNONS ) && !cl.paused && !cls.demoplayback );
|
||||
qboolean active = (( cls.signon == SIGNONS ) && !cl.paused && !cls.demoplayback );
|
||||
Platform_PreCreateMove();
|
||||
clgame.dllFuncs.CL_CreateMove( host.frametime, cmd, active );
|
||||
IN_EngineAppendMove( host.frametime, cmd, active );
|
||||
@@ -946,13 +935,12 @@ CL_BeginUpload_f
|
||||
*/
|
||||
static void CL_BeginUpload_f( void )
|
||||
{
|
||||
const char *name;
|
||||
resource_t custResource;
|
||||
byte *buf = NULL;
|
||||
int size = 0;
|
||||
byte md5[16];
|
||||
|
||||
name = Cmd_Argv( 1 );
|
||||
const char *name = Cmd_Argv( 1 );
|
||||
|
||||
if( COM_StringEmptyOrNULL( name ))
|
||||
return;
|
||||
@@ -1038,9 +1026,8 @@ static void CL_GetCDKey( char *protinfo, size_t protinfosize )
|
||||
byte hash[16] = { 0 };
|
||||
MD5Context_t ctx = { 0 };
|
||||
char key[64];
|
||||
int keylength;
|
||||
|
||||
keylength = Q_snprintf( key, sizeof( key ), "%u", COM_RandomLong( 0, 0x7ffffffe ));
|
||||
int keylength = Q_snprintf( key, sizeof( key ), "%u", COM_RandomLong( 0, 0x7ffffffe ));
|
||||
|
||||
MD5Init( &ctx );
|
||||
MD5Update( &ctx, key, keylength );
|
||||
@@ -1079,7 +1066,6 @@ static void CL_WriteSteamTicket( sizebuf_t *send )
|
||||
|
||||
void CL_SendGoldSrcConnectPacket( netadr_t adr, int challenge, const void *ticket, size_t ticketlen )
|
||||
{
|
||||
const char *name;
|
||||
sizebuf_t send;
|
||||
byte send_buf[2048];
|
||||
char protinfo[MAX_INFO_STRING];
|
||||
@@ -1090,7 +1076,7 @@ void CL_SendGoldSrcConnectPacket( netadr_t adr, int challenge, const void *ticke
|
||||
Info_SetValueForKeyf( protinfo, "unique", sizeof( protinfo ), "%i", 0xffffffff );
|
||||
Info_SetValueForKey( protinfo, "raw", "steam", sizeof( protinfo ));
|
||||
CL_GetCDKey( protinfo, sizeof( protinfo ));
|
||||
name = Info_ValueForKey( cls.userinfo, "name" );
|
||||
const char *name = Info_ValueForKey( cls.userinfo, "name" );
|
||||
if( cl_advertise_engine_in_name.value && Q_strnicmp( name, "[Xash3D]", 8 ))
|
||||
Info_SetValueForKeyf( cls.userinfo, "name", sizeof( cls.userinfo ), "[Xash3D]%s", name );
|
||||
|
||||
@@ -1123,8 +1109,6 @@ static void CL_SendConnectPacket( connprotocol_t proto, int challenge )
|
||||
{
|
||||
char protinfo[MAX_INFO_STRING];
|
||||
netadr_t adr = { 0 };
|
||||
int input_devices;
|
||||
netadrtype_t adrtype;
|
||||
|
||||
protinfo[0] = 0;
|
||||
|
||||
@@ -1135,11 +1119,11 @@ static void CL_SendConnectPacket( connprotocol_t proto, int challenge )
|
||||
return;
|
||||
}
|
||||
|
||||
adrtype = NET_NetadrType( &adr );
|
||||
netadrtype_t adrtype = NET_NetadrType( &adr );
|
||||
|
||||
if( adr.port == 0 ) adr.port = MSG_BigShort( PORT_SERVER );
|
||||
|
||||
input_devices = IN_CollectInputDevices();
|
||||
int input_devices = IN_CollectInputDevices();
|
||||
IN_LockInputDevices( adrtype != NA_LOOPBACK ? true : false );
|
||||
|
||||
// GoldSrc doesn't need useragent string
|
||||
@@ -1252,8 +1236,6 @@ Resend a connect message if the last one has timed out
|
||||
static void CL_CheckForResend( void )
|
||||
{
|
||||
netadr_t adr;
|
||||
net_gai_state_t res;
|
||||
float resend_time;
|
||||
|
||||
if( cls.internetservers_wait )
|
||||
{
|
||||
@@ -1287,6 +1269,7 @@ static void CL_CheckForResend( void )
|
||||
else if( cl_resend.value > CL_MAX_RESEND_TIME )
|
||||
Cvar_DirectSetValue( &cl_resend, CL_MAX_RESEND_TIME );
|
||||
|
||||
float resend_time;
|
||||
if( cls.bandwidth_test.started && !cls.bandwidth_test.passed && !cls.bandwidth_test.failed )
|
||||
resend_time = 2.0f;
|
||||
else
|
||||
@@ -1295,7 +1278,7 @@ static void CL_CheckForResend( void )
|
||||
if(( host.realtime - cls.connect_time ) < resend_time )
|
||||
return;
|
||||
|
||||
res = NET_StringToAdrNB( cls.servername, &adr, false );
|
||||
net_gai_state_t res = NET_StringToAdrNB( cls.servername, &adr, false );
|
||||
|
||||
if( res == NET_EAI_NONAME )
|
||||
{
|
||||
@@ -1377,9 +1360,6 @@ static void CL_CreateResourceList( void )
|
||||
{
|
||||
char szFileName[MAX_OSPATH];
|
||||
byte rgucMD5_hash[16] = { 0 };
|
||||
resource_t *pNewResource;
|
||||
int nSize;
|
||||
file_t *fp;
|
||||
|
||||
HPAK_FlushHostQueue();
|
||||
cl.num_resources = 0;
|
||||
@@ -1399,16 +1379,16 @@ static void CL_CreateResourceList( void )
|
||||
CL_ConvertImageToWAD3( szFileName );
|
||||
Q_strncpy( szFileName, "tempdecal.wad", sizeof( szFileName ));
|
||||
}
|
||||
fp = FS_Open( szFileName, "rb", true );
|
||||
file_t *fp = FS_Open( szFileName, "rb", true );
|
||||
|
||||
if( !fp )
|
||||
return;
|
||||
|
||||
nSize = FS_FileLength( fp );
|
||||
int nSize = FS_FileLength( fp );
|
||||
|
||||
if( nSize != 0 )
|
||||
{
|
||||
pNewResource = CL_AddResource( t_decal, szFileName, nSize, false, 0 );
|
||||
resource_t *pNewResource = CL_AddResource( t_decal, szFileName, nSize, false, 0 );
|
||||
|
||||
if( pNewResource )
|
||||
{
|
||||
@@ -1430,9 +1410,6 @@ CL_CheckLogoChanged
|
||||
*/
|
||||
static void CL_CheckLogoChanged( void )
|
||||
{
|
||||
player_info_t *player;
|
||||
int i;
|
||||
|
||||
if( cls.state != ca_active )
|
||||
return;
|
||||
|
||||
@@ -1444,10 +1421,10 @@ static void CL_CheckLogoChanged( void )
|
||||
if( cl.num_resources == 0 )
|
||||
return;
|
||||
|
||||
player = &cl.players[cl.playernum];
|
||||
player_info_t *player = &cl.players[cl.playernum];
|
||||
COM_ClearCustomizationList( &player->customdata, true );
|
||||
|
||||
for( i = 0; i < cl.num_resources; i++ )
|
||||
for( int i = 0; i < cl.num_resources; i++ )
|
||||
{
|
||||
resource_t *pResource = &cl.resourcelist[i];
|
||||
|
||||
@@ -1533,7 +1510,6 @@ static void CL_Rcon_f( void )
|
||||
char message[1024];
|
||||
sizebuf_t msg;
|
||||
netadr_t to;
|
||||
int i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( rcon_password.string ))
|
||||
{
|
||||
@@ -1565,7 +1541,7 @@ static void CL_Rcon_f( void )
|
||||
MSG_WriteStringf( &msg, C2S_RCON" %s ", rcon_password.string );
|
||||
MSG_SeekToBit( &msg, -8, SEEK_CUR );
|
||||
|
||||
for( i = 1; i < Cmd_Argc(); i++ )
|
||||
for( int i = 1; i < Cmd_Argc(); i++ )
|
||||
{
|
||||
string command;
|
||||
|
||||
@@ -1588,11 +1564,9 @@ CL_ClearState
|
||||
*/
|
||||
void CL_ClearState( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
CL_ClearResourceLists();
|
||||
|
||||
for( i = 0; i < MAX_CLIENTS; i++ )
|
||||
for( int i = 0; i < MAX_CLIENTS; i++ )
|
||||
COM_ClearCustomizationList( &cl.players[i].customdata, false );
|
||||
|
||||
S_StopAllSounds ( true );
|
||||
|
||||
@@ -118,8 +118,7 @@ static void NetGraph_InitColors( void )
|
||||
byte mincolor[2][3];
|
||||
byte maxcolor[2][3];
|
||||
float dc[2][3];
|
||||
int i, hfrac;
|
||||
float f;
|
||||
int hfrac;
|
||||
|
||||
mincolor[0][0] = 63;
|
||||
mincolor[0][1] = 0;
|
||||
@@ -137,7 +136,7 @@ static void NetGraph_InitColors( void )
|
||||
maxcolor[1][1] = 0;
|
||||
maxcolor[1][2] = 0;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
dc[0][i] = (float)(maxcolor[0][i] - mincolor[0][i]);
|
||||
dc[1][i] = (float)(maxcolor[1][i] - mincolor[1][i]);
|
||||
@@ -145,8 +144,10 @@ static void NetGraph_InitColors( void )
|
||||
|
||||
hfrac = NETGRAPH_LERP_HEIGHT / 3;
|
||||
|
||||
for( i = 0; i < NETGRAPH_LERP_HEIGHT; i++ )
|
||||
for( int i = 0; i < NETGRAPH_LERP_HEIGHT; i++ )
|
||||
{
|
||||
float f;
|
||||
|
||||
if( i < hfrac )
|
||||
{
|
||||
f = (float)i / (float)hfrac;
|
||||
@@ -170,10 +171,9 @@ get frame data info, like chokes, packet losses, also update graph, packet and c
|
||||
*/
|
||||
static void NetGraph_GetFrameData( float *latency, int *latency_count )
|
||||
{
|
||||
int i, choke_count = 0, loss_count = 0;
|
||||
int choke_count = 0, loss_count = 0;
|
||||
double newtime = Platform_DoubleTime();
|
||||
static double nexttime = 0;
|
||||
float loss, choke;
|
||||
|
||||
*latency_count = 0;
|
||||
*latency = 0.0f;
|
||||
@@ -185,7 +185,7 @@ static void NetGraph_GetFrameData( float *latency, int *latency_count )
|
||||
nexttime = newtime + 0.05;
|
||||
}
|
||||
|
||||
for( i = cls.netchan.incoming_sequence - CL_UPDATE_BACKUP + 1; i <= cls.netchan.incoming_sequence; i++ )
|
||||
for( int i = cls.netchan.incoming_sequence - CL_UPDATE_BACKUP + 1; i <= cls.netchan.incoming_sequence; i++ )
|
||||
{
|
||||
frame_t *f = cl.frames + ( i & CL_UPDATE_MASK );
|
||||
struct packet_latency_t *p = netstat_packet_latency + ( i & NET_TIMINGS_MASK );
|
||||
@@ -228,7 +228,7 @@ static void NetGraph_GetFrameData( float *latency, int *latency_count )
|
||||
if( maxmsgbytes > 1000 )
|
||||
maxmsgbytes = 1000;
|
||||
|
||||
for( i = cls.netchan.outgoing_sequence - CL_UPDATE_BACKUP + 1; i <= cls.netchan.outgoing_sequence; i++ )
|
||||
for( int i = cls.netchan.outgoing_sequence - CL_UPDATE_BACKUP + 1; i <= cls.netchan.outgoing_sequence; i++ )
|
||||
{
|
||||
netstat_cmdinfo[i & NET_TIMINGS_MASK].cmd_lerp = cl.commands[i & CL_UPDATE_MASK].frame_lerp;
|
||||
netstat_cmdinfo[i & NET_TIMINGS_MASK].sent = cl.commands[i & CL_UPDATE_MASK].heldback ? false : true;
|
||||
@@ -236,11 +236,11 @@ static void NetGraph_GetFrameData( float *latency, int *latency_count )
|
||||
}
|
||||
|
||||
// packet loss
|
||||
loss = 100.0f * (float)loss_count / CL_UPDATE_BACKUP;
|
||||
float loss = 100.0f * (float)loss_count / CL_UPDATE_BACKUP;
|
||||
packet_loss = PACKETLOSS_AVG_FRAC * packet_loss + ( 1.0f - PACKETLOSS_AVG_FRAC ) * loss;
|
||||
|
||||
// packet choke
|
||||
choke = 100.0f * (float)choke_count / CL_UPDATE_BACKUP;
|
||||
float choke = 100.0f * (float)choke_count / CL_UPDATE_BACKUP;
|
||||
packet_choke = PACKETCHOKE_AVG_FRAC * packet_choke + ( 1.0f - PACKETCHOKE_AVG_FRAC ) * choke;
|
||||
}
|
||||
|
||||
@@ -252,13 +252,13 @@ NetGraph_DrawTimes
|
||||
*/
|
||||
static void NetGraph_DrawTimes( wrect_t rect, int x, int w )
|
||||
{
|
||||
int i, j, extrap_point = NETGRAPH_LERP_HEIGHT / 3, a, h;
|
||||
int extrap_point = NETGRAPH_LERP_HEIGHT / 3;
|
||||
wrect_t fill;
|
||||
|
||||
for( a = 0; a < w; a++ )
|
||||
for( int a = 0; a < w; a++ )
|
||||
{
|
||||
i = ( cls.netchan.outgoing_sequence - a ) & NET_TIMINGS_MASK;
|
||||
h = Q_min(( netstat_cmdinfo[i].cmd_lerp / 3.0f ) * NETGRAPH_LERP_HEIGHT, net_graphheight.value * 0.7f);
|
||||
int i = ( cls.netchan.outgoing_sequence - a ) & NET_TIMINGS_MASK;
|
||||
int h = Q_min(( netstat_cmdinfo[i].cmd_lerp / 3.0f ) * NETGRAPH_LERP_HEIGHT, net_graphheight.value * 0.7f);
|
||||
|
||||
fill.left = x + w - a - 1;
|
||||
fill.right = fill.bottom = 1;
|
||||
@@ -277,7 +277,7 @@ static void NetGraph_DrawTimes( wrect_t rect, int x, int w )
|
||||
start = (h - 1);
|
||||
}
|
||||
|
||||
for( j = start; j < h; j++ )
|
||||
for( int j = start; j < h; j++ )
|
||||
{
|
||||
int color = NETGRAPH_NET_COLORS + j + extrap_point;
|
||||
color = Q_min( color, ARRAYSIZE( netcolors ) - 1 );
|
||||
@@ -296,7 +296,7 @@ static void NetGraph_DrawTimes( wrect_t rect, int x, int w )
|
||||
if( !net_graphsolid.value )
|
||||
h = 1;
|
||||
|
||||
for( j = 0; j < h; j++ )
|
||||
for( int j = 0; j < h; j++ )
|
||||
{
|
||||
int color = NETGRAPH_NET_COLORS + j + oldh;
|
||||
color = Q_min( color, ARRAYSIZE( netcolors ) - 1 );
|
||||
@@ -495,15 +495,16 @@ NetGraph_DrawDataUsage
|
||||
*/
|
||||
static void NetGraph_DrawDataUsage( int x, int y, int w, int graphtype )
|
||||
{
|
||||
int a, i, h, lastvalidh = 0, ping;
|
||||
int lastvalidh = 0;
|
||||
int pingheight = net_graphheight.value - NETGRAPH_LERP_HEIGHT - 2;
|
||||
wrect_t fill = { 0 };
|
||||
byte color[4];
|
||||
|
||||
for( a = 0; a < w; a++ )
|
||||
for( int a = 0; a < w; a++ )
|
||||
{
|
||||
i = (cls.netchan.incoming_sequence - a) & NET_TIMINGS_MASK;
|
||||
h = netstat_packet_latency[i].latency;
|
||||
int ping;
|
||||
int i = (cls.netchan.incoming_sequence - a) & NET_TIMINGS_MASK;
|
||||
int h = netstat_packet_latency[i].latency;
|
||||
|
||||
NetGraph_ColorForHeight( &netstat_packet_latency[i], color, &ping );
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ return true if equal
|
||||
*/
|
||||
static qboolean CL_CmpStudioTextures( int numtexs, mstudiotexture_t *p1, remap_info_t *remap )
|
||||
{
|
||||
int i;
|
||||
mstudiotexture_t *p2;
|
||||
|
||||
if( !p1 ) // no textures
|
||||
@@ -60,7 +59,7 @@ static qboolean CL_CmpStudioTextures( int numtexs, mstudiotexture_t *p1, remap_i
|
||||
|
||||
p2 = remap->ptexture;
|
||||
|
||||
for( i = 0; i < numtexs; i++, p1++, p2++ )
|
||||
for( int i = 0; i < numtexs; i++, p1++, p2++ )
|
||||
{
|
||||
if( p1->flags & STUDIO_NF_COLORMAP )
|
||||
continue; // colormaps always has different indexes
|
||||
@@ -116,18 +115,17 @@ static void CL_DuplicateTexture( cl_entity_t *entity, model_t *model, mstudiotex
|
||||
const char *name;
|
||||
texture_t *tx = NULL;
|
||||
char texname[128];
|
||||
int i, index;
|
||||
size_t size;
|
||||
byte paletteBackup[768];
|
||||
byte *raw, *pal;
|
||||
int index = ptexture->index;
|
||||
|
||||
// save off the real texture index
|
||||
index = ptexture->index;
|
||||
name = ref.dllFuncs.GL_TextureName( index );
|
||||
Q_snprintf( texname, sizeof( texname ), "#%i_%s", entity->curstate.number, name + 1 );
|
||||
|
||||
// search for pixels
|
||||
for( i = 0; i < model->numtextures; i++ )
|
||||
for( int i = 0; i < model->numtextures; i++ )
|
||||
{
|
||||
tx = model->textures[i];
|
||||
if( tx->gl_texturenum == index )
|
||||
@@ -161,7 +159,7 @@ static void CL_UpdateStudioTexture( cl_entity_t *entity, mstudiotexture_t *ptext
|
||||
texture_t *tx = NULL;
|
||||
char texname[128], name[128], mdlname[128];
|
||||
const char *origtexname;
|
||||
int i, index;
|
||||
int index;
|
||||
size_t size;
|
||||
byte paletteBackup[768];
|
||||
byte *raw, *pal;
|
||||
@@ -180,7 +178,7 @@ static void CL_UpdateStudioTexture( cl_entity_t *entity, mstudiotexture_t *ptext
|
||||
return; // couldn't find texture
|
||||
|
||||
// search for pixels
|
||||
for( i = 0; i < entity->model->numtextures; i++ )
|
||||
for( int i = 0; i < entity->model->numtextures; i++ )
|
||||
{
|
||||
tx = entity->model->textures[i];
|
||||
if( tx->gl_texturenum == index )
|
||||
@@ -259,12 +257,10 @@ Release remap info per entity
|
||||
*/
|
||||
static void CL_FreeRemapInfo( remap_info_t *info )
|
||||
{
|
||||
int i;
|
||||
|
||||
Assert( info != NULL );
|
||||
|
||||
// release all colormap texture copies
|
||||
for( i = 0; i < info->numtextures; i++ )
|
||||
for( int i = 0; i < info->numtextures; i++ )
|
||||
{
|
||||
if( info->ptexture != NULL )
|
||||
{
|
||||
@@ -438,11 +434,9 @@ Release all remap infos
|
||||
*/
|
||||
void CL_ClearAllRemaps( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( clgame.remap_info )
|
||||
{
|
||||
for( i = 0; i < clgame.maxRemapInfos; i++ )
|
||||
for( int i = 0; i < clgame.maxRemapInfos; i++ )
|
||||
{
|
||||
if( clgame.remap_info[i] )
|
||||
CL_FreeRemapInfo( clgame.remap_info[i] );
|
||||
|
||||
@@ -50,9 +50,7 @@ SCR_DrawFPS
|
||||
*/
|
||||
void SCR_DrawFPS( int height )
|
||||
{
|
||||
float calc;
|
||||
rgba_t color;
|
||||
double newtime;
|
||||
static double nexttime = 0, lasttime = 0;
|
||||
static double framerate = 0;
|
||||
static int framecount = 0;
|
||||
@@ -73,7 +71,7 @@ void SCR_DrawFPS( int height )
|
||||
default: return;
|
||||
}
|
||||
|
||||
newtime = Platform_DoubleTime();
|
||||
double newtime = Platform_DoubleTime();
|
||||
if( newtime >= nexttime )
|
||||
{
|
||||
framerate = framecount / (newtime - lasttime);
|
||||
@@ -82,7 +80,7 @@ void SCR_DrawFPS( int height )
|
||||
framecount = 0;
|
||||
}
|
||||
|
||||
calc = framerate;
|
||||
float calc = framerate;
|
||||
framecount++;
|
||||
|
||||
if( calc < 1.0f )
|
||||
@@ -120,15 +118,13 @@ Draw local player position, angles and velocity
|
||||
void SCR_DrawPos( void )
|
||||
{
|
||||
static char msg[MAX_SYSPATH];
|
||||
float speed;
|
||||
cl_entity_t *ent;
|
||||
rgba_t color;
|
||||
|
||||
if( cls.state != ca_active || !cl_showpos.value || cl.background )
|
||||
return;
|
||||
|
||||
ent = CL_GetLocalPlayer();
|
||||
speed = VectorLength( cl.simvel );
|
||||
cl_entity_t *ent = CL_GetLocalPlayer();
|
||||
float speed = VectorLength( cl.simvel );
|
||||
|
||||
Q_snprintf( msg, MAX_SYSPATH,
|
||||
"pos: %.2f %.2f %.2f\n"
|
||||
@@ -153,14 +149,13 @@ SCR_DrawEnts
|
||||
void SCR_DrawEnts( void )
|
||||
{
|
||||
rgba_t color = { 255, 255, 255, 255 };
|
||||
int i;
|
||||
|
||||
if( cls.state != ca_active || !cl_showents.value || ( cl.maxclients > 1 && !cls.demoplayback ))
|
||||
return;
|
||||
|
||||
// this probably better hook CL_AddVisibleEntities
|
||||
// as entities might get added by client.dll
|
||||
for( i = 0; i < clgame.maxEntities; i++ )
|
||||
for( int i = 0; i < clgame.maxEntities; i++ )
|
||||
{
|
||||
const cl_entity_t *ent = &clgame.entities[i];
|
||||
string msg;
|
||||
@@ -241,12 +236,12 @@ void SCR_DrawUserCmd( void )
|
||||
};
|
||||
cl_font_t *font = Con_GetCurFont();
|
||||
string msg;
|
||||
int i, ypos = 100;
|
||||
int ypos = 100;
|
||||
|
||||
if( cls.state != ca_active || !cl_showcmd.value )
|
||||
return;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( buttons ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( buttons ); i++ )
|
||||
{
|
||||
rgba_t rgba;
|
||||
|
||||
@@ -280,7 +275,6 @@ same as r_speeds but for network channel
|
||||
void SCR_NetSpeeds( void )
|
||||
{
|
||||
static char msg[MAX_SYSPATH];
|
||||
int x, y;
|
||||
float time = cl.mtime[0];
|
||||
static int min_svfps = 100;
|
||||
static int max_svfps = 0;
|
||||
@@ -326,8 +320,8 @@ void SCR_NetSpeeds( void )
|
||||
Q_memprint( cls.netchan.total_sended )
|
||||
);
|
||||
|
||||
x = refState.width - 320 * font->scale;
|
||||
y = 384;
|
||||
int x = refState.width - 320 * font->scale;
|
||||
int y = 384;
|
||||
|
||||
MakeRGBA( color, 255, 255, 255, 255 );
|
||||
CL_DrawString( x, y, msg, color, font, FONT_DRAW_RESETCOLORONLF );
|
||||
@@ -347,12 +341,11 @@ void SCR_RSpeeds( void )
|
||||
|
||||
if( ref.dllFuncs.R_SpeedsMessage( msg, sizeof( msg )))
|
||||
{
|
||||
int x, y;
|
||||
rgba_t color;
|
||||
cl_font_t *font = Con_GetCurFont();
|
||||
|
||||
x = refState.width - 340 * font->scale;
|
||||
y = 64;
|
||||
int x = refState.width - 340 * font->scale;
|
||||
int y = 64;
|
||||
|
||||
MakeRGBA( color, 255, 255, 255, 255 );
|
||||
CL_DrawString( x, y, msg, color, font, FONT_DRAW_RESETCOLORONLF );
|
||||
@@ -386,11 +379,10 @@ static void VID_WriteOverviewScript( void )
|
||||
{
|
||||
ref_overview_t *ov = &clgame.overView;
|
||||
string filename;
|
||||
file_t *f;
|
||||
|
||||
Q_snprintf( filename, sizeof( filename ), "overviews/%s.txt", clgame.mapname );
|
||||
|
||||
f = FS_Open( filename, "w", false );
|
||||
file_t *f = FS_Open( filename, "w", false );
|
||||
if( !f )
|
||||
{
|
||||
Con_Printf( S_ERROR "%s: can't open %s for write\n", __func__, filename );
|
||||
@@ -586,7 +578,6 @@ void SCR_TileClear( void )
|
||||
{
|
||||
int i, top, bottom, left, right, texnum;
|
||||
dirty_t clear;
|
||||
float tw, th;
|
||||
|
||||
if( likely( scr_viewsize.value >= 120 ))
|
||||
return; // full screen rendering
|
||||
@@ -634,8 +625,8 @@ void SCR_TileClear( void )
|
||||
left = clgame.viewport[0];
|
||||
right = left + clgame.viewport[2] - 1;
|
||||
|
||||
tw = REF_GET_PARM( PARM_TEX_SRC_WIDTH, texnum );
|
||||
th = REF_GET_PARM( PARM_TEX_SRC_HEIGHT, texnum );
|
||||
float tw = REF_GET_PARM( PARM_TEX_SRC_WIDTH, texnum );
|
||||
float th = REF_GET_PARM( PARM_TEX_SRC_HEIGHT, texnum );
|
||||
|
||||
if( clear.y1 < top )
|
||||
{
|
||||
@@ -749,11 +740,9 @@ void SCR_LoadCreditsFont( void )
|
||||
// copy font size for client.dll
|
||||
if( success )
|
||||
{
|
||||
int i;
|
||||
|
||||
clgame.scrInfo.iCharHeight = cls.creditsFont.charHeight;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( cls.creditsFont.charWidths ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( cls.creditsFont.charWidths ); i++ )
|
||||
clgame.scrInfo.charWidths[i] = cls.creditsFont.charWidths[i];
|
||||
}
|
||||
else Con_DPrintf( S_ERROR "failed to load HUD font\n" );
|
||||
|
||||
@@ -27,10 +27,10 @@ GNU General Public License for more details.
|
||||
static void CL_AdjustSprayDimensions( int *width, int *height )
|
||||
{
|
||||
float aspect = (float)( *width ) / (float)( *height );
|
||||
int h, w;
|
||||
for( h = (( *height ) / 16 ) * 16; h >= 16; h -= 16 )
|
||||
|
||||
for( int h = (( *height ) / 16 ) * 16; h >= 16; h -= 16 )
|
||||
{
|
||||
w = ((int)( h * aspect ) / 16 ) * 16;
|
||||
int w = ((int)( h * aspect ) / 16 ) * 16;
|
||||
if( w < 16 || w > *width )
|
||||
continue;
|
||||
|
||||
@@ -107,7 +107,6 @@ qboolean CL_ConvertImageToWAD3( const char *filename )
|
||||
{
|
||||
qboolean is_indexed_img;
|
||||
int width = 0, height = 0;
|
||||
int i;
|
||||
byte palette[SPRAY_PALETTE_BYTES];
|
||||
byte *indexed = NULL;
|
||||
rgbdata_t *image = NULL;
|
||||
@@ -122,7 +121,7 @@ qboolean CL_ConvertImageToWAD3( const char *filename )
|
||||
if( is_indexed_img )
|
||||
{
|
||||
// copy bmp palette from rgba to rgb
|
||||
for( i = 0; i < 256; ++i )
|
||||
for( int i = 0; i < 256; ++i )
|
||||
{
|
||||
palette[i * 3 + 0] = image->palette[i * 4 + 0]; // R
|
||||
palette[i * 3 + 1] = image->palette[i * 4 + 1]; // G
|
||||
@@ -141,7 +140,7 @@ qboolean CL_ConvertImageToWAD3( const char *filename )
|
||||
// set index 255 for transparent pixels in rgba images
|
||||
if( image->type == PF_RGBA_32 )
|
||||
{
|
||||
for( i = 0; i < width * height; ++i )
|
||||
for( int i = 0; i < width * height; ++i )
|
||||
{
|
||||
if( image->buffer[i * 4 + 3] <= SPRAY_ALPHA_THRESHOLD )
|
||||
quant->buffer[i] = 255;
|
||||
|
||||
@@ -33,11 +33,7 @@ assume pModel is valid
|
||||
mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw )
|
||||
{
|
||||
msprite_t *psprite;
|
||||
mspritegroup_t *pspritegroup;
|
||||
mspriteframe_t *pspriteframe = NULL;
|
||||
float *pintervals, fullinterval;
|
||||
int i, numframes;
|
||||
float targettime;
|
||||
|
||||
if( !pModel )
|
||||
return NULL;
|
||||
@@ -61,14 +57,15 @@ mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw )
|
||||
}
|
||||
else if( psprite->frames[frame].type == SPR_GROUP )
|
||||
{
|
||||
pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr;
|
||||
pintervals = pspritegroup->intervals;
|
||||
numframes = pspritegroup->numframes;
|
||||
fullinterval = pintervals[numframes - 1];
|
||||
mspritegroup_t *pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr;
|
||||
float *pintervals = pspritegroup->intervals;
|
||||
int numframes = pspritegroup->numframes;
|
||||
float fullinterval = pintervals[numframes - 1];
|
||||
|
||||
// when loading in Mod_LoadSpriteGroup, we guaranteed all interval values
|
||||
// are positive, so we don't have to worry about division by zero
|
||||
targettime = cl.time - ((int)( cl.time / fullinterval )) * fullinterval;
|
||||
float targettime = cl.time - ((int)( cl.time / fullinterval )) * fullinterval;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < ( numframes - 1 ); i++ )
|
||||
{
|
||||
@@ -82,7 +79,7 @@ mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw )
|
||||
int angleframe = (int)( Q_rint(( refState.viewangles[1] - yaw + 45.0f ) / 360 * 8 ) - 4 ) & 7;
|
||||
|
||||
// e.g. doom-style sprite monsters
|
||||
pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr;
|
||||
mspritegroup_t *pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr;
|
||||
pspriteframe = pspritegroup->frames[angleframe];
|
||||
}
|
||||
|
||||
@@ -203,16 +200,13 @@ static const byte *Mod_SpriteLoadFrame( model_t *mod, const void *pin, mspritefr
|
||||
|
||||
static const byte *Mod_SpriteLoadGroup( model_t *mod, const void *pin, mspriteframe_t **ppframe, int framenum )
|
||||
{
|
||||
const dspritegroup_t *pingroup;
|
||||
const dspritegroup_t *pingroup = (const dspritegroup_t *)pin;
|
||||
mspritegroup_t *pspritegroup;
|
||||
const dspriteinterval_t *pin_intervals;
|
||||
float *poutintervals;
|
||||
int i, groupsize, numframes;
|
||||
int groupsize, numframes = pingroup->numframes;
|
||||
const void *ptemp;
|
||||
|
||||
pingroup = (const dspritegroup_t *)pin;
|
||||
numframes = pingroup->numframes;
|
||||
|
||||
groupsize = sizeof( mspritegroup_t ) + ( numframes - 1 ) * sizeof( pspritegroup->frames[0] );
|
||||
pspritegroup = Mem_Calloc( mod->mempool, groupsize );
|
||||
pspritegroup->numframes = numframes;
|
||||
@@ -222,7 +216,7 @@ static const byte *Mod_SpriteLoadGroup( model_t *mod, const void *pin, mspritefr
|
||||
poutintervals = Mem_Calloc( mod->mempool, numframes * sizeof( float ));
|
||||
pspritegroup->intervals = poutintervals;
|
||||
|
||||
for( i = 0; i < numframes; i++ )
|
||||
for( int i = 0; i < numframes; i++ )
|
||||
{
|
||||
*poutintervals = pin_intervals->interval;
|
||||
if( *poutintervals <= 0.0f )
|
||||
@@ -232,7 +226,7 @@ static const byte *Mod_SpriteLoadGroup( model_t *mod, const void *pin, mspritefr
|
||||
}
|
||||
|
||||
ptemp = (const void *)pin_intervals;
|
||||
for( i = 0; i < numframes; i++ )
|
||||
for( int i = 0; i < numframes; i++ )
|
||||
{
|
||||
ptemp = Mod_SpriteLoadFrame( mod, ptemp, &pspritegroup->frames[i], framenum * 10 + i );
|
||||
}
|
||||
@@ -330,13 +324,12 @@ void Mod_SpriteLoadTextures( model_t *mod, const void *buffer )
|
||||
void Mod_SpriteUnloadTextures( void *data )
|
||||
{
|
||||
msprite_t *psprite = data;
|
||||
int i;
|
||||
|
||||
if( !data )
|
||||
return;
|
||||
|
||||
// release all textures
|
||||
for( i = 0; i < psprite->numframes; i++ )
|
||||
for( int i = 0; i < psprite->numframes; i++ )
|
||||
{
|
||||
if( !psprite->frames[i].frameptr )
|
||||
continue;
|
||||
@@ -348,9 +341,8 @@ void Mod_SpriteUnloadTextures( void *data )
|
||||
else
|
||||
{
|
||||
mspritegroup_t *pspritegroup = (mspritegroup_t *)psprite->frames[i].frameptr;
|
||||
int j;
|
||||
|
||||
for( j = 0; j < pspritegroup->numframes; j++ )
|
||||
for( int j = 0; j < pspritegroup->numframes; j++ )
|
||||
{
|
||||
if( pspritegroup->frames[j] )
|
||||
ref.dllFuncs.GL_FreeTexture( pspritegroup->frames[j]->gl_texturenum );
|
||||
|
||||
@@ -120,21 +120,20 @@ void CL_AddClientResources( void )
|
||||
{
|
||||
const char *snd;
|
||||
char filepath[MAX_QPATH];
|
||||
int i;
|
||||
|
||||
// don't request resources from localhost or in quake-compatibility mode
|
||||
if( cl.maxclients <= 1 || Host_IsQuakeCompatible( ))
|
||||
return;
|
||||
|
||||
// check sprites first
|
||||
for( i = 0; i < ARRAYSIZE( cl_default_sprites ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( cl_default_sprites ); i++ )
|
||||
{
|
||||
if( !FS_FileExists( cl_default_sprites[i], false ))
|
||||
CL_AddClientResource( cl_default_sprites[i], t_model );
|
||||
}
|
||||
|
||||
// then check sounds
|
||||
for( i = 0; ( snd = SoundList_Get( BouncePlayerShell, i )); i++ )
|
||||
for( int i = 0; ( snd = SoundList_Get( BouncePlayerShell, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
@@ -142,7 +141,7 @@ void CL_AddClientResources( void )
|
||||
CL_AddClientResource( snd, t_sound );
|
||||
}
|
||||
|
||||
for( i = 0; ( snd = SoundList_Get( BounceWeaponShell, i )); i++ )
|
||||
for( int i = 0; ( snd = SoundList_Get( BounceWeaponShell, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
@@ -150,7 +149,7 @@ void CL_AddClientResources( void )
|
||||
CL_AddClientResource( snd, t_sound );
|
||||
}
|
||||
|
||||
for( i = 0; ( snd = SoundList_Get( Explode, i )); i++ )
|
||||
for( int i = 0; ( snd = SoundList_Get( Explode, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
@@ -159,7 +158,7 @@ void CL_AddClientResources( void )
|
||||
}
|
||||
|
||||
#if 0 // ric sounds was precached by server-side
|
||||
for( i = 0; ( snd = SoundList_Get( Ricochet, i )); i++ )
|
||||
for( int i = 0; ( snd = SoundList_Get( Ricochet, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
@@ -177,11 +176,9 @@ CL_ClearTempEnts
|
||||
*/
|
||||
static void CL_ClearTempEnts( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !cl_tempents ) return;
|
||||
|
||||
for( i = 0; i < GI->max_tents - 1; i++ )
|
||||
for( int i = 0; i < GI->max_tents - 1; i++ )
|
||||
{
|
||||
cl_tempents[i].next = &cl_tempents[i+1];
|
||||
cl_tempents[i].entity.trivial_accept = INVALID_HANDLE;
|
||||
@@ -270,14 +267,12 @@ play collide sound
|
||||
*/
|
||||
static void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
|
||||
{
|
||||
float fvol;
|
||||
const char *soundname = NULL;
|
||||
qboolean isshellcasing = false;
|
||||
int zvel;
|
||||
|
||||
Assert( pTemp != NULL );
|
||||
|
||||
fvol = 0.8f;
|
||||
float fvol = 0.8f;
|
||||
|
||||
switch( pTemp->hitSound )
|
||||
{
|
||||
@@ -315,7 +310,7 @@ static void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
|
||||
if( !soundname )
|
||||
return;
|
||||
|
||||
zvel = abs( pTemp->entity.baseline.origin[2] );
|
||||
int zvel = abs( pTemp->entity.baseline.origin[2] );
|
||||
|
||||
// only play one out of every n
|
||||
if( isshellcasing )
|
||||
@@ -333,7 +328,6 @@ static void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
|
||||
if( damp > 0.0f )
|
||||
{
|
||||
int pitch;
|
||||
sound_t handle;
|
||||
|
||||
if( isshellcasing )
|
||||
fvol *= Q_min( 1.0f, ((float)zvel) / 350.0f );
|
||||
@@ -343,7 +337,7 @@ static void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
|
||||
pitch = COM_RandomLong( 95, 105 );
|
||||
else pitch = PITCH_NORM;
|
||||
|
||||
handle = S_RegisterSound( soundname );
|
||||
sound_t handle = S_RegisterSound( soundname );
|
||||
S_StartSound( pTemp->entity.origin, -(pTemp - cl_tempents), CHAN_BODY, handle, fvol, ATTN_NORM, pitch, SND_STOP_LOOPING );
|
||||
}
|
||||
}
|
||||
@@ -573,7 +567,6 @@ void GAME_EXPORT R_FizzEffect( cl_entity_t *ent, int modelIndex, int density )
|
||||
model_t *mod = CL_ModelHandle( modelIndex );
|
||||
vec3_t volume, mins, maxs;
|
||||
vec2_t speed;
|
||||
int i;
|
||||
|
||||
if( !ent || !ent->model || !modelIndex || !mod )
|
||||
return;
|
||||
@@ -592,7 +585,7 @@ void GAME_EXPORT R_FizzEffect( cl_entity_t *ent, int modelIndex, int density )
|
||||
|
||||
VectorSubtract( maxs, mins, volume );
|
||||
|
||||
for( i = 0; i <= density; i++ )
|
||||
for( int i = 0; i <= density; i++ )
|
||||
{
|
||||
TEMPENTITY *tent;
|
||||
vec3_t origin;
|
||||
@@ -628,16 +621,13 @@ Create bubbles
|
||||
void GAME_EXPORT R_Bubbles( const vec3_t mins, const vec3_t maxs, float height, int modelIndex, int count, float speed )
|
||||
{
|
||||
TEMPENTITY *pTemp;
|
||||
float sine, cosine;
|
||||
float angle, zspeed;
|
||||
vec3_t origin;
|
||||
model_t *mod;
|
||||
int i;
|
||||
|
||||
if(( mod = CL_ModelHandle( modelIndex )) == NULL )
|
||||
return;
|
||||
|
||||
for ( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
origin[0] = COM_RandomLong( mins[0], maxs[0] );
|
||||
origin[1] = COM_RandomLong( mins[1], maxs[1] );
|
||||
@@ -649,10 +639,11 @@ void GAME_EXPORT R_Bubbles( const vec3_t mins, const vec3_t maxs, float height,
|
||||
|
||||
pTemp->x = origin[0];
|
||||
pTemp->y = origin[1];
|
||||
angle = COM_RandomFloat( -M_PI, M_PI );
|
||||
float sine, cosine;
|
||||
float angle = COM_RandomFloat( -M_PI, M_PI );
|
||||
SinCos( angle, &sine, &cosine );
|
||||
|
||||
zspeed = COM_RandomLong( 80, 140 );
|
||||
float zspeed = COM_RandomLong( 80, 140 );
|
||||
VectorSet( pTemp->entity.baseline.origin, speed * cosine, speed * sine, zspeed );
|
||||
pTemp->die = cl.time + ((height - (origin[2] - mins[2])) / zspeed) - 0.1f;
|
||||
pTemp->entity.curstate.frame = COM_RandomLong( 0, pTemp->frameMax );
|
||||
@@ -674,18 +665,15 @@ Create bubble trail
|
||||
void GAME_EXPORT R_BubbleTrail( const vec3_t start, const vec3_t end, float height, int modelIndex, int count, float speed )
|
||||
{
|
||||
TEMPENTITY *pTemp;
|
||||
float sine, cosine, zspeed;
|
||||
float dist, angle;
|
||||
vec3_t origin;
|
||||
model_t *mod;
|
||||
int i;
|
||||
|
||||
if(( mod = CL_ModelHandle( modelIndex )) == NULL )
|
||||
return;
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
dist = COM_RandomFloat( 0, 1.0 );
|
||||
float dist = COM_RandomFloat( 0, 1.0 );
|
||||
VectorLerp( start, dist, end, origin );
|
||||
pTemp = CL_TempEntAlloc( origin, mod );
|
||||
if( !pTemp ) return;
|
||||
@@ -694,10 +682,11 @@ void GAME_EXPORT R_BubbleTrail( const vec3_t start, const vec3_t end, float heig
|
||||
|
||||
pTemp->x = origin[0];
|
||||
pTemp->y = origin[1];
|
||||
angle = COM_RandomFloat( -M_PI, M_PI );
|
||||
float sine, cosine;
|
||||
float angle = COM_RandomFloat( -M_PI, M_PI );
|
||||
SinCos( angle, &sine, &cosine );
|
||||
|
||||
zspeed = COM_RandomLong( 80, 140 );
|
||||
float zspeed = COM_RandomLong( 80, 140 );
|
||||
VectorSet( pTemp->entity.baseline.origin, speed * cosine, speed * sine, zspeed );
|
||||
pTemp->die = cl.time + ((height - (origin[2] - start[2])) / zspeed) - 0.1f;
|
||||
pTemp->entity.curstate.frame = COM_RandomLong( 0, pTemp->frameMax );
|
||||
@@ -848,11 +837,9 @@ Do muzzleflash
|
||||
void GAME_EXPORT R_MuzzleFlash( const vec3_t pos, int type )
|
||||
{
|
||||
TEMPENTITY *pTemp;
|
||||
int index;
|
||||
float scale;
|
||||
|
||||
index = ( type % 10 ) % MAX_MUZZLEFLASH;
|
||||
scale = ( type / 10 ) * 0.1f;
|
||||
int index = ( type % 10 ) % MAX_MUZZLEFLASH;
|
||||
float scale = ( type / 10 ) * 0.1f;
|
||||
if( scale == 0.0f ) scale = 0.5f;
|
||||
|
||||
if( !cl_sprite_muzzleflash[index] )
|
||||
@@ -887,15 +874,12 @@ and some blood drops. This is high-priority tent
|
||||
void GAME_EXPORT R_BloodSprite( const vec3_t org, int colorIndex, int modelIndex, int modelIndex2, float size )
|
||||
{
|
||||
model_t *pModel, *pModel2;
|
||||
int impactindex;
|
||||
int spatterindex;
|
||||
int i, splatter;
|
||||
TEMPENTITY *pTemp;
|
||||
vec3_t pos;
|
||||
|
||||
colorIndex += COM_RandomLong( 1, 3 );
|
||||
impactindex = colorIndex;
|
||||
spatterindex = colorIndex - 1;
|
||||
int impactindex = colorIndex;
|
||||
int spatterindex = colorIndex - 1;
|
||||
|
||||
// validate the model first
|
||||
if(( pModel = CL_ModelHandle( modelIndex )) != NULL )
|
||||
@@ -926,9 +910,9 @@ void GAME_EXPORT R_BloodSprite( const vec3_t org, int colorIndex, int modelIndex
|
||||
// validate the model first
|
||||
if(( pModel2 = CL_ModelHandle( modelIndex2 )) != NULL )
|
||||
{
|
||||
splatter = size + ( COM_RandomLong( 1, 8 ) + COM_RandomLong( 1, 8 ));
|
||||
int splatter = size + ( COM_RandomLong( 1, 8 ) + COM_RandomLong( 1, 8 ));
|
||||
|
||||
for( i = 0; i < splatter; i++ )
|
||||
for( int i = 0; i < splatter; i++ )
|
||||
{
|
||||
// create blood drips
|
||||
if(( pTemp = CL_TempEntAlloc( org, pModel2 )) != NULL )
|
||||
@@ -973,13 +957,11 @@ void GAME_EXPORT R_BreakModel( const vec3_t pos, const vec3_t size, const vec3_t
|
||||
{
|
||||
TEMPENTITY *pTemp;
|
||||
model_t *pmodel;
|
||||
char type;
|
||||
int i, j;
|
||||
|
||||
if(( pmodel = CL_ModelHandle( modelIndex )) == NULL )
|
||||
return;
|
||||
|
||||
type = flags & BREAK_TYPEMASK;
|
||||
char type = flags & BREAK_TYPEMASK;
|
||||
|
||||
if( count == 0 )
|
||||
{
|
||||
@@ -990,9 +972,10 @@ void GAME_EXPORT R_BreakModel( const vec3_t pos, const vec3_t size, const vec3_t
|
||||
// limit to 100 pieces
|
||||
if( count > 100 ) count = 100;
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
vec3_t vecSpot;
|
||||
int j;
|
||||
|
||||
for( j = 0; j < 32; j++ )
|
||||
{
|
||||
@@ -1209,14 +1192,12 @@ apply params for exploding sprite
|
||||
*/
|
||||
void GAME_EXPORT R_Sprite_Explode( TEMPENTITY *pTemp, float scale, int flags )
|
||||
{
|
||||
qboolean noadditive, drawalpha, rotate;
|
||||
|
||||
if( !pTemp )
|
||||
return;
|
||||
|
||||
noadditive = FBitSet( flags, TE_EXPLFLAG_NOADDITIVE );
|
||||
drawalpha = FBitSet( flags, TE_EXPLFLAG_DRAWALPHA );
|
||||
rotate = FBitSet( flags, TE_EXPLFLAG_ROTATE );
|
||||
qboolean noadditive = FBitSet( flags, TE_EXPLFLAG_NOADDITIVE );
|
||||
qboolean drawalpha = FBitSet( flags, TE_EXPLFLAG_DRAWALPHA );
|
||||
qboolean rotate = FBitSet( flags, TE_EXPLFLAG_ROTATE );
|
||||
|
||||
pTemp->entity.curstate.scale = scale;
|
||||
pTemp->entity.baseline.origin[2] = 8.0f;
|
||||
@@ -1242,11 +1223,9 @@ apply params for smoke sprite
|
||||
*/
|
||||
void GAME_EXPORT R_Sprite_Smoke( TEMPENTITY *pTemp, float scale )
|
||||
{
|
||||
int iColor;
|
||||
|
||||
if( !pTemp ) return;
|
||||
|
||||
iColor = COM_RandomLong( 20, 35 );
|
||||
int iColor = COM_RandomLong( 20, 35 );
|
||||
pTemp->entity.curstate.rendermode = kRenderTransAlpha;
|
||||
pTemp->entity.curstate.renderfx = kRenderFxNone;
|
||||
pTemp->entity.baseline.origin[2] = 30;
|
||||
@@ -1262,7 +1241,6 @@ static void R_Spray_Generic( const char *func, const vec3_t pos, const vec3_t di
|
||||
model_t *mod = CL_ModelHandle( modelIndex );
|
||||
float noise = spread / 100.0f;
|
||||
float znoise = noise * 1.5f;
|
||||
int i;
|
||||
|
||||
znoise = Q_min( 1.0f, znoise );
|
||||
|
||||
@@ -1272,10 +1250,9 @@ static void R_Spray_Generic( const char *func, const vec3_t pos, const vec3_t di
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
TEMPENTITY *tent = CL_TempEntAlloc( pos, mod );
|
||||
float rand_speed;
|
||||
vec3_t noise_vec, vout;
|
||||
|
||||
if( !tent )
|
||||
@@ -1290,7 +1267,7 @@ static void R_Spray_Generic( const char *func, const vec3_t pos, const vec3_t di
|
||||
noise_vec[0] = COM_RandomFloat( -noise, noise );
|
||||
noise_vec[1] = COM_RandomFloat( -noise, noise );
|
||||
noise_vec[2] = COM_RandomFloat( 0.0f, znoise );
|
||||
rand_speed = COM_RandomFloat( speed * 0.8f, speed * 1.2f );
|
||||
float rand_speed = COM_RandomFloat( speed * 0.8f, speed * 1.2f );
|
||||
|
||||
VectorAdd( dir, noise_vec, vout );
|
||||
VectorScale( vout, rand_speed, tent->entity.baseline.origin );
|
||||
@@ -1361,7 +1338,6 @@ void GAME_EXPORT R_Sprite_Trail( int type, vec3_t start, vec3_t end, int modelIn
|
||||
TEMPENTITY *pTemp;
|
||||
vec3_t delta, dir;
|
||||
model_t *pmodel;
|
||||
int i;
|
||||
|
||||
if(( pmodel = CL_ModelHandle( modelIndex )) == NULL )
|
||||
return;
|
||||
@@ -1371,7 +1347,7 @@ void GAME_EXPORT R_Sprite_Trail( int type, vec3_t start, vec3_t end, int modelIn
|
||||
|
||||
amp /= 256.0f;
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
vec3_t pos, vel;
|
||||
|
||||
@@ -1412,9 +1388,7 @@ void GAME_EXPORT R_FunnelSprite( const vec3_t org, int modelIndex, int reverse )
|
||||
{
|
||||
TEMPENTITY *pTemp;
|
||||
vec3_t dir, dest;
|
||||
float dist, vel;
|
||||
model_t *pmodel;
|
||||
int i, j;
|
||||
|
||||
if(( pmodel = CL_ModelHandle( modelIndex )) == NULL )
|
||||
{
|
||||
@@ -1422,9 +1396,9 @@ void GAME_EXPORT R_FunnelSprite( const vec3_t org, int modelIndex, int reverse )
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = -8; i < 8; i++ )
|
||||
for( int i = -8; i < 8; i++ )
|
||||
{
|
||||
for( j = -8; j < 8; j++ )
|
||||
for( int j = -8; j < 8; j++ )
|
||||
{
|
||||
pTemp = CL_TempEntAlloc( org, pmodel );
|
||||
if( !pTemp ) return;
|
||||
@@ -1451,9 +1425,9 @@ void GAME_EXPORT R_FunnelSprite( const vec3_t org, int modelIndex, int reverse )
|
||||
pTemp->entity.curstate.framerate = COM_RandomFloat( 0.1f, 0.4f );
|
||||
pTemp->flags = FTENT_ROTATE|FTENT_FADEOUT;
|
||||
|
||||
vel = dest[2] / 8.0f;
|
||||
float vel = dest[2] / 8.0f;
|
||||
if( vel < 64.0f ) vel = 64.0f;
|
||||
dist = VectorNormalizeLength( dir );
|
||||
float dist = VectorNormalizeLength( dir );
|
||||
vel += COM_RandomFloat( 64.0f, 128.0f );
|
||||
VectorScale( dir, vel, pTemp->entity.baseline.origin );
|
||||
pTemp->die = cl.time + (dist / vel) - 0.5f;
|
||||
@@ -1484,8 +1458,7 @@ Make a random ricochet sound
|
||||
*/
|
||||
static void R_RicochetSoundByName( const vec3_t pos, const char *name )
|
||||
{
|
||||
sound_t handle;
|
||||
handle = S_RegisterSound( name );
|
||||
sound_t handle = S_RegisterSound( name );
|
||||
S_StartSound( pos, 0, CHAN_AUTO, handle, VOL_NORM, 1.0, 100, 0 );
|
||||
}
|
||||
|
||||
@@ -1562,10 +1535,9 @@ Spherical shower of models, picks from set
|
||||
void GAME_EXPORT R_TempSphereModel( const vec3_t pos, float speed, float life, int count, int modelIndex )
|
||||
{
|
||||
TEMPENTITY *pTemp;
|
||||
int i;
|
||||
|
||||
// create temp models
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
pTemp = CL_TempEntAlloc( pos, CL_ModelHandle( modelIndex ));
|
||||
if( !pTemp ) return;
|
||||
@@ -1609,8 +1581,6 @@ Create an explosion (scale is magnitude)
|
||||
*/
|
||||
void GAME_EXPORT R_Explosion( vec3_t pos, int model, float scale, float framerate, int flags )
|
||||
{
|
||||
sound_t hSound;
|
||||
|
||||
if( scale != 0.0f )
|
||||
{
|
||||
// create explosion sprite
|
||||
@@ -1621,10 +1591,8 @@ void GAME_EXPORT R_Explosion( vec3_t pos, int model, float scale, float framerat
|
||||
|
||||
if( !FBitSet( flags, TE_EXPLFLAG_NODLIGHTS ))
|
||||
{
|
||||
dlight_t *dl;
|
||||
|
||||
// big flash
|
||||
dl = CL_AllocDlight( 0 );
|
||||
dlight_t *dl = CL_AllocDlight( 0 );
|
||||
VectorCopy( pos, dl->origin );
|
||||
dl->radius = 200;
|
||||
dl->color.r = 250;
|
||||
@@ -1650,7 +1618,7 @@ void GAME_EXPORT R_Explosion( vec3_t pos, int model, float scale, float framerat
|
||||
const char *name = SoundList_GetRandom( Explode );
|
||||
if( name )
|
||||
{
|
||||
hSound = S_RegisterSound( name );
|
||||
sound_t hSound = S_RegisterSound( name );
|
||||
S_StartSound( pos, 0, CHAN_STATIC, hSound, VOL_NORM, 0.3f, PITCH_NORM, 0 );
|
||||
}
|
||||
}
|
||||
@@ -1669,14 +1637,13 @@ void GAME_EXPORT R_PlayerSprites( int client, int modelIndex, int count, int siz
|
||||
cl_entity_t *pEnt;
|
||||
vec3_t position;
|
||||
vec3_t dir;
|
||||
int i;
|
||||
|
||||
pEnt = CL_GetEntityByIndex( client );
|
||||
|
||||
if( !pEnt || !pEnt->player )
|
||||
return;
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
VectorCopy( pEnt->origin, position );
|
||||
position[0] += COM_RandomFloat( -10.0f, 10.0f );
|
||||
@@ -1729,14 +1696,12 @@ void GAME_EXPORT R_FireField( float *org, int radius, int modelIndex, int count,
|
||||
{
|
||||
TEMPENTITY *pTemp;
|
||||
model_t *pmodel;
|
||||
float time;
|
||||
vec3_t pos;
|
||||
int i;
|
||||
|
||||
if(( pmodel = CL_ModelHandle( modelIndex )) == NULL )
|
||||
return;
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
VectorCopy( org, pos );
|
||||
pos[0] += COM_RandomFloat( -radius, radius );
|
||||
@@ -1767,7 +1732,7 @@ void GAME_EXPORT R_FireField( float *org, int radius, int modelIndex, int count,
|
||||
}
|
||||
|
||||
pTemp->entity.curstate.framerate = COM_RandomFloat( 0.75f, 1.25f );
|
||||
time = life + COM_RandomFloat( -0.25f, 0.5f );
|
||||
float time = life + COM_RandomFloat( -0.25f, 0.5f );
|
||||
pTemp->die = cl.time + time;
|
||||
|
||||
if( pTemp->frameMax > 1 )
|
||||
@@ -1805,12 +1770,11 @@ void GAME_EXPORT R_MultiGunshot( const vec3_t org, const vec3_t dir, const vec3_
|
||||
pmtrace_t trace;
|
||||
vec3_t right, up;
|
||||
vec3_t vecSrc, vecDir, vecEnd;
|
||||
int i, j, decalIndex;
|
||||
|
||||
VectorVectors( dir, right, up );
|
||||
VectorCopy( org, vecSrc );
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
// get circular gaussian spread
|
||||
float x, y, z;
|
||||
@@ -1820,7 +1784,7 @@ void GAME_EXPORT R_MultiGunshot( const vec3_t org, const vec3_t dir, const vec3_
|
||||
z = x * x + y * y;
|
||||
} while( z > 1.0f );
|
||||
|
||||
for( j = 0; j < 3; j++ )
|
||||
for( int j = 0; j < 3; j++ )
|
||||
{
|
||||
vecDir[j] = dir[j] + x * noise[0] * right[j] + y * noise[1] * up[j];
|
||||
vecEnd[j] = vecSrc[j] + 4096.0f * vecDir[j];
|
||||
@@ -1842,7 +1806,7 @@ void GAME_EXPORT R_MultiGunshot( const vec3_t org, const vec3_t dir, const vec3_
|
||||
if( pe && ( pe->solid == SOLID_BSP || pe->movetype == MOVETYPE_PUSHSTEP ))
|
||||
{
|
||||
cl_entity_t *e = CL_GetEntityByIndex( pe->info );
|
||||
decalIndex = CL_DecalIndex( decalIndices[COM_RandomLong( 0, decalCount-1 )] );
|
||||
int decalIndex = CL_DecalIndex( decalIndices[COM_RandomLong( 0, decalCount-1 )] );
|
||||
CL_DecalShoot( decalIndex, e->index, 0, trace.endpos, 0 );
|
||||
}
|
||||
}
|
||||
@@ -1881,7 +1845,6 @@ void CL_ParseTempEntity( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
sizebuf_t buf, *pbuf;
|
||||
byte msg_data[2048];
|
||||
int iSize;
|
||||
int type, color, count, flags;
|
||||
int decalIndex = 0, modelIndex = 0, entityIndex = 0;
|
||||
float scale, life, frameRate, vel, random;
|
||||
@@ -1896,7 +1859,7 @@ void CL_ParseTempEntity( sizebuf_t *msg, connprotocol_t proto )
|
||||
|
||||
if( proto != PROTO_GOLDSRC )
|
||||
{
|
||||
iSize = MSG_ReadWord( msg );
|
||||
int iSize = MSG_ReadWord( msg );
|
||||
|
||||
// this will probably be fatal anyway
|
||||
if( iSize > sizeof( msg_data ))
|
||||
@@ -2430,28 +2393,25 @@ static void CL_ClearLightStyles( void )
|
||||
|
||||
void CL_SetLightstyle( int style, const char *s, float f )
|
||||
{
|
||||
int i;
|
||||
lightstyle_t *ls;
|
||||
|
||||
if( unlikely( style < 0 || style >= MAX_LIGHTSTYLES ))
|
||||
{
|
||||
Con_Printf( S_WARN "%s: ignored invalid lightstyle id %d\n", __func__, style );
|
||||
return;
|
||||
}
|
||||
|
||||
ls = &cl.lightstyles[style];
|
||||
lightstyle_t *ls = &cl.lightstyles[style];
|
||||
|
||||
ls->length = Q_strncpy( ls->pattern, s, sizeof( ls->pattern ));
|
||||
ls->time = f; // set local time
|
||||
|
||||
for( i = 0; i < ls->length; i++ )
|
||||
for( int i = 0; i < ls->length; i++ )
|
||||
ls->map[i] = (float)(s[i] - 'a');
|
||||
|
||||
ls->interp = (ls->length <= 1) ? false : true;
|
||||
|
||||
// check for allow interpolate
|
||||
// NOTE: fast flickering styles looks ugly when interpolation is running
|
||||
for( i = 0; i < ( ls->length - 1 ); i++ )
|
||||
for( int i = 0; i < ( ls->length - 1 ); i++ )
|
||||
{
|
||||
float val1 = ls->map[( i + 0 ) % ls->length];
|
||||
float val2 = ls->map[( i + 1 ) % ls->length];
|
||||
@@ -2588,9 +2548,8 @@ void CL_DecayLights( void )
|
||||
{
|
||||
const float time = cl.time;
|
||||
const float dt = cl.time - cl.oldtime;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < MAX_DLIGHTS; i++ )
|
||||
for( int i = 0; i < MAX_DLIGHTS; i++ )
|
||||
{
|
||||
dlight_t *dl = &cl_dlights[i];
|
||||
|
||||
@@ -2608,7 +2567,7 @@ void CL_DecayLights( void )
|
||||
memset( dl, 0, sizeof( *dl ));
|
||||
}
|
||||
|
||||
for( i = 0; i < MAX_ELIGHTS; i++ )
|
||||
for( int i = 0; i < MAX_ELIGHTS; i++ )
|
||||
{
|
||||
dlight_t *dl = &cl_elights[i];
|
||||
|
||||
@@ -2650,7 +2609,6 @@ static void CL_UpdateFlashlight( cl_entity_t *ent )
|
||||
{
|
||||
vec3_t forward, view_ofs;
|
||||
vec3_t vecSrc, vecEnd;
|
||||
float falloff;
|
||||
pmtrace_t trace;
|
||||
cl_entity_t *hit;
|
||||
dlight_t *dl;
|
||||
@@ -2695,7 +2653,7 @@ static void CL_UpdateFlashlight( cl_entity_t *ent )
|
||||
VectorCopy( trace->endpos, dl->origin );
|
||||
#endif
|
||||
// compute falloff
|
||||
falloff = trace.fraction * FLASHLIGHT_DISTANCE;
|
||||
float falloff = trace.fraction * FLASHLIGHT_DISTANCE;
|
||||
if( falloff < 500.0f ) falloff = 1.0f;
|
||||
else falloff = 500.0f / falloff;
|
||||
falloff *= falloff;
|
||||
@@ -2879,25 +2837,22 @@ if cl_testlights is set, create 32 lights models
|
||||
*/
|
||||
void CL_TestLights( void )
|
||||
{
|
||||
int i, j, numLights;
|
||||
vec3_t forward, right;
|
||||
float f, r;
|
||||
dlight_t *dl;
|
||||
|
||||
if( !cl_testlights.value )
|
||||
return;
|
||||
|
||||
numLights = bound( 1, cl_testlights.value, MAX_DLIGHTS );
|
||||
int numLights = bound( 1, cl_testlights.value, MAX_DLIGHTS );
|
||||
AngleVectors( cl.viewangles, forward, right, NULL );
|
||||
|
||||
for( i = 0; i < numLights; i++ )
|
||||
for( int i = 0; i < numLights; i++ )
|
||||
{
|
||||
dl = &cl_dlights[i];
|
||||
dlight_t *dl = &cl_dlights[i];
|
||||
|
||||
r = 64 * ((i % 4) - 1.5f );
|
||||
f = 64 * ( i / 4) + 128;
|
||||
float r = 64 * ((i % 4) - 1.5f );
|
||||
float f = 64 * ( i / 4) + 128;
|
||||
|
||||
for( j = 0; j < 3; j++ )
|
||||
for( int j = 0; j < 3; j++ )
|
||||
dl->origin[j] = cl.simorg[j] + forward[j] * f + right[j] * r;
|
||||
|
||||
dl->color.r = ((((i % 6) + 1) & 1)>>0) * 255;
|
||||
@@ -2997,13 +2952,11 @@ get decal global index from decalname
|
||||
*/
|
||||
int GAME_EXPORT CL_DecalIndexFromName( const char *name )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( name ))
|
||||
return 0;
|
||||
|
||||
// look through the loaded sprite name list for SpriteName
|
||||
for( i = 1; i < MAX_DECALS && host.draw_decals[i][0]; i++ )
|
||||
for( int i = 1; i < MAX_DECALS && host.draw_decals[i][0]; i++ )
|
||||
{
|
||||
if( !Q_stricmp( name, host.draw_decals[i] ))
|
||||
return i;
|
||||
@@ -3100,13 +3053,11 @@ e.g. by demo request
|
||||
*/
|
||||
void CL_ClearStaticEntities( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( host.type == HOST_DEDICATED )
|
||||
return;
|
||||
|
||||
// clear out efrags in case the level hasn't been reloaded
|
||||
for( i = 0; i < cl.worldmodel->numleafs; i++ )
|
||||
for( int i = 0; i < cl.worldmodel->numleafs; i++ )
|
||||
cl.worldmodel->leafs[i+1].efrags = NULL;
|
||||
|
||||
clgame.numStatics = 0;
|
||||
|
||||
@@ -192,11 +192,9 @@ SCR_PlayCinematic
|
||||
qboolean SCR_PlayCinematic( const char *arg )
|
||||
{
|
||||
int x, y, w, h;
|
||||
const char *fullpath;
|
||||
const char *fullpath = FS_GetDiskPath( arg, false );
|
||||
double video_ratio, screen_ratio, scale;
|
||||
|
||||
fullpath = FS_GetDiskPath( arg, false );
|
||||
|
||||
if( FS_FileExists( arg, false ) && !fullpath )
|
||||
{
|
||||
Con_Printf( S_ERROR "Couldn't load %s from packfile. Please extract it\n", arg );
|
||||
|
||||
@@ -187,18 +187,16 @@ merge refdef with overview settings
|
||||
static void V_RefApplyOverview( ref_viewpass_t *rvp )
|
||||
{
|
||||
ref_overview_t *ov = &clgame.overView;
|
||||
float aspect;
|
||||
float size_x, size_y;
|
||||
vec2_t mins, maxs;
|
||||
|
||||
if( !CL_IsDevOverviewMode( ))
|
||||
return;
|
||||
|
||||
// NOTE: Xash3D may use 16:9 or 16:10 aspects
|
||||
aspect = (float)refState.width / (float)refState.height;
|
||||
float aspect = (float)refState.width / (float)refState.height;
|
||||
|
||||
size_x = fabs( 8192.0f / ov->flZoom );
|
||||
size_y = fabs( 8192.0f / (ov->flZoom * aspect ));
|
||||
float size_x = fabs( 8192.0f / ov->flZoom );
|
||||
float size_y = fabs( 8192.0f / (ov->flZoom * aspect ));
|
||||
|
||||
// compute rectangle
|
||||
ov->xLeft = -(size_x / 2);
|
||||
@@ -238,13 +236,11 @@ V_CalcFov
|
||||
*/
|
||||
static float V_CalcFov( float *fov_x, float width, float height )
|
||||
{
|
||||
float x, half_fov_y;
|
||||
|
||||
if( *fov_x < 1.0f || *fov_x > 179.0f )
|
||||
*fov_x = 90.0f; // default value
|
||||
|
||||
x = width / tan( DEG2RAD( *fov_x ) * 0.5f );
|
||||
half_fov_y = atan( height / x );
|
||||
float x = width / tan( DEG2RAD( *fov_x ) * 0.5f );
|
||||
float half_fov_y = atan( height / x );
|
||||
|
||||
return RAD2DEG( half_fov_y ) * 2;
|
||||
}
|
||||
@@ -500,13 +496,12 @@ static void R_ShowTree( void )
|
||||
{
|
||||
float x = (float)((refState.width - (int)POINT_SIZE) >> 1);
|
||||
float y = NODE_INTERVAL_Y(1.0f);
|
||||
mleaf_t *viewleaf;
|
||||
|
||||
if( !cl.worldmodel || !r_showtree.value )
|
||||
return;
|
||||
|
||||
world.recursion_level = 0;
|
||||
viewleaf = Mod_PointInLeaf( refState.vieworg, cl.worldmodel->nodes, cl.worldmodel );
|
||||
mleaf_t *viewleaf = Mod_PointInLeaf( refState.vieworg, cl.worldmodel->nodes, cl.worldmodel );
|
||||
|
||||
ref.dllFuncs.TriRenderMode( kRenderTransTexture );
|
||||
|
||||
|
||||
@@ -182,13 +182,11 @@ Con_SetColor
|
||||
*/
|
||||
static void Con_SetColor( void )
|
||||
{
|
||||
int r, g, b;
|
||||
int num;
|
||||
|
||||
if( !FBitSet( con_color.flags, FCVAR_CHANGED ))
|
||||
return;
|
||||
|
||||
num = sscanf( con_color.string, "%i %i %i", &r, &g, &b );
|
||||
int r, g, b;
|
||||
int num = sscanf( con_color.string, "%i %i %i", &r, &g, &b );
|
||||
|
||||
switch( num )
|
||||
{
|
||||
@@ -213,9 +211,7 @@ Con_ClearNotify
|
||||
*/
|
||||
void Con_ClearNotify( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < CON_LINES_COUNT; i++ )
|
||||
for( int i = 0; i < CON_LINES_COUNT; i++ )
|
||||
CON_LINES( i ).addtime = 0.0;
|
||||
}
|
||||
|
||||
@@ -310,15 +306,13 @@ Con_SetTimes_f
|
||||
*/
|
||||
static void Con_SetTimes_f( void )
|
||||
{
|
||||
int newtimes;
|
||||
|
||||
if( Cmd_Argc() != 2 )
|
||||
{
|
||||
Con_Printf( S_USAGE "contimes <n lines>\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
newtimes = Q_atoi( Cmd_Argv( 1 ) );
|
||||
int newtimes = Q_atoi( Cmd_Argv( 1 ) );
|
||||
con.num_times = bound( CON_TIMES, newtimes, CON_MAX_TIMES );
|
||||
}
|
||||
|
||||
@@ -333,15 +327,12 @@ went backwards)
|
||||
*/
|
||||
static void Con_FixTimes( void )
|
||||
{
|
||||
double diff;
|
||||
int i;
|
||||
|
||||
if( con.lines_count <= 0 ) return;
|
||||
|
||||
diff = cl.time - CON_LINES_LAST().addtime;
|
||||
double diff = cl.time - CON_LINES_LAST().addtime;
|
||||
if( diff >= 0.0 ) return; // nothing to fix
|
||||
|
||||
for( i = 0; i < con.lines_count; i++ )
|
||||
for( int i = 0; i < con.lines_count; i++ )
|
||||
CON_LINES( i ).addtime += diff;
|
||||
}
|
||||
|
||||
@@ -428,8 +419,7 @@ Appends a given string as a new line to the console.
|
||||
*/
|
||||
static void Con_AddLine( const char *line, int length, qboolean newline )
|
||||
{
|
||||
char *putpos;
|
||||
con_lineinfo_t *p;
|
||||
char *putpos;
|
||||
|
||||
if( !con.initialized || !con.buffer )
|
||||
return;
|
||||
@@ -442,6 +432,7 @@ static void Con_AddLine( const char *line, int length, qboolean newline )
|
||||
while( !( putpos = Con_BytesLeft( length )) || con.lines_count >= con.maxlines )
|
||||
Con_DeleteLine();
|
||||
|
||||
con_lineinfo_t *p;
|
||||
if( newline )
|
||||
{
|
||||
memcpy( putpos, line, length );
|
||||
@@ -475,12 +466,11 @@ If the line width has changed, reformat the buffer.
|
||||
static void Con_CheckResize( void )
|
||||
{
|
||||
int charWidth = 8;
|
||||
int width;
|
||||
|
||||
if( con.curFont && con.curFont->hFontTexture )
|
||||
charWidth = con.curFont->charWidths['O'] - 1;
|
||||
|
||||
width = ( refState.width / charWidth ) - 2;
|
||||
int width = ( refState.width / charWidth ) - 2;
|
||||
if( !ref.initialized ) width = (640 / 5);
|
||||
|
||||
if( width == con.linewidth )
|
||||
@@ -611,13 +601,12 @@ Con_LoadConchars
|
||||
*/
|
||||
static void Con_LoadConchars( void )
|
||||
{
|
||||
int i, fontSize;
|
||||
|
||||
// load all the console fonts
|
||||
for( i = 0; i < CON_NUMFONTS; i++ )
|
||||
for( int i = 0; i < CON_NUMFONTS; i++ )
|
||||
Con_LoadConsoleFont( i, con.chars + i );
|
||||
|
||||
// select properly fontsize
|
||||
int fontSize;
|
||||
if( con_fontnum.value >= 0 && con_fontnum.value <= CON_NUMFONTS - 1 )
|
||||
fontSize = con_fontnum.value;
|
||||
else if( refState.width <= 640 )
|
||||
@@ -675,7 +664,6 @@ int Con_UtfMoveLeft( char *str, int pos )
|
||||
{
|
||||
utfstate_t state = { 0 };
|
||||
int k = 0;
|
||||
int i;
|
||||
|
||||
if( !cls.accept_utf8 ) // incoming character is not a UTF-8 sequence
|
||||
return pos - 1;
|
||||
@@ -683,7 +671,7 @@ int Con_UtfMoveLeft( char *str, int pos )
|
||||
if( pos == 1 )
|
||||
return 0;
|
||||
|
||||
for( i = 0; i < pos - 1; i++ )
|
||||
for( int i = 0; i < pos - 1; i++ )
|
||||
{
|
||||
if( Q_DecodeUTF8( &state, (byte)str[i] ))
|
||||
k = i + 1;
|
||||
@@ -702,12 +690,11 @@ get next of previous printful char
|
||||
int Con_UtfMoveRight( char *str, int pos, int length )
|
||||
{
|
||||
utfstate_t state = { 0 };
|
||||
int i;
|
||||
|
||||
if( !cls.accept_utf8 ) // incoming character is not a UTF-8 sequence
|
||||
return pos + 1;
|
||||
|
||||
for( i = pos; i <= length; i++ )
|
||||
for( int i = pos; i <= length; i++ )
|
||||
{
|
||||
if( Q_DecodeUTF8( &state, (byte)str[i] ))
|
||||
return i + 1;
|
||||
@@ -718,20 +705,15 @@ int Con_UtfMoveRight( char *str, int pos, int length )
|
||||
|
||||
static void Con_DrawCharToConback( int num, const byte *conchars, byte *dest )
|
||||
{
|
||||
int row, col;
|
||||
const byte *source;
|
||||
int drawline;
|
||||
int x;
|
||||
int row = num >> 4;
|
||||
int col = num & 15;
|
||||
const byte *source = conchars + (row << 10) + (col << 3);
|
||||
|
||||
row = num >> 4;
|
||||
col = num & 15;
|
||||
source = conchars + (row << 10) + (col << 3);
|
||||
|
||||
drawline = 8;
|
||||
int drawline = 8;
|
||||
|
||||
while( drawline-- )
|
||||
{
|
||||
for( x = 0; x < 8; x++ )
|
||||
for( int x = 0; x < 8; x++ )
|
||||
if( source[x] != 255 )
|
||||
dest[x] = 0x60 + source[x];
|
||||
source += 128;
|
||||
@@ -1118,15 +1100,12 @@ Field_Paste
|
||||
*/
|
||||
static void Field_Paste( field_t *edit )
|
||||
{
|
||||
char *cbd;
|
||||
int i, pasteLen;
|
||||
|
||||
cbd = Sys_GetClipboardData();
|
||||
char *cbd = Sys_GetClipboardData();
|
||||
if( !cbd ) return;
|
||||
|
||||
// send as if typed, so insert / overstrike works properly
|
||||
pasteLen = Q_strlen( cbd );
|
||||
for( i = 0; i < pasteLen; i++ )
|
||||
int pasteLen = Q_strlen( cbd );
|
||||
for( int i = 0; i < pasteLen; i++ )
|
||||
Field_CharEvent( edit, cbd[i] );
|
||||
}
|
||||
|
||||
@@ -1154,8 +1133,6 @@ Key events are used for non-printable characters, others are gotten from char ev
|
||||
*/
|
||||
static void Field_KeyDownEvent( field_t *edit, int key )
|
||||
{
|
||||
int len;
|
||||
|
||||
// shift-insert is paste
|
||||
if((( key == K_INS ) || ( key == K_KP_INS )) && Key_IsDown( K_SHIFT ))
|
||||
{
|
||||
@@ -1163,7 +1140,7 @@ static void Field_KeyDownEvent( field_t *edit, int key )
|
||||
return;
|
||||
}
|
||||
|
||||
len = Q_strlen( edit->buffer );
|
||||
int len = Q_strlen( edit->buffer );
|
||||
|
||||
if( key == K_DEL )
|
||||
{
|
||||
@@ -1225,8 +1202,6 @@ Field_CharEvent
|
||||
*/
|
||||
static void Field_CharEvent( field_t *edit, int ch )
|
||||
{
|
||||
int len;
|
||||
|
||||
if( ch == 'v' - 'a' + 1 )
|
||||
{
|
||||
// ctrl-v is paste
|
||||
@@ -1241,7 +1216,7 @@ static void Field_CharEvent( field_t *edit, int ch )
|
||||
return;
|
||||
}
|
||||
|
||||
len = Q_strlen( edit->buffer );
|
||||
int len = Q_strlen( edit->buffer );
|
||||
|
||||
if( ch == 'a' - 'a' + 1 )
|
||||
{
|
||||
@@ -1286,7 +1261,6 @@ Field_DrawInputLine
|
||||
*/
|
||||
static int Field_DrawInputLine( int x, int y, const field_t *edit, byte alpha, qboolean cursor )
|
||||
{
|
||||
int curPos;
|
||||
char str[MAX_SYSPATH];
|
||||
rgba_t colorDefault;
|
||||
const int prestep = bound( 0, edit->scroll, sizeof( edit->buffer ) - 1 );
|
||||
@@ -1303,6 +1277,7 @@ static int Field_DrawInputLine( int x, int y, const field_t *edit, byte alpha, q
|
||||
|
||||
// calc cursor position
|
||||
str[cursorCharPos] = 0;
|
||||
int curPos;
|
||||
CL_DrawStringLen( con.curFont, str, &curPos, NULL, FONT_DRAW_UTF8 );
|
||||
|
||||
// draw the cursor
|
||||
@@ -1415,10 +1390,7 @@ static void Con_HistoryAppend( con_history_t *self, const field_t *from )
|
||||
|
||||
static void Con_LoadHistory( con_history_t *self )
|
||||
{
|
||||
file_t *fd;
|
||||
int i;
|
||||
|
||||
fd = FS_Open( "console_history.txt", "rb", true );
|
||||
file_t *fd = FS_Open( "console_history.txt", "rb", true );
|
||||
|
||||
if( !fd )
|
||||
return;
|
||||
@@ -1448,7 +1420,7 @@ static void Con_LoadHistory( con_history_t *self )
|
||||
|
||||
FS_Close( fd );
|
||||
|
||||
for( i = self->next; i < CON_HISTORY; i++ )
|
||||
for( int i = self->next; i < CON_HISTORY; i++ )
|
||||
{
|
||||
history_line_t *f = &self->lines[i];
|
||||
|
||||
@@ -1460,17 +1432,15 @@ static void Con_LoadHistory( con_history_t *self )
|
||||
|
||||
static void Con_SaveHistory( con_history_t *self )
|
||||
{
|
||||
int historyStart = self->next - CON_HISTORY, i;
|
||||
file_t *f;
|
||||
|
||||
// do not save history if nothing was executed
|
||||
if( self->next == 0 )
|
||||
return;
|
||||
|
||||
int historyStart = self->next - CON_HISTORY;
|
||||
if( historyStart < 0 )
|
||||
historyStart = 0;
|
||||
|
||||
f = FS_Open( "console_history.txt", "wb", true );
|
||||
file_t *f = FS_Open( "console_history.txt", "wb", true );
|
||||
|
||||
if( !f )
|
||||
{
|
||||
@@ -1478,7 +1448,7 @@ static void Con_SaveHistory( con_history_t *self )
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = historyStart; i < self->next; i++ )
|
||||
for( int i = historyStart; i < self->next; i++ )
|
||||
{
|
||||
const char *s = self->lines[i % CON_HISTORY].buffer;
|
||||
|
||||
@@ -1704,15 +1674,13 @@ The input line scrolls horizontally if typing goes beyond the right edge
|
||||
*/
|
||||
static void Con_DrawInput( int lines )
|
||||
{
|
||||
int x, y;
|
||||
|
||||
// don't draw anything (always draw if not active)
|
||||
if( cls.key_dest != key_console || !con.curFont )
|
||||
return;
|
||||
|
||||
y = lines - ( con.curFont->charHeight * 2 );
|
||||
int y = lines - ( con.curFont->charHeight * 2 );
|
||||
CL_DrawCharacter( con.curFont->charWidths[' '], y, ']', g_color_table[7], con.curFont, 0 );
|
||||
x = Field_DrawInputLine( con.curFont->charWidths[' ']*2, y, &con.input, 255, true );
|
||||
int x = Field_DrawInputLine( con.curFont->charWidths[' ']*2, y, &con.input, 255, true );
|
||||
|
||||
// HACKHACK: avoid rendering issues when scroll != 0
|
||||
if( con_showcompletion.value && con.input.scroll == 0 )
|
||||
@@ -1744,18 +1712,16 @@ Custom debug messages
|
||||
static int Con_DrawDebugLines( void )
|
||||
{
|
||||
notify_t *notify = con.notify;
|
||||
int i, count = 0;
|
||||
int defaultX;
|
||||
int count = 0;
|
||||
int y = 20;
|
||||
int fontTall;
|
||||
|
||||
if( !con.curFont || !con.curFont->valid )
|
||||
return 0;
|
||||
|
||||
defaultX = refState.width / 4;
|
||||
fontTall = con.curFont->charHeight + 1;
|
||||
int defaultX = refState.width / 4;
|
||||
int fontTall = con.curFont->charHeight + 1;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( con.notify ); i++, notify++ )
|
||||
for( int i = 0; i < ARRAYSIZE( con.notify ); i++, notify++ )
|
||||
{
|
||||
int x, len;
|
||||
|
||||
@@ -1789,19 +1755,18 @@ Draws the debug messages (not passed to console history)
|
||||
void Con_DrawDebug( void )
|
||||
{
|
||||
static double timeStart;
|
||||
string dlstring;
|
||||
int x, y;
|
||||
|
||||
if( scr_download.value != -1.0f )
|
||||
{
|
||||
string dlstring;
|
||||
int length;
|
||||
Q_snprintf( dlstring, sizeof( dlstring ), "Downloading [%d remaining]: ^2%s^7 %5.1f%% time %.f secs",
|
||||
host.downloadcount, host.downloadfile, scr_download.value, Platform_DoubleTime() - timeStart );
|
||||
|
||||
Con_DrawStringLen( dlstring, &length, NULL );
|
||||
length = Q_max( length, 300 );
|
||||
x = refState.width - length * 1.05f;
|
||||
y = con.curFont->charHeight * 1.05f;
|
||||
int x = refState.width - length * 1.05f;
|
||||
int y = con.curFont->charHeight * 1.05f;
|
||||
Con_DrawString( x, y, dlstring, g_color_table[7] );
|
||||
}
|
||||
else
|
||||
@@ -1829,15 +1794,15 @@ Draws the last few lines of output transparently over the game top
|
||||
static void Con_DrawNotify( void )
|
||||
{
|
||||
double time = cl.time;
|
||||
int i, x, y = 0;
|
||||
int y = 0;
|
||||
|
||||
if( !con.curFont ) return;
|
||||
|
||||
x = con.curFont->charWidths[' ']; // offset one space at left screen side
|
||||
int x = con.curFont->charWidths[' ']; // offset one space at left screen side
|
||||
|
||||
if( host.allow_console && !Con_BackgroundMapActive( ))
|
||||
{
|
||||
for( i = Q_max( 0, CON_LINES_COUNT - con.num_times ); i < CON_LINES_COUNT; i++ )
|
||||
for( int i = Q_max( 0, CON_LINES_COUNT - con.num_times ); i < CON_LINES_COUNT; i++ )
|
||||
{
|
||||
con_lineinfo_t *l = &CON_LINES( i );
|
||||
|
||||
@@ -1905,13 +1870,13 @@ of it based on con.backscroll.
|
||||
*/
|
||||
static void Con_LastVisibleLine( int *lastline )
|
||||
{
|
||||
int i, lines_seen = 0;
|
||||
int lines_seen = 0;
|
||||
|
||||
con.backscroll = Q_max( 0, con.backscroll );
|
||||
*lastline = 0;
|
||||
|
||||
// now count until we saw con_backscroll actual lines
|
||||
for( i = CON_LINES_COUNT - 1; i >= 0; i-- )
|
||||
for( int i = CON_LINES_COUNT - 1; i >= 0; i-- )
|
||||
{
|
||||
// line is the last visible line?
|
||||
*lastline = i;
|
||||
@@ -2086,8 +2051,6 @@ void Con_DrawVersion( void )
|
||||
{
|
||||
// draws the current build
|
||||
byte *color = g_color_table[7];
|
||||
int stringLen, charH = 0;
|
||||
int start, height = refState.height;
|
||||
string curbuild;
|
||||
|
||||
if( !scr_drawversion.value )
|
||||
@@ -2116,9 +2079,10 @@ void Con_DrawVersion( void )
|
||||
XASH_ENGINE_NAME " v%i/" XASH_VERSION " (%s-%s build %i)", PROTOCOL_VERSION, Q_buildos(), Q_buildarch(), Q_buildnum( ));
|
||||
}
|
||||
|
||||
int stringLen, charH = 0;
|
||||
Con_DrawStringLen( curbuild, &stringLen, &charH );
|
||||
start = refState.width - stringLen * 1.05f;
|
||||
height -= charH * 1.05f;
|
||||
int start = refState.width - stringLen * 1.05f;
|
||||
int height = refState.height - charH * 1.05f;
|
||||
|
||||
Con_DrawString( start, height, curbuild, color );
|
||||
}
|
||||
@@ -2132,8 +2096,6 @@ Scroll it up or down
|
||||
*/
|
||||
void Con_RunConsole( void )
|
||||
{
|
||||
float lines_per_frame;
|
||||
|
||||
Con_SetColor( );
|
||||
|
||||
// decide on the destination height of the console
|
||||
@@ -2149,7 +2111,7 @@ void Con_RunConsole( void )
|
||||
}
|
||||
else con.showlines = 0; // none visible
|
||||
|
||||
lines_per_frame = fabs( scr_conspeed.value ) * host.realframetime;
|
||||
float lines_per_frame = fabs( scr_conspeed.value ) * host.realframetime;
|
||||
|
||||
if( con.showlines < con.vislines )
|
||||
{
|
||||
@@ -2224,9 +2186,7 @@ void Con_CharEvent( int key )
|
||||
|
||||
static int Con_LoadSimpleConback( const char *name, int flags )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < 5; i++ )
|
||||
for( int i = 0; i < 5; i++ )
|
||||
{
|
||||
string path;
|
||||
|
||||
@@ -2311,15 +2271,13 @@ void Con_VidInit( void )
|
||||
{
|
||||
lmp_t *cb = (lmp_t *)FS_LoadFile( "gfx/conback.lmp", &length, false );
|
||||
char ver[64];
|
||||
byte *dest;
|
||||
int x, y, len;
|
||||
|
||||
if( cb && cb->width == 320 && cb->height == 200 )
|
||||
{
|
||||
len = Q_snprintf( ver, 64, "%i", Q_buildnum( )); // can store only buildnum
|
||||
dest = (byte *)(cb + 1) + 320 * 186 + 320 - 11 - 8 * len;
|
||||
y = len;
|
||||
for( x = 0; x < y; x++ )
|
||||
int len = Q_snprintf( ver, 64, "%i", Q_buildnum( )); // can store only buildnum
|
||||
byte *dest = (byte *)(cb + 1) + 320 * 186 + 320 - 11 - 8 * len;
|
||||
int y = len;
|
||||
for( int x = 0; x < y; x++ )
|
||||
Con_DrawCharToConback( ver[x], buf, dest + (x << 3));
|
||||
con.background = ref.dllFuncs.GL_LoadTexture( "#gfx/conback.lmp", (byte *)cb, length, TF_IMAGE );
|
||||
}
|
||||
@@ -2344,8 +2302,7 @@ Con_InvalidateFonts
|
||||
*/
|
||||
void Con_InvalidateFonts( void )
|
||||
{
|
||||
int i;
|
||||
for( i = 0; i < ARRAYSIZE( con.chars ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( con.chars ); i++ )
|
||||
CL_FreeFont( &con.chars[i] );
|
||||
con.curFont = NULL;
|
||||
}
|
||||
@@ -2399,9 +2356,8 @@ static void Test_RunConHistory( void )
|
||||
const char *strs1[] = { "map t0a0", "quit", "wtf", "wtf", "", "nyan" };
|
||||
const char *strs2[] = { "nyan", "wtf", "quit", "map t0a0" };
|
||||
const char *testbackup = "unfinished_edit";
|
||||
int i;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( strs1 ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( strs1 ); i++ )
|
||||
{
|
||||
Field_Set( &input, strs1[i] );
|
||||
Con_HistoryAppend( &hist, &input );
|
||||
@@ -2409,7 +2365,7 @@ static void Test_RunConHistory( void )
|
||||
|
||||
Field_Set( &input, testbackup );
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( strs2 ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( strs2 ); i++ )
|
||||
{
|
||||
Con_HistoryUp( &hist, &input );
|
||||
TASSERT_STR( input.buffer, strs2[i] );
|
||||
@@ -2418,7 +2374,7 @@ static void Test_RunConHistory( void )
|
||||
// check for overrun
|
||||
Con_HistoryUp( &hist, &input );
|
||||
|
||||
for( i = ARRAYSIZE( strs2 ) - 1; i >= 0; i-- )
|
||||
for( int i = ARRAYSIZE( strs2 ) - 1; i >= 0; i-- )
|
||||
{
|
||||
TASSERT_STR( input.buffer, strs2[i] );
|
||||
Con_HistoryDown( &hist, &input );
|
||||
|
||||
@@ -172,8 +172,6 @@ Initialize CD playlist
|
||||
*/
|
||||
static void CL_InitCDAudio( const char *filename )
|
||||
{
|
||||
byte *afile;
|
||||
char *pfile;
|
||||
string token;
|
||||
int c = 0;
|
||||
|
||||
@@ -183,10 +181,10 @@ static void CL_InitCDAudio( const char *filename )
|
||||
CL_CreatePlaylist( filename );
|
||||
}
|
||||
|
||||
afile = FS_LoadFile( filename, NULL, false );
|
||||
byte *afile = FS_LoadFile( filename, NULL, false );
|
||||
if( !afile ) return;
|
||||
|
||||
pfile = (char *)afile;
|
||||
char *pfile = (char *)afile;
|
||||
|
||||
// format: trackname\n [num]
|
||||
while(( pfile = COM_ParseFile( pfile, token, sizeof( token ))) != NULL )
|
||||
@@ -318,14 +316,12 @@ draw hudsprite routine
|
||||
*/
|
||||
void SPR_AdjustSize( float *x, float *y, float *w, float *h )
|
||||
{
|
||||
float xscale, yscale;
|
||||
|
||||
if( refState.width == clgame.scrInfo.iWidth && refState.height == clgame.scrInfo.iHeight )
|
||||
return;
|
||||
|
||||
// scale for screen sizes
|
||||
xscale = refState.width / (float)clgame.scrInfo.iWidth;
|
||||
yscale = refState.height / (float)clgame.scrInfo.iHeight;
|
||||
float xscale = refState.width / (float)clgame.scrInfo.iWidth;
|
||||
float yscale = refState.height / (float)clgame.scrInfo.iHeight;
|
||||
|
||||
*x *= xscale;
|
||||
*y *= yscale;
|
||||
@@ -369,7 +365,6 @@ draw hudsprite routine
|
||||
static void SPR_DrawGeneric( int frame, float x, float y, float width, float height, const wrect_t *prc )
|
||||
{
|
||||
float s1, s2, t1, t2;
|
||||
int texnum;
|
||||
|
||||
if( width == -1 && height == -1 )
|
||||
{
|
||||
@@ -382,7 +377,7 @@ static void SPR_DrawGeneric( int frame, float x, float y, float width, float hei
|
||||
height = h;
|
||||
}
|
||||
|
||||
texnum = R_GetSpriteTexture( clgame.ds.pSprite, frame );
|
||||
int texnum = R_GetSpriteTexture( clgame.ds.pSprite, frame );
|
||||
|
||||
if( prc )
|
||||
{
|
||||
@@ -430,11 +425,8 @@ called each frame
|
||||
void CL_DrawCenterPrint( void )
|
||||
{
|
||||
cl_font_t *font = Con_GetCurFont();
|
||||
char *pText;
|
||||
int i, j, x, y;
|
||||
int width, lineLength;
|
||||
byte *colorDefault, line[MAX_LINELENGTH];
|
||||
int charWidth, charHeight;
|
||||
byte line[MAX_LINELENGTH];
|
||||
int charHeight;
|
||||
|
||||
if( !clgame.centerPrint.time )
|
||||
return;
|
||||
@@ -446,17 +438,17 @@ void CL_DrawCenterPrint( void )
|
||||
return;
|
||||
}
|
||||
|
||||
y = clgame.centerPrint.y; // start y
|
||||
colorDefault = g_color_table[7];
|
||||
pText = clgame.centerPrint.message;
|
||||
int y = clgame.centerPrint.y; // start y
|
||||
byte *colorDefault = g_color_table[7];
|
||||
char *pText = clgame.centerPrint.message;
|
||||
|
||||
CL_DrawCharacterLen( font, 0, NULL, &charHeight );
|
||||
CL_SetFontRendermode( font );
|
||||
CL_SetFontColor( font, colorDefault );
|
||||
for( i = 0; i < clgame.centerPrint.lines; i++ )
|
||||
for( int i = 0; i < clgame.centerPrint.lines; i++ )
|
||||
{
|
||||
lineLength = 0;
|
||||
width = 0;
|
||||
int lineLength = 0;
|
||||
int width = 0;
|
||||
|
||||
while( *pText && *pText != '\n' && lineLength < MAX_LINELENGTH )
|
||||
{
|
||||
@@ -466,6 +458,7 @@ void CL_DrawCenterPrint( void )
|
||||
continue;
|
||||
|
||||
line[lineLength] = number;
|
||||
int charWidth;
|
||||
CL_DrawCharacterLen( font, number, &charWidth, NULL );
|
||||
width += charWidth;
|
||||
lineLength++;
|
||||
@@ -477,9 +470,9 @@ void CL_DrawCenterPrint( void )
|
||||
pText++; // Skip LineFeed
|
||||
line[lineLength] = 0;
|
||||
|
||||
x = CL_AdjustXPos( -1, width, clgame.centerPrint.totalWidth );
|
||||
int x = CL_AdjustXPos( -1, width, clgame.centerPrint.totalWidth );
|
||||
|
||||
for( j = 0; j < lineLength; j++ )
|
||||
for( int j = 0; j < lineLength; j++ )
|
||||
{
|
||||
if( x >= 0 && y >= 0 && x <= refState.width )
|
||||
x += CL_DrawCharacter( x, y, line[j], NULL, font, FONT_DRAW_HUD | FONT_DRAW_NORENDERMODE | FONT_DRAW_NOCOLOR );
|
||||
@@ -534,9 +527,7 @@ can be modulated
|
||||
static void CL_DrawScreenFade( void )
|
||||
{
|
||||
screenfade_t *sf = &clgame.fade;
|
||||
int alpha;
|
||||
|
||||
alpha = V_FadeAlpha( sf );
|
||||
int alpha = V_FadeAlpha( sf );
|
||||
|
||||
if( !alpha )
|
||||
return;
|
||||
@@ -619,11 +610,9 @@ Parse TE_TEXTMESSAGE
|
||||
void CL_ParseTextMessage( sizebuf_t *msg )
|
||||
{
|
||||
static int msgindex = 0;
|
||||
client_textmessage_t *text;
|
||||
int channel;
|
||||
|
||||
// read channel ( 0 - auto)
|
||||
channel = MSG_ReadByte( msg );
|
||||
int channel = MSG_ReadByte( msg );
|
||||
|
||||
if( channel <= 0 || channel > ( MAX_TEXTCHANNELS - 1 ))
|
||||
{
|
||||
@@ -632,7 +621,7 @@ void CL_ParseTextMessage( sizebuf_t *msg )
|
||||
}
|
||||
|
||||
// grab message channel
|
||||
text = &cl_textmessage[channel];
|
||||
client_textmessage_t *text = &cl_textmessage[channel];
|
||||
|
||||
text->x = (float)(MSG_ReadShort( msg ) / 8192.0f);
|
||||
text->y = (float)(MSG_ReadShort( msg ) / 8192.0f);
|
||||
@@ -680,12 +669,9 @@ return soundname from index
|
||||
*/
|
||||
static const char *CL_SoundFromIndex( int index )
|
||||
{
|
||||
sfx_t *sfx = NULL;
|
||||
int hSound;
|
||||
|
||||
// make sure what we in-bounds
|
||||
index = bound( 0, index, MAX_SOUNDS );
|
||||
hSound = cl.sound_index[index];
|
||||
int hSound = cl.sound_index[index];
|
||||
|
||||
if( !hSound )
|
||||
{
|
||||
@@ -693,7 +679,7 @@ static const char *CL_SoundFromIndex( int index )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sfx = S_GetSfxByHandle( hSound );
|
||||
sfx_t *sfx = S_GetSfxByHandle( hSound );
|
||||
if( !sfx )
|
||||
{
|
||||
Con_DPrintf( S_ERROR "%s: bad sfx for index %i\n", __func__, index );
|
||||
@@ -740,8 +726,6 @@ perform common scissor test
|
||||
*/
|
||||
qboolean CL_Scissor( const scissor_state_t *scissor, float *x, float *y, float *width, float *height, float *u0, float *v0, float *u1, float *v1 )
|
||||
{
|
||||
float dudx, dvdy;
|
||||
|
||||
if( !scissor->test )
|
||||
return true;
|
||||
|
||||
@@ -758,8 +742,8 @@ qboolean CL_Scissor( const scissor_state_t *scissor, float *x, float *y, float *
|
||||
if( *y >= scissor->y + scissor->height )
|
||||
return false;
|
||||
|
||||
dudx = (*u1 - *u0) / *width;
|
||||
dvdy = (*v1 - *v0) / *height;
|
||||
float dudx = (*u1 - *u0) / *width;
|
||||
float dvdy = (*v1 - *v0) / *height;
|
||||
|
||||
if( *x < scissor->x )
|
||||
{
|
||||
@@ -946,9 +930,7 @@ void CL_DrawHUD( int state )
|
||||
|
||||
static void CL_ClearUserMessage( char *pszName, int svc_num )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < MAX_USER_MESSAGES && clgame.msg[i].name[0]; i++ )
|
||||
for( int i = 0; i < MAX_USER_MESSAGES && clgame.msg[i].name[0]; i++ )
|
||||
if( ( clgame.msg[i].number == svc_num ) && Q_stricmp( clgame.msg[i].name, pszName ) )
|
||||
clgame.msg[i].number = 0;
|
||||
}
|
||||
@@ -1072,9 +1054,7 @@ free studio cache on change level
|
||||
*/
|
||||
void CL_ClearSpriteTextures( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 1; i < MAX_CLIENT_SPRITES; i++ )
|
||||
for( int i = 1; i < MAX_CLIENT_SPRITES; i++ )
|
||||
{
|
||||
if( clgame.sprites[i].needload == NL_UNREFERENCED )
|
||||
continue;
|
||||
@@ -1212,8 +1192,6 @@ upload sprite frames
|
||||
*/
|
||||
static qboolean CL_LoadHudSprite( const char *szSpriteName, model_t *m_pSprite, uint type, uint texFlags )
|
||||
{
|
||||
byte *buf;
|
||||
fs_offset_t size;
|
||||
qboolean loaded;
|
||||
|
||||
Assert( m_pSprite != NULL );
|
||||
@@ -1243,7 +1221,8 @@ static qboolean CL_LoadHudSprite( const char *szSpriteName, model_t *m_pSprite,
|
||||
}
|
||||
}
|
||||
|
||||
buf = FS_LoadFile( szSpriteName, &size, false );
|
||||
fs_offset_t size;
|
||||
byte *buf = FS_LoadFile( szSpriteName, &size, false );
|
||||
if( buf == NULL )
|
||||
return false;
|
||||
|
||||
@@ -1280,7 +1259,7 @@ static model_t *CL_LoadSpriteModel( const char *filename, uint type, uint texFla
|
||||
{
|
||||
char name[MAX_QPATH];
|
||||
model_t *mod;
|
||||
int i, start;
|
||||
int i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( filename ))
|
||||
{
|
||||
@@ -1310,7 +1289,7 @@ static model_t *CL_LoadSpriteModel( const char *filename, uint type, uint texFla
|
||||
// find a free model slot spot
|
||||
// use low indices only for HUD sprites
|
||||
// for GoldSrc bug compatibility
|
||||
start = type == SPR_HUDSPRITE ? 0 : MAX_CLIENT_SPRITES / 2;
|
||||
int start = type == SPR_HUDSPRITE ? 0 : MAX_CLIENT_SPRITES / 2;
|
||||
|
||||
for( i = 0, mod = &clgame.sprites[start]; i < MAX_CLIENT_SPRITES / 2; i++, mod++ )
|
||||
{
|
||||
@@ -1356,9 +1335,9 @@ pfnSPR_LoadExt
|
||||
*/
|
||||
HSPRITE pfnSPR_LoadExt( const char *szPicName, uint texFlags )
|
||||
{
|
||||
model_t *spr;
|
||||
model_t *spr = CL_LoadSpriteModel( szPicName, SPR_CLIENT, texFlags );
|
||||
|
||||
if(( spr = CL_LoadSpriteModel( szPicName, SPR_CLIENT, texFlags )) == NULL )
|
||||
if( spr == NULL )
|
||||
return 0;
|
||||
|
||||
return (spr - clgame.sprites) + 1; // return index
|
||||
@@ -1374,9 +1353,9 @@ function exported for support GoldSrc Monitor utility
|
||||
HSPRITE EXPORT pfnSPR_Load( const char *szPicName );
|
||||
HSPRITE EXPORT pfnSPR_Load( const char *szPicName )
|
||||
{
|
||||
model_t *spr;
|
||||
model_t *spr = CL_LoadSpriteModel( szPicName, SPR_HUDSPRITE, 0 );
|
||||
|
||||
if(( spr = CL_LoadSpriteModel( szPicName, SPR_HUDSPRITE, 0 )) == NULL )
|
||||
if( spr == NULL )
|
||||
return 0;
|
||||
|
||||
return (spr - clgame.sprites) + 1; // return index
|
||||
@@ -1390,16 +1369,16 @@ CL_GetSpritePointer
|
||||
*/
|
||||
static const model_t *CL_GetSpritePointer( HSPRITE hSprite )
|
||||
{
|
||||
model_t *mod;
|
||||
int index = hSprite - 1;
|
||||
|
||||
if( index < 0 || index >= MAX_CLIENT_SPRITES )
|
||||
return NULL; // bad image
|
||||
mod = &clgame.sprites[index];
|
||||
|
||||
model_t *mod = &clgame.sprites[index];
|
||||
|
||||
if( mod->needload == NL_NEEDS_LOADED )
|
||||
{
|
||||
int type = FBitSet( mod->flags, MODEL_CLIENT ) ? SPR_HUDSPRITE : SPR_MAPSPRITE;
|
||||
int type = FBitSet( mod->flags, MODEL_CLIENT ) ? SPR_HUDSPRITE : SPR_MAPSPRITE;
|
||||
|
||||
if( CL_LoadHudSprite( mod->name, mod, type, mod->numtexinfo ))
|
||||
return mod;
|
||||
@@ -1868,8 +1847,6 @@ pfnGetPlayerInfo
|
||||
*/
|
||||
static void GAME_EXPORT pfnGetPlayerInfo( int ent_num, hud_player_info_t *pinfo )
|
||||
{
|
||||
player_info_t *player;
|
||||
|
||||
ent_num -= 1; // player list if offset by 1 from ents
|
||||
|
||||
if( ent_num >= cl.maxclients || ent_num < 0 || !cl.players[ent_num].name[0] )
|
||||
@@ -1879,7 +1856,7 @@ static void GAME_EXPORT pfnGetPlayerInfo( int ent_num, hud_player_info_t *pinfo
|
||||
return;
|
||||
}
|
||||
|
||||
player = &cl.players[ent_num];
|
||||
player_info_t *player = &cl.players[ent_num];
|
||||
pinfo->thisplayer = ( ent_num == cl.playernum ) ? true : false;
|
||||
pinfo->name = player->name;
|
||||
pinfo->model = player->model;
|
||||
@@ -1910,11 +1887,9 @@ pfnPlaySoundByIndex
|
||||
*/
|
||||
static void GAME_EXPORT pfnPlaySoundByIndex( int iSound, float volume )
|
||||
{
|
||||
int hSound;
|
||||
|
||||
// make sure what we in-bounds
|
||||
iSound = bound( 0, iSound, MAX_SOUNDS );
|
||||
hSound = cl.sound_index[iSound];
|
||||
int hSound = cl.sound_index[iSound];
|
||||
if( !hSound ) return;
|
||||
|
||||
S_StartSound( NULL, cl.viewentity, CHAN_ITEM, hSound, volume, ATTN_NORM, PITCH_NORM, SND_STOP_LOOPING );
|
||||
@@ -2200,8 +2175,6 @@ pfnCalcShake
|
||||
static void GAME_EXPORT pfnCalcShake( void )
|
||||
{
|
||||
screen_shake_t *const shake = &clgame.shake;
|
||||
float frametime, fraction, freq;
|
||||
int i;
|
||||
|
||||
if( cl.time > shake->time || shake->amplitude <= 0 || shake->frequency <= 0 || shake->duration <= 0 )
|
||||
{
|
||||
@@ -2216,7 +2189,7 @@ static void GAME_EXPORT pfnCalcShake( void )
|
||||
return;
|
||||
}
|
||||
|
||||
frametime = cl_clientframetime();
|
||||
float frametime = cl_clientframetime();
|
||||
|
||||
if( cl.time > shake->next_shake )
|
||||
{
|
||||
@@ -2224,20 +2197,20 @@ static void GAME_EXPORT pfnCalcShake( void )
|
||||
shake->next_shake = (float)cl.time + shake->frequency / shake->duration;
|
||||
|
||||
// randomize each shake
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
shake->offset[i] = COM_RandomFloat( -shake->amplitude, shake->amplitude );
|
||||
shake->angle = COM_RandomFloat( -shake->amplitude * 0.25f, shake->amplitude * 0.25f );
|
||||
}
|
||||
|
||||
// get initial fraction and frequency values over the duration
|
||||
fraction = ((float)cl.time - shake->time ) / shake->duration;
|
||||
freq = fraction != 0.0f ? ( shake->frequency / fraction ) * shake->frequency : 0.0f;
|
||||
float fraction = ((float)cl.time - shake->time ) / shake->duration;
|
||||
float freq = fraction != 0.0f ? ( shake->frequency / fraction ) * shake->frequency : 0.0f;
|
||||
|
||||
// quickly approach zero but apply time over sine wave
|
||||
fraction *= fraction * sin( cl.time * freq );
|
||||
|
||||
// apply shake offset
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
shake->applied_offset[i] = shake->offset[i] * fraction;
|
||||
|
||||
// apply roll angle
|
||||
@@ -2349,10 +2322,7 @@ pfnKillEvent
|
||||
*/
|
||||
static void GAME_EXPORT pfnKillEvents( int entnum, const char *eventname )
|
||||
{
|
||||
int i;
|
||||
event_state_t *es;
|
||||
event_info_t *ei;
|
||||
word eventIndex = CL_EventIndex( eventname );
|
||||
word eventIndex = CL_EventIndex( eventname );
|
||||
|
||||
if( eventIndex >= MAX_EVENTS )
|
||||
return;
|
||||
@@ -2360,12 +2330,12 @@ static void GAME_EXPORT pfnKillEvents( int entnum, const char *eventname )
|
||||
if( entnum < 0 || entnum >= clgame.maxEntities )
|
||||
return;
|
||||
|
||||
es = &cl.events;
|
||||
event_state_t *es = &cl.events;
|
||||
|
||||
// find all events with specified index and kill it
|
||||
for( i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
for( int i = 0; i < MAX_EVENT_QUEUE; i++ )
|
||||
{
|
||||
ei = &es->ei[i];
|
||||
event_info_t *ei = &es->ei[i];
|
||||
|
||||
if( ei->index == eventIndex && ei->entity_index == entnum )
|
||||
{
|
||||
@@ -2395,7 +2365,6 @@ CL_FindModelIndex
|
||||
static int GAME_EXPORT CL_FindModelIndex( const char *m )
|
||||
{
|
||||
char filepath[MAX_QPATH];
|
||||
int i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( m ))
|
||||
return 0;
|
||||
@@ -2403,7 +2372,7 @@ static int GAME_EXPORT CL_FindModelIndex( const char *m )
|
||||
Q_strncpy( filepath, m, sizeof( filepath ));
|
||||
COM_FixSlashes( filepath );
|
||||
|
||||
for( i = 0; i < cl.nummodels; i++ )
|
||||
for( int i = 0; i < cl.nummodels; i++ )
|
||||
{
|
||||
if( !cl.models[i+1] )
|
||||
continue;
|
||||
@@ -2735,9 +2704,7 @@ pfnLoadMapSprite
|
||||
*/
|
||||
static model_t *pfnLoadMapSprite( const char *filename )
|
||||
{
|
||||
model_t *mod;
|
||||
|
||||
mod = Mod_FindName( filename, false );
|
||||
model_t *mod = Mod_FindName( filename, false );
|
||||
|
||||
if( CL_LoadHudSprite( filename, mod, SPR_MAPSPRITE, 0 ))
|
||||
return mod;
|
||||
@@ -2813,12 +2780,10 @@ PlayerInfo_SetValueForKey
|
||||
*/
|
||||
static void GAME_EXPORT PlayerInfo_SetValueForKey( const char *key, const char *value )
|
||||
{
|
||||
convar_t *var;
|
||||
|
||||
if( !Q_strcmp( Info_ValueForKey( cls.userinfo, key ), value ))
|
||||
return; // no changes ?
|
||||
|
||||
var = Cvar_FindVar( key );
|
||||
convar_t *var = Cvar_FindVar( key );
|
||||
|
||||
if( var && FBitSet( var->flags, FCVAR_USERINFO ))
|
||||
{
|
||||
@@ -2899,11 +2864,10 @@ pfnGetMousePos
|
||||
*/
|
||||
static void GAME_EXPORT pfnGetMousePos( struct tagPOINT *ppt )
|
||||
{
|
||||
int x, y;
|
||||
|
||||
if( !ppt )
|
||||
return;
|
||||
|
||||
int x, y;
|
||||
Platform_GetMousePos( &x, &y );
|
||||
|
||||
ppt->x = x;
|
||||
@@ -3052,11 +3016,11 @@ static int GAME_EXPORT pfnDrawStringReverse( int x, int y, const char *str, int
|
||||
{
|
||||
rgba_t color = { r, g, b, 255 };
|
||||
int flags = FONT_DRAW_HUD | FONT_DRAW_NOLF;
|
||||
int width;
|
||||
|
||||
if( hud_utf8.value )
|
||||
SetBits( flags, FONT_DRAW_UTF8 );
|
||||
|
||||
int width;
|
||||
CL_DrawStringLen( &cls.creditsFont, str, &width, NULL, flags );
|
||||
|
||||
x -= width;
|
||||
@@ -3236,11 +3200,9 @@ TriBrightness
|
||||
*/
|
||||
void TriBrightness( float brightness )
|
||||
{
|
||||
float r, g, b;
|
||||
|
||||
r = clgame.ds.triRGBA[0] * clgame.ds.triRGBA[3] * brightness;
|
||||
g = clgame.ds.triRGBA[1] * clgame.ds.triRGBA[3] * brightness;
|
||||
b = clgame.ds.triRGBA[2] * clgame.ds.triRGBA[3] * brightness;
|
||||
float r = clgame.ds.triRGBA[0] * clgame.ds.triRGBA[3] * brightness;
|
||||
float g = clgame.ds.triRGBA[1] * clgame.ds.triRGBA[3] * brightness;
|
||||
float b = clgame.ds.triRGBA[2] * clgame.ds.triRGBA[3] * brightness;
|
||||
|
||||
ref.dllFuncs.Color4f( r, g, b, 1.0f );
|
||||
}
|
||||
@@ -3287,11 +3249,9 @@ NOTE: dlights are ignored
|
||||
*/
|
||||
void TriLightAtPoint( float *pos, float *value )
|
||||
{
|
||||
colorVec vLightColor;
|
||||
|
||||
if( !pos || !value ) return;
|
||||
|
||||
vLightColor = ref.dllFuncs.R_LightPoint( pos );
|
||||
colorVec vLightColor = ref.dllFuncs.R_LightPoint( pos );
|
||||
|
||||
value[0] = vLightColor.r;
|
||||
value[1] = vLightColor.g;
|
||||
@@ -3324,9 +3284,9 @@ bind current texture
|
||||
*/
|
||||
int TriSpriteTexture( model_t *pSpriteModel, int frame )
|
||||
{
|
||||
int gl_texturenum;
|
||||
int gl_texturenum = R_GetSpriteTexture( pSpriteModel, frame );
|
||||
|
||||
if(( gl_texturenum = R_GetSpriteTexture( pSpriteModel, frame )) <= 0 )
|
||||
if( gl_texturenum <= 0 )
|
||||
return 0;
|
||||
|
||||
ref.dllFuncs.GL_Bind( XASH_TEXTURE0, gl_texturenum );
|
||||
@@ -3467,13 +3427,10 @@ NetAPI_CancelRequest
|
||||
*/
|
||||
static void GAME_EXPORT NetAPI_CancelRequest( int context )
|
||||
{
|
||||
net_request_t *nr;
|
||||
int i;
|
||||
;
|
||||
// find a specified request
|
||||
for( i = 0; i < MAX_REQUESTS; i++ )
|
||||
for( int i = 0; i < MAX_REQUESTS; i++ )
|
||||
{
|
||||
nr = &clgame.net_requests[i];
|
||||
net_request_t *nr = &clgame.net_requests[i];
|
||||
|
||||
if( clgame.net_requests[i].resp.context == context )
|
||||
{
|
||||
@@ -3498,13 +3455,10 @@ NetAPI_CancelAllRequests
|
||||
*/
|
||||
void GAME_EXPORT NetAPI_CancelAllRequests( void )
|
||||
{
|
||||
net_request_t *nr;
|
||||
int i;
|
||||
|
||||
// tell the user about cancel
|
||||
for( i = 0; i < MAX_REQUESTS; i++ )
|
||||
for( int i = 0; i < MAX_REQUESTS; i++ )
|
||||
{
|
||||
nr = &clgame.net_requests[i];
|
||||
net_request_t *nr = &clgame.net_requests[i];
|
||||
if( !nr->pfnFunc ) continue; // not used
|
||||
SetBits( nr->resp.error, NET_ERROR_TIMEOUT );
|
||||
nr->resp.ping = host.realtime - nr->timesend;
|
||||
@@ -3981,12 +3935,11 @@ static engine_studio_api_t gStudioAPI =
|
||||
static void CL_InitStudioAPI( void )
|
||||
{
|
||||
static r_studio_interface_t gDefaultStudioDraw;
|
||||
r_studio_interface_t *pStudioDraw;
|
||||
|
||||
if( !ref.dllFuncs.R_StudioFillAPI( &gStudioAPI, &gDefaultStudioDraw ))
|
||||
return;
|
||||
|
||||
pStudioDraw = &gDefaultStudioDraw;
|
||||
r_studio_interface_t *pStudioDraw = &gDefaultStudioDraw;
|
||||
|
||||
if( clgame.dllFuncs.pfnGetStudioModelInterface )
|
||||
clgame.dllFuncs.pfnGetStudioModelInterface( STUDIO_INTERFACE_VERSION, &pStudioDraw, &gStudioAPI );
|
||||
@@ -4001,7 +3954,6 @@ qboolean CL_LoadProgs( const char *name )
|
||||
qboolean valid_single_export = false;
|
||||
qboolean missed_exports = false;
|
||||
qboolean try_internal_vgui_support = GI->internal_vgui_support;
|
||||
int i;
|
||||
|
||||
if( clgame.hInstance ) CL_UnloadProgs();
|
||||
|
||||
@@ -4057,7 +4009,7 @@ qboolean CL_LoadProgs( const char *name )
|
||||
if( GetClientAPI != NULL ) // check critical functions again
|
||||
valid_single_export = ValidateExports( cdll_exports, ARRAYSIZE( cdll_exports ));
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( cdll_exports ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( cdll_exports ); i++ )
|
||||
{
|
||||
if( *(cdll_exports[i].func) != NULL )
|
||||
continue; // already got through 'F' or 'GetClientAPI'
|
||||
@@ -4088,7 +4040,7 @@ qboolean CL_LoadProgs( const char *name )
|
||||
if( !valid_single_export )
|
||||
ClearExports( cdll_new_exports, ARRAYSIZE( cdll_new_exports ));
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( cdll_new_exports ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( cdll_new_exports ); i++ )
|
||||
{
|
||||
if( *(cdll_new_exports[i].func) != NULL )
|
||||
continue; // already gott through 'F' or 'GetClientAPI'
|
||||
|
||||
@@ -78,8 +78,6 @@ void UI_MouseMove( int x, int y )
|
||||
|
||||
void UI_SetActiveMenu( qboolean fActive )
|
||||
{
|
||||
movie_state_t *cin_state;
|
||||
|
||||
if( !gameui.hInstance )
|
||||
{
|
||||
if( !fActive )
|
||||
@@ -93,7 +91,7 @@ void UI_SetActiveMenu( qboolean fActive )
|
||||
if( !fActive )
|
||||
{
|
||||
// close logo when menu is shutdown
|
||||
cin_state = AVI_GetState( CIN_LOGO );
|
||||
movie_state_t *cin_state = AVI_GetState( CIN_LOGO );
|
||||
AVI_CloseVideo( cin_state );
|
||||
}
|
||||
}
|
||||
@@ -356,12 +354,10 @@ static float GAME_EXPORT UI_GetLogoLength( void )
|
||||
|
||||
static void UI_UpdateUserinfo( void )
|
||||
{
|
||||
player_info_t *player;
|
||||
|
||||
if( !host.userinfo_changed )
|
||||
return;
|
||||
|
||||
player = &gameui.playerinfo;
|
||||
player_info_t *player = &gameui.playerinfo;
|
||||
|
||||
Q_strncpy( player->userinfo, cls.userinfo, sizeof( player->userinfo ));
|
||||
Q_strncpy( player->name, Info_ValueForKey( player->userinfo, "name" ), sizeof( player->name ));
|
||||
@@ -427,10 +423,8 @@ static void UI_ToOldGameInfo( GAMEINFO *out, const gameinfo2_t *in )
|
||||
|
||||
static void UI_GetModsInfo( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
gameui.modsInfo = Mem_Calloc( gameui.mempool, sizeof( *gameui.modsInfo ) * FI->numgames );
|
||||
for( i = 0; i < FI->numgames; i++ )
|
||||
for( int i = 0; i < FI->numgames; i++ )
|
||||
UI_ConvertGameInfo( &gameui.modsInfo[i], FI->games[i] );
|
||||
}
|
||||
|
||||
@@ -755,10 +749,9 @@ drawing string like a console string
|
||||
*/
|
||||
static int GAME_EXPORT UI_DrawConsoleString( int x, int y, const char *string )
|
||||
{
|
||||
int drawLen;
|
||||
|
||||
if( !string || !*string ) return 0; // silent ignore
|
||||
drawLen = Con_DrawString( x, y, string, gameui.ds.textColor );
|
||||
|
||||
int drawLen = Con_DrawString( x, y, string, gameui.ds.textColor );
|
||||
MakeRGBA( gameui.ds.textColor, 255, 255, 255, 255 );
|
||||
|
||||
return (x + drawLen); // exclude color prexfixes
|
||||
@@ -958,14 +951,12 @@ static GAMEINFO ** GAME_EXPORT pfnGetGamesList( int *numGames )
|
||||
|
||||
if( !gameui.oldModsInfo )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !gameui.modsInfo )
|
||||
UI_GetModsInfo();
|
||||
|
||||
// first allocate array of pointers
|
||||
gameui.oldModsInfo = Mem_Calloc( gameui.mempool, sizeof( *gameui.oldModsInfo ) * FI->numgames );
|
||||
for( i = 0; i < FI->numgames; i++ )
|
||||
for( int i = 0; i < FI->numgames; i++ )
|
||||
{
|
||||
gameui.oldModsInfo[i] = Mem_Calloc( gameui.mempool, sizeof( *gameui.oldModsInfo[i] ));
|
||||
UI_ToOldGameInfo( gameui.oldModsInfo[i], &gameui.modsInfo[i] );
|
||||
@@ -1135,12 +1126,10 @@ static void GAME_EXPORT pfnCon_DefaultColor( int r, int g, int b )
|
||||
|
||||
static void GAME_EXPORT pfnSetCursor( void *hCursor )
|
||||
{
|
||||
uintptr_t cursor;
|
||||
|
||||
if( !gameui.use_extended_api )
|
||||
return; // ignore original Xash menus
|
||||
|
||||
cursor = (uintptr_t)hCursor;
|
||||
uintptr_t cursor = (uintptr_t)hCursor;
|
||||
if( cursor < dc_user || cursor > dc_last )
|
||||
return;
|
||||
|
||||
|
||||
@@ -63,12 +63,10 @@ static int pfnDrawScaledCharacter( int x, int y, int number, int r, int g, int b
|
||||
if( fabs( g_font_scale - scale ) > 0.1f ||
|
||||
g_scaled_font.hFontTexture != cls.creditsFont.hFontTexture )
|
||||
{
|
||||
int i;
|
||||
|
||||
g_scaled_font = cls.creditsFont;
|
||||
g_scaled_font.scale *= scale;
|
||||
g_scaled_font.charHeight *= scale;
|
||||
for( i = 0; i < ARRAYSIZE( g_scaled_font.charWidths ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( g_scaled_font.charWidths ); i++ )
|
||||
g_scaled_font.charWidths[i] *= scale;
|
||||
|
||||
g_font_scale = scale;
|
||||
|
||||
@@ -101,10 +101,9 @@ CL_SetIdealPitch
|
||||
void CL_SetIdealPitch( void )
|
||||
{
|
||||
float angleval, sinval, cosval;
|
||||
int i, j, step, dir, steps;
|
||||
int i, dir, steps;
|
||||
float z[MAX_FORWARD];
|
||||
vec3_t top, bottom;
|
||||
pmtrace_t tr;
|
||||
|
||||
if( cl.local.onground == -1 )
|
||||
return;
|
||||
@@ -116,6 +115,8 @@ void CL_SetIdealPitch( void )
|
||||
// 160 or so units to see what's below
|
||||
for( i = 0; i < MAX_FORWARD; i++ )
|
||||
{
|
||||
pmtrace_t tr;
|
||||
|
||||
top[0] = cl.simorg[0] + cosval * (i + 3.0f) * 12.0f;
|
||||
top[1] = cl.simorg[1] + sinval * (i + 3.0f) * 12.0f;
|
||||
top[2] = cl.simorg[2] + cl.viewheight[2];
|
||||
@@ -137,9 +138,10 @@ void CL_SetIdealPitch( void )
|
||||
dir = 0;
|
||||
steps = 0;
|
||||
|
||||
for( j = 1; j < i; j++ )
|
||||
for( int j = 1; j < i; j++ )
|
||||
{
|
||||
step = z[j] - z[j-1];
|
||||
int step = z[j] - z[j-1];
|
||||
|
||||
if( step > -ON_EPSILON && step < ON_EPSILON )
|
||||
continue;
|
||||
|
||||
@@ -244,15 +246,10 @@ This sets up the first phase.
|
||||
*/
|
||||
void GAME_EXPORT CL_SetUpPlayerPrediction( int dopred, int bIncludeLocalClient )
|
||||
{
|
||||
entity_state_t *state;
|
||||
predicted_player_t *player;
|
||||
cl_entity_t *ent;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < MAX_CLIENTS; i++ )
|
||||
for( int i = 0; i < MAX_CLIENTS; i++ )
|
||||
{
|
||||
state = &cl.frames[cl.parsecountmod].playerstate[i];
|
||||
player = &cls.predicted_players[i];
|
||||
entity_state_t *state = &cl.frames[cl.parsecountmod].playerstate[i];
|
||||
predicted_player_t *player = &cls.predicted_players[i];
|
||||
|
||||
player->active = false;
|
||||
|
||||
@@ -279,7 +276,7 @@ void GAME_EXPORT CL_SetUpPlayerPrediction( int dopred, int bIncludeLocalClient )
|
||||
}
|
||||
else
|
||||
{
|
||||
ent = CL_GetEntityByIndex( i + 1 );
|
||||
cl_entity_t *ent = CL_GetEntityByIndex( i + 1 );
|
||||
|
||||
CL_ComputePlayerOrigin( ent );
|
||||
|
||||
@@ -397,16 +394,13 @@ collect solid entities
|
||||
*/
|
||||
static void CL_AddLinksToPmove( frame_t *frame )
|
||||
{
|
||||
entity_state_t *state;
|
||||
model_t *model;
|
||||
physent_t *pe;
|
||||
int i;
|
||||
|
||||
if( !frame->valid ) return;
|
||||
|
||||
for( i = 0; i < frame->num_entities; i++ )
|
||||
for( int i = 0; i < frame->num_entities; i++ )
|
||||
{
|
||||
state = &cls.packet_entities[(frame->first_entity + i) % cls.num_client_entities];
|
||||
entity_state_t *state = &cls.packet_entities[(frame->first_entity + i) % cls.num_client_entities];
|
||||
model_t *model;
|
||||
physent_t *pe;
|
||||
|
||||
if( state->number >= 1 && state->number <= cl.maxclients )
|
||||
continue;
|
||||
@@ -506,18 +500,14 @@ pmove must be setup with world and solid entity hulls before calling
|
||||
*/
|
||||
void GAME_EXPORT CL_SetSolidPlayers( int playernum )
|
||||
{
|
||||
entity_state_t *state;
|
||||
predicted_player_t *player;
|
||||
physent_t *pe;
|
||||
int i;
|
||||
|
||||
if( !cl_solid_players.value )
|
||||
return;
|
||||
|
||||
for( i = 0; i < MAX_CLIENTS; i++ )
|
||||
for( int i = 0; i < MAX_CLIENTS; i++ )
|
||||
{
|
||||
state = &cl.frames[cl.parsecountmod].playerstate[i];
|
||||
player = &cls.predicted_players[i];
|
||||
entity_state_t *state = &cl.frames[cl.parsecountmod].playerstate[i];
|
||||
predicted_player_t *player = &cls.predicted_players[i];
|
||||
physent_t *pe;
|
||||
|
||||
if( playernum == -1 )
|
||||
{
|
||||
@@ -562,18 +552,17 @@ CL_WaterEntity
|
||||
*/
|
||||
int GAME_EXPORT CL_WaterEntity( const float *rgflPos )
|
||||
{
|
||||
physent_t *pe;
|
||||
hull_t *hull;
|
||||
vec3_t test, offset;
|
||||
int i, oldhull;
|
||||
int oldhull;
|
||||
|
||||
if( !rgflPos ) return -1;
|
||||
|
||||
oldhull = clgame.pmove->usehull;
|
||||
|
||||
for( i = 0; i < clgame.pmove->numphysent; i++ )
|
||||
for( int i = 0; i < clgame.pmove->numphysent; i++ )
|
||||
{
|
||||
pe = &clgame.pmove->physents[i];
|
||||
physent_t *pe = &clgame.pmove->physents[i];
|
||||
hull_t *hull;
|
||||
vec3_t test, offset;
|
||||
|
||||
if( pe->solid != SOLID_NOT ) // disabled ?
|
||||
continue;
|
||||
@@ -657,9 +646,8 @@ returns water brush where inside pos
|
||||
*/
|
||||
cl_entity_t *CL_GetWaterEntity( const float *rgflPos )
|
||||
{
|
||||
int entnum;
|
||||
int entnum = CL_WaterEntity( rgflPos );
|
||||
|
||||
entnum = CL_WaterEntity( rgflPos );
|
||||
if( entnum <= 0 ) return NULL; // world or not water
|
||||
|
||||
return CL_GetEntityByIndex( entnum );
|
||||
@@ -732,8 +720,6 @@ CL_InitClientMove
|
||||
*/
|
||||
void CL_InitClientMove( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
Pmove_Init ();
|
||||
|
||||
clgame.pmove->server = false; // running at client
|
||||
@@ -741,7 +727,7 @@ void CL_InitClientMove( void )
|
||||
clgame.pmove->runfuncs = false;
|
||||
|
||||
// enumerate client hulls
|
||||
for( i = 0; i < MAX_MAP_HULLS; i++ )
|
||||
for( int i = 0; i < MAX_MAP_HULLS; i++ )
|
||||
{
|
||||
if( clgame.dllFuncs.pfnGetHullBounds( i, host.player_mins[i], host.player_maxs[i] ))
|
||||
Con_Reportf( "CL: hull%i, player_mins: %g %g %g, player_maxs: %g %g %g\n", i,
|
||||
|
||||
@@ -72,18 +72,15 @@ static qboolean CheckSkybox( const char *name, char out[SKYBOX_MAX_SIDES][MAX_ST
|
||||
{
|
||||
static const char *skybox_ext[3] = { "dds", "tga", "bmp" };
|
||||
static const char *skybox_delim[2] = { "", "_" }; // no space for HL style, underscore for Q1 style
|
||||
int i;
|
||||
|
||||
// search for skybox images
|
||||
for( i = 0; i < ARRAYSIZE( skybox_ext ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( skybox_ext ); i++ )
|
||||
{
|
||||
int j;
|
||||
|
||||
for( j = 0; j < ARRAYSIZE( skybox_delim ); j++ )
|
||||
for( int j = 0; j < ARRAYSIZE( skybox_delim ); j++ )
|
||||
{
|
||||
int k, num_checked_sides = 0;
|
||||
int num_checked_sides = 0;
|
||||
|
||||
for( k = 0; k < SKYBOX_MAX_SIDES; k++ )
|
||||
for( int k = 0; k < SKYBOX_MAX_SIDES; k++ )
|
||||
{
|
||||
char sidename[MAX_VA_STRING];
|
||||
|
||||
@@ -109,7 +106,6 @@ void R_SetupSky( const char *name )
|
||||
char sidenames[SKYBOX_MAX_SIDES][MAX_STRING];
|
||||
int skyboxTextures[SKYBOX_MAX_SIDES] = { 0 };
|
||||
int i, len;
|
||||
qboolean result;
|
||||
|
||||
if( COM_StringEmptyOrNULL( name ))
|
||||
{
|
||||
@@ -125,10 +121,9 @@ void R_SetupSky( const char *name )
|
||||
|
||||
if( loadname[len - 1] == '_' )
|
||||
loadname[len - 1] = '\0';
|
||||
result = CheckSkybox( loadname, sidenames );
|
||||
|
||||
// to prevent infinite recursion if default skybox was missed
|
||||
if( !result && Q_stricmp( name, DEFAULT_SKYBOX_NAME ))
|
||||
if( !CheckSkybox( loadname, sidenames ) && Q_stricmp( name, DEFAULT_SKYBOX_NAME ))
|
||||
{
|
||||
Con_Reportf( S_WARN "missed or incomplete skybox '%s'\n", name );
|
||||
R_SetupSky( DEFAULT_SKYBOX_NAME ); // force to default
|
||||
|
||||
@@ -35,7 +35,6 @@ static CVAR_DEFINE( v_gamma, "gamma", "2.5", FCVAR_ARCHIVE, "gamma amount" );
|
||||
static void BuildGammaTable( const float gamma, const float brightness, const float texgamma, const float lightgamma )
|
||||
{
|
||||
float g1, g2, g3;
|
||||
int i;
|
||||
|
||||
if( gamma != 0.0 )
|
||||
g1 = 1.0 / gamma;
|
||||
@@ -50,7 +49,7 @@ static void BuildGammaTable( const float gamma, const float brightness, const fl
|
||||
else
|
||||
g3 = 0.05;
|
||||
|
||||
for( i = 0; i < 256; i++ )
|
||||
for( int i = 0; i < 256; i++ )
|
||||
{
|
||||
// keep it float or texgamma test will fail with -ffast-math
|
||||
float d = pow( i / 255.0, (double)g2 );
|
||||
@@ -58,11 +57,9 @@ static void BuildGammaTable( const float gamma, const float brightness, const fl
|
||||
texgammatable[i] = bound( 0, inf, 255 );
|
||||
}
|
||||
|
||||
for( i = 0; i < 1024; i++ )
|
||||
for( int i = 0; i < 1024; i++ )
|
||||
{
|
||||
double d;
|
||||
float f = pow( i / 1023.0, (double)lightgamma );
|
||||
int inf;
|
||||
|
||||
if( brightness > 1.0 )
|
||||
f *= brightness;
|
||||
@@ -72,8 +69,8 @@ static void BuildGammaTable( const float gamma, const float brightness, const fl
|
||||
else
|
||||
f = (( f - g3 ) / ( 1.0 - g3 )) * 0.875 + 0.125;
|
||||
|
||||
d = pow( (double)f, (double)g1 ); // do not remove the cast, or tests fail
|
||||
inf = d * 1023.0;
|
||||
double d = pow( (double)f, (double)g1 ); // do not remove the cast, or tests fail
|
||||
int inf = d * 1023.0;
|
||||
lightgammatable[i] = bound( 0, inf, 1023 );
|
||||
|
||||
// do these calculations in the same loop...
|
||||
@@ -255,11 +252,9 @@ static void Test_PrecomputedGammaTables( void )
|
||||
|
||||
while(( data = Test_GetGammaTables( i )))
|
||||
{
|
||||
int j;
|
||||
|
||||
BuildGammaTable( data->gamma, data->brightness, data->texgamma, data->lightgamma );
|
||||
|
||||
for( j = 0; j < 1024; j++ )
|
||||
for( int j = 0; j < 1024; j++ )
|
||||
{
|
||||
if( j < 256 )
|
||||
{
|
||||
|
||||
@@ -102,9 +102,8 @@ static qboolean ID_ProcessFile( bloomfilter_t *value, const char *path );
|
||||
static void ID_BloomFilter_f( void )
|
||||
{
|
||||
bloomfilter_t value = 0;
|
||||
int i;
|
||||
|
||||
for( i = 1; i < Cmd_Argc(); i++ )
|
||||
for( int i = 1; i < Cmd_Argc(); i++ )
|
||||
value |= BloomFilter_ProcessStr( Cmd_Argv( i ) );
|
||||
|
||||
Msg( "%d %016"PRIX64"\n", BloomFilter_Weight( value ), value );
|
||||
@@ -119,7 +118,6 @@ static qboolean ID_VerifyHEX( const char *hex )
|
||||
uint chars = 0;
|
||||
char prev = 0;
|
||||
qboolean monotonic = true; // detect 11:22...
|
||||
int weight = 0;
|
||||
|
||||
while( *hex++ )
|
||||
{
|
||||
@@ -142,6 +140,7 @@ static qboolean ID_VerifyHEX( const char *hex )
|
||||
if( monotonic )
|
||||
return false;
|
||||
|
||||
int weight = 0;
|
||||
while( chars )
|
||||
{
|
||||
if( chars & 1 )
|
||||
@@ -170,7 +169,7 @@ static void ID_VerifyHEX_f( void )
|
||||
static qboolean ID_ProcessCPUInfo( bloomfilter_t *value )
|
||||
{
|
||||
int cpuinfofd = open( "/proc/cpuinfo", O_RDONLY );
|
||||
char buffer[1024], *pbuf, *pbuf2;
|
||||
char buffer[1024];
|
||||
int ret;
|
||||
|
||||
if( cpuinfofd < 0 )
|
||||
@@ -189,12 +188,12 @@ static qboolean ID_ProcessCPUInfo( bloomfilter_t *value )
|
||||
if( !ret )
|
||||
return false;
|
||||
|
||||
pbuf = Q_stristr( buffer, "Serial" );
|
||||
char *pbuf = Q_stristr( buffer, "Serial" );
|
||||
if( !pbuf )
|
||||
return false;
|
||||
pbuf += 6;
|
||||
|
||||
pbuf2 = Q_strchrnul( pbuf, '\n' );
|
||||
char *pbuf2 = Q_strchrnul( pbuf, '\n' );
|
||||
*pbuf2 = 0;
|
||||
|
||||
if( !ID_VerifyHEX( pbuf ) )
|
||||
@@ -207,20 +206,18 @@ static qboolean ID_ProcessCPUInfo( bloomfilter_t *value )
|
||||
static qboolean ID_ValidateNetDevice( const char *dev )
|
||||
{
|
||||
const char *prefix = "/sys/class/net";
|
||||
byte *pfile;
|
||||
int assignType;
|
||||
|
||||
// These devices are fake, their mac address is generated each boot, while assign_type is 0
|
||||
if( !Q_strnicmp( dev, "ccmni", sizeof( "ccmni" ) ) ||
|
||||
!Q_strnicmp( dev, "ifb", sizeof( "ifb" ) ) )
|
||||
return false;
|
||||
|
||||
pfile = FS_LoadDirectFile( va( "%s/%s/addr_assign_type", prefix, dev ), NULL );
|
||||
byte *pfile = FS_LoadDirectFile( va( "%s/%s/addr_assign_type", prefix, dev ), NULL );
|
||||
|
||||
// if NULL, it may be old kernel
|
||||
if( pfile )
|
||||
{
|
||||
assignType = Q_atoi( (char*)pfile );
|
||||
int assignType = Q_atoi( (char*)pfile );
|
||||
|
||||
Mem_Free( pfile );
|
||||
|
||||
@@ -500,12 +497,10 @@ static int ID_CheckWMIC( bloomfilter_t value, const wchar_t *cmdline )
|
||||
pbuf = COM_ParseFile( buffer, token, sizeof( token )); // Header
|
||||
while(( pbuf = COM_ParseFile( pbuf, token, sizeof( token ))))
|
||||
{
|
||||
bloomfilter_t filter;
|
||||
|
||||
if( !ID_VerifyHEX( token ))
|
||||
continue;
|
||||
|
||||
filter = BloomFilter_ProcessStr( token );
|
||||
bloomfilter_t filter = BloomFilter_ProcessStr( token );
|
||||
count += ( filter & value ) == filter;
|
||||
}
|
||||
|
||||
|
||||
@@ -88,13 +88,12 @@ Apply gyro movement to view angles
|
||||
*/
|
||||
void IN_GyroFinalizeMove( float *fw, float *side, float *dpitch, float *dyaw )
|
||||
{
|
||||
platform_orientation_t orient;
|
||||
float orient_scale = 1.0f;
|
||||
|
||||
if( !gyro_enable.value || !gyro_available.value )
|
||||
return;
|
||||
|
||||
orient = Platform_GetDisplayOrientation();
|
||||
platform_orientation_t orient = Platform_GetDisplayOrientation();
|
||||
if( orient == ORIENTATION_LANDSCAPE_FLIPPED )
|
||||
orient_scale = -1.0f;
|
||||
|
||||
|
||||
@@ -129,9 +129,8 @@ static void Joy_HatMotionEvent( int value )
|
||||
{ JOY_HAT_LEFT, K_LEFTARROW },
|
||||
{ JOY_HAT_RIGHT, K_RIGHTARROW },
|
||||
};
|
||||
int i;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
if( value & keys[i].mask )
|
||||
{
|
||||
@@ -317,9 +316,8 @@ void Joy_FinalizeMove( float *fw, float *side, float *dpitch, float *dyaw )
|
||||
if( FBitSet( joy_axis_binding.flags, FCVAR_CHANGED ) )
|
||||
{
|
||||
const char *bind = joy_axis_binding.string;
|
||||
size_t i;
|
||||
|
||||
for( i = 0; bind[i] && i < MAX_AXES; i++ )
|
||||
for( size_t i = 0; bind[i] && i < MAX_AXES; i++ )
|
||||
{
|
||||
switch( bind[i] )
|
||||
{
|
||||
@@ -535,8 +533,6 @@ void Joy_DrawDebug( void )
|
||||
}
|
||||
|
||||
qboolean pressed = Key_IsDown( buttons[i] );
|
||||
int btn_w = 0;
|
||||
rgba_t color;
|
||||
string name;
|
||||
|
||||
Q_strncpy( name, Key_KeynumToString( buttons[i] ), sizeof( name ));
|
||||
@@ -545,8 +541,11 @@ void Joy_DrawDebug( void )
|
||||
if( p )
|
||||
*p = 0;
|
||||
|
||||
rgba_t color;
|
||||
MakeRGBA( color, pressed ? 0 : 255, pressed ? 255 : 0, 0, 255 );
|
||||
CL_DrawString( x, y, name, color, font, 0 );
|
||||
|
||||
int btn_w = 0;
|
||||
CL_DrawStringLen( font, name, &btn_w, NULL, 0 );
|
||||
x += btn_w + 6;
|
||||
}
|
||||
|
||||
@@ -187,8 +187,6 @@ to be configured even if they don't have defined names.
|
||||
*/
|
||||
static int Key_StringToKeynum( const char *str )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !str || !str[0] )
|
||||
return -1;
|
||||
|
||||
@@ -207,7 +205,7 @@ static int Key_StringToKeynum( const char *str )
|
||||
}
|
||||
|
||||
// scan for a text match
|
||||
for( i = 0; i < ARRAYSIZE( keynames ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keynames ); i++ )
|
||||
{
|
||||
if( !Q_stricmp( str, keynames[i].name ))
|
||||
return keynames[i].keynum;
|
||||
@@ -293,19 +291,16 @@ Key_GetKey
|
||||
*/
|
||||
static int Key_GetKey( const char *pBinding )
|
||||
{
|
||||
int i, len;
|
||||
const char *p;
|
||||
|
||||
if( !pBinding ) return -1;
|
||||
|
||||
len = Q_strlen( pBinding );
|
||||
int len = Q_strlen( pBinding );
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
if( !keys[i].binding )
|
||||
continue;
|
||||
|
||||
p = keys[i].binding;
|
||||
const char *p = keys[i].binding;
|
||||
|
||||
if( *p == '+' )
|
||||
p++;
|
||||
@@ -340,15 +335,13 @@ Key_Unbind_f
|
||||
*/
|
||||
static void Key_Unbind_f( void )
|
||||
{
|
||||
int b;
|
||||
|
||||
if( Cmd_Argc() != 2 )
|
||||
{
|
||||
Con_Printf( S_USAGE "unbind <key> : remove commands from a key\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
b = Key_StringToKeynum( Cmd_Argv( 1 ));
|
||||
int b = Key_StringToKeynum( Cmd_Argv( 1 ));
|
||||
|
||||
if( b == -1 )
|
||||
{
|
||||
@@ -372,9 +365,7 @@ Key_Unbindall_f
|
||||
*/
|
||||
static void Key_Unbindall_f( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
if( keys[i].binding )
|
||||
Key_SetBinding( i, "" );
|
||||
@@ -392,17 +383,15 @@ Key_Reset_f
|
||||
*/
|
||||
static void Key_Reset_f( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// clear all keys first
|
||||
for( i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
if( keys[i].binding )
|
||||
Key_SetBinding( i, "" );
|
||||
}
|
||||
|
||||
// apply default values
|
||||
for( i = 0; i < ARRAYSIZE( keynames ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keynames ); i++ )
|
||||
Key_SetBinding( keynames[i].keynum, keynames[i].binding );
|
||||
}
|
||||
|
||||
@@ -413,10 +402,7 @@ Key_Bind_f
|
||||
*/
|
||||
static void Key_Bind_f( void )
|
||||
{
|
||||
char cmd[1024];
|
||||
int i, c, b;
|
||||
|
||||
c = Cmd_Argc();
|
||||
int c = Cmd_Argc();
|
||||
|
||||
if( c < 2 )
|
||||
{
|
||||
@@ -424,7 +410,7 @@ static void Key_Bind_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
b = Key_StringToKeynum( Cmd_Argv( 1 ));
|
||||
int b = Key_StringToKeynum( Cmd_Argv( 1 ));
|
||||
|
||||
if( b == -1 )
|
||||
{
|
||||
@@ -441,9 +427,10 @@ static void Key_Bind_f( void )
|
||||
}
|
||||
|
||||
// copy the rest of the command line
|
||||
char cmd[1024];
|
||||
cmd[0] = 0; // start out with a null string
|
||||
|
||||
for( i = 2; i < c; i++ )
|
||||
for( int i = 2; i < c; i++ )
|
||||
{
|
||||
Q_strncat( cmd, Cmd_Argv( i ), sizeof( cmd ));
|
||||
if( i != ( c - 1 )) Q_strncat( cmd, " ", sizeof( cmd ));
|
||||
@@ -461,18 +448,16 @@ Writes lines containing "bind key value"
|
||||
*/
|
||||
void Key_WriteBindings( file_t *f )
|
||||
{
|
||||
int i;
|
||||
string newCommand;
|
||||
|
||||
if( !f ) return;
|
||||
|
||||
FS_Printf( f, "unbindall\n" );
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
if( COM_StringEmptyOrNULL( keys[i].binding ))
|
||||
continue;
|
||||
|
||||
string newCommand;
|
||||
Cmd_Escape( newCommand, keys[i].binding, sizeof( newCommand ));
|
||||
|
||||
// NOTE: as TheKingFireS figured out, some particular mods (like CoF) do not
|
||||
@@ -491,9 +476,7 @@ Key_Bindlist_f
|
||||
*/
|
||||
static void Key_Bindlist_f( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
if( COM_StringEmptyOrNULL( keys[i].binding ))
|
||||
continue;
|
||||
@@ -514,10 +497,9 @@ qboolean Cmd_GetKeysList( const char *s, char *completedname, int length, qboole
|
||||
size_t i, numkeys;
|
||||
string keys_strings[ARRAYSIZE( keys )];
|
||||
string matchbuf;
|
||||
int len;
|
||||
|
||||
// compare keys list with current keyword
|
||||
len = Q_strlen( s );
|
||||
int len = Q_strlen( s );
|
||||
|
||||
for( i = 0, numkeys = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
@@ -569,8 +551,6 @@ Key_Init
|
||||
*/
|
||||
void Key_Init( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// register our functions
|
||||
Cmd_AddRestrictedCommand( "bind", Key_Bind_f, "binds a command to the specified key in bindmap" );
|
||||
Cmd_AddRestrictedCommand( "unbind", Key_Unbind_f, "removes a command on the specified key in bindmap" );
|
||||
@@ -580,7 +560,7 @@ void Key_Init( void )
|
||||
Cmd_AddCommand( "makehelp", Key_EnumCmds_f, "write help.txt that contains all console cvars and cmds" );
|
||||
|
||||
// setup default binding. "unbindall" from config.cfg will be reset it
|
||||
for( i = 0; i < ARRAYSIZE( keynames ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keynames ); i++ )
|
||||
Key_SetBinding( keynames[i].keynum, keynames[i].binding );
|
||||
|
||||
Cvar_RegisterVariable( &key_rotate );
|
||||
@@ -594,21 +574,20 @@ Key_AddKeyCommands
|
||||
*/
|
||||
static void Key_AddKeyCommands( int key, const char *kb, qboolean down )
|
||||
{
|
||||
char button[1024];
|
||||
char *buttonPtr;
|
||||
char cmd[1024];
|
||||
int i;
|
||||
|
||||
if( !kb ) return;
|
||||
buttonPtr = button;
|
||||
|
||||
for( i = 0; ; i++ )
|
||||
char button[1024];
|
||||
char *buttonPtr = button;
|
||||
|
||||
for( int i = 0; ; i++ )
|
||||
{
|
||||
if( kb[i] == ';' || !kb[i] )
|
||||
{
|
||||
*buttonPtr = '\0';
|
||||
if( button[0] == '+' )
|
||||
{
|
||||
char cmd[1024];
|
||||
|
||||
// button commands add keynum as a parm
|
||||
if( down ) Q_snprintf( cmd, sizeof( cmd ), "%s %i\n", button, key );
|
||||
else Q_snprintf( cmd, sizeof( cmd ), "-%s %i\n", button + 1, key );
|
||||
@@ -708,8 +687,6 @@ Called by the system for both key up and key down events
|
||||
*/
|
||||
void GAME_EXPORT Key_Event( int key, int down )
|
||||
{
|
||||
const char *kb;
|
||||
|
||||
key = Key_Rotate( key );
|
||||
|
||||
if( OSK_KeyEvent( key, down ) )
|
||||
@@ -719,7 +696,7 @@ void GAME_EXPORT Key_Event( int key, int down )
|
||||
if( !keys[key].down && !down )
|
||||
return;
|
||||
|
||||
kb = keys[key].binding;
|
||||
const char *kb = keys[key].binding;
|
||||
keys[key].down = down ? true : false;
|
||||
|
||||
#ifdef HACKS_RELATED_HLMODS
|
||||
@@ -917,13 +894,11 @@ Key_ClearStates
|
||||
*/
|
||||
void GAME_EXPORT Key_ClearStates( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// don't clear keys during changelevel
|
||||
if( cls.changelevel )
|
||||
return;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( keys ); i++ )
|
||||
{
|
||||
if( i >= K_MOUSE1 && i <= K_MOUSE5 )
|
||||
IN_MouseEvent( i - K_MOUSE1, false );
|
||||
|
||||
@@ -144,8 +144,6 @@ qboolean OSK_KeyEvent( int key, int down )
|
||||
break;
|
||||
default:
|
||||
{
|
||||
int ch;
|
||||
|
||||
if( !down )
|
||||
{
|
||||
if( osk.shift && osk.curlayout & 1 )
|
||||
@@ -156,7 +154,7 @@ qboolean OSK_KeyEvent( int key, int down )
|
||||
break;
|
||||
}
|
||||
|
||||
ch = (byte)osk.curbutton.val;
|
||||
int ch = (byte)osk.curbutton.val;
|
||||
|
||||
// do not pass UTF-8 sequence into the engine, convert it here
|
||||
if( !cls.accept_utf8 )
|
||||
|
||||
@@ -249,10 +249,7 @@ Dump config to file
|
||||
*/
|
||||
static qboolean Touch_DumpConfig( const char *name, const char *profilename )
|
||||
{
|
||||
file_t *f;
|
||||
const touch_button_t *button;
|
||||
|
||||
f = FS_Open( name, "w", true );
|
||||
file_t *f = FS_Open( name, "w", true );
|
||||
|
||||
if( !f )
|
||||
{
|
||||
@@ -299,7 +296,7 @@ static qboolean Touch_DumpConfig( const char *name, const char *profilename )
|
||||
FS_Printf( f, "touch_removeall\n" );
|
||||
FS_Printf( f, "touch_aspectratio %g\n", Touch_AspectRatio());
|
||||
|
||||
for( button = touch.list_user.first; button; button = button->next )
|
||||
for( const touch_button_t *button = touch.list_user.first; button; button = button->next )
|
||||
Touch_ExportButtonToConfig( f, button, false );
|
||||
|
||||
FS_Close( f );
|
||||
@@ -347,9 +344,6 @@ export current touch configuration into profile
|
||||
*/
|
||||
static void Touch_ExportConfig_f( void )
|
||||
{
|
||||
const char *name;
|
||||
string profilename;
|
||||
|
||||
if( Cmd_Argc() != 2 )
|
||||
{
|
||||
Con_Printf( S_USAGE "touch_exportconfig <name>\n" );
|
||||
@@ -362,7 +356,8 @@ static void Touch_ExportConfig_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
name = Cmd_Argv( 1 );
|
||||
const char *name = Cmd_Argv( 1 );
|
||||
string profilename;
|
||||
|
||||
if( Q_strstr( name, "touch_presets/" ))
|
||||
{
|
||||
@@ -386,7 +381,6 @@ export current touch configuration into C code
|
||||
*/
|
||||
static void Touch_GenerateCode_f( void )
|
||||
{
|
||||
const touch_button_t *button;
|
||||
rgba_t c = { 0 };
|
||||
|
||||
if( !touch.list_user.first )
|
||||
@@ -395,11 +389,9 @@ static void Touch_GenerateCode_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
for( button = touch.list_user.first; button; button = button->next )
|
||||
for( const touch_button_t *button = touch.list_user.first; button; button = button->next )
|
||||
{
|
||||
float aspect;
|
||||
int flags = button->flags;
|
||||
int round;
|
||||
|
||||
if( FBitSet( flags, TOUCH_FL_CLIENT ))
|
||||
continue; // skip temporary buttons
|
||||
@@ -410,7 +402,7 @@ static void Touch_GenerateCode_f( void )
|
||||
if( FBitSet( flags, TOUCH_FL_DEF_HIDE ))
|
||||
SetBits( flags, TOUCH_FL_HIDE );
|
||||
|
||||
aspect = ( button->y2 - button->y1 ) / (( button->x2 - button->x1 ) / Touch_AspectRatio( ));
|
||||
float aspect = ( button->y2 - button->y1 ) / (( button->x2 - button->x1 ) / Touch_AspectRatio( ));
|
||||
|
||||
if( memcmp( c, button->color, sizeof( c )))
|
||||
{
|
||||
@@ -419,6 +411,7 @@ static void Touch_GenerateCode_f( void )
|
||||
memcpy( c, button->color, sizeof( c ));
|
||||
}
|
||||
|
||||
int round;
|
||||
if( button->type == touch_command )
|
||||
{
|
||||
if( fabs( aspect - 1.0f ) < 0.001 )
|
||||
@@ -438,22 +431,18 @@ static void Touch_GenerateCode_f( void )
|
||||
|
||||
static void Touch_RoundAll_f( void )
|
||||
{
|
||||
touch_button_t *button;
|
||||
|
||||
if( !touch_grid_enable.value )
|
||||
return;
|
||||
|
||||
for( button = touch.list_user.first; button; button = button->next )
|
||||
for( touch_button_t *button = touch.list_user.first; button; button = button->next )
|
||||
IN_TouchCheckCoords( &button->x1, &button->y1, &button->x2, &button->y2 );
|
||||
}
|
||||
|
||||
static void Touch_ListButtons_f( void )
|
||||
{
|
||||
touch_button_t *button;
|
||||
|
||||
Touch_InitConfig();
|
||||
|
||||
for( button = touch.list_user.first; button; button = button->next )
|
||||
for( touch_button_t *button = touch.list_user.first; button; button = button->next )
|
||||
{
|
||||
Con_Printf( "%s %s %s %g %g %g %g %d %d %d %d %d\n",
|
||||
button->name, button->texture, button->command,
|
||||
@@ -483,9 +472,7 @@ static void Touch_Stroke_f( void )
|
||||
|
||||
static touch_button_t *Touch_FindNextNoPattern( touch_button_t *buttons, const char *name, qboolean privileged )
|
||||
{
|
||||
touch_button_t *b;
|
||||
|
||||
for( b = buttons; b; b = b->next )
|
||||
for( touch_button_t *b = buttons; b; b = b->next )
|
||||
{
|
||||
if( !privileged && !FBitSet( b->flags, TOUCH_FL_UNPRIVILEGED ))
|
||||
continue;
|
||||
@@ -504,13 +491,12 @@ static touch_button_t *Touch_FindButtonNoPattern( touchbuttonlist_t *list, const
|
||||
|
||||
static touch_button_t *Touch_FindNext( touch_button_t *buttons, const char *name, qboolean privileged )
|
||||
{
|
||||
touch_button_t *b;
|
||||
qboolean has_pattern = Q_strchr( name, '*' ) != NULL;
|
||||
|
||||
if( !has_pattern )
|
||||
return Touch_FindNextNoPattern( buttons, name, privileged );
|
||||
|
||||
for( b = buttons; b; b = b->next )
|
||||
for( touch_button_t *b = buttons; b; b = b->next )
|
||||
{
|
||||
if( !privileged && !FBitSet( b->flags, TOUCH_FL_UNPRIVILEGED ))
|
||||
continue;
|
||||
@@ -584,10 +570,9 @@ static void Touch_SetClientOnly_f( void )
|
||||
|
||||
static void Touch_RemoveButtonFromList( touchbuttonlist_t *list, const char *name, qboolean privileged )
|
||||
{
|
||||
touch_button_t *button;
|
||||
|
||||
IN_TouchEditClear();
|
||||
|
||||
touch_button_t *button;
|
||||
while(( button = Touch_FindFirst( list, name, privileged )))
|
||||
{
|
||||
if( button->prev )
|
||||
@@ -640,9 +625,7 @@ static void Touch_RemoveAll_f( void )
|
||||
|
||||
static void Touch_SetColor( touchbuttonlist_t *list, const char *name, byte *color, qboolean privileged )
|
||||
{
|
||||
touch_button_t *b;
|
||||
|
||||
for( b = Touch_FindFirst( list, name, privileged ); b != NULL; b = Touch_FindNext( b->next, name, privileged ))
|
||||
for( touch_button_t *b = Touch_FindFirst( list, name, privileged ); b != NULL; b = Touch_FindNext( b->next, name, privileged ))
|
||||
Vector4Copy( color, b->color );
|
||||
}
|
||||
|
||||
@@ -677,9 +660,7 @@ static void Touch_SetCommand( touch_button_t *button, const char *command )
|
||||
|
||||
void Touch_HideButtons( const char *name, byte hide, qboolean privileged )
|
||||
{
|
||||
touch_button_t *b;
|
||||
|
||||
for( b = Touch_FindFirst( &touch.list_user, name, privileged ); b != NULL; b = Touch_FindNext( b->next, name, privileged ))
|
||||
for( touch_button_t *b = Touch_FindFirst( &touch.list_user, name, privileged ); b != NULL; b = Touch_FindNext( b->next, name, privileged ))
|
||||
{
|
||||
if( hide )
|
||||
SetBits( b->flags, TOUCH_FL_HIDE );
|
||||
@@ -718,9 +699,7 @@ static void Touch_Show_f( void )
|
||||
|
||||
static void Touch_FadeButtons( touchbuttonlist_t *list, const char *name, float speed, float end, float start, qboolean privileged )
|
||||
{
|
||||
touch_button_t *b;
|
||||
|
||||
for( b = Touch_FindFirst( list, name, privileged ); b != NULL; b = Touch_FindNext( b->next, name, privileged ))
|
||||
for( touch_button_t *b = Touch_FindFirst( list, name, privileged ); b != NULL; b = Touch_FindNext( b->next, name, privileged ))
|
||||
{
|
||||
if( start >= 0 )
|
||||
b->fade = start;
|
||||
@@ -855,8 +834,6 @@ static touch_button_t *Touch_AddButton( touchbuttonlist_t *list, const char *nam
|
||||
|
||||
void Touch_AddClientButton( const char *name, const char *texture, const char *command, float x1, float y1, float x2, float y2, byte *color, int round, float aspect, int flags )
|
||||
{
|
||||
touch_button_t *button;
|
||||
|
||||
if( !touch.initialized )
|
||||
return;
|
||||
|
||||
@@ -865,15 +842,14 @@ void Touch_AddClientButton( const char *name, const char *texture, const char *c
|
||||
if( round == round_aspect )
|
||||
y2 = y1 + ( x2 - x1 ) / (Touch_AspectRatio()) * aspect;
|
||||
|
||||
button = Touch_AddButton( &touch.list_user, name, texture, command, x1, y1, x2, y2, color, true );
|
||||
touch_button_t *button = Touch_AddButton( &touch.list_user, name, texture, command, x1, y1, x2, y2, color, true );
|
||||
SetBits( button->flags, TOUCH_FL_CLIENT | TOUCH_FL_NOEDIT );
|
||||
button->aspect = aspect;
|
||||
}
|
||||
|
||||
static void Touch_LoadDefaults_f( void )
|
||||
{
|
||||
int i;
|
||||
for( i = 0; i < g_DefaultButtonsLength; i++ )
|
||||
for( int i = 0; i < g_DefaultButtonsLength; i++ )
|
||||
{
|
||||
touch_button_t *button;
|
||||
float x1 = g_DefaultButtons[i].x1,
|
||||
@@ -903,11 +879,9 @@ static void Touch_LoadDefaults_f( void )
|
||||
// Add default button from client
|
||||
void Touch_AddDefaultButton( const char *name, const char *texture, const char *command, float x1, float y1, float x2, float y2, byte *color, int round, float aspect, int flags )
|
||||
{
|
||||
touchdefaultbutton_t *b;
|
||||
|
||||
g_DefaultButtons = Mem_Realloc( touch.mempool, g_DefaultButtons, sizeof( *g_DefaultButtons ) * ( g_DefaultButtonsLength + 1 ));
|
||||
|
||||
b = &g_DefaultButtons[g_DefaultButtonsLength];
|
||||
touchdefaultbutton_t *b = &g_DefaultButtons[g_DefaultButtonsLength];
|
||||
|
||||
Q_strncpy( b->name, name, sizeof( b->name ));
|
||||
Q_strncpy( b->texture, texture, sizeof( b->texture ));
|
||||
@@ -938,22 +912,18 @@ void Touch_ResetDefaultButtons( void )
|
||||
|
||||
static void Touch_AddButton_f( void )
|
||||
{
|
||||
rgba_t color = { 255, 255, 255, 255 };
|
||||
touch_button_t *button = NULL;
|
||||
const char *name, *command;
|
||||
float x1 = 0.4f, y1 = 0.4f, x2 = 0.6f, y2 = 0.6f;
|
||||
qboolean privileged = Cmd_CurrentCommandIsPrivileged();
|
||||
string texture;
|
||||
|
||||
if( Cmd_Argc( ) < 4 )
|
||||
{
|
||||
Con_Printf( S_USAGE "touch_addbutton <name> <texture> <command> [<x1> <y1> <x2> <y2> [ r g b a ] ]\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
name = Cmd_Argv( 1 );
|
||||
const char *name = Cmd_Argv( 1 );
|
||||
string texture;
|
||||
Q_strncpy( texture, Cmd_Argv( 2 ), sizeof( texture ));
|
||||
command = Cmd_Argv( 3 );
|
||||
const char *command = Cmd_Argv( 3 );
|
||||
float x1 = 0.4f, y1 = 0.4f, x2 = 0.6f, y2 = 0.6f;
|
||||
rgba_t color = { 255, 255, 255, 255 };
|
||||
|
||||
// HACKHACK: old engine specifically used .tga for touch buttons
|
||||
// and because new engine extras.pk3 don't have .tga textures
|
||||
@@ -980,7 +950,8 @@ static void Touch_AddButton_f( void )
|
||||
color[3] = Q_atoi( Cmd_Argv( 11 ));
|
||||
}
|
||||
|
||||
button = Touch_AddButton( &touch.list_user, name, texture, command, x1, y1, x2, y2, color, privileged );
|
||||
qboolean privileged = Cmd_CurrentCommandIsPrivileged();
|
||||
touch_button_t *button = Touch_AddButton( &touch.list_user, name, texture, command, x1, y1, x2, y2, color, privileged );
|
||||
|
||||
if( Cmd_Argc( ) >= 13 )
|
||||
SetBits( button->flags, Q_atoi( Cmd_Argv( 12 )));
|
||||
@@ -1023,9 +994,7 @@ static void Touch_EnableEdit_f( void )
|
||||
// convert coordinates to actual aspect ratio after it was updated
|
||||
if( touch.config_aspect_ratio != touch.actual_aspect_ratio )
|
||||
{
|
||||
touch_button_t *button;
|
||||
|
||||
for( button = touch.list_user.first; button; button = button->next )
|
||||
for( touch_button_t *button = touch.list_user.first; button; button = button->next )
|
||||
{
|
||||
button->y1 /= touch.actual_aspect_ratio / touch.config_aspect_ratio;
|
||||
button->y2 /= touch.actual_aspect_ratio / touch.config_aspect_ratio;
|
||||
@@ -1315,10 +1284,6 @@ static void IN_TouchCheckCoords( float *x1, float *y1, float *x2, float *y2 )
|
||||
|
||||
static float Touch_DrawCharacter( float x, float y, int number, float size )
|
||||
{
|
||||
float s1, s2, t1, t2, width, height;
|
||||
int w, h;
|
||||
wrect_t *prc;
|
||||
|
||||
if( !cls.creditsFont.valid )
|
||||
return 0;
|
||||
|
||||
@@ -1328,16 +1293,17 @@ static float Touch_DrawCharacter( float x, float y, int number, float size )
|
||||
if( !number )
|
||||
return 0;
|
||||
|
||||
int w, h;
|
||||
R_GetTextureParms( &w, &h, cls.creditsFont.hFontTexture );
|
||||
prc = &cls.creditsFont.fontRc[number];
|
||||
wrect_t *prc = &cls.creditsFont.fontRc[number];
|
||||
|
||||
s1 = prc->left / (float)w;
|
||||
t1 = prc->top / (float)h;
|
||||
s2 = prc->right / (float)w;
|
||||
t2 = prc->bottom / (float)h;
|
||||
float s1 = prc->left / (float)w;
|
||||
float t1 = prc->top / (float)h;
|
||||
float s2 = prc->right / (float)w;
|
||||
float t2 = prc->bottom / (float)h;
|
||||
|
||||
width = ( prc->right - prc->left ) / 1024.0f * size;
|
||||
height = ( prc->bottom - prc->top ) / 1024.0f * size;
|
||||
float width = ( prc->right - prc->left ) / 1024.0f * size;
|
||||
float height = ( prc->bottom - prc->top ) / 1024.0f * size;
|
||||
|
||||
ref.dllFuncs.R_DrawStretchPic( TO_SCRN_X( x ), TO_SCRN_Y( y ), TO_SCRN_X( width ), TO_SCRN_X( height ),
|
||||
s1, t1, s2, t2, cls.creditsFont.hFontTexture );
|
||||
@@ -1384,9 +1350,7 @@ static float Touch_DrawText( float x1, float y1, float x2, float y2, const char
|
||||
|
||||
static void Touch_DrawButtons( touchbuttonlist_t *list )
|
||||
{
|
||||
touch_button_t *b;
|
||||
|
||||
for( b = list->first; b; b = b->next )
|
||||
for( touch_button_t *b = list->first; b; b = b->next )
|
||||
{
|
||||
if( Touch_IsVisible( b ))
|
||||
{
|
||||
@@ -1506,17 +1470,15 @@ void Touch_Draw( void )
|
||||
|
||||
if( touch.state >= state_edit && touch_grid_enable.value )
|
||||
{
|
||||
float x;
|
||||
|
||||
if( touch_in_menu.value )
|
||||
ref.dllFuncs.FillRGBA( kRenderTransTexture, 0, 0, 1, 1, 32, 32, 32, 255 );
|
||||
else
|
||||
ref.dllFuncs.FillRGBA( kRenderTransTexture, 0, 0, 1, 1, 0, 0, 0, 112 );
|
||||
|
||||
for( x = 0.0f; x < 1.0f; x += GRID_X )
|
||||
for( float x = 0.0f; x < 1.0f; x += GRID_X )
|
||||
ref.dllFuncs.FillRGBA( kRenderTransTexture, TO_SCRN_X( x ), 0, 1, TO_SCRN_Y( 1 ), 0, 224, 224, 112 );
|
||||
|
||||
for( x = 0.0f; x < 1.0f; x += GRID_Y )
|
||||
for( float x = 0.0f; x < 1.0f; x += GRID_Y )
|
||||
ref.dllFuncs.FillRGBA( kRenderTransTexture, 0, TO_SCRN_Y( x ), TO_SCRN_X( 1 ), 1, 0, 224, 224, 112 );
|
||||
}
|
||||
|
||||
@@ -1738,16 +1700,14 @@ static void Touch_Motion( int fingerID, float x, float y, float dx, float dy )
|
||||
|
||||
if( touch_nonlinear_look.value )
|
||||
{
|
||||
float dabs, dcos, dsin;
|
||||
|
||||
// save angle, modify only velocity
|
||||
dabs = sqrt( dx * dx + dy * dy );
|
||||
float dabs = sqrt( dx * dx + dy * dy );
|
||||
|
||||
if( dabs < 0.000001f )
|
||||
return; // no motion, avoid division by zero
|
||||
|
||||
dcos = dx / dabs;
|
||||
dsin = dy / dabs;
|
||||
float dcos = dx / dabs;
|
||||
float dsin = dy / dabs;
|
||||
|
||||
if( touch_exp_mult.value > 1 )
|
||||
dabs = ( exp( dabs * touch_exp_mult.value ) - 1 ) / touch_exp_mult.value;
|
||||
@@ -1771,14 +1731,13 @@ static void Touch_Motion( int fingerID, float x, float y, float dx, float dy )
|
||||
|
||||
static qboolean Touch_ButtonPress( touchbuttonlist_t *list, touchEventType type, int fingerID, float x, float y )
|
||||
{
|
||||
touch_button_t *button;
|
||||
qboolean result = false;
|
||||
|
||||
if( type != event_down && type != event_up )
|
||||
return false;
|
||||
|
||||
// run from end(front) to start(back)
|
||||
for( button = list->last; button; button = button->prev )
|
||||
for( touch_button_t *button = list->last; button; button = button->prev )
|
||||
{
|
||||
// skip invisible buttons
|
||||
if( !Touch_IsVisible( button ))
|
||||
@@ -1850,14 +1809,12 @@ static qboolean Touch_ButtonPress( touchbuttonlist_t *list, touchEventType type,
|
||||
|
||||
if( touch.look_finger == fingerID )
|
||||
{
|
||||
touch_button_t *newbutton;
|
||||
|
||||
// this is an error, try recover
|
||||
touch.move_finger = touch.look_finger = -1;
|
||||
|
||||
// player touched touch_move with enabled look mode
|
||||
// and same finger id. release all move triggers
|
||||
for( newbutton = list->first; newbutton; newbutton = newbutton->next )
|
||||
for( touch_button_t *newbutton = list->first; newbutton; newbutton = newbutton->next )
|
||||
{
|
||||
if( newbutton->type == touch_move || newbutton->type == touch_look )
|
||||
newbutton->finger = -1;
|
||||
@@ -1910,14 +1867,12 @@ static qboolean Touch_ButtonPress( touchbuttonlist_t *list, touchEventType type,
|
||||
|
||||
if( touch.move_finger == fingerID )
|
||||
{
|
||||
touch_button_t *newbutton;
|
||||
|
||||
// this is an error, try recover
|
||||
touch.move_finger = touch.look_finger = -1;
|
||||
|
||||
// player touched touch_move with enabled look mode
|
||||
// and same finger id. release all move triggers
|
||||
for( newbutton = list->first; newbutton; newbutton = newbutton->next )
|
||||
for( touch_button_t *newbutton = list->first; newbutton; newbutton = newbutton->next )
|
||||
{
|
||||
if( newbutton->type == touch_move || newbutton->type == touch_look )
|
||||
newbutton->finger = -1;
|
||||
@@ -1994,8 +1949,6 @@ static qboolean Touch_ButtonPress( touchbuttonlist_t *list, touchEventType type,
|
||||
|
||||
static qboolean Touch_ButtonEdit( touchEventType type, int fingerID, float x, float y )
|
||||
{
|
||||
touch_button_t *button;
|
||||
|
||||
// edit buttons are on y1
|
||||
if( type == event_down )
|
||||
{
|
||||
@@ -2010,7 +1963,7 @@ static qboolean Touch_ButtonEdit( touchEventType type, int fingerID, float x, fl
|
||||
}
|
||||
|
||||
// run from end(front) to start(back)
|
||||
for( button = touch.list_user.last; button; button = button->prev )
|
||||
for( touch_button_t *button = touch.list_user.last; button; button = button->prev )
|
||||
{
|
||||
if( type == event_down )
|
||||
{
|
||||
|
||||
@@ -337,8 +337,6 @@ IN_MouseMove
|
||||
*/
|
||||
static void IN_MouseMove( void )
|
||||
{
|
||||
int x, y;
|
||||
|
||||
if( !in_mouseinitialized )
|
||||
return;
|
||||
|
||||
@@ -350,6 +348,7 @@ static void IN_MouseMove( void )
|
||||
}
|
||||
|
||||
// find mouse movement
|
||||
int x, y;
|
||||
Platform_GetMousePos( &x, &y );
|
||||
|
||||
VGui_MouseMove( x, y );
|
||||
@@ -586,18 +585,15 @@ Called from cl_main.c after generating command in client
|
||||
*/
|
||||
void IN_EngineAppendMove( float frametime, usercmd_t *cmd, qboolean active )
|
||||
{
|
||||
float forward, side, pitch, yaw;
|
||||
|
||||
if( clgame.dllFuncs.pfnLookEvent )
|
||||
return;
|
||||
|
||||
if( cls.key_dest != key_game || cl.paused || cl.intermission )
|
||||
return;
|
||||
|
||||
forward = side = pitch = yaw = 0;
|
||||
|
||||
if( active )
|
||||
{
|
||||
float forward = 0, side = 0, pitch = 0, yaw = 0;
|
||||
float sensitivity = 1;//( (float)cl.local.scr_fov / (float)90.0f );
|
||||
|
||||
IN_CollectInput( &forward, &side, &pitch, &yaw, false );
|
||||
|
||||
@@ -73,9 +73,7 @@ static void free_winding( winding_t *w )
|
||||
|
||||
static winding_t *winding_copy( winding_t *w )
|
||||
{
|
||||
winding_t *neww;
|
||||
|
||||
neww = winding_alloc( w->numpoints );
|
||||
winding_t *neww = winding_alloc( w->numpoints );
|
||||
memcpy( neww, w, offsetof( winding_t, p[w->numpoints] ) );
|
||||
|
||||
return neww;
|
||||
@@ -84,9 +82,8 @@ static winding_t *winding_copy( winding_t *w )
|
||||
static void winding_reverse( winding_t *w )
|
||||
{
|
||||
vec3_t point;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < w->numpoints / 2; i++ )
|
||||
for( int i = 0; i < w->numpoints / 2; i++ )
|
||||
{
|
||||
VectorCopy( w->p[i], point );
|
||||
VectorCopy( w->p[w->numpoints - i - 1], w->p[i] );
|
||||
@@ -117,15 +114,13 @@ winding_for_plane
|
||||
static winding_t *winding_for_plane( const mplane_t *p )
|
||||
{
|
||||
vec3_t org, vright, vup;
|
||||
int i, axis;
|
||||
vec_t max, v;
|
||||
winding_t *w;
|
||||
vec_t v;
|
||||
|
||||
// find the major axis
|
||||
max = -BOGUS_RANGE;
|
||||
axis = -1;
|
||||
vec_t max = -BOGUS_RANGE;
|
||||
int axis = -1;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
v = fabs( p->normal[i] );
|
||||
if( v > max )
|
||||
@@ -159,7 +154,7 @@ static winding_t *winding_for_plane( const mplane_t *p )
|
||||
VectorScale( vright, BOGUS_RANGE, vright );
|
||||
|
||||
// project a really big axis aligned box onto the plane
|
||||
w = winding_alloc( 4 );
|
||||
winding_t *w = winding_alloc( 4 );
|
||||
memset( w->p, 0, sizeof( vec3_t ) * 4 );
|
||||
w->numpoints = 4;
|
||||
w->plane = p;
|
||||
@@ -248,46 +243,42 @@ If keepon is true, an exactly on-plane winding will be saved, otherwise
|
||||
*/
|
||||
static winding_t *winding_clip( winding_t *in, const mplane_t *split, qboolean keepon, int side, vec_t epsilon )
|
||||
{
|
||||
vec_t *dists;
|
||||
int *sides;
|
||||
int counts[3];
|
||||
vec_t dot;
|
||||
int i, j;
|
||||
winding_t *neww;
|
||||
vec_t *p1, *p2, *mid;
|
||||
int maxpts;
|
||||
|
||||
dists = (vec_t *)malloc(( in->numpoints + 1 ) * sizeof( vec_t ));
|
||||
sides = (int *)malloc(( in->numpoints + 1 ) * sizeof( int ));
|
||||
vec_t *dists = (vec_t *)malloc(( in->numpoints + 1 ) * sizeof( vec_t ));
|
||||
int *sides = (int *)malloc(( in->numpoints + 1 ) * sizeof( int ));
|
||||
CalcSides( in, split, sides, dists, counts, epsilon );
|
||||
|
||||
if( keepon && !counts[SIDE_FRONT] && !counts[SIDE_BACK] )
|
||||
{
|
||||
neww = in;
|
||||
goto out_free;
|
||||
free( dists );
|
||||
free( sides );
|
||||
return in;
|
||||
}
|
||||
|
||||
if( !counts[side] )
|
||||
{
|
||||
free_winding( in );
|
||||
neww = NULL;
|
||||
goto out_free;
|
||||
free( dists );
|
||||
free( sides );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if( !counts[side ^ 1] )
|
||||
{
|
||||
neww = in;
|
||||
goto out_free;
|
||||
free( dists );
|
||||
free( sides );
|
||||
return in;
|
||||
}
|
||||
|
||||
maxpts = in->numpoints + 4;
|
||||
neww = winding_alloc( maxpts );
|
||||
int maxpts = in->numpoints + 4;
|
||||
winding_t *neww = winding_alloc( maxpts );
|
||||
neww->numpoints = 0;
|
||||
neww->plane = in->plane;
|
||||
|
||||
for( i = 0; i < in->numpoints; i++ )
|
||||
for( int i = 0; i < in->numpoints; i++ )
|
||||
{
|
||||
p1 = in->p[i];
|
||||
vec_t *p1 = in->p[i];
|
||||
|
||||
if( sides[i] == SIDE_ON )
|
||||
{
|
||||
@@ -306,11 +297,11 @@ static winding_t *winding_clip( winding_t *in, const mplane_t *split, qboolean k
|
||||
continue;
|
||||
|
||||
// generate a split point
|
||||
p2 = in->p[(i + 1) % in->numpoints];
|
||||
mid = neww->p[neww->numpoints++];
|
||||
vec_t *p2 = in->p[(i + 1) % in->numpoints];
|
||||
vec_t *mid = neww->p[neww->numpoints++];
|
||||
|
||||
dot = dists[i] / (dists[i] - dists[i + 1]);
|
||||
for( j = 0; j < 3; j++ )
|
||||
vec_t dot = dists[i] / (dists[i] - dists[i + 1]);
|
||||
for( int j = 0; j < 3; j++ )
|
||||
{
|
||||
// avoid round off error when possible
|
||||
if( in->plane->normal[j] == 1.0f )
|
||||
@@ -333,7 +324,6 @@ static winding_t *winding_clip( winding_t *in, const mplane_t *split, qboolean k
|
||||
|
||||
// Shrink the winding back to just what it needs...
|
||||
neww = winding_shrink(neww);
|
||||
out_free:
|
||||
free( dists );
|
||||
free( sides );
|
||||
|
||||
@@ -352,17 +342,10 @@ new windings will be created.
|
||||
*/
|
||||
static void winding_split( winding_t *in, const mplane_t *split, winding_t **pfront, winding_t **pback )
|
||||
{
|
||||
vec_t *dists;
|
||||
int *sides;
|
||||
int counts[3];
|
||||
vec_t dot;
|
||||
int i, j;
|
||||
winding_t *front, *back;
|
||||
vec_t *p1, *p2, *mid;
|
||||
int maxpts;
|
||||
|
||||
dists = (vec_t *)malloc(( in->numpoints + 1 ) * sizeof( vec_t ));
|
||||
sides = (int *)malloc(( in->numpoints + 1 ) * sizeof( int ));
|
||||
vec_t *dists = (vec_t *)malloc(( in->numpoints + 1 ) * sizeof( vec_t ));
|
||||
int *sides = (int *)malloc(( in->numpoints + 1 ) * sizeof( int ));
|
||||
CalcSides(in, split, sides, dists, counts, 0.04f );
|
||||
|
||||
if( !counts[0] && !counts[1] )
|
||||
@@ -370,34 +353,40 @@ static void winding_split( winding_t *in, const mplane_t *split, winding_t **pfr
|
||||
// winding on the split plane - return copies on both sides
|
||||
*pfront = winding_copy( in );
|
||||
*pback = winding_copy( in );
|
||||
goto out_free;
|
||||
free( dists );
|
||||
free( sides );
|
||||
return;
|
||||
}
|
||||
|
||||
if( !counts[0] )
|
||||
{
|
||||
*pfront = NULL;
|
||||
*pback = in;
|
||||
goto out_free;
|
||||
free( dists );
|
||||
free( sides );
|
||||
return;
|
||||
}
|
||||
|
||||
if( !counts[1] )
|
||||
{
|
||||
*pfront = in;
|
||||
*pback = NULL;
|
||||
goto out_free;
|
||||
free( dists );
|
||||
free( sides );
|
||||
return;
|
||||
}
|
||||
|
||||
maxpts = in->numpoints + 4;
|
||||
front = winding_alloc( maxpts );
|
||||
int maxpts = in->numpoints + 4;
|
||||
winding_t *front = winding_alloc( maxpts );
|
||||
front->numpoints = 0;
|
||||
front->plane = in->plane;
|
||||
back = winding_alloc( maxpts );
|
||||
winding_t *back = winding_alloc( maxpts );
|
||||
back->numpoints = 0;
|
||||
back->plane = in->plane;
|
||||
|
||||
for( i = 0; i < in->numpoints; i++ )
|
||||
for( int i = 0; i < in->numpoints; i++ )
|
||||
{
|
||||
p1 = in->p[i];
|
||||
vec_t *p1 = in->p[i];
|
||||
|
||||
if( sides[i] == SIDE_ON )
|
||||
{
|
||||
@@ -423,11 +412,11 @@ static void winding_split( winding_t *in, const mplane_t *split, winding_t **pfr
|
||||
continue;
|
||||
|
||||
// generate a split point
|
||||
p2 = in->p[(i + 1) % in->numpoints];
|
||||
mid = front->p[front->numpoints++];
|
||||
vec_t *p2 = in->p[(i + 1) % in->numpoints];
|
||||
vec_t *mid = front->p[front->numpoints++];
|
||||
|
||||
dot = dists[i] / (dists[i] - dists[i + 1]);
|
||||
for( j = 0; j < 3; j++ )
|
||||
vec_t dot = dists[i] / (dists[i] - dists[i + 1]);
|
||||
for( int j = 0; j < 3; j++ )
|
||||
{
|
||||
// avoid round off error when possible
|
||||
if( in->plane->normal[j] == 1.0f )
|
||||
@@ -449,7 +438,6 @@ static void winding_split( winding_t *in, const mplane_t *split, winding_t **pfr
|
||||
|
||||
*pfront = winding_shrink( front );
|
||||
*pback = winding_shrink( back );
|
||||
out_free:
|
||||
free( dists );
|
||||
free( sides );
|
||||
}
|
||||
|
||||
@@ -60,33 +60,34 @@ CL_ParseSoundPacket
|
||||
*/
|
||||
static void CL_ParseSoundPacket( sizebuf_t *msg, qboolean restore )
|
||||
{
|
||||
vec3_t pos;
|
||||
int chan, sound;
|
||||
float volume, attn;
|
||||
int flags, pitch, entnum, wordIndex = 0;
|
||||
int wordIndex = 0;
|
||||
sound_t handle = 0;
|
||||
double samplePos = 0, forcedEnd = 0;
|
||||
|
||||
flags = MSG_ReadUBitLong( msg, MAX_SND_FLAGS_BITS );
|
||||
sound = MSG_ReadUBitLong( msg, MAX_SOUND_BITS );
|
||||
chan = MSG_ReadUBitLong( msg, MAX_SND_CHAN_BITS );
|
||||
int flags = MSG_ReadUBitLong( msg, MAX_SND_FLAGS_BITS );
|
||||
int sound = MSG_ReadUBitLong( msg, MAX_SOUND_BITS );
|
||||
int chan = MSG_ReadUBitLong( msg, MAX_SND_CHAN_BITS );
|
||||
|
||||
float volume;
|
||||
if( FBitSet( flags, SND_VOLUME ))
|
||||
volume = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||
else volume = VOL_NORM;
|
||||
|
||||
float attn;
|
||||
if( FBitSet( flags, SND_ATTENUATION ))
|
||||
attn = (float)MSG_ReadByte( msg ) / 64.0f;
|
||||
else attn = ATTN_NONE;
|
||||
|
||||
int pitch;
|
||||
if( FBitSet( flags, SND_PITCH ))
|
||||
pitch = MSG_ReadByte( msg );
|
||||
else pitch = PITCH_NORM;
|
||||
|
||||
// entity reletive
|
||||
entnum = MSG_ReadUBitLong( msg, MAX_ENTITY_BITS );
|
||||
int entnum = MSG_ReadUBitLong( msg, MAX_ENTITY_BITS );
|
||||
|
||||
// positioned in space
|
||||
vec3_t pos;
|
||||
MSG_ReadVec3Coord( msg, pos );
|
||||
|
||||
if( FBitSet( flags, SND_SENTENCE ))
|
||||
@@ -129,8 +130,6 @@ CL_ParseServerTime
|
||||
*/
|
||||
void CL_ParseServerTime( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
double dt;
|
||||
|
||||
cl.mtime[1] = cl.mtime[0];
|
||||
cl.mtime[0] = MSG_ReadFloat( msg );
|
||||
|
||||
@@ -140,7 +139,7 @@ void CL_ParseServerTime( sizebuf_t *msg, connprotocol_t proto )
|
||||
if( cl.maxclients == 1 )
|
||||
cl.time = cl.mtime[0];
|
||||
|
||||
dt = cl.time - cl.mtime[0];
|
||||
double dt = cl.time - cl.mtime[0];
|
||||
|
||||
if( fabs( dt ) > cl_clockreset.value ) // 0.1 by default
|
||||
{
|
||||
@@ -212,29 +211,26 @@ CL_ParseParticles
|
||||
*/
|
||||
static void CL_ParseParticles( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
vec3_t org, dir;
|
||||
int i, count, color;
|
||||
float life;
|
||||
vec3_t org, dir;
|
||||
|
||||
MSG_ReadVec3Coord( msg, org );
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
dir[i] = MSG_ReadChar( msg ) * 0.0625f;
|
||||
|
||||
count = MSG_ReadByte( msg );
|
||||
color = MSG_ReadByte( msg );
|
||||
int count = MSG_ReadByte( msg );
|
||||
int color = MSG_ReadByte( msg );
|
||||
if( count == 255 )
|
||||
count = 1024;
|
||||
|
||||
float life;
|
||||
if( proto == PROTO_GOLDSRC )
|
||||
life = 0.0f;
|
||||
else life = MSG_ReadByte( msg ) * 0.125f;
|
||||
|
||||
if( life != 0.0f && count == 1 )
|
||||
{
|
||||
particle_t *p;
|
||||
|
||||
p = R_AllocParticle( NULL );
|
||||
particle_t *p = R_AllocParticle( NULL );
|
||||
if( !p ) return;
|
||||
|
||||
p->die += life;
|
||||
@@ -256,10 +252,8 @@ static client entity
|
||||
*/
|
||||
static void CL_ParseStaticEntity( sizebuf_t *msg )
|
||||
{
|
||||
int i;
|
||||
const entity_state_t from = { 0 };
|
||||
entity_state_t to;
|
||||
cl_entity_t *ent;
|
||||
|
||||
if( !clgame.static_entities )
|
||||
clgame.static_entities = Mem_Calloc( clgame.mempool, sizeof( cl_entity_t ) * MAX_STATIC_ENTITIES );
|
||||
@@ -267,14 +261,14 @@ static void CL_ParseStaticEntity( sizebuf_t *msg )
|
||||
MSG_ReadUBitLong( msg, MAX_ENTITY_BITS );
|
||||
MSG_ReadDeltaEntity( msg, &from, &to, 0, DELTA_STATIC, cl.mtime[0] );
|
||||
|
||||
i = clgame.numStatics;
|
||||
int i = clgame.numStatics;
|
||||
if( i >= MAX_STATIC_ENTITIES )
|
||||
{
|
||||
Con_Printf( S_ERROR "MAX_STATIC_ENTITIES limit exceeded!\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
ent = &clgame.static_entities[i];
|
||||
cl_entity_t *ent = &clgame.static_entities[i];
|
||||
clgame.numStatics++;
|
||||
|
||||
// all states are same
|
||||
@@ -315,7 +309,7 @@ Set new weapon animation
|
||||
*/
|
||||
void GAME_EXPORT CL_WeaponAnim( int iAnim, int body )
|
||||
{
|
||||
cl_entity_t *view = &clgame.viewent;
|
||||
cl_entity_t *view = &clgame.viewent;
|
||||
|
||||
cl.local.weaponstarttime = 0.0f;
|
||||
cl.local.weaponsequence = iAnim;
|
||||
@@ -339,20 +333,18 @@ CL_ParseStaticDecal
|
||||
*/
|
||||
void CL_ParseStaticDecal( sizebuf_t *msg )
|
||||
{
|
||||
vec3_t origin;
|
||||
int decalIndex, entityIndex, modelIndex;
|
||||
float scale;
|
||||
int flags;
|
||||
vec3_t origin;
|
||||
|
||||
MSG_ReadVec3Coord( msg, origin );
|
||||
decalIndex = MSG_ReadWord( msg );
|
||||
entityIndex = MSG_ReadShort( msg );
|
||||
int decalIndex = MSG_ReadWord( msg );
|
||||
int entityIndex = MSG_ReadShort( msg );
|
||||
|
||||
int modelIndex;
|
||||
if( entityIndex > 0 )
|
||||
modelIndex = MSG_ReadWord( msg );
|
||||
else modelIndex = 0;
|
||||
flags = MSG_ReadByte( msg );
|
||||
scale = (float)MSG_ReadWord( msg ) / 4096.0f;
|
||||
int flags = MSG_ReadByte( msg );
|
||||
float scale = (float)MSG_ReadWord( msg ) / 4096.0f;
|
||||
|
||||
CL_FireCustomDecal( CL_DecalIndex( decalIndex ), entityIndex, modelIndex, origin, flags, scale );
|
||||
}
|
||||
@@ -381,11 +373,9 @@ CL_RequestMissingResources
|
||||
*/
|
||||
qboolean CL_RequestMissingResources( void )
|
||||
{
|
||||
resource_t *p;
|
||||
|
||||
if( !cls.dl.doneregistering && ( cls.dl.custom || cls.state == ca_validate ))
|
||||
{
|
||||
p = cl.resourcesneeded.pNext;
|
||||
resource_t *p = cl.resourcesneeded.pNext;
|
||||
|
||||
if( p == &cl.resourcesneeded )
|
||||
{
|
||||
@@ -404,17 +394,16 @@ qboolean CL_RequestMissingResources( void )
|
||||
|
||||
void CL_BatchResourceRequest( qboolean initialize )
|
||||
{
|
||||
byte data[MAX_INIT_MSG];
|
||||
resource_t *p, *n;
|
||||
sizebuf_t msg;
|
||||
qboolean done_downloading = true;
|
||||
byte data[MAX_INIT_MSG];
|
||||
sizebuf_t msg;
|
||||
qboolean done_downloading = true;
|
||||
|
||||
MSG_Init( &msg, "Resource Batch", data, sizeof( data ));
|
||||
|
||||
// client resources is not precached by server
|
||||
if( initialize ) CL_AddClientResources();
|
||||
|
||||
for( p = cl.resourcesneeded.pNext; p && p != &cl.resourcesneeded; p = n )
|
||||
for( resource_t *p = cl.resourcesneeded.pNext, *n; p && p != &cl.resourcesneeded; p = n )
|
||||
{
|
||||
n = p->pNext;
|
||||
|
||||
@@ -491,10 +480,9 @@ void CL_BatchResourceRequest( qboolean initialize )
|
||||
|
||||
int CL_EstimateNeededResources( void )
|
||||
{
|
||||
resource_t *p;
|
||||
int nTotalSize = 0;
|
||||
int nTotalSize = 0;
|
||||
|
||||
for( p = cl.resourcesneeded.pNext; p != &cl.resourcesneeded; p = p->pNext )
|
||||
for( resource_t *p = cl.resourcesneeded.pNext; p != &cl.resourcesneeded; p = p->pNext )
|
||||
{
|
||||
switch( p->type )
|
||||
{
|
||||
@@ -570,9 +558,7 @@ static void CL_StartResourceDownloading( const char *pszMessage, qboolean bCusto
|
||||
|
||||
static customization_t *CL_PlayerHasCustomization( int nPlayerNum, resourcetype_t type )
|
||||
{
|
||||
customization_t *pList;
|
||||
|
||||
for( pList = cl.players[nPlayerNum].customdata.pNext; pList; pList = pList->pNext )
|
||||
for( customization_t *pList = cl.players[nPlayerNum].customdata.pNext; pList; pList = pList->pNext )
|
||||
{
|
||||
if( pList->resource.type == type )
|
||||
return pList;
|
||||
@@ -582,10 +568,8 @@ static customization_t *CL_PlayerHasCustomization( int nPlayerNum, resourcetype_
|
||||
|
||||
static void CL_RemoveCustomization( int nPlayerNum, customization_t *pRemove )
|
||||
{
|
||||
customization_t *pList;
|
||||
customization_t *pNext;
|
||||
|
||||
for( pList = cl.players[nPlayerNum].customdata.pNext; pList; pList = pNext )
|
||||
customization_t *pNext;
|
||||
for( customization_t *pList = cl.players[nPlayerNum].customdata.pNext; pList; pList = pNext )
|
||||
{
|
||||
pNext = pList->pNext;
|
||||
|
||||
@@ -619,17 +603,11 @@ CL_ParseCustomization
|
||||
*/
|
||||
static void CL_ParseCustomization( sizebuf_t *msg )
|
||||
{
|
||||
customization_t *pExistingCustomization;
|
||||
customization_t *pList;
|
||||
qboolean bFound;
|
||||
resource_t *pRes;
|
||||
int i;
|
||||
|
||||
i = MSG_ReadByte( msg );
|
||||
int i = MSG_ReadByte( msg );
|
||||
if( i >= MAX_CLIENTS )
|
||||
Host_Error( "Bogus player index during customization parsing.\n" );
|
||||
|
||||
pRes = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
resource_t *pRes = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
pRes->type = MSG_ReadByte( msg );
|
||||
|
||||
Q_strncpy( pRes->szFileName, MSG_ReadString( msg ), sizeof( pRes->szFileName ));
|
||||
@@ -656,13 +634,13 @@ static void CL_ParseCustomization( sizebuf_t *msg )
|
||||
return;
|
||||
}
|
||||
|
||||
pExistingCustomization = CL_PlayerHasCustomization( i, pRes->type );
|
||||
customization_t *pExistingCustomization = CL_PlayerHasCustomization( i, pRes->type );
|
||||
|
||||
if( pExistingCustomization )
|
||||
CL_RemoveCustomization( i, pExistingCustomization );
|
||||
bFound = false;
|
||||
|
||||
for( pList = cl.players[pRes->playernum].customdata.pNext; pList; pList = pList->pNext )
|
||||
qboolean bFound = false;
|
||||
for( customization_t *pList = cl.players[pRes->playernum].customdata.pNext; pList; pList = pList->pNext )
|
||||
{
|
||||
if( !memcmp( pList->resource.rgucMD5_hash, pRes->rgucMD5_hash, 16 ))
|
||||
{
|
||||
@@ -673,11 +651,11 @@ static void CL_ParseCustomization( sizebuf_t *msg )
|
||||
|
||||
if( HPAK_GetDataPointer( hpk_custom_file.string, pRes, NULL, NULL ))
|
||||
{
|
||||
qboolean bError = false;
|
||||
qboolean bError = false;
|
||||
|
||||
if( !bFound )
|
||||
{
|
||||
pList = &cl.players[pRes->playernum].customdata;
|
||||
customization_t *pList = &cl.players[pRes->playernum].customdata;
|
||||
|
||||
if( !COM_CreateCustomization( pList, pRes, pRes->playernum, FCUST_FROMHPAK, NULL, NULL ))
|
||||
bError = true;
|
||||
@@ -707,15 +685,14 @@ CL_ParseResourceRequest
|
||||
*/
|
||||
void CL_SendResourceList( const resource_t *list, int count )
|
||||
{
|
||||
byte buffer[MAX_INIT_MSG];
|
||||
sizebuf_t sbuf;
|
||||
int i;
|
||||
byte buffer[MAX_INIT_MSG];
|
||||
sizebuf_t sbuf;
|
||||
|
||||
MSG_Init( &sbuf, "ResourceBlock", buffer, sizeof( buffer ));
|
||||
MSG_BeginClientCmd( &sbuf, clc_resourcelist );
|
||||
MSG_WriteShort( &sbuf, count );
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
for( int i = 0; i < count; i++ )
|
||||
{
|
||||
MSG_WriteString( &sbuf, list[i].szFileName );
|
||||
MSG_WriteByte( &sbuf, list[i].type );
|
||||
@@ -733,10 +710,8 @@ void CL_SendResourceList( const resource_t *list, int count )
|
||||
|
||||
static void CL_ParseResourceRequest( sizebuf_t *msg )
|
||||
{
|
||||
int arg, nStartIndex;
|
||||
|
||||
arg = MSG_ReadLong( msg );
|
||||
nStartIndex = MSG_ReadLong( msg );
|
||||
int arg = MSG_ReadLong( msg );
|
||||
int nStartIndex = MSG_ReadLong( msg );
|
||||
|
||||
if( cl.servercount != arg )
|
||||
return;
|
||||
@@ -756,16 +731,12 @@ loading custom decal for self
|
||||
*/
|
||||
static void CL_CreateCustomizationList( void )
|
||||
{
|
||||
resource_t *pResource;
|
||||
player_info_t *pPlayer;
|
||||
int i;
|
||||
|
||||
pPlayer = &cl.players[cl.playernum];
|
||||
player_info_t *pPlayer = &cl.players[cl.playernum];
|
||||
pPlayer->customdata.pNext = NULL;
|
||||
|
||||
for( i = 0; i < cl.num_resources; i++ )
|
||||
for( int i = 0; i < cl.num_resources; i++ )
|
||||
{
|
||||
pResource = &cl.resourcelist[i];
|
||||
resource_t *pResource = &cl.resourcelist[i];
|
||||
|
||||
if( !COM_CreateCustomization( &pPlayer->customdata, pResource, cl.playernum, 0, NULL, NULL ))
|
||||
Con_Printf( "problem with client customization %s, ignoring...", pResource->szFileName );
|
||||
@@ -1247,12 +1218,10 @@ CL_ParseLightStyle
|
||||
*/
|
||||
static void CL_ParseLightStyle( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
int style;
|
||||
const char *s;
|
||||
float f = cl.mtime[0];
|
||||
float f = cl.mtime[0];
|
||||
|
||||
style = MSG_ReadByte( msg );
|
||||
s = MSG_ReadString( msg );
|
||||
int style = MSG_ReadByte( msg );
|
||||
const char *s = MSG_ReadString( msg );
|
||||
if( proto != PROTO_GOLDSRC && proto != PROTO_QUAKE )
|
||||
f = MSG_ReadFloat( msg );
|
||||
|
||||
@@ -1280,10 +1249,7 @@ add the view angle yaw
|
||||
*/
|
||||
static void CL_ParseAddAngle( sizebuf_t *msg )
|
||||
{
|
||||
pred_viewangle_t *a;
|
||||
float delta_yaw;
|
||||
|
||||
delta_yaw = MSG_ReadBitAngle( msg, 16 );
|
||||
float delta_yaw = MSG_ReadBitAngle( msg, 16 );
|
||||
#if 0
|
||||
cl.viewangles[YAW] += delta_yaw;
|
||||
return;
|
||||
@@ -1293,7 +1259,7 @@ static void CL_ParseAddAngle( sizebuf_t *msg )
|
||||
|
||||
// select entry into circular buffer
|
||||
cl.angle_position = (cl.angle_position + 1) & ANGLE_MASK;
|
||||
a = &cl.predicted_angle[cl.angle_position];
|
||||
pred_viewangle_t *a = &cl.predicted_angle[cl.angle_position];
|
||||
|
||||
// record update
|
||||
a->starttime = cl.mtime[0];
|
||||
@@ -1323,20 +1289,18 @@ reading decals, etc.
|
||||
*/
|
||||
static void CL_ParseRestore( sizebuf_t *msg )
|
||||
{
|
||||
string filename;
|
||||
int i, mapCount;
|
||||
char *pMapName;
|
||||
string filename;
|
||||
|
||||
// mapname.HL2
|
||||
Q_strncpy( filename, MSG_ReadString( msg ), sizeof( filename ));
|
||||
mapCount = MSG_ReadByte( msg );
|
||||
int mapCount = MSG_ReadByte( msg );
|
||||
|
||||
// g-cont. acutally in Xash3D this does nothing.
|
||||
// decals already restored on a server, and correctly transferred through levels
|
||||
// but i'm leave this message for backward compatibility
|
||||
for( i = 0; i < mapCount; i++ )
|
||||
for( int i = 0; i < mapCount; i++ )
|
||||
{
|
||||
pMapName = MSG_ReadString( msg );
|
||||
char *pMapName = MSG_ReadString( msg );
|
||||
Con_Printf( "Loading decals from %s\n", pMapName );
|
||||
}
|
||||
}
|
||||
@@ -1350,10 +1314,9 @@ register new user message or update existing
|
||||
*/
|
||||
static void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
char *pszName;
|
||||
char szName[17];
|
||||
int size;
|
||||
int svc_num = MSG_ReadByte( msg );
|
||||
int size;
|
||||
|
||||
if( proto == PROTO_GOLDSRC )
|
||||
{
|
||||
@@ -1368,6 +1331,7 @@ static void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto )
|
||||
size = -1;
|
||||
}
|
||||
|
||||
char *pszName;
|
||||
if( proto == PROTO_GOLDSRC )
|
||||
{
|
||||
MSG_ReadBytes( msg, szName, sizeof( szName ) - 1 );
|
||||
@@ -1388,9 +1352,8 @@ collect userinfo from all players
|
||||
*/
|
||||
static void CL_UpdateUserinfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
int slot, id;
|
||||
qboolean active;
|
||||
player_info_t *player;
|
||||
int slot, id;
|
||||
qboolean active;
|
||||
|
||||
if( proto == PROTO_GOLDSRC )
|
||||
{
|
||||
@@ -1408,7 +1371,7 @@ static void CL_UpdateUserinfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
if( slot >= MAX_CLIENTS )
|
||||
Host_Error( "%s: svc_updateuserinfo >= MAX_CLIENTS\n", __func__ );
|
||||
|
||||
player = &cl.players[slot];
|
||||
player_info_t *player = &cl.players[slot];
|
||||
|
||||
if( active )
|
||||
{
|
||||
@@ -1449,9 +1412,7 @@ downloading and precache resource in-game
|
||||
*/
|
||||
void CL_ParseResource( sizebuf_t *msg )
|
||||
{
|
||||
resource_t *pResource;
|
||||
|
||||
pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
resource_t *pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
pResource->type = MSG_ReadUBitLong( msg, 4 );
|
||||
|
||||
Q_strncpy( pResource->szFileName, MSG_ReadString( msg ), sizeof( pResource->szFileName ));
|
||||
@@ -1511,13 +1472,10 @@ void CL_UpdateUserPings( sizebuf_t *msg )
|
||||
// because pings message always ends by null bit
|
||||
while( 1 )
|
||||
{
|
||||
int slot;
|
||||
player_info_t *player;
|
||||
|
||||
if( !MSG_ReadOneBit( msg ))
|
||||
break; // end of message
|
||||
|
||||
slot = MSG_ReadUBitLong( msg, MAX_CLIENT_BITS );
|
||||
int slot = MSG_ReadUBitLong( msg, MAX_CLIENT_BITS );
|
||||
|
||||
if( unlikely( slot >= MAX_CLIENTS ))
|
||||
{
|
||||
@@ -1525,7 +1483,7 @@ void CL_UpdateUserPings( sizebuf_t *msg )
|
||||
return;
|
||||
}
|
||||
|
||||
player = &cl.players[slot];
|
||||
player_info_t *player = &cl.players[slot];
|
||||
player->ping = MSG_ReadUBitLong( msg, 12 );
|
||||
player->packet_loss = MSG_ReadUBitLong( msg, 7 );
|
||||
}
|
||||
@@ -1550,18 +1508,14 @@ static const char *CL_CheckTypeToString( int check_type )
|
||||
|
||||
static void CL_SendConsistencyInfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
qboolean user_changed_diskfile;
|
||||
vec3_t mins, maxs;
|
||||
string filename;
|
||||
byte md5[16] = { 0 };
|
||||
int pos;
|
||||
byte md5[16] = { 0 };
|
||||
|
||||
if( !cl.need_force_consistency_response )
|
||||
return;
|
||||
cl.need_force_consistency_response = false;
|
||||
|
||||
MSG_BeginClientCmd( msg, clc_fileconsistency );
|
||||
pos = MSG_GetNumBytesWritten( msg );
|
||||
int pos = MSG_GetNumBytesWritten( msg );
|
||||
if( proto == PROTO_GOLDSRC )
|
||||
{
|
||||
MSG_WriteShort( msg, 0 );
|
||||
@@ -1573,9 +1527,11 @@ static void CL_SendConsistencyInfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
for( int i = 0; i < cl.num_consistency; i++ )
|
||||
{
|
||||
qboolean have_file = true;
|
||||
qboolean user_changed_diskfile = false;
|
||||
vec3_t mins, maxs;
|
||||
string filename;
|
||||
consistency_t *pc = &cl.consistency_list[i];
|
||||
|
||||
user_changed_diskfile = false;
|
||||
MSG_WriteOneBit( msg, 1 );
|
||||
MSG_WriteUBitLong( msg, pc->orig_index, MAX_MODEL_BITS );
|
||||
|
||||
@@ -1654,10 +1610,9 @@ static void CL_SendConsistencyInfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
|
||||
if( proto == PROTO_GOLDSRC )
|
||||
{
|
||||
int len;
|
||||
MSG_EndBitWriting( msg );
|
||||
|
||||
len = MSG_GetNumBytesWritten( msg ) - pos - 2;
|
||||
int len = MSG_GetNumBytesWritten( msg ) - pos - 2;
|
||||
*(short *)&msg->pData[pos] = len;
|
||||
|
||||
COM_Munge( &msg->pData[pos + 2], len, cl.servercount );
|
||||
@@ -1673,11 +1628,10 @@ static void CL_StartDark( void )
|
||||
{
|
||||
if( v_dark.value )
|
||||
{
|
||||
screenfade_t *sf = &clgame.fade;
|
||||
float fadetime = 5.0f;
|
||||
client_textmessage_t *title;
|
||||
screenfade_t *sf = &clgame.fade;
|
||||
float fadetime = 5.0f;
|
||||
|
||||
title = CL_TextMessageGet( "GAMETITLE" );
|
||||
client_textmessage_t *title = CL_TextMessageGet( "GAMETITLE" );
|
||||
if( Host_IsQuakeCompatible( ))
|
||||
fadetime = 1.0f;
|
||||
|
||||
@@ -1789,20 +1743,12 @@ void CL_RegisterResources( sizebuf_t *msg, connprotocol_t proto )
|
||||
|
||||
static void CL_ParseConsistencyInfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
int lastcheck;
|
||||
int delta;
|
||||
int i;
|
||||
int isdelta;
|
||||
resource_t *pResource;
|
||||
resource_t *skip_crc_change;
|
||||
int skip;
|
||||
consistency_t *pc;
|
||||
byte nullbuffer[32];
|
||||
byte nullbuffer[32];
|
||||
|
||||
memset( nullbuffer, 0, 32 );
|
||||
|
||||
cl.need_force_consistency_response = MSG_ReadOneBit( msg );
|
||||
pResource = cl.resourcesneeded.pNext;
|
||||
resource_t *pResource = cl.resourcesneeded.pNext;
|
||||
|
||||
if( !cl.need_force_consistency_response )
|
||||
return;
|
||||
@@ -1816,19 +1762,20 @@ static void CL_ParseConsistencyInfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
if( cl_trace_consistency.value )
|
||||
Con_Printf( "Server wants consistency of the following resources:\n" );
|
||||
|
||||
skip_crc_change = NULL;
|
||||
lastcheck = 0;
|
||||
resource_t *skip_crc_change = NULL;
|
||||
int lastcheck = 0;
|
||||
|
||||
while( MSG_ReadOneBit( msg ))
|
||||
{
|
||||
isdelta = MSG_ReadOneBit( msg );
|
||||
int isdelta = MSG_ReadOneBit( msg );
|
||||
int delta;
|
||||
|
||||
if( isdelta ) delta = MSG_ReadUBitLong( msg, 5 ) + lastcheck;
|
||||
else delta = MSG_ReadUBitLong( msg, proto == PROTO_GOLDSRC ? MAX_GOLDSRC_MODEL_BITS : MAX_MODEL_BITS );
|
||||
|
||||
skip = delta - lastcheck;
|
||||
int skip = delta - lastcheck;
|
||||
|
||||
for( i = 0; i < skip; i++ )
|
||||
for( int i = 0; i < skip; i++ )
|
||||
{
|
||||
if( pResource != skip_crc_change && Q_strstr( pResource->szFileName, "models/" ))
|
||||
Mod_NeedCRC( pResource->szFileName, false );
|
||||
@@ -1844,7 +1791,7 @@ static void CL_ParseConsistencyInfo( sizebuf_t *msg, connprotocol_t proto )
|
||||
if( cl.num_consistency >= MAX_MODELS )
|
||||
Host_Error( "%s: MAX_MODELS limit exceeded (%d)\n", __func__, MAX_MODELS );
|
||||
|
||||
pc = &cl.consistency_list[cl.num_consistency];
|
||||
consistency_t *pc = &cl.consistency_list[cl.num_consistency];
|
||||
cl.num_consistency++;
|
||||
|
||||
memset( pc, 0, sizeof( *pc ));
|
||||
@@ -1876,14 +1823,11 @@ CL_ParseResourceList
|
||||
*/
|
||||
void CL_ParseResourceList( sizebuf_t *msg, connprotocol_t proto )
|
||||
{
|
||||
resource_t *pResource;
|
||||
int i, total;
|
||||
int total = MSG_ReadUBitLong( msg, proto == PROTO_GOLDSRC ? MAX_GOLDSRC_RESOURCE_BITS : MAX_RESOURCE_BITS );
|
||||
|
||||
total = MSG_ReadUBitLong( msg, proto == PROTO_GOLDSRC ? MAX_GOLDSRC_RESOURCE_BITS : MAX_RESOURCE_BITS );
|
||||
|
||||
for( i = 0; i < total; i++ )
|
||||
for( int i = 0; i < total; i++ )
|
||||
{
|
||||
pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
resource_t *pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
pResource->type = MSG_ReadUBitLong( msg, 4 );
|
||||
|
||||
Q_strncpy( pResource->szFileName, MSG_ReadString( msg ), sizeof( pResource->szFileName ));
|
||||
@@ -2080,14 +2024,12 @@ Set screen fade
|
||||
*/
|
||||
static void CL_ParseScreenFade( sizebuf_t *msg )
|
||||
{
|
||||
float duration, holdTime;
|
||||
screenfade_t *sf = &clgame.fade;
|
||||
float flScale;
|
||||
screenfade_t *sf = &clgame.fade;
|
||||
|
||||
duration = (float)MSG_ReadWord( msg );
|
||||
holdTime = (float)MSG_ReadWord( msg );
|
||||
float duration = (float)MSG_ReadWord( msg );
|
||||
float holdTime = (float)MSG_ReadWord( msg );
|
||||
sf->fadeFlags = MSG_ReadShort( msg );
|
||||
flScale = FBitSet( sf->fadeFlags, FFADE_LONGFADE ) ? (1.0f / 256.0f) : (1.0f / 4096.0f);
|
||||
float flScale = FBitSet( sf->fadeFlags, FFADE_LONGFADE ) ? (1.0f / 256.0f) : (1.0f / 4096.0f);
|
||||
|
||||
sf->fader = MSG_ReadByte( msg );
|
||||
sf->fadeg = MSG_ReadByte( msg );
|
||||
@@ -2196,9 +2138,6 @@ Exec map/class specific configs
|
||||
*/
|
||||
static void CL_ParseExec( sizebuf_t *msg )
|
||||
{
|
||||
qboolean is_class;
|
||||
int class_idx;
|
||||
string mapname;
|
||||
const char *class_cfgs[] = {
|
||||
"",
|
||||
"exec scout.cfg\n",
|
||||
@@ -2214,17 +2153,18 @@ static void CL_ParseExec( sizebuf_t *msg )
|
||||
"exec civilian.cfg\n"
|
||||
};
|
||||
|
||||
is_class = MSG_ReadByte( msg );
|
||||
qboolean is_class = MSG_ReadByte( msg );
|
||||
|
||||
if( is_class )
|
||||
{
|
||||
class_idx = MSG_ReadByte( msg );
|
||||
int class_idx = MSG_ReadByte( msg );
|
||||
|
||||
if( class_idx >= 0 && class_idx <= 11 && !Q_stricmp( GI->gamefolder, "tfc" ) )
|
||||
Cbuf_AddText( class_cfgs[class_idx] );
|
||||
}
|
||||
else if( !Q_stricmp( GI->gamefolder, "tfc" ) )
|
||||
{
|
||||
string mapname;
|
||||
Cbuf_AddText( "exec mapdefault.cfg\n" );
|
||||
|
||||
COM_FileBase( clgame.mapname, mapname, sizeof( mapname ));
|
||||
@@ -2378,17 +2318,15 @@ show display finale or cutscene message
|
||||
*/
|
||||
static void CL_ParseFinaleCutscene( sizebuf_t *msg, int level )
|
||||
{
|
||||
static int msgindex = 0;
|
||||
client_textmessage_t *text;
|
||||
int channel;
|
||||
static int msgindex = 0;
|
||||
|
||||
cl.intermission = level;
|
||||
|
||||
channel = msgindex;
|
||||
int channel = msgindex;
|
||||
msgindex = (msgindex + 1) & (MAX_TEXTCHANNELS - 1);
|
||||
|
||||
// grab message channel
|
||||
text = &cl_textmessage[channel];
|
||||
client_textmessage_t *text = &cl_textmessage[channel];
|
||||
|
||||
// NOTE: svc_finale and svc_cutscene has a
|
||||
// predefined settings like Quake-style
|
||||
@@ -2600,9 +2538,9 @@ dispatch messages
|
||||
*/
|
||||
void CL_ParseServerMessage( sizebuf_t *msg )
|
||||
{
|
||||
size_t bufStart, playerbytes;
|
||||
int cmd;
|
||||
int old_background;
|
||||
size_t bufStart, playerbytes;
|
||||
int cmd;
|
||||
int old_background;
|
||||
|
||||
// parse the message
|
||||
while( 1 )
|
||||
|
||||
@@ -285,19 +285,17 @@ static void CL_CopyPacketEntity( frame_t *frame, int num, const entity_state_t *
|
||||
|
||||
static int CL_ParsePacketEntitiesGS( sizebuf_t *msg, qboolean delta )
|
||||
{
|
||||
frame_t *frame, *oldframe;
|
||||
int oldindex, oldnum, numbase = 0;
|
||||
entity_state_t *oldent;
|
||||
int count;
|
||||
frame_t *oldframe;
|
||||
int numbase = 0;
|
||||
int playerbytes = 0;
|
||||
|
||||
// save first uncompressed packet as timestamp
|
||||
if( cls.changelevel && !delta && cls.demorecording )
|
||||
CL_WriteDemoJumpTime();
|
||||
|
||||
count = MSG_ReadWord( msg );
|
||||
int count = MSG_ReadWord( msg );
|
||||
|
||||
frame = &cl.frames[cl.parsecountmod];
|
||||
frame_t *frame = &cl.frames[cl.parsecountmod];
|
||||
memset( frame->flags, 0, sizeof( frame->flags ));
|
||||
frame->first_entity = cls.next_client_entities;
|
||||
frame->num_entities = 0;
|
||||
@@ -326,9 +324,9 @@ static int CL_ParsePacketEntitiesGS( sizebuf_t *msg, qboolean delta )
|
||||
|
||||
MSG_StartBitWriting( msg );
|
||||
|
||||
oldent = NULL;
|
||||
oldindex = 0;
|
||||
oldnum = CL_UpdateOldEntNum( oldindex, oldframe, &oldent );
|
||||
entity_state_t *oldent = NULL;
|
||||
int oldindex = 0;
|
||||
int oldnum = CL_UpdateOldEntNum( oldindex, oldframe, &oldent );
|
||||
|
||||
// read it all but ignore it
|
||||
while( 1 )
|
||||
@@ -415,10 +413,9 @@ static int CL_ParsePacketEntitiesGS( sizebuf_t *msg, qboolean delta )
|
||||
static float MSG_ReadGSBitCoord( sizebuf_t *sb )
|
||||
{
|
||||
float value = 0;
|
||||
int ival, fval;
|
||||
|
||||
ival = MSG_ReadOneBit( sb );
|
||||
fval = MSG_ReadOneBit( sb );
|
||||
int ival = MSG_ReadOneBit( sb );
|
||||
int fval = MSG_ReadOneBit( sb );
|
||||
|
||||
if( ival || fval )
|
||||
{
|
||||
@@ -439,13 +436,11 @@ static float MSG_ReadGSBitCoord( sizebuf_t *sb )
|
||||
|
||||
static void MSG_ReadGSBitVec3Coord( sizebuf_t *sb, vec3_t fa )
|
||||
{
|
||||
qboolean x, y, z;
|
||||
|
||||
VectorClear( fa );
|
||||
|
||||
x = MSG_ReadOneBit( sb );
|
||||
y = MSG_ReadOneBit( sb );
|
||||
z = MSG_ReadOneBit( sb );
|
||||
qboolean x = MSG_ReadOneBit( sb );
|
||||
qboolean y = MSG_ReadOneBit( sb );
|
||||
qboolean z = MSG_ReadOneBit( sb );
|
||||
if( x )
|
||||
fa[0] = MSG_ReadGSBitCoord( sb );
|
||||
if( y )
|
||||
@@ -456,31 +451,32 @@ static void MSG_ReadGSBitVec3Coord( sizebuf_t *sb, vec3_t fa )
|
||||
|
||||
static void CL_ParseSoundPacketGS( sizebuf_t *msg )
|
||||
{
|
||||
vec3_t pos;
|
||||
int chan, sound;
|
||||
float volume, attn;
|
||||
int flags, pitch, entnum;
|
||||
sound_t handle = 0;
|
||||
|
||||
MSG_StartBitWriting( msg );
|
||||
|
||||
flags = MSG_ReadUBitLong( msg, 9 );
|
||||
int flags = MSG_ReadUBitLong( msg, 9 );
|
||||
|
||||
float volume;
|
||||
if( FBitSet( flags, SND_VOLUME ))
|
||||
volume = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||
else volume = VOL_NORM;
|
||||
|
||||
float attn;
|
||||
if( FBitSet( flags, SND_ATTENUATION ))
|
||||
attn = (float)MSG_ReadByte( msg ) / 64.0f;
|
||||
else attn = ATTN_NONE;
|
||||
|
||||
chan = MSG_ReadUBitLong( msg, 3 );
|
||||
entnum = MSG_ReadUBitLong( msg, MAX_GOLDSRC_ENTITY_BITS );
|
||||
int chan = MSG_ReadUBitLong( msg, 3 );
|
||||
int entnum = MSG_ReadUBitLong( msg, MAX_GOLDSRC_ENTITY_BITS );
|
||||
int sound;
|
||||
if( FBitSet( flags, SND_GOLDSRC_LARGE_INDEX ))
|
||||
sound = MSG_ReadWord( msg );
|
||||
else sound = MSG_ReadByte( msg );
|
||||
vec3_t pos;
|
||||
MSG_ReadGSBitVec3Coord( msg, pos );
|
||||
|
||||
int pitch;
|
||||
if( FBitSet( flags, SND_PITCH ))
|
||||
pitch = MSG_ReadByte( msg );
|
||||
else pitch = PITCH_NORM;
|
||||
@@ -514,17 +510,15 @@ static void CL_ParseSoundPacketGS( sizebuf_t *msg )
|
||||
static void CL_ParseSpawnStaticSound( sizebuf_t *msg )
|
||||
{
|
||||
vec3_t pos;
|
||||
int sound, entnum, pitch, flags;
|
||||
float volume, attn;
|
||||
sound_t handle = 0;
|
||||
|
||||
MSG_ReadVec3Coord( msg, pos );
|
||||
sound = MSG_ReadShort( msg );
|
||||
volume = MSG_ReadByte( msg ) * ( 1.0f / 255.0f );
|
||||
attn = MSG_ReadByte( msg ) * ( 1.0f / 64.0f );
|
||||
entnum = MSG_ReadShort( msg );
|
||||
pitch = MSG_ReadByte( msg );
|
||||
flags = MSG_ReadByte( msg );
|
||||
int sound = MSG_ReadShort( msg );
|
||||
float volume = MSG_ReadByte( msg ) * ( 1.0f / 255.0f );
|
||||
float attn = MSG_ReadByte( msg ) * ( 1.0f / 64.0f );
|
||||
int entnum = MSG_ReadShort( msg );
|
||||
int pitch = MSG_ReadByte( msg );
|
||||
int flags = MSG_ReadByte( msg );
|
||||
|
||||
if( FBitSet( flags, SND_SENTENCE ))
|
||||
{
|
||||
|
||||
@@ -80,14 +80,13 @@ we don't want interpolate this
|
||||
*/
|
||||
static qboolean CL_QuakeEntityTeleported( cl_entity_t *ent, entity_state_t *newstate )
|
||||
{
|
||||
float len, maxlen;
|
||||
vec3_t delta;
|
||||
vec3_t delta;
|
||||
|
||||
VectorSubtract( newstate->origin, ent->prevstate.origin, delta );
|
||||
|
||||
// compute potential max movement in units per frame and compare with entity movement
|
||||
maxlen = ( clgame.movevars.maxvelocity * ( 1.0f / GAME_FPS ));
|
||||
len = VectorLength( delta );
|
||||
float maxlen = ( clgame.movevars.maxvelocity * ( 1.0f / GAME_FPS ));
|
||||
float len = VectorLength( delta );
|
||||
|
||||
return (len > maxlen);
|
||||
}
|
||||
@@ -139,33 +138,30 @@ CL_ParseQuakeSound
|
||||
*/
|
||||
static void CL_ParseQuakeSound( sizebuf_t *msg )
|
||||
{
|
||||
int channel, sound;
|
||||
int flags, entnum;
|
||||
float volume, attn;
|
||||
sound_t handle;
|
||||
vec3_t pos;
|
||||
|
||||
flags = MSG_ReadByte( msg );
|
||||
int flags = MSG_ReadByte( msg );
|
||||
|
||||
float volume;
|
||||
if( FBitSet( flags, SND_VOLUME ))
|
||||
volume = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||
else volume = VOL_NORM;
|
||||
|
||||
float attn;
|
||||
if( FBitSet( flags, SND_ATTENUATION ))
|
||||
attn = (float)MSG_ReadByte( msg ) / 64.0f;
|
||||
else attn = ATTN_NONE;
|
||||
|
||||
channel = MSG_ReadWord( msg );
|
||||
sound = MSG_ReadByte( msg ); // Quake1 have max 255 precached sounds. erm
|
||||
int channel = MSG_ReadWord( msg );
|
||||
int sound = MSG_ReadByte( msg ); // Quake1 have max 255 precached sounds. erm
|
||||
|
||||
// positioned in space
|
||||
vec3_t pos;
|
||||
MSG_ReadVec3Coord( msg, pos );
|
||||
|
||||
entnum = channel >> 3; // entity reletive
|
||||
int entnum = channel >> 3; // entity reletive
|
||||
channel &= 7;
|
||||
|
||||
// see precached sound
|
||||
handle = cl.sound_index[sound];
|
||||
sound_t handle = cl.sound_index[sound];
|
||||
|
||||
if( !cl.audio_prepped )
|
||||
return; // too early
|
||||
@@ -181,11 +177,6 @@ CL_ParseQuakeServerInfo
|
||||
*/
|
||||
static void CL_ParseQuakeServerInfo( sizebuf_t *msg )
|
||||
{
|
||||
resource_t *pResource;
|
||||
const char *pResName;
|
||||
int gametype;
|
||||
int i;
|
||||
|
||||
Con_Reportf( "Serverdata packet received.\n" );
|
||||
cls.timestart = Platform_DoubleTime();
|
||||
|
||||
@@ -198,7 +189,7 @@ static void CL_ParseQuakeServerInfo( sizebuf_t *msg )
|
||||
cls.state = ca_connected;
|
||||
|
||||
// parse protocol version number
|
||||
i = MSG_ReadLong( msg );
|
||||
int i = MSG_ReadLong( msg );
|
||||
|
||||
if( i != PROTOCOL_VERSION_QUAKE )
|
||||
{
|
||||
@@ -208,7 +199,7 @@ static void CL_ParseQuakeServerInfo( sizebuf_t *msg )
|
||||
}
|
||||
|
||||
cl.maxclients = MSG_ReadByte( msg );
|
||||
gametype = MSG_ReadByte( msg );
|
||||
int gametype = MSG_ReadByte( msg );
|
||||
clgame.maxEntities = GI->max_edicts;
|
||||
clgame.maxEntities = bound( 600, clgame.maxEntities, MAX_EDICTS );
|
||||
clgame.maxModels = MAX_MODELS;
|
||||
@@ -264,12 +255,12 @@ static void CL_ParseQuakeServerInfo( sizebuf_t *msg )
|
||||
// Quake just have a large packet of initialization data
|
||||
for( i = 1; i < MAX_MODELS; i++ )
|
||||
{
|
||||
pResName = MSG_ReadString( msg );
|
||||
const char *pResName = MSG_ReadString( msg );
|
||||
|
||||
if( COM_StringEmptyOrNULL( pResName ))
|
||||
break; // end of list
|
||||
|
||||
pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
resource_t *pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
pResource->type = t_model;
|
||||
|
||||
Q_strncpy( pResource->szFileName, pResName, sizeof( pResource->szFileName ));
|
||||
@@ -282,12 +273,12 @@ static void CL_ParseQuakeServerInfo( sizebuf_t *msg )
|
||||
|
||||
for( i = 1; i < MAX_SOUNDS; i++ )
|
||||
{
|
||||
pResName = MSG_ReadString( msg );
|
||||
const char *pResName = MSG_ReadString( msg );
|
||||
|
||||
if( COM_StringEmptyOrNULL( pResName ))
|
||||
break; // end of list
|
||||
|
||||
pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
resource_t *pResource = Mem_Calloc( cls.mempool, sizeof( resource_t ));
|
||||
pResource->type = t_sound;
|
||||
|
||||
Q_strncpy( pResource->szFileName, pResName, sizeof( pResource->szFileName ));
|
||||
@@ -340,15 +331,12 @@ CL_ParseQuakeClientData
|
||||
*/
|
||||
static void CL_ParseQuakeClientData( sizebuf_t *msg )
|
||||
{
|
||||
int i, bits = MSG_ReadWord( msg );
|
||||
frame_t *frame;
|
||||
int bits = MSG_ReadWord( msg );
|
||||
|
||||
// this is the frame update that this message corresponds to
|
||||
i = cls.netchan.incoming_sequence;
|
||||
|
||||
cl.parsecount = i; // ack'd incoming messages.
|
||||
cl.parsecount = cls.netchan.incoming_sequence; // ack'd incoming messages.
|
||||
cl.parsecountmod = cl.parsecount & CL_UPDATE_MASK; // index into window.
|
||||
frame = &cl.frames[cl.parsecountmod]; // frame at index.
|
||||
frame_t *frame = &cl.frames[cl.parsecountmod]; // frame at index.
|
||||
frame->time = cl.mtime[0]; // mark network received time
|
||||
frame->receivedtime = host.realtime; // time now that we are parsing.
|
||||
memset( &frame->graphdata, 0, sizeof( netbandwidthgraph_t ));
|
||||
@@ -365,7 +353,7 @@ static void CL_ParseQuakeClientData( sizebuf_t *msg )
|
||||
cl.local.idealpitch = MSG_ReadChar( msg );
|
||||
else cl.local.idealpitch = 0;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( FBitSet( bits, SU_PUNCH1 << i ))
|
||||
frame->clientdata.punchangle[i] = (float)MSG_ReadChar( msg );
|
||||
@@ -568,15 +556,14 @@ CL_ParseQuakeParticles
|
||||
*/
|
||||
static void CL_ParseQuakeParticle( sizebuf_t *msg )
|
||||
{
|
||||
int count, color;
|
||||
vec3_t org, dir;
|
||||
vec3_t org, dir;
|
||||
|
||||
MSG_ReadVec3Coord( msg, org );
|
||||
dir[0] = MSG_ReadChar( msg ) * 0.0625f;
|
||||
dir[1] = MSG_ReadChar( msg ) * 0.0625f;
|
||||
dir[2] = MSG_ReadChar( msg ) * 0.0625f;
|
||||
count = MSG_ReadByte( msg );
|
||||
color = MSG_ReadByte( msg );
|
||||
int count = MSG_ReadByte( msg );
|
||||
int color = MSG_ReadByte( msg );
|
||||
if( count == 255 ) count = 1024;
|
||||
|
||||
R_RunParticleEffect( org, dir, color, count );
|
||||
@@ -590,14 +577,12 @@ CL_ParseQuakeStaticSound
|
||||
*/
|
||||
static void CL_ParseQuakeStaticSound( sizebuf_t *msg )
|
||||
{
|
||||
int sound_num;
|
||||
float vol, attn;
|
||||
vec3_t org;
|
||||
vec3_t org;
|
||||
|
||||
MSG_ReadVec3Coord( msg, org );
|
||||
sound_num = MSG_ReadByte( msg );
|
||||
vol = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||
attn = (float)MSG_ReadByte( msg ) / 64.0f;
|
||||
int sound_num = MSG_ReadByte( msg );
|
||||
float vol = (float)MSG_ReadByte( msg ) / 255.0f;
|
||||
float attn = (float)MSG_ReadByte( msg ) / 64.0f;
|
||||
|
||||
S_StartSound( org, 0, CHAN_STATIC, cl.sound_index[sound_num], vol, attn, PITCH_NORM, 0 );
|
||||
}
|
||||
@@ -628,8 +613,6 @@ CL_ParseStaticEntity
|
||||
static void CL_ParseQuakeStaticEntity( sizebuf_t *msg )
|
||||
{
|
||||
entity_state_t state = { 0 };
|
||||
cl_entity_t *ent;
|
||||
int i;
|
||||
|
||||
if( !clgame.static_entities )
|
||||
clgame.static_entities = Mem_Calloc( clgame.mempool, sizeof( cl_entity_t ) * MAX_STATIC_ENTITIES );
|
||||
@@ -645,14 +628,14 @@ static void CL_ParseQuakeStaticEntity( sizebuf_t *msg )
|
||||
state.origin[2] = MSG_ReadCoord( msg );
|
||||
state.angles[2] = MSG_ReadAngle( msg );
|
||||
|
||||
i = clgame.numStatics;
|
||||
int i = clgame.numStatics;
|
||||
if( i >= MAX_STATIC_ENTITIES )
|
||||
{
|
||||
Con_Printf( S_ERROR "%s: static entities limit exceeded!\n", __func__ );
|
||||
return;
|
||||
}
|
||||
|
||||
ent = &clgame.static_entities[i];
|
||||
cl_entity_t *ent = &clgame.static_entities[i];
|
||||
clgame.numStatics++;
|
||||
|
||||
ent->index = 0; // ???
|
||||
@@ -692,16 +675,13 @@ CL_ParseQuakeBaseline
|
||||
*/
|
||||
static void CL_ParseQuakeBaseline( sizebuf_t *msg )
|
||||
{
|
||||
entity_state_t state;
|
||||
cl_entity_t *ent;
|
||||
int newnum;
|
||||
|
||||
newnum = MSG_ReadWord( msg ); // entnum
|
||||
int newnum = MSG_ReadWord( msg ); // entnum
|
||||
|
||||
if( newnum >= clgame.maxEntities )
|
||||
Host_Error( "%s: no free edicts\n", __func__ );
|
||||
|
||||
// parse baseline
|
||||
entity_state_t state;
|
||||
memset( &state, 0, sizeof( state ));
|
||||
state.modelindex = MSG_ReadByte( msg );
|
||||
state.frame = MSG_ReadByte( msg );
|
||||
@@ -714,7 +694,7 @@ static void CL_ParseQuakeBaseline( sizebuf_t *msg )
|
||||
state.origin[2] = MSG_ReadCoord( msg );
|
||||
state.angles[2] = MSG_ReadAngle( msg );
|
||||
|
||||
ent = CL_EDICT_NUM( newnum );
|
||||
cl_entity_t *ent = CL_EDICT_NUM( newnum );
|
||||
ent->index = newnum;
|
||||
ent->player = CL_IsPlayerIndex( newnum );
|
||||
ent->prevstate = ent->baseline = state;
|
||||
|
||||
@@ -386,13 +386,14 @@ Do stereo processing
|
||||
static void DLY_DoStereoDelay( portable_samplepair_t *paint, int count )
|
||||
{
|
||||
dly_t *dly = &stereodly;
|
||||
int delay, samplexf;
|
||||
|
||||
if( !dly->lpdelayline )
|
||||
return; // inactive
|
||||
|
||||
for( ; count; count--, paint++ )
|
||||
{
|
||||
int delay;
|
||||
|
||||
if( dly->mod && --dly->modcur < 0 )
|
||||
dly->modcur = dly->mod;
|
||||
|
||||
@@ -414,7 +415,7 @@ static void DLY_DoStereoDelay( portable_samplepair_t *paint, int count )
|
||||
// modify delay, if crossfading
|
||||
if( dly->xfade )
|
||||
{
|
||||
samplexf = dly->lpdelayline[dly->idelayoutputxf] * (128 - dly->xfade) >> 7;
|
||||
int samplexf = dly->lpdelayline[dly->idelayoutputxf] * (128 - dly->xfade) >> 7;
|
||||
delay = samplexf + ((delay * dly->xfade) >> 7);
|
||||
|
||||
if( ++dly->idelayoutputxf >= dly->cdelaysamplesmax )
|
||||
@@ -496,14 +497,13 @@ Do delay processing
|
||||
static void DLY_DoDelay( portable_samplepair_t *paint, int count )
|
||||
{
|
||||
dly_t *dly = &monodly;
|
||||
int delay;
|
||||
|
||||
if( !dly->lpdelayline || !count )
|
||||
return; // inactive
|
||||
|
||||
for( ; count; count--, paint++ )
|
||||
{
|
||||
delay = dly->lpdelayline[dly->idelayoutput];
|
||||
int delay = dly->lpdelayline[dly->idelayoutput];
|
||||
|
||||
// don't process if delay line and left/right samples are zero
|
||||
if( delay || paint->left || paint->right )
|
||||
@@ -613,8 +613,6 @@ Do reverberation for one dly
|
||||
static int RVB_DoReverbForOneDly( dly_t *dly, const int vlr, const portable_samplepair_t *samplepair )
|
||||
{
|
||||
int delay;
|
||||
int samplexf;
|
||||
int val, valt;
|
||||
int voutm = 0;
|
||||
|
||||
if( --dly->modcur < 0 )
|
||||
@@ -624,6 +622,8 @@ static int RVB_DoReverbForOneDly( dly_t *dly, const int vlr, const portable_samp
|
||||
|
||||
if( dly->xfade || delay || samplepair->left || samplepair->right )
|
||||
{
|
||||
int val, valt;
|
||||
|
||||
// modulate delay rate
|
||||
if( !dly->mod )
|
||||
{
|
||||
@@ -636,7 +636,7 @@ static int RVB_DoReverbForOneDly( dly_t *dly, const int vlr, const portable_samp
|
||||
|
||||
if( dly->xfade )
|
||||
{
|
||||
samplexf = (dly->lpdelayline[dly->idelayoutputxf] * (REVERB_XFADE - dly->xfade)) / REVERB_XFADE;
|
||||
int samplexf = (dly->lpdelayline[dly->idelayoutputxf] * (REVERB_XFADE - dly->xfade)) / REVERB_XFADE;
|
||||
delay = ((delay * dly->xfade) / REVERB_XFADE) + samplexf;
|
||||
|
||||
if( ++dly->idelayoutputxf >= dly->cdelaysamplesmax )
|
||||
@@ -688,14 +688,14 @@ static void RVB_DoReverb( portable_samplepair_t *paint, int count )
|
||||
{
|
||||
dly_t *dly1 = &reverbdly[0];
|
||||
dly_t *dly2 = &reverbdly[1];
|
||||
int vlr, voutm;
|
||||
|
||||
if( !dly1->lpdelayline )
|
||||
return;
|
||||
|
||||
for( ; count; count--, paint++ )
|
||||
{
|
||||
vlr = ( paint->left + paint->right ) >> 1;
|
||||
int vlr = ( paint->left + paint->right ) >> 1;
|
||||
int voutm;
|
||||
|
||||
voutm = RVB_DoReverbForOneDly( dly1, vlr, paint );
|
||||
voutm += RVB_DoReverbForOneDly( dly2, vlr, paint );
|
||||
@@ -881,9 +881,8 @@ static void SX_Profiling_f( void )
|
||||
portable_samplepair_t testbuffer[512];
|
||||
float oldroom = room_type.value;
|
||||
double start, end;
|
||||
int i, calls;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( testbuffer ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( testbuffer ); i++ )
|
||||
{
|
||||
testbuffer[i].left = COM_RandomLong( 0, 3000 );
|
||||
testbuffer[i].right = COM_RandomLong( 0, 3000 );
|
||||
@@ -899,7 +898,7 @@ static void SX_Profiling_f( void )
|
||||
Con_Printf( "Profiling 10000 calls to DSP. Sample count is 512, room_type is %i\n", idsp_room );
|
||||
|
||||
start = Platform_DoubleTime();
|
||||
for( calls = 10000; calls; calls-- )
|
||||
for( int calls = 10000; calls; calls-- )
|
||||
{
|
||||
SX_RoomFX( testbuffer, 512 );
|
||||
}
|
||||
|
||||
@@ -39,17 +39,16 @@ S_SoundList_f
|
||||
*/
|
||||
void S_SoundList_f( void )
|
||||
{
|
||||
sfx_t *sfx;
|
||||
wavdata_t *sc;
|
||||
int i, totalSfx = 0;
|
||||
int totalSize = 0;
|
||||
sfx_t *sfx;
|
||||
int i, totalSfx = 0;
|
||||
int totalSize = 0;
|
||||
|
||||
for( i = 0, sfx = s_knownSfx; i < s_numSfx; i++, sfx++ )
|
||||
{
|
||||
if( !sfx->name[0] )
|
||||
continue;
|
||||
|
||||
sc = sfx->cache;
|
||||
wavdata_t *sc = sfx->cache;
|
||||
if( sc )
|
||||
{
|
||||
totalSize += sc->size;
|
||||
@@ -149,7 +148,7 @@ S_FindName
|
||||
sfx_t *S_FindName( const char *pname, qboolean *pfInCache )
|
||||
{
|
||||
sfx_t *sfx;
|
||||
uint i, hash;
|
||||
uint i;
|
||||
string name;
|
||||
|
||||
if( COM_StringEmptyOrNULL( pname ) || !snd.initialized )
|
||||
@@ -162,7 +161,7 @@ sfx_t *S_FindName( const char *pname, qboolean *pfInCache )
|
||||
COM_FixSlashes( name );
|
||||
|
||||
// see if already loaded
|
||||
hash = COM_HashKey( name, MAX_SFX_HASH );
|
||||
uint hash = COM_HashKey( name, MAX_SFX_HASH );
|
||||
for( sfx = s_sfxHashList[hash]; sfx; sfx = sfx->hashNext )
|
||||
{
|
||||
if( !Q_strcmp( sfx->name, name ))
|
||||
@@ -210,17 +209,14 @@ S_FreeSound
|
||||
*/
|
||||
void S_FreeSound( sfx_t *sfx )
|
||||
{
|
||||
sfx_t *hashSfx;
|
||||
sfx_t **prev;
|
||||
|
||||
if( !sfx || !sfx->name[0] )
|
||||
return;
|
||||
|
||||
// de-link it from the hash tree
|
||||
prev = &s_sfxHashList[sfx->hashValue];
|
||||
sfx_t **prev = &s_sfxHashList[sfx->hashValue];
|
||||
while( 1 )
|
||||
{
|
||||
hashSfx = *prev;
|
||||
sfx_t *hashSfx = *prev;
|
||||
if( !hashSfx )
|
||||
break;
|
||||
|
||||
@@ -251,12 +247,10 @@ S_BeginRegistration
|
||||
*/
|
||||
void S_BeginRegistration( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
snd.have_ambient_sfx = false;
|
||||
|
||||
// check for automatic ambient sounds
|
||||
for( i = 0; i < NUM_AMBIENTS; i++ )
|
||||
for( int i = 0; i < NUM_AMBIENTS; i++ )
|
||||
{
|
||||
if( !GI->ambientsound[i][0] )
|
||||
continue; // empty slot
|
||||
@@ -386,6 +380,7 @@ void S_FreeSounds( void )
|
||||
for( i = 0, sfx = s_knownSfx; i < s_numSfx; i++, sfx++ )
|
||||
S_FreeSound( sfx );
|
||||
|
||||
|
||||
memset( s_knownSfx, 0, sizeof( s_knownSfx ));
|
||||
memset( s_sfxHashList, 0, sizeof( s_sfxHashList ));
|
||||
|
||||
|
||||
@@ -290,8 +290,6 @@ static int SND_GetChannelTimeLeft( const channel_t *ch )
|
||||
|
||||
if( ch->words ) // sentences are special, count all remaining words
|
||||
{
|
||||
int i;
|
||||
|
||||
if( FBitSet( ch->flags, FL_CHAN_SENTENCE_FINISHED ) )
|
||||
return 0;
|
||||
|
||||
@@ -300,7 +298,7 @@ static int SND_GetChannelTimeLeft( const channel_t *ch )
|
||||
|
||||
// here we count all remaining words, stopping if no sfx or sound file is available
|
||||
// see VOX_LoadWord
|
||||
for( i = ch->word_index + 1; i < CVOXWORDMAX; i++ )
|
||||
for( int i = ch->word_index + 1; i < CVOXWORDMAX; i++ )
|
||||
{
|
||||
wavdata_t *sc;
|
||||
int end;
|
||||
@@ -341,14 +339,9 @@ exceptions).
|
||||
*/
|
||||
channel_t *SND_PickDynamicChannel( int entnum, int channel, sfx_t *sfx, qboolean *ignore )
|
||||
{
|
||||
int ch_idx;
|
||||
int first_to_die;
|
||||
int life_left;
|
||||
int timeleft;
|
||||
int first_to_die = -1;
|
||||
int life_left = 0x7fffffff;
|
||||
|
||||
// check for replacement sound, or find the best one to replace
|
||||
first_to_die = -1;
|
||||
life_left = 0x7fffffff;
|
||||
if( ignore ) *ignore = false;
|
||||
|
||||
if( channel == CHAN_STREAM && SND_FStreamIsPlaying( sfx ))
|
||||
@@ -358,9 +351,10 @@ channel_t *SND_PickDynamicChannel( int entnum, int channel, sfx_t *sfx, qboolean
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for( ch_idx = NUM_AMBIENTS; ch_idx < MAX_DYNAMIC_CHANNELS; ch_idx++ )
|
||||
for( int ch_idx = NUM_AMBIENTS; ch_idx < MAX_DYNAMIC_CHANNELS; ch_idx++ )
|
||||
{
|
||||
channel_t *ch = &snd.channels[ch_idx];
|
||||
int timeleft;
|
||||
|
||||
// Never override a streaming sound that is currently playing or
|
||||
// voice over IP data that is playing or any sound on CHAN_VOICE( acting )
|
||||
@@ -1019,14 +1013,14 @@ grab all static sounds playing at current channel
|
||||
int S_GetCurrentDynamicSounds( soundlist_t *pout, int size )
|
||||
{
|
||||
int sounds_left = size;
|
||||
int i, looped;
|
||||
|
||||
if( !snd.initialized )
|
||||
return 0;
|
||||
|
||||
for( i = 0; i < snd.max_channels && sounds_left; i++ )
|
||||
for( int i = 0; i < snd.max_channels && sounds_left; i++ )
|
||||
{
|
||||
const channel_t *ch = &snd.channels[i];
|
||||
int looped;
|
||||
|
||||
if( !ch->sfx || !ch->sfx->name[0] || !Q_stricmp( ch->sfx->name, "*default" ))
|
||||
continue; // don't serialize default sounds
|
||||
@@ -1220,14 +1214,13 @@ S_RawSamplesStereo
|
||||
*/
|
||||
uint S_RawSamplesStereo( portable_samplepair_t *rawsamples, uint rawend, uint max_samples, uint samples, uint rate, word width, word channels, const byte *data )
|
||||
{
|
||||
uint fracstep, samplefrac;
|
||||
uint src, dst;
|
||||
uint src;
|
||||
|
||||
if( rawend < snd.paintedtime )
|
||||
rawend = snd.paintedtime;
|
||||
|
||||
fracstep = ((double) rate / (double)SOUND_DMA_SPEED) * (double)(1 << S_RAW_SAMPLES_PRECISION_BITS);
|
||||
samplefrac = 0;
|
||||
uint fracstep = ((double) rate / (double)SOUND_DMA_SPEED) * (double)(1 << S_RAW_SAMPLES_PRECISION_BITS);
|
||||
uint samplefrac = 0;
|
||||
|
||||
if( width == 2 )
|
||||
{
|
||||
@@ -1237,7 +1230,7 @@ uint S_RawSamplesStereo( portable_samplepair_t *rawsamples, uint rawend, uint ma
|
||||
{
|
||||
for( src = 0; src < samples; samplefrac += fracstep, src = ( samplefrac >> S_RAW_SAMPLES_PRECISION_BITS ))
|
||||
{
|
||||
dst = rawend++ & ( max_samples - 1 );
|
||||
uint dst = rawend++ & ( max_samples - 1 );
|
||||
rawsamples[dst].left = in[src*2+0];
|
||||
rawsamples[dst].right = in[src*2+1];
|
||||
}
|
||||
@@ -1246,7 +1239,7 @@ uint S_RawSamplesStereo( portable_samplepair_t *rawsamples, uint rawend, uint ma
|
||||
{
|
||||
for( src = 0; src < samples; samplefrac += fracstep, src = ( samplefrac >> S_RAW_SAMPLES_PRECISION_BITS ))
|
||||
{
|
||||
dst = rawend++ & ( max_samples - 1 );
|
||||
uint dst = rawend++ & ( max_samples - 1 );
|
||||
rawsamples[dst].left = in[src];
|
||||
rawsamples[dst].right = in[src];
|
||||
}
|
||||
@@ -1260,7 +1253,7 @@ uint S_RawSamplesStereo( portable_samplepair_t *rawsamples, uint rawend, uint ma
|
||||
|
||||
for( src = 0; src < samples; samplefrac += fracstep, src = ( samplefrac >> S_RAW_SAMPLES_PRECISION_BITS ))
|
||||
{
|
||||
dst = rawend++ & ( max_samples - 1 );
|
||||
uint dst = rawend++ & ( max_samples - 1 );
|
||||
rawsamples[dst].left = in[src*2+0] << 8;
|
||||
rawsamples[dst].right = in[src*2+1] << 8;
|
||||
}
|
||||
@@ -1269,7 +1262,7 @@ uint S_RawSamplesStereo( portable_samplepair_t *rawsamples, uint rawend, uint ma
|
||||
{
|
||||
for( src = 0; src < samples; samplefrac += fracstep, src = ( samplefrac >> S_RAW_SAMPLES_PRECISION_BITS ))
|
||||
{
|
||||
dst = rawend++ & ( max_samples - 1 );
|
||||
uint dst = rawend++ & ( max_samples - 1 );
|
||||
rawsamples[dst].left = ( data[src] - 128 ) << 8;
|
||||
rawsamples[dst].right = ( data[src] - 128 ) << 8;
|
||||
}
|
||||
@@ -1309,9 +1302,7 @@ Free raw channel that have been idling for too long.
|
||||
*/
|
||||
static void S_FreeIdleRawChannels( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < snd.max_raw_channels; i++ )
|
||||
for( int i = 0; i < snd.max_raw_channels; i++ )
|
||||
{
|
||||
rawchan_t *ch = snd.raw_channels[i];
|
||||
|
||||
@@ -1344,9 +1335,7 @@ S_ClearRawChannels
|
||||
*/
|
||||
static void S_ClearRawChannels( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < snd.max_raw_channels; i++ )
|
||||
for( int i = 0; i < snd.max_raw_channels; i++ )
|
||||
{
|
||||
rawchan_t *ch = snd.raw_channels[i];
|
||||
|
||||
@@ -1464,12 +1453,10 @@ S_StopAllSounds
|
||||
*/
|
||||
void S_StopAllSounds( qboolean ambient )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !snd.initialized ) return;
|
||||
snd.total_channels = MAX_DYNAMIC_CHANNELS; // no statics
|
||||
|
||||
for( i = 0; i < snd.max_channels; i++ )
|
||||
for( int i = 0; i < snd.max_channels; i++ )
|
||||
{
|
||||
if( !snd.channels[i].sfx )
|
||||
continue;
|
||||
@@ -1503,14 +1490,13 @@ update global soundtime
|
||||
static int S_GetSoundtime( void )
|
||||
{
|
||||
static int buffers, oldsamplepos;
|
||||
int samplepos, fullsamples;
|
||||
|
||||
fullsamples = snd.samples / 2;
|
||||
int fullsamples = snd.samples / 2;
|
||||
|
||||
// it is possible to miscount buffers
|
||||
// if it has wrapped twice between
|
||||
// calls to S_Update. Oh well.
|
||||
samplepos = snd.samplepos;
|
||||
int samplepos = snd.samplepos;
|
||||
|
||||
if( samplepos < oldsamplepos )
|
||||
{
|
||||
@@ -1776,13 +1762,12 @@ static void S_Music_f( void )
|
||||
{
|
||||
string intro, main, track;
|
||||
const char *ext[] = { "mp3", "wav" };
|
||||
int i;
|
||||
|
||||
Q_strncpy( track, Cmd_Argv( 1 ), sizeof( track ));
|
||||
Q_snprintf( intro, sizeof( intro ), "%s_intro", Cmd_Argv( 1 ));
|
||||
Q_snprintf( main, sizeof( main ), "%s_main", Cmd_Argv( 1 ));
|
||||
|
||||
for( i = 0; i < 2; i++ )
|
||||
for( int i = 0; i < 2; i++ )
|
||||
{
|
||||
char intro_path[MAX_VA_STRING];
|
||||
char main_path[MAX_VA_STRING];
|
||||
|
||||
@@ -36,20 +36,17 @@ static void SND_CommitMouthValue( mouth_t *mouth, int savg, int scount )
|
||||
void SND_MoveMouth8( mouth_t *mouth, int pos, const wavdata_t *sc, int count, qboolean use_loop )
|
||||
{
|
||||
const int8_t *pdata = NULL;
|
||||
int scount;
|
||||
int savg, data;
|
||||
uint i;
|
||||
|
||||
count = S_RetrieveAudioSamples( sc, (const void **)&pdata, pos, count, use_loop );
|
||||
if( pdata == NULL ) return;
|
||||
|
||||
i = 0;
|
||||
scount = mouth->sndcount;
|
||||
savg = 0;
|
||||
uint i = 0;
|
||||
int scount = mouth->sndcount;
|
||||
int savg = 0;
|
||||
|
||||
while( i < count && scount < CAVGSAMPLES )
|
||||
{
|
||||
data = pdata[i];
|
||||
int data = pdata[i];
|
||||
savg += abs( data );
|
||||
|
||||
i += 80 + ((byte)data & 0x1F);
|
||||
@@ -62,20 +59,17 @@ void SND_MoveMouth8( mouth_t *mouth, int pos, const wavdata_t *sc, int count, qb
|
||||
void SND_MoveMouth16( mouth_t *mouth, int pos, const wavdata_t *sc, int count, qboolean use_loop )
|
||||
{
|
||||
const int16_t *pdata = NULL;
|
||||
int savg, data;
|
||||
int scount;
|
||||
uint i;
|
||||
|
||||
count = S_RetrieveAudioSamples( sc, (const void **)&pdata, pos, count, use_loop );
|
||||
if( pdata == NULL ) return;
|
||||
|
||||
i = 0;
|
||||
scount = mouth->sndcount;
|
||||
savg = 0;
|
||||
uint i = 0;
|
||||
int scount = mouth->sndcount;
|
||||
int savg = 0;
|
||||
|
||||
while( i < count && scount < CAVGSAMPLES )
|
||||
{
|
||||
data = pdata[i];
|
||||
int data = pdata[i];
|
||||
data = (bound( -32767, data, 0x7ffe ) >> 8);
|
||||
savg += abs( data );
|
||||
|
||||
@@ -88,9 +82,7 @@ void SND_MoveMouth16( mouth_t *mouth, int pos, const wavdata_t *sc, int count, q
|
||||
|
||||
void SND_ForceInitMouth( int entnum )
|
||||
{
|
||||
cl_entity_t *clientEntity;
|
||||
|
||||
clientEntity = CL_GetEntityByIndex( entnum );
|
||||
cl_entity_t *clientEntity = CL_GetEntityByIndex( entnum );
|
||||
|
||||
if( clientEntity )
|
||||
{
|
||||
@@ -102,9 +94,7 @@ void SND_ForceInitMouth( int entnum )
|
||||
|
||||
void SND_ForceCloseMouth( int entnum )
|
||||
{
|
||||
cl_entity_t *clientEntity;
|
||||
|
||||
clientEntity = CL_GetEntityByIndex( entnum );
|
||||
cl_entity_t *clientEntity = CL_GetEntityByIndex( entnum );
|
||||
|
||||
if( clientEntity )
|
||||
clientEntity->mouth.mouthopen = 0;
|
||||
@@ -112,17 +102,13 @@ void SND_ForceCloseMouth( int entnum )
|
||||
|
||||
void SND_MoveMouthRaw( mouth_t *mouth, const portable_samplepair_t *buf, int count )
|
||||
{
|
||||
int savg, data;
|
||||
int scount = 0;
|
||||
uint i;
|
||||
|
||||
i = 0;
|
||||
scount = mouth->sndcount;
|
||||
savg = 0;
|
||||
uint i = 0;
|
||||
int scount = mouth->sndcount;
|
||||
int savg = 0;
|
||||
|
||||
while ( i < count && scount < CAVGSAMPLES )
|
||||
{
|
||||
data = buf[i].left; // mono sound anyway
|
||||
int data = buf[i].left; // mono sound anyway
|
||||
data = ( bound( -32767, data, 0x7ffe ) >> 8 );
|
||||
savg += abs( data );
|
||||
|
||||
|
||||
@@ -66,14 +66,14 @@ S_GetMusicVolume
|
||||
*/
|
||||
float S_GetMusicVolume( void )
|
||||
{
|
||||
float scale = 1.0f;
|
||||
|
||||
if( host.status == HOST_NOFOCUS && snd_mute_losefocus.value != 0.0f )
|
||||
{
|
||||
// we return zero volume to keep sounds running
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
float scale = 1.0f;
|
||||
|
||||
if( cls.key_dest != key_menu && musicfade.percent != 0 )
|
||||
{
|
||||
scale = bound( 0.0f, musicfade.percent / 100.0f, 1.0f );
|
||||
@@ -191,11 +191,7 @@ S_StreamBackgroundTrack
|
||||
*/
|
||||
void S_StreamBackgroundTrack( void )
|
||||
{
|
||||
int bufferSamples;
|
||||
int fileSamples;
|
||||
byte raw[MAX_RAW_SAMPLES];
|
||||
int r, fileBytes;
|
||||
rawchan_t *ch = NULL;
|
||||
|
||||
if( !snd.initialized || !s_bgTrack.stream || snd.streaming )
|
||||
return;
|
||||
@@ -213,7 +209,7 @@ void S_StreamBackgroundTrack( void )
|
||||
else if( cls.key_dest == key_console )
|
||||
return;
|
||||
|
||||
ch = S_FindRawChannel( S_RAW_SOUND_BACKGROUNDTRACK, true );
|
||||
rawchan_t *ch = S_FindRawChannel( S_RAW_SOUND_BACKGROUNDTRACK, true );
|
||||
|
||||
Assert( ch != NULL );
|
||||
|
||||
@@ -225,14 +221,14 @@ void S_StreamBackgroundTrack( void )
|
||||
{
|
||||
const stream_t *info = s_bgTrack.stream;
|
||||
|
||||
bufferSamples = ch->max_samples - (ch->s_rawend - snd.soundtime);
|
||||
int bufferSamples = ch->max_samples - (ch->s_rawend - snd.soundtime);
|
||||
|
||||
// decide how much data needs to be read from the file
|
||||
fileSamples = bufferSamples * ((float)info->rate / SOUND_DMA_SPEED );
|
||||
int fileSamples = bufferSamples * ((float)info->rate / SOUND_DMA_SPEED );
|
||||
if( fileSamples <= 1 ) return; // no more samples need
|
||||
|
||||
// our max buffer size
|
||||
fileBytes = fileSamples * ( info->width * info->channels );
|
||||
int fileBytes = fileSamples * ( info->width * info->channels );
|
||||
|
||||
if( fileBytes > sizeof( raw ))
|
||||
{
|
||||
@@ -241,7 +237,7 @@ void S_StreamBackgroundTrack( void )
|
||||
}
|
||||
|
||||
// read
|
||||
r = FS_ReadStream( s_bgTrack.stream, fileBytes, raw );
|
||||
int r = FS_ReadStream( s_bgTrack.stream, fileBytes, raw );
|
||||
|
||||
if( r < fileBytes )
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@ static qboolean S_ShouldTrimSample16( const int16_t *buf, int channels )
|
||||
|
||||
static int S_TrimStart( const wavdata_t *wav, int start )
|
||||
{
|
||||
size_t channels = wav->channels, width = wav->width, i;
|
||||
size_t channels = wav->channels, width = wav->width;
|
||||
|
||||
if( wav->type != WF_PCMDATA )
|
||||
return start;
|
||||
@@ -61,7 +61,7 @@ static int S_TrimStart( const wavdata_t *wav, int start )
|
||||
{
|
||||
const int8_t *data = (const int8_t *)&wav->buffer[channels * width * start];
|
||||
|
||||
for( i = 0; i < TRIM_SCAN_MAX && start < wav->samples; i++ )
|
||||
for( size_t i = 0; i < TRIM_SCAN_MAX && start < wav->samples; i++ )
|
||||
{
|
||||
if( !S_ShouldTrimSample8( data, wav->channels ))
|
||||
break;
|
||||
@@ -74,7 +74,7 @@ static int S_TrimStart( const wavdata_t *wav, int start )
|
||||
{
|
||||
const int16_t *data = (const int16_t *)&wav->buffer[channels * width * start];
|
||||
|
||||
for( i = 0; i < TRIM_SCAN_MAX && start < wav->samples; i++ )
|
||||
for( size_t i = 0; i < TRIM_SCAN_MAX && start < wav->samples; i++ )
|
||||
{
|
||||
if( !S_ShouldTrimSample16( data, wav->channels ))
|
||||
break;
|
||||
@@ -89,7 +89,7 @@ static int S_TrimStart( const wavdata_t *wav, int start )
|
||||
|
||||
static int S_TrimEnd( const wavdata_t *wav, int end )
|
||||
{
|
||||
size_t channels = wav->channels, width = wav->width, i;
|
||||
size_t channels = wav->channels, width = wav->width;
|
||||
|
||||
if( wav->type != WF_PCMDATA )
|
||||
return end;
|
||||
@@ -98,7 +98,7 @@ static int S_TrimEnd( const wavdata_t *wav, int end )
|
||||
{
|
||||
const int8_t *data = (const int8_t *)&wav->buffer[channels * width * ( end - 1 )];
|
||||
|
||||
for( i = 0; i < TRIM_SCAN_MAX && end > 0; i++ )
|
||||
for( size_t i = 0; i < TRIM_SCAN_MAX && end > 0; i++ )
|
||||
{
|
||||
if( !S_ShouldTrimSample8( data, wav->channels ))
|
||||
break;
|
||||
@@ -111,7 +111,7 @@ static int S_TrimEnd( const wavdata_t *wav, int end )
|
||||
{
|
||||
const int16_t *data = (const int16_t *)&wav->buffer[channels * width * ( end - 1 )];
|
||||
|
||||
for( i = 0; i < TRIM_SCAN_MAX && end > 0; i++ )
|
||||
for( size_t i = 0; i < TRIM_SCAN_MAX && end > 0; i++ )
|
||||
{
|
||||
if( !S_ShouldTrimSample16( data, wav->channels ))
|
||||
break;
|
||||
@@ -222,9 +222,6 @@ float VOX_ModifyPitch( channel_t *ch, float pitch )
|
||||
|
||||
static const char *VOX_GetDirectory( char *szpath, const char *psz, int nsize )
|
||||
{
|
||||
const char *p;
|
||||
int len;
|
||||
|
||||
// HACKHACK: some modders send strings like "/fvox/_period four"
|
||||
// which should get parsed as "_period four" said by fvox
|
||||
// it might be incorrect but ignore first slash here for now
|
||||
@@ -232,7 +229,7 @@ static const char *VOX_GetDirectory( char *szpath, const char *psz, int nsize )
|
||||
psz++;
|
||||
|
||||
// search / backwards
|
||||
p = Q_strrchr( psz, '/' );
|
||||
const char *p = Q_strrchr( psz, '/' );
|
||||
|
||||
if( !p )
|
||||
{
|
||||
@@ -240,7 +237,7 @@ static const char *VOX_GetDirectory( char *szpath, const char *psz, int nsize )
|
||||
return psz;
|
||||
}
|
||||
|
||||
len = p - psz + 1;
|
||||
int len = p - psz + 1;
|
||||
|
||||
if( len > nsize )
|
||||
{
|
||||
@@ -256,8 +253,7 @@ static const char *VOX_GetDirectory( char *szpath, const char *psz, int nsize )
|
||||
|
||||
static const char *VOX_LookupString( const char *pszin )
|
||||
{
|
||||
int i = -1, len;
|
||||
const char *c;
|
||||
int i = -1;
|
||||
|
||||
// check if we are an immediate sentence
|
||||
if( *pszin == '#' )
|
||||
@@ -289,9 +285,9 @@ static const char *VOX_LookupString( const char *pszin )
|
||||
if( i == cszrawsentences )
|
||||
return NULL;
|
||||
|
||||
len = Q_strlen( rgpszrawsentence[i] );
|
||||
int len = Q_strlen( rgpszrawsentence[i] );
|
||||
|
||||
c = &rgpszrawsentence[i][len + 1];
|
||||
const char *c = &rgpszrawsentence[i][len + 1];
|
||||
for( ; *c == ' ' || *c == '\t'; c++ );
|
||||
|
||||
return c;
|
||||
@@ -362,12 +358,11 @@ static void VOX_MakeDefaultWordParams( voxword_t *voxword )
|
||||
|
||||
static qboolean VOX_ParseWordParams( char *psz, voxword_t *pvoxword, voxword_t *default_voxword )
|
||||
{
|
||||
int len, i;
|
||||
char sznum[8], *pszsave = psz;
|
||||
|
||||
*pvoxword = *default_voxword;
|
||||
|
||||
len = Q_strlen( psz );
|
||||
int len = Q_strlen( psz );
|
||||
|
||||
if( len == 0 )
|
||||
return false;
|
||||
@@ -388,6 +383,7 @@ static qboolean VOX_ParseWordParams( char *psz, voxword_t *pvoxword, voxword_t *
|
||||
for( ;; )
|
||||
{
|
||||
char command;
|
||||
int i;
|
||||
|
||||
// find command
|
||||
for( ; *psz &&
|
||||
@@ -446,7 +442,7 @@ void VOX_LoadSound( channel_t *ch, const char *pszin )
|
||||
char buffer[512] = { 0 }, szpath[32] = { 0 };
|
||||
char *rgpparseword[CVOXWORDMAX] = { 0 };
|
||||
const char *psz;
|
||||
int i, j;
|
||||
int j;
|
||||
int num_words;
|
||||
voxword_t default_voxword;
|
||||
voxword_t words_buf[CVOXWORDMAX + 1]; // local scratch: parsed words + null terminator
|
||||
@@ -490,7 +486,8 @@ void VOX_LoadSound( channel_t *ch, const char *pszin )
|
||||
VOX_MakeDefaultWordParams( &default_voxword );
|
||||
memset( words_buf, 0, sizeof( words_buf ));
|
||||
|
||||
for( i = 0, j = 0; i < num_words; i++ )
|
||||
j = 0;
|
||||
for( int i = 0; i < num_words; i++ )
|
||||
{
|
||||
char pathbuffer[MAX_SYSPATH];
|
||||
|
||||
@@ -589,9 +586,7 @@ void VOX_Init( void )
|
||||
|
||||
void VOX_Shutdown( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < cszrawsentences; i++ )
|
||||
for( int i = 0; i < cszrawsentences; i++ )
|
||||
Mem_Free( rgpszrawsentence[i] );
|
||||
|
||||
cszrawsentences = 0;
|
||||
@@ -609,9 +604,8 @@ static void Test_VOX_GetDirectory( void )
|
||||
"barney/meow", "meow", "barney/",
|
||||
"/fvox/_period", "_period", "fvox/",
|
||||
};
|
||||
int i;
|
||||
|
||||
for( i = 0; i < sizeof( data ) / sizeof( data[0] ); i += 3 )
|
||||
for( int i = 0; i < sizeof( data ) / sizeof( data[0] ); i += 3 )
|
||||
{
|
||||
string szpath;
|
||||
const char *p = VOX_GetDirectory( szpath, data[i+0], sizeof( szpath ));
|
||||
@@ -623,7 +617,6 @@ static void Test_VOX_GetDirectory( void )
|
||||
|
||||
static void Test_VOX_LookupString( void )
|
||||
{
|
||||
int i;
|
||||
const char *p, *data[] =
|
||||
{
|
||||
"0", "123",
|
||||
@@ -645,7 +638,7 @@ static void Test_VOX_LookupString( void )
|
||||
rgpszrawsentence[cszrawsentences++] = (char*)"SentenceWithSpaces\0 SPAAACE";
|
||||
rgpszrawsentence[cszrawsentences++] = (char*)"SentenceWithTabsAndSpaces\0\t \t\t MEOW";
|
||||
|
||||
for( i = 0; i < sizeof( data ) / sizeof( data[0] ); i += 2 )
|
||||
for( int i = 0; i < sizeof( data ) / sizeof( data[0] ); i += 2 )
|
||||
{
|
||||
p = VOX_LookupString( data[i] );
|
||||
|
||||
|
||||
@@ -381,18 +381,17 @@ Apply automatic gain control to voice samples
|
||||
*/
|
||||
static void Voice_ApplyGainAdjust( int16_t *samples, int count, float scale )
|
||||
{
|
||||
float gain, modifiedMax;
|
||||
int average, blockOffset = 0;
|
||||
int blockOffset = 0;
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
int i, localMax = 0, localSum = 0;
|
||||
int localMax = 0, localSum = 0;
|
||||
int blockSize = Q_min( count - blockOffset, voice.autogain.block_size );
|
||||
|
||||
if( blockSize < 1 )
|
||||
break;
|
||||
|
||||
for( i = 0; i < blockSize; ++i )
|
||||
for( int i = 0; i < blockSize; ++i )
|
||||
{
|
||||
int sample = samples[blockOffset + i];
|
||||
int absSample = abs( sample );
|
||||
@@ -401,14 +400,14 @@ static void Voice_ApplyGainAdjust( int16_t *samples, int count, float scale )
|
||||
localMax = absSample;
|
||||
|
||||
localSum += absSample;
|
||||
gain = voice.autogain.current_gain + i * voice.autogain.gain_multiplier;
|
||||
float gain = voice.autogain.current_gain + i * voice.autogain.gain_multiplier;
|
||||
samples[blockOffset + i] = bound( SHRT_MIN, (int)( sample * gain ), SHRT_MAX );
|
||||
}
|
||||
|
||||
if( blockOffset % voice.autogain.block_size == 0 )
|
||||
{
|
||||
average = localSum / blockSize;
|
||||
modifiedMax = average + ( localMax - average ) * voice_avggain.value;
|
||||
int average = localSum / blockSize;
|
||||
float modifiedMax = average + ( localMax - average ) * voice_avggain.value;
|
||||
|
||||
voice.autogain.current_gain = voice.autogain.next_gain * scale;
|
||||
voice.autogain.next_gain = Q_min((float)SHRT_MAX / ( modifiedMax > 1 ? modifiedMax : 1 ), voice_maxgain.value ) * scale;
|
||||
@@ -435,13 +434,11 @@ static uint Voice_GetOpusCompressedData( byte *out, uint maxsize, uint *frames )
|
||||
|
||||
if( voice.input_file )
|
||||
{
|
||||
uint numbytes;
|
||||
double updateInterval, curtime = Platform_DoubleTime();
|
||||
|
||||
updateInterval = curtime - voice.start_time;
|
||||
double curtime = Platform_DoubleTime();
|
||||
double updateInterval = curtime - voice.start_time;
|
||||
voice.start_time = curtime;
|
||||
|
||||
numbytes = updateInterval * voice.samplerate * voice.width * VOICE_PCM_CHANNELS;
|
||||
uint numbytes = updateInterval * voice.samplerate * voice.width * VOICE_PCM_CHANNELS;
|
||||
numbytes = Q_min( numbytes, voice.input_file->size - voice.input_file_pos );
|
||||
numbytes = Q_min( numbytes, sizeof( voice.input_buffer ) - voice.input_buffer_pos );
|
||||
|
||||
@@ -510,13 +507,11 @@ static uint Voice_GetGSCompressedData( byte *out, uint maxsize, uint *frames )
|
||||
|
||||
if( voice.input_file )
|
||||
{
|
||||
uint numbytes;
|
||||
double updateInterval, curtime = Platform_DoubleTime();
|
||||
|
||||
updateInterval = curtime - voice.start_time;
|
||||
double curtime = Platform_DoubleTime();
|
||||
double updateInterval = curtime - voice.start_time;
|
||||
voice.start_time = curtime;
|
||||
|
||||
numbytes = updateInterval * voice.samplerate * voice.width * VOICE_PCM_CHANNELS;
|
||||
uint numbytes = updateInterval * voice.samplerate * voice.width * VOICE_PCM_CHANNELS;
|
||||
numbytes = Q_min( numbytes, voice.input_file->size - voice.input_file_pos );
|
||||
numbytes = Q_min( numbytes, sizeof( voice.input_buffer ) - voice.input_buffer_pos );
|
||||
|
||||
@@ -597,23 +592,15 @@ Process GoldSrc voice data and return number of samples
|
||||
*/
|
||||
static int Voice_ProcessGSData( int ent, const uint8_t *data, uint32_t size )
|
||||
{
|
||||
uint32_t crc_in_packet;
|
||||
uint32_t crc;
|
||||
size_t offset;
|
||||
size_t samples;
|
||||
uint8_t vpc_type;
|
||||
uint16_t data_len;
|
||||
OpusDecoder *decoder;
|
||||
size_t opus_offset;
|
||||
int decoded;
|
||||
size_t silence_samples;
|
||||
uint16_t frame_size;
|
||||
|
||||
if( !data || ent <= 0 || ent > cl.maxclients )
|
||||
return 0;
|
||||
|
||||
crc_in_packet = LittleLong( *(uint32_t *)( data + size - sizeof( uint32_t )));
|
||||
crc = CRC32_INIT_VALUE;
|
||||
uint32_t crc_in_packet = LittleLong( *(uint32_t *)( data + size - sizeof( uint32_t )));
|
||||
uint32_t crc = CRC32_INIT_VALUE;
|
||||
CRC32_ProcessBuffer( &crc, data, size - sizeof( uint32_t ));
|
||||
crc = CRC32_Final( crc );
|
||||
|
||||
@@ -623,7 +610,7 @@ static int Voice_ProcessGSData( int ent, const uint8_t *data, uint32_t size )
|
||||
return 0;
|
||||
}
|
||||
|
||||
offset = sizeof( uint64_t );
|
||||
size_t offset = sizeof( uint64_t );
|
||||
samples = 0;
|
||||
|
||||
if( offset >= size - sizeof( uint32_t ) || data[offset] != GS_VPC_SETSAMPLERATE )
|
||||
@@ -644,7 +631,9 @@ static int Voice_ProcessGSData( int ent, const uint8_t *data, uint32_t size )
|
||||
|
||||
if( vpc_type == GS_VPC_VDATA_OPUS_PLC )
|
||||
{
|
||||
decoder = voice.gs_decoders[ent - 1];
|
||||
OpusDecoder *decoder = voice.gs_decoders[ent - 1];
|
||||
size_t opus_offset;
|
||||
|
||||
if( !decoder )
|
||||
{
|
||||
Con_Printf( S_WARN "No decoder available for entity %d\n", ent );
|
||||
@@ -653,7 +642,7 @@ static int Voice_ProcessGSData( int ent, const uint8_t *data, uint32_t size )
|
||||
opus_offset = 0;
|
||||
while( opus_offset + sizeof( uint32_t ) <= data_len )
|
||||
{
|
||||
frame_size = LittleShort( *(uint16_t *)( data + offset + opus_offset ));
|
||||
uint16_t frame_size = LittleShort( *(uint16_t *)( data + offset + opus_offset ));
|
||||
opus_offset += sizeof( uint32_t );
|
||||
// if frame size is 0, it means silence
|
||||
if( frame_size == 0 )
|
||||
@@ -677,7 +666,7 @@ static int Voice_ProcessGSData( int ent, const uint8_t *data, uint32_t size )
|
||||
Con_Printf( S_WARN "Opus frame size exceeds data length\n" );
|
||||
return 0;
|
||||
}
|
||||
decoded = opus_decode( decoder, data + offset + opus_offset, frame_size,
|
||||
int decoded = opus_decode( decoder, data + offset + opus_offset, frame_size,
|
||||
( (int16_t *)voice.decompress_buffer ) + samples, voice.frame_size, 0 );
|
||||
if( decoded < 0 )
|
||||
{
|
||||
@@ -690,7 +679,7 @@ static int Voice_ProcessGSData( int ent, const uint8_t *data, uint32_t size )
|
||||
}
|
||||
else if( vpc_type == GS_VPC_VDATA_SILENCE )
|
||||
{
|
||||
silence_samples = data_len / 2;
|
||||
size_t silence_samples = data_len / 2;
|
||||
if( silence_samples > GS_MAX_DECOMPRESSED_SAMPLES )
|
||||
{
|
||||
Con_Printf( S_WARN "Silence data too large\n" );
|
||||
@@ -906,8 +895,6 @@ stop recording and notify user dlls
|
||||
*/
|
||||
void Voice_Disconnect( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
Voice_RecordStop();
|
||||
|
||||
if( voice.local.talking_ack )
|
||||
@@ -916,7 +903,7 @@ void Voice_Disconnect( void )
|
||||
voice.local.talking_ack = false;
|
||||
}
|
||||
|
||||
for( i = 1; i <= MAX_CLIENTS; i++ )
|
||||
for( int i = 1; i <= MAX_CLIENTS; i++ )
|
||||
Voice_Status( i, false );
|
||||
|
||||
VoiceCapture_Shutdown();
|
||||
|
||||
@@ -59,7 +59,6 @@ wavdata_t *FS_LoadSound( const char *filename, const byte *buffer, size_t size )
|
||||
const char *ext = COM_FileExtension( filename );
|
||||
string loadname;
|
||||
qboolean anyformat = true;
|
||||
const loadwavfmt_t *format;
|
||||
|
||||
Sound_Reset(); // clear old sounddata
|
||||
Q_strncpy( loadname, filename, sizeof( loadname ));
|
||||
@@ -68,7 +67,7 @@ wavdata_t *FS_LoadSound( const char *filename, const byte *buffer, size_t size )
|
||||
{
|
||||
// we needs to compare file extension with list of supported formats
|
||||
// and be sure what is real extension, not a filename with dot
|
||||
for( format = sound.loadformats; format && format->ext; format++ )
|
||||
for( const loadwavfmt_t *format = sound.loadformats; format && format->ext; format++ )
|
||||
{
|
||||
if( !Q_stricmp( format->ext, ext ))
|
||||
{
|
||||
@@ -84,18 +83,17 @@ wavdata_t *FS_LoadSound( const char *filename, const byte *buffer, size_t size )
|
||||
goto load_internal;
|
||||
|
||||
// now try all the formats in the selected list
|
||||
for( format = sound.loadformats; format && format->ext; format++)
|
||||
for( const loadwavfmt_t *format = sound.loadformats; format && format->ext; format++)
|
||||
{
|
||||
if( anyformat || !Q_stricmp( ext, format->ext ))
|
||||
{
|
||||
qboolean success = false;
|
||||
fs_offset_t filesize = 0;
|
||||
byte *f;
|
||||
string path;
|
||||
|
||||
Q_snprintf( path, sizeof( path ), DEFAULT_SOUNDPATH "%s.%s", loadname, format->ext );
|
||||
|
||||
f = FS_LoadFile( path, &filesize, false );
|
||||
byte *f = FS_LoadFile( path, &filesize, false );
|
||||
if( f && filesize > 0 )
|
||||
{
|
||||
success = format->loadfunc( path, f, filesize );
|
||||
@@ -119,7 +117,7 @@ wavdata_t *FS_LoadSound( const char *filename, const byte *buffer, size_t size )
|
||||
}
|
||||
|
||||
load_internal:
|
||||
for( format = sound.loadformats; format && format->ext; format++ )
|
||||
for( const loadwavfmt_t *format = sound.loadformats; format && format->ext; format++ )
|
||||
{
|
||||
if( anyformat || !Q_stricmp( ext, format->ext ))
|
||||
{
|
||||
@@ -162,7 +160,6 @@ stream_t *FS_OpenStream( const char *filename )
|
||||
const char *ext = COM_FileExtension( filename );
|
||||
string loadname;
|
||||
qboolean anyformat = true;
|
||||
const streamfmt_t *format;
|
||||
stream_t *stream = NULL;
|
||||
|
||||
Sound_Reset(); // clear old streaminfo
|
||||
@@ -172,7 +169,7 @@ stream_t *FS_OpenStream( const char *filename )
|
||||
{
|
||||
// we needs to compare file extension with list of supported formats
|
||||
// and be sure what is real extension, not a filename with dot
|
||||
for( format = sound.streamformat; format && format->ext; format++ )
|
||||
for( const streamfmt_t *format = sound.streamformat; format && format->ext; format++ )
|
||||
{
|
||||
if( !Q_stricmp( format->ext, ext ))
|
||||
{
|
||||
@@ -184,7 +181,7 @@ stream_t *FS_OpenStream( const char *filename )
|
||||
}
|
||||
|
||||
// now try all the formats in the selected list
|
||||
for( format = sound.streamformat; format && format->ext; format++)
|
||||
for( const streamfmt_t *format = sound.streamformat; format && format->ext; format++)
|
||||
{
|
||||
if( anyformat || !Q_stricmp( ext, format->ext ))
|
||||
{
|
||||
|
||||
@@ -362,9 +362,7 @@ int Stream_ReadMPG( stream_t *stream, int needBytes, void *buffer )
|
||||
{
|
||||
// buffer handling
|
||||
int bytesWritten = 0;
|
||||
void *mpg;
|
||||
|
||||
mpg = stream->ptr;
|
||||
void *mpg = stream->ptr;
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
|
||||
@@ -258,13 +258,12 @@ int Stream_ReadOggOpus( stream_t *stream, int needBytes, void *buffer )
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
int ret;
|
||||
byte *data;
|
||||
int outsize;
|
||||
|
||||
if( !stream->buffsize )
|
||||
{
|
||||
ret = op_read( ctx->of, (opus_int16 *)stream->temp, OUTBUF_SIZE / stream->width, NULL );
|
||||
int ret = op_read( ctx->of, (opus_int16 *)stream->temp, OUTBUF_SIZE / stream->width, NULL );
|
||||
if( ret == 0 )
|
||||
break; // end of file
|
||||
else if( ret < 0 )
|
||||
@@ -298,9 +297,9 @@ int Stream_ReadOggOpus( stream_t *stream, int needBytes, void *buffer )
|
||||
|
||||
int Stream_SetPosOggOpus( stream_t *stream, int newpos )
|
||||
{
|
||||
int ret;
|
||||
opus_streaming_ctx_t *ctx = (opus_streaming_ctx_t *)stream->ptr;
|
||||
if(( ret = op_raw_seek( ctx->of, newpos )) == 0 )
|
||||
int ret = op_raw_seek( ctx->of, newpos );
|
||||
if( ret == 0 )
|
||||
{
|
||||
stream->buffsize = 0; // flush any previous data
|
||||
return true;
|
||||
|
||||
@@ -268,9 +268,9 @@ int Stream_ReadOggVorbis( stream_t *stream, int needBytes, void *buffer )
|
||||
|
||||
int Stream_SetPosOggVorbis( stream_t *stream, int newpos )
|
||||
{
|
||||
int ret;
|
||||
vorbis_streaming_ctx_t *ctx = (vorbis_streaming_ctx_t *)stream->ptr;
|
||||
if(( ret = ov_raw_seek_lap( &ctx->vf, newpos )) == 0 )
|
||||
int ret = ov_raw_seek_lap( &ctx->vf, newpos );
|
||||
if( ret == 0 )
|
||||
{
|
||||
stream->buffsize = 0; // flush any previous data
|
||||
return true;
|
||||
|
||||
@@ -176,7 +176,6 @@ Sound_LoadWAV
|
||||
*/
|
||||
qboolean Sound_LoadWAV( const char *name, const byte *buffer, fs_offset_t filesize )
|
||||
{
|
||||
int samples, fmt;
|
||||
qboolean mpeg_stream = false;
|
||||
|
||||
if( !buffer || filesize <= 0 )
|
||||
@@ -205,7 +204,7 @@ qboolean Sound_LoadWAV( const char *name, const byte *buffer, fs_offset_t filesi
|
||||
}
|
||||
|
||||
iff_dataPtr += 8;
|
||||
fmt = GetLittleShort();
|
||||
int fmt = GetLittleShort();
|
||||
|
||||
if( fmt != 1 )
|
||||
{
|
||||
@@ -276,7 +275,7 @@ qboolean Sound_LoadWAV( const char *name, const byte *buffer, fs_offset_t filesi
|
||||
}
|
||||
|
||||
iff_dataPtr += 4;
|
||||
samples = GetLittleLong() / sound.width;
|
||||
int samples = GetLittleLong() / sound.width;
|
||||
|
||||
if( sound.samples )
|
||||
{
|
||||
@@ -331,12 +330,11 @@ qboolean Sound_LoadWAV( const char *name, const byte *buffer, fs_offset_t filesi
|
||||
// now convert 8-bit sounds to signed
|
||||
if( sound.width == 1 )
|
||||
{
|
||||
int i, j;
|
||||
signed char *pData = (signed char *)sound.wav;
|
||||
|
||||
for( i = 0; i < sound.samples; i++ )
|
||||
for( int i = 0; i < sound.samples; i++ )
|
||||
{
|
||||
for( j = 0; j < sound.channels; j++ )
|
||||
for( int j = 0; j < sound.channels; j++ )
|
||||
{
|
||||
*pData = (byte)((int)((byte)*pData) - 128 );
|
||||
pData++;
|
||||
@@ -382,7 +380,6 @@ stream_t *Stream_OpenWAV( const char *filename )
|
||||
stream_t *stream;
|
||||
int last_chunk = 0;
|
||||
char chunkName[4];
|
||||
int iff_data;
|
||||
file_t *file;
|
||||
short t;
|
||||
|
||||
@@ -418,7 +415,7 @@ stream_t *Stream_OpenWAV( const char *filename )
|
||||
}
|
||||
|
||||
// get "fmt " chunk
|
||||
iff_data = FS_Tell( file );
|
||||
int iff_data = FS_Tell( file );
|
||||
last_chunk = iff_data;
|
||||
if( !StreamFindNextChunk( file, "fmt ", &last_chunk ))
|
||||
{
|
||||
@@ -485,11 +482,9 @@ assume stream is valid
|
||||
*/
|
||||
int Stream_ReadWAV( stream_t *stream, int bytes, void *buffer )
|
||||
{
|
||||
int remaining;
|
||||
|
||||
if( !stream->file ) return 0; // invalid file
|
||||
|
||||
remaining = stream->size - stream->pos;
|
||||
int remaining = stream->size - stream->pos;
|
||||
if( remaining <= 0 ) return 0;
|
||||
if( bytes > remaining ) bytes = remaining;
|
||||
|
||||
|
||||
@@ -219,8 +219,6 @@ client_textmessage_t *CL_TextMessageParse( poolhandle_t mempool, char *pfile, in
|
||||
void Test_RunTitles( void )
|
||||
{
|
||||
poolhandle_t mempool = Mem_AllocPool( __func__ );
|
||||
client_textmessage_t *tmessages;
|
||||
client_textmessage_t *null;
|
||||
int num_titles = 0, num_null_titles = 0;
|
||||
char titles[] =
|
||||
"// this is a comment\n"
|
||||
@@ -258,7 +256,7 @@ void Test_RunTitles( void )
|
||||
char broken_titles[] = "}\n";
|
||||
char broken_titles2[] = "{\n{\n";
|
||||
|
||||
null = CL_TextMessageParse( mempool, broken_titles, Q_strlen( broken_titles ), &num_null_titles );
|
||||
client_textmessage_t *null = CL_TextMessageParse( mempool, broken_titles, Q_strlen( broken_titles ), &num_null_titles );
|
||||
TASSERT_EQi( num_null_titles, 0 );
|
||||
TASSERT_EQp( null, NULL );
|
||||
|
||||
@@ -266,7 +264,7 @@ void Test_RunTitles( void )
|
||||
TASSERT_EQi( num_null_titles, 0 );
|
||||
TASSERT_EQp( null, NULL );
|
||||
|
||||
tmessages = CL_TextMessageParse( mempool, titles, Q_strlen( titles ), &num_titles );
|
||||
client_textmessage_t *tmessages = CL_TextMessageParse( mempool, titles, Q_strlen( titles ), &num_titles );
|
||||
TASSERT_EQi( num_titles, 4 );
|
||||
TASSERT_NEQp( tmessages, NULL );
|
||||
|
||||
|
||||
@@ -73,9 +73,7 @@ static void GAME_EXPORT VGUI_DrawInit( void )
|
||||
|
||||
static void GAME_EXPORT VGUI_DrawShutdown( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 1; i < vgui.texture_id; i++ )
|
||||
for( int i = 1; i < vgui.texture_id; i++ )
|
||||
ref.dllFuncs.GL_FreeTexture( vgui.textures[i].gl_texturenum );
|
||||
|
||||
Mem_FreePool( &vgui.mempool );
|
||||
@@ -136,9 +134,7 @@ static void GAME_EXPORT VGUI_UploadTexture( int id, const char *buffer, int widt
|
||||
// it's a new texture, try to find a copy
|
||||
if( vgui.textures[id].gl_texturenum == 0 )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 1; i < vgui.texture_id; i++ )
|
||||
for( int i = 1; i < vgui.texture_id; i++ )
|
||||
{
|
||||
if( vgui.textures[i].gl_texturenum != 0 && !memcmp( vgui.textures[i].hash, hash, sizeof( hash )))
|
||||
{
|
||||
@@ -210,26 +206,22 @@ static void GAME_EXPORT VGUI_SetupDrawingText( int *pColor )
|
||||
|
||||
static void GAME_EXPORT VGUI_DrawQuad( const vpoint_t *ul, const vpoint_t *lr )
|
||||
{
|
||||
float x, y, w, h;
|
||||
|
||||
if( !ul || !lr )
|
||||
return;
|
||||
|
||||
x = ul->point[0];
|
||||
y = ul->point[1];
|
||||
w = lr->point[0] - x;
|
||||
h = lr->point[1] - y;
|
||||
float x = ul->point[0];
|
||||
float y = ul->point[1];
|
||||
float w = lr->point[0] - x;
|
||||
float h = lr->point[1] - y;
|
||||
|
||||
SPR_AdjustSize( &x, &y, &w, &h );
|
||||
|
||||
if( vgui.enable_texture )
|
||||
{
|
||||
float s1, s2, t1, t2;
|
||||
|
||||
s1 = ul->coord[0];
|
||||
t1 = ul->coord[1];
|
||||
s2 = lr->coord[0];
|
||||
t2 = lr->coord[1];
|
||||
float s1 = ul->coord[0];
|
||||
float t1 = ul->coord[1];
|
||||
float s2 = lr->coord[0];
|
||||
float t2 = lr->coord[1];
|
||||
|
||||
ref.dllFuncs.Color4ub( vgui.color[0], vgui.color[1], vgui.color[2], vgui.color[3] );
|
||||
ref.dllFuncs.R_DrawStretchPic( x, y, w, h, s1, t1, s2, t2, vgui.textures[vgui.bound_texture].gl_texturenum );
|
||||
|
||||
@@ -91,11 +91,11 @@ VID_GetModeString
|
||||
*/
|
||||
const char *VID_GetModeString( int vid_mode )
|
||||
{
|
||||
vidmode_t *vidmode;
|
||||
if( vid_mode < 0 || vid_mode >= R_MaxVideoModes() )
|
||||
return NULL;
|
||||
|
||||
if( !( vidmode = R_GetVideoMode( vid_mode ) ) )
|
||||
vidmode_t *vidmode = R_GetVideoMode( vid_mode );
|
||||
if( !vidmode )
|
||||
return NULL;
|
||||
|
||||
return vidmode->desc;
|
||||
@@ -176,9 +176,7 @@ static void VID_Mode_f( void )
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
vidmode_t *vidmode;
|
||||
|
||||
vidmode = R_GetVideoMode( Q_atoi( Cmd_Argv( 1 )) );
|
||||
vidmode_t *vidmode = R_GetVideoMode( Q_atoi( Cmd_Argv( 1 )) );
|
||||
if( !vidmode )
|
||||
{
|
||||
Con_Printf( S_ERROR "unable to set mode, backend returned null\n" );
|
||||
|
||||
Reference in New Issue
Block a user