summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2011-04-24 15:06:49 +0400
committerAndrey Nazarov <skuller@skuller.net>2011-04-24 15:06:49 +0400
commitd4e8f8f2921d43d473d0ae922c255c80975ccf7c (patch)
treecaabe7810236651114158a869d27e50a285eaf35 /src
parent25146aa19b6cc86081a7ba1b8fe81edd79894d70 (diff)
Move some code into cl_precache.c
Rename CL_RegisterModels into CL_RegisterBspModels.
Diffstat (limited to 'src')
-rw-r--r--src/cl_download.c4
-rw-r--r--src/cl_local.h36
-rw-r--r--src/cl_main.c101
-rw-r--r--src/cl_parse.c162
-rw-r--r--src/cl_precache.c404
-rw-r--r--src/cl_view.c106
6 files changed, 428 insertions, 385 deletions
diff --git a/src/cl_download.c b/src/cl_download.c
index 315ee05..1763fd2 100644
--- a/src/cl_download.c
+++ b/src/cl_download.c
@@ -534,7 +534,7 @@ void CL_RequestNextDownload( void ) {
if( allow_download->integer <= 0 || NET_IsLocalAddress( &cls.serverAddress ) ) {
if( precache_check <= PRECACHE_MAP ) {
- CL_RegisterModels();
+ CL_RegisterBspModels();
}
CL_Begin();
@@ -662,7 +662,7 @@ void CL_RequestNextDownload( void ) {
}
// load the map file before checking textures
- CL_RegisterModels();
+ CL_RegisterBspModels();
if( allow_download_textures->integer ) {
for( i = 0; i < cl.bsp->numtexinfo; i++ ) {
diff --git a/src/cl_local.h b/src/cl_local.h
index 2e2d6da..b6088ce 100644
--- a/src/cl_local.h
+++ b/src/cl_local.h
@@ -95,15 +95,6 @@ typedef struct {
int firstEntity;
} server_frame_t;
-typedef enum {
- LOAD_MAP,
- LOAD_MODELS,
- LOAD_IMAGES,
- LOAD_CLIENTS,
- LOAD_SOUNDS,
- LOAD_FINISH
-} load_state_t;
-
// locally calculated frame flags for debug display
#define FF_SERVERDROP (1<<4)
#define FF_BADFRAME (1<<5)
@@ -479,20 +470,39 @@ extern cvar_t *info_uf;
void CL_Init (void);
void CL_Quit_f (void);
void CL_Disconnect( error_type_t type );
-void CL_RegisterModels( void );
void CL_Begin( void );
void CL_CheckForResend( void );
void CL_ClearState (void);
void CL_RestartFilesystem( qboolean total );
void CL_RestartRefresh( qboolean total );
void CL_ClientCommand( const char *string );
-void CL_LoadState( load_state_t state );
void CL_SendRcon( const netadr_t *adr, const char *pass, const char *cmd );
const char *CL_Server_g( const char *partial, int argnum, int state );
void CL_UpdateFrameTimes( void );
qboolean CL_CheckForIgnore( const char *s );
//
+// cl_precache
+//
+
+typedef enum {
+ LOAD_MAP,
+ LOAD_MODELS,
+ LOAD_IMAGES,
+ LOAD_CLIENTS,
+ LOAD_SOUNDS,
+ LOAD_FINISH
+} load_state_t;
+
+void CL_ParsePlayerSkin( char *name, char *model, char *skin, const char *s );
+void CL_LoadClientinfo( clientinfo_t *ci, const char *s );
+void CL_LoadState( load_state_t state );
+void CL_RegisterSounds( void );
+void CL_RegisterBspModels( void );
+void CL_RegisterVWepModels( void );
+void CL_PrepRefresh( void );
+
+//
// cl_download
//
qerror_t CL_QueueDownload( const char *path, dltype_t type );
@@ -545,8 +555,6 @@ extern tent_params_t te;
extern mz_params_t mz;
void CL_ParseServerMessage (void);
-void CL_ParsePlayerSkin( char *name, char *model, char *skin, const char *s );
-void CL_LoadClientinfo( clientinfo_t *ci, const char *s );
//
// cl_ents.c
@@ -578,8 +586,6 @@ void V_AddLight (vec3_t org, float intensity, float r, float g, float b);
#if USE_LIGHTSTYLES
void V_AddLightStyle (int style, vec4_t value);
#endif
-void CL_RegisterVWepModels( void );
-void CL_PrepRefresh (void);
void CL_UpdateBlendSetting( void );
//
diff --git a/src/cl_main.c b/src/cl_main.c
index 1e64b2a..7a334b8 100644
--- a/src/cl_main.c
+++ b/src/cl_main.c
@@ -1632,26 +1632,6 @@ static void CL_Userinfo_f ( void ) {
}
/*
-======================
-CL_RegisterSounds
-======================
-*/
-static void CL_RegisterSounds( void ) {
- int i;
- char *s;
-
- S_BeginRegistration ();
- CL_RegisterTEntSounds ();
- for ( i = 1; i < MAX_SOUNDS; i++ ) {
- s = cl.configstrings[ CS_SOUNDS + i ];
- if ( !s[ 0 ] )
- break;
- cl.sound_precache[ i ] = S_RegisterSound( s );
- }
- S_EndRegistration ();
-}
-
-/*
=================
CL_RestartSound_f
@@ -1692,85 +1672,6 @@ static void CL_PlaySound_f( void ) {
}
}
-/*
-=================
-CL_RegisterModels
-
-Registers main BSP file and collision models
-=================
-*/
-void CL_RegisterModels( void ) {
- qerror_t ret;
- char *name;
- int i;
-
- ret = BSP_Load( cl.configstrings[ CS_MODELS + 1 ], &cl.bsp );
- if( cl.bsp == NULL ) {
- Com_Error( ERR_DROP, "Couldn't load %s: %s",
- cl.configstrings[ CS_MODELS + 1 ], Q_ErrorString( ret ) );
- }
-
-#if USE_MAPCHECKSUM
- if( cl.bsp->checksum != atoi( cl.configstrings[ CS_MAPCHECKSUM ] ) ) {
- if( cls.demo.playback ) {
- Com_WPrintf( "Local map version differs from demo: %i != %s\n",
- cl.bsp->checksum, cl.configstrings[ CS_MAPCHECKSUM ] );
- } else {
- Com_Error( ERR_DROP, "Local map version differs from server: %i != %s",
- cl.bsp->checksum, cl.configstrings[ CS_MAPCHECKSUM ] );
- }
- }
-#endif
-
- for ( i = 1; i < MAX_MODELS; i++ ) {
- name = cl.configstrings[CS_MODELS+i];
- if( !name[0] ) {
- break;
- }
- if( name[0] == '*' )
- cl.model_clip[i] = BSP_InlineModel( cl.bsp, name );
- else
- cl.model_clip[i] = NULL;
- }
-}
-
-void CL_LoadState( load_state_t state ) {
- extern void VID_PumpEvents( void );
- const char *s;
-
- switch( state ) {
- case LOAD_MAP:
- s = cl.configstrings[ CS_MODELS + 1 ];
- break;
- case LOAD_MODELS:
- s = "models";
- break;
- case LOAD_IMAGES:
- s = "images";
- break;
- case LOAD_CLIENTS:
- s = "clients";
- break;
- case LOAD_SOUNDS:
- s = "sounds";
- break;
- case LOAD_FINISH:
- s = NULL;
- break;
- default:
- return;
- }
-
- if( s ) {
- Con_Printf( "Loading %s...\r", s );
- } else {
- Con_Print( "\r" );
- }
-
- SCR_UpdateScreen();
- VID_PumpEvents();
-}
-
static int precache_spawncount;
/*
@@ -1824,7 +1725,7 @@ static void CL_Precache_f( void ) {
// demos use different precache sequence
if( cls.demo.playback ) {
- CL_RegisterModels();
+ CL_RegisterBspModels();
CL_PrepRefresh();
CL_LoadState( LOAD_SOUNDS );
CL_RegisterSounds();
diff --git a/src/cl_parse.c b/src/cl_parse.c
index b17ec82..6057b75 100644
--- a/src/cl_parse.c
+++ b/src/cl_parse.c
@@ -708,168 +708,6 @@ static void CL_ParseServerData( void ) {
}
/*
-================
-CL_ParsePlayerSkin
-
-Breaks up playerskin into name (optional), model and skin components.
-If model or skin are found to be invalid, replaces them with sane defaults.
-================
-*/
-void CL_ParsePlayerSkin( char *name, char *model, char *skin, const char *s ) {
- size_t len;
- char *t;
-
- // configstring parsing guarantees that playerskins can never
- // overflow, but still check the length to be entirely fool-proof
- len = strlen( s );
- if( len >= MAX_QPATH ) {
- Com_Error( ERR_DROP, "%s: oversize playerskin", __func__ );
- }
-
- // isolate the player's name
- t = strchr( s, '\\' );
- if( t ) {
- len = t - s;
- strcpy( model, t + 1 );
- } else {
- len = 0;
- strcpy( model, s );
- }
-
- // copy the player's name
- if( name ) {
- memcpy( name, s, len );
- name[len] = 0;
- }
-
- // isolate the model name
- t = strchr( model, '/' );
- if( !t )
- t = strchr( model, '\\' );
- if( !t )
- t = model;
- if( t == model )
- goto default_model;
- *t++ = 0;
-
- // apply restrictions on skins
- if( cl_noskins->integer == 2 || !COM_IsPath( t ) )
- goto default_skin;
-
- if( cl_noskins->integer || !COM_IsPath( model ) )
- goto default_model;
-
- // isolate the skin name
- strcpy( skin, t );
- return;
-
-default_skin:
- if( !Q_stricmp( model, "female" ) ) {
- strcpy( model, "female" );
- strcpy( skin, "athena" );
- } else {
-default_model:
- strcpy( model, "male" );
- strcpy( skin, "grunt" );
- }
-}
-
-/*
-================
-CL_LoadClientinfo
-
-================
-*/
-void CL_LoadClientinfo( clientinfo_t *ci, const char *s ) {
- int i;
- char model_name[MAX_QPATH];
- char skin_name[MAX_QPATH];
- char model_filename[MAX_QPATH];
- char skin_filename[MAX_QPATH];
- char weapon_filename[MAX_QPATH];
- char icon_filename[MAX_QPATH];
-
- CL_ParsePlayerSkin( ci->name, model_name, skin_name, s );
-
- // model file
- Q_concat( model_filename, sizeof( model_filename ),
- "players/", model_name, "/tris.md2", NULL );
- ci->model = R_RegisterModel( model_filename );
- if( !ci->model && Q_stricmp( model_name, "male" ) ) {
- strcpy( model_name, "male" );
- strcpy( model_filename, "players/male/tris.md2" );
- ci->model = R_RegisterModel( model_filename );
- }
-
- // skin file
- Q_concat( skin_filename, sizeof( skin_filename ),
- "players/", model_name, "/", skin_name, ".pcx", NULL );
- ci->skin = R_RegisterSkin( skin_filename );
-
- // if we don't have the skin and the model was female,
- // see if athena skin exists
- if( !ci->skin && !Q_stricmp( model_name, "female" ) ) {
- strcpy( skin_name, "athena" );
- strcpy( skin_filename, "players/female/athena.pcx" );
- ci->skin = R_RegisterSkin( skin_filename );
- }
-
- // if we don't have the skin and the model wasn't male,
- // see if the male has it (this is for CTF's skins)
- if( !ci->skin && Q_stricmp( model_name, "male" ) ) {
- // change model to male
- strcpy( model_name, "male" );
- strcpy( model_filename, "players/male/tris.md2" );
- ci->model = R_RegisterModel( model_filename );
-
- // see if the skin exists for the male model
- Q_concat( skin_filename, sizeof( skin_filename ),
- "players/male/", skin_name, ".pcx", NULL );
- ci->skin = R_RegisterSkin( skin_filename );
- }
-
- // if we still don't have a skin, it means that the male model
- // didn't have it, so default to grunt
- if( !ci->skin ) {
- // see if the skin exists for the male model
- strcpy( skin_name, "grunt" );
- strcpy( skin_filename, "players/male/grunt.pcx" );
- ci->skin = R_RegisterSkin( skin_filename );
- }
-
- // weapon file
- for( i = 0; i < cl.numWeaponModels; i++ ) {
- Q_concat( weapon_filename, sizeof( weapon_filename ),
- "players/", model_name, "/", cl.weaponModels[i], NULL );
- ci->weaponmodel[i] = R_RegisterModel( weapon_filename );
- if( !ci->weaponmodel[i] && Q_stricmp( model_name, "male" ) ) {
- // try male
- Q_concat( weapon_filename, sizeof( weapon_filename ),
- "players/male/", cl.weaponModels[i], NULL );
- ci->weaponmodel[i] = R_RegisterModel( weapon_filename );
- }
- }
-
- // icon file
- Q_concat( icon_filename, sizeof( icon_filename ),
- "/players/", model_name, "/", skin_name, "_i.pcx", NULL );
- ci->icon = R_RegisterPic( icon_filename );
-
- strcpy( ci->model_name, model_name );
- strcpy( ci->skin_name, skin_name );
-
- // must have loaded all data types to be valid
- if( !ci->skin || !ci->icon || !ci->model || !ci->weaponmodel[0] ) {
- ci->skin = 0;
- ci->icon = 0;
- ci->model = 0;
- ci->weaponmodel[0] = 0;
- ci->model_name[0] = 0;
- ci->skin_name[0] = 0;
- }
-}
-
-/*
=====================================================================
ACTION MESSAGES
diff --git a/src/cl_precache.c b/src/cl_precache.c
new file mode 100644
index 0000000..a646d58
--- /dev/null
+++ b/src/cl_precache.c
@@ -0,0 +1,404 @@
+/*
+Copyright (C) 1997-2001 Id Software, Inc.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+//
+// cl_precache.c
+//
+
+#include "cl_local.h"
+
+/*
+================
+CL_ParsePlayerSkin
+
+Breaks up playerskin into name (optional), model and skin components.
+If model or skin are found to be invalid, replaces them with sane defaults.
+================
+*/
+void CL_ParsePlayerSkin( char *name, char *model, char *skin, const char *s ) {
+ size_t len;
+ char *t;
+
+ // configstring parsing guarantees that playerskins can never
+ // overflow, but still check the length to be entirely fool-proof
+ len = strlen( s );
+ if( len >= MAX_QPATH ) {
+ Com_Error( ERR_DROP, "%s: oversize playerskin", __func__ );
+ }
+
+ // isolate the player's name
+ t = strchr( s, '\\' );
+ if( t ) {
+ len = t - s;
+ strcpy( model, t + 1 );
+ } else {
+ len = 0;
+ strcpy( model, s );
+ }
+
+ // copy the player's name
+ if( name ) {
+ memcpy( name, s, len );
+ name[len] = 0;
+ }
+
+ // isolate the model name
+ t = strchr( model, '/' );
+ if( !t )
+ t = strchr( model, '\\' );
+ if( !t )
+ t = model;
+ if( t == model )
+ goto default_model;
+ *t++ = 0;
+
+ // apply restrictions on skins
+ if( cl_noskins->integer == 2 || !COM_IsPath( t ) )
+ goto default_skin;
+
+ if( cl_noskins->integer || !COM_IsPath( model ) )
+ goto default_model;
+
+ // isolate the skin name
+ strcpy( skin, t );
+ return;
+
+default_skin:
+ if( !Q_stricmp( model, "female" ) ) {
+ strcpy( model, "female" );
+ strcpy( skin, "athena" );
+ } else {
+default_model:
+ strcpy( model, "male" );
+ strcpy( skin, "grunt" );
+ }
+}
+
+/*
+================
+CL_LoadClientinfo
+
+================
+*/
+void CL_LoadClientinfo( clientinfo_t *ci, const char *s ) {
+ int i;
+ char model_name[MAX_QPATH];
+ char skin_name[MAX_QPATH];
+ char model_filename[MAX_QPATH];
+ char skin_filename[MAX_QPATH];
+ char weapon_filename[MAX_QPATH];
+ char icon_filename[MAX_QPATH];
+
+ CL_ParsePlayerSkin( ci->name, model_name, skin_name, s );
+
+ // model file
+ Q_concat( model_filename, sizeof( model_filename ),
+ "players/", model_name, "/tris.md2", NULL );
+ ci->model = R_RegisterModel( model_filename );
+ if( !ci->model && Q_stricmp( model_name, "male" ) ) {
+ strcpy( model_name, "male" );
+ strcpy( model_filename, "players/male/tris.md2" );
+ ci->model = R_RegisterModel( model_filename );
+ }
+
+ // skin file
+ Q_concat( skin_filename, sizeof( skin_filename ),
+ "players/", model_name, "/", skin_name, ".pcx", NULL );
+ ci->skin = R_RegisterSkin( skin_filename );
+
+ // if we don't have the skin and the model was female,
+ // see if athena skin exists
+ if( !ci->skin && !Q_stricmp( model_name, "female" ) ) {
+ strcpy( skin_name, "athena" );
+ strcpy( skin_filename, "players/female/athena.pcx" );
+ ci->skin = R_RegisterSkin( skin_filename );
+ }
+
+ // if we don't have the skin and the model wasn't male,
+ // see if the male has it (this is for CTF's skins)
+ if( !ci->skin && Q_stricmp( model_name, "male" ) ) {
+ // change model to male
+ strcpy( model_name, "male" );
+ strcpy( model_filename, "players/male/tris.md2" );
+ ci->model = R_RegisterModel( model_filename );
+
+ // see if the skin exists for the male model
+ Q_concat( skin_filename, sizeof( skin_filename ),
+ "players/male/", skin_name, ".pcx", NULL );
+ ci->skin = R_RegisterSkin( skin_filename );
+ }
+
+ // if we still don't have a skin, it means that the male model
+ // didn't have it, so default to grunt
+ if( !ci->skin ) {
+ // see if the skin exists for the male model
+ strcpy( skin_name, "grunt" );
+ strcpy( skin_filename, "players/male/grunt.pcx" );
+ ci->skin = R_RegisterSkin( skin_filename );
+ }
+
+ // weapon file
+ for( i = 0; i < cl.numWeaponModels; i++ ) {
+ Q_concat( weapon_filename, sizeof( weapon_filename ),
+ "players/", model_name, "/", cl.weaponModels[i], NULL );
+ ci->weaponmodel[i] = R_RegisterModel( weapon_filename );
+ if( !ci->weaponmodel[i] && Q_stricmp( model_name, "male" ) ) {
+ // try male
+ Q_concat( weapon_filename, sizeof( weapon_filename ),
+ "players/male/", cl.weaponModels[i], NULL );
+ ci->weaponmodel[i] = R_RegisterModel( weapon_filename );
+ }
+ }
+
+ // icon file
+ Q_concat( icon_filename, sizeof( icon_filename ),
+ "/players/", model_name, "/", skin_name, "_i.pcx", NULL );
+ ci->icon = R_RegisterPic( icon_filename );
+
+ strcpy( ci->model_name, model_name );
+ strcpy( ci->skin_name, skin_name );
+
+ // must have loaded all data types to be valid
+ if( !ci->skin || !ci->icon || !ci->model || !ci->weaponmodel[0] ) {
+ ci->skin = 0;
+ ci->icon = 0;
+ ci->model = 0;
+ ci->weaponmodel[0] = 0;
+ ci->model_name[0] = 0;
+ ci->skin_name[0] = 0;
+ }
+}
+
+/*
+=================
+CL_LoadState
+=================
+*/
+void CL_LoadState( load_state_t state ) {
+ extern void VID_PumpEvents( void );
+ const char *s;
+
+ switch( state ) {
+ case LOAD_MAP:
+ s = cl.configstrings[ CS_MODELS + 1 ];
+ break;
+ case LOAD_MODELS:
+ s = "models";
+ break;
+ case LOAD_IMAGES:
+ s = "images";
+ break;
+ case LOAD_CLIENTS:
+ s = "clients";
+ break;
+ case LOAD_SOUNDS:
+ s = "sounds";
+ break;
+ case LOAD_FINISH:
+ s = NULL;
+ break;
+ default:
+ return;
+ }
+
+ if( s ) {
+ Con_Printf( "Loading %s...\r", s );
+ } else {
+ Con_Print( "\r" );
+ }
+
+ SCR_UpdateScreen();
+ VID_PumpEvents();
+}
+
+/*
+=================
+CL_RegisterSounds
+=================
+*/
+void CL_RegisterSounds( void ) {
+ int i;
+ char *s;
+
+ S_BeginRegistration ();
+ CL_RegisterTEntSounds ();
+ for ( i = 1; i < MAX_SOUNDS; i++ ) {
+ s = cl.configstrings[ CS_SOUNDS + i ];
+ if ( !s[ 0 ] )
+ break;
+ cl.sound_precache[ i ] = S_RegisterSound( s );
+ }
+ S_EndRegistration ();
+}
+
+/*
+=================
+CL_RegisterBspModels
+
+Registers main BSP file and inline models
+=================
+*/
+void CL_RegisterBspModels( void ) {
+ qerror_t ret;
+ char *name;
+ int i;
+
+ ret = BSP_Load( cl.configstrings[ CS_MODELS + 1 ], &cl.bsp );
+ if( cl.bsp == NULL ) {
+ Com_Error( ERR_DROP, "Couldn't load %s: %s",
+ cl.configstrings[ CS_MODELS + 1 ], Q_ErrorString( ret ) );
+ }
+
+#if USE_MAPCHECKSUM
+ if( cl.bsp->checksum != atoi( cl.configstrings[ CS_MAPCHECKSUM ] ) ) {
+ if( cls.demo.playback ) {
+ Com_WPrintf( "Local map version differs from demo: %i != %s\n",
+ cl.bsp->checksum, cl.configstrings[ CS_MAPCHECKSUM ] );
+ } else {
+ Com_Error( ERR_DROP, "Local map version differs from server: %i != %s",
+ cl.bsp->checksum, cl.configstrings[ CS_MAPCHECKSUM ] );
+ }
+ }
+#endif
+
+ for ( i = 1; i < MAX_MODELS; i++ ) {
+ name = cl.configstrings[CS_MODELS+i];
+ if( !name[0] ) {
+ break;
+ }
+ if( name[0] == '*' )
+ cl.model_clip[i] = BSP_InlineModel( cl.bsp, name );
+ else
+ cl.model_clip[i] = NULL;
+ }
+}
+
+/*
+=================
+CL_RegisterVWepModels
+
+Builds a list of visual weapon models
+=================
+*/
+void CL_RegisterVWepModels( void ) {
+ int i;
+ char *name;
+
+ cl.numWeaponModels = 1;
+ strcpy( cl.weaponModels[0], "weapon.md2" );
+
+ // only default model when vwep is off
+ if( !cl_vwep->integer ) {
+ return;
+ }
+
+ for( i = 2; i < MAX_MODELS; i++ ) {
+ name = cl.configstrings[ CS_MODELS + i ];
+ if( !name[0] ) {
+ break;
+ }
+ if( name[0] != '#' ) {
+ continue;
+ }
+
+ // special player weapon model
+ strcpy( cl.weaponModels[cl.numWeaponModels++], name + 1 );
+
+ if( cl.numWeaponModels == MAX_CLIENTWEAPONMODELS ) {
+ break;
+ }
+ }
+}
+
+/*
+=================
+CL_PrepRefresh
+
+Call before entering a new level, or after changing dlls
+=================
+*/
+void CL_PrepRefresh (void) {
+ int i;
+ char *name;
+ float rotate;
+ vec3_t axis;
+
+ if( !cls.ref_initialized )
+ return;
+ if( !cl.mapname[0] )
+ return; // no map loaded
+
+ // register models, pics, and skins
+ R_BeginRegistration( cl.mapname );
+
+ CL_LoadState( LOAD_MODELS );
+
+ CL_RegisterTEntModels ();
+
+ for( i = 2; i < MAX_MODELS; i++ ) {
+ name = cl.configstrings[ CS_MODELS + i ];
+ if( !name[0] ) {
+ break;
+ }
+ if( name[0] == '#' ) {
+ continue;
+ }
+ cl.model_draw[i] = R_RegisterModel( name );
+ }
+
+ CL_LoadState( LOAD_IMAGES );
+ for( i = 1; i < MAX_IMAGES; i++ ) {
+ name = cl.configstrings[ CS_IMAGES + i ];
+ if( !name[0] ) {
+ break;
+ }
+ cl.image_precache[i] = R_RegisterPic( name );
+ }
+
+ CL_LoadState( LOAD_CLIENTS );
+ for(i = 0; i < MAX_CLIENTS; i++ ) {
+ name = cl.configstrings[ CS_PLAYERSKINS + i ];
+ if( !name[0] ) {
+ continue;
+ }
+ CL_LoadClientinfo( &cl.clientinfo[i], name );
+ }
+
+ CL_LoadClientinfo( &cl.baseclientinfo, "unnamed\\male/grunt" );
+
+ // set sky textures and speed
+ rotate = atof( cl.configstrings[CS_SKYROTATE] );
+ if( sscanf( cl.configstrings[CS_SKYAXIS], "%f %f %f",
+ &axis[0], &axis[1], &axis[2]) != 3 )
+ {
+ Com_DPrintf( "Couldn't parse CS_SKYAXIS\n" );
+ VectorClear( axis );
+ }
+ R_SetSky( cl.configstrings[CS_SKY], rotate, axis );
+
+ // the renderer can now free unneeded stuff
+ R_EndRegistration();
+
+ // clear any lines of console text
+ Con_ClearNotify_f();
+
+ SCR_UpdateScreen();
+}
+
diff --git a/src/cl_view.c b/src/cl_view.c
index 4e78051..bc8d955 100644
--- a/src/cl_view.c
+++ b/src/cl_view.c
@@ -270,112 +270,6 @@ static void V_TestLights (void) {
//===================================================================
-void CL_RegisterVWepModels( void ) {
- int i;
- char *name;
-
- cl.numWeaponModels = 1;
- strcpy( cl.weaponModels[0], "weapon.md2" );
-
- // only default model when vwep is off
- if( !cl_vwep->integer ) {
- return;
- }
-
- for( i = 2; i < MAX_MODELS; i++ ) {
- name = cl.configstrings[ CS_MODELS + i ];
- if( !name[0] ) {
- break;
- }
- if( name[0] != '#' ) {
- continue;
- }
-
- // special player weapon model
- strcpy( cl.weaponModels[cl.numWeaponModels++], name + 1 );
-
- if( cl.numWeaponModels == MAX_CLIENTWEAPONMODELS ) {
- break;
- }
- }
-}
-
-/*
-=================
-CL_PrepRefresh
-
-Call before entering a new level, or after changing dlls
-=================
-*/
-void CL_PrepRefresh (void) {
- int i;
- char *name;
- float rotate;
- vec3_t axis;
-
- if( !cls.ref_initialized ) {
- return;
- }
- if (!cl.mapname[0])
- return; // no map loaded
-
- // register models, pics, and skins
- R_BeginRegistration( cl.mapname );
-
- CL_LoadState( LOAD_MODELS );
-
- CL_RegisterTEntModels ();
-
- for (i=2 ; i<MAX_MODELS ; i++) {
- name = cl.configstrings[CS_MODELS+i];
- if( !name[0] ) {
- break;
- }
- if( name[0] == '#' ) {
- continue;
- }
- cl.model_draw[i] = R_RegisterModel( name );
- }
-
- CL_LoadState( LOAD_IMAGES );
- for (i=1 ; i<MAX_IMAGES; i++) {
- name = cl.configstrings[CS_IMAGES+i];
- if( !name[0] ) {
- break;
- }
- cl.image_precache[i] = R_RegisterPic (name);
- }
-
- CL_LoadState( LOAD_CLIENTS );
- for (i=0 ; i<MAX_CLIENTS ; i++) {
- name = cl.configstrings[CS_PLAYERSKINS+i];
- if( !name[0] )
- continue;
-
- CL_LoadClientinfo( &cl.clientinfo[i], name );
- }
-
- CL_LoadClientinfo (&cl.baseclientinfo, "unnamed\\male/grunt");
-
- // set sky textures and speed
- rotate = atof (cl.configstrings[CS_SKYROTATE]);
- if( sscanf (cl.configstrings[CS_SKYAXIS], "%f %f %f",
- &axis[0], &axis[1], &axis[2]) != 3 )
- {
- Com_DPrintf( "Couldn't parse CS_SKYAXIS\n" );
- VectorClear( axis );
- }
- R_SetSky (cl.configstrings[CS_SKY], rotate, axis);
-
- // the renderer can now free unneeded stuff
- R_EndRegistration ();
-
- // clear any lines of console text
- Con_ClearNotify_f ();
-
- SCR_UpdateScreen ();
-}
-
void CL_UpdateBlendSetting( void ) {
if( cls.state < ca_connected ) {
return;