Sorry, forgot to attach the diffs... -------------- next part -------------- Index: socket/request.c =================================================================== RCS file: /cvsroot/crossfire/crossfire/socket/request.c,v retrieving revision 1.52 diff -w -c -5 -r1.52 request.c *** socket/request.c 13 Sep 2003 05:02:14 -0000 1.52 --- socket/request.c 11 Oct 2003 19:55:23 -0000 *************** *** 1728,1738 **** * area, we clear the values - otherwise, the old values * are preserved, and the check_head thinks it needs to clear them. */ for(x=0; x<mx; x++) { for(y=0; y<my; y++) { ! if ((x+dx) < 0 || x >= ns->mapx || (y+dy) < 0 || y >= ns->mapy) { memset(&(newmap.cells[x][y]), 0, sizeof(struct MapCell)); } else { memcpy(&(newmap.cells[x][y]), &(ns->lastmap.cells[x+dx][y+dy]),sizeof(struct MapCell)); --- 1728,1739 ---- * area, we clear the values - otherwise, the old values * are preserved, and the check_head thinks it needs to clear them. */ for(x=0; x<mx; x++) { for(y=0; y<my; y++) { ! if (x < 0 || x+dx < 0 || x >= ns->mapx || x+dx >= ns->mapx ! || y < 0 || y+dy < 0 || y >= ns->mapy || y+dy >= ns->mapy) { memset(&(newmap.cells[x][y]), 0, sizeof(struct MapCell)); } else { memcpy(&(newmap.cells[x][y]), &(ns->lastmap.cells[x+dx][y+dy]),sizeof(struct MapCell)); -------------- next part -------------- Index: gtk/map.c =================================================================== RCS file: /cvsroot/crossfire/client/gtk/map.c,v retrieving revision 1.16 diff -w -c -5 -r1.16 map.c *** gtk/map.c 8 Aug 2003 17:06:40 -0000 1.16 --- gtk/map.c 11 Oct 2003 19:39:39 -0000 *************** *** 355,372 **** if( x < 0 || y < 0 || x >= the_map.x || y >= the_map.y) continue; the_map.cells[x][y].need_update= 1; ! /*After long long long investigations on why the multipart objects did ! disappear when entering map view from right or bottom, scrolling ! through whole server code, i concluded the following line should be ! commented. If a multipart object was on a square outside of map, ! containing the tail, tail may be cleared by following process and ! so we end up with things like tower disappearance. ! tchize at myrealbox.com */ ! /*the_map.cells[x][y].cleared= 1;*/ } } /* for y */ } /* for x */ #ifdef HAVE_SDL --- 355,365 ---- if( x < 0 || y < 0 || x >= the_map.x || y >= the_map.y) continue; the_map.cells[x][y].need_update= 1; ! the_map.cells[x][y].cleared= 1; } } /* for y */ } /* for x */ #ifdef HAVE_SDL -------------- next part -------------- Index: x11/x11.c =================================================================== RCS file: /cvsroot/crossfire/client/x11/x11.c,v retrieving revision 1.19 diff -w -c -5 -r1.19 x11.c *** x11/x11.c 6 Oct 2003 07:04:01 -0000 1.19 --- x11/x11.c 11 Oct 2003 19:39:40 -0000 *************** *** 2985,3009 **** return; } XFillRectangle(display,xpm_pixmap,gc_clear_xpm,0,0,image_size,image_size); for (k=0; k<MAXLAYERS; k++) { if (the_map.cells[mx][my].heads[k].face >0 ) { /* Always draw the lower right corner of the heads. */ gen_draw_face(xpm_pixmap, the_map.cells[mx][my].heads[k].face, 0, 0, (pixmaps[the_map.cells[mx][my].heads[k].face]->width - 1) * image_size, (pixmaps[the_map.cells[mx][my].heads[k].face]->height - 1) * image_size ); got_one = 1; } - if (the_map.cells[mx][my].tails[k].face >0 ) { - gen_draw_face(xpm_pixmap, the_map.cells[mx][my].tails[k].face, 0, 0, - (pixmaps[the_map.cells[mx][my].tails[k].face]->width - the_map.cells[mx][my].tails[k].size_x - 1) * image_size, - (pixmaps[the_map.cells[mx][my].tails[k].face]->height - the_map.cells[mx][my].tails[k].size_y - 1) * image_size - ); - got_one = 1; - } } if (got_one) { if (the_map.cells[mx][my].cleared) { XSetClipOrigin(display, gc_xpm[XPMGCS-1], 0, 0); XSetForeground(display, gc_xpm[XPMGCS-1], discolor[0].pixel); --- 2985,3009 ---- return; } XFillRectangle(display,xpm_pixmap,gc_clear_xpm,0,0,image_size,image_size); for (k=0; k<MAXLAYERS; k++) { + if (the_map.cells[mx][my].tails[k].face >0 ) { + gen_draw_face(xpm_pixmap, the_map.cells[mx][my].tails[k].face, 0, 0, + (pixmaps[the_map.cells[mx][my].tails[k].face]->width - the_map.cells[mx][my].tails[k].size_x - 1) * image_size, + (pixmaps[the_map.cells[mx][my].tails[k].face]->height - the_map.cells[mx][my].tails[k].size_y - 1) * image_size + ); + got_one = 1; + } if (the_map.cells[mx][my].heads[k].face >0 ) { /* Always draw the lower right corner of the heads. */ gen_draw_face(xpm_pixmap, the_map.cells[mx][my].heads[k].face, 0, 0, (pixmaps[the_map.cells[mx][my].heads[k].face]->width - 1) * image_size, (pixmaps[the_map.cells[mx][my].heads[k].face]->height - 1) * image_size ); got_one = 1; } } if (got_one) { if (the_map.cells[mx][my].cleared) { XSetClipOrigin(display, gc_xpm[XPMGCS-1], 0, 0); XSetForeground(display, gc_xpm[XPMGCS-1], discolor[0].pixel);