/* ================== BeginIntermission ================== */ void BeginIntermission() { if ( theLevel.intermissiontime_ ) return; // already active // if in tournement mode, change the wins / losses if ( g_gametype.integer == GT_TOURNAMENT ) AdjustTournamentScores(); theLevel.intermissiontime_ = theLevel.time_; FindIntermissionPoint(); // if single player game if ( g_gametype.integer == GT_SINGLE_PLAYER ) UpdateTournamentInfo(); // move all clients to the intermission point for( int i=1 ; i<= theLevel.maxclients_ ; i++ ) { GameEntity* client = theLevel.getEntity(i); if( !client || !client->inuse_ ) continue; // respawn if dead if( client->health_ <= 0 ) respawn(client); MoveClientToIntermission( client ); } // send the current scoring to all clients SendScoreboardMessageToAllClients(); }
/* =========== SelectSpectatorSpawnPoint ============ */ gentity_t *SelectSpectatorSpawnPoint( vec3_t origin, vec3_t angles ) { FindIntermissionPoint(); VectorCopy( level.intermission_origin, origin ); VectorCopy( level.intermission_angle, angles ); return NULL; }
/* ================== BeginIntermission ================== */ void BeginIntermission( void ) { int i; gentity_t *client; if ( level.intermissiontime ) { return; // already active } // if in tournement mode, change the wins / losses if ( g_gametype.integer == GT_TOURNAMENT ) { AdjustTournamentScores(); } level.intermissiontime = level.time; FindIntermissionPoint(); #ifdef MISSIONPACK if (g_singlePlayer.integer) { trap_Cvar_Set("ui_singlePlayerActive", "0"); UpdateTournamentInfo(); } #else // if single player game if ( g_gametype.integer == GT_SINGLE_PLAYER ) { UpdateTournamentInfo(); SpawnModelsOnVictoryPads(); } #endif // move all clients to the intermission point for (i=0 ; i< level.maxclients ; i++) { client = g_entities + i; if (!client->inuse) continue; // respawn if dead if (client->health <= 0) { respawn(client); } MoveClientToIntermission( client ); } // send the current scoring to all clients SendScoreboardMessageToAllClients(); }
/* ======================== MoveClientToIntermission When the intermission starts, this will be called for all players. If a new client connects, this will be called after the spawn function. ======================== */ void MoveClientToIntermission( gentity_t *ent ) { // take out of follow mode if needed if ( ent->client->sess.spectatorState == SPECTATOR_FOLLOW ) { StopFollowing( ent ); } FindIntermissionPoint(); // move to the spot VectorCopy( level.intermission_origin, ent->s.origin ); VectorCopy( level.intermission_origin, ent->client->ps.origin ); VectorCopy (level.intermission_angle, ent->client->ps.viewangles); ent->client->ps.pm_type = PM_INTERMISSION; // clean up powerup info memset( ent->client->ps.powerups, 0, sizeof(ent->client->ps.powerups) ); ent->client->ps.eFlags = 0; ent->s.eFlags = 0; ent->s.eType = ET_GENERAL; ent->s.modelindex = 0; ent->s.loopSound = 0; ent->s.event = 0; ent->r.contents = 0; }