30 Aug 2012
This commit is contained in:
parent
0fa935ff5d
commit
6b77c7dced
|
@ -555,6 +555,9 @@ CL_DemoCompleted
|
|||
*/
|
||||
void CL_DemoCompleted( void )
|
||||
{
|
||||
if( cls.demonum != -1 )
|
||||
cls.changedemo = true;
|
||||
|
||||
CL_StopPlayback();
|
||||
|
||||
if( !CL_NextDemo() && host.developer <= 2 )
|
||||
|
@ -663,6 +666,10 @@ qboolean CL_DemoReadMessage( byte *buffer, size_t *length )
|
|||
return false;
|
||||
}
|
||||
|
||||
// HACKHACK: changedemo issues
|
||||
if( !cls.netchan.remote_address.type )
|
||||
cls.netchan.remote_address.type = NA_LOOPBACK;
|
||||
|
||||
if( cl.refdef.paused || cls.key_dest != key_game )
|
||||
{
|
||||
demo.starttime += host.frametime;
|
||||
|
@ -790,10 +797,15 @@ void CL_StopPlayback( void )
|
|||
demo.directory.entries = NULL;
|
||||
demo.entry = NULL;
|
||||
|
||||
// let game known about movie state
|
||||
cls.state = ca_disconnected;
|
||||
cls.demoname[0] = '\0'; // clear demoname too
|
||||
menu.globals->demoname[0] = '\0';
|
||||
|
||||
if( !cls.changedemo )
|
||||
{
|
||||
// let game known about movie state
|
||||
cls.state = ca_disconnected;
|
||||
cls.demonum = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1022,6 +1034,17 @@ void CL_PlayDemo_f( void )
|
|||
return;
|
||||
}
|
||||
|
||||
if( cls.demoplayback )
|
||||
{
|
||||
CL_StopPlayback();
|
||||
}
|
||||
|
||||
if( cls.demorecording )
|
||||
{
|
||||
Msg( "Can't playback during demo record.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
Q_strncpy( demoname, Cmd_Argv( 1 ), sizeof( demoname ) - 1 );
|
||||
Q_snprintf( filename, sizeof( filename ), "demos/%s.dem", demoname );
|
||||
|
||||
|
@ -1075,15 +1098,27 @@ void CL_PlayDemo_f( void )
|
|||
FS_Close( cls.demofile );
|
||||
cls.demofile = NULL;
|
||||
cls.demonum = -1; // stop demo loop
|
||||
cls.changedemo = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// NOTE: at this point demo is still valid
|
||||
CL_Disconnect();
|
||||
Host_ShutdownServer();
|
||||
if( cls.changedemo )
|
||||
{
|
||||
S_StopAllSounds();
|
||||
SCR_BeginLoadingPlaque( cl.background );
|
||||
|
||||
Con_Close();
|
||||
UI_SetActiveMenu( false );
|
||||
CL_ClearState ();
|
||||
CL_InitEdicts (); // re-arrange edicts
|
||||
}
|
||||
else
|
||||
{
|
||||
// NOTE: at this point demo is still valid
|
||||
CL_Disconnect();
|
||||
Host_ShutdownServer();
|
||||
|
||||
Con_Close();
|
||||
UI_SetActiveMenu( false );
|
||||
}
|
||||
|
||||
// allocate demo entries
|
||||
demo.directory.entries = Mem_Alloc( cls.mempool, sizeof( demoentry_t ) * demo.directory.numentries );
|
||||
|
@ -1154,7 +1189,7 @@ Return to looping demos
|
|||
void CL_Demos_f( void )
|
||||
{
|
||||
if( cls.demonum == -1 )
|
||||
cls.demonum = 1;
|
||||
cls.demonum = 0;
|
||||
|
||||
CL_Disconnect ();
|
||||
CL_NextDemo ();
|
||||
|
|
|
@ -791,6 +791,7 @@ void CL_ParsePacketEntities( sizebuf_t *msg, qboolean delta )
|
|||
cls.state = ca_active;
|
||||
cl.force_refdef = true;
|
||||
cls.changelevel = false; // changelevel is done
|
||||
cls.changedemo = false; // changedemo is done
|
||||
|
||||
SCR_MakeLevelShot(); // make levelshot if needs
|
||||
Cvar_SetFloat( "scr_loading", 0.0f ); // reset progress bar
|
||||
|
|
|
@ -629,7 +629,7 @@ can be modulated
|
|||
void CL_DrawScreenFade( void )
|
||||
{
|
||||
screenfade_t *sf = &clgame.fade;
|
||||
int iFadeAlpha;
|
||||
int iFadeAlpha, testFlags;
|
||||
|
||||
// keep pushing reset time out indefinitely
|
||||
if( sf->fadeFlags & FFADE_STAYOUT )
|
||||
|
@ -645,8 +645,10 @@ void CL_DrawScreenFade( void )
|
|||
return;
|
||||
}
|
||||
|
||||
testFlags = (sf->fadeFlags & ~FFADE_MODULATE);
|
||||
|
||||
// fading...
|
||||
if( sf->fadeFlags == FFADE_STAYOUT )
|
||||
if( testFlags == FFADE_STAYOUT )
|
||||
{
|
||||
iFadeAlpha = sf->fadealpha;
|
||||
}
|
||||
|
@ -659,7 +661,9 @@ void CL_DrawScreenFade( void )
|
|||
|
||||
pglColor4ub( sf->fader, sf->fadeg, sf->fadeb, iFadeAlpha );
|
||||
|
||||
GL_SetRenderMode( kRenderTransTexture );
|
||||
if( sf->fadeFlags & FFADE_MODULATE )
|
||||
GL_SetRenderMode( kRenderTransAdd );
|
||||
else GL_SetRenderMode( kRenderTransTexture );
|
||||
R_DrawStretchPic( 0, 0, scr_width->integer, scr_height->integer, 0, 0, 1, 1, cls.fillImage );
|
||||
pglColor4ub( 255, 255, 255, 255 );
|
||||
}
|
||||
|
|
|
@ -786,6 +786,7 @@ void CL_Disconnect( void )
|
|||
return;
|
||||
|
||||
cls.connect_time = 0;
|
||||
cls.changedemo = false;
|
||||
CL_Stop_f();
|
||||
|
||||
// send a disconnect message to the server
|
||||
|
|
|
@ -541,7 +541,7 @@ void CL_ParseServerData( sizebuf_t *msg )
|
|||
clgame.load_sequence++; // now all hud sprites are invalid
|
||||
|
||||
// wipe the client_t struct
|
||||
if( !cls.changelevel )
|
||||
if( !cls.changelevel && !cls.changedemo )
|
||||
CL_ClearState ();
|
||||
cls.state = ca_connected;
|
||||
|
||||
|
@ -583,7 +583,8 @@ void CL_ParseServerData( sizebuf_t *msg )
|
|||
menu.globals->maxClients = cl.maxclients;
|
||||
Q_strncpy( menu.globals->maptitle, clgame.maptitle, sizeof( menu.globals->maptitle ));
|
||||
|
||||
if( !cls.changelevel ) CL_InitEdicts (); // re-arrange edicts
|
||||
if( !cls.changelevel && !cls.changedemo )
|
||||
CL_InitEdicts (); // re-arrange edicts
|
||||
|
||||
// get splash name
|
||||
Cvar_Set( "cl_levelshot_name", va( "levelshots/%s", clgame.mapname ));
|
||||
|
|
|
@ -434,6 +434,7 @@ typedef struct
|
|||
connstate_t state;
|
||||
qboolean initialized;
|
||||
qboolean changelevel; // during changelevel
|
||||
qboolean changedemo; // during changedemo
|
||||
|
||||
// screen rendering information
|
||||
float disable_screen; // showing loading plaque between levels
|
||||
|
@ -612,6 +613,7 @@ void CL_Demos_f( void );
|
|||
void CL_DeleteDemo_f( void );
|
||||
void CL_Record_f( void );
|
||||
void CL_Stop_f( void );
|
||||
void CL_FreeDemo( void );
|
||||
|
||||
//
|
||||
// cl_events.c
|
||||
|
|
|
@ -16,6 +16,7 @@ GNU General Public License for more details.
|
|||
#include "common.h"
|
||||
#include "gl_local.h"
|
||||
#include "mathlib.h"
|
||||
#include "client.h"
|
||||
|
||||
/*
|
||||
====================
|
||||
|
@ -28,7 +29,8 @@ float V_CalcFov( float *fov_x, float width, float height )
|
|||
|
||||
if( *fov_x < 1 || *fov_x > 170 )
|
||||
{
|
||||
MsgDev( D_ERROR, "V_CalcFov: bad fov %g!\n", *fov_x );
|
||||
if( !cls.demoplayback )
|
||||
MsgDev( D_ERROR, "V_CalcFov: bad fov %g!\n", *fov_x );
|
||||
*fov_x = 90;
|
||||
}
|
||||
|
||||
|
|
|
@ -1023,14 +1023,14 @@ void CL_RocketTrail( vec3_t start, vec3_t end, int type )
|
|||
switch( type )
|
||||
{
|
||||
case 0: // rocket trail
|
||||
p->ramp = Com_RandomLong( 0, 4 );
|
||||
p->ramp = (rand() & 3);
|
||||
p->color = ramp3[(int)p->ramp];
|
||||
p->type = pt_fire;
|
||||
for( j = 0; j < 3; j++ )
|
||||
p->org[j] = start[j] + ((rand() % 6 ) - 3 );
|
||||
break;
|
||||
case 1: // smoke smoke
|
||||
p->ramp = Com_RandomLong( 2, 6 );
|
||||
p->ramp = (rand() & 3) + 2;
|
||||
p->color = ramp3[(int)p->ramp];
|
||||
p->type = pt_fire;
|
||||
for( j = 0; j < 3; j++ )
|
||||
|
@ -1038,7 +1038,7 @@ void CL_RocketTrail( vec3_t start, vec3_t end, int type )
|
|||
break;
|
||||
case 2: // blood
|
||||
p->type = pt_grav;
|
||||
p->color = Com_RandomLong( 67, 71 );
|
||||
p->color = 67 + (rand() & 3);
|
||||
for( j = 0; j < 3; j++ )
|
||||
p->org[j] = start[j] + ((rand() % 6 ) - 3 );
|
||||
break;
|
||||
|
@ -1066,17 +1066,17 @@ void CL_RocketTrail( vec3_t start, vec3_t end, int type )
|
|||
break;
|
||||
case 4: // slight blood
|
||||
p->type = pt_grav;
|
||||
p->color = Com_RandomLong( 67, 71 );
|
||||
p->color = 67 + (rand() & 3);
|
||||
for( j = 0; j < 3; j++ )
|
||||
p->org[j] = start[j] + Com_RandomFloat( -3.0f, 3.0f );
|
||||
p->org[j] = start[j] + ((rand() % 6) - 3);
|
||||
len -= 3;
|
||||
break;
|
||||
case 6: // voor trail
|
||||
p->color = Com_RandomLong( 152, 156 );
|
||||
p->color = 9 * 16 + 8 + (rand() & 3);
|
||||
p->type = pt_static;
|
||||
p->die += 0.3f;
|
||||
for( j = 0; j < 3; j++ )
|
||||
p->org[j] = start[j] + Com_RandomFloat( -16.0f, 16.0f );
|
||||
p->org[j] = start[j] + ((rand() & 15) - 8);
|
||||
break;
|
||||
}
|
||||
VectorAdd( start, vec, start );
|
||||
|
|
|
@ -1892,7 +1892,7 @@ static void R_StudioDrawPoints( void )
|
|||
|
||||
if( g_nForceFaceFlags & STUDIO_NF_CHROME )
|
||||
{
|
||||
scale = 1.0f + RI.currententity->curstate.renderamt * (1.0f / 255.0f);
|
||||
scale = RI.currententity->curstate.renderamt * (1.0f / 255.0f);
|
||||
|
||||
for( i = 0; i < m_pSubModel->numnorms; i++ )
|
||||
Matrix3x4_VectorRotate( g_bonestransform[pnormbone[i]], pstudionorms[i], g_xformnorms[i] );
|
||||
|
|
|
@ -48,6 +48,6 @@ int Q_buildnum( void )
|
|||
|
||||
return b;
|
||||
#else
|
||||
return 2015;
|
||||
return 2032;
|
||||
#endif
|
||||
}
|
|
@ -1767,7 +1767,7 @@ Con_DrawConsole
|
|||
void Con_DrawConsole( void )
|
||||
{
|
||||
// never draw console whel changelevel in-progress
|
||||
if( cls.changelevel ) return;
|
||||
if( cls.changelevel || cls.changedemo ) return;
|
||||
|
||||
// check for console width changes from a vid mode change
|
||||
Con_CheckResize ();
|
||||
|
|
|
@ -1034,7 +1034,10 @@ void Cvar_List_f( void )
|
|||
|
||||
if( var->flags & CVAR_CHEAT ) Msg( "CHEAT " );
|
||||
else Msg( " " );
|
||||
Msg(" %s \"%s\" %s\n", var->name, var->string, var->description );
|
||||
|
||||
if( var->flags & ( CVAR_EXTDLL|CVAR_CLIENTDLL ))
|
||||
Msg(" %s \"%s\" %s\n", var->name, var->string );
|
||||
else Msg(" %s \"%s\" %s\n", var->name, var->string, var->description );
|
||||
j++;
|
||||
}
|
||||
|
||||
|
|
|
@ -365,7 +365,7 @@ void Host_RestartAmbientSounds( void )
|
|||
if( !soundInfo[i].looping || soundInfo[i].entnum == -1 )
|
||||
continue;
|
||||
|
||||
Msg( "Restarting sound %s...\n", soundInfo[i].name );
|
||||
MsgDev( D_NOTE, "Restarting sound %s...\n", soundInfo[i].name );
|
||||
S_StopSound( soundInfo[i].entnum, soundInfo[i].channel, soundInfo[i].name );
|
||||
SV_StartSound( pfnPEntityOfEntIndex( soundInfo[i].entnum ), CHAN_STATIC, soundInfo[i].name,
|
||||
soundInfo[i].volume, soundInfo[i].attenuation, 0, soundInfo[i].pitch );
|
||||
|
|
|
@ -2721,7 +2721,7 @@ void Mod_LoadWorld( const char *name, uint *checksum, qboolean force )
|
|||
|
||||
if( !Q_stricmp( cm_models[0].name, name ) && !force )
|
||||
{
|
||||
// singleplayer mode: server already loading map
|
||||
// singleplayer mode: server already loaded map
|
||||
com_models[1] = cm_models; // make link to world
|
||||
if( checksum ) *checksum = world.checksum;
|
||||
|
||||
|
@ -2938,9 +2938,9 @@ Mod_Handle
|
|||
*/
|
||||
model_t *Mod_Handle( int handle )
|
||||
{
|
||||
if( handle < 0 || handle > MAX_MODELS )
|
||||
if( handle < 0 || handle >= MAX_MODELS )
|
||||
{
|
||||
Host_Error( "Mod_Handle: bad handle #%i\n", handle );
|
||||
MsgDev( D_NOTE, "Mod_Handle: bad handle #%i\n", handle );
|
||||
return NULL;
|
||||
}
|
||||
return com_models[handle];
|
||||
|
|
|
@ -110,6 +110,7 @@ typedef struct server_s
|
|||
|
||||
qboolean background; // this is background map
|
||||
qboolean loadgame; // client begins should reuse existing entity
|
||||
qboolean changelevel; // set if changelevel in-action (smooth or classic)
|
||||
int viewentity; // applied on client restore. this is temporare place
|
||||
// until client connected
|
||||
|
||||
|
|
|
@ -1041,6 +1041,7 @@ void SV_PutClientInServer( edict_t *ent )
|
|||
}
|
||||
|
||||
// clear any temp states
|
||||
sv.changelevel = false;
|
||||
sv.loadgame = false;
|
||||
sv.paused = false;
|
||||
|
||||
|
|
|
@ -209,6 +209,7 @@ void SV_Map_f( void )
|
|||
|
||||
SCR_BeginLoadingPlaque( false );
|
||||
|
||||
sv.changelevel = false;
|
||||
sv.background = false;
|
||||
sv.loadgame = false; // set right state
|
||||
SV_ClearSaveDir (); // delete all temporary *.hl files
|
||||
|
@ -261,6 +262,7 @@ void SV_MapBackground_f( void )
|
|||
SV_Shutdown( true );
|
||||
NET_Config ( false ); // close network sockets
|
||||
|
||||
sv.changelevel = false;
|
||||
sv.background = true;
|
||||
sv.loadgame = false; // set right state
|
||||
|
||||
|
|
|
@ -351,6 +351,7 @@ void SV_ActivateServer( void )
|
|||
|
||||
sv.state = ss_active;
|
||||
physinfo->modified = true;
|
||||
sv.changelevel = false;
|
||||
sv.paused = false;
|
||||
|
||||
Host_SetServerState( sv.state );
|
||||
|
@ -463,13 +464,14 @@ qboolean SV_SpawnServer( const char *mapname, const char *startspot )
|
|||
{
|
||||
int i, current_skill;
|
||||
qboolean loadgame, paused;
|
||||
qboolean background;
|
||||
qboolean background, changelevel;
|
||||
|
||||
Cmd_ExecuteString( "latch\n", src_command );
|
||||
|
||||
// save state
|
||||
loadgame = sv.loadgame;
|
||||
background = sv.background;
|
||||
changelevel = sv.changelevel;
|
||||
paused = sv.paused;
|
||||
|
||||
if( sv.state == ss_dead )
|
||||
|
@ -499,6 +501,7 @@ qboolean SV_SpawnServer( const char *mapname, const char *startspot )
|
|||
sv.paused = paused;
|
||||
sv.loadgame = loadgame;
|
||||
sv.background = background;
|
||||
sv.changelevel = changelevel;
|
||||
sv.time = 1.0f; // server spawn time it's always 1.0 second
|
||||
svgame.globals->time = sv.time;
|
||||
|
||||
|
@ -710,6 +713,7 @@ qboolean SV_NewGame( const char *mapName, qboolean loadGame )
|
|||
|
||||
sv.loadgame = loadGame;
|
||||
sv.background = false;
|
||||
sv.changelevel = false;
|
||||
|
||||
if( !SV_SpawnServer( mapName, NULL ))
|
||||
return false;
|
||||
|
|
|
@ -745,7 +745,7 @@ void SV_FinalMessage( char *message, qboolean reconnect )
|
|||
{
|
||||
BF_WriteByte( &msg, svc_changing );
|
||||
|
||||
if( sv.loadgame || sv_maxclients->integer > 1 )
|
||||
if( sv.loadgame || sv_maxclients->integer > 1 || sv.changelevel )
|
||||
BF_WriteOneBit( &msg, 1 ); // changelevel
|
||||
else BF_WriteOneBit( &msg, 0 );
|
||||
}
|
||||
|
|
|
@ -1889,6 +1889,8 @@ void SV_ChangeLevel( qboolean loadfromsavedgame, const char *mapname, const char
|
|||
Q_strncpy( level, mapname, MAX_STRING );
|
||||
Q_strncpy( oldlevel, sv.name, MAX_STRING );
|
||||
sv.background = false;
|
||||
sv.changelevel = true; // NOTE: this is used to indicate changelevel for classic Quake changelevel
|
||||
// because demos wan't properly update clock on a new level while recording
|
||||
|
||||
if( loadfromsavedgame )
|
||||
{
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1034,7 +1034,7 @@ void UI_UpdateMenu( float flTime )
|
|||
|
||||
if( first )
|
||||
{
|
||||
BACKGROUND_TRACK( "gamestartup.mp3", NULL );
|
||||
BACKGROUND_TRACK( "gamestartup.mp3", "gamestartup.mp3" );
|
||||
first = FALSE;
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue