diff options
Diffstat (limited to 'src/cgame')
-rw-r--r-- | src/cgame/cg_consolecmds.c | 2 | ||||
-rw-r--r-- | src/cgame/cg_local.h | 5 | ||||
-rw-r--r-- | src/cgame/cg_players.c | 153 | ||||
-rw-r--r-- | src/cgame/cg_servercmds.c | 7 |
4 files changed, 26 insertions, 141 deletions
diff --git a/src/cgame/cg_consolecmds.c b/src/cgame/cg_consolecmds.c index 43c78675..1122bee3 100644 --- a/src/cgame/cg_consolecmds.c +++ b/src/cgame/cg_consolecmds.c @@ -190,7 +190,6 @@ static consoleCommand_t commands[ ] = { "tell_attacker", CG_TellAttacker_f }, { "tcmd", CG_TargetCommand_f }, { "decodeMP3", CG_DecodeMP3_f }, - { "loaddeferred", CG_LoadDeferredPlayers } }; @@ -290,5 +289,4 @@ void CG_InitConsoleCommands( void ) trap_AddCommand( "deconstruct" ); trap_AddCommand( "menu" ); trap_AddCommand( "ui_menu" ); - trap_AddCommand( "loaddefered" ); // spelled wrong, but not changing for demo } diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h index d3aadb32..f6325261 100644 --- a/src/cgame/cg_local.h +++ b/src/cgame/cg_local.h @@ -383,8 +383,6 @@ typedef struct char redTeam[ MAX_TEAMNAME ]; char blueTeam[ MAX_TEAMNAME ]; - qboolean deferred; - qboolean newAnims; // true if using the new mission pack animations qboolean fixedlegs; // true if legs yaw is always the same as torso yaw qboolean fixedtorso; // true if torso never changes yaw @@ -1262,7 +1260,7 @@ void CG_Corpse( centity_t *cent ); void CG_ResetPlayerEntity( centity_t *cent ); void CG_AddRefEntityWithPowerups( refEntity_t *ent, int powerups, int team ); void CG_NewClientInfo( int clientNum ); -void CG_PrecacheClientInfo( int clientNum, char *model, char *skin, char *headModel, char *headSkin ); +void CG_PrecacheClientInfo( pClass_t class, char *model, char *skin, char *headModel, char *headSkin ); sfxHandle_t CG_CustomSound( int clientNum, const char *soundName ); // @@ -1299,7 +1297,6 @@ void CG_Trace( trace_t *result, const vec3_t start, const vec3_t mins, co void CG_CapTrace( trace_t *result, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int skipNumber, int mask ); void CG_PredictPlayerState( void ); -void CG_LoadDeferredPlayers( void ); // diff --git a/src/cgame/cg_players.c b/src/cgame/cg_players.c index 1cce4788..8ce592b1 100644 --- a/src/cgame/cg_players.c +++ b/src/cgame/cg_players.c @@ -421,7 +421,7 @@ static qboolean CG_RegisterClientModelname( clientInfo_t *ci, const char *modelN { char filename[ MAX_QPATH * 2 ]; - //TA: do this first so the nonsegemented property is set + //TA: do this first so the nonsegmented property is set // load the animations Com_sprintf( filename, sizeof( filename ), "models/players/%s/animation.cfg", modelName ); if( !CG_ParseAnimationFile( filename, ci ) ) @@ -521,8 +521,7 @@ static void CG_ColorFromString( const char *v, vec3_t color ) =================== CG_LoadClientInfo -Load it now, taking the disk hits. -This will usually be deferred to a safe time +Load it now, taking the disk hits =================== */ static void CG_LoadClientInfo( clientInfo_t *ci ) @@ -546,7 +545,7 @@ static void CG_LoadClientInfo( clientInfo_t *ci ) dir = ci->modelName; fallback = DEFAULT_MODEL; - for( i = 0 ; i < MAX_CUSTOM_SOUNDS ; i++ ) + for( i = 0; i < MAX_CUSTOM_SOUNDS; i++ ) { s = cg_customSoundNames[ i ]; @@ -558,19 +557,14 @@ static void CG_LoadClientInfo( clientInfo_t *ci ) ci->sounds[ i ] = trap_S_RegisterSound( va( "sound/player/%s/%s", fallback, s + 1 ), qfalse ); } - ci->deferred = qfalse; - // reset any existing players and bodies, because they might be in bad // frames for this new model - if( clientNum <= MAX_CLIENTS ) + clientNum = ci - cgs.clientinfo; + for( i = 0; i < MAX_GENTITIES; i++ ) { - clientNum = ci - cgs.clientinfo; - for( i = 0; i < MAX_GENTITIES; i++ ) - { - if( cg_entities[ i ].currentState.clientNum == clientNum && - cg_entities[ i ].currentState.eType == ET_PLAYER ) - CG_ResetPlayerEntity( &cg_entities[ i ] ); - } + if( cg_entities[ i ].currentState.clientNum == clientNum && + cg_entities[ i ].currentState.eType == ET_PLAYER ) + CG_ResetPlayerEntity( &cg_entities[ i ] ); } } @@ -593,6 +587,7 @@ static void CG_CopyClientInfoModel( clientInfo_t *from, clientInfo_t *to ) to->headSkin = from->headSkin; to->nonSegModel = from->nonSegModel; to->nonSegSkin = from->nonSegSkin; + to->nonsegmented = from->nonsegmented; to->modelIcon = from->modelIcon; memcpy( to->animations, from->animations, sizeof( to->animations ) ); @@ -605,13 +600,15 @@ static void CG_CopyClientInfoModel( clientInfo_t *from, clientInfo_t *to ) CG_GetCorpseNum ====================== */ -static int CG_GetCorpseNum( int pclass ) +static int CG_GetCorpseNum( pClass_t class ) { int i; clientInfo_t *match; char *modelName; + char *skinName; - modelName = BG_FindModelNameForClass( pclass ); + modelName = BG_FindModelNameForClass( class ); + skinName = BG_FindSkinNameForClass( class ); for( i = PCL_NONE + 1; i < PCL_NUM_CLASSES; i++ ) { @@ -620,11 +617,8 @@ static int CG_GetCorpseNum( int pclass ) if( !match->infoValid ) continue; - if( match->deferred ) - continue; - if( !Q_stricmp( modelName, match->modelName ) - /*&& !Q_stricmp( modelName, match->skinName )*/ ) + && !Q_stricmp( skinName, match->skinName ) ) { // this clientinfo is identical, so use it's handles return i; @@ -646,76 +640,41 @@ static qboolean CG_ScanForExistingClientInfo( clientInfo_t *ci ) int i; clientInfo_t *match; - for( i = 0 ; i < cgs.maxclients ; i++ ) + for( i = PCL_NONE + 1; i < PCL_NUM_CLASSES; i++ ) { - match = &cgs.clientinfo[ i ]; + match = &cgs.corpseinfo[ i ]; + if( !match->infoValid ) continue; - if( match->deferred ) - continue; - if( !Q_stricmp( ci->modelName, match->modelName ) && !Q_stricmp( ci->skinName, match->skinName ) ) { // this clientinfo is identical, so use it's handles - ci->deferred = qfalse; - CG_CopyClientInfoModel( match, ci ); return qtrue; } } - // nothing matches, so defer the load + //TA: shouldn't happen return qfalse; } -/* -====================== -CG_SetDeferredClientInfo - -We aren't going to load it now, so grab some other -client's info to use until we have some spare time. -====================== -*/ -static void CG_SetDeferredClientInfo( clientInfo_t *ci ) -{ - int i; - clientInfo_t *match; - - // find the first valid clientinfo and grab its stuff - for( i = 0; i < cgs.maxclients; i++ ) - { - match = &cgs.clientinfo[ i ]; - if( !match->infoValid ) - continue; - - ci->deferred = qtrue; - CG_CopyClientInfoModel( match, ci ); - return; - } - - // we should never get here... - CG_Printf( "CG_SetDeferredClientInfo: no valid clients!\n" ); - - CG_LoadClientInfo( ci ); -} - /* ====================== CG_PrecacheClientInfo ====================== */ -void CG_PrecacheClientInfo( int clientNum, char *model, char *skin, char *headModel, char *headSkin ) +void CG_PrecacheClientInfo( pClass_t class, char *model, char *skin, char *headModel, char *headSkin ) { clientInfo_t *ci; clientInfo_t newInfo; const char *v; char *slash; - ci = &cgs.corpseinfo[ clientNum ]; + ci = &cgs.corpseinfo[ class ]; // the old value memset( &newInfo, 0, sizeof( newInfo ) ); @@ -740,8 +699,9 @@ void CG_PrecacheClientInfo( int clientNum, char *model, char *skin, char *headMo else Q_strncpyz( newInfo.headSkinName, headSkin, sizeof( newInfo.headSkinName ) ); - newInfo.deferred = qfalse; newInfo.infoValid = qtrue; + + //TA: actually register the models CG_LoadClientInfo( &newInfo ); *ci = newInfo; } @@ -763,13 +723,12 @@ void CG_NewClientInfo( int clientNum ) ci = &cgs.clientinfo[ clientNum ]; configstring = CG_ConfigString( clientNum + CS_PLAYERS ); - if( !configstring[0] ) + if( !configstring[ 0 ] ) { memset( ci, 0, sizeof( *ci ) ); return; // player just left } - // build into a temp buffer so the defer checks can use // the old value memset( &newInfo, 0, sizeof( newInfo ) ); @@ -859,37 +818,7 @@ void CG_NewClientInfo( int clientNum ) // scan for an existing clientinfo that matches this modelname // so we can avoid loading checks if possible if( !CG_ScanForExistingClientInfo( &newInfo ) ) - { - qboolean forceDefer; - - forceDefer = trap_MemoryRemaining( ) < 4000000; - - // if we are defering loads, just have it pick the first valid - //TA: we should only defer models when ABSOLUTELY TOTALLY necessary since models are precached - if( forceDefer ) - { - // keep whatever they had if it won't violate team skins - if ( ci->infoValid && ( !Q_stricmp( newInfo.skinName, ci->skinName ) ) ) - { - CG_CopyClientInfoModel( ci, &newInfo ); - newInfo.deferred = qtrue; - } - else - { - // use whatever is available - CG_SetDeferredClientInfo( &newInfo ); - } - - // if we are low on memory, leave them with this model - if( forceDefer ) - { - CG_Printf( "Memory is low. Using deferred model.\n" ); - newInfo.deferred = qfalse; - } - } - else - CG_LoadClientInfo( &newInfo ); - } + CG_LoadClientInfo( &newInfo ); // replace whatever was there with the new one newInfo.infoValid = qtrue; @@ -899,38 +828,6 @@ void CG_NewClientInfo( int clientNum ) /* -====================== -CG_LoadDeferredPlayers - -Called each frame when a player is dead -and the scoreboard is up -so deferred players can be loaded -====================== -*/ -void CG_LoadDeferredPlayers( void ) -{ - int i; - clientInfo_t *ci; - - // scan for a deferred player to load - for( i = 0, ci = cgs.clientinfo; i < cgs.maxclients; i++, ci++ ) - { - if( ci->infoValid && ci->deferred ) - { - // if we are low on memory, leave it deferred - if( trap_MemoryRemaining( ) < 4000000 ) - { - CG_Printf( "Memory is low. Using deferred model.\n" ); - ci->deferred = qfalse; - continue; - } - - CG_LoadClientInfo( ci ); - } - } -} - -/* ============================================================================= PLAYER ANIMATION @@ -2026,7 +1923,7 @@ void CG_Player( centity_t *cent ) CG_PlayerSprites( cent ); // add the shadow - //TA: but only for humans + //TA: but only for humans FIXME this is dumb if( team == PTE_HUMANS ) shadow = CG_PlayerShadow( cent, &shadowPlane ); diff --git a/src/cgame/cg_servercmds.c b/src/cgame/cg_servercmds.c index 98af076a..e3fee20c 100644 --- a/src/cgame/cg_servercmds.c +++ b/src/cgame/cg_servercmds.c @@ -781,13 +781,6 @@ static void CG_ServerCommand( void ) trap_R_RemapShader( CG_Argv( 1 ), CG_Argv( 2 ), CG_Argv( 3 ) ); } - // loaddeferred can be both a servercmd and a consolecmd - if( !strcmp( cmd, "loaddefered" ) ) - { // FIXME: spelled wrong, but not changing for demo - CG_LoadDeferredPlayers( ); - return; - } - // clientLevelShot is sent before taking a special screenshot for // the menu system during development if( !strcmp( cmd, "clientLevelShot" ) ) |