]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - world.c
sounds now follow their owner (so riding a lift doesn't leave the sound at the start...
[xonotic/darkplaces.git] / world.c
diff --git a/world.c b/world.c
index 85a53826222b91bb7c7d8de5ec696f6f2f817149..7af2672b7ebda74d312c04da70d75e5b1925ff8d 100644 (file)
--- a/world.c
+++ b/world.c
@@ -283,7 +283,10 @@ void SV_TouchAreaGrid(edict_t *ent)
 void SV_LinkEdict_AreaGrid(edict_t *ent)
 {
        areagrid_t *grid;
-       int igrid[3], igridmins[3], igridmaxs[3], gridnum;
+       int igrid[3], igridmins[3], igridmaxs[3], gridnum, entitynumber = NUM_FOR_EDICT(ent);
+
+       if (entitynumber <= 0 || entitynumber >= sv.max_edicts || EDICT_NUM(entitynumber) != ent)
+               Host_Error("SV_LinkEdict_AreaGrid: invalid edict %p (sv.edicts is %p, edict compared to sv.edicts is %i)\n", ent, sv.edicts, entitynumber);
 
        igridmins[0] = (int) ((ent->v->absmin[0] + sv_areagrid_bias[0]) * sv_areagrid_scale[0]);
        igridmins[1] = (int) ((ent->v->absmin[1] + sv_areagrid_bias[1]) * sv_areagrid_scale[1]);
@@ -295,9 +298,9 @@ void SV_LinkEdict_AreaGrid(edict_t *ent)
        {
                // wow, something outside the grid, store it as such
                if (ent->v->solid == SOLID_TRIGGER)
-                       InsertLinkBefore (&ent->e->areagrid[0], &sv_areagrid_outside.trigger_edicts, NUM_FOR_EDICT(ent));
+                       InsertLinkBefore (&ent->e->areagrid[0], &sv_areagrid_outside.trigger_edicts, entitynumber);
                else
-                       InsertLinkBefore (&ent->e->areagrid[0], &sv_areagrid_outside.solid_edicts, NUM_FOR_EDICT(ent));
+                       InsertLinkBefore (&ent->e->areagrid[0], &sv_areagrid_outside.solid_edicts, entitynumber);
                return;
        }
 
@@ -308,9 +311,9 @@ void SV_LinkEdict_AreaGrid(edict_t *ent)
                for (igrid[0] = igridmins[0];igrid[0] < igridmaxs[0];igrid[0]++, grid++, gridnum++)
                {
                        if (ent->v->solid == SOLID_TRIGGER)
-                               InsertLinkBefore (&ent->e->areagrid[gridnum], &grid->trigger_edicts, NUM_FOR_EDICT(ent));
+                               InsertLinkBefore (&ent->e->areagrid[gridnum], &grid->trigger_edicts, entitynumber);
                        else
-                               InsertLinkBefore (&ent->e->areagrid[gridnum], &grid->solid_edicts, NUM_FOR_EDICT(ent));
+                               InsertLinkBefore (&ent->e->areagrid[gridnum], &grid->solid_edicts, entitynumber);
                }
        }
 }
@@ -343,6 +346,7 @@ void SV_LinkEdict (edict_t *ent, qboolean touch_triggers)
                model = sv.models[(int) ent->v->modelindex];
                if (model != NULL)
                {
+                       Mod_CheckLoaded(model);
                        if (model->type != mod_brush)
                                Host_Error("SOLID_BSP with non-BSP model\n");
 
@@ -453,17 +457,17 @@ trace_t SV_ClipMoveToEntity (edict_t *ent, vec3_t start, vec3_t mins, vec3_t max
 {
        int i;
        trace_t trace;
-       model_t *model;
-
-       i = ent->v->modelindex;
-       if ((unsigned int) i >= MAX_MODELS)
-               Host_Error("SV_ClipMoveToEntity: invalid modelindex\n");
-       model = sv.models[i];
-       if (i != 0 && model == NULL)
-               Host_Error("SV_ClipMoveToEntity: invalid modelindex\n");
+       model_t *model = NULL;
 
        if ((int) ent->v->solid == SOLID_BSP)
        {
+               i = ent->v->modelindex;
+               if ((unsigned int) i >= MAX_MODELS)
+                       Host_Error("SV_ClipMoveToEntity: invalid modelindex\n");
+               model = sv.models[i];
+               if (i != 0 && model == NULL)
+                       Host_Error("SV_ClipMoveToEntity: invalid modelindex\n");
+
                Mod_CheckLoaded(model);
                if (model->type != mod_brush)
                {