+void SV_IncreaseEdicts(void)
+{
+ int i;
+ edict_t *e;
+ int oldmax_edicts = sv.max_edicts;
+ void *oldedicts = sv.edicts;
+ void *oldedictsfields = sv.edictsfields;
+ void *oldedictstable = sv.edictstable;
+ void *oldmoved_edicts = sv.moved_edicts;
+
+ for (i = 0;i < sv.max_edicts;i++)
+ SV_UnlinkEdict (sv.edictstable[i]);
+ SV_ClearWorld();
+
+ sv.max_edicts = min(sv.max_edicts + 32, MAX_EDICTS);
+ sv.edicts = Mem_Alloc(sv_edicts_mempool, sv.max_edicts * sizeof(edict_t));
+ sv.edictsfields = Mem_Alloc(sv_edicts_mempool, sv.max_edicts * pr_edict_size);
+ sv.edictstable = Mem_Alloc(sv_edicts_mempool, sv.max_edicts * sizeof(edict_t *));
+ sv.moved_edicts = Mem_Alloc(sv_edicts_mempool, sv.max_edicts * sizeof(edict_t *));
+
+ memcpy(sv.edicts , oldedicts , oldmax_edicts * sizeof(edict_t));
+ memcpy(sv.edictsfields, oldedictsfields, oldmax_edicts * pr_edict_size);
+
+ for (i = 0;i < sv.max_edicts;i++)
+ {
+ e = sv.edictstable[i] = sv.edicts + i;
+ e->v = (void *)((qbyte *)sv.edictsfields + i * pr_edict_size);
+ if (i > 0)
+ SV_LinkEdict(e, false);
+ }
+
+ Mem_Free(oldedicts);
+ Mem_Free(oldedictsfields);
+ Mem_Free(oldedictstable);
+ Mem_Free(oldmoved_edicts);
+}
+