30 Aug 2012

This commit is contained in:
g-cont 2012-08-30 00:00:00 +04:00 committed by Alibek Omarov
parent 0fa935ff5d
commit 6b77c7dced
27 changed files with 91 additions and 32 deletions

View File

@ -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 ();

View File

@ -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

View File

@ -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 );
}

View File

@ -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

View File

@ -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 ));

View File

@ -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

View File

@ -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;
}

View File

@ -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 );

View File

@ -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] );

View File

@ -48,6 +48,6 @@ int Q_buildnum( void )
return b;
#else
return 2015;
return 2032;
#endif
}

View File

@ -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 ();

View File

@ -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++;
}

View File

@ -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 );

View File

@ -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];

View File

@ -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

View File

@ -1041,6 +1041,7 @@ void SV_PutClientInServer( edict_t *ent )
}
// clear any temp states
sv.changelevel = false;
sv.loadgame = false;
sv.paused = false;

View File

@ -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

View File

@ -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;

View File

@ -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 );
}

View File

@ -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.

View File

@ -1034,7 +1034,7 @@ void UI_UpdateMenu( float flTime )
if( first )
{
BACKGROUND_TRACK( "gamestartup.mp3", NULL );
BACKGROUND_TRACK( "gamestartup.mp3", "gamestartup.mp3" );
first = FALSE;
}
}

BIN
unused/Feb2012-06.rar Normal file

Binary file not shown.

BIN
unused/Feb2012-07.rar Normal file

Binary file not shown.

BIN
unused/Feb2012-08.rar Normal file

Binary file not shown.