/* * CG_RegisterClients */ static void CG_RegisterClients( void ) { int i; char *name; CG_LoadingString( "clients" ); for( i = 0; i < gs.maxclients; i++ ) { name = cgs.configStrings[CS_PLAYERINFOS+i]; if( !name[0] ) continue; CG_LoadingItemName( name ); CG_LoadClientInfo( &cgs.clientInfo[i], name, i ); } }
/* * CG_ConfigString */ void CG_ConfigString( int i, const char *s ) { size_t len; // wsw : jal : warn if configstring overflow len = strlen( s ); if( len >= MAX_CONFIGSTRING_CHARS ) CG_Printf( "%sWARNING:%s Configstring %i overflowed\n", S_COLOR_YELLOW, S_COLOR_WHITE, i ); if( i < 0 || i >= MAX_CONFIGSTRINGS ) CG_Error( "configstring > MAX_CONFIGSTRINGS" ); Q_strncpyz( cgs.configStrings[i], s, sizeof( cgs.configStrings[i] ) ); // do something apropriate if( i == CS_MAPNAME ) { CG_RegisterLevelMinimap(); } else if( i == CS_TVSERVER ) { CG_UpdateTVServerString(); } else if( i == CS_GAMETYPETITLE ) { } else if( i == CS_GAMETYPENAME ) { GS_SetGametypeName( cgs.configStrings[CS_GAMETYPENAME] ); } else if( i == CS_AUTORECORDSTATE ) { CG_SC_AutoRecordAction( cgs.configStrings[i] ); } else if( i >= CS_MODELS && i < CS_MODELS+MAX_MODELS ) { if( cgs.configStrings[i][0] == '$' ) // indexed pmodel cgs.pModelsIndex[i-CS_MODELS] = CG_RegisterPlayerModel( cgs.configStrings[i]+1 ); else cgs.modelDraw[i-CS_MODELS] = CG_RegisterModel( cgs.configStrings[i] ); } else if( i >= CS_SOUNDS && i < CS_SOUNDS+MAX_SOUNDS ) { if( cgs.configStrings[i][0] != '*' ) cgs.soundPrecache[i-CS_SOUNDS] = trap_S_RegisterSound( cgs.configStrings[i] ); } else if( i >= CS_IMAGES && i < CS_IMAGES+MAX_IMAGES ) { cgs.imagePrecache[i-CS_IMAGES] = trap_R_RegisterPic( cgs.configStrings[i] ); } else if( i >= CS_SKINFILES && i < CS_SKINFILES+MAX_SKINFILES ) { cgs.skinPrecache[i-CS_SKINFILES] = trap_R_RegisterSkinFile( cgs.configStrings[i] ); } else if( i >= CS_LIGHTS && i < CS_LIGHTS+MAX_LIGHTSTYLES ) { CG_SetLightStyle( i - CS_LIGHTS ); } else if( i >= CS_ITEMS && i < CS_ITEMS+MAX_ITEMS ) { CG_ValidateItemDef( i - CS_ITEMS, cgs.configStrings[i] ); } else if( i >= CS_PLAYERINFOS && i < CS_PLAYERINFOS+MAX_CLIENTS ) { CG_LoadClientInfo( &cgs.clientInfo[i-CS_PLAYERINFOS], cgs.configStrings[i], i-CS_PLAYERINFOS ); } else if( i >= CS_GAMECOMMANDS && i < CS_GAMECOMMANDS+MAX_GAMECOMMANDS ) { if( !cgs.demoPlaying ) { trap_Cmd_AddCommand( cgs.configStrings[i], NULL ); if( !Q_stricmp( cgs.configStrings[i], "gametypemenu" ) ) { cgs.hasGametypeMenu = qtrue; } } } else if( i >= CS_WEAPONDEFS && i < CS_WEAPONDEFS + MAX_WEAPONDEFS ) { CG_OverrideWeapondef( i - CS_WEAPONDEFS, cgs.configStrings[i] ); } }
/* =============== CG_MapRestart The server has issued a map_restart, so the next snapshot is completely new and should not be interpolated to. A tournement restart will clear everything, but doesn't require a reload of all the media =============== */ static void CG_MapRestart( void ) { // char buff[64]; int i; if ( cg_showmiss.integer ) { CG_Printf( "CG_MapRestart\n" ); } memset( &cg.lastWeapSelInBank[0], 0, MAX_WEAP_BANKS * sizeof( int ) ); // clear weapon bank selections cg.centerPrintTime = 0; // reset centerprint counter so previous messages don't re-appear cg.itemPickupTime = 0; // reset item pickup counter so previous messages don't re-appear cg.cursorHintFade = 0; // reset cursor hint timer cg.yougotmailTime = 0; // reset // (SA) clear zoom (so no warpies) cg.zoomedBinoc = qfalse; cg.zoomedBinoc = cg.zoomedScope = qfalse; cg.zoomTime = 0; cg.zoomval = 0; // reset fog to world fog (if present) // trap_R_SetFog(FOG_CMD_SWITCHFOG, FOG_MAP,20,0,0,0,0); // trap_Cvar_VariableStringBuffer("r_mapFogColor", buff, sizeof(buff)); // trap_SendClientCommand(va("fogswitch %s", buff) ); CG_InitLocalEntities(); CG_InitMarkPolys(); //Rafael particles CG_ClearParticles(); // done. for ( i = 1; i < MAX_PARTICLES_AREAS; i++ ) { { int rval; rval = CG_NewParticleArea( CS_PARTICLES + i ); if ( !rval ) { break; } } } // Ridah, trails CG_ClearTrails(); // done. // Ridah CG_ClearFlameChunks(); CG_SoundInit(); // done. // RF, init ZombieFX trap_RB_ZombieFXAddNewHit( -1, NULL, NULL ); // make sure the "3 frags left" warnings play again cg.fraglimitWarnings = 0; cg.timelimitWarnings = 0; cg.intermissionStarted = qfalse; cgs.voteTime = 0; cg.lightstylesInited = qfalse; cg.mapRestart = qtrue; CG_StartMusic(); trap_S_ClearLoopingSounds( qtrue ); // we really should clear more parts of cg here and stop sounds cg.v_dmg_time = 0; cg.v_noFireTime = 0; cg.v_fireTime = 0; // RF, clear out animScriptData so we recalc everything and get new pointers from server memset( cgs.animScriptData.modelInfo, 0, sizeof( cgs.animScriptData.modelInfo ) ); for ( i = 0; i < MAX_CLIENTS; i++ ) { if ( cgs.clientinfo[i].infoValid ) { CG_LoadClientInfo( &cgs.clientinfo[i] ); // re-register the valid clients } } // always clear the weapon selection cg.weaponSelect = WP_NONE; // clear out the player weapon info memset( &cg_entities[0].pe.weap, 0, sizeof( cg_entities[0].pe.weap ) ); // check for server set weapons we might not know about // (FIXME: this is a hack for the time being since a scripted "selectweapon" does // not hit the first snap, the server weapon set in cg_playerstate.c line 219 doesn't // do the trick) if ( !cg.weaponSelect ) { if ( cg_loadWeaponSelect.integer > 0 ) { cg.weaponSelect = cg_loadWeaponSelect.integer; cg.weaponSelectTime = cg.time; trap_Cvar_Set( "cg_loadWeaponSelect", "0" ); // turn it off } } // clear out rumble effects memset( cg.cameraShake, 0, sizeof( cg.cameraShake ) ); memset( cg.cameraShakeAngles, 0, sizeof( cg.cameraShakeAngles ) ); cg.rumbleScale = 0; // play the "fight" sound if this is a restart without warmup // if ( cg.warmup == 0 /* && cgs.gametype == GT_TOURNAMENT */) { // trap_S_StartLocalSound( cgs.media.countFightSound, CHAN_ANNOUNCER ); // CG_CenterPrint( "FIGHT!", 120, GIANTCHAR_WIDTH*2 ); // } #ifdef MISSIONPACK if ( cg_singlePlayerActive.integer ) { trap_Cvar_Set( "ui_matchStartTime", va( "%i", cg.time ) ); if ( cg_recordSPDemo.integer && cg_recordSPDemoName.string && *cg_recordSPDemoName.string ) { trap_SendConsoleCommand( va( "set g_synchronousclients 1 ; record %s \n", cg_recordSPDemoName.string ) ); } } #endif trap_Cvar_Set( "cg_thirdPerson", "0" ); }