int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max) { int tx,ty,otx,oty; long absdx,absdy,xstep,ystep; tx = tracex>>TILESHIFT; ty = tracey>>TILESHIFT; absdx=LABS(deltax); absdy=LABS(deltay); if (absdx>absdy) { ystep = (deltay<<8)/(absdx>>8); if (!ystep) ystep = deltay>0 ? 1 : -1; oty = (tracey+ystep)>>TILESHIFT; if (deltax>0) { //############### // // step x by +1 // //############### do { tx++; tracey+=ystep; ty = tracey>>TILESHIFT; if (ty!=oty) { if (tilemap[tx-1][ty]) { tile.x = tx-1; tile.y = ty; return 1; } oty = ty; } if (tilemap[tx][ty]) { tile.x = tx; tile.y = ty; return 1; } } while (--max); return 0; } else { //############### // // step x by -1 // //############### do {
DVECTOR xdvinit(double j, double incr, double n) { long k; long num; DVECTOR x; if ((incr > 0.0 && j > n) || (incr < 0.0 && j < n)) { x = xdvnull(); return x; } if (incr == 0.0) { num = (long)n; if (num <= 0) { x = xdvnull(); return x; } } else { num = LABS((long)((n - j) / incr)) + 1; } /* memory allocate */ x = xdvalloc(num); /* initailize data */ for (k = 0; k < x->length; k++) { x->data[k] = j + (k * incr); } return x; }