else
{
// parse an edict
+ if (entnum >= MAX_EDICTS)
+ Host_Error("Host_PerformLoadGame: too many edicts in save file (reached MAX_EDICTS %i)\n", MAX_EDICTS);
+ while (entnum >= sv.max_edicts)
+ SV_IncreaseEdicts();
ent = EDICT_NUM(entnum);
memset (ent->v, 0, progs->entityfields * 4);
ent->e->free = false;
angles and bad trails.
=================
*/
-extern void SV_IncreaseEdicts(void);
edict_t *ED_Alloc (void)
{
int i;
break;
case ev_entity:
- *(int *)d = EDICT_TO_PROG(EDICT_NUM(atoi (s)));
+ i = atoi (s);
+ if (i < 0 || i >= MAX_EDICTS)
+ Con_DPrintf("ED_ParseEpair: ev_entity reference too large (edict %i >= MAX_EDICTS %i)\n", i, MAX_EDICTS);
+ while (i >= sv.max_edicts)
+ SV_IncreaseEdicts();
+ *(int *)d = EDICT_TO_PROG(EDICT_NUM(i));
break;
case ev_field:
// LordHavoc: turned EDICT_NUM into a #define for speed reasons
edict_t *EDICT_NUM_ERROR(int n, char *filename, int fileline)
{
- Host_Error ("EDICT_NUM: bad number %i (called at %f:%i)", n, filename, fileline);
+ Host_Error ("EDICT_NUM: bad number %i (called at %s:%i)", n, filename, fileline);
return NULL;
}
void PR_Crash (void);
+void SV_IncreaseEdicts(void);
+
edict_t *ED_Alloc (void);
void ED_Free (edict_t *ed);
void ED_ClearEdict (edict_t *e);