Index: src/qcommon/cmodel.c =================================================================== --- src/qcommon/cmodel.c (Revision 10007) +++ src/qcommon/cmodel.c (Arbeitskopie) @@ -207,7 +207,7 @@ static tnode_t *tnode_p; static byte stf; static byte tfList[HEIGHT][WIDTH][WIDTH]; -static byte tf; +static byte tf; /**< test flag */ static void CM_MakeTnodes(void); static void CM_InitBoxHull(void); @@ -2500,10 +2500,28 @@ { byte **p; int i; + byte size; - for (i = 0, p = map->fblist; i < map->fblength; i++, p++) - if (x == (*p)[0] && y == (*p)[1] && z == (*p)[2]) - return qtrue; + for (i = 0, p = map->fblist; i < map->fblength / 2; i++, p += 2) { + size = *(p + 1); + if (x == (*p)[0] && y == (*p)[1] && z == (*p)[2]) { + switch (size) { + case 1: /* normal actor */ + return qtrue; + case 2: /* 2x2 units */ + if (Grid_CheckForbidden(map, x - 1, y, z)) + return qtrue; + if (Grid_CheckForbidden(map, x - 1, y - 1, z)) + return qtrue; + if (Grid_CheckForbidden(map, x, y - 1, z)) + return qtrue; + break; + default: + Com_Printf("Grid_CheckForbidden: unknown size: %i\n", size); + return qfalse; + } + } + } return qfalse; } Index: src/game/g_client.c =================================================================== --- src/game/g_client.c (Revision 10006) +++ src/game/g_client.c (Arbeitskopie) @@ -1174,8 +1174,10 @@ if (!ent->inuse) continue; /* dead ugv will stop walking, too */ - if (((ent->type == ET_ACTOR && !(ent->state & STATE_DEAD)) || ent->type == ET_UGV) && (ent->visflags & vis_mask)) + if (((ent->type == ET_ACTOR && !(ent->state & STATE_DEAD)) || ent->type == ET_UGV) && (ent->visflags & vis_mask)) { fb_list[fb_length++] = ent->pos; + fb_list[fb_length++] = ent->size; + } } if (fb_length > MAX_EDICTS) Index: src/client/cl_actor.c =================================================================== --- src/client/cl_actor.c (Revision 10007) +++ src/client/cl_actor.c (Arbeitskopie) @@ -1936,12 +1936,14 @@ if (!le->inuse || le->invis) continue; /* dead ugv will stop walking, too */ - if ((!(le->state & STATE_DEAD) && le->type == ET_ACTOR) || le->type == ET_UGV) + if ((!(le->state & STATE_DEAD) && le->type == ET_ACTOR) || le->type == ET_UGV) { fb_list[fb_length++] = le->pos; + fb_list[fb_length++] = le->size; + } } #ifdef PARANOID - if (fb_length > MAX_EDICTS) + if (fb_length / 2 > MAX_EDICTS) Com_Error(ERR_DROP, "CL_BuildForbiddenList: list too long"); #endif }