I find some bad bug in player movement, which can course this client affects too. Because we track in the client now more accurate what happens on the map, this bug will come in effect - missing esrv_map_scroll(&op->contr->socket, freearr_x[dir],freearr_y[dir]); functions when the player moves. This is the right way to move a player (from move_ob() ). remove_ob(op); op->x+=freearr_x[dir]; op->y+=freearr_y[dir]; insert_ob_in_map(op,op->map,originator,0); /* Currently, assume that players will only be single space objects */ if (op->type==PLAYER) { esrv_map_scroll(&op->contr->socket, freearr_x[dir],freearr_y[dir]); op->contr->socket.update_look=1; op->contr->socket.look_position=0; } This is, how for example the shop_mat function teleports a player back in the shop when he can't pay all unpaid items: else { /* if we get here, a player tried to leave a shop but was not able * to afford the items he has. We try to move the player so that * they are not on the mat anymore */ int i = find_free_spot (op->arch, op->map, op->x, op->y, 1, 9); if(i == -1) { LOG (llevError, "Internal shop-mat problem.\n"); } else { remove_ob (op); op->x += freearr_x[i]; op->y += freearr_y[i]; rv = insert_ob_in_map (op, op->map, shop_mat,0) == NULL; } } The map scroll cmd is missed. This will bring every feature out of track, which depends on exactly map data & position data. You will notice this effect sometimes, when you get ported/moved, and a "shadow" of your player char animation stays on the position where you was before. This missing scroll cmds are numerous in the code - better to check every insert_ob_in_map() and add it when needed. _______________________________________________ crossfire-devel mailing list crossfire-devel at lists.real-time.com https://mailman.real-time.com/mailman/listinfo/crossfire-devel