+void CL_VM_CB_BeginIncreaseEdicts(void)
+{
+ int i;
+ prvm_edict_t *ent;
+
+ // links don't survive the transition, so unlink everything
+ for (i = 0, ent = prog->edicts;i < prog->max_edicts;i++, ent++)
+ {
+ if (!ent->priv.server->free)
+ World_UnlinkEdict(prog->edicts + i);
+ memset(&ent->priv.server->areagrid, 0, sizeof(ent->priv.server->areagrid));
+ }
+ World_Clear(&cl.world);
+}
+
+void CL_VM_CB_EndIncreaseEdicts(void)
+{
+ int i;
+ prvm_edict_t *ent;
+
+ // link every entity except world
+ for (i = 1, ent = prog->edicts;i < prog->max_edicts;i++, ent++)
+ if (!ent->priv.server->free)
+ CL_LinkEdict(ent);
+}
+
+void CL_VM_CB_InitEdict(prvm_edict_t *e)
+{
+ e->priv.server->move = false; // don't move on first frame
+}
+
+void CL_VM_CB_FreeEdict(prvm_edict_t *ed)
+{
+ World_UnlinkEdict(ed);
+ memset(ed->fields.client, 0, sizeof(*ed->fields.client));
+}
+
+void CL_VM_CB_CountEdicts(void)
+{
+ int i;
+ prvm_edict_t *ent;
+ int active = 0, models = 0, solid = 0;
+
+ for (i=0 ; i<prog->num_edicts ; i++)
+ {
+ ent = PRVM_EDICT_NUM(i);
+ if (ent->priv.server->free)
+ continue;
+ active++;
+ if (ent->fields.client->solid)
+ solid++;
+ if (ent->fields.client->model)
+ models++;
+ }
+
+ Con_Printf("num_edicts:%3i\n", prog->num_edicts);
+ Con_Printf("active :%3i\n", active);
+ Con_Printf("view :%3i\n", models);
+ Con_Printf("touch :%3i\n", solid);
+}
+
+qboolean CL_VM_CB_LoadEdict(prvm_edict_t *ent)
+{
+ return true;
+}
+