add: _px = px[i]>>KAB_PRECISION;
context: DoKaboom(WScreen *scr, Window win, int x, int y){    int i, j, k;    int sw=scr->scr_width, sh=scr->scr_height;    short px[PIECES], py[PIECES];    char pvx[PIECES], pvy[PIECES];    char ax[PIECES], ay[PIECES];    Pixmap tmp;    XImage *img;        img=XGetImage(dpy, win, 0, 0, wPreferences.icon_size, 		  wPreferences.icon_size, AllPlanes, ZPixmap);    XUnmapWindow(dpy,win);    if (!img)      return;    XSetClipMask(dpy, scr->copy_gc, None);    tmp = XCreatePixmap(dpy, scr->root_win, wPreferences.icon_size, 			wPreferences.icon_size, scr->depth);    XPutImage(dpy, tmp, scr->copy_gc, img, 0, 0, 0, 0, wPreferences.icon_size,	      wPreferences.icon_size);    XDestroyImage(img);    for (i=0,k=0; i<wPreferences.icon_size/PSIZE; i++) {	for (j=0; j<wPreferences.icon_size/PSIZE; j++) {	    if (rand()%3) {		ax[k]=i;		ay[k]=j;		px[k]=x+i*PSIZE;		py[k]=y+j*PSIZE;		pvx[k]=rand()%7-3;#ifdef SPREAD_ICON                pvy[k]=rand()%7-3;#else                pvy[k]=-12-rand()%6;#endif		k++;	    } else {		ax[k]=-1;	    }	}    }    j=k;    while (k>0) {	for (i=0; i<j; i++) {	    if (ax[i]>=0) {		px[i]+=pvx[i];		py[i]+=pvy[i];#ifdef SPREAD_ICON                pvx[i]+=(pvx[i]>0 ? 2 : -2);                pvy[i]+=(pvy[i]>0 ? 2 : -2);                /* The following are nice, but too slow.                 * The animation can have an unknown duration, depending                 * on what rand() returns. Until the animation ends, the user                 * cannot do anything, which is not too good. -Dan                 */                /*pvx[i]+=rand()%5-2;                pvy[i]+=rand()%5-2;*/#else                pvy[i]++;#endif                if (px[i]<-wPreferences.icon_size || px[i]>sw || py[i]>sh#ifdef SPREAD_ICON                    || px[i]<0 || py[i]<0#endif                   ) {                    ax[i]=-1;		    k--;		} else {		    XCopyArea(dpy, tmp, scr->root_win, scr->copy_gc, 			      ax[i]*PSIZE, ay[i]*PSIZE, 			      PSIZE, PSIZE, px[i], py[i]);		}	    }	}#ifdef SPEAKER_SOUND	play(dpy, 100+rand()%250, 12);#else# if (MINIATURIZE_ANIMATION_DELAY_Z > 0)	wusleep(MINIATURIZE_ANIMATION_DELAY_Z*2);# endif#endif	for (i=0; i<j; i++) {	    if (ax[i]>=0) {		XClearArea(dpy, scr->root_win, px[i], py[i], PSIZE, PSIZE, 1);	    }	}    }    XFreePixmap(dpy, tmp);}