17 Jul 2017
This commit is contained in:
parent
45c51675de
commit
596de93657
|
@ -692,6 +692,13 @@ void CL_ParseServerData( sizebuf_t *msg )
|
|||
Q_strncpy( gamefolder, MSG_ReadString( msg ), MAX_STRING );
|
||||
host.features = (uint)MSG_ReadLong( msg );
|
||||
|
||||
if( Con_FixedFont( ))
|
||||
{
|
||||
// seperate the printfs so the server message can have a color
|
||||
Con_Print( "\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\37\n" );
|
||||
Con_Print( va( "%c%s\n\n", 2, clgame.maptitle ));
|
||||
}
|
||||
|
||||
// receive the player hulls
|
||||
for( i = 0; i < MAX_MAP_HULLS * 3; i++ )
|
||||
{
|
||||
|
@ -789,6 +796,7 @@ void CL_ParseServerData( sizebuf_t *msg )
|
|||
|
||||
memset( &clgame.movevars, 0, sizeof( clgame.movevars ));
|
||||
memset( &clgame.oldmovevars, 0, sizeof( clgame.oldmovevars ));
|
||||
memset( &clgame.centerPrint, 0, sizeof( clgame.centerPrint ));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -88,7 +88,7 @@ CL_IsPredicted
|
|||
*/
|
||||
qboolean CL_IsPredicted( void )
|
||||
{
|
||||
if( cl_nopred->value )
|
||||
if( cl_nopred->value || cl.intermission )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
@ -100,6 +100,8 @@ CL_LocalWeapons
|
|||
*/
|
||||
qboolean CL_LocalWeapons( void )
|
||||
{
|
||||
if( cl.intermission )
|
||||
return false;
|
||||
if( cl_lw && cl_lw->value )
|
||||
return true;
|
||||
return false;
|
||||
|
@ -1238,7 +1240,7 @@ void CL_PredictMovement( qboolean repredicting )
|
|||
|
||||
CL_SetUpPlayerPrediction( false, false );
|
||||
|
||||
if( !cl.validsequence || cl.intermission )
|
||||
if( !cl.validsequence )
|
||||
return;
|
||||
|
||||
if(( cls.netchan.outgoing_sequence - cls.netchan.incoming_acknowledged ) >= CL_UPDATE_MASK )
|
||||
|
|
|
@ -480,6 +480,7 @@ qboolean SCR_LoadFixedWidthFont( const char *fontname )
|
|||
cls.creditsFont.hFontTexture = GL_LoadTexture( fontname, NULL, 0, TF_IMAGE, NULL );
|
||||
R_GetTextureParms( &fontWidth, NULL, cls.creditsFont.hFontTexture );
|
||||
cls.creditsFont.charHeight = clgame.scrInfo.iCharHeight = fontWidth / 16;
|
||||
cls.creditsFont.type = FONT_FIXED;
|
||||
cls.creditsFont.valid = true;
|
||||
|
||||
// build fixed rectangles
|
||||
|
@ -519,6 +520,7 @@ qboolean SCR_LoadVariableWidthFont( const char *fontname )
|
|||
{
|
||||
src = (qfont_t *)buffer;
|
||||
cls.creditsFont.charHeight = clgame.scrInfo.iCharHeight = src->rowheight;
|
||||
cls.creditsFont.type = FONT_VARIABLE;
|
||||
|
||||
// build rectangles
|
||||
for( i = 0; i < 256; i++ )
|
||||
|
|
|
@ -294,12 +294,16 @@ typedef struct
|
|||
pfnEventHook func; // user-defined function
|
||||
} cl_user_event_t;
|
||||
|
||||
#define FONT_FIXED 0
|
||||
#define FONT_VARIABLE 1
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int hFontTexture; // handle to texture
|
||||
wrect_t fontRc[256]; // rectangles
|
||||
byte charWidths[256];
|
||||
int charHeight;
|
||||
int type;
|
||||
qboolean valid; // all rectangles are valid
|
||||
} cl_font_t;
|
||||
|
||||
|
@ -732,6 +736,7 @@ int pfnDecalIndexFromName( const char *szDecalName );
|
|||
int pfnIndexFromTrace( struct pmtrace_s *pTrace );
|
||||
void NetAPI_CancelAllRequests( void );
|
||||
int CL_FindModelIndex( const char *m );
|
||||
cl_entity_t *CL_GetLocalPlayer( void );
|
||||
model_t *CL_LoadClientSprite( const char *filename );
|
||||
HSPRITE pfnSPR_Load( const char *szPicName );
|
||||
HSPRITE pfnSPR_LoadExt( const char *szPicName, uint texFlags );
|
||||
|
@ -885,6 +890,7 @@ void CL_RunLightStyles( void );
|
|||
//
|
||||
extern convar_t *con_fontsize;
|
||||
qboolean Con_Visible( void );
|
||||
qboolean Con_FixedFont( void );
|
||||
void Con_VidInit( void );
|
||||
void Con_Shutdown( void );
|
||||
void Con_ToggleConsole_f( void );
|
||||
|
|
|
@ -535,7 +535,7 @@ void *Mod_LoadAllSkins( int numskins, daliasskintype_t *pskintype )
|
|||
{
|
||||
if( pskintype->type == ALIAS_SKIN_SINGLE )
|
||||
{
|
||||
Mod_FloodFillSkin( skin, m_pAliasHeader->skinwidth, m_pAliasHeader->skinheight );
|
||||
// Mod_FloodFillSkin( skin, m_pAliasHeader->skinwidth, m_pAliasHeader->skinheight );
|
||||
|
||||
// save 8 bit texels for the player model to remap
|
||||
m_pAliasHeader->texels[i] = Mem_Alloc( loadmodel->mempool, size );
|
||||
|
@ -574,7 +574,7 @@ void *Mod_LoadAllSkins( int numskins, daliasskintype_t *pskintype )
|
|||
|
||||
for( j = 0; j < groupskins; j++ )
|
||||
{
|
||||
Mod_FloodFillSkin( skin, m_pAliasHeader->skinwidth, m_pAliasHeader->skinheight );
|
||||
// Mod_FloodFillSkin( skin, m_pAliasHeader->skinwidth, m_pAliasHeader->skinheight );
|
||||
if( j == 0 )
|
||||
{
|
||||
m_pAliasHeader->texels[i] = Mem_Alloc( loadmodel->mempool, size );
|
||||
|
|
|
@ -69,6 +69,7 @@ particle_t *cl_active_tracers;
|
|||
particle_t *cl_free_particles;
|
||||
particle_t *cl_particles = NULL; // particle pool
|
||||
static vec3_t cl_avelocities[NUMVERTEXNORMALS];
|
||||
static float cl_lasttimewarn = 0.0f;
|
||||
|
||||
/*
|
||||
================
|
||||
|
@ -221,7 +222,12 @@ particle_t *R_AllocParticle( void (*callback)( particle_t*, float ))
|
|||
|
||||
if( !cl_free_particles )
|
||||
{
|
||||
if( cl_lasttimewarn < host.realtime )
|
||||
{
|
||||
// don't spam about overflow
|
||||
MsgDev( D_ERROR, "Overflow %d particles\n", GI->max_particles );
|
||||
cl_lasttimewarn = host.realtime + 1.0f;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -267,7 +273,12 @@ particle_t *R_AllocTracer( const vec3_t org, const vec3_t vel, float life )
|
|||
|
||||
if( !cl_free_particles )
|
||||
{
|
||||
if( cl_lasttimewarn < host.realtime )
|
||||
{
|
||||
// don't spam about overflow
|
||||
MsgDev( D_ERROR, "Overflow %d tracers\n", GI->max_particles );
|
||||
cl_lasttimewarn = host.realtime + 1.0f;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -1294,7 +1294,7 @@ int S_GetCurrentDynamicSounds( soundlist_t *pout, int size )
|
|||
|
||||
looped = ( channels[i].use_loop && channels[i].sfx->cache->loopStart != -1 );
|
||||
|
||||
if( channels[i].entchannel == CHAN_STATIC && looped )
|
||||
if( channels[i].entchannel == CHAN_STATIC && looped && !FBitSet( host.features, ENGINE_QUAKE_COMPATIBLE ))
|
||||
continue; // never serialize static looped sounds. It will be restoring in game code
|
||||
|
||||
if( channels[i].isSentence && channels[i].name[0] )
|
||||
|
|
|
@ -534,6 +534,18 @@ qboolean Con_Visible( void )
|
|||
return (con.vislines > 0);
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
Con_FixedFont
|
||||
================
|
||||
*/
|
||||
qboolean Con_FixedFont( void )
|
||||
{
|
||||
if( con.curFont && con.curFont->valid && con.curFont->type == FONT_FIXED )
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font )
|
||||
{
|
||||
int i, fontWidth;
|
||||
|
@ -550,6 +562,7 @@ static qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font )
|
|||
if( font->hFontTexture && fontWidth != 0 )
|
||||
{
|
||||
font->charHeight = fontWidth / 16;
|
||||
font->type = FONT_FIXED;
|
||||
|
||||
// build fixed rectangles
|
||||
for( i = 0; i < 256; i++ )
|
||||
|
@ -592,6 +605,7 @@ static qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font
|
|||
{
|
||||
src = (qfont_t *)buffer;
|
||||
font->charHeight = src->rowheight;
|
||||
font->type = FONT_VARIABLE;
|
||||
|
||||
// build rectangles
|
||||
for( i = 0; i < 256; i++ )
|
||||
|
@ -694,7 +708,7 @@ static int Con_DrawGenericChar( int x, int y, int number, rgba_t color )
|
|||
if( !con.curFont || !con.curFont->valid )
|
||||
return 0;
|
||||
|
||||
if( number < 32 ) return 0;
|
||||
// if( number < 32 ) return 0;
|
||||
if( y < -con.curFont->charHeight )
|
||||
return 0;
|
||||
|
||||
|
@ -966,11 +980,19 @@ void Con_Print( const char *txt )
|
|||
static int cr_pending = 0;
|
||||
static char buf[MAX_PRINT_MSG];
|
||||
static int bufpos = 0;
|
||||
int c, mask;
|
||||
|
||||
// client not running
|
||||
if( !con.initialized || !con.buffer || host.type == HOST_DEDICATED )
|
||||
return;
|
||||
|
||||
if( txt[0] == 2 )
|
||||
{
|
||||
mask = 128; // go to colored text
|
||||
txt++;
|
||||
}
|
||||
else mask = 0;
|
||||
|
||||
for( ; *txt; txt++ )
|
||||
{
|
||||
if( cr_pending )
|
||||
|
@ -979,7 +1001,9 @@ void Con_Print( const char *txt )
|
|||
cr_pending = 0;
|
||||
}
|
||||
|
||||
switch( *txt )
|
||||
c = *txt;
|
||||
|
||||
switch( c )
|
||||
{
|
||||
case '\0':
|
||||
break;
|
||||
|
@ -993,7 +1017,7 @@ void Con_Print( const char *txt )
|
|||
bufpos = 0;
|
||||
break;
|
||||
default:
|
||||
buf[bufpos++] = *txt;
|
||||
buf[bufpos++] = c | mask;
|
||||
if(( bufpos >= sizeof( buf ) - 1 ) || bufpos >= ( con.linewidth - 1 ))
|
||||
{
|
||||
Con_AddLine( buf, bufpos );
|
||||
|
|
|
@ -582,6 +582,8 @@ void Sys_Print( const char *pMsg )
|
|||
}
|
||||
else
|
||||
{
|
||||
if( msg[i] == '\1' || msg[i] == '\2' )
|
||||
i++;
|
||||
*b = *c = msg[i];
|
||||
b++, c++;
|
||||
}
|
||||
|
|
|
@ -1928,6 +1928,8 @@ void SV_StartSound( edict_t *ent, int chan, const char *sample, float vol, float
|
|||
msg_dest = MSG_INIT;
|
||||
else if( chan == CHAN_STATIC )
|
||||
msg_dest = MSG_ALL;
|
||||
else if( FBitSet( host.features, ENGINE_QUAKE_COMPATIBLE ))
|
||||
msg_dest = MSG_ALL;
|
||||
else msg_dest = MSG_PAS_R;
|
||||
|
||||
// always sending stop sound command
|
||||
|
@ -2726,8 +2728,9 @@ void pfnWriteString( const char *src )
|
|||
int len = Q_strlen( src ) + 1;
|
||||
int rem = (255 - svgame.msg_realsize);
|
||||
|
||||
if( len >= rem )
|
||||
if( len == 1 || len >= rem )
|
||||
{
|
||||
if( len >= rem )
|
||||
MsgDev( D_ERROR, "pfnWriteString: exceeds %i symbols\n", rem );
|
||||
MSG_WriteChar( &sv.multicast, 0 );
|
||||
svgame.msg_realsize += 1;
|
||||
|
|
|
@ -58,6 +58,8 @@ int SV_ModelIndex( const char *filename )
|
|||
|
||||
if( sv.state != ss_loading )
|
||||
{
|
||||
MsgDev( D_WARN, "late precache of %s\n", name );
|
||||
|
||||
// send the update to everyone
|
||||
MSG_BeginServerCmd( &sv.reliable_datagram, svc_modelindex );
|
||||
MSG_WriteUBitLong( &sv.reliable_datagram, i, MAX_MODEL_BITS );
|
||||
|
@ -103,6 +105,8 @@ int SV_SoundIndex( const char *filename )
|
|||
|
||||
if( sv.state != ss_loading )
|
||||
{
|
||||
MsgDev( D_WARN, "late precache of %s\n", name );
|
||||
|
||||
// send the update to everyone
|
||||
MSG_BeginServerCmd( &sv.reliable_datagram, svc_soundindex );
|
||||
MSG_WriteUBitLong( &sv.reliable_datagram, i, MAX_SOUND_BITS );
|
||||
|
|
|
@ -2035,7 +2035,7 @@ int SV_SaveGameSlot( const char *pSaveName, const char *pSaveComment )
|
|||
return 1;
|
||||
}
|
||||
|
||||
int SV_SaveReadHeader( file_t *pFile, GAME_HEADER *pHeader, int readGlobalState )
|
||||
int SV_SaveReadHeader( file_t *pFile, GAME_HEADER *pHeader )
|
||||
{
|
||||
int i, tag, size, tokenCount, tokenSize;
|
||||
char *pszTokenList;
|
||||
|
@ -2092,12 +2092,10 @@ int SV_SaveReadHeader( file_t *pFile, GAME_HEADER *pHeader, int readGlobalState
|
|||
SaveRestore_Init( pSaveData, (char *)(pszTokenList), size );
|
||||
FS_Read( pFile, SaveRestore_GetBuffer( pSaveData ), size );
|
||||
|
||||
if( readGlobalState )
|
||||
svgame.dllFuncs.pfnResetGlobalState();
|
||||
|
||||
svgame.dllFuncs.pfnSaveReadFields( pSaveData, "GameHeader", pHeader, gGameHeader, ARRAYSIZE( gGameHeader ));
|
||||
|
||||
if( readGlobalState )
|
||||
svgame.dllFuncs.pfnRestoreGlobalState( pSaveData );
|
||||
|
||||
SV_SaveFinish( pSaveData );
|
||||
|
@ -2141,7 +2139,7 @@ qboolean SV_LoadGame( const char *pName )
|
|||
|
||||
if( pFile )
|
||||
{
|
||||
if( SV_SaveReadHeader( pFile, &gameHeader, 1 ))
|
||||
if( SV_SaveReadHeader( pFile, &gameHeader ))
|
||||
{
|
||||
SV_DirectoryExtract( pFile, gameHeader.mapCount );
|
||||
validload = true;
|
||||
|
|
Reference in New Issue