mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-01-31 20:50:47 +00:00
Fixes saved games.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1843 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
c7fb937754
commit
4b877b1090
1 changed files with 65 additions and 38 deletions
|
@ -452,6 +452,48 @@ void SV_FlushLevelCache(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LoadModelsAndSounds(vfsfile_t *f)
|
||||||
|
{
|
||||||
|
char str[32768];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sv.model_precache[0] = PR_AddString(svprogfuncs, "", 0);
|
||||||
|
for (i=1; i < MAX_MODELS; i++)
|
||||||
|
{
|
||||||
|
VFS_GETS(f, str, sizeof(str));
|
||||||
|
if (!*str)
|
||||||
|
break;
|
||||||
|
|
||||||
|
sv.model_precache[i] = PR_AddString(svprogfuncs, str, 0);
|
||||||
|
}
|
||||||
|
if (i == MAX_MODELS)
|
||||||
|
{
|
||||||
|
VFS_GETS(f, str, sizeof(str));
|
||||||
|
if (*str)
|
||||||
|
SV_Error("Too many model precaches in loadgame cache");
|
||||||
|
}
|
||||||
|
for (; i < MAX_SOUNDS; i++)
|
||||||
|
sv.model_precache[i] = NULL;
|
||||||
|
|
||||||
|
// sv.sound_precache[0] = PR_AddString(svprogfuncs, "", 0);
|
||||||
|
for (i=1; i < MAX_SOUNDS; i++)
|
||||||
|
{
|
||||||
|
VFS_GETS(f, str, sizeof(str));
|
||||||
|
if (!*str)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// sv.sound_precache[i] = PR_AddString(svprogfuncs, str, 0);
|
||||||
|
}
|
||||||
|
if (i == MAX_SOUNDS)
|
||||||
|
{
|
||||||
|
VFS_GETS(f, str, sizeof(str));
|
||||||
|
if (*str)
|
||||||
|
SV_Error("Too many sound precaches in loadgame cache");
|
||||||
|
}
|
||||||
|
for (; i < MAX_SOUNDS; i++)
|
||||||
|
*sv.sound_precache[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
||||||
{
|
{
|
||||||
eval_t *eval, *e2;
|
eval_t *eval, *e2;
|
||||||
|
@ -471,6 +513,8 @@ qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
||||||
|
|
||||||
int pt;
|
int pt;
|
||||||
|
|
||||||
|
int modelpos;
|
||||||
|
|
||||||
int filelen, filepos;
|
int filelen, filepos;
|
||||||
char *file;
|
char *file;
|
||||||
gametype_e gametype;
|
gametype_e gametype;
|
||||||
|
@ -519,7 +563,7 @@ qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
||||||
// been used. The menu calls it before stuffing loadgame command
|
// been used. The menu calls it before stuffing loadgame command
|
||||||
// SCR_BeginLoadingPlaque ();
|
// SCR_BeginLoadingPlaque ();
|
||||||
|
|
||||||
f = FS_OpenVFS(name, "rt", FS_GAME);
|
f = FS_OpenVFS(name, "rb", FS_GAME);
|
||||||
if (!f)
|
if (!f)
|
||||||
{
|
{
|
||||||
Con_TPrintf (STL_ERRORCOULDNTOPEN);
|
Con_TPrintf (STL_ERRORCOULDNTOPEN);
|
||||||
|
@ -558,6 +602,7 @@ qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
||||||
time = atof(str);
|
time = atof(str);
|
||||||
|
|
||||||
SV_SpawnServer (mapname, startspot, false, false);
|
SV_SpawnServer (mapname, startspot, false, false);
|
||||||
|
sv.time = time;
|
||||||
if (svs.gametype != gametype)
|
if (svs.gametype != gametype)
|
||||||
{
|
{
|
||||||
Con_Printf("Incorrect gamecode type. Cannot load game.\n");
|
Con_Printf("Incorrect gamecode type. Cannot load game.\n");
|
||||||
|
@ -575,6 +620,14 @@ qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
||||||
|
|
||||||
// load the light styles
|
// load the light styles
|
||||||
|
|
||||||
|
VFS_GETS(f, str, sizeof(str));
|
||||||
|
if (atoi(str) != MAX_LIGHTSTYLES)
|
||||||
|
{
|
||||||
|
VFS_CLOSE (f);
|
||||||
|
Con_Printf ("load failed - invalid number of lightstyles\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0 ; i<MAX_LIGHTSTYLES ; i++)
|
for (i=0 ; i<MAX_LIGHTSTYLES ; i++)
|
||||||
{
|
{
|
||||||
VFS_GETS(f, str, sizeof(str));
|
VFS_GETS(f, str, sizeof(str));
|
||||||
|
@ -593,41 +646,8 @@ qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
||||||
PR_RegisterFields();
|
PR_RegisterFields();
|
||||||
PR_InitEnts(svprogfuncs, sv.max_edicts);
|
PR_InitEnts(svprogfuncs, sv.max_edicts);
|
||||||
|
|
||||||
sv.model_precache[0] = PR_AddString(svprogfuncs, "", 0);
|
modelpos = VFS_TELL(f);
|
||||||
for (i=1; i < MAX_MODELS; i++)
|
LoadModelsAndSounds(f);
|
||||||
{
|
|
||||||
VFS_GETS(f, str, sizeof(str));
|
|
||||||
if (!*str)
|
|
||||||
break;
|
|
||||||
|
|
||||||
sv.model_precache[i] = PR_AddString(svprogfuncs, str, 0);
|
|
||||||
}
|
|
||||||
if (i == MAX_MODELS)
|
|
||||||
{
|
|
||||||
VFS_GETS(f, str, sizeof(str));
|
|
||||||
if (*str)
|
|
||||||
SV_Error("Too many model precaches in loadgame cache");
|
|
||||||
}
|
|
||||||
for (; i < MAX_SOUNDS; i++)
|
|
||||||
sv.model_precache[i] = NULL;
|
|
||||||
|
|
||||||
// sv.sound_precache[0] = PR_AddString(svprogfuncs, "", 0);
|
|
||||||
for (i=1; i < MAX_SOUNDS; i++)
|
|
||||||
{
|
|
||||||
VFS_GETS(f, str, sizeof(str));
|
|
||||||
if (!*str)
|
|
||||||
break;
|
|
||||||
|
|
||||||
// sv.sound_precache[i] = PR_AddString(svprogfuncs, str, 0);
|
|
||||||
}
|
|
||||||
if (i == MAX_SOUNDS)
|
|
||||||
{
|
|
||||||
VFS_GETS(f, str, sizeof(str));
|
|
||||||
if (*str)
|
|
||||||
SV_Error("Too many sound precaches in loadgame cache");
|
|
||||||
}
|
|
||||||
for (; i < MAX_SOUNDS; i++)
|
|
||||||
*sv.sound_precache[i] = 0;
|
|
||||||
|
|
||||||
filepos = VFS_TELL(f);
|
filepos = VFS_TELL(f);
|
||||||
filelen = VFS_GETLEN(f);
|
filelen = VFS_GETLEN(f);
|
||||||
|
@ -644,9 +664,15 @@ qboolean SV_LoadLevelCache(char *level, char *startspot, qboolean ignoreplayers)
|
||||||
PR_LoadGlabalStruct();
|
PR_LoadGlabalStruct();
|
||||||
|
|
||||||
pr_global_struct->time = sv.time = time;
|
pr_global_struct->time = sv.time = time;
|
||||||
|
sv.starttime = Sys_DoubleTime() - sv.time;
|
||||||
|
|
||||||
|
VFS_SEEK(f, modelpos);
|
||||||
|
LoadModelsAndSounds(f);
|
||||||
|
|
||||||
VFS_CLOSE(f);
|
VFS_CLOSE(f);
|
||||||
|
|
||||||
|
PF_InitTempStrings(svprogfuncs);
|
||||||
|
|
||||||
SV_ClearWorld ();
|
SV_ClearWorld ();
|
||||||
|
|
||||||
for (i=0 ; i<MAX_CLIENTS ; i++)
|
for (i=0 ; i<MAX_CLIENTS ; i++)
|
||||||
|
@ -1052,12 +1078,13 @@ void SV_Loadgame_f (void)
|
||||||
SV_DropClient(cl);
|
SV_DropClient(cl);
|
||||||
|
|
||||||
fgets(str, sizeof(str)-1, f);
|
fgets(str, sizeof(str)-1, f);
|
||||||
str[sizeof(cl->name)-1] = '\0';
|
str[sizeof(cl->namebuf)-1] = '\0';
|
||||||
for (trim = str+strlen(str)-1; trim>=str && *trim <= ' '; trim--)
|
for (trim = str+strlen(str)-1; trim>=str && *trim <= ' '; trim--)
|
||||||
*trim='\0';
|
*trim='\0';
|
||||||
for (trim = str; *trim <= ' ' && *trim; trim++)
|
for (trim = str; *trim <= ' ' && *trim; trim++)
|
||||||
;
|
;
|
||||||
strcpy(cl->name, str);
|
strcpy(cl->namebuf, str);
|
||||||
|
cl->name = cl->namebuf;
|
||||||
if (*str)
|
if (*str)
|
||||||
{
|
{
|
||||||
cl->state = cs_zombie;
|
cl->state = cs_zombie;
|
||||||
|
|
Loading…
Reference in a new issue