rendered paste bodyIndex: 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 = *(byte*)(p + 1);+ if (x == (*p)[0] && y == (*p)[1] && z == (*p)[2]) {+ switch (size) {+ case ACTOR_SIZE_NORMAL:+ return qtrue;+ case ACTOR_SIZE_UGV:+ 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++] = (byte*)&ent->fieldSize;+ } } if (fb_length > MAX_EDICTS)Index: src/client/client.h===================================================================--- src/client/client.h (Revision 10006)+++ src/client/client.h (Arbeitskopie)@@ -682,7 +682,7 @@ extern int actorMoveLength; extern invList_t invList[MAX_INVLIST];-extern byte *fb_list[MAX_EDICTS];+extern byte *fb_list[MAX_EDICTS * 2]; extern int fb_length; void MSG_Write_PA(player_action_t player_action, int num, ...);Index: src/client/cl_actor.c===================================================================--- src/client/cl_actor.c (Revision 10007)+++ src/client/cl_actor.c (Arbeitskopie)@@ -1905,13 +1905,13 @@ /** * @brief A list of locations that cannot be moved to.- *+ * @note Pointer to le->pos or edict->pos followed by le->fieldSize or edict->fieldSize * @see CL_BuildForbiddenList */-byte *fb_list[MAX_EDICTS];+byte *fb_list[MAX_EDICTS * 2]; /** * @brief Current length of fb_list.- *+ * @note all byte pointers in the fb_list list (pos + fieldSize) * @see fb_list */ int fb_length;@@ -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++] = (byte*)&le->fieldSize;+ } } #ifdef PARANOID- if (fb_length > MAX_EDICTS)+ if (fb_length / 2 > MAX_EDICTS) Com_Error(ERR_DROP, "CL_BuildForbiddenList: list too long"); #endif }