- int dx, dy, temp;
-
- if (lev.android_clone_cnt == 0)
- {
- if (Cave[y-1][x-1] != Xblank &&
- Cave[y-1][x] != Xblank &&
- Cave[y-1][x+1] != Xblank &&
- Cave[y][x-1] != Xblank &&
- Cave[y][x+1] != Xblank &&
- Cave[y+1][x-1] != Xblank &&
- Cave[y+1][x] != Xblank &&
- Cave[y+1][x+1] != Xblank)
- goto android_move;
-
- switch (RANDOM & 7)
- {
- /* randomly find an object to clone */
-
- case 0: /* S,NE,W,NW,SE,E,SW,N */
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- goto android_move;
-
- case 1: /* NW,SE,N,S,NE,SW,E,W */
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- goto android_move;
-
- case 2: /* SW,E,S,W,N,NW,SE,NE */
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- goto android_move;
-
- case 3: /* N,SE,NE,E,W,S,NW,SW */
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- goto android_move;
-
- case 4: /* SE,NW,E,NE,SW,W,N,S */
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- goto android_move;
-
- case 5: /* NE,W,SE,SW,S,N,E,NW */
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- goto android_move;
-
- case 6: /* E,N,SW,S,NW,NE,SE,W */
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- goto android_move;
-
- case 7: /* W,SW,NW,N,E,SE,NE,S */
- temp = lev.android_array[Cave[y][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
- temp = lev.android_array[Cave[y+1][x]]; if (temp != Xblank) break;
- goto android_move;
- }
-
- Next[y][x] = temp; /* the item we chose to clone */
- play_element_sound(x, y, SOUND_android_clone, temp);
-
- switch (RANDOM & 7)
- {
- /* randomly find a direction to move */
-
- case 0: /* S,NE,W,NW,SE,E,SW,N */
- if (Cave[y+1][x] == Xblank) goto android_s;
- if (Cave[y-1][x+1] == Xblank) goto android_ne;
- if (Cave[y][x-1] == Xblank) goto android_w;
- if (Cave[y-1][x-1] == Xblank) goto android_nw;
- if (Cave[y+1][x+1] == Xblank) goto android_se;
- if (Cave[y][x+1] == Xblank) goto android_e;
- if (Cave[y+1][x-1] == Xblank) goto android_sw;
- if (Cave[y-1][x] == Xblank) goto android_n;
- goto android_move;
-
- case 1: /* NW,SE,N,S,NE,SW,E,W */
- if (Cave[y-1][x-1] == Xblank) goto android_nw;
- if (Cave[y+1][x+1] == Xblank) goto android_se;
- if (Cave[y-1][x] == Xblank) goto android_n;
- if (Cave[y+1][x] == Xblank) goto android_s;
- if (Cave[y-1][x+1] == Xblank) goto android_ne;
- if (Cave[y+1][x-1] == Xblank) goto android_sw;
- if (Cave[y][x+1] == Xblank) goto android_e;
- if (Cave[y][x-1] == Xblank) goto android_w;
- goto android_move;