float __engine_check;
#endif
+void precache_playermodel(string m)
+{
+ string f;
+
+ if(substring(m, -9,5) == "_lod1")
+ return;
+ if(substring(m, -9,5) == "_lod2")
+ return;
+ precache_model(m);
+ f = strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1));
+ if(fexists(f))
+ precache_model(f);
+ f = strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1));
+ if(fexists(f))
+ precache_model(f);
+
+ /*
+ float globhandle, i, n;
+ globhandle = search_begin(strcat(m, "_*.sounds"), TRUE, FALSE);
+ if (globhandle < 0)
+ return;
+ n = search_getsize(globhandle);
+ for (i = 0; i < n; ++i)
+ {
+ //print(search_getfilename(globhandle, i), "\n");
+ f = search_getfilename(globhandle, i);
+ PrecachePlayerSounds(f);
+ }
+ search_end(globhandle);
+ */
+}
+void precache_all_playermodels(string pattern)
+{
+ float globhandle, i, n;
+ string f;
+
+ globhandle = search_begin(pattern, TRUE, FALSE);
+ if (globhandle < 0)
+ return;
+ n = search_getsize(globhandle);
+ for (i = 0; i < n; ++i)
+ {
+ //print(search_getfilename(globhandle, i), "\n");
+ f = search_getfilename(globhandle, i);
+ precache_playermodel(f);
+ }
+ search_end(globhandle);
+}
+
string forcefog;
void WaypointSprite_Load();
void ConsoleCommand_macro_init();
float i;
+#ifdef COMPAT_XON050_ENGINE
+ // old engine lacks implementation of player_localnum
+ player_localnum = player_localentnum - 1;
+#endif
+
binddb = db_create();
tempdb = db_create();
ClientProgsDB = db_load("client.db");
GetTeam(COLOR_SPECTATOR, true); // add specs first
+ // needs to be done so early because of the constants they create
RegisterWeapons();
+ RegisterGametypes();
WaypointSprite_Load();
precache_model("null");
precache_sound("misc/hit.wav");
precache_sound("misc/typehit.wav");
+ if (autocvar_cl_precacheplayermodels)
+ {
+ precache_all_playermodels("models/player/*.zym");
+ precache_all_playermodels("models/player/*.dpm");
+ precache_all_playermodels("models/player/*.md3");
+ precache_all_playermodels("models/player/*.psk");
+ precache_all_playermodels("models/player/*.iqm");
+ }
+
Projectile_Precache();
Hook_Precache();
GibSplash_Precache();
hud_configure_prev = -1;
tab_panel = -1;
+
+ draw_currentSkin = strzone(strcat("gfx/menu/", cvar_string("menu_skin")));
}
// CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
-float cvar_clientsettemp_restore();
-void CSQC_Shutdown(void)
+void Shutdown(void)
{
#ifdef USE_FTE
#pragma TARGET id
db_save(ClientProgsDB, "client.db");
db_close(ClientProgsDB);
- cvar_clientsettemp_restore();
-
if(camera_active)
cvar_set("chase_active",ftos(chase_active_backup));
if(f & 2)
{
newspectatee_status = ReadByte();
- if(newspectatee_status == player_localentnum)
+ if(newspectatee_status == player_localnum + 1)
newspectatee_status = -1; // observing
}
else
prev_health = -1;
}
spectatee_status = newspectatee_status;
+
+ // non-COMPAT_XON050_ENGINE: we could get rid of spectatee_status, and derive it from player_localentnum and player_localnum
}
void Ent_Nagger()
case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break;
case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break;
case ENT_CLIENT_TURRET: ent_turret(); break;
+ case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break;
default:
//error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype));
error(sprintf(_("Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"), self.enttype, num_for_edict(self), self.classname));
{
if not(isdemo())
{
- localcmd("\n_cl_hook_gamestart ", GametypeNameFromType(gametype), "\n");
+ if(!(calledhooks & HOOK_START))
+ localcmd("\n_cl_hook_gamestart ", MapInfo_Type_ToString(gametype), "\n");
calledhooks |= HOOK_START;
}
}
{
float i;
self.classname = "ent_client_scores_info";
- gametype = ReadByte();
+ gametype = ReadInt24_t();
for(i = 0; i < MAX_SCORE; ++i)
{
scores_label[i] = strzone(ReadString());
hagar_maxrockets = ReadByte();
g_trueaim_minrange = ReadCoord();
+ g_balance_porto_secondary = ReadByte();
if(!postinit)
PostInit();
strunzone(grecordholder[pos-1]);
grecordholder[pos-1] = strzone(ReadString());
grecordtime[pos-1] = ReadInt24_t();
- if(grecordholder[pos-1] == GetPlayerName(player_localentnum -1))
+ if(grecordholder[pos-1] == GetPlayerName(player_localnum))
race_myrank = pos;
break;
case RACE_NET_SERVER_STATUS: