+void SV_IncreaseEdicts(void)
+{
+ int i;
+ edict_t *ent;
+ int oldmax_edicts = sv.max_edicts;
+ void *oldedictsengineprivate = sv.edictsengineprivate;
+ void *oldedictsfields = sv.edictsfields;
+ void *oldmoved_edicts = sv.moved_edicts;
+
+ // links don't survive the transition, so unlink everything
+ for (i = 0;i < sv.max_edicts;i++)
+ SV_UnlinkEdict (sv.edicts + i);
+ SV_ClearWorld();
+
+ sv.max_edicts = min(sv.max_edicts + 32, MAX_EDICTS);
+ sv.edictsengineprivate = Mem_Alloc(sv_edicts_mempool, sv.max_edicts * sizeof(edict_engineprivate_t));
+ sv.edictsfields = Mem_Alloc(sv_edicts_mempool, sv.max_edicts * pr_edict_size);
+ sv.moved_edicts = Mem_Alloc(sv_edicts_mempool, sv.max_edicts * sizeof(edict_t *));
+
+ memcpy(sv.edictsengineprivate, oldedictsengineprivate, oldmax_edicts * sizeof(edict_engineprivate_t));
+ memcpy(sv.edictsfields, oldedictsfields, oldmax_edicts * pr_edict_size);
+
+ for (i = 0;i < sv.max_edicts;i++)
+ {
+ ent = sv.edicts + i;
+ ent->e = sv.edictsengineprivate + i;
+ ent->v = (void *)((qbyte *)sv.edictsfields + i * pr_edict_size);
+ // link every entity except world
+ if (i > 0)
+ SV_LinkEdict(ent, false);
+ }
+
+ Mem_Free(oldedictsengineprivate);
+ Mem_Free(oldedictsfields);
+ Mem_Free(oldmoved_edicts);
+}
+