Merge branch 'master' into releases
[rocksndiamonds.git] / src / game_em / synchro_2.c
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
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
42 void synchro_2(void)
43 {
44   int x = 0;
45   int y = 1;
46   unsigned int 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 }