From 4be4e5ccf6aa37584de5b5fa478ce396cf12380b Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Fri, 20 Apr 2001 17:51:57 +0000 Subject: [PATCH] clear not-yet allocated entities to 0xdeadbeef --- include/QF/progs.h | 1 + libs/gamecode/pr_edict.c | 18 ++++++++++++++++++ nq/source/sv_main.c | 3 +-- qw/source/sv_init.c | 3 +-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/include/QF/progs.h b/include/QF/progs.h index 3260fd181..d2f02b72f 100644 --- a/include/QF/progs.h +++ b/include/QF/progs.h @@ -80,6 +80,7 @@ void PR_Init_Cvars (void); void PR_ExecuteProgram (progs_t *pr, func_t fnum); void PR_LoadProgs (progs_t *pr, char *progsname); void PR_LoadStrings (progs_t *pr); +edict_t *PR_InitEdicts (progs_t *pr, int num_edicts); void PR_Profile_f (void); diff --git a/libs/gamecode/pr_edict.c b/libs/gamecode/pr_edict.c index 7682a9427..93e38d69b 100644 --- a/libs/gamecode/pr_edict.c +++ b/libs/gamecode/pr_edict.c @@ -1207,6 +1207,24 @@ PR_LoadProgs (progs_t * pr, char *progsname) } } +edict_t * +PR_InitEdicts (progs_t *pr, int num_edicts) +{ + edict_t *edicts; + edict_t *e; + int i, j; + pr->pr_edictareasize = pr->pr_edict_size * num_edicts; + edicts = Hunk_AllocName (pr->pr_edictareasize, "edicts"); + memset (edicts, 0, *pr->reserved_edicts * pr->pr_edict_size); + (*pr->edicts) = edicts; + for (j = *pr->reserved_edicts; j < num_edicts; j++) { + e = EDICT_NUM (pr, j); + for (i=0; i < pr->progs->entityfields; i++) + e->v[i].int_var = 0xdeadbeef; + } + return edicts; +} + void PR_Init_Cvars (void) { diff --git a/nq/source/sv_main.c b/nq/source/sv_main.c index 5e6038568..f7fc1f57f 100644 --- a/nq/source/sv_main.c +++ b/nq/source/sv_main.c @@ -1112,8 +1112,7 @@ SV_SpawnServer (char *server) // allocate server memory sv.max_edicts = MAX_EDICTS; - sv_pr_state.pr_edictareasize = sv_pr_state.pr_edict_size * MAX_EDICTS; - sv.edicts = Hunk_AllocName (sv_pr_state.pr_edictareasize, "edicts"); + sv.edicts = PR_InitEdicts (&sv_pr_state, sv.max_edicts); // init the data field of the edicts for (i = 0; i < MAX_EDICTS; i++) { diff --git a/qw/source/sv_init.c b/qw/source/sv_init.c index 3383859ce..3792db1a2 100644 --- a/qw/source/sv_init.c +++ b/qw/source/sv_init.c @@ -343,8 +343,7 @@ SV_SpawnServer (char *server) MAX_SERVERINFO_STRING); // allocate edicts - sv_pr_state.pr_edictareasize = sv_pr_state.pr_edict_size * MAX_EDICTS; - sv.edicts = Hunk_AllocName (sv_pr_state.pr_edictareasize, "edicts"); + sv.edicts = PR_InitEdicts (&sv_pr_state, MAX_EDICTS); // init the data field of the edicts for (i = 0; i < MAX_EDICTS; i++) {