1 /* second part of synchro.
2  *
3  * game logic for monsters.
4  *
5  * one giant switch statement to process everything.
6  *
7  * this whole thing is a major bottleneck. the compiler must use registers.
8  * compilers suck.
9  */
10 
11 #include "main_em.h"
12 
13 
14 #define RANDOM (random = random << 31 | random >> 1)
15 
set_nearest_player_xy(int x,int y,int * dx,int * dy)16 static void set_nearest_player_xy(int x, int y, int *dx, int *dy)
17 {
18   int distance, distance_shortest = EM_MAX_CAVE_WIDTH + EM_MAX_CAVE_HEIGHT;
19   int i;
20 
21   /* default values if no players are alive anymore */
22   *dx = 0;
23   *dy = 0;
24 
25   for (i = 0; i < MAX_PLAYERS; i++)
26   {
27     if (!ply[i].alive)
28       continue;
29 
30     distance = ABS(ply[i].x - x) + ABS(ply[i].y - y);
31 
32     if (distance < distance_shortest)
33     {
34       *dx = ply[i].x;
35       *dy = ply[i].y;
36 
37       distance_shortest = distance;
38     }
39   }
40 }
41 
synchro_2(void)42 void synchro_2(void)
43 {
44   int x = 0;
45   int y = 1;
46   unsigned long random = RandomEM;
47   short *cave_cache = Cave[y];	/* might be a win */
48   int score = 0;
49 
50   int temp = 0;			/* initialized to make compilers happy */
51   int dx;			/* only needed to find closest player */
52   int dy;
53   int element;
54 
55  loop:
56 
57   element = cave_cache[++x];
58 
59   switch (element)
60   {
61     default:
62       goto loop;
63 
64     /* --------------------------------------------------------------------- */
65 
66 #ifdef BAD_ROLL
67     case Xstone_force_e:
68       switch (Cave[y][x+1])
69       {
70   	case ZBORDER:
71   	case Znormal:
72   	case Zdynamite:
73   	case Xboom_bug:
74   	case Xboom_bomb:
75   	case Xboom_android:
76   	case Xboom_1:
77   	case Zplayer:
78   	  Cave[y][x] = Xstone;
79   	  Next[y][x] = Xstone;
80   	  goto loop;
81 
82   	default:
83   	  Cave[y][x] = Ystone_eB;
84   	  Cave[y][x+1] = Ystone_e;
85   	  Next[y][x] = Xblank;
86   	  Next[y][x+1] = Xstone_pause;
87   	  goto loop;
88       }
89 
90     case Xstone_force_w:
91       switch (Cave[y][x-1])
92       {
93   	case ZBORDER:
94   	case Znormal:
95   	case Zdynamite:
96   	case Xboom_bug:
97   	case Xboom_bomb:
98   	case Xboom_android:
99   	case Xboom_1:
100   	case Zplayer:
101   	  Cave[y][x] = Xstone;
102   	  Next[y][x] = Xstone;
103   	  goto loop;
104 
105   	default:
106   	  Cave[y][x] = Ystone_wB;
107   	  Cave[y][x-1] = Ystone_w;
108   	  Next[y][x] = Xblank;
109   	  Next[y][x-1] = Xstone_pause;
110   	  goto loop;
111       }
112 
113     case Xnut_force_e:
114       switch (Cave[y][x+1])
115       {
116   	case ZBORDER:
117   	case Znormal:
118   	case Zdynamite:
119   	case Xboom_bug:
120   	case Xboom_bomb:
121   	case Xboom_android:
122   	case Xboom_1:
123   	case Zplayer:
124   	  Cave[y][x] = Xnut;
125   	  Next[y][x] = Xnut;
126   	  goto loop;
127 
128   	default:
129   	  Cave[y][x] = Ynut_eB;
130   	  Cave[y][x+1] = Ynut_e;
131   	  Next[y][x] = Xblank;
132   	  Next[y][x+1] = Xnut_pause;
133   	  goto loop;
134       }
135 
136     case Xnut_force_w:
137       switch (Cave[y][x-1])
138       {
139   	case ZBORDER:
140   	case Znormal:
141   	case Zdynamite:
142   	case Xboom_bug:
143   	case Xboom_bomb:
144   	case Xboom_android:
145   	case Xboom_1:
146   	case Zplayer:
147   	  Cave[y][x] = Xnut;
148   	  Next[y][x] = Xnut;
149   	  goto loop;
150 
151   	default:
152   	  Cave[y][x] = Ynut_wB;
153   	  Cave[y][x-1] = Ynut_w;
154   	  Next[y][x] = Xblank;
155   	  Next[y][x-1] = Xnut_pause;
156   	  goto loop;
157   	}
158 
159     case Xspring_force_e:
160       switch (Cave[y][x+1])
161       {
162         case ZBORDER:
163   	case Znormal:
164   	case Zdynamite:
165   	case Xboom_bug:
166   	case Xboom_bomb:
167   	case Xboom_android:
168   	case Xboom_1:
169   	case Zplayer:
170   	  Cave[y][x] = Xspring;
171   	  Next[y][x] = Xspring;
172   	  goto loop;
173 
174 	default:
175   	  Cave[y][x] = Yspring_eB;
176   	  Cave[y][x+1] = Yspring_e;
177   	  Next[y][x] = Xblank;
178 
179 #ifdef BAD_SPRING
180 	  Next[y][x+1] = Xspring_e;
181 #else
182 	  Next[y][x+1] = Xspring_pause;
183 #endif
184 
185 	  goto loop;
186       }
187 
188     case Xspring_force_w:
189       switch (Cave[y][x-1])
190       {
191   	case ZBORDER:
192   	case Znormal:
193   	case Zdynamite:
194   	case Xboom_bug:
195   	case Xboom_bomb:
196   	case Xboom_android:
197   	case Xboom_1:
198   	case Zplayer:
199   	  Cave[y][x] = Xspring;
200   	  Next[y][x] = Xspring;
201   	  goto loop;
202 
203   	default:
204   	  Cave[y][x] = Yspring_wB;
205   	  Cave[y][x-1] = Yspring_w;
206   	  Next[y][x] = Xblank;
207 
208 #ifdef BAD_SPRING
209   	  Next[y][x-1] = Xspring_w;
210 #else
211   	  Next[y][x-1] = Xspring_pause;
212 #endif
213   	  goto loop;
214   	}
215 
216     case Xemerald_force_e:
217       switch (Cave[y][x+1])
218       {
219   	case ZBORDER:
220   	case Znormal:
221   	case Zdynamite:
222   	case Xboom_bug:
223   	case Xboom_bomb:
224   	case Xboom_android:
225   	case Xboom_1:
226   	case Zplayer:
227   	  Cave[y][x] = Xemerald;
228   	  Next[y][x] = Xemerald;
229   	  goto loop;
230 
231   	default:
232   	  Cave[y][x] = Yemerald_eB;
233   	  Cave[y][x+1] = Yemerald_e;
234   	  Next[y][x] = Xblank;
235   	  Next[y][x+1] = Xemerald_pause;
236   	  goto loop;
237   	}
238 
239     case Xemerald_force_w:
240       switch (Cave[y][x-1])
241       {
242   	case ZBORDER:
243   	case Znormal:
244   	case Zdynamite:
245   	case Xboom_bug:
246   	case Xboom_bomb:
247   	case Xboom_android:
248   	case Xboom_1:
249   	case Zplayer:
250   	  Cave[y][x] = Xemerald;
251   	  Next[y][x] = Xemerald;
252   	  goto loop;
253 
254   	default:
255   	  Cave[y][x] = Yemerald_wB;
256   	  Cave[y][x-1] = Yemerald_w;
257   	  Next[y][x] = Xblank;
258   	  Next[y][x-1] = Xemerald_pause;
259   	  goto loop;
260   	}
261 
262     case Xdiamond_force_e:
263       switch (Cave[y][x+1])
264       {
265   	case ZBORDER:
266   	case Znormal:
267   	case Zdynamite:
268   	case Xboom_bug:
269   	case Xboom_bomb:
270   	case Xboom_android:
271   	case Xboom_1:
272   	case Zplayer:
273   	  Cave[y][x] = Xdiamond;
274   	  Next[y][x] = Xdiamond;
275   	  goto loop;
276 
277   	default:
278   	  Cave[y][x] = Ydiamond_eB;
279   	  Cave[y][x+1] = Ydiamond_e;
280   	  Next[y][x] = Xblank;
281   	  Next[y][x+1] = Xdiamond_pause;
282   	  goto loop;
283   	}
284 
285     case Xdiamond_force_w:
286       switch (Cave[y][x-1])
287       {
288   	case ZBORDER:
289   	case Znormal:
290   	case Zdynamite:
291   	case Xboom_bug:
292   	case Xboom_bomb:
293   	case Xboom_android:
294   	case Xboom_1:
295   	case Zplayer:
296   	  Cave[y][x] = Xdiamond;
297   	  Next[y][x] = Xdiamond;
298   	  goto loop;
299 
300   	default:
301   	  Cave[y][x] = Ydiamond_wB;
302   	  Cave[y][x-1] = Ydiamond_w;
303   	  Next[y][x] = Xblank;
304   	  Next[y][x-1] = Xdiamond_pause;
305   	  goto loop;
306   	}
307 
308     case Xbomb_force_e:
309       switch (Cave[y][x+1])
310       {
311   	case ZBORDER:
312   	case Znormal:
313   	case Zdynamite:
314   	case Xboom_bug:
315   	case Xboom_bomb:
316   	case Xboom_android:
317   	case Xboom_1:
318   	case Zplayer:
319   	  Cave[y][x] = Xbomb;
320   	  Next[y][x] = Xbomb;
321   	  goto loop;
322 
323   	default:
324   	  Cave[y][x] = Ybomb_eB;
325   	  Cave[y][x+1] = Ybomb_e;
326   	  Next[y][x] = Xblank;
327   	  Next[y][x+1] = Xbomb_pause;
328   	  goto loop;
329   	}
330 
331     case Xbomb_force_w:
332       switch (Cave[y][x-1])
333       {
334   	case ZBORDER:
335   	case Znormal:
336   	case Zdynamite:
337   	case Xboom_bug:
338   	case Xboom_bomb:
339   	case Xboom_android:
340   	case Xboom_1:
341   	case Zplayer:
342   	  Cave[y][x] = Xbomb;
343   	  Next[y][x] = Xbomb;
344   	  goto loop;
345 
346   	default:
347   	  Cave[y][x] = Ybomb_wB;
348   	  Cave[y][x-1] = Ybomb_w;
349   	  Next[y][x] = Xblank;
350   	  Next[y][x-1] = Xbomb_pause;
351   	  goto loop;
352   	}
353 #endif	/* BAD_ROLL */
354 
355     /* --------------------------------------------------------------------- */
356 
357     case Xstone:
358       switch (Cave[y+1][x])
359       {
360   	case Xacid_1:
361   	case Xacid_2:
362   	case Xacid_3:
363   	case Xacid_4:
364   	case Xacid_5:
365   	case Xacid_6:
366   	case Xacid_7:
367   	case Xacid_8:
368   	  Cave[y][x] = Ystone_sB;
369   	  if (Cave[y][x+1] == Xblank)
370 	    Cave[y][x+1] = Yacid_splash_eB;
371   	  if (Cave[y][x-1] == Xblank)
372 	    Cave[y][x-1] = Yacid_splash_wB;
373   	  Next[y][x] = Xblank;
374   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
375   	  goto loop;
376 
377   	case Xblank:
378   	case Yacid_splash_eB:
379   	case Yacid_splash_wB:
380   	case Xplant:
381   	case Yplant:
382 #if 1
383         case Xfake_acid_1:
384         case Xfake_acid_2:
385         case Xfake_acid_3:
386         case Xfake_acid_4:
387         case Xfake_acid_5:
388         case Xfake_acid_6:
389         case Xfake_acid_7:
390         case Xfake_acid_8:
391 #endif
392   	  Cave[y][x] = Ystone_sB;
393   	  Cave[y+1][x] = Ystone_s;
394   	  Next[y][x] = Xblank;
395   	  Next[y+1][x] = Xstone_fall;
396   	  goto loop;
397 
398   	case Xsand:
399   	  Cave[y][x] = Xsand_stonein_1;
400   	  Cave[y+1][x] = Xsand_sandstone_1;
401   	  Next[y][x] = Xsand_stonein_2;
402   	  Next[y+1][x] = Xsand_sandstone_2;
403   	  goto loop;
404 
405         case Xspring:
406   	case Xspring_pause:
407   	case Xspring_e:
408   	case Xspring_w:
409   	case Xandroid:
410   	case Xandroid_1_n:
411   	case Xandroid_2_n:
412   	case Xandroid_1_e:
413   	case Xandroid_2_e:
414   	case Xandroid_1_s:
415   	case Xandroid_2_s:
416   	case Xandroid_1_w:
417   	case Xandroid_2_w:
418   	case Xstone:
419   	case Xstone_pause:
420   	case Xemerald:
421   	case Xemerald_pause:
422   	case Xdiamond:
423   	case Xdiamond_pause:
424   	case Xbomb:
425   	case Xbomb_pause:
426   	case Xballoon:
427   	case Xacid_ne:
428   	case Xacid_nw:
429   	case Xball_1:
430   	case Xball_2:
431   	case Xnut:
432   	case Xnut_pause:
433   	case Xgrow_ns:
434   	case Xgrow_ew:
435   	case Xkey_1:
436   	case Xkey_2:
437   	case Xkey_3:
438   	case Xkey_4:
439   	case Xkey_5:
440   	case Xkey_6:
441   	case Xkey_7:
442   	case Xkey_8:
443   	case Xbumper:
444   	case Xswitch:
445   	case Xlenses:
446   	case Xmagnify:
447   	case Xround_wall_1:
448   	case Xround_wall_2:
449   	case Xround_wall_3:
450   	case Xround_wall_4:
451   	  if (RANDOM & 1)
452 	  {
453   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
454 	    {
455   	      Cave[y][x] = Ystone_eB;
456   	      Cave[y][x+1] = Ystone_e;
457   	      Next[y][x] = Xblank;
458   	      Next[y][x+1] = Xstone_pause;
459   	      goto loop;
460   	    }
461 
462   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
463 	    {
464   	      Cave[y][x] = Ystone_wB;
465   	      Cave[y][x-1] = Ystone_w;
466   	      Next[y][x] = Xblank;
467   	      Next[y][x-1] = Xstone_pause;
468   	      goto loop;
469   	    }
470   	  }
471 	  else
472 	  {
473   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
474 	    {
475   	      Cave[y][x] = Ystone_wB;
476   	      Cave[y][x-1] = Ystone_w;
477   	      Next[y][x] = Xblank;
478   	      Next[y][x-1] = Xstone_pause;
479   	      goto loop;
480   	    }
481 
482   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
483 	    {
484   	      Cave[y][x] = Ystone_eB;
485   	      Cave[y][x+1] = Ystone_e;
486   	      Next[y][x] = Xblank;
487   	      Next[y][x+1] = Xstone_pause;
488   	      goto loop;
489   	    }
490   	  }
491 
492         default:
493   	  goto loop;
494       }
495 
496     /* --------------------------------------------------------------------- */
497 
498     case Xstone_pause:
499       switch (Cave[y+1][x])
500       {
501   	case Xacid_1:
502   	case Xacid_2:
503   	case Xacid_3:
504   	case Xacid_4:
505   	case Xacid_5:
506   	case Xacid_6:
507   	case Xacid_7:
508   	case Xacid_8:
509   	  Cave[y][x] = Ystone_sB;
510   	  if (Cave[y][x+1] == Xblank)
511 	    Cave[y][x+1] = Yacid_splash_eB;
512   	  if (Cave[y][x-1] == Xblank)
513 	    Cave[y][x-1] = Yacid_splash_wB;
514   	  Next[y][x] = Xblank;
515   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
516   	  goto loop;
517 
518   	case Xblank:
519   	case Yacid_splash_eB:
520   	case Yacid_splash_wB:
521 #if 1
522         case Xfake_acid_1:
523         case Xfake_acid_2:
524         case Xfake_acid_3:
525         case Xfake_acid_4:
526         case Xfake_acid_5:
527         case Xfake_acid_6:
528         case Xfake_acid_7:
529         case Xfake_acid_8:
530 #endif
531   	  Cave[y][x] = Ystone_sB;
532   	  Cave[y+1][x] = Ystone_s;
533   	  Next[y][x] = Xblank;
534   	  Next[y+1][x] = Xstone_fall;
535   	  goto loop;
536 
537   	default:
538   	  Cave[y][x] = Xstone;
539   	  Next[y][x] = Xstone;
540   	  goto loop;
541   	}
542 
543     /* --------------------------------------------------------------------- */
544 
545     case Xstone_fall:
546       switch (Cave[y+1][x])
547       {
548   	case Xacid_1:
549   	case Xacid_2:
550   	case Xacid_3:
551   	case Xacid_4:
552   	case Xacid_5:
553   	case Xacid_6:
554   	case Xacid_7:
555   	case Xacid_8:
556   	  Cave[y][x] = Ystone_sB;
557   	  if (Cave[y][x+1] == Xblank)
558 	    Cave[y][x+1] = Yacid_splash_eB;
559   	  if (Cave[y][x-1] == Xblank)
560 	    Cave[y][x-1] = Yacid_splash_wB;
561   	  Next[y][x] = Xblank;
562   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
563   	  goto loop;
564 
565   	case Xblank:
566   	case Yacid_splash_eB:
567   	case Yacid_splash_wB:
568   	case Zplayer:
569 #if 1
570         case Xfake_acid_1:
571         case Xfake_acid_2:
572         case Xfake_acid_3:
573         case Xfake_acid_4:
574         case Xfake_acid_5:
575         case Xfake_acid_6:
576         case Xfake_acid_7:
577         case Xfake_acid_8:
578 #endif
579   	  Cave[y][x] = Ystone_sB;
580   	  Cave[y+1][x] = Ystone_s;
581   	  Next[y][x] = Xblank;
582   	  Next[y+1][x] = Xstone_fall;
583   	  goto loop;
584 
585   	case Xnut:
586   	case Xnut_pause:
587   	  Cave[y+1][x] = Yemerald_stone;
588   	  Next[y][x] = Xstone;
589   	  Next[y+1][x] = Xemerald;
590   	  play_element_sound(x, y, SAMPLE_crack, Xnut);
591   	  score += lev.nut_score;
592   	  goto loop;
593 
594   	case Xbug_n:
595   	case Xbug_e:
596   	case Xbug_s:
597   	case Xbug_w:
598   	case Xbug_gon:
599   	case Xbug_goe:
600   	case Xbug_gos:
601   	case Xbug_gow:
602   	  Cave[y][x] = Ystone_sB;
603   	  Cave[y+1][x] = Ybug_stone;
604   	  Next[y+1][x] = Znormal;
605   	  Boom[y][x-1] = Xemerald;
606   	  Boom[y][x] = Xemerald;
607   	  Boom[y][x+1] = Xemerald;
608   	  Boom[y+1][x-1] = Xemerald;
609   	  Boom[y+1][x] = Xdiamond;
610   	  Boom[y+1][x+1] = Xemerald;
611   	  Boom[y+2][x-1] = Xemerald;
612   	  Boom[y+2][x] = Xemerald;
613   	  Boom[y+2][x+1] = Xemerald;
614 #if PLAY_ELEMENT_SOUND
615 	  play_element_sound(x, y, SAMPLE_boom, element);
616 #endif
617   	  score += lev.bug_score;
618   	  goto loop;
619 
620   	case Xtank_n:
621   	case Xtank_e:
622   	case Xtank_s:
623   	case Xtank_w:
624   	case Xtank_gon:
625   	case Xtank_goe:
626   	case Xtank_gos:
627   	case Xtank_gow:
628   	  Cave[y][x] = Ystone_sB;
629   	  Cave[y+1][x] = Ytank_stone;
630   	  Next[y+1][x] = Znormal;
631   	  Boom[y][x-1] = Xblank;
632   	  Boom[y][x] = Xblank;
633   	  Boom[y][x+1] = Xblank;
634   	  Boom[y+1][x-1] = Xblank;
635   	  Boom[y+1][x] = Xblank;
636   	  Boom[y+1][x+1] = Xblank;
637   	  Boom[y+2][x-1] = Xblank;
638   	  Boom[y+2][x] = Xblank;
639   	  Boom[y+2][x+1] = Xblank;
640 #if PLAY_ELEMENT_SOUND
641 	  play_element_sound(x, y, SAMPLE_boom, element);
642 #endif
643   	  score += lev.tank_score;
644   	  goto loop;
645 
646   	case Xspring:
647   	  if (RANDOM & 1)
648 	  {
649   	    switch (Cave[y+1][x+1])
650 	    {
651   	      case Xblank:
652   	      case Yacid_splash_eB:
653   	      case Yacid_splash_wB:
654   	      case Xalien:
655   	      case Xalien_pause:
656   	        Cave[y+1][x] = Xspring_e;
657 		break;
658 
659   	      default:
660 		Cave[y+1][x] = Xspring_w;
661 		break;
662   	    }
663   	  }
664 	  else
665 	  {
666   	    switch (Cave[y+1][x-1])
667 	    {
668   	      case Xblank:
669   	      case Yacid_splash_eB:
670   	      case Yacid_splash_wB:
671   	      case Xalien:
672   	      case Xalien_pause:
673 		Cave[y+1][x] = Xspring_w;
674 		break;
675   	      default:
676 		Cave[y+1][x] = Xspring_e;
677 		break;
678   	    }
679   	  }
680 
681   	  Next[y][x] = Xstone;
682   	  goto loop;
683 
684   	case Xeater_n:
685   	case Xeater_e:
686   	case Xeater_s:
687   	case Xeater_w:
688   	  Cave[y][x] = Ystone_sB;
689   	  Cave[y+1][x] = Yeater_stone;
690   	  Next[y+1][x] = Znormal;
691   	  Boom[y][x-1] = lev.eater_array[lev.eater_pos][0];
692   	  Boom[y][x] = lev.eater_array[lev.eater_pos][1];
693   	  Boom[y][x+1] = lev.eater_array[lev.eater_pos][2];
694   	  Boom[y+1][x-1] = lev.eater_array[lev.eater_pos][3];
695   	  Boom[y+1][x] = lev.eater_array[lev.eater_pos][4];
696   	  Boom[y+1][x+1] = lev.eater_array[lev.eater_pos][5];
697   	  Boom[y+2][x-1] = lev.eater_array[lev.eater_pos][6];
698   	  Boom[y+2][x] = lev.eater_array[lev.eater_pos][7];
699   	  Boom[y+2][x+1] = lev.eater_array[lev.eater_pos][8];
700 #if PLAY_ELEMENT_SOUND
701 	  play_element_sound(x, y, SAMPLE_boom, element);
702 #endif
703   	  lev.eater_pos = (lev.eater_pos + 1) & 7;
704   	  score += lev.eater_score;
705   	  goto loop;
706 
707   	case Xalien:
708   	case Xalien_pause:
709   	  Cave[y][x] = Ystone_sB;
710   	  Cave[y+1][x] = Yalien_stone;
711   	  Next[y+1][x] = Znormal;
712   	  Boom[y][x-1] = Xblank;
713   	  Boom[y][x] = Xblank;
714   	  Boom[y][x+1] = Xblank;
715   	  Boom[y+1][x-1] = Xblank;
716   	  Boom[y+1][x] = Xblank;
717   	  Boom[y+1][x+1] = Xblank;
718   	  Boom[y+2][x-1] = Xblank;
719   	  Boom[y+2][x] = Xblank;
720   	  Boom[y+2][x+1] = Xblank;
721 #if PLAY_ELEMENT_SOUND
722 	  play_element_sound(x, y, SAMPLE_boom, element);
723 #endif
724   	  score += lev.alien_score;
725   	  goto loop;
726 
727   	case Xdiamond:
728   	case Xdiamond_pause:
729   	  switch (Cave[y+2][x])
730 	  {
731   	    case Xblank:
732   	    case Yacid_splash_eB:
733   	    case Yacid_splash_wB:
734   	    case Zplayer:
735   	    case Xbug_n:
736   	    case Xbug_e:
737   	    case Xbug_s:
738   	    case Xbug_w:
739   	    case Xbug_gon:
740   	    case Xbug_goe:
741   	    case Xbug_gos:
742   	    case Xbug_gow:
743   	    case Xtank_n:
744   	    case Xtank_e:
745   	    case Xtank_s:
746   	    case Xtank_w:
747   	    case Xtank_gon:
748   	    case Xtank_goe:
749   	    case Xtank_gos:
750   	    case Xtank_gow:
751   	    case Xspring_fall:
752   	    case Xandroid:
753   	    case Xandroid_1_n:
754   	    case Xandroid_2_n:
755   	    case Xandroid_1_e:
756   	    case Xandroid_2_e:
757   	    case Xandroid_1_s:
758   	    case Xandroid_2_s:
759   	    case Xandroid_1_w:
760   	    case Xandroid_2_w:
761   	    case Xstone_fall:
762   	    case Xemerald_fall:
763   	    case Xdiamond_fall:
764   	    case Xbomb_fall:
765   	    case Xacid_s:
766   	    case Xacid_1:
767   	    case Xacid_2:
768   	    case Xacid_3:
769   	    case Xacid_4:
770   	    case Xacid_5:
771   	    case Xacid_6:
772   	    case Xacid_7:
773   	    case Xacid_8:
774   	    case Xnut_fall:
775   	    case Xplant:
776   	    case Yplant:
777   	      Next[y][x] = Xstone;
778   	      play_element_sound(x, y, SAMPLE_stone, Xstone);
779   	      goto loop;
780   	  }
781 
782   	  Cave[y][x] = Ystone_sB;
783   	  Cave[y+1][x] = Ydiamond_stone;
784   	  Next[y][x] = Xblank;
785   	  Next[y+1][x] = Xstone_pause;
786   	  play_element_sound(x, y, SAMPLE_squash, Xdiamond);
787   	  goto loop;
788 
789   	case Xbomb:
790   	case Xbomb_pause:
791   	  Cave[y+1][x] = Ybomb_eat;
792   	  Next[y+1][x] = Znormal;
793   	  Boom[y][x-1] = Xblank;
794   	  Boom[y][x] = Xblank;
795   	  Boom[y][x+1] = Xblank;
796   	  Boom[y+1][x-1] = Xblank;
797   	  Boom[y+1][x] = Xblank;
798   	  Boom[y+1][x+1] = Xblank;
799   	  Boom[y+2][x-1] = Xblank;
800   	  Boom[y+2][x] = Xblank;
801   	  Boom[y+2][x+1] = Xblank;
802 #if PLAY_ELEMENT_SOUND
803 	  play_element_sound(x, y, SAMPLE_boom, element);
804 #endif
805   	  goto loop;
806 
807   	case Xwonderwall:
808   	  if (lev.wonderwall_time)
809 	  {
810   	    lev.wonderwall_state = 1;
811   	    Cave[y][x] = Ystone_sB;
812 
813   	    if (tab_blank[Cave[y+2][x]])
814 	    {
815   	      Cave[y+2][x] = Yemerald_s;
816   	      Next[y+2][x] = Xemerald_fall;
817   	    }
818 
819   	    Next[y][x] = Xblank;
820   	    play_element_sound(x, y, SAMPLE_wonderfall, Xwonderwall);
821   	    goto loop;
822   	  }
823 
824   	default:
825   	  Cave[y][x] = Xstone;
826   	  Next[y][x] = Xstone;
827   	  play_element_sound(x, y, SAMPLE_stone, Xstone);
828   	  goto loop;
829       }
830 
831     /* --------------------------------------------------------------------- */
832 
833     case Xnut:
834       switch (Cave[y+1][x])
835       {
836   	case Xacid_1:
837   	case Xacid_2:
838   	case Xacid_3:
839   	case Xacid_4:
840   	case Xacid_5:
841   	case Xacid_6:
842   	case Xacid_7:
843   	case Xacid_8:
844   	  Cave[y][x] = Ynut_sB;
845   	  if (Cave[y][x+1] == Xblank)
846 	    Cave[y][x+1] = Yacid_splash_eB;
847   	  if (Cave[y][x-1] == Xblank)
848 	    Cave[y][x-1] = Yacid_splash_wB;
849   	  Next[y][x] = Xblank;
850   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
851   	  goto loop;
852 
853   	case Xblank:
854   	case Yacid_splash_eB:
855   	case Yacid_splash_wB:
856   	  Cave[y][x] = Ynut_sB;
857   	  Cave[y+1][x] = Ynut_s;
858   	  Next[y][x] = Xblank;
859   	  Next[y+1][x] = Xnut_fall;
860   	  goto loop;
861 
862   	case Xspring:
863   	case Xspring_pause:
864   	case Xspring_e:
865   	case Xspring_w:
866   	case Xandroid:
867   	case Xandroid_1_n:
868   	case Xandroid_2_n:
869   	case Xandroid_1_e:
870   	case Xandroid_2_e:
871   	case Xandroid_1_s:
872   	case Xandroid_2_s:
873   	case Xandroid_1_w:
874   	case Xandroid_2_w:
875   	case Xstone:
876   	case Xstone_pause:
877   	case Xemerald:
878   	case Xemerald_pause:
879   	case Xdiamond:
880   	case Xdiamond_pause:
881   	case Xbomb:
882   	case Xbomb_pause:
883   	case Xballoon:
884   	case Xacid_ne:
885   	case Xacid_nw:
886   	case Xball_1:
887   	case Xball_2:
888   	case Xnut:
889   	case Xnut_pause:
890   	case Xgrow_ns:
891   	case Xgrow_ew:
892   	case Xkey_1:
893   	case Xkey_2:
894   	case Xkey_3:
895   	case Xkey_4:
896   	case Xkey_5:
897   	case Xkey_6:
898   	case Xkey_7:
899   	case Xkey_8:
900   	case Xbumper:
901   	case Xswitch:
902   	case Xround_wall_1:
903   	case Xround_wall_2:
904   	case Xround_wall_3:
905   	case Xround_wall_4:
906   	  if (RANDOM & 1)
907 	  {
908   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
909 	    {
910   	      Cave[y][x] = Ynut_eB;
911   	      Cave[y][x+1] = Ynut_e;
912   	      Next[y][x] = Xblank;
913   	      Next[y][x+1] = Xnut_pause;
914   	      goto loop;
915   	    }
916 
917   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
918 	    {
919   	      Cave[y][x] = Ynut_wB;
920   	      Cave[y][x-1] = Ynut_w;
921   	      Next[y][x] = Xblank;
922   	      Next[y][x-1] = Xnut_pause;
923   	      goto loop;
924   	    }
925   	  }
926 	  else
927 	  {
928   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
929 	    {
930   	      Cave[y][x] = Ynut_wB;
931   	      Cave[y][x-1] = Ynut_w;
932   	      Next[y][x] = Xblank;
933   	      Next[y][x-1] = Xnut_pause;
934   	      goto loop;
935   	    }
936 
937   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
938 	    {
939   	      Cave[y][x] = Ynut_eB;
940   	      Cave[y][x+1] = Ynut_e;
941   	      Next[y][x] = Xblank;
942   	      Next[y][x+1] = Xnut_pause;
943   	      goto loop;
944   	    }
945   	  }
946 
947         default:
948   	  goto loop;
949       }
950 
951     /* --------------------------------------------------------------------- */
952 
953 
954     case Xnut_pause:
955       switch (Cave[y+1][x])
956       {
957   	case Xacid_1:
958   	case Xacid_2:
959   	case Xacid_3:
960   	case Xacid_4:
961   	case Xacid_5:
962   	case Xacid_6:
963   	case Xacid_7:
964   	case Xacid_8:
965   	  Cave[y][x] = Ynut_sB;
966   	  if (Cave[y][x+1] == Xblank)
967 	    Cave[y][x+1] = Yacid_splash_eB;
968   	  if (Cave[y][x-1] == Xblank)
969 	    Cave[y][x-1] = Yacid_splash_wB;
970   	  Next[y][x] = Xblank;
971   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
972   	  goto loop;
973 
974   	case Xblank:
975   	case Yacid_splash_eB:
976   	case Yacid_splash_wB:
977   	  Cave[y][x] = Ynut_sB;
978   	  Cave[y+1][x] = Ynut_s;
979   	  Next[y][x] = Xblank;
980   	  Next[y+1][x] = Xnut_fall;
981   	  goto loop;
982 
983   	default:
984   	  Cave[y][x] = Xnut;
985   	  Next[y][x] = Xnut;
986   	  goto loop;
987       }
988 
989     /* --------------------------------------------------------------------- */
990 
991     case Xnut_fall:
992       switch (Cave[y+1][x])
993       {
994   	case Xacid_1:
995   	case Xacid_2:
996   	case Xacid_3:
997   	case Xacid_4:
998   	case Xacid_5:
999   	case Xacid_6:
1000   	case Xacid_7:
1001   	case Xacid_8:
1002   	  Cave[y][x] = Ynut_sB;
1003   	  if (Cave[y][x+1] == Xblank)
1004 	    Cave[y][x+1] = Yacid_splash_eB;
1005   	  if (Cave[y][x-1] == Xblank)
1006 	    Cave[y][x-1] = Yacid_splash_wB;
1007   	  Next[y][x] = Xblank;
1008   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1009   	  goto loop;
1010 
1011   	case Xblank:
1012   	case Yacid_splash_eB:
1013   	case Yacid_splash_wB:
1014   	case Zplayer:
1015   	  Cave[y][x] = Ynut_sB;
1016   	  Cave[y+1][x] = Ynut_s;
1017   	  Next[y][x] = Xblank;
1018   	  Next[y+1][x] = Xnut_fall;
1019   	  goto loop;
1020 
1021   	default:
1022   	  Cave[y][x] = Xnut;
1023   	  Next[y][x] = Xnut;
1024   	  play_element_sound(x, y, SAMPLE_nut, Xnut);
1025   	  goto loop;
1026       }
1027 
1028     /* --------------------------------------------------------------------- */
1029 
1030     case Xbug_n:
1031       if (tab_amoeba[Cave[y-1][x]] ||
1032 	  tab_amoeba[Cave[y][x+1]] ||
1033 	  tab_amoeba[Cave[y+1][x]] ||
1034 	  tab_amoeba[Cave[y][x-1]])
1035 	goto bug_boom;
1036 
1037       switch (Cave[y][x+1])
1038       {
1039   	case Xblank:
1040   	case Yacid_splash_eB:
1041   	case Yacid_splash_wB:
1042   	case Xplant:
1043   	case Yplant:
1044   	case Xacid_1:
1045   	case Xacid_2:
1046   	case Xacid_3:
1047   	case Xacid_4:
1048   	case Xacid_5:
1049   	case Xacid_6:
1050   	case Xacid_7:
1051   	case Xacid_8:
1052   	case Zplayer:
1053   	  Cave[y][x] = Ybug_n_e;
1054   	  Next[y][x] = Xbug_goe;
1055   	  play_element_sound(x, y, SAMPLE_bug, element);
1056   	  goto loop;
1057 
1058   	default:
1059   	  goto bug_gon;
1060   	}
1061 
1062     case Xbug_gon:
1063       if (tab_amoeba[Cave[y-1][x]] ||
1064 	  tab_amoeba[Cave[y][x+1]] ||
1065 	  tab_amoeba[Cave[y+1][x]] ||
1066 	  tab_amoeba[Cave[y][x-1]])
1067 	goto bug_boom;
1068 
1069     bug_gon:
1070 
1071       switch (Cave[y-1][x])
1072       {
1073   	case Xacid_1:
1074   	case Xacid_2:
1075   	case Xacid_3:
1076   	case Xacid_4:
1077   	case Xacid_5:
1078   	case Xacid_6:
1079   	case Xacid_7:
1080   	case Xacid_8:
1081   	  Cave[y][x] = Ybug_nB;
1082   	  if (Cave[y-2][x+1] == Xblank)
1083 	    Cave[y-2][x+1] = Yacid_splash_eB;
1084   	  if (Cave[y-2][x-1] == Xblank)
1085 	    Cave[y-2][x-1] = Yacid_splash_wB;
1086   	  Next[y][x] = Xblank;
1087   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1088   	  goto loop;
1089 
1090   	case Xblank:
1091   	case Yacid_splash_eB:
1092   	case Yacid_splash_wB:
1093   	case Xplant:
1094   	case Yplant:
1095   	case Zplayer:
1096   	  Cave[y][x] = Ybug_nB;
1097   	  Cave[y-1][x] = Ybug_n;
1098   	  Next[y][x] = Xblank;
1099   	  Next[y-1][x] = Xbug_n;
1100   	  play_element_sound(x, y, SAMPLE_bug, element);
1101   	  goto loop;
1102 
1103   	default:
1104   	  Cave[y][x] = Ybug_n_w;
1105   	  Next[y][x] = Xbug_gow;
1106   	  play_element_sound(x, y, SAMPLE_bug, element);
1107   	  goto loop;
1108       }
1109 
1110     /* --------------------------------------------------------------------- */
1111 
1112     case Xbug_e:
1113       if (tab_amoeba[Cave[y-1][x]] ||
1114 	  tab_amoeba[Cave[y][x+1]] ||
1115 	  tab_amoeba[Cave[y+1][x]] ||
1116 	  tab_amoeba[Cave[y][x-1]])
1117 	goto bug_boom;
1118 
1119       switch (Cave[y+1][x])
1120       {
1121   	case Xblank:
1122   	case Yacid_splash_eB:
1123   	case Yacid_splash_wB:
1124   	case Xplant:
1125   	case Yplant:
1126   	case Xacid_1:
1127   	case Xacid_2:
1128   	case Xacid_3:
1129   	case Xacid_4:
1130   	case Xacid_5:
1131   	case Xacid_6:
1132   	case Xacid_7:
1133   	case Xacid_8:
1134   	case Zplayer:
1135   	  Cave[y][x] = Ybug_e_s;
1136   	  Next[y][x] = Xbug_gos;
1137   	  play_element_sound(x, y, SAMPLE_bug, element);
1138   	  goto loop;
1139 
1140   	default:
1141   	  goto bug_goe;
1142       }
1143 
1144     case Xbug_goe:
1145       if (tab_amoeba[Cave[y-1][x]] ||
1146 	  tab_amoeba[Cave[y][x+1]] ||
1147 	  tab_amoeba[Cave[y+1][x]] ||
1148 	  tab_amoeba[Cave[y][x-1]])
1149 	goto bug_boom;
1150 
1151     bug_goe:
1152 
1153       switch (Cave[y][x+1])
1154       {
1155   	case Xacid_1:
1156   	case Xacid_2:
1157   	case Xacid_3:
1158   	case Xacid_4:
1159   	case Xacid_5:
1160   	case Xacid_6:
1161   	case Xacid_7:
1162   	case Xacid_8:
1163   	  Cave[y][x] = Ybug_eB;
1164   	  if (Cave[y-1][x+2] == Xblank)
1165 	    Cave[y-1][x+2] = Yacid_splash_eB;
1166   	  if (Cave[y-1][x] == Xblank)
1167 	    Cave[y-1][x] = Yacid_splash_wB;
1168   	  Next[y][x] = Xblank;
1169   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1170   	  goto loop;
1171 
1172   	case Xblank:
1173   	case Yacid_splash_eB:
1174   	case Yacid_splash_wB:
1175   	case Xplant:
1176   	case Yplant:
1177   	case Zplayer:
1178   	  Cave[y][x] = Ybug_eB;
1179   	  Cave[y][x+1] = Ybug_e;
1180   	  Next[y][x] = Xblank;
1181   	  Next[y][x+1] = Xbug_e;
1182   	  play_element_sound(x, y, SAMPLE_bug, element);
1183   	  goto loop;
1184 
1185   	default:
1186   	  Cave[y][x] = Ybug_e_n;
1187   	  Next[y][x] = Xbug_gon;
1188   	  play_element_sound(x, y, SAMPLE_bug, element);
1189   	  goto loop;
1190       }
1191 
1192     /* --------------------------------------------------------------------- */
1193 
1194     case Xbug_s:
1195       if (tab_amoeba[Cave[y-1][x]] ||
1196 	  tab_amoeba[Cave[y][x+1]] ||
1197 	  tab_amoeba[Cave[y+1][x]] ||
1198 	  tab_amoeba[Cave[y][x-1]])
1199 	goto bug_boom;
1200 
1201       switch (Cave[y][x-1])
1202       {
1203   	case Xblank:
1204   	case Yacid_splash_eB:
1205   	case Yacid_splash_wB:
1206   	case Xplant:
1207   	case Yplant:
1208   	case Xacid_1:
1209   	case Xacid_2:
1210   	case Xacid_3:
1211   	case Xacid_4:
1212   	case Xacid_5:
1213   	case Xacid_6:
1214   	case Xacid_7:
1215   	case Xacid_8:
1216   	case Zplayer:
1217   	  Cave[y][x] = Ybug_s_w;
1218   	  Next[y][x] = Xbug_gow;
1219   	  play_element_sound(x, y, SAMPLE_bug, element);
1220   	  goto loop;
1221 
1222   	default:
1223   	  goto bug_gos;
1224       }
1225 
1226     case Xbug_gos:
1227       if (tab_amoeba[Cave[y-1][x]] ||
1228 	  tab_amoeba[Cave[y][x+1]] ||
1229 	  tab_amoeba[Cave[y+1][x]] ||
1230 	  tab_amoeba[Cave[y][x-1]])
1231 	goto bug_boom;
1232 
1233     bug_gos:
1234 
1235       switch (Cave[y+1][x])
1236       {
1237   	case Xacid_1:
1238   	case Xacid_2:
1239   	case Xacid_3:
1240   	case Xacid_4:
1241   	case Xacid_5:
1242   	case Xacid_6:
1243   	case Xacid_7:
1244   	case Xacid_8:
1245   	  Cave[y][x] = Ybug_sB;
1246   	  if (Cave[y][x+1] == Xblank)
1247 	    Cave[y][x+1] = Yacid_splash_eB;
1248   	  if (Cave[y][x-1] == Xblank)
1249 	    Cave[y][x-1] = Yacid_splash_wB;
1250   	  Next[y][x] = Xblank;
1251   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1252   	  goto loop;
1253 
1254   	case Xblank:
1255   	case Yacid_splash_eB:
1256   	case Yacid_splash_wB:
1257   	case Xplant:
1258   	case Yplant:
1259   	case Zplayer:
1260   	  Cave[y][x] = Ybug_sB;
1261   	  Cave[y+1][x] = Ybug_s;
1262   	  Next[y][x] = Xblank;
1263   	  Next[y+1][x] = Xbug_s;
1264   	  play_element_sound(x, y, SAMPLE_bug, element);
1265   	  goto loop;
1266 
1267   	default:
1268   	  Cave[y][x] = Ybug_s_e;
1269   	  Next[y][x] = Xbug_goe;
1270   	  play_element_sound(x, y, SAMPLE_bug, element);
1271   	  goto loop;
1272       }
1273 
1274     /* --------------------------------------------------------------------- */
1275 
1276     case Xbug_w:
1277       if (tab_amoeba[Cave[y-1][x]] ||
1278 	  tab_amoeba[Cave[y][x+1]] ||
1279 	  tab_amoeba[Cave[y+1][x]] ||
1280 	  tab_amoeba[Cave[y][x-1]])
1281 	goto bug_boom;
1282 
1283       switch (Cave[y-1][x])
1284       {
1285   	case Xblank:
1286   	case Yacid_splash_eB:
1287   	case Yacid_splash_wB:
1288   	case Xplant:
1289   	case Yplant:
1290   	case Xacid_1:
1291   	case Xacid_2:
1292   	case Xacid_3:
1293   	case Xacid_4:
1294   	case Xacid_5:
1295   	case Xacid_6:
1296   	case Xacid_7:
1297   	case Xacid_8:
1298   	case Zplayer:
1299   	  Cave[y][x] = Ybug_w_n;
1300   	  Next[y][x] = Xbug_gon;
1301   	  play_element_sound(x, y, SAMPLE_bug, element);
1302   	  goto loop;
1303 
1304   	default:
1305   	  goto bug_gow;
1306       }
1307 
1308     case Xbug_gow:
1309       if (tab_amoeba[Cave[y-1][x]] ||
1310 	  tab_amoeba[Cave[y][x+1]] ||
1311 	  tab_amoeba[Cave[y+1][x]] ||
1312 	  tab_amoeba[Cave[y][x-1]])
1313 	goto bug_boom;
1314 
1315     bug_gow:
1316 
1317       switch (Cave[y][x-1])
1318       {
1319   	case Xacid_1:
1320   	case Xacid_2:
1321   	case Xacid_3:
1322   	case Xacid_4:
1323   	case Xacid_5:
1324   	case Xacid_6:
1325   	case Xacid_7:
1326   	case Xacid_8:
1327   	  Cave[y][x] = Ybug_wB;
1328   	  if (Cave[y-1][x] == Xblank)
1329 	    Cave[y-1][x] = Yacid_splash_eB;
1330   	  if (Cave[y-1][x-2] == Xblank)
1331 	    Cave[y-1][x-2] = Yacid_splash_wB;
1332   	  Next[y][x] = Xblank;
1333   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1334   	  goto loop;
1335 
1336   	case Xblank:
1337   	case Yacid_splash_eB:
1338   	case Yacid_splash_wB:
1339   	case Xplant:
1340   	case Yplant:
1341   	case Zplayer:
1342   	  Cave[y][x] = Ybug_wB;
1343   	  Cave[y][x-1] = Ybug_w;
1344   	  Next[y][x] = Xblank;
1345   	  Next[y][x-1] = Xbug_w;
1346   	  play_element_sound(x, y, SAMPLE_bug, element);
1347   	  goto loop;
1348 
1349   	default:
1350   	  Cave[y][x] = Ybug_w_s;
1351   	  Next[y][x] = Xbug_gos;
1352   	  play_element_sound(x, y, SAMPLE_bug, element);
1353   	  goto loop;
1354       }
1355 
1356     /* --------------------------------------------------------------------- */
1357 
1358     case Xtank_n:
1359       if (tab_amoeba[Cave[y-1][x]] ||
1360 	  tab_amoeba[Cave[y][x+1]] ||
1361 	  tab_amoeba[Cave[y+1][x]] ||
1362 	  tab_amoeba[Cave[y][x-1]])
1363 	goto tank_boom;
1364 
1365       switch (Cave[y][x-1])
1366       {
1367   	case Xblank:
1368   	case Yacid_splash_eB:
1369   	case Yacid_splash_wB:
1370   	case Xplant:
1371   	case Yplant:
1372   	case Xacid_1:
1373   	case Xacid_2:
1374   	case Xacid_3:
1375   	case Xacid_4:
1376   	case Xacid_5:
1377   	case Xacid_6:
1378   	case Xacid_7:
1379   	case Xacid_8:
1380   	case Zplayer:
1381   	  Cave[y][x] = Ytank_n_w;
1382   	  Next[y][x] = Xtank_gow;
1383   	  play_element_sound(x, y, SAMPLE_tank, element);
1384   	  goto loop;
1385 
1386   	default:
1387   	  goto tank_gon;
1388       }
1389 
1390     case Xtank_gon:
1391       if (tab_amoeba[Cave[y-1][x]] ||
1392 	  tab_amoeba[Cave[y][x+1]] ||
1393 	  tab_amoeba[Cave[y+1][x]] ||
1394 	  tab_amoeba[Cave[y][x-1]])
1395 	goto tank_boom;
1396 
1397     tank_gon:
1398 
1399       switch (Cave[y-1][x])
1400       {
1401   	case Xacid_1:
1402   	case Xacid_2:
1403   	case Xacid_3:
1404   	case Xacid_4:
1405   	case Xacid_5:
1406   	case Xacid_6:
1407   	case Xacid_7:
1408   	case Xacid_8:
1409   	  Cave[y][x] = Ytank_nB;
1410   	  if (Cave[y-2][x+1] == Xblank)
1411 	    Cave[y-2][x+1] = Yacid_splash_eB;
1412   	  if (Cave[y-2][x-1] == Xblank)
1413 	    Cave[y-2][x-1] = Yacid_splash_wB;
1414   	  Next[y][x] = Xblank;
1415   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1416   	  goto loop;
1417 
1418   	case Xblank:
1419   	case Yacid_splash_eB:
1420   	case Yacid_splash_wB:
1421   	case Xplant:
1422   	case Yplant:
1423   	case Zplayer:
1424   	  Cave[y][x] = Ytank_nB;
1425   	  Cave[y-1][x] = Ytank_n;
1426   	  Next[y][x] = Xblank;
1427   	  Next[y-1][x] = Xtank_n;
1428   	  play_element_sound(x, y, SAMPLE_tank, element);
1429   	  goto loop;
1430 
1431   	default:
1432   	  Cave[y][x] = Ytank_n_e;
1433   	  Next[y][x] = Xtank_goe;
1434   	  play_element_sound(x, y, SAMPLE_tank, element);
1435   	  goto loop;
1436       }
1437 
1438     /* --------------------------------------------------------------------- */
1439 
1440     case Xtank_e:
1441       if (tab_amoeba[Cave[y-1][x]] ||
1442 	  tab_amoeba[Cave[y][x+1]] ||
1443 	  tab_amoeba[Cave[y+1][x]] ||
1444 	  tab_amoeba[Cave[y][x-1]])
1445 	goto tank_boom;
1446 
1447       switch (Cave[y-1][x])
1448       {
1449   	case Xblank:
1450   	case Yacid_splash_eB:
1451   	case Yacid_splash_wB:
1452   	case Xplant:
1453   	case Yplant:
1454   	case Xacid_1:
1455   	case Xacid_2:
1456   	case Xacid_3:
1457   	case Xacid_4:
1458   	case Xacid_5:
1459   	case Xacid_6:
1460   	case Xacid_7:
1461   	case Xacid_8:
1462   	case Zplayer:
1463   	  Cave[y][x] = Ytank_e_n;
1464   	  Next[y][x] = Xtank_gon;
1465   	  play_element_sound(x, y, SAMPLE_tank, element);
1466   	  goto loop;
1467 
1468   	default:
1469   	  goto tank_goe;
1470       }
1471 
1472     case Xtank_goe:
1473       if (tab_amoeba[Cave[y-1][x]] ||
1474 	  tab_amoeba[Cave[y][x+1]] ||
1475 	  tab_amoeba[Cave[y+1][x]] ||
1476 	  tab_amoeba[Cave[y][x-1]])
1477 	goto tank_boom;
1478 
1479     tank_goe:
1480 
1481       switch (Cave[y][x+1])
1482       {
1483   	case Xacid_1:
1484   	case Xacid_2:
1485   	case Xacid_3:
1486   	case Xacid_4:
1487   	case Xacid_5:
1488   	case Xacid_6:
1489   	case Xacid_7:
1490   	case Xacid_8:
1491   	  Cave[y][x] = Ytank_eB;
1492   	  if (Cave[y-1][x+2] == Xblank)
1493 	    Cave[y-1][x+2] = Yacid_splash_eB;
1494   	  if (Cave[y-1][x] == Xblank)
1495 	    Cave[y-1][x] = Yacid_splash_wB;
1496   	  Next[y][x] = Xblank;
1497   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1498   	  goto loop;
1499 
1500   	case Xblank:
1501   	case Yacid_splash_eB:
1502   	case Yacid_splash_wB:
1503   	case Xplant:
1504   	case Yplant:
1505   	case Zplayer:
1506   	  Cave[y][x] = Ytank_eB;
1507   	  Cave[y][x+1] = Ytank_e;
1508   	  Next[y][x] = Xblank;
1509   	  Next[y][x+1] = Xtank_e;
1510   	  play_element_sound(x, y, SAMPLE_tank, element);
1511   	  goto loop;
1512 
1513   	default:
1514   	  Cave[y][x] = Ytank_e_s;
1515   	  Next[y][x] = Xtank_gos;
1516   	  play_element_sound(x, y, SAMPLE_tank, element);
1517   	  goto loop;
1518       }
1519 
1520     /* --------------------------------------------------------------------- */
1521 
1522     case Xtank_s:
1523       if (tab_amoeba[Cave[y-1][x]] ||
1524 	  tab_amoeba[Cave[y][x+1]] ||
1525 	  tab_amoeba[Cave[y+1][x]] ||
1526 	  tab_amoeba[Cave[y][x-1]])
1527 	goto tank_boom;
1528 
1529       switch (Cave[y][x+1])
1530       {
1531   	case Xblank:
1532   	case Yacid_splash_eB:
1533   	case Yacid_splash_wB:
1534   	case Xplant:
1535   	case Yplant:
1536   	case Xacid_1:
1537   	case Xacid_2:
1538   	case Xacid_3:
1539   	case Xacid_4:
1540   	case Xacid_5:
1541   	case Xacid_6:
1542   	case Xacid_7:
1543   	case Xacid_8:
1544   	case Zplayer:
1545   	  Cave[y][x] = Ytank_s_e;
1546   	  Next[y][x] = Xtank_goe;
1547   	  play_element_sound(x, y, SAMPLE_tank, element);
1548   	  goto loop;
1549 
1550   	default:
1551   	  goto tank_gos;
1552       }
1553 
1554     case Xtank_gos:
1555       if (tab_amoeba[Cave[y-1][x]] ||
1556 	  tab_amoeba[Cave[y][x+1]] ||
1557 	  tab_amoeba[Cave[y+1][x]] ||
1558 	  tab_amoeba[Cave[y][x-1]])
1559 	goto tank_boom;
1560 
1561     tank_gos:
1562 
1563       switch (Cave[y+1][x])
1564       {
1565   	case Xacid_1:
1566   	case Xacid_2:
1567   	case Xacid_3:
1568   	case Xacid_4:
1569   	case Xacid_5:
1570   	case Xacid_6:
1571   	case Xacid_7:
1572   	case Xacid_8:
1573   	  Cave[y][x] = Ytank_sB;
1574   	  if (Cave[y][x+1] == Xblank)
1575 	    Cave[y][x+1] = Yacid_splash_eB;
1576   	  if (Cave[y][x-1] == Xblank)
1577 	    Cave[y][x-1] = Yacid_splash_wB;
1578   	  Next[y][x] = Xblank;
1579   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1580   	  goto loop;
1581 
1582   	case Xblank:
1583   	case Yacid_splash_eB:
1584   	case Yacid_splash_wB:
1585   	case Xplant:
1586   	case Yplant:
1587   	case Zplayer:
1588   	  Cave[y][x] = Ytank_sB;
1589   	  Cave[y+1][x] = Ytank_s;
1590   	  Next[y][x] = Xblank;
1591   	  Next[y+1][x] = Xtank_s;
1592   	  play_element_sound(x, y, SAMPLE_tank, element);
1593   	  goto loop;
1594 
1595   	default:
1596   	  Cave[y][x] = Ytank_s_w;
1597   	  Next[y][x] = Xtank_gow;
1598   	  play_element_sound(x, y, SAMPLE_tank, element);
1599   	  goto loop;
1600       }
1601 
1602     /* --------------------------------------------------------------------- */
1603 
1604     case Xtank_w:
1605       if (tab_amoeba[Cave[y-1][x]] ||
1606 	  tab_amoeba[Cave[y][x+1]] ||
1607 	  tab_amoeba[Cave[y+1][x]] ||
1608 	  tab_amoeba[Cave[y][x-1]])
1609 	goto tank_boom;
1610 
1611       switch (Cave[y+1][x])
1612       {
1613   	case Xblank:
1614   	case Yacid_splash_eB:
1615   	case Yacid_splash_wB:
1616   	case Xplant:
1617   	case Yplant:
1618   	case Xacid_1:
1619   	case Xacid_2:
1620   	case Xacid_3:
1621   	case Xacid_4:
1622   	case Xacid_5:
1623   	case Xacid_6:
1624   	case Xacid_7:
1625   	case Xacid_8:
1626   	case Zplayer:
1627   	  Cave[y][x] = Ytank_w_s;
1628   	  Next[y][x] = Xtank_gos;
1629   	  play_element_sound(x, y, SAMPLE_tank, element);
1630   	  goto loop;
1631 
1632   	default:
1633   	  goto tank_gow;
1634       }
1635 
1636     case Xtank_gow:
1637       if (tab_amoeba[Cave[y-1][x]] ||
1638 	  tab_amoeba[Cave[y][x+1]] ||
1639 	  tab_amoeba[Cave[y+1][x]] ||
1640 	  tab_amoeba[Cave[y][x-1]])
1641 	goto tank_boom;
1642 
1643     tank_gow:
1644 
1645       switch (Cave[y][x-1])
1646       {
1647   	case Xacid_1:
1648   	case Xacid_2:
1649   	case Xacid_3:
1650   	case Xacid_4:
1651   	case Xacid_5:
1652   	case Xacid_6:
1653   	case Xacid_7:
1654   	case Xacid_8:
1655   	  Cave[y][x] = Ytank_wB;
1656   	  if (Cave[y-1][x] == Xblank)
1657 	    Cave[y-1][x] = Yacid_splash_eB;
1658   	  if (Cave[y-1][x-2] == Xblank)
1659 	    Cave[y-1][x-2] = Yacid_splash_wB;
1660   	  Next[y][x] = Xblank;
1661   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
1662   	  goto loop;
1663 
1664   	case Xblank:
1665   	case Yacid_splash_eB:
1666   	case Yacid_splash_wB:
1667   	case Xplant:
1668   	case Yplant:
1669   	case Zplayer:
1670   	  Cave[y][x] = Ytank_wB;
1671   	  Cave[y][x-1] = Ytank_w;
1672   	  Next[y][x] = Xblank;
1673   	  Next[y][x-1] = Xtank_w;
1674   	  play_element_sound(x, y, SAMPLE_tank, element);
1675   	  goto loop;
1676 
1677   	default:
1678   	  Cave[y][x] = Ytank_w_n;
1679   	  Next[y][x] = Xtank_gon;
1680   	  play_element_sound(x, y, SAMPLE_tank, element);
1681   	  goto loop;
1682       }
1683 
1684     /* --------------------------------------------------------------------- */
1685 
1686     case Xandroid:
1687 
1688     android:
1689 
1690       if (lev.android_clone_cnt == 0)
1691       {
1692   	if (Cave[y-1][x-1] != Xblank &&
1693 	    Cave[y-1][x]   != Xblank &&
1694 	    Cave[y-1][x+1] != Xblank &&
1695 	    Cave[y][x-1]   != Xblank &&
1696 	    Cave[y][x+1]   != Xblank &&
1697 	    Cave[y+1][x-1] != Xblank &&
1698 	    Cave[y+1][x]   != Xblank &&
1699 	    Cave[y+1][x+1] != Xblank)
1700 	  goto android_move;
1701 
1702   	switch (RANDOM & 7)
1703 	{
1704 	  /* randomly find an object to clone */
1705 
1706   	  case 0: /* S,NE,W,NW,SE,E,SW,N */
1707 	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1708 	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1709 	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1710 	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1711 	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1712 	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1713 	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1714 	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1715 	    goto android_move;
1716 
1717   	  case 1: /* NW,SE,N,S,NE,SW,E,W */
1718 	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1719 	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1720 	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1721 	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1722 	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1723 	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1724 	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1725 	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1726 	    goto android_move;
1727 
1728   	  case 2: /* SW,E,S,W,N,NW,SE,NE */
1729 	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1730 	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1731 	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1732 	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1733 	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1734 	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1735 	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1736 	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1737 	    goto android_move;
1738 
1739   	  case 3: /* N,SE,NE,E,W,S,NW,SW */
1740 	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1741 	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1742 	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1743 	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1744 	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1745 	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1746 	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1747 	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1748 	    goto android_move;
1749 
1750   	  case 4: /* SE,NW,E,NE,SW,W,N,S */
1751   	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1752   	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1753   	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1754   	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1755   	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1756   	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1757   	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1758   	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1759   	    goto android_move;
1760 
1761   	  case 5: /* NE,W,SE,SW,S,N,E,NW */
1762   	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1763   	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1764   	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1765   	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1766   	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1767   	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1768   	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1769   	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1770   	    goto android_move;
1771 
1772   	  case 6: /* E,N,SW,S,NW,NE,SE,W */
1773   	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1774   	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1775   	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1776   	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1777   	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1778   	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1779   	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1780   	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1781   	    goto android_move;
1782 
1783   	  case 7: /* W,SW,NW,N,E,SE,NE,S */
1784   	    temp= lev.android_array[Cave[y][x-1]];   if (temp != Xblank) break;
1785   	    temp= lev.android_array[Cave[y+1][x-1]]; if (temp != Xblank) break;
1786   	    temp= lev.android_array[Cave[y-1][x-1]]; if (temp != Xblank) break;
1787   	    temp= lev.android_array[Cave[y-1][x]];   if (temp != Xblank) break;
1788   	    temp= lev.android_array[Cave[y][x+1]];   if (temp != Xblank) break;
1789   	    temp= lev.android_array[Cave[y+1][x+1]]; if (temp != Xblank) break;
1790   	    temp= lev.android_array[Cave[y-1][x+1]]; if (temp != Xblank) break;
1791   	    temp= lev.android_array[Cave[y+1][x]];   if (temp != Xblank) break;
1792   	    goto android_move;
1793   	}
1794 
1795   	Next[y][x] = temp;	/* the item we chose to clone */
1796   	play_element_sound(x, y, SAMPLE_android_clone, temp);
1797 
1798   	switch (RANDOM & 7)
1799 	{
1800 	  /* randomly find a direction to move */
1801 
1802   	  case 0: /* S,NE,W,NW,SE,E,SW,N */
1803   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1804   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1805   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1806   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1807   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1808   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1809   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1810   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1811   	    goto android_move;
1812 
1813   	  case 1: /* NW,SE,N,S,NE,SW,E,W */
1814   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1815   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1816   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1817   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1818   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1819   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1820   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1821   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1822   	    goto android_move;
1823 
1824   	  case 2: /* SW,E,S,W,N,NW,SE,NE */
1825   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1826   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1827   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1828   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1829   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1830   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1831   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1832   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1833   	    goto android_move;
1834 
1835   	  case 3: /* N,SE,NE,E,W,S,NW,SW */
1836   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1837   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1838   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1839   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1840   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1841   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1842   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1843   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1844   	    goto android_move;
1845 
1846   	  case 4: /* SE,NW,E,NE,SW,W,N,S */
1847   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1848   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1849   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1850   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1851   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1852   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1853   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1854   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1855   	    goto android_move;
1856 
1857   	  case 5: /* NE,W,SE,SW,S,N,E,NW */
1858   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1859   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1860   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1861   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1862   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1863   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1864   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1865   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1866   	    goto android_move;
1867 
1868   	  case 6: /* E,N,SW,S,NW,NE,SE,W */
1869   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1870   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1871   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1872   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1873   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1874   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1875   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1876   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1877   	    goto android_move;
1878 
1879   	  case 7: /* W,SW,NW,N,E,SE,NE,S */
1880   	    if (Cave[y][x-1] == Xblank)   goto android_w;
1881   	    if (Cave[y+1][x-1] == Xblank) goto android_sw;
1882   	    if (Cave[y-1][x-1] == Xblank) goto android_nw;
1883   	    if (Cave[y-1][x] == Xblank)   goto android_n;
1884   	    if (Cave[y][x+1] == Xblank)   goto android_e;
1885   	    if (Cave[y+1][x+1] == Xblank) goto android_se;
1886   	    if (Cave[y-1][x+1] == Xblank) goto android_ne;
1887   	    if (Cave[y+1][x] == Xblank)   goto android_s;
1888   	    goto android_move;
1889   	}
1890       }
1891 
1892     android_move:
1893       if (lev.android_move_cnt == 0)
1894       {
1895   	if (Cave[y-1][x-1] == Zplayer ||
1896 	    Cave[y-1][x]   == Zplayer ||
1897 	    Cave[y-1][x+1] == Zplayer ||
1898 	    Cave[y][x-1]   == Zplayer ||
1899 	    Cave[y][x+1]   == Zplayer ||
1900 	    Cave[y+1][x-1] == Zplayer ||
1901 	    Cave[y+1][x]   == Zplayer ||
1902 	    Cave[y+1][x+1] == Zplayer)
1903 	  goto android_still;
1904 
1905 #if 1
1906 
1907 	set_nearest_player_xy(x, y, &dx, &dy);
1908 
1909 #else
1910 
1911   	if (ply1.alive && ply2.alive)
1912 	{
1913   	  if ((ply1.x > x ? ply1.x - x : x - ply1.x) +
1914 	      (ply1.y > y ? ply1.y - y : y - ply1.y) <
1915 	      (ply2.x > x ? ply2.x - x : x - ply2.x) +
1916 	      (ply2.y > y ? ply2.y - y : y - ply2.y))
1917 	  {
1918   	    dx = ply1.x;
1919   	    dy = ply1.y;
1920   	  }
1921 	  else
1922 	  {
1923   	    dx = ply2.x;
1924   	    dy = ply2.y;
1925   	  }
1926   	}
1927 	else if (ply1.alive)
1928 	{
1929   	  dx = ply1.x;
1930   	  dy = ply1.y;
1931   	}
1932 	else if (ply2.alive)
1933 	{
1934   	  dx = ply2.x;
1935   	  dy = ply2.y;
1936   	}
1937 	else
1938 	{
1939   	  dx = 0;
1940   	  dy = 0;
1941   	}
1942 
1943 #endif
1944 
1945   	Next[y][x] = Xblank;	/* assume we will move */
1946   	temp = ((x < dx) + 1 - (x > dx)) + ((y < dy) + 1 - (y > dy)) * 3;
1947 
1948   	if (RANDOM & 1)
1949 	{
1950   	  switch (temp)
1951 	  {
1952 	    /* attempt clockwise move first if direct path is blocked */
1953 
1954   	    case 0: /* north west */
1955   	      if (tab_android_move[Cave[y-1][x-1]]) goto android_nw;
1956   	      if (tab_android_move[Cave[y-1][x]])   goto android_n;
1957   	      if (tab_android_move[Cave[y][x-1]])   goto android_w;
1958   	      break;
1959 
1960   	    case 1: /* north */
1961   	      if (tab_android_move[Cave[y-1][x]])   goto android_n;
1962   	      if (tab_android_move[Cave[y-1][x+1]]) goto android_ne;
1963   	      if (tab_android_move[Cave[y-1][x-1]]) goto android_nw;
1964   	      break;
1965 
1966   	    case 2: /* north east */
1967   	      if (tab_android_move[Cave[y-1][x+1]]) goto android_ne;
1968   	      if (tab_android_move[Cave[y][x+1]])   goto android_e;
1969   	      if (tab_android_move[Cave[y-1][x]])   goto android_n;
1970   	      break;
1971 
1972   	    case 3: /* west */
1973   	      if (tab_android_move[Cave[y][x-1]])   goto android_w;
1974   	      if (tab_android_move[Cave[y-1][x-1]]) goto android_nw;
1975   	      if (tab_android_move[Cave[y+1][x-1]]) goto android_sw;
1976   	      break;
1977 
1978   	    case 4: /* nowhere */
1979   	      break;
1980 
1981   	    case 5: /* east */
1982   	      if (tab_android_move[Cave[y][x+1]])   goto android_e;
1983   	      if (tab_android_move[Cave[y+1][x+1]]) goto android_se;
1984   	      if (tab_android_move[Cave[y-1][x+1]]) goto android_ne;
1985   	      break;
1986 
1987   	    case 6: /* south west */
1988   	      if (tab_android_move[Cave[y+1][x-1]]) goto android_sw;
1989   	      if (tab_android_move[Cave[y][x-1]])   goto android_w;
1990   	      if (tab_android_move[Cave[y+1][x]])   goto android_s;
1991   	      break;
1992 
1993   	    case 7: /* south */
1994   	      if (tab_android_move[Cave[y+1][x]])   goto android_s;
1995   	      if (tab_android_move[Cave[y+1][x-1]]) goto android_sw;
1996   	      if (tab_android_move[Cave[y+1][x+1]]) goto android_se;
1997   	      break;
1998 
1999   	    case 8: /* south east */
2000   	      if (tab_android_move[Cave[y+1][x+1]]) goto android_se;
2001   	      if (tab_android_move[Cave[y+1][x]])   goto android_s;
2002   	      if (tab_android_move[Cave[y][x+1]])   goto android_e;
2003   	      break;
2004 	  }
2005 	}
2006 	else
2007 	{
2008 	  switch (temp)
2009 	  {
2010 	    /* attempt counterclockwise move first if direct path is blocked */
2011 
2012   	    case 0: /* north west */
2013   	      if (tab_android_move[Cave[y-1][x-1]]) goto android_nw;
2014   	      if (tab_android_move[Cave[y][x-1]])   goto android_w;
2015   	      if (tab_android_move[Cave[y-1][x]])   goto android_n;
2016   	      break;
2017 
2018   	    case 1: /* north */
2019   	      if (tab_android_move[Cave[y-1][x]])   goto android_n;
2020   	      if (tab_android_move[Cave[y-1][x-1]]) goto android_nw;
2021   	      if (tab_android_move[Cave[y-1][x+1]]) goto android_ne;
2022   	      break;
2023 
2024   	    case 2: /* north east */
2025   	      if (tab_android_move[Cave[y-1][x+1]]) goto android_ne;
2026   	      if (tab_android_move[Cave[y-1][x]])   goto android_n;
2027   	      if (tab_android_move[Cave[y][x+1]])   goto android_e;
2028   	      break;
2029 
2030   	    case 3: /* west */
2031   	      if (tab_android_move[Cave[y][x-1]])   goto android_w;
2032   	      if (tab_android_move[Cave[y+1][x-1]]) goto android_sw;
2033   	      if (tab_android_move[Cave[y-1][x-1]]) goto android_nw;
2034   	      break;
2035 
2036   	    case 4: /* nowhere */
2037   	      break;
2038 
2039   	    case 5: /* east */
2040   	      if (tab_android_move[Cave[y][x+1]])   goto android_e;
2041   	      if (tab_android_move[Cave[y-1][x+1]]) goto android_ne;
2042   	      if (tab_android_move[Cave[y+1][x+1]]) goto android_se;
2043   	      break;
2044 
2045   	    case 6: /* south west */
2046   	      if (tab_android_move[Cave[y+1][x-1]]) goto android_sw;
2047   	      if (tab_android_move[Cave[y+1][x]])   goto android_s;
2048   	      if (tab_android_move[Cave[y][x-1]])   goto android_w;
2049   	      break;
2050 
2051   	    case 7: /* south */
2052   	      if (tab_android_move[Cave[y+1][x]])   goto android_s;
2053   	      if (tab_android_move[Cave[y+1][x+1]]) goto android_se;
2054   	      if (tab_android_move[Cave[y+1][x-1]]) goto android_sw;
2055   	      break;
2056 
2057   	    case 8: /* south east */
2058   	      if (tab_android_move[Cave[y+1][x+1]]) goto android_se;
2059   	      if (tab_android_move[Cave[y][x+1]])   goto android_e;
2060   	      if (tab_android_move[Cave[y+1][x]])   goto android_s;
2061   	      break;
2062 	  }
2063 	}
2064       }
2065 
2066     android_still:
2067 
2068       Next[y][x] = Xandroid;
2069       goto loop;
2070 
2071     android_n:
2072 
2073       Cave[y][x] = Yandroid_nB;
2074       Cave[y-1][x] = Yandroid_n;
2075       Next[y-1][x] = Xandroid;
2076       play_element_sound(x, y, SAMPLE_android_move, element);
2077       goto loop;
2078 
2079     android_ne:
2080 
2081       Cave[y][x] = Yandroid_neB;
2082       Cave[y-1][x+1] = Yandroid_ne;
2083       Next[y-1][x+1] = Xandroid;
2084       play_element_sound(x, y, SAMPLE_android_move, element);
2085       goto loop;
2086 
2087     android_e:
2088 
2089       Cave[y][x] = Yandroid_eB;
2090       Cave[y][x+1] = Yandroid_e;
2091       Next[y][x+1] = Xandroid;
2092       play_element_sound(x, y, SAMPLE_android_move, element);
2093       goto loop;
2094 
2095     android_se:
2096 
2097       Cave[y][x] = Yandroid_seB;
2098       Cave[y+1][x+1] = Yandroid_se;
2099       Next[y+1][x+1] = Xandroid;
2100       play_element_sound(x, y, SAMPLE_android_move, element);
2101       goto loop;
2102 
2103     android_s:
2104 
2105       Cave[y][x] = Yandroid_sB;
2106       Cave[y+1][x] = Yandroid_s;
2107       Next[y+1][x] = Xandroid;
2108       play_element_sound(x, y, SAMPLE_android_move, element);
2109       goto loop;
2110 
2111     android_sw:
2112 
2113       Cave[y][x] = Yandroid_swB;
2114       Cave[y+1][x-1] = Yandroid_sw;
2115       Next[y+1][x-1] = Xandroid;
2116       play_element_sound(x, y, SAMPLE_android_move, element);
2117       goto loop;
2118 
2119     android_w:
2120 
2121       Cave[y][x] = Yandroid_wB;
2122       Cave[y][x-1] = Yandroid_w;
2123       Next[y][x-1] = Xandroid;
2124       play_element_sound(x, y, SAMPLE_android_move, element);
2125       goto loop;
2126 
2127     android_nw:
2128 
2129       Cave[y][x] = Yandroid_nwB;
2130       Cave[y-1][x-1] = Yandroid_nw;
2131       Next[y-1][x-1] = Xandroid;
2132       play_element_sound(x, y, SAMPLE_android_move, element);
2133       goto loop;
2134 
2135     /* --------------------------------------------------------------------- */
2136 
2137     case Xandroid_1_n:
2138       switch (Cave[y-1][x])
2139       {
2140   	case Xacid_1:
2141   	case Xacid_2:
2142   	case Xacid_3:
2143   	case Xacid_4:
2144   	case Xacid_5:
2145   	case Xacid_6:
2146   	case Xacid_7:
2147   	case Xacid_8:
2148   	  Cave[y][x] = Yandroid_nB;
2149   	  if (Cave[y-2][x+1] == Xblank)
2150 	    Cave[y-2][x+1] = Yacid_splash_eB;
2151   	  if (Cave[y-2][x-1] == Xblank)
2152 	    Cave[y-2][x-1] = Yacid_splash_wB;
2153   	  Next[y][x] = Xblank;
2154   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2155   	  goto loop;
2156 
2157   	case Xblank:
2158   	case Yacid_splash_eB:
2159   	case Yacid_splash_wB:
2160   	  Cave[y][x] = Yandroid_nB;
2161   	  Cave[y-1][x] = Yandroid_n;
2162   	  Next[y][x] = Xblank;
2163   	  Next[y-1][x] = Xandroid;
2164   	  play_element_sound(x, y, SAMPLE_android_move, element);
2165   	  goto loop;
2166 
2167   	default:
2168   	  goto android;
2169       }
2170 
2171     case Xandroid_2_n:
2172       switch (Cave[y-1][x])
2173       {
2174   	case Xacid_1:
2175   	case Xacid_2:
2176   	case Xacid_3:
2177   	case Xacid_4:
2178   	case Xacid_5:
2179   	case Xacid_6:
2180   	case Xacid_7:
2181   	case Xacid_8:
2182   	  Cave[y][x] = Yandroid_nB;
2183   	  if (Cave[y-2][x+1] == Xblank)
2184 	    Cave[y-2][x+1] = Yacid_splash_eB;
2185   	  if (Cave[y-2][x-1] == Xblank)
2186 	    Cave[y-2][x-1] = Yacid_splash_wB;
2187   	  Next[y][x] = Xblank;
2188   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2189   	  goto loop;
2190 
2191   	case Xblank:
2192   	case Yacid_splash_eB:
2193   	case Yacid_splash_wB:
2194   	  Cave[y][x] = Yandroid_nB;
2195   	  Cave[y-1][x] = Yandroid_n;
2196   	  Next[y][x] = Xblank;
2197   	  Next[y-1][x] = Xandroid_1_n;
2198   	  play_element_sound(x, y, SAMPLE_android_move, element);
2199   	  goto loop;
2200 
2201   	default:
2202   	  goto android;
2203       }
2204 
2205     /* --------------------------------------------------------------------- */
2206 
2207     case Xandroid_1_e:
2208       switch (Cave[y][x+1])
2209       {
2210   	case Xacid_1:
2211   	case Xacid_2:
2212   	case Xacid_3:
2213   	case Xacid_4:
2214   	case Xacid_5:
2215   	case Xacid_6:
2216   	case Xacid_7:
2217   	case Xacid_8:
2218   	  Cave[y][x] = Yandroid_eB;
2219   	  if (Cave[y-1][x+2] == Xblank)
2220 	    Cave[y-1][x+2] = Yacid_splash_eB;
2221   	  if (Cave[y-1][x] == Xblank)
2222 	    Cave[y-1][x] = Yacid_splash_wB;
2223   	  Next[y][x] = Xblank;
2224   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2225   	  goto loop;
2226 
2227   	case Xblank:
2228   	case Yacid_splash_eB:
2229   	case Yacid_splash_wB:
2230   	  Cave[y][x] = Yandroid_eB;
2231   	  Cave[y][x+1] = Yandroid_e;
2232   	  Next[y][x] = Xblank;
2233   	  Next[y][x+1] = Xandroid;
2234   	  play_element_sound(x, y, SAMPLE_android_move, element);
2235   	  goto loop;
2236 
2237   	default:
2238   	  goto android;
2239       }
2240 
2241     case Xandroid_2_e:
2242       switch (Cave[y][x+1])
2243       {
2244   	case Xacid_1:
2245   	case Xacid_2:
2246   	case Xacid_3:
2247   	case Xacid_4:
2248   	case Xacid_5:
2249   	case Xacid_6:
2250   	case Xacid_7:
2251   	case Xacid_8:
2252   	  Cave[y][x] = Yandroid_eB;
2253   	  if (Cave[y-1][x+2] == Xblank)
2254 	    Cave[y-1][x+2] = Yacid_splash_eB;
2255   	  if (Cave[y-1][x] == Xblank)
2256 	    Cave[y-1][x] = Yacid_splash_wB;
2257   	  Next[y][x] = Xblank;
2258   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2259   	  goto loop;
2260 
2261   	case Xblank:
2262   	case Yacid_splash_eB:
2263   	case Yacid_splash_wB:
2264   	  Cave[y][x] = Yandroid_eB;
2265   	  Cave[y][x+1] = Yandroid_e;
2266   	  Next[y][x] = Xblank;
2267   	  Next[y][x+1] = Xandroid_1_e;
2268   	  play_element_sound(x, y, SAMPLE_android_move, element);
2269   	  goto loop;
2270 
2271   	default:
2272   	  goto android;
2273       }
2274 
2275     /* --------------------------------------------------------------------- */
2276 
2277     case Xandroid_1_s:
2278       switch (Cave[y+1][x])
2279       {
2280   	case Xacid_1:
2281   	case Xacid_2:
2282   	case Xacid_3:
2283   	case Xacid_4:
2284   	case Xacid_5:
2285   	case Xacid_6:
2286   	case Xacid_7:
2287   	case Xacid_8:
2288   	  Cave[y][x] = Yandroid_sB;
2289   	  if (Cave[y][x+1] == Xblank)
2290 	    Cave[y][x+1] = Yacid_splash_eB;
2291   	  if (Cave[y][x-1] == Xblank)
2292 	    Cave[y][x-1] = Yacid_splash_wB;
2293   	  Next[y][x] = Xblank;
2294   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2295   	  goto loop;
2296 
2297   	case Xblank:
2298   	case Yacid_splash_eB:
2299   	case Yacid_splash_wB:
2300   	  Cave[y][x] = Yandroid_sB;
2301   	  Cave[y+1][x] = Yandroid_s;
2302   	  Next[y][x] = Xblank;
2303   	  Next[y+1][x] = Xandroid;
2304   	  play_element_sound(x, y, SAMPLE_android_move, element);
2305   	  goto loop;
2306 
2307   	default:
2308   	  goto android;
2309       }
2310 
2311     case Xandroid_2_s:
2312       switch (Cave[y+1][x])
2313       {
2314   	case Xacid_1:
2315   	case Xacid_2:
2316   	case Xacid_3:
2317   	case Xacid_4:
2318   	case Xacid_5:
2319   	case Xacid_6:
2320   	case Xacid_7:
2321   	case Xacid_8:
2322   	  Cave[y][x] = Yandroid_sB;
2323   	  if (Cave[y][x+1] == Xblank)
2324 	    Cave[y][x+1] = Yacid_splash_eB;
2325   	  if (Cave[y][x-1] == Xblank)
2326 	    Cave[y][x-1] = Yacid_splash_wB;
2327   	  Next[y][x] = Xblank;
2328   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2329   	  goto loop;
2330 
2331   	case Xblank:
2332   	case Yacid_splash_eB:
2333   	case Yacid_splash_wB:
2334   	  Cave[y][x] = Yandroid_sB;
2335   	  Cave[y+1][x] = Yandroid_s;
2336   	  Next[y][x] = Xblank;
2337   	  Next[y+1][x] = Xandroid_1_s;
2338   	  play_element_sound(x, y, SAMPLE_android_move, element);
2339   	  goto loop;
2340 
2341   	default:
2342   	  goto android;
2343       }
2344 
2345     /* --------------------------------------------------------------------- */
2346 
2347     case Xandroid_1_w:
2348       switch (Cave[y][x-1])
2349       {
2350   	case Xacid_1:
2351   	case Xacid_2:
2352   	case Xacid_3:
2353   	case Xacid_4:
2354   	case Xacid_5:
2355   	case Xacid_6:
2356   	case Xacid_7:
2357   	case Xacid_8:
2358   	  Cave[y][x] = Yandroid_wB;
2359   	  if (Cave[y-1][x] == Xblank)
2360 	    Cave[y-1][x] = Yacid_splash_eB;
2361   	  if (Cave[y-1][x-2] == Xblank)
2362 	    Cave[y-1][x-2] = Yacid_splash_wB;
2363   	  Next[y][x] = Xblank;
2364   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2365   	  goto loop;
2366 
2367   	case Xblank:
2368   	case Yacid_splash_eB:
2369   	case Yacid_splash_wB:
2370   	  Cave[y][x] = Yandroid_wB;
2371   	  Cave[y][x-1] = Yandroid_w;
2372   	  Next[y][x] = Xblank;
2373   	  Next[y][x-1] = Xandroid;
2374   	  play_element_sound(x, y, SAMPLE_android_move, element);
2375   	  goto loop;
2376 
2377   	default:
2378   	  goto android;
2379       }
2380 
2381     case Xandroid_2_w:
2382       switch (Cave[y][x-1])
2383       {
2384   	case Xacid_1:
2385   	case Xacid_2:
2386   	case Xacid_3:
2387   	case Xacid_4:
2388   	case Xacid_5:
2389   	case Xacid_6:
2390   	case Xacid_7:
2391   	case Xacid_8:
2392   	  Cave[y][x] = Yandroid_wB;
2393   	  if (Cave[y-1][x] == Xblank)
2394 	    Cave[y-1][x] = Yacid_splash_eB;
2395   	  if (Cave[y-1][x-2] == Xblank)
2396 	    Cave[y-1][x-2] = Yacid_splash_wB;
2397   	  Next[y][x] = Xblank;
2398   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2399   	  goto loop;
2400 
2401   	case Xblank:
2402   	case Yacid_splash_eB:
2403   	case Yacid_splash_wB:
2404   	  Cave[y][x] = Yandroid_wB;
2405   	  Cave[y][x-1] = Yandroid_w;
2406   	  Next[y][x] = Xblank;
2407   	  Next[y][x-1] = Xandroid_1_w;
2408   	  play_element_sound(x, y, SAMPLE_android_move, element);
2409   	  goto loop;
2410 
2411   	default:
2412   	  goto android;
2413       }
2414 
2415     /* --------------------------------------------------------------------- */
2416 
2417     case Xspring:
2418       switch (Cave[y+1][x])
2419       {
2420   	case Xacid_1:
2421   	case Xacid_2:
2422   	case Xacid_3:
2423   	case Xacid_4:
2424   	case Xacid_5:
2425   	case Xacid_6:
2426   	case Xacid_7:
2427   	case Xacid_8:
2428   	  Cave[y][x] = Yspring_sB;
2429   	  if (Cave[y][x+1] == Xblank)
2430 	    Cave[y][x+1] = Yacid_splash_eB;
2431   	  if (Cave[y][x-1] == Xblank)
2432 	    Cave[y][x-1] = Yacid_splash_wB;
2433   	  Next[y][x] = Xblank;
2434   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2435   	  goto loop;
2436 
2437   	case Xblank:
2438   	case Yacid_splash_eB:
2439   	case Yacid_splash_wB:
2440   	case Xplant:
2441   	case Yplant:
2442   	  Cave[y][x] = Yspring_sB;
2443   	  Cave[y+1][x] = Yspring_s;
2444   	  Next[y][x] = Xblank;
2445   	  Next[y+1][x] = Xspring_fall;
2446   	  goto loop;
2447 
2448   	case Xspring:
2449   	case Xspring_pause:
2450   	case Xspring_e:
2451   	case Xspring_w:
2452   	case Xandroid:
2453   	case Xandroid_1_n:
2454   	case Xandroid_2_n:
2455   	case Xandroid_1_e:
2456   	case Xandroid_2_e:
2457   	case Xandroid_1_s:
2458   	case Xandroid_2_s:
2459   	case Xandroid_1_w:
2460   	case Xandroid_2_w:
2461   	case Xstone:
2462   	case Xstone_pause:
2463   	case Xemerald:
2464   	case Xemerald_pause:
2465   	case Xdiamond:
2466   	case Xdiamond_pause:
2467   	case Xbomb:
2468   	case Xbomb_pause:
2469   	case Xballoon:
2470   	case Xacid_ne:
2471   	case Xacid_nw:
2472   	case Xball_1:
2473   	case Xball_2:
2474   	case Xnut:
2475   	case Xnut_pause:
2476   	case Xgrow_ns:
2477   	case Xgrow_ew:
2478   	case Xkey_1:
2479   	case Xkey_2:
2480   	case Xkey_3:
2481   	case Xkey_4:
2482   	case Xkey_5:
2483   	case Xkey_6:
2484   	case Xkey_7:
2485   	case Xkey_8:
2486   	case Xbumper:
2487   	case Xswitch:
2488   	case Xround_wall_1:
2489   	case Xround_wall_2:
2490   	case Xround_wall_3:
2491   	case Xround_wall_4:
2492   	  if (RANDOM & 1)
2493 	  {
2494   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
2495 	    {
2496   	      Cave[y][x] = Yspring_eB;
2497   	      Cave[y][x+1] = Yspring_e;
2498   	      if (Cave[y+1][x] == Xbumper)
2499 		Cave[y+1][x] = XbumperB;
2500   	      Next[y][x] = Xblank;
2501 
2502 #ifdef BAD_SPRING
2503   	      Next[y][x+1] = Xspring_e;
2504 #else
2505   	      Next[y][x+1] = Xspring_pause;
2506 #endif
2507 
2508   	      goto loop;
2509   	    }
2510 
2511   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
2512 	    {
2513   	      Cave[y][x] = Yspring_wB;
2514   	      Cave[y][x-1] = Yspring_w;
2515   	      if (Cave[y+1][x] == Xbumper)
2516 		Cave[y+1][x] = XbumperB;
2517   	      Next[y][x] = Xblank;
2518 
2519 #ifdef BAD_SPRING
2520   	      Next[y][x-1] = Xspring_w;
2521 #else
2522   	      Next[y][x-1] = Xspring_pause;
2523 #endif
2524 
2525   	      goto loop;
2526   	    }
2527   	  }
2528 	  else
2529 	  {
2530   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
2531 	    {
2532   	      Cave[y][x] = Yspring_wB;
2533   	      Cave[y][x-1] = Yspring_w;
2534   	      if (Cave[y+1][x] == Xbumper)
2535 		Cave[y+1][x] = XbumperB;
2536   	      Next[y][x] = Xblank;
2537 
2538 #ifdef BAD_SPRING
2539   	      Next[y][x-1] = Xspring_w;
2540 #else
2541   	      Next[y][x-1] = Xspring_pause;
2542 #endif
2543 
2544   	      goto loop;
2545   	    }
2546 
2547   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
2548 	    {
2549   	      Cave[y][x] = Yspring_eB;
2550   	      Cave[y][x+1] = Yspring_e;
2551   	      if (Cave[y+1][x] == Xbumper)
2552 		Cave[y+1][x] = XbumperB;
2553   	      Next[y][x] = Xblank;
2554 
2555 #ifdef BAD_SPRING
2556   	      Next[y][x+1] = Xspring_e;
2557 #else
2558   	      Next[y][x+1] = Xspring_pause;
2559 #endif
2560 
2561   	      goto loop;
2562   	    }
2563   	  }
2564 
2565   	default:
2566   	  goto loop;
2567       }
2568 
2569     /* --------------------------------------------------------------------- */
2570 
2571     case Xspring_pause:
2572       switch (Cave[y+1][x])
2573       {
2574   	case Xacid_1:
2575   	case Xacid_2:
2576   	case Xacid_3:
2577   	case Xacid_4:
2578   	case Xacid_5:
2579   	case Xacid_6:
2580   	case Xacid_7:
2581   	case Xacid_8:
2582   	  Cave[y][x] = Yspring_sB;
2583   	  if (Cave[y][x+1] == Xblank)
2584 	    Cave[y][x+1] = Yacid_splash_eB;
2585   	  if (Cave[y][x-1] == Xblank)
2586 	    Cave[y][x-1] = Yacid_splash_wB;
2587   	  Next[y][x] = Xblank;
2588   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2589   	  goto loop;
2590 
2591   	case Xblank:
2592   	case Yacid_splash_eB:
2593   	case Yacid_splash_wB:
2594   	  Cave[y][x] = Yspring_sB;
2595   	  Cave[y+1][x] = Yspring_s;
2596   	  Next[y][x] = Xblank;
2597   	  Next[y+1][x] = Xspring_fall;
2598   	  goto loop;
2599 
2600   	default:
2601   	  Cave[y][x] = Xspring;
2602   	  Next[y][x] = Xspring;
2603   	  goto loop;
2604       }
2605 
2606     /* --------------------------------------------------------------------- */
2607 
2608     case Xspring_e:
2609       switch (Cave[y+1][x])
2610       {
2611   	case Xacid_1:
2612   	case Xacid_2:
2613   	case Xacid_3:
2614   	case Xacid_4:
2615   	case Xacid_5:
2616   	case Xacid_6:
2617   	case Xacid_7:
2618   	case Xacid_8:
2619   	  Cave[y][x] = Yspring_sB;
2620   	  if (Cave[y][x+1] == Xblank)
2621 	    Cave[y][x+1] = Yacid_splash_eB;
2622   	  if (Cave[y][x-1] == Xblank)
2623 	    Cave[y][x-1] = Yacid_splash_wB;
2624   	  Next[y][x] = Xblank;
2625   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2626   	  goto loop;
2627 
2628   	case Xblank:
2629   	case Yacid_splash_eB:
2630   	case Yacid_splash_wB:
2631   	  Cave[y][x] = Yspring_sB;
2632   	  Cave[y+1][x] = Yspring_s;
2633   	  Next[y][x] = Xblank;
2634   	  Next[y+1][x] = Xspring_fall;
2635   	  goto loop;
2636 
2637   	case Xbumper:
2638   	  Cave[y+1][x] = XbumperB;
2639       }
2640 
2641       switch (Cave[y][x+1])
2642       {
2643   	case Xacid_1:
2644   	case Xacid_2:
2645   	case Xacid_3:
2646   	case Xacid_4:
2647   	case Xacid_5:
2648   	case Xacid_6:
2649   	case Xacid_7:
2650   	case Xacid_8:
2651   	  Cave[y][x] = Yspring_eB;
2652   	  if (Cave[y-1][x+2] == Xblank)
2653 	    Cave[y-1][x+2] = Yacid_splash_eB;
2654   	  if (Cave[y-1][x] == Xblank)
2655 	    Cave[y-1][x] = Yacid_splash_wB;
2656   	  Next[y][x] = Xblank;
2657   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2658   	  goto loop;
2659 
2660   	case Xblank:
2661   	case Yacid_splash_eB:
2662   	case Yacid_splash_wB:
2663   	case Yalien_nB:
2664   	case Yalien_eB:
2665   	case Yalien_sB:
2666   	case Yalien_wB:
2667   	  Cave[y][x] = Yspring_eB;
2668   	  Cave[y][x+1] = Yspring_e;
2669   	  Next[y][x] = Xblank;
2670   	  Next[y][x+1] = Xspring_e;
2671   	  goto loop;
2672 
2673   	case Xalien:
2674   	case Xalien_pause:
2675   	case Yalien_n:
2676   	case Yalien_e:
2677   	case Yalien_s:
2678   	case Yalien_w:
2679   	  Cave[y][x] = Yspring_kill_eB;
2680   	  Cave[y][x+1] = Yspring_kill_e;
2681   	  Next[y][x] = Xblank;
2682   	  Next[y][x+1] = Xspring_e;
2683   	  play_element_sound(x, y, SAMPLE_slurp, Xalien);
2684   	  score += lev.slurp_score;
2685   	  goto loop;
2686 
2687   	case Xbumper:
2688   	case XbumperB:
2689   	  Cave[y][x+1] = XbumperB;
2690   	  Next[y][x] = Xspring_w;
2691   	  play_element_sound(x, y, SAMPLE_spring, Xspring);
2692   	  goto loop;
2693 
2694   	default:
2695   	  Cave[y][x] = Xspring;
2696   	  Next[y][x] = Xspring;
2697   	  play_element_sound(x, y, SAMPLE_spring, Xspring);
2698   	  goto loop;
2699       }
2700 
2701     /* --------------------------------------------------------------------- */
2702 
2703     case Xspring_w:
2704       switch (Cave[y+1][x])
2705       {
2706   	case Xacid_1:
2707   	case Xacid_2:
2708   	case Xacid_3:
2709   	case Xacid_4:
2710   	case Xacid_5:
2711   	case Xacid_6:
2712   	case Xacid_7:
2713   	case Xacid_8:
2714   	  Cave[y][x] = Yspring_sB;
2715   	  if (Cave[y][x+1] == Xblank)
2716 	    Cave[y][x+1] = Yacid_splash_eB;
2717   	  if (Cave[y][x-1] == Xblank)
2718 	    Cave[y][x-1] = Yacid_splash_wB;
2719   	  Next[y][x] = Xblank;
2720   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2721   	  goto loop;
2722 
2723   	case Xblank:
2724   	case Yacid_splash_eB:
2725   	case Yacid_splash_wB:
2726   	  Cave[y][x] = Yspring_sB;
2727   	  Cave[y+1][x] = Yspring_s;
2728   	  Next[y][x] = Xblank;
2729   	  Next[y+1][x] = Xspring_fall;
2730   	  goto loop;
2731 
2732   	case Xbumper:
2733   	  Cave[y+1][x] = XbumperB;
2734       }
2735 
2736       switch (Cave[y][x-1])
2737       {
2738   	case Xacid_1:
2739   	case Xacid_2:
2740   	case Xacid_3:
2741   	case Xacid_4:
2742   	case Xacid_5:
2743   	case Xacid_6:
2744   	case Xacid_7:
2745   	case Xacid_8:
2746   	  Cave[y][x] = Yspring_wB;
2747   	  if (Cave[y-1][x] == Xblank)
2748 	    Cave[y-1][x] = Yacid_splash_eB;
2749   	  if (Cave[y-1][x-2] == Xblank)
2750 	    Cave[y-1][x-2] = Yacid_splash_wB;
2751   	  Next[y][x] = Xblank;
2752   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2753   	  goto loop;
2754 
2755   	case Xblank:
2756   	case Yacid_splash_eB:
2757   	case Yacid_splash_wB:
2758   	case Yalien_nB:
2759   	case Yalien_eB:
2760   	case Yalien_sB:
2761   	case Yalien_wB:
2762   	  Cave[y][x] = Yspring_wB;
2763   	  Cave[y][x-1] = Yspring_w;
2764   	  Next[y][x] = Xblank;
2765   	  Next[y][x-1] = Xspring_w;
2766   	  goto loop;
2767 
2768   	case Xalien:
2769   	case Xalien_pause:
2770   	case Yalien_n:
2771   	case Yalien_e:
2772   	case Yalien_s:
2773   	case Yalien_w:
2774   	  Cave[y][x] = Yspring_kill_wB;
2775   	  Cave[y][x-1] = Yspring_kill_w;
2776   	  Next[y][x] = Xblank;
2777   	  Next[y][x-1] = Xspring_w;
2778   	  play_element_sound(x, y, SAMPLE_slurp, Xalien);
2779   	  score += lev.slurp_score;
2780   	  goto loop;
2781 
2782   	case Xbumper:
2783   	case XbumperB:
2784   	  Cave[y][x-1] = XbumperB;
2785   	  Next[y][x] = Xspring_e;
2786   	  play_element_sound(x, y, SAMPLE_spring, Xspring);
2787   	  goto loop;
2788 
2789   	default:
2790   	  Cave[y][x] = Xspring;
2791   	  Next[y][x] = Xspring;
2792   	  play_element_sound(x, y, SAMPLE_spring, Xspring);
2793   	  goto loop;
2794       }
2795 
2796     /* --------------------------------------------------------------------- */
2797 
2798     case Xspring_fall:
2799       switch (Cave[y+1][x])
2800       {
2801   	case Xacid_1:
2802   	case Xacid_2:
2803   	case Xacid_3:
2804   	case Xacid_4:
2805   	case Xacid_5:
2806   	case Xacid_6:
2807   	case Xacid_7:
2808   	case Xacid_8:
2809   	  Cave[y][x] = Yspring_sB;
2810   	  if (Cave[y][x+1] == Xblank)
2811 	    Cave[y][x+1] = Yacid_splash_eB;
2812   	  if (Cave[y][x-1] == Xblank)
2813 	    Cave[y][x-1] = Yacid_splash_wB;
2814   	  Next[y][x] = Xblank;
2815   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
2816   	  goto loop;
2817 
2818   	case Xblank:
2819   	case Yacid_splash_eB:
2820   	case Yacid_splash_wB:
2821   	case Zplayer:
2822   	  Cave[y][x] = Yspring_sB;
2823   	  Cave[y+1][x] = Yspring_s;
2824   	  Next[y][x] = Xblank;
2825   	  Next[y+1][x] = Xspring_fall;
2826   	  goto loop;
2827 
2828   	case Xbomb:
2829   	case Xbomb_pause:
2830   	  Cave[y+1][x] = Ybomb_eat;
2831   	  Next[y+1][x] = Znormal;
2832   	  Boom[y][x-1] = Xblank;
2833   	  Boom[y][x] = Xblank;
2834   	  Boom[y][x+1] = Xblank;
2835   	  Boom[y+1][x-1] = Xblank;
2836   	  Boom[y+1][x] = Xblank;
2837   	  Boom[y+1][x+1] = Xblank;
2838   	  Boom[y+2][x-1] = Xblank;
2839   	  Boom[y+2][x] = Xblank;
2840   	  Boom[y+2][x+1] = Xblank;
2841 #if PLAY_ELEMENT_SOUND
2842 	  play_element_sound(x, y, SAMPLE_boom, element);
2843 #endif
2844   	  goto loop;
2845 
2846   	case Xbug_n:
2847   	case Xbug_e:
2848   	case Xbug_s:
2849   	case Xbug_w:
2850   	case Xbug_gon:
2851   	case Xbug_goe:
2852   	case Xbug_gos:
2853   	case Xbug_gow:
2854   	  Cave[y][x] = Yspring_sB;
2855   	  Cave[y+1][x] = Ybug_spring;
2856   	  Next[y+1][x] = Znormal;
2857   	  Boom[y][x-1] = Xemerald;
2858   	  Boom[y][x] = Xemerald;
2859   	  Boom[y][x+1] = Xemerald;
2860   	  Boom[y+1][x-1] = Xemerald;
2861   	  Boom[y+1][x] = Xdiamond;
2862   	  Boom[y+1][x+1] = Xemerald;
2863   	  Boom[y+2][x-1] = Xemerald;
2864   	  Boom[y+2][x] = Xemerald;
2865   	  Boom[y+2][x+1] = Xemerald;
2866 #if PLAY_ELEMENT_SOUND
2867 	  play_element_sound(x, y, SAMPLE_boom, element);
2868 #endif
2869   	  score += lev.bug_score;
2870   	  goto loop;
2871 
2872   	case Xtank_n:
2873   	case Xtank_e:
2874   	case Xtank_s:
2875   	case Xtank_w:
2876   	case Xtank_gon:
2877   	case Xtank_goe:
2878   	case Xtank_gos:
2879   	case Xtank_gow:
2880   	  Cave[y][x] = Yspring_sB;
2881   	  Cave[y+1][x] = Ytank_spring;
2882   	  Next[y+1][x] = Znormal;
2883   	  Boom[y][x-1] = Xblank;
2884   	  Boom[y][x] = Xblank;
2885   	  Boom[y][x+1] = Xblank;
2886   	  Boom[y+1][x-1] = Xblank;
2887   	  Boom[y+1][x] = Xblank;
2888   	  Boom[y+1][x+1] = Xblank;
2889   	  Boom[y+2][x-1] = Xblank;
2890   	  Boom[y+2][x] = Xblank;
2891   	  Boom[y+2][x+1] = Xblank;
2892 #if PLAY_ELEMENT_SOUND
2893 	  play_element_sound(x, y, SAMPLE_boom, element);
2894 #endif
2895   	  score += lev.tank_score;
2896   	  goto loop;
2897 
2898   	case Xeater_n:
2899   	case Xeater_e:
2900   	case Xeater_s:
2901   	case Xeater_w:
2902   	  Cave[y][x] = Yspring_sB;
2903   	  Cave[y+1][x] = Yeater_spring;
2904   	  Next[y+1][x] = Znormal;
2905   	  Boom[y][x-1] = lev.eater_array[lev.eater_pos][0];
2906   	  Boom[y][x] = lev.eater_array[lev.eater_pos][1];
2907   	  Boom[y][x+1] = lev.eater_array[lev.eater_pos][2];
2908   	  Boom[y+1][x-1] = lev.eater_array[lev.eater_pos][3];
2909   	  Boom[y+1][x] = lev.eater_array[lev.eater_pos][4];
2910   	  Boom[y+1][x+1] = lev.eater_array[lev.eater_pos][5];
2911   	  Boom[y+2][x-1] = lev.eater_array[lev.eater_pos][6];
2912   	  Boom[y+2][x] = lev.eater_array[lev.eater_pos][7];
2913   	  Boom[y+2][x+1] = lev.eater_array[lev.eater_pos][8];
2914 #if PLAY_ELEMENT_SOUND
2915 	  play_element_sound(x, y, SAMPLE_boom, element);
2916 #endif
2917   	  lev.eater_pos = (lev.eater_pos + 1) & 7;
2918   	  score += lev.eater_score;
2919   	  goto loop;
2920 
2921   	case Xalien:
2922   	case Xalien_pause:
2923   	  Cave[y][x] = Yspring_sB;
2924   	  Cave[y+1][x] = Yalien_spring;
2925   	  Next[y+1][x] = Znormal;
2926   	  Boom[y][x-1] = Xblank;
2927   	  Boom[y][x] = Xblank;
2928   	  Boom[y][x+1] = Xblank;
2929   	  Boom[y+1][x-1] = Xblank;
2930   	  Boom[y+1][x] = Xblank;
2931   	  Boom[y+1][x+1] = Xblank;
2932   	  Boom[y+2][x-1] = Xblank;
2933   	  Boom[y+2][x] = Xblank;
2934   	  Boom[y+2][x+1] = Xblank;
2935 #if PLAY_ELEMENT_SOUND
2936 	  play_element_sound(x, y, SAMPLE_boom, element);
2937 #endif
2938   	  score += lev.alien_score;
2939   	  goto loop;
2940 
2941   	default:
2942   	  Cave[y][x] = Xspring;
2943   	  Next[y][x] = Xspring;
2944   	  play_element_sound(x, y, SAMPLE_spring, Xspring);
2945   	  goto loop;
2946       }
2947 
2948     /* --------------------------------------------------------------------- */
2949 
2950     case Xeater_n:
2951       if (Cave[y][x+1] == Xdiamond)
2952       {
2953 	Cave[y][x+1] = Ydiamond_eat;
2954 	Next[y][x+1] = Xblank;
2955 	play_element_sound(x, y, SAMPLE_eater_eat, element);
2956 	goto loop;
2957       }
2958 
2959       if (Cave[y+1][x] == Xdiamond)
2960       {
2961 	Cave[y+1][x] = Ydiamond_eat;
2962 	Next[y+1][x] = Xblank;
2963 	play_element_sound(x, y, SAMPLE_eater_eat, element);
2964 	goto loop;
2965       }
2966 
2967       if (Cave[y][x-1] == Xdiamond)
2968       {
2969 	Cave[y][x-1] = Ydiamond_eat;
2970 	Next[y][x-1] = Xblank;
2971 	play_element_sound(x, y, SAMPLE_eater_eat, element);
2972 	goto loop;
2973       }
2974 
2975       if (Cave[y-1][x] == Xdiamond)
2976       {
2977 	Cave[y-1][x] = Ydiamond_eat;
2978 	Next[y-1][x] = Xblank;
2979 	play_element_sound(x, y, SAMPLE_eater_eat, element);
2980 	goto loop;
2981       }
2982 
2983       switch (Cave[y-1][x])
2984       {
2985   	case Xacid_1:
2986   	case Xacid_2:
2987   	case Xacid_3:
2988   	case Xacid_4:
2989   	case Xacid_5:
2990   	case Xacid_6:
2991   	case Xacid_7:
2992   	case Xacid_8:
2993   	  Cave[y][x] = Yeater_nB;
2994   	  if (Cave[y-2][x+1] == Xblank)
2995 	    Cave[y-2][x+1] = Yacid_splash_eB;
2996   	  if (Cave[y-2][x-1] == Xblank)
2997 	    Cave[y-2][x-1] = Yacid_splash_wB;
2998   	  Next[y][x] = Xblank;
2999   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3000   	  goto loop;
3001 
3002   	case Xblank:
3003   	case Yacid_splash_eB:
3004   	case Yacid_splash_wB:
3005   	case Xplant:
3006   	case Yplant:
3007   	case Zplayer:
3008   	  Cave[y][x] = Yeater_nB;
3009   	  Cave[y-1][x] = Yeater_n;
3010   	  Next[y][x] = Xblank;
3011   	  Next[y-1][x] = Xeater_n;
3012   	  goto loop;
3013 
3014   	default:
3015   	  Next[y][x] = RANDOM & 1 ? Xeater_e : Xeater_w;
3016   	  play_element_sound(x, y, SAMPLE_eater, element);
3017   	  goto loop;
3018       }
3019 
3020     /* --------------------------------------------------------------------- */
3021 
3022     case Xeater_e:
3023       if (Cave[y+1][x] == Xdiamond)
3024       {
3025 	Cave[y+1][x] = Ydiamond_eat;
3026 	Next[y+1][x] = Xblank;
3027 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3028 	goto loop;
3029       }
3030 
3031       if (Cave[y][x-1] == Xdiamond)
3032       {
3033 	Cave[y][x-1] = Ydiamond_eat;
3034 	Next[y][x-1] = Xblank;
3035 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3036 	goto loop;
3037       }
3038 
3039       if (Cave[y-1][x] == Xdiamond)
3040       {
3041 	Cave[y-1][x] = Ydiamond_eat;
3042 	Next[y-1][x] = Xblank;
3043 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3044 	goto loop;
3045       }
3046 
3047       if (Cave[y][x+1] == Xdiamond)
3048       {
3049 	Cave[y][x+1] = Ydiamond_eat;
3050 	Next[y][x+1] = Xblank;
3051 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3052 	goto loop;
3053       }
3054 
3055       switch (Cave[y][x+1])
3056       {
3057   	case Xacid_1:
3058   	case Xacid_2:
3059   	case Xacid_3:
3060   	case Xacid_4:
3061   	case Xacid_5:
3062   	case Xacid_6:
3063   	case Xacid_7:
3064   	case Xacid_8:
3065   	  Cave[y][x] = Yeater_eB;
3066   	  if (Cave[y-1][x+2] == Xblank)
3067 	    Cave[y-1][x+2] = Yacid_splash_eB;
3068   	  if (Cave[y-1][x] == Xblank)
3069 	    Cave[y-1][x] = Yacid_splash_wB;
3070   	  Next[y][x] = Xblank;
3071   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3072   	  goto loop;
3073 
3074   	case Xblank:
3075   	case Yacid_splash_eB:
3076   	case Yacid_splash_wB:
3077   	case Xplant:
3078   	case Yplant:
3079   	case Zplayer:
3080   	  Cave[y][x] = Yeater_eB;
3081   	  Cave[y][x+1] = Yeater_e;
3082   	  Next[y][x] = Xblank;
3083   	  Next[y][x+1] = Xeater_e;
3084   	  goto loop;
3085 
3086   	default:
3087   	  Next[y][x] = RANDOM & 1 ? Xeater_n : Xeater_s;
3088   	  play_element_sound(x, y, SAMPLE_eater, element);
3089   	  goto loop;
3090       }
3091 
3092     /* --------------------------------------------------------------------- */
3093 
3094     case Xeater_s:
3095       if (Cave[y][x-1] == Xdiamond)
3096       {
3097 	Cave[y][x-1] = Ydiamond_eat;
3098 	Next[y][x-1] = Xblank;
3099 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3100 	goto loop;
3101       }
3102 
3103       if (Cave[y-1][x] == Xdiamond)
3104       {
3105 	Cave[y-1][x] = Ydiamond_eat;
3106 	Next[y-1][x] = Xblank;
3107 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3108 	goto loop;
3109       }
3110 
3111       if (Cave[y][x+1] == Xdiamond)
3112       {
3113 	Cave[y][x+1] = Ydiamond_eat;
3114 	Next[y][x+1] = Xblank;
3115 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3116 	goto loop;
3117       }
3118 
3119       if (Cave[y+1][x] == Xdiamond)
3120       {
3121 	Cave[y+1][x] = Ydiamond_eat;
3122 	Next[y+1][x] = Xblank;
3123 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3124 	goto loop;
3125       }
3126 
3127       switch (Cave[y+1][x])
3128       {
3129   	case Xacid_1:
3130   	case Xacid_2:
3131   	case Xacid_3:
3132   	case Xacid_4:
3133   	case Xacid_5:
3134   	case Xacid_6:
3135   	case Xacid_7:
3136   	case Xacid_8:
3137   	  Cave[y][x] = Yeater_sB;
3138   	  if (Cave[y][x+1] == Xblank)
3139 	    Cave[y][x+1] = Yacid_splash_eB;
3140   	  if (Cave[y][x-1] == Xblank)
3141 	    Cave[y][x-1] = Yacid_splash_wB;
3142   	  Next[y][x] = Xblank;
3143   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3144   	  goto loop;
3145 
3146   	case Xblank:
3147   	case Yacid_splash_eB:
3148   	case Yacid_splash_wB:
3149   	case Xplant:
3150   	case Yplant:
3151   	case Zplayer:
3152   	  Cave[y][x] = Yeater_sB;
3153   	  Cave[y+1][x] = Yeater_s;
3154   	  Next[y][x] = Xblank;
3155   	  Next[y+1][x] = Xeater_s;
3156   	  goto loop;
3157 
3158   	default:
3159   	  Next[y][x] = RANDOM & 1 ? Xeater_e : Xeater_w;
3160   	  play_element_sound(x, y, SAMPLE_eater, element);
3161   	  goto loop;
3162       }
3163 
3164     /* --------------------------------------------------------------------- */
3165 
3166     case Xeater_w:
3167       if (Cave[y-1][x] == Xdiamond)
3168       {
3169 	Cave[y-1][x] = Ydiamond_eat;
3170 	Next[y-1][x] = Xblank;
3171 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3172 	goto loop;
3173       }
3174 
3175       if (Cave[y][x+1] == Xdiamond)
3176       {
3177 	Cave[y][x+1] = Ydiamond_eat;
3178 	Next[y][x+1] = Xblank;
3179 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3180 	goto loop;
3181       }
3182 
3183       if (Cave[y+1][x] == Xdiamond)
3184       {
3185 	Cave[y+1][x] = Ydiamond_eat;
3186 	Next[y+1][x] = Xblank;
3187 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3188 	goto loop;
3189       }
3190 
3191       if (Cave[y][x-1] == Xdiamond)
3192       {
3193 	Cave[y][x-1] = Ydiamond_eat;
3194 	Next[y][x-1] = Xblank;
3195 	play_element_sound(x, y, SAMPLE_eater_eat, element);
3196 	goto loop;
3197       }
3198 
3199       switch (Cave[y][x-1])
3200       {
3201   	case Xacid_1:
3202   	case Xacid_2:
3203   	case Xacid_3:
3204   	case Xacid_4:
3205   	case Xacid_5:
3206   	case Xacid_6:
3207   	case Xacid_7:
3208   	case Xacid_8:
3209   	  Cave[y][x] = Yeater_wB;
3210   	  if (Cave[y-1][x] == Xblank)
3211 	    Cave[y-1][x] = Yacid_splash_eB;
3212   	  if (Cave[y-1][x-2] == Xblank)
3213 	    Cave[y-1][x-2] = Yacid_splash_wB;
3214   	  Next[y][x] = Xblank;
3215   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3216   	  goto loop;
3217 
3218   	case Xblank:
3219   	case Yacid_splash_eB:
3220   	case Yacid_splash_wB:
3221   	case Xplant:
3222   	case Yplant:
3223   	case Zplayer:
3224   	  Cave[y][x] = Yeater_wB;
3225   	  Cave[y][x-1] = Yeater_w;
3226   	  Next[y][x] = Xblank;
3227   	  Next[y][x-1] = Xeater_w;
3228   	  goto loop;
3229 
3230   	default:
3231   	  Next[y][x] = RANDOM & 1 ? Xeater_n : Xeater_s;
3232   	  play_element_sound(x, y, SAMPLE_eater, element);
3233   	  goto loop;
3234       }
3235 
3236     /* --------------------------------------------------------------------- */
3237 
3238     case Xalien:
3239 
3240 #if 1
3241 
3242       if (lev.wheel_cnt)
3243       {
3244 	dx = lev.wheel_x;
3245 	dy = lev.wheel_y;
3246       }
3247       else
3248       {
3249 	set_nearest_player_xy(x, y, &dx, &dy);
3250       }
3251 
3252 #else
3253 
3254       if (lev.wheel_cnt)
3255       {
3256 	dx = lev.wheel_x;
3257 	dy = lev.wheel_y;
3258       }
3259       else if (ply1.alive && ply2.alive)
3260       {
3261 	if ((ply1.x > x ? ply1.x - x : x - ply1.x) +
3262 	    (ply1.y > y ? ply1.y - y : y - ply1.y) <
3263 	    (ply2.x > x ? ply2.x - x : x - ply2.x) +
3264 	    (ply2.y > y ? ply2.y - y : y - ply2.y))
3265 	{
3266 	  dx = ply1.x;
3267 	  dy = ply1.y;
3268 	}
3269 	else
3270 	{
3271 	  dx = ply2.x;
3272 	  dy = ply2.y;
3273 	}
3274       }
3275       else if (ply1.alive)
3276       {
3277 	dx = ply1.x;
3278 	dy = ply1.y;
3279       }
3280       else if (ply2.alive)
3281       {
3282 	dx = ply2.x;
3283 	dy = ply2.y;
3284       }
3285       else
3286       {
3287 	dx = 0;
3288 	dy = 0;
3289       }
3290 
3291 #endif
3292 
3293       if (RANDOM & 1)
3294       {
3295 	if (y > dy)
3296 	{
3297 	  switch (Cave[y-1][x])
3298 	  {
3299   	    case Xacid_1:
3300   	    case Xacid_2:
3301   	    case Xacid_3:
3302   	    case Xacid_4:
3303   	    case Xacid_5:
3304   	    case Xacid_6:
3305   	    case Xacid_7:
3306   	    case Xacid_8:
3307   	      Cave[y][x] = Yalien_nB;
3308   	      if (Cave[y-2][x+1] == Xblank)
3309 		Cave[y-2][x+1] = Yacid_splash_eB;
3310   	      if (Cave[y-2][x-1] == Xblank)
3311 		Cave[y-2][x-1] = Yacid_splash_wB;
3312   	      Next[y][x] = Xblank;
3313   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3314   	      goto loop;
3315 
3316   	    case Xblank:
3317   	    case Yacid_splash_eB:
3318   	    case Yacid_splash_wB:
3319   	    case Xplant:
3320   	    case Yplant:
3321   	    case Zplayer:
3322   	      Cave[y][x] = Yalien_nB;
3323   	      Cave[y-1][x] = Yalien_n;
3324   	      Next[y][x] = Xblank;
3325   	      Next[y-1][x] = Xalien_pause;
3326   	      play_element_sound(x, y, SAMPLE_alien, Xalien);
3327   	      goto loop;
3328 	  }
3329 	}
3330 	else if (y < dy)
3331 	{
3332 	  switch (Cave[y+1][x])
3333 	  {
3334   	    case Xacid_1:
3335   	    case Xacid_2:
3336   	    case Xacid_3:
3337   	    case Xacid_4:
3338   	    case Xacid_5:
3339   	    case Xacid_6:
3340   	    case Xacid_7:
3341   	    case Xacid_8:
3342   	      Cave[y][x] = Yalien_sB;
3343   	      Next[y][x] = Xblank;
3344   	      if (Cave[y][x+1] == Xblank)
3345 		Cave[y][x+1] = Yacid_splash_eB;
3346   	      if (Cave[y][x-1] == Xblank)
3347 		Cave[y][x-1] = Yacid_splash_wB;
3348   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3349   	      goto loop;
3350 
3351   	    case Xblank:
3352   	    case Yacid_splash_eB:
3353   	    case Yacid_splash_wB:
3354   	    case Xplant:
3355   	    case Yplant:
3356   	    case Zplayer:
3357   	      Cave[y][x] = Yalien_sB;
3358   	      Cave[y+1][x] = Yalien_s;
3359   	      Next[y][x] = Xblank;
3360   	      Next[y+1][x] = Xalien_pause;
3361   	      play_element_sound(x, y, SAMPLE_alien, Xalien);
3362   	      goto loop;
3363 	  }
3364 	}
3365       }
3366       else
3367       {
3368 	if (x < dx)
3369 	{
3370 	  switch (Cave[y][x+1])
3371 	  {
3372   	    case Xacid_1:
3373   	    case Xacid_2:
3374   	    case Xacid_3:
3375   	    case Xacid_4:
3376   	    case Xacid_5:
3377   	    case Xacid_6:
3378   	    case Xacid_7:
3379   	    case Xacid_8:
3380   	      Cave[y][x] = Yalien_eB;
3381   	      if (Cave[y-1][x+2] == Xblank)
3382 		Cave[y-1][x+2] = Yacid_splash_eB;
3383   	      if (Cave[y-1][x] == Xblank)
3384 		Cave[y-1][x] = Yacid_splash_wB;
3385   	      Next[y][x] = Xblank;
3386   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3387   	      goto loop;
3388 
3389   	    case Xblank:
3390   	    case Yacid_splash_eB:
3391   	    case Yacid_splash_wB:
3392   	    case Xplant:
3393   	    case Yplant:
3394   	    case Zplayer:
3395   	      Cave[y][x] = Yalien_eB;
3396   	      Cave[y][x+1] = Yalien_e;
3397   	      Next[y][x] = Xblank;
3398   	      Next[y][x+1] = Xalien_pause;
3399   	      play_element_sound(x, y, SAMPLE_alien, Xalien);
3400   	      goto loop;
3401 	  }
3402 	}
3403 	else if (x > dx)
3404 	{
3405 	  switch (Cave[y][x-1])
3406 	  {
3407   	    case Xacid_1:
3408   	    case Xacid_2:
3409   	    case Xacid_3:
3410   	    case Xacid_4:
3411   	    case Xacid_5:
3412   	    case Xacid_6:
3413   	    case Xacid_7:
3414   	    case Xacid_8:
3415   	      Cave[y][x] = Yalien_wB;
3416   	      if (Cave[y-1][x] == Xblank)
3417 		Cave[y-1][x] = Yacid_splash_eB;
3418   	      if (Cave[y-1][x-2] == Xblank)
3419 		Cave[y-1][x-2] = Yacid_splash_wB;
3420   	      Next[y][x] = Xblank;
3421   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3422   	      goto loop;
3423 
3424   	    case Xblank:
3425   	    case Yacid_splash_eB:
3426   	    case Yacid_splash_wB:
3427   	    case Xplant:
3428   	    case Yplant:
3429   	    case Zplayer:
3430   	      Cave[y][x] = Yalien_wB;
3431   	      Cave[y][x-1] = Yalien_w;
3432   	      Next[y][x] = Xblank;
3433   	      Next[y][x-1] = Xalien_pause;
3434   	      play_element_sound(x, y, SAMPLE_alien, Xalien);
3435   	      goto loop;
3436 	  }
3437 	}
3438       }
3439 
3440       goto loop;
3441 
3442     case Xalien_pause:
3443       Next[y][x] = Xalien;
3444       goto loop;
3445 
3446     /* --------------------------------------------------------------------- */
3447 
3448     case Xemerald:
3449       switch (Cave[y+1][x])
3450       {
3451   	case Xacid_1:
3452   	case Xacid_2:
3453   	case Xacid_3:
3454   	case Xacid_4:
3455   	case Xacid_5:
3456   	case Xacid_6:
3457   	case Xacid_7:
3458   	case Xacid_8:
3459   	  Cave[y][x] = Yemerald_sB;
3460   	  if (Cave[y][x+1] == Xblank)
3461 	    Cave[y][x+1] = Yacid_splash_eB;
3462   	  if (Cave[y][x-1] == Xblank)
3463 	    Cave[y][x-1] = Yacid_splash_wB;
3464   	  Next[y][x] = Xblank;
3465   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3466   	  goto loop;
3467 
3468   	case Xblank:
3469   	case Yacid_splash_eB:
3470   	case Yacid_splash_wB:
3471   	  Cave[y][x] = Yemerald_sB;
3472   	  Cave[y+1][x] = Yemerald_s;
3473   	  Next[y][x] = Xblank;
3474   	  Next[y+1][x] = Xemerald_fall;
3475   	  goto loop;
3476 
3477   	case Xspring:
3478   	case Xspring_pause:
3479   	case Xspring_e:
3480   	case Xspring_w:
3481   	case Xandroid:
3482   	case Xandroid_1_n:
3483   	case Xandroid_2_n:
3484   	case Xandroid_1_e:
3485   	case Xandroid_2_e:
3486   	case Xandroid_1_s:
3487   	case Xandroid_2_s:
3488   	case Xandroid_1_w:
3489   	case Xandroid_2_w:
3490   	case Xstone:
3491   	case Xstone_pause:
3492   	case Xemerald:
3493   	case Xemerald_pause:
3494   	case Xdiamond:
3495   	case Xdiamond_pause:
3496   	case Xbomb:
3497   	case Xbomb_pause:
3498   	case Xballoon:
3499   	case Xacid_ne:
3500   	case Xacid_nw:
3501   	case Xball_1:
3502   	case Xball_2:
3503   	case Xnut:
3504   	case Xnut_pause:
3505   	case Xgrow_ns:
3506   	case Xgrow_ew:
3507   	case Xwonderwall:
3508   	case Xkey_1:
3509   	case Xkey_2:
3510   	case Xkey_3:
3511   	case Xkey_4:
3512   	case Xkey_5:
3513   	case Xkey_6:
3514   	case Xkey_7:
3515   	case Xkey_8:
3516   	case Xbumper:
3517   	case Xswitch:
3518   	case Xsteel_1:
3519   	case Xsteel_2:
3520   	case Xsteel_3:
3521   	case Xsteel_4:
3522   	case Xwall_1:
3523   	case Xwall_2:
3524   	case Xwall_3:
3525   	case Xwall_4:
3526   	case Xround_wall_1:
3527   	case Xround_wall_2:
3528   	case Xround_wall_3:
3529   	case Xround_wall_4:
3530   	  if (RANDOM & 1)
3531 	  {
3532   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
3533 	    {
3534   	      Cave[y][x] = Yemerald_eB;
3535   	      Cave[y][x+1] = Yemerald_e;
3536   	      Next[y][x] = Xblank;
3537   	      Next[y][x+1] = Xemerald_pause;
3538   	      goto loop;
3539   	    }
3540 
3541   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
3542 	    {
3543   	      Cave[y][x] = Yemerald_wB;
3544   	      Cave[y][x-1] = Yemerald_w;
3545   	      Next[y][x] = Xblank;
3546   	      Next[y][x-1] = Xemerald_pause;
3547   	      goto loop;
3548   	    }
3549   	  }
3550 	  else
3551 	  {
3552   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
3553 	    {
3554   	      Cave[y][x] = Yemerald_wB;
3555   	      Cave[y][x-1] = Yemerald_w;
3556   	      Next[y][x] = Xblank;
3557   	      Next[y][x-1] = Xemerald_pause;
3558   	      goto loop;
3559   	    }
3560 
3561   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
3562 	    {
3563   	      Cave[y][x] = Yemerald_eB;
3564   	      Cave[y][x+1] = Yemerald_e;
3565   	      Next[y][x] = Xblank;
3566   	      Next[y][x+1] = Xemerald_pause;
3567   	      goto loop;
3568   	    }
3569   	  }
3570 
3571         default:
3572   	  if (++lev.shine_cnt > 50)
3573 	  {
3574   	    lev.shine_cnt = RANDOM & 7;
3575   	    Cave[y][x] = Xemerald_shine;
3576   	  }
3577 
3578   	  goto loop;
3579       }
3580 
3581     /* --------------------------------------------------------------------- */
3582 
3583     case Xemerald_pause:
3584       switch (Cave[y+1][x])
3585       {
3586   	case Xacid_1:
3587   	case Xacid_2:
3588   	case Xacid_3:
3589   	case Xacid_4:
3590   	case Xacid_5:
3591   	case Xacid_6:
3592   	case Xacid_7:
3593   	case Xacid_8:
3594   	  Cave[y][x] = Yemerald_sB;
3595   	  if (Cave[y][x+1] == Xblank)
3596 	    Cave[y][x+1] = Yacid_splash_eB;
3597   	  if (Cave[y][x-1] == Xblank)
3598 	    Cave[y][x-1] = Yacid_splash_wB;
3599   	  Next[y][x] = Xblank;
3600   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3601   	  goto loop;
3602 
3603   	case Xblank:
3604   	case Yacid_splash_eB:
3605   	case Yacid_splash_wB:
3606   	  Cave[y][x] = Yemerald_sB;
3607   	  Cave[y+1][x] = Yemerald_s;
3608   	  Next[y][x] = Xblank;
3609   	  Next[y+1][x] = Xemerald_fall;
3610   	  goto loop;
3611 
3612   	default:
3613   	  Cave[y][x] = Xemerald;
3614   	  Next[y][x] = Xemerald;
3615   	  goto loop;
3616       }
3617 
3618     /* --------------------------------------------------------------------- */
3619 
3620     case Xemerald_fall:
3621       switch (Cave[y+1][x])
3622       {
3623   	case Xacid_1:
3624   	case Xacid_2:
3625   	case Xacid_3:
3626   	case Xacid_4:
3627   	case Xacid_5:
3628   	case Xacid_6:
3629   	case Xacid_7:
3630   	case Xacid_8:
3631   	  Cave[y][x] = Yemerald_sB;
3632   	  if (Cave[y][x+1] == Xblank)
3633 	    Cave[y][x+1] = Yacid_splash_eB;
3634   	  if (Cave[y][x-1] == Xblank)
3635 	    Cave[y][x-1] = Yacid_splash_wB;
3636   	  Next[y][x] = Xblank;
3637   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3638   	  goto loop;
3639 
3640   	case Xblank:
3641   	case Yacid_splash_eB:
3642   	case Yacid_splash_wB:
3643   	case Zplayer:
3644   	  Cave[y][x] = Yemerald_sB;
3645   	  Cave[y+1][x] = Yemerald_s;
3646   	  Next[y][x] = Xblank;
3647   	  Next[y+1][x] = Xemerald_fall;
3648   	  goto loop;
3649 
3650   	case Xwonderwall:
3651   	  if (lev.wonderwall_time)
3652 	  {
3653   	    lev.wonderwall_state = 1;
3654   	    Cave[y][x] = Yemerald_sB;
3655   	    if (tab_blank[Cave[y+2][x]])
3656 	    {
3657   	      Cave[y+2][x] = Ydiamond_s;
3658   	      Next[y+2][x] = Xdiamond_fall;
3659   	    }
3660 
3661   	    Next[y][x] = Xblank;
3662   	    play_element_sound(x, y, SAMPLE_wonderfall, Xwonderwall);
3663   	    goto loop;
3664   	  }
3665 
3666   	default:
3667   	  Cave[y][x] = Xemerald;
3668   	  Next[y][x] = Xemerald;
3669   	  play_element_sound(x, y, SAMPLE_diamond, Xemerald);
3670   	  goto loop;
3671       }
3672 
3673     /* --------------------------------------------------------------------- */
3674 
3675     case Xdiamond:
3676       switch (Cave[y+1][x])
3677       {
3678   	case Xacid_1:
3679   	case Xacid_2:
3680   	case Xacid_3:
3681   	case Xacid_4:
3682   	case Xacid_5:
3683   	case Xacid_6:
3684   	case Xacid_7:
3685   	case Xacid_8:
3686   	  Cave[y][x] = Ydiamond_sB;
3687   	  if (Cave[y][x+1] == Xblank)
3688 	    Cave[y][x+1] = Yacid_splash_eB;
3689   	  if (Cave[y][x-1] == Xblank)
3690 	    Cave[y][x-1] = Yacid_splash_wB;
3691   	  Next[y][x] = Xblank;
3692   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3693   	  goto loop;
3694 
3695   	case Xblank:
3696   	case Yacid_splash_eB:
3697   	case Yacid_splash_wB:
3698   	  Cave[y][x] = Ydiamond_sB;
3699   	  Cave[y+1][x] = Ydiamond_s;
3700   	  Next[y][x] = Xblank;
3701   	  Next[y+1][x] = Xdiamond_fall;
3702   	  goto loop;
3703 
3704   	case Xspring:
3705   	case Xspring_pause:
3706   	case Xspring_e:
3707   	case Xspring_w:
3708   	case Xandroid:
3709   	case Xandroid_1_n:
3710   	case Xandroid_2_n:
3711   	case Xandroid_1_e:
3712   	case Xandroid_2_e:
3713   	case Xandroid_1_s:
3714   	case Xandroid_2_s:
3715   	case Xandroid_1_w:
3716   	case Xandroid_2_w:
3717   	case Xstone:
3718   	case Xstone_pause:
3719   	case Xemerald:
3720   	case Xemerald_pause:
3721   	case Xdiamond:
3722   	case Xdiamond_pause:
3723   	case Xbomb:
3724   	case Xbomb_pause:
3725   	case Xballoon:
3726   	case Xacid_ne:
3727   	case Xacid_nw:
3728   	case Xball_1:
3729   	case Xball_2:
3730   	case Xnut:
3731   	case Xnut_pause:
3732   	case Xgrow_ns:
3733   	case Xgrow_ew:
3734   	case Xwonderwall:
3735   	case Xkey_1:
3736   	case Xkey_2:
3737   	case Xkey_3:
3738   	case Xkey_4:
3739   	case Xkey_5:
3740   	case Xkey_6:
3741   	case Xkey_7:
3742   	case Xkey_8:
3743   	case Xbumper:
3744   	case Xswitch:
3745   	case Xsteel_1:
3746   	case Xsteel_2:
3747   	case Xsteel_3:
3748   	case Xsteel_4:
3749   	case Xwall_1:
3750   	case Xwall_2:
3751   	case Xwall_3:
3752   	case Xwall_4:
3753   	case Xround_wall_1:
3754   	case Xround_wall_2:
3755   	case Xround_wall_3:
3756   	case Xround_wall_4:
3757   	  if (RANDOM & 1)
3758 	  {
3759   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
3760 	    {
3761   	      Cave[y][x] = Ydiamond_eB;
3762   	      Cave[y][x+1] = Ydiamond_e;
3763   	      Next[y][x] = Xblank;
3764   	      Next[y][x+1] = Xdiamond_pause;
3765   	      goto loop;
3766   	    }
3767 
3768   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
3769 	    {
3770   	      Cave[y][x] = Ydiamond_wB;
3771   	      Cave[y][x-1] = Ydiamond_w;
3772   	      Next[y][x] = Xblank;
3773   	      Next[y][x-1] = Xdiamond_pause;
3774   	      goto loop;
3775   	    }
3776   	  }
3777 	  else
3778 	  {
3779   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
3780 	    {
3781   	      Cave[y][x] = Ydiamond_wB;
3782   	      Cave[y][x-1] = Ydiamond_w;
3783   	      Next[y][x] = Xblank;
3784   	      Next[y][x-1] = Xdiamond_pause;
3785   	      goto loop;
3786   	    }
3787 
3788   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
3789 	    {
3790   	      Cave[y][x] = Ydiamond_eB;
3791   	      Cave[y][x+1] = Ydiamond_e;
3792   	      Next[y][x] = Xblank;
3793   	      Next[y][x+1] = Xdiamond_pause;
3794   	      goto loop;
3795   	    }
3796   	  }
3797 
3798   	default:
3799   	  if (++lev.shine_cnt > 50)
3800 	  {
3801   	    lev.shine_cnt = RANDOM & 7;
3802   	    Cave[y][x] = Xdiamond_shine;
3803   	  }
3804 
3805   	  goto loop;
3806       }
3807 
3808     /* --------------------------------------------------------------------- */
3809 
3810     case Xdiamond_pause:
3811       switch (Cave[y+1][x])
3812       {
3813   	case Xacid_1:
3814   	case Xacid_2:
3815   	case Xacid_3:
3816   	case Xacid_4:
3817   	case Xacid_5:
3818   	case Xacid_6:
3819   	case Xacid_7:
3820   	case Xacid_8:
3821   	  Cave[y][x] = Ydiamond_sB;
3822   	  if (Cave[y][x+1] == Xblank)
3823 	    Cave[y][x+1] = Yacid_splash_eB;
3824   	  if (Cave[y][x-1] == Xblank)
3825 	    Cave[y][x-1] = Yacid_splash_wB;
3826   	  Next[y][x] = Xblank;
3827   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3828   	  goto loop;
3829 
3830   	case Xblank:
3831   	case Yacid_splash_eB:
3832   	case Yacid_splash_wB:
3833   	  Cave[y][x] = Ydiamond_sB;
3834   	  Cave[y+1][x] = Ydiamond_s;
3835   	  Next[y][x] = Xblank;
3836   	  Next[y+1][x] = Xdiamond_fall;
3837   	  goto loop;
3838 
3839   	default:
3840   	  Cave[y][x] = Xdiamond;
3841   	  Next[y][x] = Xdiamond;
3842   	  goto loop;
3843       }
3844 
3845     /* --------------------------------------------------------------------- */
3846 
3847     case Xdiamond_fall:
3848       switch (Cave[y+1][x])
3849       {
3850   	case Xacid_1:
3851   	case Xacid_2:
3852   	case Xacid_3:
3853   	case Xacid_4:
3854   	case Xacid_5:
3855   	case Xacid_6:
3856   	case Xacid_7:
3857   	case Xacid_8:
3858   	  Cave[y][x] = Ydiamond_sB;
3859   	  if (Cave[y][x+1] == Xblank)
3860 	    Cave[y][x+1] = Yacid_splash_eB;
3861   	  if (Cave[y][x-1] == Xblank)
3862 	    Cave[y][x-1] = Yacid_splash_wB;
3863   	  Next[y][x] = Xblank;
3864   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3865   	  goto loop;
3866 
3867   	case Xblank:
3868   	case Yacid_splash_eB:
3869   	case Yacid_splash_wB:
3870   	case Zplayer:
3871   	  Cave[y][x] = Ydiamond_sB;
3872   	  Cave[y+1][x] = Ydiamond_s;
3873   	  Next[y][x] = Xblank;
3874   	  Next[y+1][x] = Xdiamond_fall;
3875   	  goto loop;
3876 
3877   	case Xwonderwall:
3878   	  if (lev.wonderwall_time)
3879 	  {
3880   	    lev.wonderwall_state = 1;
3881   	    Cave[y][x] = Ydiamond_sB;
3882   	    if (tab_blank[Cave[y+2][x]])
3883 	    {
3884   	      Cave[y+2][x] = Ystone_s;
3885   	      Next[y+2][x] = Xstone_fall;
3886   	    }
3887 
3888   	    Next[y][x] = Xblank;
3889   	    play_element_sound(x, y, SAMPLE_wonderfall, Xwonderwall);
3890   	    goto loop;
3891   	  }
3892 
3893   	default:
3894   	  Cave[y][x] = Xdiamond;
3895   	  Next[y][x] = Xdiamond;
3896   	  play_element_sound(x, y, SAMPLE_diamond, Xdiamond);
3897   	  goto loop;
3898       }
3899 
3900     /* --------------------------------------------------------------------- */
3901 
3902     case Xdrip_fall:
3903       switch (Cave[y+1][x])
3904       {
3905   	case Xacid_1:
3906   	case Xacid_2:
3907   	case Xacid_3:
3908   	case Xacid_4:
3909   	case Xacid_5:
3910   	case Xacid_6:
3911   	case Xacid_7:
3912   	case Xacid_8:
3913   	  Cave[y][x] = Ydrip_s1B;
3914   	  if (Cave[y][x+1] == Xblank)
3915 	    Cave[y][x+1] = Yacid_splash_eB;
3916   	  if (Cave[y][x-1] == Xblank)
3917 	    Cave[y][x-1] = Yacid_splash_wB;
3918   	  Next[y][x] = Xdrip_stretchB;
3919   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
3920   	  goto loop;
3921 
3922   	case Xblank:
3923   	case Yacid_splash_eB:
3924   	case Yacid_splash_wB:
3925   	case Xplant:
3926   	case Yplant:
3927   	case Zplayer:
3928   	  Cave[y][x] = Ydrip_s1B;
3929   	  Cave[y+1][x] = Ydrip_s1;
3930   	  Next[y][x] = Xdrip_stretchB;
3931   	  Next[y+1][x] = Xdrip_stretch;
3932   	  goto loop;
3933 
3934   	default:
3935   	  switch (RANDOM & 7)
3936 	  {
3937   	    case 0:
3938 	      temp = Xamoeba_1;
3939 	      break;
3940 
3941   	    case 1:
3942 	      temp = Xamoeba_2;
3943 	      break;
3944 
3945   	    case 2:
3946 	      temp = Xamoeba_3;
3947 	      break;
3948 
3949   	    case 3:
3950 	      temp = Xamoeba_4;
3951 	      break;
3952 
3953   	    case 4:
3954 	      temp = Xamoeba_5;
3955 	      break;
3956 
3957   	    case 5:
3958 	      temp = Xamoeba_6;
3959 	      break;
3960 
3961   	    case 6:
3962 	      temp = Xamoeba_7;
3963 	      break;
3964 
3965   	    case 7:
3966 	      temp = Xamoeba_8;
3967 	      break;
3968   	  }
3969 
3970   	  Cave[y][x] = temp;
3971   	  Next[y][x] = temp;
3972   	  play_element_sound(x, y, SAMPLE_drip, Xdrip_fall);
3973   	  goto loop;
3974       }
3975 
3976     /* --------------------------------------------------------------------- */
3977 
3978     case Xdrip_stretch:
3979       Cave[y][x] = Ydrip_s2;
3980       Next[y][x] = Xdrip_fall;
3981       goto loop;
3982 
3983     case Xdrip_stretchB:
3984       Cave[y][x] = Ydrip_s2B;
3985       Next[y][x] = Xblank;
3986       goto loop;
3987 
3988     case Xdrip_eat:
3989       Next[y][x] = Xdrip_fall;
3990       goto loop;
3991 
3992     /* --------------------------------------------------------------------- */
3993 
3994     case Xbomb:
3995       switch (Cave[y+1][x])
3996       {
3997   	case Xacid_1:
3998   	case Xacid_2:
3999   	case Xacid_3:
4000   	case Xacid_4:
4001   	case Xacid_5:
4002   	case Xacid_6:
4003   	case Xacid_7:
4004   	case Xacid_8:
4005   	  Cave[y][x] = Ybomb_sB;
4006   	  if (Cave[y][x+1] == Xblank)
4007 	    Cave[y][x+1] = Yacid_splash_eB;
4008   	  if (Cave[y][x-1] == Xblank)
4009 	    Cave[y][x-1] = Yacid_splash_wB;
4010   	  Next[y][x] = Xblank;
4011   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4012   	  goto loop;
4013 
4014   	case Xblank:
4015   	case Yacid_splash_eB:
4016   	case Yacid_splash_wB:
4017   	  Cave[y][x] = Ybomb_sB;
4018   	  Cave[y+1][x] = Ybomb_s;
4019   	  Next[y][x] = Xblank;
4020   	  Next[y+1][x] = Xbomb_fall;
4021   	  goto loop;
4022 
4023   	case Xspring:
4024   	case Xspring_pause:
4025   	case Xspring_e:
4026   	case Xspring_w:
4027   	case Xandroid:
4028   	case Xandroid_1_n:
4029   	case Xandroid_2_n:
4030   	case Xandroid_1_e:
4031   	case Xandroid_2_e:
4032   	case Xandroid_1_s:
4033   	case Xandroid_2_s:
4034   	case Xandroid_1_w:
4035   	case Xandroid_2_w:
4036   	case Xstone:
4037   	case Xstone_pause:
4038   	case Xemerald:
4039   	case Xemerald_pause:
4040   	case Xdiamond:
4041   	case Xdiamond_pause:
4042   	case Xbomb:
4043   	case Xbomb_pause:
4044   	case Xballoon:
4045   	case Xacid_ne:
4046   	case Xacid_nw:
4047   	case Xball_1:
4048   	case Xball_2:
4049   	case Xnut:
4050   	case Xnut_pause:
4051   	case Xgrow_ns:
4052   	case Xgrow_ew:
4053   	case Xkey_1:
4054   	case Xkey_2:
4055   	case Xkey_3:
4056   	case Xkey_4:
4057   	case Xkey_5:
4058   	case Xkey_6:
4059   	case Xkey_7:
4060   	case Xkey_8:
4061   	case Xbumper:
4062   	case Xswitch:
4063   	case Xround_wall_1:
4064   	case Xround_wall_2:
4065   	case Xround_wall_3:
4066   	case Xround_wall_4:
4067   	  if (RANDOM & 1)
4068 	  {
4069   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
4070 	    {
4071   	      Cave[y][x] = Ybomb_eB;
4072   	      Cave[y][x+1] = Ybomb_e;
4073   	      Next[y][x] = Xblank;
4074   	      Next[y][x+1] = Xbomb_pause;
4075   	      goto loop;
4076   	    }
4077 
4078   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
4079 	    {
4080   	      Cave[y][x] = Ybomb_wB;
4081   	      Cave[y][x-1] = Ybomb_w;
4082   	      Next[y][x] = Xblank;
4083   	      Next[y][x-1] = Xbomb_pause;
4084   	      goto loop;
4085   	    }
4086   	  }
4087 	  else
4088 	  {
4089   	    if (tab_blank[Cave[y][x-1]] && tab_acid[Cave[y+1][x-1]])
4090 	    {
4091   	      Cave[y][x] = Ybomb_wB;
4092   	      Cave[y][x-1] = Ybomb_w;
4093   	      Next[y][x] = Xblank;
4094   	      Next[y][x-1] = Xbomb_pause;
4095   	      goto loop;
4096   	    }
4097 
4098   	    if (tab_blank[Cave[y][x+1]] && tab_acid[Cave[y+1][x+1]])
4099 	    {
4100   	      Cave[y][x] = Ybomb_eB;
4101   	      Cave[y][x+1] = Ybomb_e;
4102   	      Next[y][x] = Xblank;
4103   	      Next[y][x+1] = Xbomb_pause;
4104   	      goto loop;
4105   	    }
4106   	  }
4107 
4108   	default:
4109   	  goto loop;
4110       }
4111 
4112     /* --------------------------------------------------------------------- */
4113 
4114     case Xbomb_pause:
4115       switch (Cave[y+1][x])
4116       {
4117   	case Xacid_1:
4118   	case Xacid_2:
4119   	case Xacid_3:
4120   	case Xacid_4:
4121   	case Xacid_5:
4122   	case Xacid_6:
4123   	case Xacid_7:
4124   	case Xacid_8:
4125   	  Cave[y][x] = Ybomb_sB;
4126   	  if (Cave[y][x+1] == Xblank)
4127 	    Cave[y][x+1] = Yacid_splash_eB;
4128   	  if (Cave[y][x-1] == Xblank)
4129 	    Cave[y][x-1] = Yacid_splash_wB;
4130   	  Next[y][x] = Xblank;
4131   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4132   	  goto loop;
4133 
4134   	case Xblank:
4135   	case Yacid_splash_eB:
4136   	case Yacid_splash_wB:
4137   	  Cave[y][x] = Ybomb_sB;
4138   	  Cave[y+1][x] = Ybomb_s;
4139   	  Next[y][x] = Xblank;
4140   	  Next[y+1][x] = Xbomb_fall;
4141   	  goto loop;
4142 
4143   	default:
4144   	  Cave[y][x] = Xbomb;
4145   	  Next[y][x] = Xbomb;
4146   	  goto loop;
4147       }
4148 
4149     /* --------------------------------------------------------------------- */
4150 
4151     case Xbomb_fall:
4152       switch (Cave[y+1][x])
4153       {
4154   	case Xacid_1:
4155   	case Xacid_2:
4156   	case Xacid_3:
4157   	case Xacid_4:
4158   	case Xacid_5:
4159   	case Xacid_6:
4160   	case Xacid_7:
4161   	case Xacid_8:
4162   	  Cave[y][x] = Ybomb_sB;
4163   	  if (Cave[y][x+1] == Xblank)
4164 	    Cave[y][x+1] = Yacid_splash_eB;
4165   	  if (Cave[y][x-1] == Xblank)
4166 	    Cave[y][x-1] = Yacid_splash_wB;
4167   	  Next[y][x] = Xblank;
4168   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4169   	  goto loop;
4170 
4171   	case Xblank:
4172   	case Yacid_splash_eB:
4173   	case Yacid_splash_wB:
4174   	  Cave[y][x] = Ybomb_sB;
4175   	  Cave[y+1][x] = Ybomb_s;
4176   	  Next[y][x] = Xblank;
4177   	  Next[y+1][x] = Xbomb_fall;
4178   	  goto loop;
4179 
4180   	default:
4181   	  Cave[y][x] = Ybomb_eat;
4182   	  Next[y][x] = Znormal;
4183   	  Boom[y-1][x-1] = Xblank;
4184   	  Boom[y-1][x] = Xblank;
4185   	  Boom[y-1][x+1] = Xblank;
4186   	  Boom[y][x-1] = Xblank;
4187   	  Boom[y][x] = Xblank;
4188   	  Boom[y][x+1] = Xblank;
4189   	  Boom[y+1][x-1] = Xblank;
4190   	  Boom[y+1][x] = Xblank;
4191   	  Boom[y+1][x+1] = Xblank;
4192 #if PLAY_ELEMENT_SOUND
4193 	  play_element_sound(x, y, SAMPLE_boom, element);
4194 #endif
4195   	  goto loop;
4196       }
4197 
4198     /* --------------------------------------------------------------------- */
4199 
4200     case Xballoon:
4201       if (lev.wind_cnt == 0)
4202 	goto loop;
4203 
4204       switch (lev.wind_direction)
4205       {
4206   	case 0: /* north */
4207   	  switch (Cave[y-1][x])
4208 	  {
4209   	    case Xacid_1:
4210   	    case Xacid_2:
4211   	    case Xacid_3:
4212   	    case Xacid_4:
4213   	    case Xacid_5:
4214   	    case Xacid_6:
4215   	    case Xacid_7:
4216   	    case Xacid_8:
4217   	      Cave[y][x] = Yballoon_nB;
4218   	      if (Cave[y-2][x+1] == Xblank)
4219 		Cave[y-2][x+1] = Yacid_splash_eB;
4220   	      if (Cave[y-2][x-1] == Xblank)
4221 		Cave[y-2][x-1] = Yacid_splash_wB;
4222   	      Next[y][x] = Xblank;
4223   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4224   	      goto loop;
4225 
4226   	    case Xblank:
4227   	    case Yacid_splash_eB:
4228   	    case Yacid_splash_wB:
4229   	      Cave[y][x] = Yballoon_nB;
4230   	      Cave[y-1][x] = Yballoon_n;
4231   	      Next[y][x] = Xblank;
4232   	      Next[y-1][x] = Xballoon;
4233   	      goto loop;
4234 
4235   	    default:
4236   	      goto loop;
4237   	  }
4238 
4239         case 1: /* east */
4240 	  switch (Cave[y][x+1])
4241 	  {
4242   	    case Xacid_1:
4243   	    case Xacid_2:
4244   	    case Xacid_3:
4245   	    case Xacid_4:
4246   	    case Xacid_5:
4247   	    case Xacid_6:
4248   	    case Xacid_7:
4249   	    case Xacid_8:
4250   	      Cave[y][x] = Yballoon_eB;
4251   	      if (Cave[y-1][x+2] == Xblank)
4252 		Cave[y-1][x+2] = Yacid_splash_eB;
4253   	      if (Cave[y-1][x] == Xblank)
4254 		Cave[y-1][x] = Yacid_splash_wB;
4255   	      Next[y][x] = Xblank;
4256   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4257   	      goto loop;
4258 
4259   	    case Xblank:
4260   	    case Yacid_splash_eB:
4261   	    case Yacid_splash_wB:
4262   	      Cave[y][x] = Yballoon_eB;
4263   	      Cave[y][x+1] = Yballoon_e;
4264   	      Next[y][x] = Xblank;
4265   	      Next[y][x+1] = Xballoon;
4266   	      goto loop;
4267 
4268   	    default:
4269   	      goto loop;
4270 	  }
4271 
4272         case 2: /* south */
4273 	  switch (Cave[y+1][x])
4274 	  {
4275   	    case Xacid_1:
4276   	    case Xacid_2:
4277   	    case Xacid_3:
4278   	    case Xacid_4:
4279   	    case Xacid_5:
4280   	    case Xacid_6:
4281   	    case Xacid_7:
4282   	    case Xacid_8:
4283   	      Cave[y][x] = Yballoon_sB;
4284   	      if (Cave[y][x+1] == Xblank)
4285 		Cave[y][x+1] = Yacid_splash_eB;
4286   	      if (Cave[y][x-1] == Xblank)
4287 		Cave[y][x-1] = Yacid_splash_wB;
4288   	      Next[y][x] = Xblank;
4289   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4290   	      goto loop;
4291 
4292   	    case Xblank:
4293   	    case Yacid_splash_eB:
4294   	    case Yacid_splash_wB:
4295   	      Cave[y][x] = Yballoon_sB;
4296   	      Cave[y+1][x] = Yballoon_s;
4297   	      Next[y][x] = Xblank;
4298   	      Next[y+1][x] = Xballoon;
4299   	      goto loop;
4300 
4301   	    default:
4302   	      goto loop;
4303 	  }
4304 
4305         case 3: /* west */
4306 	  switch (Cave[y][x-1])
4307 	  {
4308   	    case Xacid_1:
4309   	    case Xacid_2:
4310   	    case Xacid_3:
4311   	    case Xacid_4:
4312   	    case Xacid_5:
4313   	    case Xacid_6:
4314   	    case Xacid_7:
4315   	    case Xacid_8:
4316   	      Cave[y][x] = Yballoon_wB;
4317   	      if (Cave[y-1][x] == Xblank)
4318 		Cave[y-1][x] = Yacid_splash_eB;
4319   	      if (Cave[y-1][x-2] == Xblank)
4320 		Cave[y-1][x-2] = Yacid_splash_wB;
4321   	      Next[y][x] = Xblank;
4322   	      play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4323   	      goto loop;
4324 
4325   	    case Xblank:
4326   	    case Yacid_splash_eB:
4327   	    case Yacid_splash_wB:
4328   	      Cave[y][x] = Yballoon_wB;
4329   	      Cave[y][x-1] = Yballoon_w;
4330   	      Next[y][x] = Xblank;
4331   	      Next[y][x-1] = Xballoon;
4332   	      goto loop;
4333 
4334   	    default:
4335   	      goto loop;
4336 	  }
4337       }
4338 
4339     /* --------------------------------------------------------------------- */
4340 
4341     case Xacid_1:
4342       Next[y][x] = Xacid_2;
4343       goto loop;
4344 
4345     case Xacid_2:
4346       Next[y][x] = Xacid_3;
4347       goto loop;
4348 
4349     case Xacid_3:
4350       Next[y][x] = Xacid_4;
4351       goto loop;
4352 
4353     case Xacid_4:
4354       Next[y][x] = Xacid_5;
4355       goto loop;
4356 
4357     case Xacid_5:
4358       Next[y][x] = Xacid_6;
4359       goto loop;
4360 
4361     case Xacid_6:
4362       Next[y][x] = Xacid_7;
4363       goto loop;
4364 
4365     case Xacid_7:
4366       Next[y][x] = Xacid_8;
4367       goto loop;
4368 
4369     case Xacid_8:
4370       Next[y][x] = Xacid_1;
4371       goto loop;
4372 
4373     case Xfake_acid_1:
4374       Next[y][x] = Xfake_acid_2;
4375       goto loop;
4376 
4377     case Xfake_acid_2:
4378       Next[y][x] = Xfake_acid_3;
4379       goto loop;
4380 
4381     case Xfake_acid_3:
4382       Next[y][x] = Xfake_acid_4;
4383       goto loop;
4384 
4385     case Xfake_acid_4:
4386       Next[y][x] = Xfake_acid_5;
4387       goto loop;
4388 
4389     case Xfake_acid_5:
4390       Next[y][x] = Xfake_acid_6;
4391       goto loop;
4392 
4393     case Xfake_acid_6:
4394       Next[y][x] = Xfake_acid_7;
4395       goto loop;
4396 
4397     case Xfake_acid_7:
4398       Next[y][x] = Xfake_acid_8;
4399       goto loop;
4400 
4401     case Xfake_acid_8:
4402       Next[y][x] = Xfake_acid_1;
4403       goto loop;
4404 
4405     /* --------------------------------------------------------------------- */
4406 
4407     case Xball_1:
4408       if (lev.ball_state == 0)
4409 	goto loop;
4410 
4411       Cave[y][x] = Xball_1B;
4412       Next[y][x] = Xball_2;
4413       if (lev.ball_cnt)
4414 	goto loop;
4415 
4416       goto ball_common;
4417 
4418     case Xball_2:
4419       if (lev.ball_state == 0)
4420 	goto loop;
4421 
4422       Cave[y][x] = Xball_2B;
4423       Next[y][x] = Xball_1;
4424       if (lev.ball_cnt)
4425 	goto loop;
4426 
4427       goto ball_common;
4428 
4429     ball_common:
4430 
4431       play_element_sound(x, y, SAMPLE_ball, element);
4432       if (lev.ball_random)
4433       {
4434 	switch (RANDOM & 7)
4435 	{
4436   	  case 0:
4437   	    if (lev.ball_array[lev.ball_pos][0] != Xblank &&
4438 		tab_blank[Cave[y-1][x-1]])
4439 	    {
4440   	      Cave[y-1][x-1] = Yball_eat;
4441   	      Next[y-1][x-1] = lev.ball_array[lev.ball_pos][0];
4442   	    }
4443   	    break;
4444 
4445   	  case 1:
4446   	    if (lev.ball_array[lev.ball_pos][1] != Xblank &&
4447 		tab_blank[Cave[y-1][x]])
4448 	    {
4449   	      Cave[y-1][x] = Yball_eat;
4450   	      Next[y-1][x] = lev.ball_array[lev.ball_pos][1];
4451   	    }
4452   	    break;
4453 
4454   	  case 2:
4455   	    if (lev.ball_array[lev.ball_pos][2] != Xblank &&
4456 		tab_blank[Cave[y-1][x+1]])
4457 	    {
4458   	      Cave[y-1][x+1] = Yball_eat;
4459   	      Next[y-1][x+1] = lev.ball_array[lev.ball_pos][2];
4460   	    }
4461   	    break;
4462 
4463   	  case 3:
4464   	    if (lev.ball_array[lev.ball_pos][3] != Xblank &&
4465 		tab_blank[Cave[y][x-1]])
4466 	    {
4467   	      Cave[y][x-1] = Yball_eat;
4468   	      Next[y][x-1] = lev.ball_array[lev.ball_pos][3];
4469   	    }
4470   	    break;
4471 
4472   	  case 4:
4473   	    if (lev.ball_array[lev.ball_pos][4] != Xblank &&
4474 		tab_blank[Cave[y][x+1]])
4475 	    {
4476   	      Cave[y][x+1] = Yball_eat;
4477   	      Next[y][x+1] = lev.ball_array[lev.ball_pos][4];
4478   	    }
4479   	    break;
4480 
4481   	  case 5:
4482   	    if (lev.ball_array[lev.ball_pos][5] != Xblank &&
4483 		tab_blank[Cave[y+1][x-1]])
4484 	    {
4485   	      Cave[y+1][x-1] = Yball_eat;
4486   	      Next[y+1][x-1] = lev.ball_array[lev.ball_pos][5];
4487   	    }
4488   	    break;
4489 
4490   	  case 6:
4491   	    if (lev.ball_array[lev.ball_pos][6] != Xblank &&
4492 		tab_blank[Cave[y+1][x]])
4493 	    {
4494   	      Cave[y+1][x] = Yball_eat;
4495   	      Next[y+1][x] = lev.ball_array[lev.ball_pos][6];
4496   	    }
4497   	    break;
4498 
4499   	  case 7:
4500   	    if (lev.ball_array[lev.ball_pos][7] != Xblank &&
4501 		tab_blank[Cave[y+1][x+1]])
4502 	    {
4503   	      Cave[y+1][x+1] = Yball_eat;
4504   	      Next[y+1][x+1] = lev.ball_array[lev.ball_pos][7];
4505   	    }
4506   	    break;
4507 	}
4508       }
4509       else
4510       {
4511 	if (lev.ball_array[lev.ball_pos][0] != Xblank &&
4512 	    tab_blank[Cave[y-1][x-1]])
4513 	{
4514 	  Cave[y-1][x-1] = Yball_eat;
4515 	  Next[y-1][x-1] = lev.ball_array[lev.ball_pos][0];
4516 	}
4517 
4518 	if (lev.ball_array[lev.ball_pos][1] != Xblank &&
4519 	    tab_blank[Cave[y-1][x]])
4520 	{
4521 	  Cave[y-1][x] = Yball_eat;
4522 	  Next[y-1][x] = lev.ball_array[lev.ball_pos][1];
4523 	}
4524 
4525 	if (lev.ball_array[lev.ball_pos][2] != Xblank &&
4526 	    tab_blank[Cave[y-1][x+1]])
4527 	{
4528 	  Cave[y-1][x+1] = Yball_eat;
4529 	  Next[y-1][x+1] = lev.ball_array[lev.ball_pos][2];
4530 	}
4531 
4532 	if (lev.ball_array[lev.ball_pos][3] != Xblank &&
4533 	    tab_blank[Cave[y][x-1]])
4534 	{
4535 	  Cave[y][x-1] = Yball_eat;
4536 	  Next[y][x-1] = lev.ball_array[lev.ball_pos][3];
4537 	}
4538 
4539 	if (lev.ball_array[lev.ball_pos][4] != Xblank &&
4540 	    tab_blank[Cave[y][x+1]])
4541 	{
4542 	  Cave[y][x+1] = Yball_eat;
4543 	  Next[y][x+1] = lev.ball_array[lev.ball_pos][4];
4544 	}
4545 
4546 	if (lev.ball_array[lev.ball_pos][5] != Xblank &&
4547 	    tab_blank[Cave[y+1][x-1]])
4548 	{
4549 	  Cave[y+1][x-1] = Yball_eat;
4550 	  Next[y+1][x-1] = lev.ball_array[lev.ball_pos][5];
4551 	}
4552 
4553 	if (lev.ball_array[lev.ball_pos][6] != Xblank &&
4554 	    tab_blank[Cave[y+1][x]])
4555 	{
4556 	  Cave[y+1][x] = Yball_eat;
4557 	  Next[y+1][x] = lev.ball_array[lev.ball_pos][6];
4558 	}
4559 
4560 	if (lev.ball_array[lev.ball_pos][7] != Xblank &&
4561 	    tab_blank[Cave[y+1][x+1]])
4562 	{
4563 	  Cave[y+1][x+1] = Yball_eat;
4564 	  Next[y+1][x+1] = lev.ball_array[lev.ball_pos][7];
4565 	}
4566       }
4567 
4568 #if 1
4569       lev.ball_pos = (lev.ball_pos + 1) % lev.num_ball_arrays;
4570 #else
4571       lev.ball_pos = (lev.ball_pos + 1) & 7;
4572 #endif
4573       goto loop;
4574 
4575     /* --------------------------------------------------------------------- */
4576 
4577     case Xgrow_ns:
4578       if (tab_blank[Cave[y-1][x]])
4579       {
4580 	Cave[y-1][x] = Ygrow_ns_eat;
4581 	Next[y-1][x] = Xgrow_ns;
4582 	play_element_sound(x, y, SAMPLE_grow, Xgrow_ns);
4583       }
4584 
4585       if (tab_blank[Cave[y+1][x]])
4586       {
4587 	Cave[y+1][x] = Ygrow_ns_eat;
4588 	Next[y+1][x] = Xgrow_ns;
4589 	play_element_sound(x, y, SAMPLE_grow, Xgrow_ns);
4590       }
4591 
4592       goto loop;
4593 
4594     case Xgrow_ew:
4595       if (tab_blank[Cave[y][x+1]])
4596       {
4597 	Cave[y][x+1] = Ygrow_ew_eat;
4598 	Next[y][x+1] = Xgrow_ew;
4599 	play_element_sound(x, y, SAMPLE_grow, Xgrow_ew);
4600       }
4601 
4602       if (tab_blank[Cave[y][x-1]])
4603       {
4604 	Cave[y][x-1] = Ygrow_ew_eat;
4605 	Next[y][x-1] = Xgrow_ew;
4606 	play_element_sound(x, y, SAMPLE_grow, Xgrow_ew);
4607       }
4608 
4609       goto loop;
4610 
4611     /* --------------------------------------------------------------------- */
4612 
4613     case Xwonderwall:
4614       if (lev.wonderwall_time && lev.wonderwall_state)
4615       {
4616 	Cave[y][x] = XwonderwallB;
4617 	play_element_sound(x, y, SAMPLE_wonder, Xwonderwall);
4618       }
4619 
4620       goto loop;
4621 
4622     /* --------------------------------------------------------------------- */
4623 
4624     case Xexit:
4625       if (lev.required > 0)
4626 	goto loop;
4627 
4628       temp = RANDOM & 63;
4629       if (temp < 21)
4630       {
4631 	Cave[y][x] = Xexit_1;
4632 	Next[y][x] = Xexit_2;
4633       }
4634       else if (temp < 42)
4635       {
4636 	Cave[y][x] = Xexit_2;
4637 	Next[y][x] = Xexit_3;
4638       }
4639       else
4640       {
4641 	Cave[y][x] = Xexit_3;
4642 	Next[y][x] = Xexit_1;
4643       }
4644 
4645       play_element_sound(x, y, SAMPLE_exit_open, Xexit);
4646 
4647       goto loop;
4648 
4649     case Xexit_1:
4650       Next[y][x] = Xexit_2;
4651       goto loop;
4652 
4653     case Xexit_2:
4654       Next[y][x] = Xexit_3;
4655       goto loop;
4656 
4657     case Xexit_3:
4658       Next[y][x] = Xexit_1;
4659       goto loop;
4660 
4661     /* --------------------------------------------------------------------- */
4662 
4663     case Xdynamite_1:
4664       play_element_sound(x, y, SAMPLE_tick, Xdynamite_1);
4665       Next[y][x] = Xdynamite_2;
4666       goto loop;
4667 
4668     case Xdynamite_2:
4669       play_element_sound(x, y, SAMPLE_tick, Xdynamite_2);
4670       Next[y][x] = Xdynamite_3;
4671       goto loop;
4672 
4673     case Xdynamite_3:
4674       play_element_sound(x, y, SAMPLE_tick, Xdynamite_3);
4675       Next[y][x] = Xdynamite_4;
4676       goto loop;
4677 
4678     case Xdynamite_4:
4679       play_element_sound(x, y, SAMPLE_tick, Xdynamite_4);
4680       Next[y][x] = Zdynamite;
4681       Boom[y-1][x-1] = Xblank;
4682       Boom[y-1][x] = Xblank;
4683       Boom[y-1][x+1] = Xblank;
4684       Boom[y][x-1] = Xblank;
4685       Boom[y][x] = Xblank;
4686       Boom[y][x+1] = Xblank;
4687       Boom[y+1][x-1] = Xblank;
4688       Boom[y+1][x] = Xblank;
4689       Boom[y+1][x+1] = Xblank;
4690       goto loop;
4691 
4692     /* --------------------------------------------------------------------- */
4693 
4694     case Xwheel:
4695       if (lev.wheel_cnt && x == lev.wheel_x && y == lev.wheel_y)
4696 	Cave[y][x] = XwheelB;
4697       goto loop;
4698 
4699     /* --------------------------------------------------------------------- */
4700 
4701     case Xswitch:
4702       if (lev.ball_state)
4703 	Cave[y][x] = XswitchB;
4704       goto loop;
4705 
4706     /* --------------------------------------------------------------------- */
4707 
4708     case Xsand_stone:
4709       switch (Cave[y+1][x])
4710       {
4711   	case Xacid_1:
4712   	case Xacid_2:
4713   	case Xacid_3:
4714   	case Xacid_4:
4715   	case Xacid_5:
4716   	case Xacid_6:
4717   	case Xacid_7:
4718   	case Xacid_8:
4719 #if 1
4720   	  Cave[y][x] = Xsand_stonesand_quickout_1;
4721   	  if (Cave[y][x+1] == Xblank)
4722 	    Cave[y][x+1] = Yacid_splash_eB;
4723   	  if (Cave[y][x-1] == Xblank)
4724 	    Cave[y][x-1] = Yacid_splash_wB;
4725   	  Next[y][x] = Xsand_stonesand_quickout_2;
4726   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4727   	  goto loop;
4728 #else
4729   	  Cave[y][x] = Xsand_stonesand_3;
4730   	  if (Cave[y][x+1] == Xblank)
4731 	    Cave[y][x+1] = Yacid_splash_eB;
4732   	  if (Cave[y][x-1] == Xblank)
4733 	    Cave[y][x-1] = Yacid_splash_wB;
4734   	  Next[y][x] = Xsand_stonesand_4;
4735   	  play_element_sound(x, y, SAMPLE_acid, Xacid_1);
4736   	  goto loop;
4737 #endif
4738 
4739   	case Xblank:
4740   	case Yacid_splash_eB:
4741   	case Yacid_splash_wB:
4742 #if 1
4743   	  Cave[y][x] = Xsand_stonesand_quickout_1;
4744   	  Cave[y+1][x] = Xsand_stoneout_1;
4745   	  Next[y][x] = Xsand_stonesand_quickout_2;
4746   	  Next[y+1][x] = Xsand_stoneout_2;
4747   	  goto loop;
4748 #else
4749   	  Cave[y][x] = Xsand_stonesand_3;
4750   	  Cave[y+1][x] = Xsand_stoneout_1;
4751   	  Next[y][x] = Xsand_stonesand_4;
4752   	  Next[y+1][x] = Xsand_stoneout_2;
4753   	  goto loop;
4754 #endif
4755 
4756   	case Xsand:
4757   	  Cave[y][x] = Xsand_stonesand_1;
4758   	  Cave[y+1][x] = Xsand_sandstone_1;
4759   	  Next[y][x] = Xsand_stonesand_2;
4760   	  Next[y+1][x] = Xsand_sandstone_2;
4761   	  goto loop;
4762 
4763   	default:
4764   	  goto loop;
4765       }
4766 
4767     case Xsand_stonein_1:
4768       Next[y][x] = Xsand_stonein_2;
4769       goto loop;
4770 
4771     case Xsand_stonein_2:
4772       Next[y][x] = Xsand_stonein_3;
4773       goto loop;
4774 
4775     case Xsand_stonein_3:
4776       Next[y][x] = Xsand_stonein_4;
4777       goto loop;
4778 
4779     case Xsand_stonein_4:
4780       Next[y][x] = Xblank;
4781       goto loop;
4782 
4783     case Xsand_stonesand_1:
4784       Next[y][x] = Xsand_stonesand_2;
4785       goto loop;
4786 
4787     case Xsand_stonesand_2:
4788       Next[y][x] = Xsand_stonesand_3;
4789       goto loop;
4790 
4791     case Xsand_stonesand_3:
4792       Next[y][x] = Xsand_stonesand_4;
4793       goto loop;
4794 
4795     case Xsand_stonesand_4:
4796       Next[y][x] = Xsand;
4797       goto loop;
4798 
4799 #if 1
4800     case Xsand_stonesand_quickout_1:
4801       Next[y][x] = Xsand_stonesand_quickout_2;
4802       goto loop;
4803 
4804     case Xsand_stonesand_quickout_2:
4805       Next[y][x] = Xsand;
4806       goto loop;
4807 #endif
4808 
4809     case Xsand_stoneout_1:
4810       Next[y][x] = Xsand_stoneout_2;
4811       goto loop;
4812 
4813     case Xsand_stoneout_2:
4814       Next[y][x] = Xstone_fall;
4815       goto loop;
4816 
4817     case Xsand_sandstone_1:
4818       Next[y][x] = Xsand_sandstone_2;
4819       goto loop;
4820 
4821     case Xsand_sandstone_2:
4822       Next[y][x] = Xsand_sandstone_3;
4823       goto loop;
4824 
4825     case Xsand_sandstone_3:
4826       Next[y][x] = Xsand_sandstone_4;
4827       goto loop;
4828 
4829     case Xsand_sandstone_4:
4830       Next[y][x] = Xsand_stone;
4831       goto loop;
4832 
4833     /* --------------------------------------------------------------------- */
4834 
4835     case Xdripper:
4836       if (lev.lenses_cnt)
4837 	Cave[y][x] = XdripperB;
4838       goto loop;
4839 
4840     /* --------------------------------------------------------------------- */
4841 
4842     case Xfake_blank:
4843       if (lev.lenses_cnt)
4844 	Cave[y][x] = Xfake_blankB;
4845       goto loop;
4846 
4847     /* --------------------------------------------------------------------- */
4848 
4849     case Xfake_grass:
4850       if (lev.magnify_cnt)
4851 	Cave[y][x] = Xfake_grassB;
4852       goto loop;
4853 
4854     /* --------------------------------------------------------------------- */
4855 
4856     case Xfake_door_1:
4857       if (lev.magnify_cnt)
4858 	Cave[y][x] = Xdoor_1;
4859       goto loop;
4860 
4861     case Xfake_door_2:
4862       if (lev.magnify_cnt)
4863 	Cave[y][x] = Xdoor_2;
4864       goto loop;
4865 
4866     case Xfake_door_3:
4867       if (lev.magnify_cnt)
4868 	Cave[y][x] = Xdoor_3;
4869       goto loop;
4870 
4871     case Xfake_door_4:
4872       if (lev.magnify_cnt)
4873 	Cave[y][x] = Xdoor_4;
4874       goto loop;
4875 
4876     case Xfake_door_5:
4877       if (lev.magnify_cnt)
4878 	Cave[y][x] = Xdoor_5;
4879       goto loop;
4880 
4881     case Xfake_door_6:
4882       if (lev.magnify_cnt)
4883 	Cave[y][x] = Xdoor_6;
4884       goto loop;
4885 
4886     case Xfake_door_7:
4887       if (lev.magnify_cnt)
4888 	Cave[y][x] = Xdoor_7;
4889       goto loop;
4890 
4891     case Xfake_door_8:
4892       if (lev.magnify_cnt)
4893 	Cave[y][x] = Xdoor_8;
4894       goto loop;
4895 
4896     /* --------------------------------------------------------------------- */
4897 
4898     case Xboom_bug:
4899       bug_boom:
4900       Next[y][x] = Znormal;
4901       Boom[y-1][x-1] = Xemerald;
4902       Boom[y-1][x] = Xemerald;
4903       Boom[y-1][x+1] = Xemerald;
4904       Boom[y][x-1] = Xemerald;
4905       Boom[y][x] = Xdiamond;
4906       Boom[y][x+1] = Xemerald;
4907       Boom[y+1][x-1] = Xemerald;
4908       Boom[y+1][x] = Xemerald;
4909       Boom[y+1][x+1] = Xemerald;
4910 #if PLAY_ELEMENT_SOUND
4911       play_element_sound(x, y, SAMPLE_boom, element);
4912 #endif
4913       goto loop;
4914 
4915     case Xboom_bomb:
4916 
4917     tank_boom:
4918 
4919       Next[y][x] = Znormal;
4920       Boom[y-1][x-1] = Xblank;
4921       Boom[y-1][x] = Xblank;
4922       Boom[y-1][x+1] = Xblank;
4923       Boom[y][x-1] = Xblank;
4924       Boom[y][x] = Xblank;
4925       Boom[y][x+1] = Xblank;
4926       Boom[y+1][x-1] = Xblank;
4927       Boom[y+1][x] = Xblank;
4928       Boom[y+1][x+1] = Xblank;
4929 #if PLAY_ELEMENT_SOUND
4930       play_element_sound(x, y, SAMPLE_boom, element);
4931 #endif
4932       goto loop;
4933 
4934     case Xboom_android:
4935 #if PLAY_ELEMENT_SOUND
4936       play_element_sound(x, y, SAMPLE_boom, Xandroid);
4937 #endif
4938     case Xboom_1:
4939       Next[y][x] = Xboom_2;
4940 #if !PLAY_ELEMENT_SOUND
4941       if (x != lev.exit_x && y != lev.exit_y)
4942 	play_sound(x, y, SAMPLE_boom);
4943       else
4944 	lev.exit_x = lev.exit_y = -1;
4945 #endif
4946       goto loop;
4947 
4948     case Xboom_2:
4949       Next[y][x] = Boom[y][x];
4950       goto loop;
4951 
4952     /* --------------------------------------------------------------------- */
4953 
4954     case ZBORDER:
4955       if (++y < HEIGHT - 1)
4956       {
4957 	x = 0;
4958 	cave_cache = Cave[y];
4959 	goto loop;
4960       }
4961 
4962       goto done;
4963   }
4964 
4965 #undef RANDOM
4966 #undef PLAY
4967 #undef PLAY_FORCE
4968 
4969  done:
4970 
4971   if (ply[0].alive || ply[1].alive || ply[2].alive || ply[3].alive)
4972     lev.score += score;		/* only add a score if someone is alive */
4973 
4974   RandomEM = random;
4975 
4976   {
4977     void *temp = Cave;
4978 
4979     /* triple buffering */
4980     Cave = Next;
4981     Next = Draw;
4982     Draw = temp;
4983   }
4984 }
4985