5 * my own version of the emerald mine engine
11 #define SPRING_ROLL /* spring rolling off round things continues to roll */
12 #define USE_CHANGED_ACID_STUFF
14 #define RANDOM_RAW (seed = seed << 31 | seed >> 1)
15 #define RANDOM(x) (RANDOM_RAW & (x - 1))
17 static unsigned int seed;
20 static void Lboom_bug(int x, int y)
23 Boom[x-1][y-1] = Xemerald;
24 Boom[x][y-1] = Xemerald;
25 Boom[x+1][y-1] = Xemerald;
26 Boom[x-1][y] = Xemerald;
27 Boom[x][y] = Xdiamond;
28 Boom[x+1][y] = Xemerald;
29 Boom[x-1][y+1] = Xemerald;
30 Boom[x][y+1] = Xemerald;
31 Boom[x+1][y+1] = Xemerald;
33 #if PLAY_ELEMENT_SOUND
34 play_element_sound(x, y, SOUND_boom, element);
38 static void Lboom_tank(int x, int y)
41 Boom[x-1][y-1] = Xblank;
42 Boom[x][y-1] = Xblank;
43 Boom[x+1][y-1] = Xblank;
44 Boom[x-1][y] = Xblank;
46 Boom[x+1][y] = Xblank;
47 Boom[x-1][y+1] = Xblank;
48 Boom[x][y+1] = Xblank;
49 Boom[x+1][y+1] = Xblank;
50 #if PLAY_ELEMENT_SOUND
51 play_element_sound(x, y, SOUND_boom, element);
55 static boolean player_killed(struct PLAYER *ply)
63 if (lev.killed_out_of_time && setup.time_limit)
160 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
176 static void kill_player(struct PLAYER *ply)
193 Cave[x][y-1] = Xboom_bug;
204 Cave[x][y-1] = Xboom_bomb;
218 Cave[x+1][y] = Xboom_bug;
229 Cave[x+1][y] = Xboom_bomb;
243 Cave[x][y+1] = Xboom_bug;
254 Cave[x][y+1] = Xboom_bomb;
268 Cave[x-1][y] = Xboom_bug;
279 Cave[x-1][y] = Xboom_bomb;
290 play_element_sound(x, y, SOUND_exit_leave, Xexit_1);
294 play_element_sound(x, y, SOUND_die, Zplayer);
300 #ifdef USE_CHANGED_ACID_STUFF
313 Cave[x][y] = Xboom_1;
319 static boolean player_digfield(struct PLAYER *ply, int dx, int dy)
321 int anim = (dx < 0 ? 3 : dx > 0 ? 1 : dy < 0 ? 0 : dy > 0 ? 2 : 2);
326 boolean result = TRUE;
328 if (!dx && !dy) /* no direction specified */
331 if (dx && dy && ply->joy_snap) /* more than one direction specified */
334 if (ply->joy_snap == 0) /* player wants to move */
336 int element = Cave[x][y];
340 /* fire is released */
344 Cave[x][y] = Zplayer;
345 Next[x][y] = Zplayer;
346 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
356 play_element_sound(x, y, SOUND_blank, Xblank);
357 ply->anim = PLY_walk_n + anim;
362 #ifdef USE_CHANGED_ACID_STUFF
371 if (Cave[x+1][y-1] == Xblank)
372 Cave[x+1][y-1] = Xacid_splash_e;
373 if (Cave[x-1][y-1] == Xblank)
374 Cave[x-1][y-1] = Xacid_splash_w;
375 play_element_sound(x, y, SOUND_acid, Xacid_1);
397 #ifndef USE_CHANGED_ACID_STUFF
407 ply->anim = PLY_walk_n + anim;
413 Cave[x][y] = (dy ? (dy < 0 ? Ygrass_nB : Ygrass_sB) :
414 (dx > 0 ? Ygrass_eB : Ygrass_wB));
415 Next[x][y] = Zplayer;
416 play_element_sound(x, y, SOUND_dirt, Xgrass);
417 ply->anim = PLY_walk_n + anim;
423 Cave[x][y] = (dy ? (dy < 0 ? Ydirt_nB : Ydirt_sB) :
424 (dx > 0 ? Ydirt_eB : Ydirt_wB));
425 Next[x][y] = Zplayer;
426 play_element_sound(x, y, SOUND_dirt, Xdirt);
427 ply->anim = PLY_walk_n + anim;
434 Cave[x][y] = Ydiamond_blank;
435 Next[x][y] = Zplayer;
436 play_element_sound(x, y, SOUND_collect, element);
437 lev.score += lev.diamond_score;
438 lev.required = lev.required < 3 ? 0 : lev.required - 3;
439 game.snapshot.collected_item = TRUE;
440 ply->anim = PLY_walk_n + anim;
447 Cave[x][y] = Yemerald_blank;
448 Next[x][y] = Zplayer;
449 play_element_sound(x, y, SOUND_collect, element);
450 lev.score += lev.emerald_score;
451 lev.required = lev.required < 1 ? 0 : lev.required - 1;
452 game.snapshot.collected_item = TRUE;
453 ply->anim = PLY_walk_n + anim;
459 Cave[x][y] = Ydynamite_blank;
460 Next[x][y] = Zplayer;
461 play_element_sound(x, y, SOUND_collect, element);
462 lev.score += lev.dynamite_score;
463 ply->dynamite = ply->dynamite > 9998 ? 9999 : ply->dynamite + 1;
464 ply->anim = PLY_walk_n + anim;
471 Cave[x][y] = Ykey_1_blank;
476 Cave[x][y] = Ykey_2_blank;
481 Cave[x][y] = Ykey_3_blank;
486 Cave[x][y] = Ykey_4_blank;
491 Cave[x][y] = Ykey_5_blank;
496 Cave[x][y] = Ykey_6_blank;
501 Cave[x][y] = Ykey_7_blank;
506 Cave[x][y] = Ykey_8_blank;
511 Next[x][y] = Zplayer;
512 play_element_sound(x, y, SOUND_collect, element);
513 lev.score += lev.key_score;
514 ply->anim = PLY_walk_n + anim;
520 Cave[x][y] = Ylenses_blank;
521 Next[x][y] = Zplayer;
522 play_element_sound(x, y, SOUND_collect, element);
523 lev.score += lev.lenses_score;
524 lev.lenses_cnt = lev.lenses_time;
525 ply->anim = PLY_walk_n + anim;
531 Cave[x][y] = Ymagnify_blank;
532 Next[x][y] = Zplayer;
533 play_element_sound(x, y, SOUND_collect, element);
534 lev.score += lev.magnify_score;
535 lev.magnify_cnt = lev.magnify_time;
536 ply->anim = PLY_walk_n + anim;
545 switch(Cave[x+dx][y])
555 if (Cave[x+dx+1][y-1] == Xblank)
556 Cave[x+dx+1][y-1] = Xacid_splash_e;
557 if (Cave[x+dx-1][y-1] == Xblank)
558 Cave[x+dx-1][y-1] = Xacid_splash_w;
559 play_element_sound(x, y, SOUND_acid, Xacid_1);
565 Cave[x+dx][y] = dx > 0 ? Ystone_e : Ystone_w;
566 Next[x+dx][y] = Xstone_pause;
570 Cave[x][y] = dx > 0 ? Ystone_eB : Ystone_wB;
571 Next[x][y] = Zplayer;
572 play_element_sound(x, y, SOUND_roll, Xstone);
576 ply->anim = PLY_push_n + anim;
583 switch(Cave[x+dx][y])
593 if (Cave[x+dx+1][y-1] == Xblank)
594 Cave[x+dx+1][y-1] = Xacid_splash_e;
595 if (Cave[x+dx-1][y-1] == Xblank)
596 Cave[x+dx-1][y-1] = Xacid_splash_w;
597 play_element_sound(x, y, SOUND_acid, Xacid_1);
603 Cave[x+dx][y] = dx > 0 ? Ybomb_e : Ybomb_w;
604 Next[x+dx][y] = Xbomb_pause;
608 Cave[x][y] = dx > 0 ? Ybomb_eB : Ybomb_wB;
609 Next[x][y] = Zplayer;
610 play_element_sound(x, y, SOUND_roll, Xbomb);
614 ply->anim = PLY_push_n + anim;
621 switch(Cave[x+dx][y])
631 if (Cave[x+dx+1][y-1] == Xblank)
632 Cave[x+dx+1][y-1] = Xacid_splash_e;
633 if (Cave[x+dx-1][y-1] == Xblank)
634 Cave[x+dx-1][y-1] = Xacid_splash_w;
635 play_element_sound(x, y, SOUND_acid, Xacid_1);
641 Cave[x+dx][y] = dx > 0 ? Ynut_e : Ynut_w;
642 Next[x+dx][y] = Xnut_pause;
646 Cave[x][y] = dx > 0 ? Ynut_eB : Ynut_wB;
647 Next[x][y] = Zplayer;
648 play_element_sound(x, y, SOUND_roll, Xnut);
652 ply->anim = PLY_push_n + anim;
659 switch(Cave[x+dx][y])
663 Cave[x][y] = dx > 0 ? Yspring_alien_eB : Yspring_alien_wB;
664 Cave[x+dx][y] = dx > 0 ? Yspring_alien_e : Yspring_alien_w;
665 Next[x][y] = Zplayer;
666 Next[x+dx][y] = dx > 0 ? Xspring_e : Xspring_w;
667 play_element_sound(x, y, SOUND_slurp, Xalien);
668 lev.score += lev.slurp_score;
680 if (Cave[x+dx+1][y-1] == Xblank)
681 Cave[x+dx+1][y-1] = Xacid_splash_e;
682 if (Cave[x+dx-1][y-1] == Xblank)
683 Cave[x+dx-1][y-1] = Xacid_splash_w;
684 play_element_sound(x, y, SOUND_acid, Xacid_1);
690 Cave[x+dx][y] = dx > 0 ? Yspring_e : Yspring_w;
691 Next[x+dx][y] = dx > 0 ? Xspring_e : Xspring_w;
694 Cave[x][y] = dx > 0 ? Yspring_eB : Yspring_wB;
695 Next[x][y] = Zplayer;
696 play_element_sound(x, y, SOUND_roll, Xspring);
700 ply->anim = PLY_push_n + anim;
707 case Xsand_stonein_1:
708 case Xsand_stonein_2:
709 case Xsand_stonein_3:
710 case Xsand_stonein_4:
714 ply->anim = PLY_push_n + anim;
718 switch(Cave[x+dx][y+dy])
728 if (Cave[x+dx+1][y+dy-1] == Xblank)
729 Cave[x+dx+1][y+dy-1] = Xacid_splash_e;
730 if (Cave[x+dx-1][y+dy-1] == Xblank)
731 Cave[x+dx-1][y+dy-1] = Xacid_splash_w;
732 play_element_sound(x, y, SOUND_acid, Xacid_1);
738 Cave[x+dx][y+dy] = (dy ? (dy < 0 ? Yballoon_n : Yballoon_s) :
739 (dx > 0 ? Yballoon_e : Yballoon_w));
740 Next[x+dx][y+dy] = Xballoon;
743 Cave[x][y] = (dy ? (dy < 0 ? Yballoon_nB : Yballoon_sB) :
744 (dx > 0 ? Yballoon_eB : Yballoon_wB));
745 Next[x][y] = Zplayer;
746 play_element_sound(x, y, SOUND_push, Xballoon);
751 ply->anim = PLY_push_n + anim;
763 switch(Cave[x+dx][y+dy])
773 if (Cave[x+dx+1][y+dy-1] == Xblank)
774 Cave[x+dx+1][y+dy-1] = Xacid_splash_e;
775 if (Cave[x+dx-1][y+dy-1] == Xblank)
776 Cave[x+dx-1][y+dy-1] = Xacid_splash_w;
777 play_element_sound(x, y, SOUND_acid, Xacid_1);
783 Cave[x+dx][y+dy] = (dy ? (dy < 0 ? Yandroid_n : Yandroid_s) :
784 (dx > 0 ? Yandroid_e : Yandroid_w));
785 Next[x+dx][y+dy] = (dy ? (dy < 0 ? Xandroid_2_n : Xandroid_2_s) :
786 (dx > 0 ? Xandroid_2_e : Xandroid_2_w));
789 Cave[x][y] = (dy ? (dy < 0 ? Yandroid_nB : Yandroid_sB) :
790 (dx > 0 ? Yandroid_eB : Yandroid_wB));
791 Next[x][y] = Zplayer;
792 play_element_sound(x, y, SOUND_push, Xandroid);
797 ply->anim = PLY_push_n + anim;
802 if (ply->keys & 0x01)
809 if (ply->keys & 0x02)
816 if (ply->keys & 0x04)
823 if (ply->keys & 0x08)
830 if (ply->keys & 0x10)
837 if (ply->keys & 0x20)
844 if (ply->keys & 0x40)
851 if (ply->keys & 0x80)
857 if (!tab_blank[Cave[x+dx][y+dy]])
860 Cave[x+dx][y+dy] = Zplayer;
861 Next[x+dx][y+dy] = Zplayer;
862 play_element_sound(x, y, SOUND_door, element);
863 ply->anim = PLY_walk_n + anim;
869 play_element_sound(x, y, SOUND_press, element);
870 lev.wheel_cnt = lev.wheel_time;
876 lev.wind_direction = 0;
880 lev.wind_direction = 1;
884 lev.wind_direction = 2;
888 lev.wind_direction = 3;
892 lev.wind_direction = dy ? (dy < 0 ? 0 : 2) : (dx > 0 ? 1 : 3);
896 play_element_sound(x, y, SOUND_press, element);
897 lev.wind_cnt = lev.wind_time;
901 play_element_sound(x, y, SOUND_press, element);
906 play_element_sound(x, y, SOUND_press, element);
907 lev.ball_cnt = lev.ball_time;
908 lev.ball_state = !lev.ball_state;
914 play_element_sound(x, y, SOUND_blank, Xplant);
915 ply->anim = PLY_walk_n + anim;
926 game_em.level_solved = TRUE;
928 ply->anim = PLY_walk_n + anim;
935 if (ply->x == oldx && ply->y == oldy) /* no movement */
938 else /* player wants to snap */
940 int element = Cave[x][y];
944 /* fire is pressed */
947 Cave[x][y] = Ygrass_blank;
949 play_element_sound(x, y, SOUND_dirt, element);
950 ply->anim = PLY_shoot_n + anim;
954 Cave[x][y] = Ydirt_blank;
956 play_element_sound(x, y, SOUND_dirt, element);
957 ply->anim = PLY_shoot_n + anim;
962 Cave[x][y] = Ydiamond_blank;
964 play_element_sound(x, y, SOUND_collect, element);
965 lev.score += lev.diamond_score;
966 lev.required = lev.required < 3 ? 0 : lev.required - 3;
967 game.snapshot.collected_item = TRUE;
968 ply->anim = PLY_walk_n + anim;
973 Cave[x][y] = Yemerald_blank;
975 play_element_sound(x, y, SOUND_collect, element);
976 lev.score += lev.emerald_score;
977 lev.required = lev.required < 1 ? 0 : lev.required - 1;
978 game.snapshot.collected_item = TRUE;
979 ply->anim = PLY_walk_n + anim;
983 Cave[x][y] = Ydynamite_blank;
985 play_element_sound(x, y, SOUND_collect, element);
986 lev.score += lev.dynamite_score;
987 ply->dynamite = ply->dynamite > 9998 ? 9999 : ply->dynamite + 1;
988 ply->anim = PLY_walk_n + anim;
993 Cave[x][y] = Ykey_1_blank;
998 Cave[x][y] = Ykey_2_blank;
1003 Cave[x][y] = Ykey_3_blank;
1008 Cave[x][y] = Ykey_4_blank;
1013 Cave[x][y] = Ykey_5_blank;
1018 Cave[x][y] = Ykey_6_blank;
1023 Cave[x][y] = Ykey_7_blank;
1028 Cave[x][y] = Ykey_8_blank;
1032 Next[x][y] = Xblank;
1033 play_element_sound(x, y, SOUND_collect, element);
1034 lev.score += lev.key_score;
1035 ply->anim = PLY_walk_n + anim;
1039 Cave[x][y] = Ylenses_blank;
1040 Next[x][y] = Xblank;
1041 play_element_sound(x, y, SOUND_collect, element);
1042 lev.score += lev.lenses_score;
1043 lev.lenses_cnt = lev.lenses_time;
1044 ply->anim = PLY_walk_n + anim;
1048 Cave[x][y] = Ymagnify_blank;
1049 Next[x][y] = Xblank;
1050 play_element_sound(x, y, SOUND_collect, element);
1051 lev.score += lev.magnify_score;
1052 lev.magnify_cnt = lev.magnify_time;
1053 ply->anim = PLY_walk_n + anim;
1064 static void check_player(struct PLAYER *ply)
1072 game_em.last_player_direction[ply->num] = MV_NONE;
1074 if (ply->joy_w) /* west */
1079 else if (ply->joy_e) /* east */
1085 if (ply->joy_n) /* north */
1090 else if (ply->joy_s) /* south */
1102 boolean players_visible_before_move;
1103 boolean players_visible_after_move;
1106 players_visible_before_move = checkIfAllPlayersFitToScreen();
1111 players_visible_after_move = checkIfAllPlayersFitToScreen();
1114 player is allowed to move only in the following cases:
1115 - it is not needed to display all players (not focussed to all players)
1116 - all players are (still or again) visible after the move
1117 - some players were already outside visible screen area before the move
1119 can_move = (game.centered_player_nr != -1 ||
1120 players_visible_after_move ||
1121 !players_visible_before_move);
1128 ply->joy_n = ply->joy_e = ply->joy_s = ply->joy_w = 0;
1134 if (dx == 0 && dy == 0)
1140 if (++ply->dynamite_cnt == 5 && ply->dynamite)
1142 Cave[x][y] = Xdynamite_1;
1143 play_element_sound(x, y, SOUND_dynamite, Xdynamite_1);
1149 ply->dynamite_cnt = 0;
1152 RandomEM += 7; /* be a bit more random if the player doesn't move */
1158 ply->joy_n = ply->joy_e = ply->joy_s = ply->joy_w = 0;
1159 ply->dynamite_cnt = 0; /* reset dynamite timer if we move */
1160 ply->joy_spin = !ply->joy_spin;
1162 if (ply->joy_snap == 0) /* player wants to move */
1164 boolean moved = FALSE;
1166 if (ply->last_move_dir & MV_HORIZONTAL)
1168 if (!(moved = player_digfield(ply, 0, dy)))
1169 moved = player_digfield(ply, dx, 0);
1173 if (!(moved = player_digfield(ply, dx, 0)))
1174 moved = player_digfield(ply, 0, dy);
1180 ply->last_move_dir = (dx < 0 ? MV_LEFT : MV_RIGHT);
1181 else if (oldy != ply->y)
1182 ply->last_move_dir = (dy < 0 ? MV_UP : MV_DOWN);
1184 game_em.any_player_moving = TRUE;
1185 game_em.last_moving_player = ply->num;
1186 game_em.last_player_direction[ply->num] = ply->last_move_dir;
1189 else /* player wants to snap */
1191 game_em.any_player_snapping = player_digfield(ply, dx, dy);
1195 static void set_nearest_player_xy(int x, int y, int *dx, int *dy)
1197 int distance, distance_shortest = EM_MAX_CAVE_WIDTH + EM_MAX_CAVE_HEIGHT;
1200 /* default values if no players are alive anymore */
1204 for (i = 0; i < MAX_PLAYERS; i++)
1209 distance = ABS(ply[i].x - x) + ABS(ply[i].y - y);
1211 if (distance < distance_shortest)
1216 distance_shortest = distance;
1221 static void Lacid_1(int x, int y)
1223 Next[x][y] = Xacid_2;
1226 static void Lacid_2(int x, int y)
1228 Next[x][y] = Xacid_3;
1231 static void Lacid_3(int x, int y)
1233 Next[x][y] = Xacid_4;
1236 static void Lacid_4(int x, int y)
1238 Next[x][y] = Xacid_5;
1241 static void Lacid_5(int x, int y)
1243 Next[x][y] = Xacid_6;
1246 static void Lacid_6(int x, int y)
1248 Next[x][y] = Xacid_7;
1251 static void Lacid_7(int x, int y)
1253 Next[x][y] = Xacid_8;
1256 static void Lacid_8(int x, int y)
1258 Next[x][y] = Xacid_1;
1261 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
1262 static void Lfake_acid_1(int x, int y)
1264 Next[x][y] = Xfake_acid_2;
1267 static void Lfake_acid_2(int x, int y)
1269 Next[x][y] = Xfake_acid_3;
1272 static void Lfake_acid_3(int x, int y)
1274 Next[x][y] = Xfake_acid_4;
1277 static void Lfake_acid_4(int x, int y)
1279 Next[x][y] = Xfake_acid_5;
1282 static void Lfake_acid_5(int x, int y)
1284 Next[x][y] = Xfake_acid_6;
1287 static void Lfake_acid_6(int x, int y)
1289 Next[x][y] = Xfake_acid_7;
1292 static void Lfake_acid_7(int x, int y)
1294 Next[x][y] = Xfake_acid_8;
1297 static void Lfake_acid_8(int x, int y)
1299 Next[x][y] = Xfake_acid_1;
1303 static void Landroid(int x, int y)
1307 if (lev.android_clone_cnt == 0)
1309 if (Cave[x-1][y-1] != Xblank &&
1310 Cave[x][y-1] != Xblank &&
1311 Cave[x+1][y-1] != Xblank &&
1312 Cave[x-1][y] != Xblank &&
1313 Cave[x+1][y] != Xblank &&
1314 Cave[x-1][y+1] != Xblank &&
1315 Cave[x][y+1] != Xblank &&
1316 Cave[x+1][y+1] != Xblank)
1321 /* randomly find an object to clone */
1323 case 0: /* S,NE,W,NW,SE,E,SW,N */
1324 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1325 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1326 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1327 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1328 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1329 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1330 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1331 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1334 case 1: /* NW,SE,N,S,NE,SW,E,W */
1335 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1336 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1337 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1338 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1339 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1340 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1341 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1342 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1345 case 2: /* SW,E,S,W,N,NW,SE,NE */
1346 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1347 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1348 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1349 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1350 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1351 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1352 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1353 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1356 case 3: /* N,SE,NE,E,W,S,NW,SW */
1357 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1358 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1359 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1360 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1361 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1362 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1363 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1364 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1367 case 4: /* SE,NW,E,NE,SW,W,N,S */
1368 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1369 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1370 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1371 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1372 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1373 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1374 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1375 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1378 case 5: /* NE,W,SE,SW,S,N,E,NW */
1379 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1380 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1381 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1382 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1383 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1384 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1385 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1386 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1389 case 6: /* E,N,SW,S,NW,NE,SE,W */
1390 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1391 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1392 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1393 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1394 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1395 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1396 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1397 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1400 case 7: /* W,SW,NW,N,E,SE,NE,S */
1401 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1402 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1403 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1404 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1405 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1406 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1407 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1408 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1412 Next[x][y] = temp; /* the item we chose to clone */
1413 play_element_sound(x, y, SOUND_android_clone, temp);
1417 /* randomly find a direction to move */
1419 case 0: /* S,NE,W,NW,SE,E,SW,N */
1420 if (Cave[x][y+1] == Xblank) goto android_s;
1421 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1422 if (Cave[x-1][y] == Xblank) goto android_w;
1423 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1424 if (Cave[x+1][y+1] == Xblank) goto android_se;
1425 if (Cave[x+1][y] == Xblank) goto android_e;
1426 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1427 if (Cave[x][y-1] == Xblank) goto android_n;
1430 case 1: /* NW,SE,N,S,NE,SW,E,W */
1431 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1432 if (Cave[x+1][y+1] == Xblank) goto android_se;
1433 if (Cave[x][y-1] == Xblank) goto android_n;
1434 if (Cave[x][y+1] == Xblank) goto android_s;
1435 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1436 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1437 if (Cave[x+1][y] == Xblank) goto android_e;
1438 if (Cave[x-1][y] == Xblank) goto android_w;
1441 case 2: /* SW,E,S,W,N,NW,SE,NE */
1442 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1443 if (Cave[x+1][y] == Xblank) goto android_e;
1444 if (Cave[x][y+1] == Xblank) goto android_s;
1445 if (Cave[x-1][y] == Xblank) goto android_w;
1446 if (Cave[x][y-1] == Xblank) goto android_n;
1447 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1448 if (Cave[x+1][y+1] == Xblank) goto android_se;
1449 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1452 case 3: /* N,SE,NE,E,W,S,NW,SW */
1453 if (Cave[x][y-1] == Xblank) goto android_n;
1454 if (Cave[x+1][y+1] == Xblank) goto android_se;
1455 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1456 if (Cave[x+1][y] == Xblank) goto android_e;
1457 if (Cave[x-1][y] == Xblank) goto android_w;
1458 if (Cave[x][y+1] == Xblank) goto android_s;
1459 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1460 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1463 case 4: /* SE,NW,E,NE,SW,W,N,S */
1464 if (Cave[x+1][y+1] == Xblank) goto android_se;
1465 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1466 if (Cave[x+1][y] == Xblank) goto android_e;
1467 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1468 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1469 if (Cave[x-1][y] == Xblank) goto android_w;
1470 if (Cave[x][y-1] == Xblank) goto android_n;
1471 if (Cave[x][y+1] == Xblank) goto android_s;
1474 case 5: /* NE,W,SE,SW,S,N,E,NW */
1475 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1476 if (Cave[x-1][y] == Xblank) goto android_w;
1477 if (Cave[x+1][y+1] == Xblank) goto android_se;
1478 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1479 if (Cave[x][y+1] == Xblank) goto android_s;
1480 if (Cave[x][y-1] == Xblank) goto android_n;
1481 if (Cave[x+1][y] == Xblank) goto android_e;
1482 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1485 case 6: /* E,N,SW,S,NW,NE,SE,W */
1486 if (Cave[x+1][y] == Xblank) goto android_e;
1487 if (Cave[x][y-1] == Xblank) goto android_n;
1488 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1489 if (Cave[x][y+1] == Xblank) goto android_s;
1490 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1491 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1492 if (Cave[x+1][y+1] == Xblank) goto android_se;
1493 if (Cave[x-1][y] == Xblank) goto android_w;
1496 case 7: /* W,SW,NW,N,E,SE,NE,S */
1497 if (Cave[x-1][y] == Xblank) goto android_w;
1498 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1499 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1500 if (Cave[x][y-1] == Xblank) goto android_n;
1501 if (Cave[x+1][y] == Xblank) goto android_e;
1502 if (Cave[x+1][y+1] == Xblank) goto android_se;
1503 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1504 if (Cave[x][y+1] == Xblank) goto android_s;
1510 if (lev.android_move_cnt == 0)
1512 if (Cave[x-1][y-1] == Zplayer ||
1513 Cave[x][y-1] == Zplayer ||
1514 Cave[x+1][y-1] == Zplayer ||
1515 Cave[x-1][y] == Zplayer ||
1516 Cave[x+1][y] == Zplayer ||
1517 Cave[x-1][y+1] == Zplayer ||
1518 Cave[x][y+1] == Zplayer ||
1519 Cave[x+1][y+1] == Zplayer)
1522 set_nearest_player_xy(x, y, &dx, &dy);
1524 Next[x][y] = Xblank; /* assume we will move */
1525 temp = ((x < dx) + 1 - (x > dx)) + ((y < dy) + 1 - (y > dy)) * 3;
1531 /* attempt clockwise move first if direct path is blocked */
1533 case 0: /* north west */
1534 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1535 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1536 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1540 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1541 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1542 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1545 case 2: /* north east */
1546 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1547 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1548 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1552 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1553 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1554 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1557 case 4: /* nowhere */
1561 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1562 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1563 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1566 case 6: /* south west */
1567 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1568 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1569 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1573 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1574 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1575 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1578 case 8: /* south east */
1579 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1580 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1581 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1589 /* attempt counterclockwise move first if direct path is blocked */
1591 case 0: /* north west */
1592 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1593 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1594 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1598 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1599 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1600 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1603 case 2: /* north east */
1604 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1605 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1606 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1610 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1611 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1612 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1615 case 4: /* nowhere */
1619 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1620 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1621 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1624 case 6: /* south west */
1625 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1626 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1627 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1631 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1632 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1633 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1636 case 8: /* south east */
1637 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1638 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1639 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1646 Next[x][y] = Xandroid;
1650 Cave[x][y] = Yandroid_nB;
1651 Cave[x][y-1] = Yandroid_n;
1652 Next[x][y-1] = Xandroid;
1653 play_element_sound(x, y, SOUND_android_move, Xandroid);
1657 Cave[x][y] = Yandroid_neB;
1658 Cave[x+1][y-1] = Yandroid_ne;
1659 Next[x+1][y-1] = Xandroid;
1660 play_element_sound(x, y, SOUND_android_move, Xandroid);
1664 Cave[x][y] = Yandroid_eB;
1665 Cave[x+1][y] = Yandroid_e;
1666 Next[x+1][y] = Xandroid;
1667 play_element_sound(x, y, SOUND_android_move, Xandroid);
1671 Cave[x][y] = Yandroid_seB;
1672 Cave[x+1][y+1] = Yandroid_se;
1673 Next[x+1][y+1] = Xandroid;
1674 play_element_sound(x, y, SOUND_android_move, Xandroid);
1678 Cave[x][y] = Yandroid_sB;
1679 Cave[x][y+1] = Yandroid_s;
1680 Next[x][y+1] = Xandroid;
1681 play_element_sound(x, y, SOUND_android_move, Xandroid);
1685 Cave[x][y] = Yandroid_swB;
1686 Cave[x-1][y+1] = Yandroid_sw;
1687 Next[x-1][y+1] = Xandroid;
1688 play_element_sound(x, y, SOUND_android_move, Xandroid);
1692 Cave[x][y] = Yandroid_wB;
1693 Cave[x-1][y] = Yandroid_w;
1694 Next[x-1][y] = Xandroid;
1695 play_element_sound(x, y, SOUND_android_move, Xandroid);
1699 Cave[x][y] = Yandroid_nwB;
1700 Cave[x-1][y-1] = Yandroid_nw;
1701 Next[x-1][y-1] = Xandroid;
1702 play_element_sound(x, y, SOUND_android_move, Xandroid);
1706 static void Landroid_1_n(int x, int y)
1708 switch (Cave[x][y-1])
1718 Cave[x][y] = Yandroid_nB;
1719 if (Cave[x+1][y-2] == Xblank)
1720 Cave[x+1][y-2] = Xacid_splash_e;
1721 if (Cave[x-1][y-2] == Xblank)
1722 Cave[x-1][y-2] = Xacid_splash_w;
1723 Next[x][y] = Xblank;
1724 play_element_sound(x, y, SOUND_acid, Xacid_1);
1728 case Xacid_splash_e:
1729 case Xacid_splash_w:
1730 Cave[x][y] = Yandroid_nB;
1731 Cave[x][y-1] = Yandroid_n;
1732 Next[x][y] = Xblank;
1733 Next[x][y-1] = Xandroid;
1734 play_element_sound(x, y, SOUND_android_move, Xandroid_1_n);
1743 static void Landroid_2_n(int x, int y)
1745 switch (Cave[x][y-1])
1755 Cave[x][y] = Yandroid_nB;
1756 if (Cave[x+1][y-2] == Xblank)
1757 Cave[x+1][y-2] = Xacid_splash_e;
1758 if (Cave[x-1][y-2] == Xblank)
1759 Cave[x-1][y-2] = Xacid_splash_w;
1760 Next[x][y] = Xblank;
1761 play_element_sound(x, y, SOUND_acid, Xacid_1);
1765 case Xacid_splash_e:
1766 case Xacid_splash_w:
1767 Cave[x][y] = Yandroid_nB;
1768 Cave[x][y-1] = Yandroid_n;
1769 Next[x][y] = Xblank;
1770 Next[x][y-1] = Xandroid_1_n;
1771 play_element_sound(x, y, SOUND_android_move, Xandroid_2_n);
1780 static void Landroid_1_e(int x, int y)
1782 switch (Cave[x+1][y])
1792 Cave[x][y] = Yandroid_eB;
1793 if (Cave[x+2][y-1] == Xblank)
1794 Cave[x+2][y-1] = Xacid_splash_e;
1795 if (Cave[x][y-1] == Xblank)
1796 Cave[x][y-1] = Xacid_splash_w;
1797 Next[x][y] = Xblank;
1798 play_element_sound(x, y, SOUND_acid, Xacid_1);
1802 case Xacid_splash_e:
1803 case Xacid_splash_w:
1804 Cave[x][y] = Yandroid_eB;
1805 Cave[x+1][y] = Yandroid_e;
1806 Next[x][y] = Xblank;
1807 Next[x+1][y] = Xandroid;
1808 play_element_sound(x, y, SOUND_android_move, Xandroid_1_e);
1817 static void Landroid_2_e(int x, int y)
1819 switch (Cave[x+1][y])
1829 Cave[x][y] = Yandroid_eB;
1830 if (Cave[x+2][y-1] == Xblank)
1831 Cave[x+2][y-1] = Xacid_splash_e;
1832 if (Cave[x][y-1] == Xblank)
1833 Cave[x][y-1] = Xacid_splash_w;
1834 Next[x][y] = Xblank;
1835 play_element_sound(x, y, SOUND_acid, Xacid_1);
1839 case Xacid_splash_e:
1840 case Xacid_splash_w:
1841 Cave[x][y] = Yandroid_eB;
1842 Cave[x+1][y] = Yandroid_e;
1843 Next[x][y] = Xblank;
1844 Next[x+1][y] = Xandroid_1_e;
1845 play_element_sound(x, y, SOUND_android_move, Xandroid_2_e);
1854 static void Landroid_1_s(int x, int y)
1856 switch (Cave[x][y+1])
1866 Cave[x][y] = Yandroid_sB;
1867 if (Cave[x+1][y] == Xblank)
1868 Cave[x+1][y] = Xacid_splash_e;
1869 if (Cave[x-1][y] == Xblank)
1870 Cave[x-1][y] = Xacid_splash_w;
1871 Next[x][y] = Xblank;
1872 play_element_sound(x, y, SOUND_acid, Xacid_1);
1876 case Xacid_splash_e:
1877 case Xacid_splash_w:
1878 Cave[x][y] = Yandroid_sB;
1879 Cave[x][y+1] = Yandroid_s;
1880 Next[x][y] = Xblank;
1881 Next[x][y+1] = Xandroid;
1882 play_element_sound(x, y, SOUND_android_move, Xandroid_1_s);
1891 static void Landroid_2_s(int x, int y)
1893 switch (Cave[x][y+1])
1903 Cave[x][y] = Yandroid_sB;
1904 if (Cave[x+1][y] == Xblank)
1905 Cave[x+1][y] = Xacid_splash_e;
1906 if (Cave[x-1][y] == Xblank)
1907 Cave[x-1][y] = Xacid_splash_w;
1908 Next[x][y] = Xblank;
1909 play_element_sound(x, y, SOUND_acid, Xacid_1);
1913 case Xacid_splash_e:
1914 case Xacid_splash_w:
1915 Cave[x][y] = Yandroid_sB;
1916 Cave[x][y+1] = Yandroid_s;
1917 Next[x][y] = Xblank;
1918 Next[x][y+1] = Xandroid_1_s;
1919 play_element_sound(x, y, SOUND_android_move, Xandroid_2_s);
1928 static void Landroid_1_w(int x, int y)
1930 switch (Cave[x-1][y])
1940 Cave[x][y] = Yandroid_wB;
1941 if (Cave[x][y-1] == Xblank)
1942 Cave[x][y-1] = Xacid_splash_e;
1943 if (Cave[x-2][y-1] == Xblank)
1944 Cave[x-2][y-1] = Xacid_splash_w;
1945 Next[x][y] = Xblank;
1946 play_element_sound(x, y, SOUND_acid, Xacid_1);
1950 case Xacid_splash_e:
1951 case Xacid_splash_w:
1952 Cave[x][y] = Yandroid_wB;
1953 Cave[x-1][y] = Yandroid_w;
1954 Next[x][y] = Xblank;
1955 Next[x-1][y] = Xandroid;
1956 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
1965 static void Landroid_2_w(int x, int y)
1967 switch (Cave[x-1][y])
1977 Cave[x][y] = Yandroid_wB;
1978 if (Cave[x][y-1] == Xblank)
1979 Cave[x][y-1] = Xacid_splash_e;
1980 if (Cave[x-2][y-1] == Xblank)
1981 Cave[x-2][y-1] = Xacid_splash_w;
1982 Next[x][y] = Xblank;
1983 play_element_sound(x, y, SOUND_acid, Xacid_1);
1987 case Xacid_splash_e:
1988 case Xacid_splash_w:
1989 Cave[x][y] = Yandroid_wB;
1990 Cave[x-1][y] = Yandroid_w;
1991 Next[x][y] = Xblank;
1992 Next[x-1][y] = Xandroid_1_w;
1993 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
2002 static void Leater_n(int x, int y)
2004 if (Cave[x+1][y] == Xdiamond)
2006 Cave[x+1][y] = Ydiamond_blank;
2007 Next[x+1][y] = Xblank;
2008 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2012 if (Cave[x][y+1] == Xdiamond)
2014 Cave[x][y+1] = Ydiamond_blank;
2015 Next[x][y+1] = Xblank;
2016 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2020 if (Cave[x-1][y] == Xdiamond)
2022 Cave[x-1][y] = Ydiamond_blank;
2023 Next[x-1][y] = Xblank;
2024 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2028 if (Cave[x][y-1] == Xdiamond)
2030 Cave[x][y-1] = Ydiamond_blank;
2031 Next[x][y-1] = Xblank;
2032 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2036 switch (Cave[x][y-1])
2046 Cave[x][y] = Yeater_nB;
2047 if (Cave[x+1][y-2] == Xblank)
2048 Cave[x+1][y-2] = Xacid_splash_e;
2049 if (Cave[x-1][y-2] == Xblank)
2050 Cave[x-1][y-2] = Xacid_splash_w;
2051 Next[x][y] = Xblank;
2052 play_element_sound(x, y, SOUND_acid, Xacid_1);
2056 case Xacid_splash_e:
2057 case Xacid_splash_w:
2061 Cave[x][y] = Yeater_nB;
2062 Cave[x][y-1] = Yeater_n;
2063 Next[x][y] = Xblank;
2064 Next[x][y-1] = Xeater_n;
2068 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
2069 play_element_sound(x, y, SOUND_eater, Xeater_n);
2074 static void Leater_e(int x, int y)
2076 if (Cave[x][y+1] == Xdiamond)
2078 Cave[x][y+1] = Ydiamond_blank;
2079 Next[x][y+1] = Xblank;
2080 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2084 if (Cave[x-1][y] == Xdiamond)
2086 Cave[x-1][y] = Ydiamond_blank;
2087 Next[x-1][y] = Xblank;
2088 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2092 if (Cave[x][y-1] == Xdiamond)
2094 Cave[x][y-1] = Ydiamond_blank;
2095 Next[x][y-1] = Xblank;
2096 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2100 if (Cave[x+1][y] == Xdiamond)
2102 Cave[x+1][y] = Ydiamond_blank;
2103 Next[x+1][y] = Xblank;
2104 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2108 switch (Cave[x+1][y])
2118 Cave[x][y] = Yeater_eB;
2119 if (Cave[x+2][y-1] == Xblank)
2120 Cave[x+2][y-1] = Xacid_splash_e;
2121 if (Cave[x][y-1] == Xblank)
2122 Cave[x][y-1] = Xacid_splash_w;
2123 Next[x][y] = Xblank;
2124 play_element_sound(x, y, SOUND_acid, Xacid_1);
2128 case Xacid_splash_e:
2129 case Xacid_splash_w:
2133 Cave[x][y] = Yeater_eB;
2134 Cave[x+1][y] = Yeater_e;
2135 Next[x][y] = Xblank;
2136 Next[x+1][y] = Xeater_e;
2140 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
2141 play_element_sound(x, y, SOUND_eater, Xeater_e);
2146 static void Leater_s(int x, int y)
2148 if (Cave[x-1][y] == Xdiamond)
2150 Cave[x-1][y] = Ydiamond_blank;
2151 Next[x-1][y] = Xblank;
2152 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2156 if (Cave[x][y-1] == Xdiamond)
2158 Cave[x][y-1] = Ydiamond_blank;
2159 Next[x][y-1] = Xblank;
2160 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2164 if (Cave[x+1][y] == Xdiamond)
2166 Cave[x+1][y] = Ydiamond_blank;
2167 Next[x+1][y] = Xblank;
2168 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2172 if (Cave[x][y+1] == Xdiamond)
2174 Cave[x][y+1] = Ydiamond_blank;
2175 Next[x][y+1] = Xblank;
2176 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2180 switch (Cave[x][y+1])
2190 Cave[x][y] = Yeater_sB;
2191 if (Cave[x+1][y] == Xblank)
2192 Cave[x+1][y] = Xacid_splash_e;
2193 if (Cave[x-1][y] == Xblank)
2194 Cave[x-1][y] = Xacid_splash_w;
2195 Next[x][y] = Xblank;
2196 play_element_sound(x, y, SOUND_acid, Xacid_1);
2200 case Xacid_splash_e:
2201 case Xacid_splash_w:
2205 Cave[x][y] = Yeater_sB;
2206 Cave[x][y+1] = Yeater_s;
2207 Next[x][y] = Xblank;
2208 Next[x][y+1] = Xeater_s;
2212 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
2213 play_element_sound(x, y, SOUND_eater, Xeater_s);
2218 static void Leater_w(int x, int y)
2220 if (Cave[x][y-1] == Xdiamond)
2222 Cave[x][y-1] = Ydiamond_blank;
2223 Next[x][y-1] = Xblank;
2224 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2228 if (Cave[x+1][y] == Xdiamond)
2230 Cave[x+1][y] = Ydiamond_blank;
2231 Next[x+1][y] = Xblank;
2232 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2236 if (Cave[x][y+1] == Xdiamond)
2238 Cave[x][y+1] = Ydiamond_blank;
2239 Next[x][y+1] = Xblank;
2240 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2244 if (Cave[x-1][y] == Xdiamond)
2246 Cave[x-1][y] = Ydiamond_blank;
2247 Next[x-1][y] = Xblank;
2248 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2252 switch (Cave[x-1][y])
2262 Cave[x][y] = Yeater_wB;
2263 if (Cave[x][y-1] == Xblank)
2264 Cave[x][y-1] = Xacid_splash_e;
2265 if (Cave[x-2][y-1] == Xblank)
2266 Cave[x-2][y-1] = Xacid_splash_w;
2267 Next[x][y] = Xblank;
2268 play_element_sound(x, y, SOUND_acid, Xacid_1);
2272 case Xacid_splash_e:
2273 case Xacid_splash_w:
2277 Cave[x][y] = Yeater_wB;
2278 Cave[x-1][y] = Yeater_w;
2279 Next[x][y] = Xblank;
2280 Next[x-1][y] = Xeater_w;
2284 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
2285 play_element_sound(x, y, SOUND_eater, Xeater_w);
2290 static void Lalien(int x, int y)
2301 set_nearest_player_xy(x, y, &dx, &dy);
2308 switch (Cave[x][y-1])
2318 Cave[x][y] = Yalien_nB;
2319 if (Cave[x+1][y-2] == Xblank)
2320 Cave[x+1][y-2] = Xacid_splash_e;
2321 if (Cave[x-1][y-2] == Xblank)
2322 Cave[x-1][y-2] = Xacid_splash_w;
2323 Next[x][y] = Xblank;
2324 play_element_sound(x, y, SOUND_acid, Xacid_1);
2328 case Xacid_splash_e:
2329 case Xacid_splash_w:
2333 Cave[x][y] = Yalien_nB;
2334 Cave[x][y-1] = Yalien_n;
2335 Next[x][y] = Xblank;
2336 Next[x][y-1] = Xalien_pause;
2337 play_element_sound(x, y, SOUND_alien, Xalien);
2343 switch (Cave[x][y+1])
2353 Cave[x][y] = Yalien_sB;
2354 Next[x][y] = Xblank;
2355 if (Cave[x+1][y] == Xblank)
2356 Cave[x+1][y] = Xacid_splash_e;
2357 if (Cave[x-1][y] == Xblank)
2358 Cave[x-1][y] = Xacid_splash_w;
2359 play_element_sound(x, y, SOUND_acid, Xacid_1);
2363 case Xacid_splash_e:
2364 case Xacid_splash_w:
2368 Cave[x][y] = Yalien_sB;
2369 Cave[x][y+1] = Yalien_s;
2370 Next[x][y] = Xblank;
2371 Next[x][y+1] = Xalien_pause;
2372 play_element_sound(x, y, SOUND_alien, Xalien);
2381 switch (Cave[x+1][y])
2391 Cave[x][y] = Yalien_eB;
2392 if (Cave[x+2][y-1] == Xblank)
2393 Cave[x+2][y-1] = Xacid_splash_e;
2394 if (Cave[x][y-1] == Xblank)
2395 Cave[x][y-1] = Xacid_splash_w;
2396 Next[x][y] = Xblank;
2397 play_element_sound(x, y, SOUND_acid, Xacid_1);
2401 case Xacid_splash_e:
2402 case Xacid_splash_w:
2406 Cave[x][y] = Yalien_eB;
2407 Cave[x+1][y] = Yalien_e;
2408 Next[x][y] = Xblank;
2409 Next[x+1][y] = Xalien_pause;
2410 play_element_sound(x, y, SOUND_alien, Xalien);
2416 switch (Cave[x-1][y])
2426 Cave[x][y] = Yalien_wB;
2427 if (Cave[x][y-1] == Xblank)
2428 Cave[x][y-1] = Xacid_splash_e;
2429 if (Cave[x-2][y-1] == Xblank)
2430 Cave[x-2][y-1] = Xacid_splash_w;
2431 Next[x][y] = Xblank;
2432 play_element_sound(x, y, SOUND_acid, Xacid_1);
2436 case Xacid_splash_e:
2437 case Xacid_splash_w:
2441 Cave[x][y] = Yalien_wB;
2442 Cave[x-1][y] = Yalien_w;
2443 Next[x][y] = Xblank;
2444 Next[x-1][y] = Xalien_pause;
2445 play_element_sound(x, y, SOUND_alien, Xalien);
2452 static void Lalien_pause(int x, int y)
2454 Next[x][y] = Xalien;
2457 static void Lbug_n(int x, int y)
2459 switch (Cave[x][y-1])
2469 Cave[x][y] = Ybug_nB;
2470 if (Cave[x+1][y-2] == Xblank)
2471 Cave[x+1][y-2] = Xacid_splash_e;
2472 if (Cave[x-1][y-2] == Xblank)
2473 Cave[x-1][y-2] = Xacid_splash_w;
2474 Next[x][y] = Xblank;
2475 play_element_sound(x, y, SOUND_acid, Xacid_1);
2479 case Xacid_splash_e:
2480 case Xacid_splash_w:
2484 Cave[x][y] = Ybug_nB;
2485 Cave[x][y-1] = Ybug_n;
2486 Next[x][y] = Xblank;
2487 Next[x][y-1] = Xbug_1_n;
2488 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
2492 Cave[x][y] = Ybug_n_w;
2493 Next[x][y] = Xbug_2_w;
2494 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
2499 static void Lbug_1_n(int x, int y)
2501 if (tab_amoeba[Cave[x][y-1]] ||
2502 tab_amoeba[Cave[x+1][y]] ||
2503 tab_amoeba[Cave[x][y+1]] ||
2504 tab_amoeba[Cave[x-1][y]])
2511 switch (Cave[x+1][y])
2514 case Xacid_splash_e:
2515 case Xacid_splash_w:
2527 Cave[x][y] = Ybug_n_e;
2528 Next[x][y] = Xbug_2_e;
2529 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
2538 static void Lbug_2_n(int x, int y)
2540 if (tab_amoeba[Cave[x][y-1]] ||
2541 tab_amoeba[Cave[x+1][y]] ||
2542 tab_amoeba[Cave[x][y+1]] ||
2543 tab_amoeba[Cave[x-1][y]])
2553 static void Lbug_e(int x, int y)
2555 switch (Cave[x+1][y])
2565 Cave[x][y] = Ybug_eB;
2566 if (Cave[x+2][y-1] == Xblank)
2567 Cave[x+2][y-1] = Xacid_splash_e;
2568 if (Cave[x][y-1] == Xblank)
2569 Cave[x][y-1] = Xacid_splash_w;
2570 Next[x][y] = Xblank;
2571 play_element_sound(x, y, SOUND_acid, Xacid_1);
2575 case Xacid_splash_e:
2576 case Xacid_splash_w:
2580 Cave[x][y] = Ybug_eB;
2581 Cave[x+1][y] = Ybug_e;
2582 Next[x][y] = Xblank;
2583 Next[x+1][y] = Xbug_1_e;
2584 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
2588 Cave[x][y] = Ybug_e_n;
2589 Next[x][y] = Xbug_2_n;
2590 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
2595 static void Lbug_1_e(int x, int y)
2597 if (tab_amoeba[Cave[x][y-1]] ||
2598 tab_amoeba[Cave[x+1][y]] ||
2599 tab_amoeba[Cave[x][y+1]] ||
2600 tab_amoeba[Cave[x-1][y]])
2607 switch (Cave[x][y+1])
2610 case Xacid_splash_e:
2611 case Xacid_splash_w:
2623 Cave[x][y] = Ybug_e_s;
2624 Next[x][y] = Xbug_2_s;
2625 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
2634 static void Lbug_2_e(int x, int y)
2636 if (tab_amoeba[Cave[x][y-1]] ||
2637 tab_amoeba[Cave[x+1][y]] ||
2638 tab_amoeba[Cave[x][y+1]] ||
2639 tab_amoeba[Cave[x-1][y]])
2649 static void Lbug_s(int x, int y)
2651 switch (Cave[x][y+1])
2661 Cave[x][y] = Ybug_sB;
2662 if (Cave[x+1][y] == Xblank)
2663 Cave[x+1][y] = Xacid_splash_e;
2664 if (Cave[x-1][y] == Xblank)
2665 Cave[x-1][y] = Xacid_splash_w;
2666 Next[x][y] = Xblank;
2667 play_element_sound(x, y, SOUND_acid, Xacid_1);
2671 case Xacid_splash_e:
2672 case Xacid_splash_w:
2676 Cave[x][y] = Ybug_sB;
2677 Cave[x][y+1] = Ybug_s;
2678 Next[x][y] = Xblank;
2679 Next[x][y+1] = Xbug_1_s;
2680 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
2684 Cave[x][y] = Ybug_s_e;
2685 Next[x][y] = Xbug_2_e;
2686 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
2691 static void Lbug_1_s(int x, int y)
2693 if (tab_amoeba[Cave[x][y-1]] ||
2694 tab_amoeba[Cave[x+1][y]] ||
2695 tab_amoeba[Cave[x][y+1]] ||
2696 tab_amoeba[Cave[x-1][y]])
2703 switch (Cave[x-1][y])
2706 case Xacid_splash_e:
2707 case Xacid_splash_w:
2719 Cave[x][y] = Ybug_s_w;
2720 Next[x][y] = Xbug_2_w;
2721 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
2730 static void Lbug_2_s(int x, int y)
2732 if (tab_amoeba[Cave[x][y-1]] ||
2733 tab_amoeba[Cave[x+1][y]] ||
2734 tab_amoeba[Cave[x][y+1]] ||
2735 tab_amoeba[Cave[x-1][y]])
2745 static void Lbug_w(int x, int y)
2747 switch (Cave[x-1][y])
2757 Cave[x][y] = Ybug_wB;
2758 if (Cave[x][y-1] == Xblank)
2759 Cave[x][y-1] = Xacid_splash_e;
2760 if (Cave[x-2][y-1] == Xblank)
2761 Cave[x-2][y-1] = Xacid_splash_w;
2762 Next[x][y] = Xblank;
2763 play_element_sound(x, y, SOUND_acid, Xacid_1);
2767 case Xacid_splash_e:
2768 case Xacid_splash_w:
2772 Cave[x][y] = Ybug_wB;
2773 Cave[x-1][y] = Ybug_w;
2774 Next[x][y] = Xblank;
2775 Next[x-1][y] = Xbug_1_w;
2776 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
2780 Cave[x][y] = Ybug_w_s;
2781 Next[x][y] = Xbug_2_s;
2782 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
2787 static void Lbug_1_w(int x, int y)
2789 if (tab_amoeba[Cave[x][y-1]] ||
2790 tab_amoeba[Cave[x+1][y]] ||
2791 tab_amoeba[Cave[x][y+1]] ||
2792 tab_amoeba[Cave[x-1][y]])
2799 switch (Cave[x][y-1])
2802 case Xacid_splash_e:
2803 case Xacid_splash_w:
2815 Cave[x][y] = Ybug_w_n;
2816 Next[x][y] = Xbug_2_n;
2817 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
2826 static void Lbug_2_w(int x, int y)
2828 if (tab_amoeba[Cave[x][y-1]] ||
2829 tab_amoeba[Cave[x+1][y]] ||
2830 tab_amoeba[Cave[x][y+1]] ||
2831 tab_amoeba[Cave[x-1][y]])
2841 static void Ltank_n(int x, int y)
2843 switch (Cave[x][y-1])
2853 Cave[x][y] = Ytank_nB;
2854 if (Cave[x+1][y-2] == Xblank)
2855 Cave[x+1][y-2] = Xacid_splash_e;
2856 if (Cave[x-1][y-2] == Xblank)
2857 Cave[x-1][y-2] = Xacid_splash_w;
2858 Next[x][y] = Xblank;
2859 play_element_sound(x, y, SOUND_acid, Xacid_1);
2863 case Xacid_splash_e:
2864 case Xacid_splash_w:
2868 Cave[x][y] = Ytank_nB;
2869 Cave[x][y-1] = Ytank_n;
2870 Next[x][y] = Xblank;
2871 Next[x][y-1] = Xtank_1_n;
2872 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
2876 Cave[x][y] = Ytank_n_e;
2877 Next[x][y] = Xtank_2_e;
2878 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
2883 static void Ltank_1_n(int x, int y)
2885 if (tab_amoeba[Cave[x][y-1]] ||
2886 tab_amoeba[Cave[x+1][y]] ||
2887 tab_amoeba[Cave[x][y+1]] ||
2888 tab_amoeba[Cave[x-1][y]])
2895 switch (Cave[x-1][y])
2898 case Xacid_splash_e:
2899 case Xacid_splash_w:
2911 Cave[x][y] = Ytank_n_w;
2912 Next[x][y] = Xtank_2_w;
2913 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
2922 static void Ltank_2_n(int x, int y)
2924 if (tab_amoeba[Cave[x][y-1]] ||
2925 tab_amoeba[Cave[x+1][y]] ||
2926 tab_amoeba[Cave[x][y+1]] ||
2927 tab_amoeba[Cave[x-1][y]])
2937 static void Ltank_e(int x, int y)
2939 switch (Cave[x+1][y])
2949 Cave[x][y] = Ytank_eB;
2950 if (Cave[x+2][y-1] == Xblank)
2951 Cave[x+2][y-1] = Xacid_splash_e;
2952 if (Cave[x][y-1] == Xblank)
2953 Cave[x][y-1] = Xacid_splash_w;
2954 Next[x][y] = Xblank;
2955 play_element_sound(x, y, SOUND_acid, Xacid_1);
2959 case Xacid_splash_e:
2960 case Xacid_splash_w:
2964 Cave[x][y] = Ytank_eB;
2965 Cave[x+1][y] = Ytank_e;
2966 Next[x][y] = Xblank;
2967 Next[x+1][y] = Xtank_1_e;
2968 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
2972 Cave[x][y] = Ytank_e_s;
2973 Next[x][y] = Xtank_2_s;
2974 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
2979 static void Ltank_1_e(int x, int y)
2981 if (tab_amoeba[Cave[x][y-1]] ||
2982 tab_amoeba[Cave[x+1][y]] ||
2983 tab_amoeba[Cave[x][y+1]] ||
2984 tab_amoeba[Cave[x-1][y]])
2991 switch (Cave[x][y-1])
2994 case Xacid_splash_e:
2995 case Xacid_splash_w:
3007 Cave[x][y] = Ytank_e_n;
3008 Next[x][y] = Xtank_2_n;
3009 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
3018 static void Ltank_2_e(int x, int y)
3020 if (tab_amoeba[Cave[x][y-1]] ||
3021 tab_amoeba[Cave[x+1][y]] ||
3022 tab_amoeba[Cave[x][y+1]] ||
3023 tab_amoeba[Cave[x-1][y]])
3033 static void Ltank_s(int x, int y)
3035 switch (Cave[x][y+1])
3045 Cave[x][y] = Ytank_sB;
3046 if (Cave[x+1][y] == Xblank)
3047 Cave[x+1][y] = Xacid_splash_e;
3048 if (Cave[x-1][y] == Xblank)
3049 Cave[x-1][y] = Xacid_splash_w;
3050 Next[x][y] = Xblank;
3051 play_element_sound(x, y, SOUND_acid, Xacid_1);
3055 case Xacid_splash_e:
3056 case Xacid_splash_w:
3060 Cave[x][y] = Ytank_sB;
3061 Cave[x][y+1] = Ytank_s;
3062 Next[x][y] = Xblank;
3063 Next[x][y+1] = Xtank_1_s;
3064 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
3068 Cave[x][y] = Ytank_s_w;
3069 Next[x][y] = Xtank_2_w;
3070 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
3075 static void Ltank_1_s(int x, int y)
3077 if (tab_amoeba[Cave[x][y-1]] ||
3078 tab_amoeba[Cave[x+1][y]] ||
3079 tab_amoeba[Cave[x][y+1]] ||
3080 tab_amoeba[Cave[x-1][y]])
3087 switch (Cave[x+1][y])
3090 case Xacid_splash_e:
3091 case Xacid_splash_w:
3103 Cave[x][y] = Ytank_s_e;
3104 Next[x][y] = Xtank_2_e;
3105 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
3114 static void Ltank_2_s(int x, int y)
3116 if (tab_amoeba[Cave[x][y-1]] ||
3117 tab_amoeba[Cave[x+1][y]] ||
3118 tab_amoeba[Cave[x][y+1]] ||
3119 tab_amoeba[Cave[x-1][y]])
3129 static void Ltank_w(int x, int y)
3131 switch (Cave[x-1][y])
3141 Cave[x][y] = Ytank_wB;
3142 if (Cave[x][y-1] == Xblank)
3143 Cave[x][y-1] = Xacid_splash_e;
3144 if (Cave[x-2][y-1] == Xblank)
3145 Cave[x-2][y-1] = Xacid_splash_w;
3146 Next[x][y] = Xblank;
3147 play_element_sound(x, y, SOUND_acid, Xacid_1);
3151 case Xacid_splash_e:
3152 case Xacid_splash_w:
3156 Cave[x][y] = Ytank_wB;
3157 Cave[x-1][y] = Ytank_w;
3158 Next[x][y] = Xblank;
3159 Next[x-1][y] = Xtank_1_w;
3160 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
3164 Cave[x][y] = Ytank_w_n;
3165 Next[x][y] = Xtank_2_n;
3166 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
3171 static void Ltank_1_w(int x, int y)
3173 if (tab_amoeba[Cave[x][y-1]] ||
3174 tab_amoeba[Cave[x+1][y]] ||
3175 tab_amoeba[Cave[x][y+1]] ||
3176 tab_amoeba[Cave[x-1][y]])
3183 switch (Cave[x][y+1])
3186 case Xacid_splash_e:
3187 case Xacid_splash_w:
3199 Cave[x][y] = Ytank_w_s;
3200 Next[x][y] = Xtank_2_s;
3201 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
3210 static void Ltank_2_w(int x, int y)
3212 if (tab_amoeba[Cave[x][y-1]] ||
3213 tab_amoeba[Cave[x+1][y]] ||
3214 tab_amoeba[Cave[x][y+1]] ||
3215 tab_amoeba[Cave[x-1][y]])
3225 static void Lemerald(int x, int y)
3227 switch (Cave[x][y+1])
3237 Cave[x][y] = Yemerald_sB;
3238 if (Cave[x+1][y] == Xblank)
3239 Cave[x+1][y] = Xacid_splash_e;
3240 if (Cave[x-1][y] == Xblank)
3241 Cave[x-1][y] = Xacid_splash_w;
3242 Next[x][y] = Xblank;
3243 play_element_sound(x, y, SOUND_acid, Xacid_1);
3247 case Xacid_splash_e:
3248 case Xacid_splash_w:
3249 Cave[x][y] = Yemerald_sB;
3250 Cave[x][y+1] = Yemerald_s;
3251 Next[x][y] = Xblank;
3252 Next[x][y+1] = Xemerald_fall;
3271 case Xemerald_pause:
3273 case Xdiamond_pause:
3310 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3312 Cave[x][y] = Yemerald_eB;
3313 Cave[x+1][y] = Yemerald_e;
3314 Next[x][y] = Xblank;
3315 Next[x+1][y] = Xemerald_pause;
3319 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3321 Cave[x][y] = Yemerald_wB;
3322 Cave[x-1][y] = Yemerald_w;
3323 Next[x][y] = Xblank;
3324 Next[x-1][y] = Xemerald_pause;
3330 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3332 Cave[x][y] = Yemerald_wB;
3333 Cave[x-1][y] = Yemerald_w;
3334 Next[x][y] = Xblank;
3335 Next[x-1][y] = Xemerald_pause;
3339 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3341 Cave[x][y] = Yemerald_eB;
3342 Cave[x+1][y] = Yemerald_e;
3343 Next[x][y] = Xblank;
3344 Next[x+1][y] = Xemerald_pause;
3350 if (++lev.shine_cnt > 50)
3352 lev.shine_cnt = RANDOM(8);
3353 Cave[x][y] = Xemerald_shine;
3360 static void Lemerald_pause(int x, int y)
3362 switch (Cave[x][y+1])
3372 Cave[x][y] = Yemerald_sB;
3373 if (Cave[x+1][y] == Xblank)
3374 Cave[x+1][y] = Xacid_splash_e;
3375 if (Cave[x-1][y] == Xblank)
3376 Cave[x-1][y] = Xacid_splash_w;
3377 Next[x][y] = Xblank;
3378 play_element_sound(x, y, SOUND_acid, Xacid_1);
3382 case Xacid_splash_e:
3383 case Xacid_splash_w:
3384 Cave[x][y] = Yemerald_sB;
3385 Cave[x][y+1] = Yemerald_s;
3386 Next[x][y] = Xblank;
3387 Next[x][y+1] = Xemerald_fall;
3391 Cave[x][y] = Xemerald;
3392 Next[x][y] = Xemerald;
3397 static void Lemerald_fall(int x, int y)
3399 switch (Cave[x][y+1])
3409 Cave[x][y] = Yemerald_sB;
3410 if (Cave[x+1][y] == Xblank)
3411 Cave[x+1][y] = Xacid_splash_e;
3412 if (Cave[x-1][y] == Xblank)
3413 Cave[x-1][y] = Xacid_splash_w;
3414 Next[x][y] = Xblank;
3415 play_element_sound(x, y, SOUND_acid, Xacid_1);
3419 case Xacid_splash_e:
3420 case Xacid_splash_w:
3422 Cave[x][y] = Yemerald_sB;
3423 Cave[x][y+1] = Yemerald_s;
3424 Next[x][y] = Xblank;
3425 Next[x][y+1] = Xemerald_fall;
3429 if (lev.wonderwall_time)
3431 lev.wonderwall_state = 1;
3432 Cave[x][y] = Yemerald_sB;
3433 if (tab_blank[Cave[x][y+2]])
3435 Cave[x][y+2] = Ydiamond_s;
3436 Next[x][y+2] = Xdiamond_fall;
3439 Next[x][y] = Xblank;
3440 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
3445 Cave[x][y] = Xemerald;
3446 Next[x][y] = Xemerald;
3447 play_element_sound(x, y, SOUND_diamond, Xemerald);
3452 static void Ldiamond(int x, int y)
3454 switch (Cave[x][y+1])
3464 Cave[x][y] = Ydiamond_sB;
3465 if (Cave[x+1][y] == Xblank)
3466 Cave[x+1][y] = Xacid_splash_e;
3467 if (Cave[x-1][y] == Xblank)
3468 Cave[x-1][y] = Xacid_splash_w;
3469 Next[x][y] = Xblank;
3470 play_element_sound(x, y, SOUND_acid, Xacid_1);
3474 case Xacid_splash_e:
3475 case Xacid_splash_w:
3476 Cave[x][y] = Ydiamond_sB;
3477 Cave[x][y+1] = Ydiamond_s;
3478 Next[x][y] = Xblank;
3479 Next[x][y+1] = Xdiamond_fall;
3498 case Xemerald_pause:
3500 case Xdiamond_pause:
3537 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3539 Cave[x][y] = Ydiamond_eB;
3540 Cave[x+1][y] = Ydiamond_e;
3541 Next[x][y] = Xblank;
3542 Next[x+1][y] = Xdiamond_pause;
3546 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3548 Cave[x][y] = Ydiamond_wB;
3549 Cave[x-1][y] = Ydiamond_w;
3550 Next[x][y] = Xblank;
3551 Next[x-1][y] = Xdiamond_pause;
3557 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3559 Cave[x][y] = Ydiamond_wB;
3560 Cave[x-1][y] = Ydiamond_w;
3561 Next[x][y] = Xblank;
3562 Next[x-1][y] = Xdiamond_pause;
3566 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3568 Cave[x][y] = Ydiamond_eB;
3569 Cave[x+1][y] = Ydiamond_e;
3570 Next[x][y] = Xblank;
3571 Next[x+1][y] = Xdiamond_pause;
3577 if (++lev.shine_cnt > 50)
3579 lev.shine_cnt = RANDOM(8);
3580 Cave[x][y] = Xdiamond_shine;
3587 static void Ldiamond_pause(int x, int y)
3589 switch (Cave[x][y+1])
3599 Cave[x][y] = Ydiamond_sB;
3600 if (Cave[x+1][y] == Xblank)
3601 Cave[x+1][y] = Xacid_splash_e;
3602 if (Cave[x-1][y] == Xblank)
3603 Cave[x-1][y] = Xacid_splash_w;
3604 Next[x][y] = Xblank;
3605 play_element_sound(x, y, SOUND_acid, Xacid_1);
3609 case Xacid_splash_e:
3610 case Xacid_splash_w:
3611 Cave[x][y] = Ydiamond_sB;
3612 Cave[x][y+1] = Ydiamond_s;
3613 Next[x][y] = Xblank;
3614 Next[x][y+1] = Xdiamond_fall;
3618 Cave[x][y] = Xdiamond;
3619 Next[x][y] = Xdiamond;
3624 static void Ldiamond_fall(int x, int y)
3626 switch (Cave[x][y+1])
3636 Cave[x][y] = Ydiamond_sB;
3637 if (Cave[x+1][y] == Xblank)
3638 Cave[x+1][y] = Xacid_splash_e;
3639 if (Cave[x-1][y] == Xblank)
3640 Cave[x-1][y] = Xacid_splash_w;
3641 Next[x][y] = Xblank;
3642 play_element_sound(x, y, SOUND_acid, Xacid_1);
3646 case Xacid_splash_e:
3647 case Xacid_splash_w:
3649 Cave[x][y] = Ydiamond_sB;
3650 Cave[x][y+1] = Ydiamond_s;
3651 Next[x][y] = Xblank;
3652 Next[x][y+1] = Xdiamond_fall;
3656 if (lev.wonderwall_time)
3658 lev.wonderwall_state = 1;
3659 Cave[x][y] = Ydiamond_sB;
3660 if (tab_blank[Cave[x][y+2]])
3662 Cave[x][y+2] = Ystone_s;
3663 Next[x][y+2] = Xstone_fall;
3666 Next[x][y] = Xblank;
3667 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
3672 Cave[x][y] = Xdiamond;
3673 Next[x][y] = Xdiamond;
3674 play_element_sound(x, y, SOUND_diamond, Xdiamond);
3679 static void Lstone(int x, int y)
3681 switch (Cave[x][y+1])
3691 Cave[x][y] = Ystone_sB;
3692 if (Cave[x+1][y] == Xblank)
3693 Cave[x+1][y] = Xacid_splash_e;
3694 if (Cave[x-1][y] == Xblank)
3695 Cave[x-1][y] = Xacid_splash_w;
3696 Next[x][y] = Xblank;
3697 play_element_sound(x, y, SOUND_acid, Xacid_1);
3701 case Xacid_splash_e:
3702 case Xacid_splash_w:
3705 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
3715 Cave[x][y] = Ystone_sB;
3716 Cave[x][y+1] = Ystone_s;
3717 Next[x][y] = Xblank;
3718 Next[x][y+1] = Xstone_fall;
3722 Cave[x][y] = Xsand_stonein_1;
3723 Cave[x][y+1] = Xsand_sandstone_1;
3724 Next[x][y] = Xsand_stonein_2;
3725 Next[x][y+1] = Xsand_sandstone_2;
3744 case Xemerald_pause:
3746 case Xdiamond_pause:
3776 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3778 Cave[x][y] = Ystone_eB;
3779 Cave[x+1][y] = Ystone_e;
3780 Next[x][y] = Xblank;
3781 Next[x+1][y] = Xstone_pause;
3785 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3787 Cave[x][y] = Ystone_wB;
3788 Cave[x-1][y] = Ystone_w;
3789 Next[x][y] = Xblank;
3790 Next[x-1][y] = Xstone_pause;
3796 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3798 Cave[x][y] = Ystone_wB;
3799 Cave[x-1][y] = Ystone_w;
3800 Next[x][y] = Xblank;
3801 Next[x-1][y] = Xstone_pause;
3805 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3807 Cave[x][y] = Ystone_eB;
3808 Cave[x+1][y] = Ystone_e;
3809 Next[x][y] = Xblank;
3810 Next[x+1][y] = Xstone_pause;
3817 static void Lstone_pause(int x, int y)
3819 switch (Cave[x][y+1])
3829 Cave[x][y] = Ystone_sB;
3830 if (Cave[x+1][y] == Xblank)
3831 Cave[x+1][y] = Xacid_splash_e;
3832 if (Cave[x-1][y] == Xblank)
3833 Cave[x-1][y] = Xacid_splash_w;
3834 Next[x][y] = Xblank;
3835 play_element_sound(x, y, SOUND_acid, Xacid_1);
3839 case Xacid_splash_e:
3840 case Xacid_splash_w:
3841 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
3851 Cave[x][y] = Ystone_sB;
3852 Cave[x][y+1] = Ystone_s;
3853 Next[x][y] = Xblank;
3854 Next[x][y+1] = Xstone_fall;
3858 Cave[x][y] = Xstone;
3859 Next[x][y] = Xstone;
3864 static void Lstone_fall(int x, int y)
3866 switch (Cave[x][y+1])
3876 Cave[x][y] = Ystone_sB;
3877 if (Cave[x+1][y] == Xblank)
3878 Cave[x+1][y] = Xacid_splash_e;
3879 if (Cave[x-1][y] == Xblank)
3880 Cave[x-1][y] = Xacid_splash_w;
3881 Next[x][y] = Xblank;
3882 play_element_sound(x, y, SOUND_acid, Xacid_1);
3886 case Xacid_splash_e:
3887 case Xacid_splash_w:
3889 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
3899 Cave[x][y] = Ystone_sB;
3900 Cave[x][y+1] = Ystone_s;
3901 Next[x][y] = Xblank;
3902 Next[x][y+1] = Xstone_fall;
3907 Cave[x][y+1] = Ynut_stone;
3908 Next[x][y] = Xstone;
3909 Next[x][y+1] = Xemerald;
3910 play_element_sound(x, y, SOUND_crack, Xnut);
3911 score += lev.nut_score;
3922 Cave[x][y] = Ystone_sB;
3923 Cave[x][y+1] = Ybug_stone;
3924 Next[x][y+1] = Znormal;
3925 Boom[x-1][y] = Xemerald;
3926 Boom[x][y] = Xemerald;
3927 Boom[x+1][y] = Xemerald;
3928 Boom[x-1][y+1] = Xemerald;
3929 Boom[x][y+1] = Xdiamond;
3930 Boom[x+1][y+1] = Xemerald;
3931 Boom[x-1][y+2] = Xemerald;
3932 Boom[x][y+2] = Xemerald;
3933 Boom[x+1][y+2] = Xemerald;
3934 #if PLAY_ELEMENT_SOUND
3935 play_element_sound(x, y, SOUND_boom, Xstone_fall);
3937 score += lev.bug_score;
3948 Cave[x][y] = Ystone_sB;
3949 Cave[x][y+1] = Ytank_stone;
3950 Next[x][y+1] = Znormal;
3951 Boom[x-1][y] = Xblank;
3952 Boom[x][y] = Xblank;
3953 Boom[x+1][y] = Xblank;
3954 Boom[x-1][y+1] = Xblank;
3955 Boom[x][y+1] = Xblank;
3956 Boom[x+1][y+1] = Xblank;
3957 Boom[x-1][y+2] = Xblank;
3958 Boom[x][y+2] = Xblank;
3959 Boom[x+1][y+2] = Xblank;
3960 #if PLAY_ELEMENT_SOUND
3961 play_element_sound(x, y, SOUND_boom, Xstone_fall);
3963 score += lev.tank_score;
3969 switch (Cave[x+1][y+1])
3972 case Xacid_splash_e:
3973 case Xacid_splash_w:
3976 Cave[x][y+1] = Xspring_e;
3980 Cave[x][y+1] = Xspring_w;
3986 switch (Cave[x-1][y+1])
3989 case Xacid_splash_e:
3990 case Xacid_splash_w:
3993 Cave[x][y+1] = Xspring_w;
3996 Cave[x][y+1] = Xspring_e;
4001 Next[x][y] = Xstone;
4008 Cave[x][y] = Ystone_sB;
4009 Cave[x][y+1] = Yeater_stone;
4010 Next[x][y+1] = Znormal;
4011 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
4012 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
4013 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
4014 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
4015 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
4016 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
4017 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
4018 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
4019 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
4020 #if PLAY_ELEMENT_SOUND
4021 play_element_sound(x, y, SOUND_boom, Xstone_fall);
4023 lev.eater_pos = (lev.eater_pos + 1) & 7;
4024 score += lev.eater_score;
4029 Cave[x][y] = Ystone_sB;
4030 Cave[x][y+1] = Yalien_stone;
4031 Next[x][y+1] = Znormal;
4032 Boom[x-1][y] = Xblank;
4033 Boom[x][y] = Xblank;
4034 Boom[x+1][y] = Xblank;
4035 Boom[x-1][y+1] = Xblank;
4036 Boom[x][y+1] = Xblank;
4037 Boom[x+1][y+1] = Xblank;
4038 Boom[x-1][y+2] = Xblank;
4039 Boom[x][y+2] = Xblank;
4040 Boom[x+1][y+2] = Xblank;
4041 #if PLAY_ELEMENT_SOUND
4042 play_element_sound(x, y, SOUND_boom, Xstone_fall);
4044 score += lev.alien_score;
4048 case Xdiamond_pause:
4049 switch (Cave[x][y+2])
4052 case Xacid_splash_e:
4053 case Xacid_splash_w:
4097 Next[x][y] = Xstone;
4098 play_element_sound(x, y, SOUND_stone, Xstone);
4102 Cave[x][y] = Ystone_sB;
4103 Cave[x][y+1] = Ydiamond_stone;
4104 Next[x][y] = Xblank;
4105 Next[x][y+1] = Xstone_pause;
4106 play_element_sound(x, y, SOUND_squash, Xdiamond);
4111 Cave[x][y+1] = Ybomb_blank;
4112 Next[x][y+1] = Znormal;
4113 Boom[x-1][y] = Xblank;
4114 Boom[x][y] = Xblank;
4115 Boom[x+1][y] = Xblank;
4116 Boom[x-1][y+1] = Xblank;
4117 Boom[x][y+1] = Xblank;
4118 Boom[x+1][y+1] = Xblank;
4119 Boom[x-1][y+2] = Xblank;
4120 Boom[x][y+2] = Xblank;
4121 Boom[x+1][y+2] = Xblank;
4122 #if PLAY_ELEMENT_SOUND
4123 play_element_sound(x, y, SOUND_boom, Xstone_fall);
4128 if (lev.wonderwall_time)
4130 lev.wonderwall_state = 1;
4131 Cave[x][y] = Ystone_sB;
4133 if (tab_blank[Cave[x][y+2]])
4135 Cave[x][y+2] = Yemerald_s;
4136 Next[x][y+2] = Xemerald_fall;
4139 Next[x][y] = Xblank;
4140 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
4145 Cave[x][y] = Xstone;
4146 Next[x][y] = Xstone;
4147 play_element_sound(x, y, SOUND_stone, Xstone);
4152 static void Lbomb(int x, int y)
4154 switch (Cave[x][y+1])
4164 Cave[x][y] = Ybomb_sB;
4165 if (Cave[x+1][y] == Xblank)
4166 Cave[x+1][y] = Xacid_splash_e;
4167 if (Cave[x-1][y] == Xblank)
4168 Cave[x-1][y] = Xacid_splash_w;
4169 Next[x][y] = Xblank;
4170 play_element_sound(x, y, SOUND_acid, Xacid_1);
4174 case Xacid_splash_e:
4175 case Xacid_splash_w:
4176 Cave[x][y] = Ybomb_sB;
4177 Cave[x][y+1] = Ybomb_s;
4178 Next[x][y] = Xblank;
4179 Next[x][y+1] = Xbomb_fall;
4198 case Xemerald_pause:
4200 case Xdiamond_pause:
4228 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4230 Cave[x][y] = Ybomb_eB;
4231 Cave[x+1][y] = Ybomb_e;
4232 Next[x][y] = Xblank;
4233 Next[x+1][y] = Xbomb_pause;
4237 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4239 Cave[x][y] = Ybomb_wB;
4240 Cave[x-1][y] = Ybomb_w;
4241 Next[x][y] = Xblank;
4242 Next[x-1][y] = Xbomb_pause;
4248 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4250 Cave[x][y] = Ybomb_wB;
4251 Cave[x-1][y] = Ybomb_w;
4252 Next[x][y] = Xblank;
4253 Next[x-1][y] = Xbomb_pause;
4257 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4259 Cave[x][y] = Ybomb_eB;
4260 Cave[x+1][y] = Ybomb_e;
4261 Next[x][y] = Xblank;
4262 Next[x+1][y] = Xbomb_pause;
4269 static void Lbomb_pause(int x, int y)
4271 switch (Cave[x][y+1])
4281 Cave[x][y] = Ybomb_sB;
4282 if (Cave[x+1][y] == Xblank)
4283 Cave[x+1][y] = Xacid_splash_e;
4284 if (Cave[x-1][y] == Xblank)
4285 Cave[x-1][y] = Xacid_splash_w;
4286 Next[x][y] = Xblank;
4287 play_element_sound(x, y, SOUND_acid, Xacid_1);
4291 case Xacid_splash_e:
4292 case Xacid_splash_w:
4293 Cave[x][y] = Ybomb_sB;
4294 Cave[x][y+1] = Ybomb_s;
4295 Next[x][y] = Xblank;
4296 Next[x][y+1] = Xbomb_fall;
4306 static void Lbomb_fall(int x, int y)
4308 switch (Cave[x][y+1])
4318 Cave[x][y] = Ybomb_sB;
4319 if (Cave[x+1][y] == Xblank)
4320 Cave[x+1][y] = Xacid_splash_e;
4321 if (Cave[x-1][y] == Xblank)
4322 Cave[x-1][y] = Xacid_splash_w;
4323 Next[x][y] = Xblank;
4324 play_element_sound(x, y, SOUND_acid, Xacid_1);
4328 case Xacid_splash_e:
4329 case Xacid_splash_w:
4330 Cave[x][y] = Ybomb_sB;
4331 Cave[x][y+1] = Ybomb_s;
4332 Next[x][y] = Xblank;
4333 Next[x][y+1] = Xbomb_fall;
4337 Cave[x][y] = Ybomb_blank;
4338 Next[x][y] = Znormal;
4339 Boom[x-1][y-1] = Xblank;
4340 Boom[x][y-1] = Xblank;
4341 Boom[x+1][y-1] = Xblank;
4342 Boom[x-1][y] = Xblank;
4343 Boom[x][y] = Xblank;
4344 Boom[x+1][y] = Xblank;
4345 Boom[x-1][y+1] = Xblank;
4346 Boom[x][y+1] = Xblank;
4347 Boom[x+1][y+1] = Xblank;
4348 #if PLAY_ELEMENT_SOUND
4349 play_element_sound(x, y, SOUND_boom, Xbomb_fall);
4355 static void Lnut(int x, int y)
4357 switch (Cave[x][y+1])
4367 Cave[x][y] = Ynut_sB;
4368 if (Cave[x+1][y] == Xblank)
4369 Cave[x+1][y] = Xacid_splash_e;
4370 if (Cave[x-1][y] == Xblank)
4371 Cave[x-1][y] = Xacid_splash_w;
4372 Next[x][y] = Xblank;
4373 play_element_sound(x, y, SOUND_acid, Xacid_1);
4377 case Xacid_splash_e:
4378 case Xacid_splash_w:
4379 Cave[x][y] = Ynut_sB;
4380 Cave[x][y+1] = Ynut_s;
4381 Next[x][y] = Xblank;
4382 Next[x][y+1] = Xnut_fall;
4401 case Xemerald_pause:
4403 case Xdiamond_pause:
4431 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4433 Cave[x][y] = Ynut_eB;
4434 Cave[x+1][y] = Ynut_e;
4435 Next[x][y] = Xblank;
4436 Next[x+1][y] = Xnut_pause;
4440 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4442 Cave[x][y] = Ynut_wB;
4443 Cave[x-1][y] = Ynut_w;
4444 Next[x][y] = Xblank;
4445 Next[x-1][y] = Xnut_pause;
4451 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4453 Cave[x][y] = Ynut_wB;
4454 Cave[x-1][y] = Ynut_w;
4455 Next[x][y] = Xblank;
4456 Next[x-1][y] = Xnut_pause;
4460 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4462 Cave[x][y] = Ynut_eB;
4463 Cave[x+1][y] = Ynut_e;
4464 Next[x][y] = Xblank;
4465 Next[x+1][y] = Xnut_pause;
4472 static void Lnut_pause(int x, int y)
4474 switch (Cave[x][y+1])
4484 Cave[x][y] = Ynut_sB;
4485 if (Cave[x+1][y] == Xblank)
4486 Cave[x+1][y] = Xacid_splash_e;
4487 if (Cave[x-1][y] == Xblank)
4488 Cave[x-1][y] = Xacid_splash_w;
4489 Next[x][y] = Xblank;
4490 play_element_sound(x, y, SOUND_acid, Xacid_1);
4494 case Xacid_splash_e:
4495 case Xacid_splash_w:
4496 Cave[x][y] = Ynut_sB;
4497 Cave[x][y+1] = Ynut_s;
4498 Next[x][y] = Xblank;
4499 Next[x][y+1] = Xnut_fall;
4509 static void Lnut_fall(int x, int y)
4511 switch (Cave[x][y+1])
4521 Cave[x][y] = Ynut_sB;
4522 if (Cave[x+1][y] == Xblank)
4523 Cave[x+1][y] = Xacid_splash_e;
4524 if (Cave[x-1][y] == Xblank)
4525 Cave[x-1][y] = Xacid_splash_w;
4526 Next[x][y] = Xblank;
4527 play_element_sound(x, y, SOUND_acid, Xacid_1);
4531 case Xacid_splash_e:
4532 case Xacid_splash_w:
4534 Cave[x][y] = Ynut_sB;
4535 Cave[x][y+1] = Ynut_s;
4536 Next[x][y] = Xblank;
4537 Next[x][y+1] = Xnut_fall;
4543 play_element_sound(x, y, SOUND_nut, Xnut);
4548 static void Lspring(int x, int y)
4550 switch (Cave[x][y+1])
4560 Cave[x][y] = Yspring_sB;
4561 if (Cave[x+1][y] == Xblank)
4562 Cave[x+1][y] = Xacid_splash_e;
4563 if (Cave[x-1][y] == Xblank)
4564 Cave[x-1][y] = Xacid_splash_w;
4565 Next[x][y] = Xblank;
4566 play_element_sound(x, y, SOUND_acid, Xacid_1);
4570 case Xacid_splash_e:
4571 case Xacid_splash_w:
4574 Cave[x][y] = Yspring_sB;
4575 Cave[x][y+1] = Yspring_s;
4576 Next[x][y] = Xblank;
4577 Next[x][y+1] = Xspring_fall;
4596 case Xemerald_pause:
4598 case Xdiamond_pause:
4626 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4628 Cave[x][y] = Yspring_eB;
4629 Cave[x+1][y] = Yspring_e;
4630 if (Cave[x][y+1] == Xbumper)
4631 Cave[x][y+1] = XbumperB;
4632 Next[x][y] = Xblank;
4635 Next[x+1][y] = Xspring_e;
4637 Next[x+1][y] = Xspring_pause;
4642 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4644 Cave[x][y] = Yspring_wB;
4645 Cave[x-1][y] = Yspring_w;
4646 if (Cave[x][y+1] == Xbumper)
4647 Cave[x][y+1] = XbumperB;
4648 Next[x][y] = Xblank;
4651 Next[x-1][y] = Xspring_w;
4653 Next[x-1][y] = Xspring_pause;
4660 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4662 Cave[x][y] = Yspring_wB;
4663 Cave[x-1][y] = Yspring_w;
4664 if (Cave[x][y+1] == Xbumper)
4665 Cave[x][y+1] = XbumperB;
4666 Next[x][y] = Xblank;
4669 Next[x-1][y] = Xspring_w;
4671 Next[x-1][y] = Xspring_pause;
4676 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4678 Cave[x][y] = Yspring_eB;
4679 Cave[x+1][y] = Yspring_e;
4680 if (Cave[x][y+1] == Xbumper)
4681 Cave[x][y+1] = XbumperB;
4682 Next[x][y] = Xblank;
4685 Next[x+1][y] = Xspring_e;
4687 Next[x+1][y] = Xspring_pause;
4695 static void Lspring_pause(int x, int y)
4697 switch (Cave[x][y+1])
4707 Cave[x][y] = Yspring_sB;
4708 if (Cave[x+1][y] == Xblank)
4709 Cave[x+1][y] = Xacid_splash_e;
4710 if (Cave[x-1][y] == Xblank)
4711 Cave[x-1][y] = Xacid_splash_w;
4712 Next[x][y] = Xblank;
4713 play_element_sound(x, y, SOUND_acid, Xacid_1);
4717 case Xacid_splash_e:
4718 case Xacid_splash_w:
4719 Cave[x][y] = Yspring_sB;
4720 Cave[x][y+1] = Yspring_s;
4721 Next[x][y] = Xblank;
4722 Next[x][y+1] = Xspring_fall;
4726 Cave[x][y] = Xspring;
4727 Next[x][y] = Xspring;
4732 static void Lspring_e(int x, int y)
4734 switch (Cave[x][y+1])
4744 Cave[x][y] = Yspring_sB;
4745 if (Cave[x+1][y] == Xblank)
4746 Cave[x+1][y] = Xacid_splash_e;
4747 if (Cave[x-1][y] == Xblank)
4748 Cave[x-1][y] = Xacid_splash_w;
4749 Next[x][y] = Xblank;
4750 play_element_sound(x, y, SOUND_acid, Xacid_1);
4754 case Xacid_splash_e:
4755 case Xacid_splash_w:
4756 Cave[x][y] = Yspring_sB;
4757 Cave[x][y+1] = Yspring_s;
4758 Next[x][y] = Xblank;
4759 Next[x][y+1] = Xspring_fall;
4763 Cave[x][y+1] = XbumperB;
4766 switch (Cave[x+1][y])
4776 Cave[x][y] = Yspring_eB;
4777 if (Cave[x+2][y-1] == Xblank)
4778 Cave[x+2][y-1] = Xacid_splash_e;
4779 if (Cave[x][y-1] == Xblank)
4780 Cave[x][y-1] = Xacid_splash_w;
4781 Next[x][y] = Xblank;
4782 play_element_sound(x, y, SOUND_acid, Xacid_1);
4786 case Xacid_splash_e:
4787 case Xacid_splash_w:
4792 Cave[x][y] = Yspring_eB;
4793 Cave[x+1][y] = Yspring_e;
4794 Next[x][y] = Xblank;
4795 Next[x+1][y] = Xspring_e;
4804 Cave[x][y] = Yspring_alien_eB;
4805 Cave[x+1][y] = Yspring_alien_e;
4806 Next[x][y] = Xblank;
4807 Next[x+1][y] = Xspring_e;
4808 play_element_sound(x, y, SOUND_slurp, Xalien);
4809 score += lev.slurp_score;
4814 Cave[x+1][y] = XbumperB;
4815 Next[x][y] = Xspring_w;
4816 play_element_sound(x, y, SOUND_spring, Xspring);
4820 Cave[x][y] = Xspring;
4821 Next[x][y] = Xspring;
4822 play_element_sound(x, y, SOUND_spring, Xspring);
4827 static void Lspring_w(int x, int y)
4829 switch (Cave[x][y+1])
4839 Cave[x][y] = Yspring_sB;
4840 if (Cave[x+1][y] == Xblank)
4841 Cave[x+1][y] = Xacid_splash_e;
4842 if (Cave[x-1][y] == Xblank)
4843 Cave[x-1][y] = Xacid_splash_w;
4844 Next[x][y] = Xblank;
4845 play_element_sound(x, y, SOUND_acid, Xacid_1);
4849 case Xacid_splash_e:
4850 case Xacid_splash_w:
4851 Cave[x][y] = Yspring_sB;
4852 Cave[x][y+1] = Yspring_s;
4853 Next[x][y] = Xblank;
4854 Next[x][y+1] = Xspring_fall;
4858 Cave[x][y+1] = XbumperB;
4861 switch (Cave[x-1][y])
4871 Cave[x][y] = Yspring_wB;
4872 if (Cave[x][y-1] == Xblank)
4873 Cave[x][y-1] = Xacid_splash_e;
4874 if (Cave[x-2][y-1] == Xblank)
4875 Cave[x-2][y-1] = Xacid_splash_w;
4876 Next[x][y] = Xblank;
4877 play_element_sound(x, y, SOUND_acid, Xacid_1);
4881 case Xacid_splash_e:
4882 case Xacid_splash_w:
4887 Cave[x][y] = Yspring_wB;
4888 Cave[x-1][y] = Yspring_w;
4889 Next[x][y] = Xblank;
4890 Next[x-1][y] = Xspring_w;
4899 Cave[x][y] = Yspring_alien_wB;
4900 Cave[x-1][y] = Yspring_alien_w;
4901 Next[x][y] = Xblank;
4902 Next[x-1][y] = Xspring_w;
4903 play_element_sound(x, y, SOUND_slurp, Xalien);
4904 score += lev.slurp_score;
4909 Cave[x-1][y] = XbumperB;
4910 Next[x][y] = Xspring_e;
4911 play_element_sound(x, y, SOUND_spring, Xspring);
4915 Cave[x][y] = Xspring;
4916 Next[x][y] = Xspring;
4917 play_element_sound(x, y, SOUND_spring, Xspring);
4922 static void Lspring_fall(int x, int y)
4924 switch (Cave[x][y+1])
4934 Cave[x][y] = Yspring_sB;
4935 if (Cave[x+1][y] == Xblank)
4936 Cave[x+1][y] = Xacid_splash_e;
4937 if (Cave[x-1][y] == Xblank)
4938 Cave[x-1][y] = Xacid_splash_w;
4939 Next[x][y] = Xblank;
4940 play_element_sound(x, y, SOUND_acid, Xacid_1);
4944 case Xacid_splash_e:
4945 case Xacid_splash_w:
4947 Cave[x][y] = Yspring_sB;
4948 Cave[x][y+1] = Yspring_s;
4949 Next[x][y] = Xblank;
4950 Next[x][y+1] = Xspring_fall;
4955 Cave[x][y+1] = Ybomb_blank;
4956 Next[x][y+1] = Znormal;
4957 Boom[x-1][y] = Xblank;
4958 Boom[x][y] = Xblank;
4959 Boom[x+1][y] = Xblank;
4960 Boom[x-1][y+1] = Xblank;
4961 Boom[x][y+1] = Xblank;
4962 Boom[x+1][y+1] = Xblank;
4963 Boom[x-1][y+2] = Xblank;
4964 Boom[x][y+2] = Xblank;
4965 Boom[x+1][y+2] = Xblank;
4966 #if PLAY_ELEMENT_SOUND
4967 play_element_sound(x, y, SOUND_boom, Xspring_fall);
4979 Cave[x][y] = Yspring_sB;
4980 Cave[x][y+1] = Ybug_spring;
4981 Next[x][y+1] = Znormal;
4982 Boom[x-1][y] = Xemerald;
4983 Boom[x][y] = Xemerald;
4984 Boom[x+1][y] = Xemerald;
4985 Boom[x-1][y+1] = Xemerald;
4986 Boom[x][y+1] = Xdiamond;
4987 Boom[x+1][y+1] = Xemerald;
4988 Boom[x-1][y+2] = Xemerald;
4989 Boom[x][y+2] = Xemerald;
4990 Boom[x+1][y+2] = Xemerald;
4991 #if PLAY_ELEMENT_SOUND
4992 play_element_sound(x, y, SOUND_boom, Xspring_fall);
4994 score += lev.bug_score;
5005 Cave[x][y] = Yspring_sB;
5006 Cave[x][y+1] = Ytank_spring;
5007 Next[x][y+1] = Znormal;
5008 Boom[x-1][y] = Xblank;
5009 Boom[x][y] = Xblank;
5010 Boom[x+1][y] = Xblank;
5011 Boom[x-1][y+1] = Xblank;
5012 Boom[x][y+1] = Xblank;
5013 Boom[x+1][y+1] = Xblank;
5014 Boom[x-1][y+2] = Xblank;
5015 Boom[x][y+2] = Xblank;
5016 Boom[x+1][y+2] = Xblank;
5017 #if PLAY_ELEMENT_SOUND
5018 play_element_sound(x, y, SOUND_boom, Xspring_fall);
5020 score += lev.tank_score;
5027 Cave[x][y] = Yspring_sB;
5028 Cave[x][y+1] = Yeater_spring;
5029 Next[x][y+1] = Znormal;
5030 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
5031 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
5032 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
5033 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
5034 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
5035 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
5036 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
5037 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
5038 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
5039 #if PLAY_ELEMENT_SOUND
5040 play_element_sound(x, y, SOUND_boom, Xspring_fall);
5042 lev.eater_pos = (lev.eater_pos + 1) & 7;
5043 score += lev.eater_score;
5048 Cave[x][y] = Yspring_sB;
5049 Cave[x][y+1] = Yalien_spring;
5050 Next[x][y+1] = Znormal;
5051 Boom[x-1][y] = Xblank;
5052 Boom[x][y] = Xblank;
5053 Boom[x+1][y] = Xblank;
5054 Boom[x-1][y+1] = Xblank;
5055 Boom[x][y+1] = Xblank;
5056 Boom[x+1][y+1] = Xblank;
5057 Boom[x-1][y+2] = Xblank;
5058 Boom[x][y+2] = Xblank;
5059 Boom[x+1][y+2] = Xblank;
5060 #if PLAY_ELEMENT_SOUND
5061 play_element_sound(x, y, SOUND_boom, Xspring_fall);
5063 score += lev.alien_score;
5067 Cave[x][y] = Xspring;
5068 Next[x][y] = Xspring;
5069 play_element_sound(x, y, SOUND_spring, Xspring);
5074 static void Lpush_emerald_e(int x, int y)
5076 switch (Cave[x+1][y])
5086 Cave[x][y] = Xemerald;
5087 Next[x][y] = Xemerald;
5091 Cave[x][y] = Yemerald_eB;
5092 Cave[x+1][y] = Yemerald_e;
5093 Next[x][y] = Xblank;
5094 Next[x+1][y] = Xemerald_pause;
5099 static void Lpush_emerald_w(int x, int y)
5101 switch (Cave[x-1][y])
5111 Cave[x][y] = Xemerald;
5112 Next[x][y] = Xemerald;
5116 Cave[x][y] = Yemerald_wB;
5117 Cave[x-1][y] = Yemerald_w;
5118 Next[x][y] = Xblank;
5119 Next[x-1][y] = Xemerald_pause;
5124 static void Lpush_diamond_e(int x, int y)
5126 switch (Cave[x+1][y])
5136 Cave[x][y] = Xdiamond;
5137 Next[x][y] = Xdiamond;
5141 Cave[x][y] = Ydiamond_eB;
5142 Cave[x+1][y] = Ydiamond_e;
5143 Next[x][y] = Xblank;
5144 Next[x+1][y] = Xdiamond_pause;
5149 static void Lpush_diamond_w(int x, int y)
5151 switch (Cave[x-1][y])
5161 Cave[x][y] = Xdiamond;
5162 Next[x][y] = Xdiamond;
5166 Cave[x][y] = Ydiamond_wB;
5167 Cave[x-1][y] = Ydiamond_w;
5168 Next[x][y] = Xblank;
5169 Next[x-1][y] = Xdiamond_pause;
5174 static void Lpush_stone_e(int x, int y)
5176 switch (Cave[x+1][y])
5186 Cave[x][y] = Xstone;
5187 Next[x][y] = Xstone;
5191 Cave[x][y] = Ystone_eB;
5192 Cave[x+1][y] = Ystone_e;
5193 Next[x][y] = Xblank;
5194 Next[x+1][y] = Xstone_pause;
5199 static void Lpush_stone_w(int x, int y)
5201 switch (Cave[x-1][y])
5211 Cave[x][y] = Xstone;
5212 Next[x][y] = Xstone;
5216 Cave[x][y] = Ystone_wB;
5217 Cave[x-1][y] = Ystone_w;
5218 Next[x][y] = Xblank;
5219 Next[x-1][y] = Xstone_pause;
5224 static void Lpush_bomb_e(int x, int y)
5226 switch (Cave[x+1][y])
5241 Cave[x][y] = Ybomb_eB;
5242 Cave[x+1][y] = Ybomb_e;
5243 Next[x][y] = Xblank;
5244 Next[x+1][y] = Xbomb_pause;
5249 static void Lpush_bomb_w(int x, int y)
5251 switch (Cave[x-1][y])
5266 Cave[x][y] = Ybomb_wB;
5267 Cave[x-1][y] = Ybomb_w;
5268 Next[x][y] = Xblank;
5269 Next[x-1][y] = Xbomb_pause;
5274 static void Lpush_nut_e(int x, int y)
5276 switch (Cave[x+1][y])
5291 Cave[x][y] = Ynut_eB;
5292 Cave[x+1][y] = Ynut_e;
5293 Next[x][y] = Xblank;
5294 Next[x+1][y] = Xnut_pause;
5299 static void Lpush_nut_w(int x, int y)
5301 switch (Cave[x-1][y])
5316 Cave[x][y] = Ynut_wB;
5317 Cave[x-1][y] = Ynut_w;
5318 Next[x][y] = Xblank;
5319 Next[x-1][y] = Xnut_pause;
5324 static void Lpush_spring_e(int x, int y)
5326 switch (Cave[x+1][y])
5336 Cave[x][y] = Xspring;
5337 Next[x][y] = Xspring;
5341 Cave[x][y] = Yspring_eB;
5342 Cave[x+1][y] = Yspring_e;
5343 Next[x][y] = Xblank;
5344 Next[x+1][y] = Xspring_e;
5349 static void Lpush_spring_w(int x, int y)
5351 switch (Cave[x-1][y])
5361 Cave[x][y] = Xspring;
5362 Next[x][y] = Xspring;
5366 Cave[x][y] = Yspring_wB;
5367 Cave[x-1][y] = Yspring_w;
5368 Next[x][y] = Xblank;
5369 Next[x-1][y] = Xspring_w;
5374 static void Ldynamite_1(int x, int y)
5376 play_element_sound(x, y, SOUND_tick, Xdynamite_1);
5377 Next[x][y] = Xdynamite_2;
5380 static void Ldynamite_2(int x, int y)
5382 play_element_sound(x, y, SOUND_tick, Xdynamite_2);
5383 Next[x][y] = Xdynamite_3;
5386 static void Ldynamite_3(int x, int y)
5388 play_element_sound(x, y, SOUND_tick, Xdynamite_3);
5389 Next[x][y] = Xdynamite_4;
5392 static void Ldynamite_4(int x, int y)
5394 play_element_sound(x, y, SOUND_tick, Xdynamite_4);
5395 Next[x][y] = Zdynamite;
5396 Boom[x-1][y-1] = Xblank;
5397 Boom[x][y-1] = Xblank;
5398 Boom[x+1][y-1] = Xblank;
5399 Boom[x-1][y] = Xblank;
5400 Boom[x][y] = Xblank;
5401 Boom[x+1][y] = Xblank;
5402 Boom[x-1][y+1] = Xblank;
5403 Boom[x][y+1] = Xblank;
5404 Boom[x+1][y+1] = Xblank;
5407 static void Lfake_door_1(int x, int y)
5409 if (lev.magnify_cnt)
5410 Cave[x][y] = Xdoor_1;
5413 static void Lfake_door_2(int x, int y)
5415 if (lev.magnify_cnt)
5416 Cave[x][y] = Xdoor_2;
5419 static void Lfake_door_3(int x, int y)
5421 if (lev.magnify_cnt)
5422 Cave[x][y] = Xdoor_3;
5425 static void Lfake_door_4(int x, int y)
5427 if (lev.magnify_cnt)
5428 Cave[x][y] = Xdoor_4;
5431 static void Lfake_door_5(int x, int y)
5433 if (lev.magnify_cnt)
5434 Cave[x][y] = Xdoor_5;
5437 static void Lfake_door_6(int x, int y)
5439 if (lev.magnify_cnt)
5440 Cave[x][y] = Xdoor_6;
5443 static void Lfake_door_7(int x, int y)
5445 if (lev.magnify_cnt)
5446 Cave[x][y] = Xdoor_7;
5449 static void Lfake_door_8(int x, int y)
5451 if (lev.magnify_cnt)
5452 Cave[x][y] = Xdoor_8;
5455 static void Lballoon(int x, int y)
5457 if (lev.wind_cnt == 0)
5460 switch (lev.wind_direction)
5463 switch (Cave[x][y-1])
5473 Cave[x][y] = Yballoon_nB;
5474 if (Cave[x+1][y-2] == Xblank)
5475 Cave[x+1][y-2] = Xacid_splash_e;
5476 if (Cave[x-1][y-2] == Xblank)
5477 Cave[x-1][y-2] = Xacid_splash_w;
5478 Next[x][y] = Xblank;
5479 play_element_sound(x, y, SOUND_acid, Xacid_1);
5483 case Xacid_splash_e:
5484 case Xacid_splash_w:
5485 Cave[x][y] = Yballoon_nB;
5486 Cave[x][y-1] = Yballoon_n;
5487 Next[x][y] = Xblank;
5488 Next[x][y-1] = Xballoon;
5494 switch (Cave[x+1][y])
5504 Cave[x][y] = Yballoon_eB;
5505 if (Cave[x+2][y-1] == Xblank)
5506 Cave[x+2][y-1] = Xacid_splash_e;
5507 if (Cave[x][y-1] == Xblank)
5508 Cave[x][y-1] = Xacid_splash_w;
5509 Next[x][y] = Xblank;
5510 play_element_sound(x, y, SOUND_acid, Xacid_1);
5514 case Xacid_splash_e:
5515 case Xacid_splash_w:
5516 Cave[x][y] = Yballoon_eB;
5517 Cave[x+1][y] = Yballoon_e;
5518 Next[x][y] = Xblank;
5519 Next[x+1][y] = Xballoon;
5525 switch (Cave[x][y+1])
5535 Cave[x][y] = Yballoon_sB;
5536 if (Cave[x+1][y] == Xblank)
5537 Cave[x+1][y] = Xacid_splash_e;
5538 if (Cave[x-1][y] == Xblank)
5539 Cave[x-1][y] = Xacid_splash_w;
5540 Next[x][y] = Xblank;
5541 play_element_sound(x, y, SOUND_acid, Xacid_1);
5545 case Xacid_splash_e:
5546 case Xacid_splash_w:
5547 Cave[x][y] = Yballoon_sB;
5548 Cave[x][y+1] = Yballoon_s;
5549 Next[x][y] = Xblank;
5550 Next[x][y+1] = Xballoon;
5556 switch (Cave[x-1][y])
5566 Cave[x][y] = Yballoon_wB;
5567 if (Cave[x][y-1] == Xblank)
5568 Cave[x][y-1] = Xacid_splash_e;
5569 if (Cave[x-2][y-1] == Xblank)
5570 Cave[x-2][y-1] = Xacid_splash_w;
5571 Next[x][y] = Xblank;
5572 play_element_sound(x, y, SOUND_acid, Xacid_1);
5576 case Xacid_splash_e:
5577 case Xacid_splash_w:
5578 Cave[x][y] = Yballoon_wB;
5579 Cave[x-1][y] = Yballoon_w;
5580 Next[x][y] = Xblank;
5581 Next[x-1][y] = Xballoon;
5588 static void Lball_common(int x, int y)
5590 play_element_sound(x, y, SOUND_ball, Xball_1);
5592 if (lev.ball_random)
5597 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
5598 tab_blank[Cave[x-1][y-1]])
5600 Cave[x-1][y-1] = Yball_blank;
5601 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
5606 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
5607 tab_blank[Cave[x][y-1]])
5609 Cave[x][y-1] = Yball_blank;
5610 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
5615 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
5616 tab_blank[Cave[x+1][y-1]])
5618 Cave[x+1][y-1] = Yball_blank;
5619 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
5624 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
5625 tab_blank[Cave[x-1][y]])
5627 Cave[x-1][y] = Yball_blank;
5628 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
5633 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
5634 tab_blank[Cave[x+1][y]])
5636 Cave[x+1][y] = Yball_blank;
5637 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
5642 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
5643 tab_blank[Cave[x-1][y+1]])
5645 Cave[x-1][y+1] = Yball_blank;
5646 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
5651 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
5652 tab_blank[Cave[x][y+1]])
5654 Cave[x][y+1] = Yball_blank;
5655 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
5660 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
5661 tab_blank[Cave[x+1][y+1]])
5663 Cave[x+1][y+1] = Yball_blank;
5664 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
5671 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
5672 tab_blank[Cave[x-1][y-1]])
5674 Cave[x-1][y-1] = Yball_blank;
5675 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
5678 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
5679 tab_blank[Cave[x][y-1]])
5681 Cave[x][y-1] = Yball_blank;
5682 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
5685 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
5686 tab_blank[Cave[x+1][y-1]])
5688 Cave[x+1][y-1] = Yball_blank;
5689 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
5692 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
5693 tab_blank[Cave[x-1][y]])
5695 Cave[x-1][y] = Yball_blank;
5696 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
5699 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
5700 tab_blank[Cave[x+1][y]])
5702 Cave[x+1][y] = Yball_blank;
5703 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
5706 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
5707 tab_blank[Cave[x-1][y+1]])
5709 Cave[x-1][y+1] = Yball_blank;
5710 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
5713 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
5714 tab_blank[Cave[x][y+1]])
5716 Cave[x][y+1] = Yball_blank;
5717 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
5720 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
5721 tab_blank[Cave[x+1][y+1]])
5723 Cave[x+1][y+1] = Yball_blank;
5724 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
5728 lev.ball_pos = (lev.ball_pos + 1) % lev.num_ball_arrays;
5731 static void Lball_1(int x, int y)
5733 if (lev.ball_state == 0)
5736 Cave[x][y] = Yball_1;
5737 Next[x][y] = Xball_2;
5744 static void Lball_2(int x, int y)
5746 if (lev.ball_state == 0)
5749 Cave[x][y] = Yball_2;
5750 Next[x][y] = Xball_1;
5757 static void Ldrip(int x, int y)
5759 Next[x][y] = Xdrip_fall;
5762 static void Ldrip_fall(int x, int y)
5766 switch (Cave[x][y+1])
5776 Cave[x][y] = Ydrip_1_sB;
5777 if (Cave[x+1][y] == Xblank)
5778 Cave[x+1][y] = Xacid_splash_e;
5779 if (Cave[x-1][y] == Xblank)
5780 Cave[x-1][y] = Xacid_splash_w;
5781 Next[x][y] = Xdrip_stretchB;
5782 play_element_sound(x, y, SOUND_acid, Xacid_1);
5786 case Xacid_splash_e:
5787 case Xacid_splash_w:
5791 Cave[x][y] = Ydrip_1_sB;
5792 Cave[x][y+1] = Ydrip_1_s;
5793 Next[x][y] = Xdrip_stretchB;
5794 Next[x][y+1] = Xdrip_stretch;
5800 case 0: temp = Xamoeba_1; break;
5801 case 1: temp = Xamoeba_2; break;
5802 case 2: temp = Xamoeba_3; break;
5803 case 3: temp = Xamoeba_4; break;
5804 case 4: temp = Xamoeba_5; break;
5805 case 5: temp = Xamoeba_6; break;
5806 case 6: temp = Xamoeba_7; break;
5807 case 7: temp = Xamoeba_8; break;
5812 play_element_sound(x, y, SOUND_drip, Xdrip_fall);
5817 static void Ldrip_stretch(int x, int y)
5819 Cave[x][y] = Ydrip_2_s;
5820 Next[x][y] = Xdrip_fall;
5823 static void Ldrip_stretchB(int x, int y)
5825 Cave[x][y] = Ydrip_2_sB;
5826 Next[x][y] = Xblank;
5829 static void Lwonderwall(int x, int y)
5831 if (lev.wonderwall_time && lev.wonderwall_state)
5833 Cave[x][y] = XwonderwallB;
5834 play_element_sound(x, y, SOUND_wonder, Xwonderwall);
5838 static void Lwheel(int x, int y)
5840 if (lev.wheel_cnt && x == lev.wheel_x && y == lev.wheel_y)
5841 Cave[x][y] = XwheelB;
5844 static void Lswitch(int x, int y)
5847 Cave[x][y] = XswitchB;
5850 static void Lfake_blank(int x, int y)
5853 Cave[x][y] = Xfake_blankB;
5856 static void Lfake_grass(int x, int y)
5858 if (lev.magnify_cnt)
5859 Cave[x][y] = Xfake_grassB;
5862 static void Lfake_amoeba(int x, int y)
5865 Cave[x][y] = Xfake_amoebaB;
5868 static void Lsand_stone(int x, int y)
5870 switch (Cave[x][y+1])
5880 Cave[x][y] = Xsand_stonesand_quickout_1;
5881 if (Cave[x+1][y] == Xblank)
5882 Cave[x+1][y] = Xacid_splash_e;
5883 if (Cave[x-1][y] == Xblank)
5884 Cave[x-1][y] = Xacid_splash_w;
5885 Next[x][y] = Xsand_stonesand_quickout_2;
5886 play_element_sound(x, y, SOUND_acid, Xacid_1);
5890 case Xacid_splash_e:
5891 case Xacid_splash_w:
5892 Cave[x][y] = Xsand_stonesand_quickout_1;
5893 Cave[x][y+1] = Xsand_stoneout_1;
5894 Next[x][y] = Xsand_stonesand_quickout_2;
5895 Next[x][y+1] = Xsand_stoneout_2;
5899 Cave[x][y] = Xsand_stonesand_1;
5900 Cave[x][y+1] = Xsand_sandstone_1;
5901 Next[x][y] = Xsand_stonesand_2;
5902 Next[x][y+1] = Xsand_sandstone_2;
5907 static void Lsand_stonein_1(int x, int y)
5909 Next[x][y] = Xsand_stonein_2;
5912 static void Lsand_stonein_2(int x, int y)
5914 Next[x][y] = Xsand_stonein_3;
5917 static void Lsand_stonein_3(int x, int y)
5919 Next[x][y] = Xsand_stonein_4;
5922 static void Lsand_stonein_4(int x, int y)
5924 Next[x][y] = Xblank;
5927 static void Lsand_sandstone_1(int x, int y)
5929 Next[x][y] = Xsand_sandstone_2;
5932 static void Lsand_sandstone_2(int x, int y)
5934 Next[x][y] = Xsand_sandstone_3;
5937 static void Lsand_sandstone_3(int x, int y)
5939 Next[x][y] = Xsand_sandstone_4;
5942 static void Lsand_sandstone_4(int x, int y)
5944 Next[x][y] = Xsand_stone;
5947 static void Lsand_stonesand_1(int x, int y)
5949 Next[x][y] = Xsand_stonesand_2;
5952 static void Lsand_stonesand_2(int x, int y)
5954 Next[x][y] = Xsand_stonesand_3;
5957 static void Lsand_stonesand_3(int x, int y)
5959 Next[x][y] = Xsand_stonesand_4;
5962 static void Lsand_stonesand_4(int x, int y)
5967 static void Lsand_stoneout_1(int x, int y)
5969 Next[x][y] = Xsand_stoneout_2;
5972 static void Lsand_stoneout_2(int x, int y)
5974 Next[x][y] = Xstone_fall;
5977 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
5978 static void Lsand_stonesand_quickout_1(int x, int y)
5980 Next[x][y] = Xsand_stonesand_quickout_2;
5983 static void Lsand_stonesand_quickout_2(int x, int y)
5989 static void Lslidewall_ns(int x, int y)
5991 if (tab_blank[Cave[x][y-1]])
5993 Cave[x][y-1] = Yslidewall_ns_blank;
5994 Next[x][y-1] = Xslidewall_ns;
5995 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
5998 if (tab_blank[Cave[x][y+1]])
6000 Cave[x][y+1] = Yslidewall_ns_blank;
6001 Next[x][y+1] = Xslidewall_ns;
6002 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
6006 static void Lslidewall_ew(int x, int y)
6008 if (tab_blank[Cave[x+1][y]])
6010 Cave[x+1][y] = Yslidewall_ew_blank;
6011 Next[x+1][y] = Xslidewall_ew;
6012 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
6015 if (tab_blank[Cave[x-1][y]])
6017 Cave[x-1][y] = Yslidewall_ew_blank;
6018 Next[x-1][y] = Xslidewall_ew;
6019 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
6023 static void Lexit(int x, int y)
6025 if (lev.required > 0)
6028 switch (RANDOM(64) / 21)
6031 Cave[x][y] = Xexit_1;
6032 Next[x][y] = Xexit_2;
6036 Cave[x][y] = Xexit_2;
6037 Next[x][y] = Xexit_3;
6041 Cave[x][y] = Xexit_3;
6042 Next[x][y] = Xexit_1;
6046 play_element_sound(x, y, SOUND_exit_open, Xexit);
6049 static void Lexit_1(int x, int y)
6051 Next[x][y] = Xexit_2;
6054 static void Lexit_2(int x, int y)
6056 Next[x][y] = Xexit_3;
6059 static void Lexit_3(int x, int y)
6061 Next[x][y] = Xexit_1;
6064 static void Lpause(int x, int y)
6066 Next[x][y] = Xblank;
6069 static void Lboom_1(int x, int y)
6071 Next[x][y] = Xboom_2;
6072 #if !PLAY_ELEMENT_SOUND
6073 if (x != lev.exit_x && y != lev.exit_y)
6074 play_sound(x, y, SOUND_boom);
6076 lev.exit_x = lev.exit_y = -1;
6080 static void Lboom_2(int x, int y)
6082 Next[x][y] = Boom[x][y];
6085 static void Lboom_android(int x, int y)
6087 #if PLAY_ELEMENT_SOUND
6088 play_element_sound(x, y, SOUND_boom, Xandroid);
6094 static void handle_tile(int x, int y)
6098 case Xacid_1: Lacid_1(x, y); break;
6099 case Xacid_2: Lacid_2(x, y); break;
6100 case Xacid_3: Lacid_3(x, y); break;
6101 case Xacid_4: Lacid_4(x, y); break;
6102 case Xacid_5: Lacid_5(x, y); break;
6103 case Xacid_6: Lacid_6(x, y); break;
6104 case Xacid_7: Lacid_7(x, y); break;
6105 case Xacid_8: Lacid_8(x, y); break;
6107 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
6108 case Xfake_acid_1: Lfake_acid_1(x, y); break;
6109 case Xfake_acid_2: Lfake_acid_2(x, y); break;
6110 case Xfake_acid_3: Lfake_acid_3(x, y); break;
6111 case Xfake_acid_4: Lfake_acid_4(x, y); break;
6112 case Xfake_acid_5: Lfake_acid_5(x, y); break;
6113 case Xfake_acid_6: Lfake_acid_6(x, y); break;
6114 case Xfake_acid_7: Lfake_acid_7(x, y); break;
6115 case Xfake_acid_8: Lfake_acid_8(x, y); break;
6118 case Xandroid: Landroid(x, y); break;
6119 case Xandroid_1_n: Landroid_1_n(x, y); break;
6120 case Xandroid_2_n: Landroid_2_n(x, y); break;
6121 case Xandroid_1_e: Landroid_1_e(x, y); break;
6122 case Xandroid_2_e: Landroid_2_e(x, y); break;
6123 case Xandroid_1_s: Landroid_1_s(x, y); break;
6124 case Xandroid_2_s: Landroid_2_s(x, y); break;
6125 case Xandroid_1_w: Landroid_1_w(x, y); break;
6126 case Xandroid_2_w: Landroid_2_w(x, y); break;
6128 case Xeater_n: Leater_n(x, y); break;
6129 case Xeater_e: Leater_e(x, y); break;
6130 case Xeater_s: Leater_s(x, y); break;
6131 case Xeater_w: Leater_w(x, y); break;
6133 case Xalien: Lalien(x, y); break;
6134 case Xalien_pause: Lalien_pause(x, y); break;
6136 case Xbug_1_n: Lbug_1_n(x, y); break;
6137 case Xbug_2_n: Lbug_2_n(x, y); break;
6138 case Xbug_1_e: Lbug_1_e(x, y); break;
6139 case Xbug_2_e: Lbug_2_e(x, y); break;
6140 case Xbug_1_s: Lbug_1_s(x, y); break;
6141 case Xbug_2_s: Lbug_2_s(x, y); break;
6142 case Xbug_1_w: Lbug_1_w(x, y); break;
6143 case Xbug_2_w: Lbug_2_w(x, y); break;
6145 case Xtank_1_n: Ltank_1_n(x, y); break;
6146 case Xtank_2_n: Ltank_2_n(x, y); break;
6147 case Xtank_1_e: Ltank_1_e(x, y); break;
6148 case Xtank_2_e: Ltank_2_e(x, y); break;
6149 case Xtank_1_s: Ltank_1_s(x, y); break;
6150 case Xtank_2_s: Ltank_2_s(x, y); break;
6151 case Xtank_1_w: Ltank_1_w(x, y); break;
6152 case Xtank_2_w: Ltank_2_w(x, y); break;
6154 case Xemerald: Lemerald(x, y); break;
6155 case Xemerald_pause: Lemerald_pause(x, y); break;
6156 case Xemerald_fall: Lemerald_fall(x, y); break;
6158 case Xdiamond: Ldiamond(x, y); break;
6159 case Xdiamond_pause: Ldiamond_pause(x, y); break;
6160 case Xdiamond_fall: Ldiamond_fall(x, y); break;
6162 case Xstone: Lstone(x, y); break;
6163 case Xstone_pause: Lstone_pause(x, y); break;
6164 case Xstone_fall: Lstone_fall(x, y); break;
6166 case Xbomb: Lbomb(x, y); break;
6167 case Xbomb_pause: Lbomb_pause(x, y); break;
6168 case Xbomb_fall: Lbomb_fall(x, y); break;
6170 case Xnut: Lnut(x, y); break;
6171 case Xnut_pause: Lnut_pause(x, y); break;
6172 case Xnut_fall: Lnut_fall(x, y); break;
6174 case Xspring: Lspring(x, y); break;
6175 case Xspring_pause: Lspring_pause(x, y); break;
6176 case Xspring_e: Lspring_e(x, y); break;
6177 case Xspring_w: Lspring_w(x, y); break;
6178 case Xspring_fall: Lspring_fall(x, y); break;
6180 case Xpush_emerald_e: Lpush_emerald_e(x, y); break;
6181 case Xpush_emerald_w: Lpush_emerald_w(x, y); break;
6182 case Xpush_diamond_e: Lpush_diamond_e(x, y); break;
6183 case Xpush_diamond_w: Lpush_diamond_w(x, y); break;
6184 case Xpush_stone_e: Lpush_stone_e(x, y); break;
6185 case Xpush_stone_w: Lpush_stone_w(x, y); break;
6186 case Xpush_bomb_e: Lpush_bomb_e(x, y); break;
6187 case Xpush_bomb_w: Lpush_bomb_w(x, y); break;
6188 case Xpush_nut_e: Lpush_nut_e(x, y); break;
6189 case Xpush_nut_w: Lpush_nut_w(x, y); break;
6190 case Xpush_spring_e: Lpush_spring_e(x, y); break;
6191 case Xpush_spring_w: Lpush_spring_w(x, y); break;
6193 case Xdynamite_1: Ldynamite_1(x, y); break;
6194 case Xdynamite_2: Ldynamite_2(x, y); break;
6195 case Xdynamite_3: Ldynamite_3(x, y); break;
6196 case Xdynamite_4: Ldynamite_4(x, y); break;
6198 case Xfake_door_1: Lfake_door_1(x, y); break;
6199 case Xfake_door_2: Lfake_door_2(x, y); break;
6200 case Xfake_door_3: Lfake_door_3(x, y); break;
6201 case Xfake_door_4: Lfake_door_4(x, y); break;
6202 case Xfake_door_5: Lfake_door_5(x, y); break;
6203 case Xfake_door_6: Lfake_door_6(x, y); break;
6204 case Xfake_door_7: Lfake_door_7(x, y); break;
6205 case Xfake_door_8: Lfake_door_8(x, y); break;
6207 case Xballoon: Lballoon(x, y); break;
6209 case Xball_1: Lball_1(x, y); break;
6210 case Xball_2: Lball_2(x, y); break;
6212 case Xdrip: Ldrip(x, y); break;
6213 case Xdrip_fall: Ldrip_fall(x, y); break;
6214 case Xdrip_stretch: Ldrip_stretch(x, y); break;
6215 case Xdrip_stretchB: Ldrip_stretchB(x, y); break;
6217 case Xwonderwall: Lwonderwall(x, y); break;
6219 case Xwheel: Lwheel(x, y); break;
6221 case Xswitch: Lswitch(x, y); break;
6223 case Xfake_blank: Lfake_blank(x, y); break;
6224 case Xfake_grass: Lfake_grass(x, y); break;
6225 case Xfake_amoeba: Lfake_amoeba(x, y); break;
6227 case Xsand_stone: Lsand_stone(x, y); break;
6228 case Xsand_stonein_1: Lsand_stonein_1(x, y); break;
6229 case Xsand_stonein_2: Lsand_stonein_2(x, y); break;
6230 case Xsand_stonein_3: Lsand_stonein_3(x, y); break;
6231 case Xsand_stonein_4: Lsand_stonein_4(x, y); break;
6232 case Xsand_sandstone_1: Lsand_sandstone_1(x, y); break;
6233 case Xsand_sandstone_2: Lsand_sandstone_2(x, y); break;
6234 case Xsand_sandstone_3: Lsand_sandstone_3(x, y); break;
6235 case Xsand_sandstone_4: Lsand_sandstone_4(x, y); break;
6236 case Xsand_stonesand_1: Lsand_stonesand_1(x, y); break;
6237 case Xsand_stonesand_2: Lsand_stonesand_2(x, y); break;
6238 case Xsand_stonesand_3: Lsand_stonesand_3(x, y); break;
6239 case Xsand_stonesand_4: Lsand_stonesand_4(x, y); break;
6240 case Xsand_stoneout_1: Lsand_stoneout_1(x, y); break;
6241 case Xsand_stoneout_2: Lsand_stoneout_2(x, y); break;
6242 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
6243 case Xsand_stonesand_quickout_1: Lsand_stonesand_quickout_1(x, y); break;
6244 case Xsand_stonesand_quickout_2: Lsand_stonesand_quickout_2(x, y); break;
6247 case Xslidewall_ns: Lslidewall_ns(x, y); break;
6248 case Xslidewall_ew: Lslidewall_ew(x, y); break;
6250 case Xexit: Lexit(x, y); break;
6251 case Xexit_1: Lexit_1(x, y); break;
6252 case Xexit_2: Lexit_2(x, y); break;
6253 case Xexit_3: Lexit_3(x, y); break;
6255 case Xpause: Lpause(x, y); break;
6257 case Xboom_bug: Lboom_bug(x, y); break;
6258 case Xboom_bomb: Lboom_tank(x, y); break;
6259 case Xboom_android: Lboom_android(x, y); break;
6260 case Xboom_1: Lboom_1(x, y); break;
6261 case Xboom_2: Lboom_2(x, y); break;
6270 game_em.any_player_moving = FALSE;
6271 game_em.any_player_snapping = FALSE;
6273 /* must test for death and actually kill separately */
6274 for (i = 0; i < MAX_PLAYERS; i++)
6276 boolean ply_kill = player_killed(&ply[i]);
6278 if (ply[i].alive && ply_kill)
6279 kill_player(&ply[i]);
6282 for (i = 0; i < MAX_PLAYERS; i++)
6284 ply[i].oldx = ply[i].x;
6285 ply[i].oldy = ply[i].y;
6286 ply[i].anim = PLY_still;
6289 start_check_nr = (RandomEM & 128 ? 0 : 1) * 2 + (RandomEM & 256 ? 0 : 1);
6291 for (i = 0; i < MAX_PLAYERS; i++)
6293 int check_nr = (start_check_nr + i) % MAX_PLAYERS;
6295 if (ply[check_nr].alive)
6296 check_player(&ply[check_nr]);
6299 for (i = 0; i < MAX_PLAYERS; i++)
6304 if (Cave[ply[i].oldx][ply[i].oldy] == Zplayer)
6306 Cave[ply[i].oldx][ply[i].oldy] = Xblank;
6307 Next[ply[i].oldx][ply[i].oldy] = Xblank;
6310 if (Cave[ply[i].x][ply[i].y] == Xblank)
6312 Cave[ply[i].x][ply[i].y] = Zplayer;
6313 Next[ply[i].x][ply[i].y] = Zplayer;
6325 for (y = 1; y < HEIGHT - 1; y++)
6326 for (x = 0; x < WIDTH; x++)
6329 if (ply[0].alive || ply[1].alive || ply[2].alive || ply[3].alive)
6330 lev.score += score; /* only add a score if someone is alive */
6332 game_em.game_over = TRUE;
6336 /* triple buffering */
6348 unsigned int random;
6350 /* update variables */
6352 if (lev.score > 9999)
6355 if (lev.android_move_cnt-- == 0)
6356 lev.android_move_cnt = lev.android_move_time;
6357 if (lev.android_clone_cnt-- == 0)
6358 lev.android_clone_cnt = lev.android_clone_time;
6360 if (lev.ball_cnt-- == 0)
6361 lev.ball_cnt = lev.ball_time;
6364 if (lev.magnify_cnt)
6370 if (lev.wonderwall_time && lev.wonderwall_state)
6371 lev.wonderwall_time--;
6374 play_element_sound(lev.wheel_x, lev.wheel_y, SOUND_wheel, Xwheel);
6380 for (count = lev.amoeba_time; count--;)
6382 x = (random >> 10) % (WIDTH - 2);
6383 y = (random >> 20) % (HEIGHT - 2);
6387 case Xacid_splash_e:
6388 case Xacid_splash_w:
6394 if (tab_amoeba[Cave[x][y-1]] ||
6395 tab_amoeba[Cave[x+1][y]] ||
6396 tab_amoeba[Cave[x][y+1]] ||
6397 tab_amoeba[Cave[x-1][y]])
6401 random = random * 129 + 1;
6406 /* handle explosions */
6408 for (y = 1; y < HEIGHT - 1; y++)
6409 for (x = 1; x < WIDTH - 1; x++)
6414 Cave[x][y] = Xboom_1;
6415 Cave[x][y-1] = tab_explode_normal[Cave[x][y-1]];
6416 Cave[x-1][y] = tab_explode_normal[Cave[x-1][y]];
6417 Cave[x+1][y] = tab_explode_normal[Cave[x+1][y]];
6418 Cave[x][y+1] = tab_explode_normal[Cave[x][y+1]];
6419 Cave[x-1][y-1] = tab_explode_normal[Cave[x-1][y-1]];
6420 Cave[x+1][y-1] = tab_explode_normal[Cave[x+1][y-1]];
6421 Cave[x-1][y+1] = tab_explode_normal[Cave[x-1][y+1]];
6422 Cave[x+1][y+1] = tab_explode_normal[Cave[x+1][y+1]];
6426 Cave[x][y] = Xboom_1;
6427 Cave[x][y-1] = tab_explode_dynamite[Cave[x][y-1]];
6428 Cave[x-1][y] = tab_explode_dynamite[Cave[x-1][y]];
6429 Cave[x+1][y] = tab_explode_dynamite[Cave[x+1][y]];
6430 Cave[x][y+1] = tab_explode_dynamite[Cave[x][y+1]];
6431 Cave[x-1][y-1] = tab_explode_dynamite[Cave[x-1][y-1]];
6432 Cave[x+1][y-1] = tab_explode_dynamite[Cave[x+1][y-1]];
6433 Cave[x-1][y+1] = tab_explode_dynamite[Cave[x-1][y+1]];
6434 Cave[x+1][y+1] = tab_explode_dynamite[Cave[x+1][y+1]];
6439 /* triple buffering */
6441 for (y = 0; y < HEIGHT; y++)
6442 for (x = 0; x < WIDTH; x++)
6443 Next[x][y] = Cave[x][y];