// current client
client_t *host_client;
-jmp_buf host_abortserver;
+jmp_buf host_abortframe;
// pretend frames take this amount of time (in seconds), 0 = realtime
cvar_t host_framerate = {0, "host_framerate","0"};
*/
void Host_AbortCurrentFrame(void)
{
- longjmp (host_abortserver, 1);
+ longjmp (host_abortframe, 1);
}
/*
static double time3 = 0;
int pass1, pass2, pass3;
- if (setjmp(host_abortserver))
+ if (setjmp(host_abortframe))
return; // something bad happened, or the server disconnected
// decide the simulation time
VID_Start();
CDAudio_Startup();
CL_InitTEnts(); // We must wait after sound startup to load tent sounds
- MR_Init();
}
}
Con_DPrint("========Initialized=========\n");
Host_StartVideo();
+
+ // FIXME: put this into some neat design, but the menu should be allowed to crash
+ // without crashing the whole game, so this should just be a short-time solution
+
+ // here comes the not so critical stuff
+ if (setjmp(host_abortframe)) {
+ return;
+ }
+
+ if (vid_opened && cls.state != ca_dedicated)
+ {
+ MR_Init();
+ }
}
static void _ServerList_ViewList_Helper_InsertBefore( int index, serverlist_entry_t *entry )
{
int i;
- if( serverlist_viewcount == SERVERLIST_VIEWLISTSIZE )
- return;
+ if( serverlist_viewcount < SERVERLIST_VIEWLISTSIZE ) {
+ i = serverlist_viewcount++;
+ } else {
+ i = SERVERLIST_VIEWLISTSIZE - 1;
+ }
- for( i = serverlist_viewcount ; i > index ; i-- )
+ for( ; i > index ; i-- )
serverlist_viewlist[ i ] = serverlist_viewlist[ i - 1 ];
serverlist_viewlist[index] = entry;
- serverlist_viewcount++;
}
// we suppose serverlist_viewcount to be valid, ie > 0
{
int start, end, mid;
- if( serverlist_viewcount == SERVERLIST_VIEWLISTSIZE )
- return;
-
+ // FIXME: change this to be more readable (...)
// now check whether it passes through the masks
for( start = 0 ; serverlist_andmasks[start].active && start < SERVERLIST_ANDMASKCOUNT ; start++ )
if( !_ServerList_Entry_Mask( &serverlist_andmasks[start], &entry->info ) )
if( !serverlist_viewcount ) {
_ServerList_ViewList_Helper_InsertBefore( 0, entry );
return;
- }
+ }
// ok, insert it, we just need to find out where exactly:
// two special cases
int i;
for( i = 0 ; i < 1024 ; i++ ) {
memset( &serverlist_cache[serverlist_cachecount], 0, sizeof( serverlist_entry_t ) );
- serverlist_cache[serverlist_cachecount].info.ping = rand() % 450 + 250;
+ serverlist_cache[serverlist_cachecount].info.ping = 1000 + 1024 - i;
dpsnprintf( serverlist_cache[serverlist_cachecount].info.name, 128, "Black's ServerList Test %i", i );
serverlist_cache[serverlist_cachecount].finished = true;
sprintf( serverlist_cache[serverlist_cachecount].line1, "%i %s", serverlist_cache[serverlist_cachecount].info.ping, serverlist_cache[serverlist_cachecount].info.name );
serverlist_cachecount = 0;
serverlist_viewcount = 0;
serverlist_consoleoutput = false;
- NetConn_QueryMasters();
-
+
//_ServerList_Test();
+
+ NetConn_QueryMasters();
}
// rest