mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-23 04:11:53 +00:00
Added support for lno files and fixed a crash when loading games/hexen2 level returns.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@419 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
a0bf669e3e
commit
6c806092b9
1 changed files with 36 additions and 2 deletions
|
@ -1517,7 +1517,10 @@ int LoadEnts(progfuncs_t *progfuncs, char *file, float killonspawnflags)
|
||||||
{
|
{
|
||||||
isloadgame = false;
|
isloadgame = false;
|
||||||
|
|
||||||
num = ED_FindGlobalOfs(progfuncs, "__fullspawndata");
|
if (pr_typecurrent>=0)
|
||||||
|
num = ED_FindGlobalOfs(progfuncs, "__fullspawndata");
|
||||||
|
else
|
||||||
|
num = 0;
|
||||||
if (num)
|
if (num)
|
||||||
fulldata = (eval_t *)((int *)pr_globals + num);
|
fulldata = (eval_t *)((int *)pr_globals + num);
|
||||||
else
|
else
|
||||||
|
@ -2324,6 +2327,37 @@ retry:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pr_linenums)
|
||||||
|
{
|
||||||
|
unsigned int lnotype = *(unsigned int*)"LNOF";
|
||||||
|
unsigned int version = 1;
|
||||||
|
int ohm;
|
||||||
|
unsigned int *file;
|
||||||
|
char lnoname[128];
|
||||||
|
ohm = PRHunkMark(progfuncs);
|
||||||
|
|
||||||
|
COM_StripExtension(filename, lnoname);
|
||||||
|
strcat(lnoname, ".lno");
|
||||||
|
if ((len=externs->FileSize(lnoname))>0)
|
||||||
|
{
|
||||||
|
file = PRHunkAlloc(progfuncs, len+1);
|
||||||
|
if (externs->ReadFile(lnoname, file, len+1))
|
||||||
|
|
||||||
|
if ( file[0] != lnotype
|
||||||
|
|| file[1] != version
|
||||||
|
|| file[2] != pr_progs->numglobaldefs
|
||||||
|
|| file[3] != pr_progs->numglobals
|
||||||
|
|| file[4] != pr_progs->numfielddefs
|
||||||
|
|| file[5] != pr_progs->numstatements
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PRHunkFree(progfuncs, ohm); //whoops: old progs or incompatable
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pr_linenums = file + 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pr_functions = fnc;
|
pr_functions = fnc;
|
||||||
// pr_strings = ((char *)pr_progs + pr_progs->ofs_strings);
|
// pr_strings = ((char *)pr_progs + pr_progs->ofs_strings);
|
||||||
gd16 = *(ddef16_t**)¤t_progstate->globaldefs = (ddef16_t *)((qbyte *)pr_progs + pr_progs->ofs_globaldefs);
|
gd16 = *(ddef16_t**)¤t_progstate->globaldefs = (ddef16_t *)((qbyte *)pr_progs + pr_progs->ofs_globaldefs);
|
||||||
|
@ -2478,7 +2512,7 @@ retry:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Sys_Error("Bad int size");
|
Sys_Error("Bad int size");
|
||||||
}
|
}
|
||||||
|
|
||||||
//this is a little over complicated and slow.
|
//this is a little over complicated and slow.
|
||||||
//we need to search through the statements, looking for if statements.
|
//we need to search through the statements, looking for if statements.
|
||||||
|
|
Loading…
Reference in a new issue