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])
550 Cave[x+dx][y] = dx > 0 ? Ystone_e : Ystone_w;
551 Next[x+dx][y] = Xstone_pause;
562 if (Cave[x+dx+1][y-1] == Xblank)
563 Cave[x+dx+1][y-1] = Xacid_splash_e;
564 if (Cave[x+dx-1][y-1] == Xblank)
565 Cave[x+dx-1][y-1] = Xacid_splash_w;
566 play_element_sound(x, y, SOUND_acid, Xacid_1);
570 Cave[x][y] = dx > 0 ? Ystone_eB : Ystone_wB;
571 Next[x][y] = Zplayer;
572 play_element_sound(x, y, SOUND_roll, Xstone);
577 ply->anim = PLY_push_n + anim;
584 switch(Cave[x+dx][y])
589 Cave[x+dx][y] = dx > 0 ? Ybomb_e : Ybomb_w;
590 Next[x+dx][y] = Xbomb_pause;
601 if (Cave[x+dx+1][y-1] == Xblank)
602 Cave[x+dx+1][y-1] = Xacid_splash_e;
603 if (Cave[x+dx-1][y-1] == Xblank)
604 Cave[x+dx-1][y-1] = Xacid_splash_w;
605 play_element_sound(x, y, SOUND_acid, Xacid_1);
609 Cave[x][y] = dx > 0 ? Ybomb_eB : Ybomb_wB;
610 Next[x][y] = Zplayer;
611 play_element_sound(x, y, SOUND_roll, Xbomb);
616 ply->anim = PLY_push_n + anim;
623 switch(Cave[x+dx][y])
628 Cave[x+dx][y] = dx > 0 ? Ynut_e : Ynut_w;
629 Next[x+dx][y] = Xnut_pause;
640 if (Cave[x+dx+1][y-1] == Xblank)
641 Cave[x+dx+1][y-1] = Xacid_splash_e;
642 if (Cave[x+dx-1][y-1] == Xblank)
643 Cave[x+dx-1][y-1] = Xacid_splash_w;
644 play_element_sound(x, y, SOUND_acid, Xacid_1);
648 Cave[x][y] = dx > 0 ? Ynut_eB : Ynut_wB;
649 Next[x][y] = Zplayer;
650 play_element_sound(x, y, SOUND_roll, Xnut);
655 ply->anim = PLY_push_n + anim;
662 switch(Cave[x+dx][y])
667 Cave[x+dx][y] = dx > 0 ? Yspring_e : Yspring_w;
668 Next[x+dx][y] = dx > 0 ? Xspring_e : Xspring_w;
679 if (Cave[x+dx+1][y-1] == Xblank)
680 Cave[x+dx+1][y-1] = Xacid_splash_e;
681 if (Cave[x+dx-1][y-1] == Xblank)
682 Cave[x+dx-1][y-1] = Xacid_splash_w;
683 play_element_sound(x, y, SOUND_acid, Xacid_1);
687 Cave[x][y] = dx > 0 ? Yspring_eB : Yspring_wB;
688 Next[x][y] = Zplayer;
689 play_element_sound(x, y, SOUND_roll, Xspring);
695 Cave[x][y] = dx > 0 ? Yspring_alien_eB : Yspring_alien_wB;
696 Cave[x+dx][y] = dx > 0 ? Yspring_alien_e : Yspring_alien_w;
697 Next[x][y] = Zplayer;
698 Next[x+dx][y] = dx > 0 ? Xspring_e : Xspring_w;
699 play_element_sound(x, y, SOUND_slurp, Xalien);
700 lev.score += lev.slurp_score;
705 ply->anim = PLY_push_n + anim;
712 case Xsand_stonein_1:
713 case Xsand_stonein_2:
714 case Xsand_stonein_3:
715 case Xsand_stonein_4:
719 ply->anim = PLY_push_n + anim;
723 switch(Cave[x+dx][y+dy])
728 Cave[x+dx][y+dy] = (dy ? (dy < 0 ? Yballoon_n : Yballoon_s) :
729 (dx > 0 ? Yballoon_e : Yballoon_w));
730 Next[x+dx][y+dy] = Xballoon;
741 if (Cave[x+dx+1][y+dy-1] == Xblank)
742 Cave[x+dx+1][y+dy-1] = Xacid_splash_e;
743 if (Cave[x+dx-1][y+dy-1] == Xblank)
744 Cave[x+dx-1][y+dy-1] = Xacid_splash_w;
745 play_element_sound(x, y, SOUND_acid, Xacid_1);
749 Cave[x][y] = (dy ? (dy < 0 ? Yballoon_nB : Yballoon_sB) :
750 (dx > 0 ? Yballoon_eB : Yballoon_wB));
751 Next[x][y] = Zplayer;
752 play_element_sound(x, y, SOUND_push, Xballoon);
758 ply->anim = PLY_push_n + anim;
770 switch(Cave[x+dx][y+dy])
775 Cave[x+dx][y+dy] = (dy ? (dy < 0 ? Yandroid_n : Yandroid_s) :
776 (dx > 0 ? Yandroid_e : Yandroid_w));
777 Next[x+dx][y+dy] = (dy ? (dy < 0 ? Xandroid_2_n : Xandroid_2_s) :
778 (dx > 0 ? Xandroid_2_e : Xandroid_2_w));
789 if (Cave[x+dx+1][y+dy-1] == Xblank)
790 Cave[x+dx+1][y+dy-1] = Xacid_splash_e;
791 if (Cave[x+dx-1][y+dy-1] == Xblank)
792 Cave[x+dx-1][y+dy-1] = Xacid_splash_w;
793 play_element_sound(x, y, SOUND_acid, Xacid_1);
797 Cave[x][y] = (dy ? (dy < 0 ? Yandroid_nB : Yandroid_sB) :
798 (dx > 0 ? Yandroid_eB : Yandroid_wB));
799 Next[x][y] = Zplayer;
800 play_element_sound(x, y, SOUND_push, Xandroid);
806 ply->anim = PLY_push_n + anim;
811 if (ply->keys & 0x01)
818 if (ply->keys & 0x02)
825 if (ply->keys & 0x04)
832 if (ply->keys & 0x08)
839 if (ply->keys & 0x10)
846 if (ply->keys & 0x20)
853 if (ply->keys & 0x40)
860 if (ply->keys & 0x80)
867 if (!tab_blank[Cave[x+dx][y+dy]])
870 Cave[x+dx][y+dy] = Zplayer;
871 Next[x+dx][y+dy] = Zplayer;
872 play_element_sound(x, y, SOUND_door, element);
873 ply->anim = PLY_walk_n + anim;
879 play_element_sound(x, y, SOUND_press, element);
880 lev.wheel_cnt = lev.wheel_time;
886 lev.wind_direction = 0;
890 lev.wind_direction = 1;
894 lev.wind_direction = 2;
898 lev.wind_direction = 3;
902 lev.wind_direction = dy ? (dy < 0 ? 0 : 2) : (dx > 0 ? 1 : 3);
907 play_element_sound(x, y, SOUND_press, element);
908 lev.wind_cnt = lev.wind_time;
912 play_element_sound(x, y, SOUND_press, element);
917 play_element_sound(x, y, SOUND_press, element);
918 lev.ball_cnt = lev.ball_time;
919 lev.ball_state = !lev.ball_state;
925 play_element_sound(x, y, SOUND_blank, Xplant);
926 ply->anim = PLY_walk_n + anim;
937 game_em.level_solved = TRUE;
939 ply->anim = PLY_walk_n + anim;
946 if (ply->x == oldx && ply->y == oldy) /* no movement */
949 else /* player wants to snap */
951 int element = Cave[x][y];
955 /* fire is pressed */
958 Cave[x][y] = Ygrass_blank;
960 play_element_sound(x, y, SOUND_dirt, element);
961 ply->anim = PLY_shoot_n + anim;
965 Cave[x][y] = Ydirt_blank;
967 play_element_sound(x, y, SOUND_dirt, element);
968 ply->anim = PLY_shoot_n + anim;
973 Cave[x][y] = Ydiamond_blank;
975 play_element_sound(x, y, SOUND_collect, element);
976 lev.score += lev.diamond_score;
977 lev.required = lev.required < 3 ? 0 : lev.required - 3;
978 game.snapshot.collected_item = TRUE;
979 ply->anim = PLY_walk_n + anim;
984 Cave[x][y] = Yemerald_blank;
986 play_element_sound(x, y, SOUND_collect, element);
987 lev.score += lev.emerald_score;
988 lev.required = lev.required < 1 ? 0 : lev.required - 1;
989 game.snapshot.collected_item = TRUE;
990 ply->anim = PLY_walk_n + anim;
994 Cave[x][y] = Ydynamite_blank;
996 play_element_sound(x, y, SOUND_collect, element);
997 lev.score += lev.dynamite_score;
998 ply->dynamite = ply->dynamite > 9998 ? 9999 : ply->dynamite + 1;
999 ply->anim = PLY_walk_n + anim;
1004 Cave[x][y] = Ykey_1_blank;
1009 Cave[x][y] = Ykey_2_blank;
1014 Cave[x][y] = Ykey_3_blank;
1019 Cave[x][y] = Ykey_4_blank;
1024 Cave[x][y] = Ykey_5_blank;
1029 Cave[x][y] = Ykey_6_blank;
1034 Cave[x][y] = Ykey_7_blank;
1039 Cave[x][y] = Ykey_8_blank;
1044 Next[x][y] = Xblank;
1045 play_element_sound(x, y, SOUND_collect, element);
1046 lev.score += lev.key_score;
1047 ply->anim = PLY_walk_n + anim;
1051 Cave[x][y] = Ylenses_blank;
1052 Next[x][y] = Xblank;
1053 play_element_sound(x, y, SOUND_collect, element);
1054 lev.score += lev.lenses_score;
1055 lev.lenses_cnt = lev.lenses_time;
1056 ply->anim = PLY_walk_n + anim;
1060 Cave[x][y] = Ymagnify_blank;
1061 Next[x][y] = Xblank;
1062 play_element_sound(x, y, SOUND_collect, element);
1063 lev.score += lev.magnify_score;
1064 lev.magnify_cnt = lev.magnify_time;
1065 ply->anim = PLY_walk_n + anim;
1076 static void check_player(struct PLAYER *ply)
1084 game_em.last_player_direction[ply->num] = MV_NONE;
1086 if (ply->joy_w) /* west */
1091 else if (ply->joy_e) /* east */
1097 if (ply->joy_n) /* north */
1102 else if (ply->joy_s) /* south */
1114 boolean players_visible_before_move;
1115 boolean players_visible_after_move;
1118 players_visible_before_move = checkIfAllPlayersFitToScreen();
1123 players_visible_after_move = checkIfAllPlayersFitToScreen();
1126 player is allowed to move only in the following cases:
1127 - it is not needed to display all players (not focussed to all players)
1128 - all players are (still or again) visible after the move
1129 - some players were already outside visible screen area before the move
1131 can_move = (game.centered_player_nr != -1 ||
1132 players_visible_after_move ||
1133 !players_visible_before_move);
1140 ply->joy_n = ply->joy_e = ply->joy_s = ply->joy_w = 0;
1146 if (dx == 0 && dy == 0)
1152 if (++ply->dynamite_cnt == 5 && ply->dynamite)
1154 Cave[x][y] = Xdynamite_1;
1155 play_element_sound(x, y, SOUND_dynamite, Xdynamite_1);
1161 ply->dynamite_cnt = 0;
1164 RandomEM += 7; /* be a bit more random if the player doesn't move */
1170 ply->joy_n = ply->joy_e = ply->joy_s = ply->joy_w = 0;
1171 ply->dynamite_cnt = 0; /* reset dynamite timer if we move */
1172 ply->joy_spin = !ply->joy_spin;
1174 if (ply->joy_snap == 0) /* player wants to move */
1176 boolean moved = FALSE;
1178 if (ply->last_move_dir & MV_HORIZONTAL)
1180 if (!(moved = player_digfield(ply, 0, dy)))
1181 moved = player_digfield(ply, dx, 0);
1185 if (!(moved = player_digfield(ply, dx, 0)))
1186 moved = player_digfield(ply, 0, dy);
1192 ply->last_move_dir = (dx < 0 ? MV_LEFT : MV_RIGHT);
1193 else if (oldy != ply->y)
1194 ply->last_move_dir = (dy < 0 ? MV_UP : MV_DOWN);
1196 game_em.any_player_moving = TRUE;
1197 game_em.last_moving_player = ply->num;
1198 game_em.last_player_direction[ply->num] = ply->last_move_dir;
1201 else /* player wants to snap */
1203 game_em.any_player_snapping = player_digfield(ply, dx, dy);
1207 static void set_nearest_player_xy(int x, int y, int *dx, int *dy)
1209 int distance, distance_shortest = EM_MAX_CAVE_WIDTH + EM_MAX_CAVE_HEIGHT;
1212 /* default values if no players are alive anymore */
1216 for (i = 0; i < MAX_PLAYERS; i++)
1221 distance = ABS(ply[i].x - x) + ABS(ply[i].y - y);
1223 if (distance < distance_shortest)
1228 distance_shortest = distance;
1233 static void Lacid_1(int x, int y)
1235 Next[x][y] = Xacid_2;
1238 static void Lacid_2(int x, int y)
1240 Next[x][y] = Xacid_3;
1243 static void Lacid_3(int x, int y)
1245 Next[x][y] = Xacid_4;
1248 static void Lacid_4(int x, int y)
1250 Next[x][y] = Xacid_5;
1253 static void Lacid_5(int x, int y)
1255 Next[x][y] = Xacid_6;
1258 static void Lacid_6(int x, int y)
1260 Next[x][y] = Xacid_7;
1263 static void Lacid_7(int x, int y)
1265 Next[x][y] = Xacid_8;
1268 static void Lacid_8(int x, int y)
1270 Next[x][y] = Xacid_1;
1273 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
1274 static void Lfake_acid_1(int x, int y)
1276 Next[x][y] = Xfake_acid_2;
1279 static void Lfake_acid_2(int x, int y)
1281 Next[x][y] = Xfake_acid_3;
1284 static void Lfake_acid_3(int x, int y)
1286 Next[x][y] = Xfake_acid_4;
1289 static void Lfake_acid_4(int x, int y)
1291 Next[x][y] = Xfake_acid_5;
1294 static void Lfake_acid_5(int x, int y)
1296 Next[x][y] = Xfake_acid_6;
1299 static void Lfake_acid_6(int x, int y)
1301 Next[x][y] = Xfake_acid_7;
1304 static void Lfake_acid_7(int x, int y)
1306 Next[x][y] = Xfake_acid_8;
1309 static void Lfake_acid_8(int x, int y)
1311 Next[x][y] = Xfake_acid_1;
1315 static void Landroid(int x, int y)
1319 if (lev.android_clone_cnt == 0)
1321 if (Cave[x-1][y-1] != Xblank &&
1322 Cave[x][y-1] != Xblank &&
1323 Cave[x+1][y-1] != Xblank &&
1324 Cave[x-1][y] != Xblank &&
1325 Cave[x+1][y] != Xblank &&
1326 Cave[x-1][y+1] != Xblank &&
1327 Cave[x][y+1] != Xblank &&
1328 Cave[x+1][y+1] != Xblank)
1333 /* randomly find an object to clone */
1335 case 0: /* S,NE,W,NW,SE,E,SW,N */
1336 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1337 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1338 temp = lev.android_array[Cave[x-1][y]]; 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+1]]; if (temp != Xblank) break;
1343 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1346 case 1: /* NW,SE,N,S,NE,SW,E,W */
1347 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1348 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1349 temp = lev.android_array[Cave[x][y-1]]; 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]]; if (temp != Xblank) break;
1354 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1357 case 2: /* SW,E,S,W,N,NW,SE,NE */
1358 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1359 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1360 temp = lev.android_array[Cave[x][y+1]]; 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;
1365 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1368 case 3: /* N,SE,NE,E,W,S,NW,SW */
1369 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1370 temp = lev.android_array[Cave[x+1][y+1]]; 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]]; 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-1][y-1]]; if (temp != Xblank) break;
1376 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1379 case 4: /* SE,NW,E,NE,SW,W,N,S */
1380 temp = lev.android_array[Cave[x+1][y+1]]; 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]]; if (temp != Xblank) break;
1383 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1384 temp = lev.android_array[Cave[x-1][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][y-1]]; if (temp != Xblank) break;
1387 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1390 case 5: /* NE,W,SE,SW,S,N,E,NW */
1391 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1392 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1393 temp = lev.android_array[Cave[x+1][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][y+1]]; if (temp != Xblank) break;
1396 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1397 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1398 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1401 case 6: /* E,N,SW,S,NW,NE,SE,W */
1402 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1403 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1404 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1405 temp = lev.android_array[Cave[x][y+1]]; 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+1][y+1]]; if (temp != Xblank) break;
1409 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1412 case 7: /* W,SW,NW,N,E,SE,NE,S */
1413 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
1414 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
1415 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
1416 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
1417 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
1418 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
1419 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
1420 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
1424 Next[x][y] = temp; /* the item we chose to clone */
1425 play_element_sound(x, y, SOUND_android_clone, temp);
1429 /* randomly find a direction to move */
1431 case 0: /* S,NE,W,NW,SE,E,SW,N */
1432 if (Cave[x][y+1] == Xblank) goto android_s;
1433 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1434 if (Cave[x-1][y] == Xblank) goto android_w;
1435 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1436 if (Cave[x+1][y+1] == Xblank) goto android_se;
1437 if (Cave[x+1][y] == Xblank) goto android_e;
1438 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1439 if (Cave[x][y-1] == Xblank) goto android_n;
1442 case 1: /* NW,SE,N,S,NE,SW,E,W */
1443 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1444 if (Cave[x+1][y+1] == Xblank) goto android_se;
1445 if (Cave[x][y-1] == Xblank) goto android_n;
1446 if (Cave[x][y+1] == Xblank) goto android_s;
1447 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1448 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1449 if (Cave[x+1][y] == Xblank) goto android_e;
1450 if (Cave[x-1][y] == Xblank) goto android_w;
1453 case 2: /* SW,E,S,W,N,NW,SE,NE */
1454 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1455 if (Cave[x+1][y] == Xblank) goto android_e;
1456 if (Cave[x][y+1] == Xblank) goto android_s;
1457 if (Cave[x-1][y] == Xblank) goto android_w;
1458 if (Cave[x][y-1] == Xblank) goto android_n;
1459 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1460 if (Cave[x+1][y+1] == Xblank) goto android_se;
1461 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1464 case 3: /* N,SE,NE,E,W,S,NW,SW */
1465 if (Cave[x][y-1] == Xblank) goto android_n;
1466 if (Cave[x+1][y+1] == Xblank) goto android_se;
1467 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1468 if (Cave[x+1][y] == Xblank) goto android_e;
1469 if (Cave[x-1][y] == Xblank) goto android_w;
1470 if (Cave[x][y+1] == Xblank) goto android_s;
1471 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1472 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1475 case 4: /* SE,NW,E,NE,SW,W,N,S */
1476 if (Cave[x+1][y+1] == Xblank) goto android_se;
1477 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1478 if (Cave[x+1][y] == Xblank) goto android_e;
1479 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1480 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1481 if (Cave[x-1][y] == Xblank) goto android_w;
1482 if (Cave[x][y-1] == Xblank) goto android_n;
1483 if (Cave[x][y+1] == Xblank) goto android_s;
1486 case 5: /* NE,W,SE,SW,S,N,E,NW */
1487 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1488 if (Cave[x-1][y] == Xblank) goto android_w;
1489 if (Cave[x+1][y+1] == Xblank) goto android_se;
1490 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1491 if (Cave[x][y+1] == Xblank) goto android_s;
1492 if (Cave[x][y-1] == Xblank) goto android_n;
1493 if (Cave[x+1][y] == Xblank) goto android_e;
1494 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1497 case 6: /* E,N,SW,S,NW,NE,SE,W */
1498 if (Cave[x+1][y] == Xblank) goto android_e;
1499 if (Cave[x][y-1] == Xblank) goto android_n;
1500 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1501 if (Cave[x][y+1] == Xblank) goto android_s;
1502 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1503 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1504 if (Cave[x+1][y+1] == Xblank) goto android_se;
1505 if (Cave[x-1][y] == Xblank) goto android_w;
1508 case 7: /* W,SW,NW,N,E,SE,NE,S */
1509 if (Cave[x-1][y] == Xblank) goto android_w;
1510 if (Cave[x-1][y+1] == Xblank) goto android_sw;
1511 if (Cave[x-1][y-1] == Xblank) goto android_nw;
1512 if (Cave[x][y-1] == Xblank) goto android_n;
1513 if (Cave[x+1][y] == Xblank) goto android_e;
1514 if (Cave[x+1][y+1] == Xblank) goto android_se;
1515 if (Cave[x+1][y-1] == Xblank) goto android_ne;
1516 if (Cave[x][y+1] == Xblank) goto android_s;
1522 if (lev.android_move_cnt == 0)
1524 if (Cave[x-1][y-1] == Zplayer ||
1525 Cave[x][y-1] == Zplayer ||
1526 Cave[x+1][y-1] == Zplayer ||
1527 Cave[x-1][y] == Zplayer ||
1528 Cave[x+1][y] == Zplayer ||
1529 Cave[x-1][y+1] == Zplayer ||
1530 Cave[x][y+1] == Zplayer ||
1531 Cave[x+1][y+1] == Zplayer)
1534 set_nearest_player_xy(x, y, &dx, &dy);
1536 Next[x][y] = Xblank; /* assume we will move */
1537 temp = ((x < dx) + 1 - (x > dx)) + ((y < dy) + 1 - (y > dy)) * 3;
1543 /* attempt clockwise move first if direct path is blocked */
1545 case 0: /* north west */
1546 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1547 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1548 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1552 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1553 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1554 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1557 case 2: /* north east */
1558 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1559 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1560 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1564 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1565 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1566 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1569 case 4: /* nowhere */
1573 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1574 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1575 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1578 case 6: /* south west */
1579 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1580 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1581 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1585 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1586 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1587 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1590 case 8: /* south east */
1591 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1592 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1593 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1601 /* attempt counterclockwise move first if direct path is blocked */
1603 case 0: /* north west */
1604 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1605 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1606 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1610 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1611 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1612 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1615 case 2: /* north east */
1616 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1617 if (tab_android_move[Cave[x][y-1]]) goto android_n;
1618 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1622 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1623 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1624 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
1627 case 4: /* nowhere */
1631 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1632 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
1633 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1636 case 6: /* south west */
1637 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1638 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1639 if (tab_android_move[Cave[x-1][y]]) goto android_w;
1643 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1644 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1645 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
1648 case 8: /* south east */
1649 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
1650 if (tab_android_move[Cave[x+1][y]]) goto android_e;
1651 if (tab_android_move[Cave[x][y+1]]) goto android_s;
1658 Next[x][y] = Xandroid;
1662 Cave[x][y] = Yandroid_nB;
1663 Cave[x][y-1] = Yandroid_n;
1664 Next[x][y-1] = Xandroid;
1665 play_element_sound(x, y, SOUND_android_move, Xandroid);
1669 Cave[x][y] = Yandroid_neB;
1670 Cave[x+1][y-1] = Yandroid_ne;
1671 Next[x+1][y-1] = Xandroid;
1672 play_element_sound(x, y, SOUND_android_move, Xandroid);
1676 Cave[x][y] = Yandroid_eB;
1677 Cave[x+1][y] = Yandroid_e;
1678 Next[x+1][y] = Xandroid;
1679 play_element_sound(x, y, SOUND_android_move, Xandroid);
1683 Cave[x][y] = Yandroid_seB;
1684 Cave[x+1][y+1] = Yandroid_se;
1685 Next[x+1][y+1] = Xandroid;
1686 play_element_sound(x, y, SOUND_android_move, Xandroid);
1690 Cave[x][y] = Yandroid_sB;
1691 Cave[x][y+1] = Yandroid_s;
1692 Next[x][y+1] = Xandroid;
1693 play_element_sound(x, y, SOUND_android_move, Xandroid);
1697 Cave[x][y] = Yandroid_swB;
1698 Cave[x-1][y+1] = Yandroid_sw;
1699 Next[x-1][y+1] = Xandroid;
1700 play_element_sound(x, y, SOUND_android_move, Xandroid);
1704 Cave[x][y] = Yandroid_wB;
1705 Cave[x-1][y] = Yandroid_w;
1706 Next[x-1][y] = Xandroid;
1707 play_element_sound(x, y, SOUND_android_move, Xandroid);
1711 Cave[x][y] = Yandroid_nwB;
1712 Cave[x-1][y-1] = Yandroid_nw;
1713 Next[x-1][y-1] = Xandroid;
1714 play_element_sound(x, y, SOUND_android_move, Xandroid);
1718 static void Landroid_1_n(int x, int y)
1720 switch (Cave[x][y-1])
1723 case Xacid_splash_e:
1724 case Xacid_splash_w:
1725 Cave[x][y] = Yandroid_nB;
1726 Cave[x][y-1] = Yandroid_n;
1727 Next[x][y] = Xblank;
1728 Next[x][y-1] = Xandroid;
1729 play_element_sound(x, y, SOUND_android_move, Xandroid_1_n);
1740 Cave[x][y] = Yandroid_nB;
1741 if (Cave[x+1][y-2] == Xblank)
1742 Cave[x+1][y-2] = Xacid_splash_e;
1743 if (Cave[x-1][y-2] == Xblank)
1744 Cave[x-1][y-2] = Xacid_splash_w;
1745 Next[x][y] = Xblank;
1746 play_element_sound(x, y, SOUND_acid, Xacid_1);
1755 static void Landroid_2_n(int x, int y)
1757 switch (Cave[x][y-1])
1760 case Xacid_splash_e:
1761 case Xacid_splash_w:
1762 Cave[x][y] = Yandroid_nB;
1763 Cave[x][y-1] = Yandroid_n;
1764 Next[x][y] = Xblank;
1765 Next[x][y-1] = Xandroid_1_n;
1766 play_element_sound(x, y, SOUND_android_move, Xandroid_2_n);
1777 Cave[x][y] = Yandroid_nB;
1778 if (Cave[x+1][y-2] == Xblank)
1779 Cave[x+1][y-2] = Xacid_splash_e;
1780 if (Cave[x-1][y-2] == Xblank)
1781 Cave[x-1][y-2] = Xacid_splash_w;
1782 Next[x][y] = Xblank;
1783 play_element_sound(x, y, SOUND_acid, Xacid_1);
1792 static void Landroid_1_e(int x, int y)
1794 switch (Cave[x+1][y])
1797 case Xacid_splash_e:
1798 case Xacid_splash_w:
1799 Cave[x][y] = Yandroid_eB;
1800 Cave[x+1][y] = Yandroid_e;
1801 Next[x][y] = Xblank;
1802 Next[x+1][y] = Xandroid;
1803 play_element_sound(x, y, SOUND_android_move, Xandroid_1_e);
1814 Cave[x][y] = Yandroid_eB;
1815 if (Cave[x+2][y-1] == Xblank)
1816 Cave[x+2][y-1] = Xacid_splash_e;
1817 if (Cave[x][y-1] == Xblank)
1818 Cave[x][y-1] = Xacid_splash_w;
1819 Next[x][y] = Xblank;
1820 play_element_sound(x, y, SOUND_acid, Xacid_1);
1829 static void Landroid_2_e(int x, int y)
1831 switch (Cave[x+1][y])
1834 case Xacid_splash_e:
1835 case Xacid_splash_w:
1836 Cave[x][y] = Yandroid_eB;
1837 Cave[x+1][y] = Yandroid_e;
1838 Next[x][y] = Xblank;
1839 Next[x+1][y] = Xandroid_1_e;
1840 play_element_sound(x, y, SOUND_android_move, Xandroid_2_e);
1851 Cave[x][y] = Yandroid_eB;
1852 if (Cave[x+2][y-1] == Xblank)
1853 Cave[x+2][y-1] = Xacid_splash_e;
1854 if (Cave[x][y-1] == Xblank)
1855 Cave[x][y-1] = Xacid_splash_w;
1856 Next[x][y] = Xblank;
1857 play_element_sound(x, y, SOUND_acid, Xacid_1);
1866 static void Landroid_1_s(int x, int y)
1868 switch (Cave[x][y+1])
1871 case Xacid_splash_e:
1872 case Xacid_splash_w:
1873 Cave[x][y] = Yandroid_sB;
1874 Cave[x][y+1] = Yandroid_s;
1875 Next[x][y] = Xblank;
1876 Next[x][y+1] = Xandroid;
1877 play_element_sound(x, y, SOUND_android_move, Xandroid_1_s);
1888 Cave[x][y] = Yandroid_sB;
1889 if (Cave[x+1][y] == Xblank)
1890 Cave[x+1][y] = Xacid_splash_e;
1891 if (Cave[x-1][y] == Xblank)
1892 Cave[x-1][y] = Xacid_splash_w;
1893 Next[x][y] = Xblank;
1894 play_element_sound(x, y, SOUND_acid, Xacid_1);
1903 static void Landroid_2_s(int x, int y)
1905 switch (Cave[x][y+1])
1908 case Xacid_splash_e:
1909 case Xacid_splash_w:
1910 Cave[x][y] = Yandroid_sB;
1911 Cave[x][y+1] = Yandroid_s;
1912 Next[x][y] = Xblank;
1913 Next[x][y+1] = Xandroid_1_s;
1914 play_element_sound(x, y, SOUND_android_move, Xandroid_2_s);
1925 Cave[x][y] = Yandroid_sB;
1926 if (Cave[x+1][y] == Xblank)
1927 Cave[x+1][y] = Xacid_splash_e;
1928 if (Cave[x-1][y] == Xblank)
1929 Cave[x-1][y] = Xacid_splash_w;
1930 Next[x][y] = Xblank;
1931 play_element_sound(x, y, SOUND_acid, Xacid_1);
1940 static void Landroid_1_w(int x, int y)
1942 switch (Cave[x-1][y])
1945 case Xacid_splash_e:
1946 case Xacid_splash_w:
1947 Cave[x][y] = Yandroid_wB;
1948 Cave[x-1][y] = Yandroid_w;
1949 Next[x][y] = Xblank;
1950 Next[x-1][y] = Xandroid;
1951 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
1962 Cave[x][y] = Yandroid_wB;
1963 if (Cave[x][y-1] == Xblank)
1964 Cave[x][y-1] = Xacid_splash_e;
1965 if (Cave[x-2][y-1] == Xblank)
1966 Cave[x-2][y-1] = Xacid_splash_w;
1967 Next[x][y] = Xblank;
1968 play_element_sound(x, y, SOUND_acid, Xacid_1);
1977 static void Landroid_2_w(int x, int y)
1979 switch (Cave[x-1][y])
1982 case Xacid_splash_e:
1983 case Xacid_splash_w:
1984 Cave[x][y] = Yandroid_wB;
1985 Cave[x-1][y] = Yandroid_w;
1986 Next[x][y] = Xblank;
1987 Next[x-1][y] = Xandroid_1_w;
1988 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
1999 Cave[x][y] = Yandroid_wB;
2000 if (Cave[x][y-1] == Xblank)
2001 Cave[x][y-1] = Xacid_splash_e;
2002 if (Cave[x-2][y-1] == Xblank)
2003 Cave[x-2][y-1] = Xacid_splash_w;
2004 Next[x][y] = Xblank;
2005 play_element_sound(x, y, SOUND_acid, Xacid_1);
2014 static void Leater_n(int x, int y)
2016 if (Cave[x+1][y] == Xdiamond)
2018 Cave[x+1][y] = Ydiamond_blank;
2019 Next[x+1][y] = Xblank;
2020 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2024 if (Cave[x][y+1] == Xdiamond)
2026 Cave[x][y+1] = Ydiamond_blank;
2027 Next[x][y+1] = Xblank;
2028 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2032 if (Cave[x-1][y] == Xdiamond)
2034 Cave[x-1][y] = Ydiamond_blank;
2035 Next[x-1][y] = Xblank;
2036 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2040 if (Cave[x][y-1] == Xdiamond)
2042 Cave[x][y-1] = Ydiamond_blank;
2043 Next[x][y-1] = Xblank;
2044 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
2048 switch (Cave[x][y-1])
2051 case Xacid_splash_e:
2052 case Xacid_splash_w:
2056 Cave[x][y] = Yeater_nB;
2057 Cave[x][y-1] = Yeater_n;
2058 Next[x][y] = Xblank;
2059 Next[x][y-1] = Xeater_n;
2070 Cave[x][y] = Yeater_nB;
2071 if (Cave[x+1][y-2] == Xblank)
2072 Cave[x+1][y-2] = Xacid_splash_e;
2073 if (Cave[x-1][y-2] == Xblank)
2074 Cave[x-1][y-2] = Xacid_splash_w;
2075 Next[x][y] = Xblank;
2076 play_element_sound(x, y, SOUND_acid, Xacid_1);
2080 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
2081 play_element_sound(x, y, SOUND_eater, Xeater_n);
2086 static void Leater_e(int x, int y)
2088 if (Cave[x][y+1] == Xdiamond)
2090 Cave[x][y+1] = Ydiamond_blank;
2091 Next[x][y+1] = Xblank;
2092 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2096 if (Cave[x-1][y] == Xdiamond)
2098 Cave[x-1][y] = Ydiamond_blank;
2099 Next[x-1][y] = Xblank;
2100 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2104 if (Cave[x][y-1] == Xdiamond)
2106 Cave[x][y-1] = Ydiamond_blank;
2107 Next[x][y-1] = Xblank;
2108 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2112 if (Cave[x+1][y] == Xdiamond)
2114 Cave[x+1][y] = Ydiamond_blank;
2115 Next[x+1][y] = Xblank;
2116 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
2120 switch (Cave[x+1][y])
2123 case Xacid_splash_e:
2124 case Xacid_splash_w:
2128 Cave[x][y] = Yeater_eB;
2129 Cave[x+1][y] = Yeater_e;
2130 Next[x][y] = Xblank;
2131 Next[x+1][y] = Xeater_e;
2142 Cave[x][y] = Yeater_eB;
2143 if (Cave[x+2][y-1] == Xblank)
2144 Cave[x+2][y-1] = Xacid_splash_e;
2145 if (Cave[x][y-1] == Xblank)
2146 Cave[x][y-1] = Xacid_splash_w;
2147 Next[x][y] = Xblank;
2148 play_element_sound(x, y, SOUND_acid, Xacid_1);
2152 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
2153 play_element_sound(x, y, SOUND_eater, Xeater_e);
2158 static void Leater_s(int x, int y)
2160 if (Cave[x-1][y] == Xdiamond)
2162 Cave[x-1][y] = Ydiamond_blank;
2163 Next[x-1][y] = Xblank;
2164 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2168 if (Cave[x][y-1] == Xdiamond)
2170 Cave[x][y-1] = Ydiamond_blank;
2171 Next[x][y-1] = Xblank;
2172 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2176 if (Cave[x+1][y] == Xdiamond)
2178 Cave[x+1][y] = Ydiamond_blank;
2179 Next[x+1][y] = Xblank;
2180 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2184 if (Cave[x][y+1] == Xdiamond)
2186 Cave[x][y+1] = Ydiamond_blank;
2187 Next[x][y+1] = Xblank;
2188 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
2192 switch (Cave[x][y+1])
2195 case Xacid_splash_e:
2196 case Xacid_splash_w:
2200 Cave[x][y] = Yeater_sB;
2201 Cave[x][y+1] = Yeater_s;
2202 Next[x][y] = Xblank;
2203 Next[x][y+1] = Xeater_s;
2214 Cave[x][y] = Yeater_sB;
2215 if (Cave[x+1][y] == Xblank)
2216 Cave[x+1][y] = Xacid_splash_e;
2217 if (Cave[x-1][y] == Xblank)
2218 Cave[x-1][y] = Xacid_splash_w;
2219 Next[x][y] = Xblank;
2220 play_element_sound(x, y, SOUND_acid, Xacid_1);
2224 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
2225 play_element_sound(x, y, SOUND_eater, Xeater_s);
2230 static void Leater_w(int x, int y)
2232 if (Cave[x][y-1] == Xdiamond)
2234 Cave[x][y-1] = Ydiamond_blank;
2235 Next[x][y-1] = Xblank;
2236 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2240 if (Cave[x+1][y] == Xdiamond)
2242 Cave[x+1][y] = Ydiamond_blank;
2243 Next[x+1][y] = Xblank;
2244 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2248 if (Cave[x][y+1] == Xdiamond)
2250 Cave[x][y+1] = Ydiamond_blank;
2251 Next[x][y+1] = Xblank;
2252 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2256 if (Cave[x-1][y] == Xdiamond)
2258 Cave[x-1][y] = Ydiamond_blank;
2259 Next[x-1][y] = Xblank;
2260 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
2264 switch (Cave[x-1][y])
2267 case Xacid_splash_e:
2268 case Xacid_splash_w:
2272 Cave[x][y] = Yeater_wB;
2273 Cave[x-1][y] = Yeater_w;
2274 Next[x][y] = Xblank;
2275 Next[x-1][y] = Xeater_w;
2286 Cave[x][y] = Yeater_wB;
2287 if (Cave[x][y-1] == Xblank)
2288 Cave[x][y-1] = Xacid_splash_e;
2289 if (Cave[x-2][y-1] == Xblank)
2290 Cave[x-2][y-1] = Xacid_splash_w;
2291 Next[x][y] = Xblank;
2292 play_element_sound(x, y, SOUND_acid, Xacid_1);
2296 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
2297 play_element_sound(x, y, SOUND_eater, Xeater_w);
2302 static void Lalien(int x, int y)
2313 set_nearest_player_xy(x, y, &dx, &dy);
2320 switch (Cave[x][y-1])
2323 case Xacid_splash_e:
2324 case Xacid_splash_w:
2328 Cave[x][y] = Yalien_nB;
2329 Cave[x][y-1] = Yalien_n;
2330 Next[x][y] = Xblank;
2331 Next[x][y-1] = Xalien_pause;
2332 play_element_sound(x, y, SOUND_alien, Xalien);
2343 Cave[x][y] = Yalien_nB;
2344 if (Cave[x+1][y-2] == Xblank)
2345 Cave[x+1][y-2] = Xacid_splash_e;
2346 if (Cave[x-1][y-2] == Xblank)
2347 Cave[x-1][y-2] = Xacid_splash_w;
2348 Next[x][y] = Xblank;
2349 play_element_sound(x, y, SOUND_acid, Xacid_1);
2355 switch (Cave[x][y+1])
2358 case Xacid_splash_e:
2359 case Xacid_splash_w:
2363 Cave[x][y] = Yalien_sB;
2364 Cave[x][y+1] = Yalien_s;
2365 Next[x][y] = Xblank;
2366 Next[x][y+1] = Xalien_pause;
2367 play_element_sound(x, y, SOUND_alien, Xalien);
2378 Cave[x][y] = Yalien_sB;
2379 Next[x][y] = Xblank;
2380 if (Cave[x+1][y] == Xblank)
2381 Cave[x+1][y] = Xacid_splash_e;
2382 if (Cave[x-1][y] == Xblank)
2383 Cave[x-1][y] = Xacid_splash_w;
2384 play_element_sound(x, y, SOUND_acid, Xacid_1);
2393 switch (Cave[x+1][y])
2396 case Xacid_splash_e:
2397 case Xacid_splash_w:
2401 Cave[x][y] = Yalien_eB;
2402 Cave[x+1][y] = Yalien_e;
2403 Next[x][y] = Xblank;
2404 Next[x+1][y] = Xalien_pause;
2405 play_element_sound(x, y, SOUND_alien, Xalien);
2416 Cave[x][y] = Yalien_eB;
2417 if (Cave[x+2][y-1] == Xblank)
2418 Cave[x+2][y-1] = Xacid_splash_e;
2419 if (Cave[x][y-1] == Xblank)
2420 Cave[x][y-1] = Xacid_splash_w;
2421 Next[x][y] = Xblank;
2422 play_element_sound(x, y, SOUND_acid, Xacid_1);
2428 switch (Cave[x-1][y])
2431 case Xacid_splash_e:
2432 case Xacid_splash_w:
2436 Cave[x][y] = Yalien_wB;
2437 Cave[x-1][y] = Yalien_w;
2438 Next[x][y] = Xblank;
2439 Next[x-1][y] = Xalien_pause;
2440 play_element_sound(x, y, SOUND_alien, Xalien);
2451 Cave[x][y] = Yalien_wB;
2452 if (Cave[x][y-1] == Xblank)
2453 Cave[x][y-1] = Xacid_splash_e;
2454 if (Cave[x-2][y-1] == Xblank)
2455 Cave[x-2][y-1] = Xacid_splash_w;
2456 Next[x][y] = Xblank;
2457 play_element_sound(x, y, SOUND_acid, Xacid_1);
2464 static void Lalien_pause(int x, int y)
2466 Next[x][y] = Xalien;
2469 static void Lbug_n(int x, int y)
2471 switch (Cave[x][y-1])
2474 case Xacid_splash_e:
2475 case Xacid_splash_w:
2479 Cave[x][y] = Ybug_nB;
2480 Cave[x][y-1] = Ybug_n;
2481 Next[x][y] = Xblank;
2482 Next[x][y-1] = Xbug_1_n;
2483 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
2494 Cave[x][y] = Ybug_nB;
2495 if (Cave[x+1][y-2] == Xblank)
2496 Cave[x+1][y-2] = Xacid_splash_e;
2497 if (Cave[x-1][y-2] == Xblank)
2498 Cave[x-1][y-2] = Xacid_splash_w;
2499 Next[x][y] = Xblank;
2500 play_element_sound(x, y, SOUND_acid, Xacid_1);
2504 Cave[x][y] = Ybug_n_w;
2505 Next[x][y] = Xbug_2_w;
2506 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
2511 static void Lbug_1_n(int x, int y)
2513 if (tab_amoeba[Cave[x][y-1]] ||
2514 tab_amoeba[Cave[x+1][y]] ||
2515 tab_amoeba[Cave[x][y+1]] ||
2516 tab_amoeba[Cave[x-1][y]])
2523 switch (Cave[x+1][y])
2526 case Xacid_splash_e:
2527 case Xacid_splash_w:
2539 Cave[x][y] = Ybug_n_e;
2540 Next[x][y] = Xbug_2_e;
2541 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
2550 static void Lbug_2_n(int x, int y)
2552 if (tab_amoeba[Cave[x][y-1]] ||
2553 tab_amoeba[Cave[x+1][y]] ||
2554 tab_amoeba[Cave[x][y+1]] ||
2555 tab_amoeba[Cave[x-1][y]])
2565 static void Lbug_e(int x, int y)
2567 switch (Cave[x+1][y])
2570 case Xacid_splash_e:
2571 case Xacid_splash_w:
2575 Cave[x][y] = Ybug_eB;
2576 Cave[x+1][y] = Ybug_e;
2577 Next[x][y] = Xblank;
2578 Next[x+1][y] = Xbug_1_e;
2579 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
2590 Cave[x][y] = Ybug_eB;
2591 if (Cave[x+2][y-1] == Xblank)
2592 Cave[x+2][y-1] = Xacid_splash_e;
2593 if (Cave[x][y-1] == Xblank)
2594 Cave[x][y-1] = Xacid_splash_w;
2595 Next[x][y] = Xblank;
2596 play_element_sound(x, y, SOUND_acid, Xacid_1);
2600 Cave[x][y] = Ybug_e_n;
2601 Next[x][y] = Xbug_2_n;
2602 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
2607 static void Lbug_1_e(int x, int y)
2609 if (tab_amoeba[Cave[x][y-1]] ||
2610 tab_amoeba[Cave[x+1][y]] ||
2611 tab_amoeba[Cave[x][y+1]] ||
2612 tab_amoeba[Cave[x-1][y]])
2619 switch (Cave[x][y+1])
2622 case Xacid_splash_e:
2623 case Xacid_splash_w:
2635 Cave[x][y] = Ybug_e_s;
2636 Next[x][y] = Xbug_2_s;
2637 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
2646 static void Lbug_2_e(int x, int y)
2648 if (tab_amoeba[Cave[x][y-1]] ||
2649 tab_amoeba[Cave[x+1][y]] ||
2650 tab_amoeba[Cave[x][y+1]] ||
2651 tab_amoeba[Cave[x-1][y]])
2661 static void Lbug_s(int x, int y)
2663 switch (Cave[x][y+1])
2666 case Xacid_splash_e:
2667 case Xacid_splash_w:
2671 Cave[x][y] = Ybug_sB;
2672 Cave[x][y+1] = Ybug_s;
2673 Next[x][y] = Xblank;
2674 Next[x][y+1] = Xbug_1_s;
2675 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
2686 Cave[x][y] = Ybug_sB;
2687 if (Cave[x+1][y] == Xblank)
2688 Cave[x+1][y] = Xacid_splash_e;
2689 if (Cave[x-1][y] == Xblank)
2690 Cave[x-1][y] = Xacid_splash_w;
2691 Next[x][y] = Xblank;
2692 play_element_sound(x, y, SOUND_acid, Xacid_1);
2696 Cave[x][y] = Ybug_s_e;
2697 Next[x][y] = Xbug_2_e;
2698 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
2703 static void Lbug_1_s(int x, int y)
2705 if (tab_amoeba[Cave[x][y-1]] ||
2706 tab_amoeba[Cave[x+1][y]] ||
2707 tab_amoeba[Cave[x][y+1]] ||
2708 tab_amoeba[Cave[x-1][y]])
2715 switch (Cave[x-1][y])
2718 case Xacid_splash_e:
2719 case Xacid_splash_w:
2731 Cave[x][y] = Ybug_s_w;
2732 Next[x][y] = Xbug_2_w;
2733 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
2742 static void Lbug_2_s(int x, int y)
2744 if (tab_amoeba[Cave[x][y-1]] ||
2745 tab_amoeba[Cave[x+1][y]] ||
2746 tab_amoeba[Cave[x][y+1]] ||
2747 tab_amoeba[Cave[x-1][y]])
2757 static void Lbug_w(int x, int y)
2759 switch (Cave[x-1][y])
2762 case Xacid_splash_e:
2763 case Xacid_splash_w:
2767 Cave[x][y] = Ybug_wB;
2768 Cave[x-1][y] = Ybug_w;
2769 Next[x][y] = Xblank;
2770 Next[x-1][y] = Xbug_1_w;
2771 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
2782 Cave[x][y] = Ybug_wB;
2783 if (Cave[x][y-1] == Xblank)
2784 Cave[x][y-1] = Xacid_splash_e;
2785 if (Cave[x-2][y-1] == Xblank)
2786 Cave[x-2][y-1] = Xacid_splash_w;
2787 Next[x][y] = Xblank;
2788 play_element_sound(x, y, SOUND_acid, Xacid_1);
2792 Cave[x][y] = Ybug_w_s;
2793 Next[x][y] = Xbug_2_s;
2794 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
2799 static void Lbug_1_w(int x, int y)
2801 if (tab_amoeba[Cave[x][y-1]] ||
2802 tab_amoeba[Cave[x+1][y]] ||
2803 tab_amoeba[Cave[x][y+1]] ||
2804 tab_amoeba[Cave[x-1][y]])
2811 switch (Cave[x][y-1])
2814 case Xacid_splash_e:
2815 case Xacid_splash_w:
2827 Cave[x][y] = Ybug_w_n;
2828 Next[x][y] = Xbug_2_n;
2829 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
2838 static void Lbug_2_w(int x, int y)
2840 if (tab_amoeba[Cave[x][y-1]] ||
2841 tab_amoeba[Cave[x+1][y]] ||
2842 tab_amoeba[Cave[x][y+1]] ||
2843 tab_amoeba[Cave[x-1][y]])
2853 static void Ltank_n(int x, int y)
2855 switch (Cave[x][y-1])
2858 case Xacid_splash_e:
2859 case Xacid_splash_w:
2863 Cave[x][y] = Ytank_nB;
2864 Cave[x][y-1] = Ytank_n;
2865 Next[x][y] = Xblank;
2866 Next[x][y-1] = Xtank_1_n;
2867 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
2878 Cave[x][y] = Ytank_nB;
2879 if (Cave[x+1][y-2] == Xblank)
2880 Cave[x+1][y-2] = Xacid_splash_e;
2881 if (Cave[x-1][y-2] == Xblank)
2882 Cave[x-1][y-2] = Xacid_splash_w;
2883 Next[x][y] = Xblank;
2884 play_element_sound(x, y, SOUND_acid, Xacid_1);
2888 Cave[x][y] = Ytank_n_e;
2889 Next[x][y] = Xtank_2_e;
2890 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
2895 static void Ltank_1_n(int x, int y)
2897 if (tab_amoeba[Cave[x][y-1]] ||
2898 tab_amoeba[Cave[x+1][y]] ||
2899 tab_amoeba[Cave[x][y+1]] ||
2900 tab_amoeba[Cave[x-1][y]])
2907 switch (Cave[x-1][y])
2910 case Xacid_splash_e:
2911 case Xacid_splash_w:
2923 Cave[x][y] = Ytank_n_w;
2924 Next[x][y] = Xtank_2_w;
2925 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
2934 static void Ltank_2_n(int x, int y)
2936 if (tab_amoeba[Cave[x][y-1]] ||
2937 tab_amoeba[Cave[x+1][y]] ||
2938 tab_amoeba[Cave[x][y+1]] ||
2939 tab_amoeba[Cave[x-1][y]])
2949 static void Ltank_e(int x, int y)
2951 switch (Cave[x+1][y])
2954 case Xacid_splash_e:
2955 case Xacid_splash_w:
2959 Cave[x][y] = Ytank_eB;
2960 Cave[x+1][y] = Ytank_e;
2961 Next[x][y] = Xblank;
2962 Next[x+1][y] = Xtank_1_e;
2963 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
2974 Cave[x][y] = Ytank_eB;
2975 if (Cave[x+2][y-1] == Xblank)
2976 Cave[x+2][y-1] = Xacid_splash_e;
2977 if (Cave[x][y-1] == Xblank)
2978 Cave[x][y-1] = Xacid_splash_w;
2979 Next[x][y] = Xblank;
2980 play_element_sound(x, y, SOUND_acid, Xacid_1);
2984 Cave[x][y] = Ytank_e_s;
2985 Next[x][y] = Xtank_2_s;
2986 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
2991 static void Ltank_1_e(int x, int y)
2993 if (tab_amoeba[Cave[x][y-1]] ||
2994 tab_amoeba[Cave[x+1][y]] ||
2995 tab_amoeba[Cave[x][y+1]] ||
2996 tab_amoeba[Cave[x-1][y]])
3003 switch (Cave[x][y-1])
3006 case Xacid_splash_e:
3007 case Xacid_splash_w:
3019 Cave[x][y] = Ytank_e_n;
3020 Next[x][y] = Xtank_2_n;
3021 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
3030 static void Ltank_2_e(int x, int y)
3032 if (tab_amoeba[Cave[x][y-1]] ||
3033 tab_amoeba[Cave[x+1][y]] ||
3034 tab_amoeba[Cave[x][y+1]] ||
3035 tab_amoeba[Cave[x-1][y]])
3045 static void Ltank_s(int x, int y)
3047 switch (Cave[x][y+1])
3050 case Xacid_splash_e:
3051 case Xacid_splash_w:
3055 Cave[x][y] = Ytank_sB;
3056 Cave[x][y+1] = Ytank_s;
3057 Next[x][y] = Xblank;
3058 Next[x][y+1] = Xtank_1_s;
3059 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
3070 Cave[x][y] = Ytank_sB;
3071 if (Cave[x+1][y] == Xblank)
3072 Cave[x+1][y] = Xacid_splash_e;
3073 if (Cave[x-1][y] == Xblank)
3074 Cave[x-1][y] = Xacid_splash_w;
3075 Next[x][y] = Xblank;
3076 play_element_sound(x, y, SOUND_acid, Xacid_1);
3080 Cave[x][y] = Ytank_s_w;
3081 Next[x][y] = Xtank_2_w;
3082 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
3087 static void Ltank_1_s(int x, int y)
3089 if (tab_amoeba[Cave[x][y-1]] ||
3090 tab_amoeba[Cave[x+1][y]] ||
3091 tab_amoeba[Cave[x][y+1]] ||
3092 tab_amoeba[Cave[x-1][y]])
3099 switch (Cave[x+1][y])
3102 case Xacid_splash_e:
3103 case Xacid_splash_w:
3115 Cave[x][y] = Ytank_s_e;
3116 Next[x][y] = Xtank_2_e;
3117 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
3126 static void Ltank_2_s(int x, int y)
3128 if (tab_amoeba[Cave[x][y-1]] ||
3129 tab_amoeba[Cave[x+1][y]] ||
3130 tab_amoeba[Cave[x][y+1]] ||
3131 tab_amoeba[Cave[x-1][y]])
3141 static void Ltank_w(int x, int y)
3143 switch (Cave[x-1][y])
3146 case Xacid_splash_e:
3147 case Xacid_splash_w:
3151 Cave[x][y] = Ytank_wB;
3152 Cave[x-1][y] = Ytank_w;
3153 Next[x][y] = Xblank;
3154 Next[x-1][y] = Xtank_1_w;
3155 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
3166 Cave[x][y] = Ytank_wB;
3167 if (Cave[x][y-1] == Xblank)
3168 Cave[x][y-1] = Xacid_splash_e;
3169 if (Cave[x-2][y-1] == Xblank)
3170 Cave[x-2][y-1] = Xacid_splash_w;
3171 Next[x][y] = Xblank;
3172 play_element_sound(x, y, SOUND_acid, Xacid_1);
3176 Cave[x][y] = Ytank_w_n;
3177 Next[x][y] = Xtank_2_n;
3178 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
3183 static void Ltank_1_w(int x, int y)
3185 if (tab_amoeba[Cave[x][y-1]] ||
3186 tab_amoeba[Cave[x+1][y]] ||
3187 tab_amoeba[Cave[x][y+1]] ||
3188 tab_amoeba[Cave[x-1][y]])
3195 switch (Cave[x][y+1])
3198 case Xacid_splash_e:
3199 case Xacid_splash_w:
3211 Cave[x][y] = Ytank_w_s;
3212 Next[x][y] = Xtank_2_s;
3213 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
3222 static void Ltank_2_w(int x, int y)
3224 if (tab_amoeba[Cave[x][y-1]] ||
3225 tab_amoeba[Cave[x+1][y]] ||
3226 tab_amoeba[Cave[x][y+1]] ||
3227 tab_amoeba[Cave[x-1][y]])
3237 static void Lemerald(int x, int y)
3239 switch (Cave[x][y+1])
3242 case Xacid_splash_e:
3243 case Xacid_splash_w:
3244 Cave[x][y] = Yemerald_sB;
3245 Cave[x][y+1] = Yemerald_s;
3246 Next[x][y] = Xblank;
3247 Next[x][y+1] = Xemerald_fall;
3258 Cave[x][y] = Yemerald_sB;
3259 if (Cave[x+1][y] == Xblank)
3260 Cave[x+1][y] = Xacid_splash_e;
3261 if (Cave[x-1][y] == Xblank)
3262 Cave[x-1][y] = Xacid_splash_w;
3263 Next[x][y] = Xblank;
3264 play_element_sound(x, y, SOUND_acid, Xacid_1);
3283 case Xemerald_pause:
3285 case Xdiamond_pause:
3322 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3324 Cave[x][y] = Yemerald_eB;
3325 Cave[x+1][y] = Yemerald_e;
3326 Next[x][y] = Xblank;
3327 Next[x+1][y] = Xemerald_pause;
3331 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3333 Cave[x][y] = Yemerald_wB;
3334 Cave[x-1][y] = Yemerald_w;
3335 Next[x][y] = Xblank;
3336 Next[x-1][y] = Xemerald_pause;
3342 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3344 Cave[x][y] = Yemerald_wB;
3345 Cave[x-1][y] = Yemerald_w;
3346 Next[x][y] = Xblank;
3347 Next[x-1][y] = Xemerald_pause;
3351 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3353 Cave[x][y] = Yemerald_eB;
3354 Cave[x+1][y] = Yemerald_e;
3355 Next[x][y] = Xblank;
3356 Next[x+1][y] = Xemerald_pause;
3362 if (++lev.shine_cnt > 50)
3364 lev.shine_cnt = RANDOM(8);
3365 Cave[x][y] = Xemerald_shine;
3372 static void Lemerald_pause(int x, int y)
3374 switch (Cave[x][y+1])
3377 case Xacid_splash_e:
3378 case Xacid_splash_w:
3379 Cave[x][y] = Yemerald_sB;
3380 Cave[x][y+1] = Yemerald_s;
3381 Next[x][y] = Xblank;
3382 Next[x][y+1] = Xemerald_fall;
3393 Cave[x][y] = Yemerald_sB;
3394 if (Cave[x+1][y] == Xblank)
3395 Cave[x+1][y] = Xacid_splash_e;
3396 if (Cave[x-1][y] == Xblank)
3397 Cave[x-1][y] = Xacid_splash_w;
3398 Next[x][y] = Xblank;
3399 play_element_sound(x, y, SOUND_acid, Xacid_1);
3403 Cave[x][y] = Xemerald;
3404 Next[x][y] = Xemerald;
3409 static void Lemerald_fall(int x, int y)
3411 switch (Cave[x][y+1])
3414 case Xacid_splash_e:
3415 case Xacid_splash_w:
3417 Cave[x][y] = Yemerald_sB;
3418 Cave[x][y+1] = Yemerald_s;
3419 Next[x][y] = Xblank;
3420 Next[x][y+1] = Xemerald_fall;
3431 Cave[x][y] = Yemerald_sB;
3432 if (Cave[x+1][y] == Xblank)
3433 Cave[x+1][y] = Xacid_splash_e;
3434 if (Cave[x-1][y] == Xblank)
3435 Cave[x-1][y] = Xacid_splash_w;
3436 Next[x][y] = Xblank;
3437 play_element_sound(x, y, SOUND_acid, Xacid_1);
3441 if (lev.wonderwall_time)
3443 lev.wonderwall_state = 1;
3444 Cave[x][y] = Yemerald_sB;
3445 if (tab_blank[Cave[x][y+2]])
3447 Cave[x][y+2] = Ydiamond_s;
3448 Next[x][y+2] = Xdiamond_fall;
3451 Next[x][y] = Xblank;
3452 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
3457 Cave[x][y] = Xemerald;
3458 Next[x][y] = Xemerald;
3459 play_element_sound(x, y, SOUND_diamond, Xemerald);
3464 static void Ldiamond(int x, int y)
3466 switch (Cave[x][y+1])
3469 case Xacid_splash_e:
3470 case Xacid_splash_w:
3471 Cave[x][y] = Ydiamond_sB;
3472 Cave[x][y+1] = Ydiamond_s;
3473 Next[x][y] = Xblank;
3474 Next[x][y+1] = Xdiamond_fall;
3485 Cave[x][y] = Ydiamond_sB;
3486 if (Cave[x+1][y] == Xblank)
3487 Cave[x+1][y] = Xacid_splash_e;
3488 if (Cave[x-1][y] == Xblank)
3489 Cave[x-1][y] = Xacid_splash_w;
3490 Next[x][y] = Xblank;
3491 play_element_sound(x, y, SOUND_acid, Xacid_1);
3510 case Xemerald_pause:
3512 case Xdiamond_pause:
3549 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3551 Cave[x][y] = Ydiamond_eB;
3552 Cave[x+1][y] = Ydiamond_e;
3553 Next[x][y] = Xblank;
3554 Next[x+1][y] = Xdiamond_pause;
3558 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3560 Cave[x][y] = Ydiamond_wB;
3561 Cave[x-1][y] = Ydiamond_w;
3562 Next[x][y] = Xblank;
3563 Next[x-1][y] = Xdiamond_pause;
3569 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3571 Cave[x][y] = Ydiamond_wB;
3572 Cave[x-1][y] = Ydiamond_w;
3573 Next[x][y] = Xblank;
3574 Next[x-1][y] = Xdiamond_pause;
3578 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3580 Cave[x][y] = Ydiamond_eB;
3581 Cave[x+1][y] = Ydiamond_e;
3582 Next[x][y] = Xblank;
3583 Next[x+1][y] = Xdiamond_pause;
3589 if (++lev.shine_cnt > 50)
3591 lev.shine_cnt = RANDOM(8);
3592 Cave[x][y] = Xdiamond_shine;
3599 static void Ldiamond_pause(int x, int y)
3601 switch (Cave[x][y+1])
3604 case Xacid_splash_e:
3605 case Xacid_splash_w:
3606 Cave[x][y] = Ydiamond_sB;
3607 Cave[x][y+1] = Ydiamond_s;
3608 Next[x][y] = Xblank;
3609 Next[x][y+1] = Xdiamond_fall;
3620 Cave[x][y] = Ydiamond_sB;
3621 if (Cave[x+1][y] == Xblank)
3622 Cave[x+1][y] = Xacid_splash_e;
3623 if (Cave[x-1][y] == Xblank)
3624 Cave[x-1][y] = Xacid_splash_w;
3625 Next[x][y] = Xblank;
3626 play_element_sound(x, y, SOUND_acid, Xacid_1);
3630 Cave[x][y] = Xdiamond;
3631 Next[x][y] = Xdiamond;
3636 static void Ldiamond_fall(int x, int y)
3638 switch (Cave[x][y+1])
3641 case Xacid_splash_e:
3642 case Xacid_splash_w:
3644 Cave[x][y] = Ydiamond_sB;
3645 Cave[x][y+1] = Ydiamond_s;
3646 Next[x][y] = Xblank;
3647 Next[x][y+1] = Xdiamond_fall;
3658 Cave[x][y] = Ydiamond_sB;
3659 if (Cave[x+1][y] == Xblank)
3660 Cave[x+1][y] = Xacid_splash_e;
3661 if (Cave[x-1][y] == Xblank)
3662 Cave[x-1][y] = Xacid_splash_w;
3663 Next[x][y] = Xblank;
3664 play_element_sound(x, y, SOUND_acid, Xacid_1);
3668 if (lev.wonderwall_time)
3670 lev.wonderwall_state = 1;
3671 Cave[x][y] = Ydiamond_sB;
3672 if (tab_blank[Cave[x][y+2]])
3674 Cave[x][y+2] = Ystone_s;
3675 Next[x][y+2] = Xstone_fall;
3678 Next[x][y] = Xblank;
3679 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
3684 Cave[x][y] = Xdiamond;
3685 Next[x][y] = Xdiamond;
3686 play_element_sound(x, y, SOUND_diamond, Xdiamond);
3691 static void Lstone(int x, int y)
3693 switch (Cave[x][y+1])
3696 case Xacid_splash_e:
3697 case Xacid_splash_w:
3700 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
3710 Cave[x][y] = Ystone_sB;
3711 Cave[x][y+1] = Ystone_s;
3712 Next[x][y] = Xblank;
3713 Next[x][y+1] = Xstone_fall;
3724 Cave[x][y] = Ystone_sB;
3725 if (Cave[x+1][y] == Xblank)
3726 Cave[x+1][y] = Xacid_splash_e;
3727 if (Cave[x-1][y] == Xblank)
3728 Cave[x-1][y] = Xacid_splash_w;
3729 Next[x][y] = Xblank;
3730 play_element_sound(x, y, SOUND_acid, Xacid_1);
3734 Cave[x][y] = Xsand_stonein_1;
3735 Cave[x][y+1] = Xsand_sandstone_1;
3736 Next[x][y] = Xsand_stonein_2;
3737 Next[x][y+1] = Xsand_sandstone_2;
3756 case Xemerald_pause:
3758 case Xdiamond_pause:
3788 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3790 Cave[x][y] = Ystone_eB;
3791 Cave[x+1][y] = Ystone_e;
3792 Next[x][y] = Xblank;
3793 Next[x+1][y] = Xstone_pause;
3797 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3799 Cave[x][y] = Ystone_wB;
3800 Cave[x-1][y] = Ystone_w;
3801 Next[x][y] = Xblank;
3802 Next[x-1][y] = Xstone_pause;
3808 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3810 Cave[x][y] = Ystone_wB;
3811 Cave[x-1][y] = Ystone_w;
3812 Next[x][y] = Xblank;
3813 Next[x-1][y] = Xstone_pause;
3817 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3819 Cave[x][y] = Ystone_eB;
3820 Cave[x+1][y] = Ystone_e;
3821 Next[x][y] = Xblank;
3822 Next[x+1][y] = Xstone_pause;
3829 static void Lstone_pause(int x, int y)
3831 switch (Cave[x][y+1])
3834 case Xacid_splash_e:
3835 case Xacid_splash_w:
3836 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
3846 Cave[x][y] = Ystone_sB;
3847 Cave[x][y+1] = Ystone_s;
3848 Next[x][y] = Xblank;
3849 Next[x][y+1] = Xstone_fall;
3860 Cave[x][y] = Ystone_sB;
3861 if (Cave[x+1][y] == Xblank)
3862 Cave[x+1][y] = Xacid_splash_e;
3863 if (Cave[x-1][y] == Xblank)
3864 Cave[x-1][y] = Xacid_splash_w;
3865 Next[x][y] = Xblank;
3866 play_element_sound(x, y, SOUND_acid, Xacid_1);
3870 Cave[x][y] = Xstone;
3871 Next[x][y] = Xstone;
3876 static void Lstone_fall(int x, int y)
3878 switch (Cave[x][y+1])
3881 case Xacid_splash_e:
3882 case Xacid_splash_w:
3884 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
3894 Cave[x][y] = Ystone_sB;
3895 Cave[x][y+1] = Ystone_s;
3896 Next[x][y] = Xblank;
3897 Next[x][y+1] = Xstone_fall;
3908 Cave[x][y] = Ystone_sB;
3909 if (Cave[x+1][y] == Xblank)
3910 Cave[x+1][y] = Xacid_splash_e;
3911 if (Cave[x-1][y] == Xblank)
3912 Cave[x-1][y] = Xacid_splash_w;
3913 Next[x][y] = Xblank;
3914 play_element_sound(x, y, SOUND_acid, Xacid_1);
3919 Cave[x][y+1] = Ynut_stone;
3920 Next[x][y] = Xstone;
3921 Next[x][y+1] = Xemerald;
3922 play_element_sound(x, y, SOUND_crack, Xnut);
3923 score += lev.nut_score;
3934 Cave[x][y] = Ystone_sB;
3935 Cave[x][y+1] = Ybug_stone;
3936 Next[x][y+1] = Znormal;
3937 Boom[x-1][y] = Xemerald;
3938 Boom[x][y] = Xemerald;
3939 Boom[x+1][y] = Xemerald;
3940 Boom[x-1][y+1] = Xemerald;
3941 Boom[x][y+1] = Xdiamond;
3942 Boom[x+1][y+1] = Xemerald;
3943 Boom[x-1][y+2] = Xemerald;
3944 Boom[x][y+2] = Xemerald;
3945 Boom[x+1][y+2] = Xemerald;
3946 #if PLAY_ELEMENT_SOUND
3947 play_element_sound(x, y, SOUND_boom, Xstone_fall);
3949 score += lev.bug_score;
3960 Cave[x][y] = Ystone_sB;
3961 Cave[x][y+1] = Ytank_stone;
3962 Next[x][y+1] = Znormal;
3963 Boom[x-1][y] = Xblank;
3964 Boom[x][y] = Xblank;
3965 Boom[x+1][y] = Xblank;
3966 Boom[x-1][y+1] = Xblank;
3967 Boom[x][y+1] = Xblank;
3968 Boom[x+1][y+1] = Xblank;
3969 Boom[x-1][y+2] = Xblank;
3970 Boom[x][y+2] = Xblank;
3971 Boom[x+1][y+2] = Xblank;
3972 #if PLAY_ELEMENT_SOUND
3973 play_element_sound(x, y, SOUND_boom, Xstone_fall);
3975 score += lev.tank_score;
3981 switch (Cave[x+1][y+1])
3984 case Xacid_splash_e:
3985 case Xacid_splash_w:
3988 Cave[x][y+1] = Xspring_e;
3992 Cave[x][y+1] = Xspring_w;
3998 switch (Cave[x-1][y+1])
4001 case Xacid_splash_e:
4002 case Xacid_splash_w:
4005 Cave[x][y+1] = Xspring_w;
4008 Cave[x][y+1] = Xspring_e;
4013 Next[x][y] = Xstone;
4020 Cave[x][y] = Ystone_sB;
4021 Cave[x][y+1] = Yeater_stone;
4022 Next[x][y+1] = Znormal;
4023 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
4024 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
4025 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
4026 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
4027 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
4028 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
4029 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
4030 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
4031 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
4032 #if PLAY_ELEMENT_SOUND
4033 play_element_sound(x, y, SOUND_boom, Xstone_fall);
4035 lev.eater_pos = (lev.eater_pos + 1) & 7;
4036 score += lev.eater_score;
4041 Cave[x][y] = Ystone_sB;
4042 Cave[x][y+1] = Yalien_stone;
4043 Next[x][y+1] = Znormal;
4044 Boom[x-1][y] = Xblank;
4045 Boom[x][y] = Xblank;
4046 Boom[x+1][y] = Xblank;
4047 Boom[x-1][y+1] = Xblank;
4048 Boom[x][y+1] = Xblank;
4049 Boom[x+1][y+1] = Xblank;
4050 Boom[x-1][y+2] = Xblank;
4051 Boom[x][y+2] = Xblank;
4052 Boom[x+1][y+2] = Xblank;
4053 #if PLAY_ELEMENT_SOUND
4054 play_element_sound(x, y, SOUND_boom, Xstone_fall);
4056 score += lev.alien_score;
4060 case Xdiamond_pause:
4061 switch (Cave[x][y+2])
4064 case Xacid_splash_e:
4065 case Xacid_splash_w:
4109 Next[x][y] = Xstone;
4110 play_element_sound(x, y, SOUND_stone, Xstone);
4114 Cave[x][y] = Ystone_sB;
4115 Cave[x][y+1] = Ydiamond_stone;
4116 Next[x][y] = Xblank;
4117 Next[x][y+1] = Xstone_pause;
4118 play_element_sound(x, y, SOUND_squash, Xdiamond);
4123 Cave[x][y+1] = Ybomb_blank;
4124 Next[x][y+1] = Znormal;
4125 Boom[x-1][y] = Xblank;
4126 Boom[x][y] = Xblank;
4127 Boom[x+1][y] = Xblank;
4128 Boom[x-1][y+1] = Xblank;
4129 Boom[x][y+1] = Xblank;
4130 Boom[x+1][y+1] = Xblank;
4131 Boom[x-1][y+2] = Xblank;
4132 Boom[x][y+2] = Xblank;
4133 Boom[x+1][y+2] = Xblank;
4134 #if PLAY_ELEMENT_SOUND
4135 play_element_sound(x, y, SOUND_boom, Xstone_fall);
4140 if (lev.wonderwall_time)
4142 lev.wonderwall_state = 1;
4143 Cave[x][y] = Ystone_sB;
4145 if (tab_blank[Cave[x][y+2]])
4147 Cave[x][y+2] = Yemerald_s;
4148 Next[x][y+2] = Xemerald_fall;
4151 Next[x][y] = Xblank;
4152 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
4157 Cave[x][y] = Xstone;
4158 Next[x][y] = Xstone;
4159 play_element_sound(x, y, SOUND_stone, Xstone);
4164 static void Lbomb(int x, int y)
4166 switch (Cave[x][y+1])
4169 case Xacid_splash_e:
4170 case Xacid_splash_w:
4171 Cave[x][y] = Ybomb_sB;
4172 Cave[x][y+1] = Ybomb_s;
4173 Next[x][y] = Xblank;
4174 Next[x][y+1] = Xbomb_fall;
4185 Cave[x][y] = Ybomb_sB;
4186 if (Cave[x+1][y] == Xblank)
4187 Cave[x+1][y] = Xacid_splash_e;
4188 if (Cave[x-1][y] == Xblank)
4189 Cave[x-1][y] = Xacid_splash_w;
4190 Next[x][y] = Xblank;
4191 play_element_sound(x, y, SOUND_acid, Xacid_1);
4210 case Xemerald_pause:
4212 case Xdiamond_pause:
4240 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4242 Cave[x][y] = Ybomb_eB;
4243 Cave[x+1][y] = Ybomb_e;
4244 Next[x][y] = Xblank;
4245 Next[x+1][y] = Xbomb_pause;
4249 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4251 Cave[x][y] = Ybomb_wB;
4252 Cave[x-1][y] = Ybomb_w;
4253 Next[x][y] = Xblank;
4254 Next[x-1][y] = Xbomb_pause;
4260 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4262 Cave[x][y] = Ybomb_wB;
4263 Cave[x-1][y] = Ybomb_w;
4264 Next[x][y] = Xblank;
4265 Next[x-1][y] = Xbomb_pause;
4269 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4271 Cave[x][y] = Ybomb_eB;
4272 Cave[x+1][y] = Ybomb_e;
4273 Next[x][y] = Xblank;
4274 Next[x+1][y] = Xbomb_pause;
4281 static void Lbomb_pause(int x, int y)
4283 switch (Cave[x][y+1])
4286 case Xacid_splash_e:
4287 case Xacid_splash_w:
4288 Cave[x][y] = Ybomb_sB;
4289 Cave[x][y+1] = Ybomb_s;
4290 Next[x][y] = Xblank;
4291 Next[x][y+1] = Xbomb_fall;
4302 Cave[x][y] = Ybomb_sB;
4303 if (Cave[x+1][y] == Xblank)
4304 Cave[x+1][y] = Xacid_splash_e;
4305 if (Cave[x-1][y] == Xblank)
4306 Cave[x-1][y] = Xacid_splash_w;
4307 Next[x][y] = Xblank;
4308 play_element_sound(x, y, SOUND_acid, Xacid_1);
4318 static void Lbomb_fall(int x, int y)
4320 switch (Cave[x][y+1])
4323 case Xacid_splash_e:
4324 case Xacid_splash_w:
4325 Cave[x][y] = Ybomb_sB;
4326 Cave[x][y+1] = Ybomb_s;
4327 Next[x][y] = Xblank;
4328 Next[x][y+1] = Xbomb_fall;
4339 Cave[x][y] = Ybomb_sB;
4340 if (Cave[x+1][y] == Xblank)
4341 Cave[x+1][y] = Xacid_splash_e;
4342 if (Cave[x-1][y] == Xblank)
4343 Cave[x-1][y] = Xacid_splash_w;
4344 Next[x][y] = Xblank;
4345 play_element_sound(x, y, SOUND_acid, Xacid_1);
4349 Cave[x][y] = Ybomb_blank;
4350 Next[x][y] = Znormal;
4351 Boom[x-1][y-1] = Xblank;
4352 Boom[x][y-1] = Xblank;
4353 Boom[x+1][y-1] = Xblank;
4354 Boom[x-1][y] = Xblank;
4355 Boom[x][y] = Xblank;
4356 Boom[x+1][y] = Xblank;
4357 Boom[x-1][y+1] = Xblank;
4358 Boom[x][y+1] = Xblank;
4359 Boom[x+1][y+1] = Xblank;
4360 #if PLAY_ELEMENT_SOUND
4361 play_element_sound(x, y, SOUND_boom, Xbomb_fall);
4367 static void Lnut(int x, int y)
4369 switch (Cave[x][y+1])
4372 case Xacid_splash_e:
4373 case Xacid_splash_w:
4374 Cave[x][y] = Ynut_sB;
4375 Cave[x][y+1] = Ynut_s;
4376 Next[x][y] = Xblank;
4377 Next[x][y+1] = Xnut_fall;
4388 Cave[x][y] = Ynut_sB;
4389 if (Cave[x+1][y] == Xblank)
4390 Cave[x+1][y] = Xacid_splash_e;
4391 if (Cave[x-1][y] == Xblank)
4392 Cave[x-1][y] = Xacid_splash_w;
4393 Next[x][y] = Xblank;
4394 play_element_sound(x, y, SOUND_acid, Xacid_1);
4413 case Xemerald_pause:
4415 case Xdiamond_pause:
4443 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4445 Cave[x][y] = Ynut_eB;
4446 Cave[x+1][y] = Ynut_e;
4447 Next[x][y] = Xblank;
4448 Next[x+1][y] = Xnut_pause;
4452 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4454 Cave[x][y] = Ynut_wB;
4455 Cave[x-1][y] = Ynut_w;
4456 Next[x][y] = Xblank;
4457 Next[x-1][y] = Xnut_pause;
4463 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4465 Cave[x][y] = Ynut_wB;
4466 Cave[x-1][y] = Ynut_w;
4467 Next[x][y] = Xblank;
4468 Next[x-1][y] = Xnut_pause;
4472 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4474 Cave[x][y] = Ynut_eB;
4475 Cave[x+1][y] = Ynut_e;
4476 Next[x][y] = Xblank;
4477 Next[x+1][y] = Xnut_pause;
4484 static void Lnut_pause(int x, int y)
4486 switch (Cave[x][y+1])
4489 case Xacid_splash_e:
4490 case Xacid_splash_w:
4491 Cave[x][y] = Ynut_sB;
4492 Cave[x][y+1] = Ynut_s;
4493 Next[x][y] = Xblank;
4494 Next[x][y+1] = Xnut_fall;
4505 Cave[x][y] = Ynut_sB;
4506 if (Cave[x+1][y] == Xblank)
4507 Cave[x+1][y] = Xacid_splash_e;
4508 if (Cave[x-1][y] == Xblank)
4509 Cave[x-1][y] = Xacid_splash_w;
4510 Next[x][y] = Xblank;
4511 play_element_sound(x, y, SOUND_acid, Xacid_1);
4521 static void Lnut_fall(int x, int y)
4523 switch (Cave[x][y+1])
4526 case Xacid_splash_e:
4527 case Xacid_splash_w:
4529 Cave[x][y] = Ynut_sB;
4530 Cave[x][y+1] = Ynut_s;
4531 Next[x][y] = Xblank;
4532 Next[x][y+1] = Xnut_fall;
4543 Cave[x][y] = Ynut_sB;
4544 if (Cave[x+1][y] == Xblank)
4545 Cave[x+1][y] = Xacid_splash_e;
4546 if (Cave[x-1][y] == Xblank)
4547 Cave[x-1][y] = Xacid_splash_w;
4548 Next[x][y] = Xblank;
4549 play_element_sound(x, y, SOUND_acid, Xacid_1);
4555 play_element_sound(x, y, SOUND_nut, Xnut);
4560 static void Lspring(int x, int y)
4562 switch (Cave[x][y+1])
4565 case Xacid_splash_e:
4566 case Xacid_splash_w:
4569 Cave[x][y] = Yspring_sB;
4570 Cave[x][y+1] = Yspring_s;
4571 Next[x][y] = Xblank;
4572 Next[x][y+1] = Xspring_fall;
4583 Cave[x][y] = Yspring_sB;
4584 if (Cave[x+1][y] == Xblank)
4585 Cave[x+1][y] = Xacid_splash_e;
4586 if (Cave[x-1][y] == Xblank)
4587 Cave[x-1][y] = Xacid_splash_w;
4588 Next[x][y] = Xblank;
4589 play_element_sound(x, y, SOUND_acid, Xacid_1);
4608 case Xemerald_pause:
4610 case Xdiamond_pause:
4638 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4640 Cave[x][y] = Yspring_eB;
4641 Cave[x+1][y] = Yspring_e;
4642 if (Cave[x][y+1] == Xbumper)
4643 Cave[x][y+1] = XbumperB;
4644 Next[x][y] = Xblank;
4647 Next[x+1][y] = Xspring_e;
4649 Next[x+1][y] = Xspring_pause;
4654 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4656 Cave[x][y] = Yspring_wB;
4657 Cave[x-1][y] = Yspring_w;
4658 if (Cave[x][y+1] == Xbumper)
4659 Cave[x][y+1] = XbumperB;
4660 Next[x][y] = Xblank;
4663 Next[x-1][y] = Xspring_w;
4665 Next[x-1][y] = Xspring_pause;
4672 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
4674 Cave[x][y] = Yspring_wB;
4675 Cave[x-1][y] = Yspring_w;
4676 if (Cave[x][y+1] == Xbumper)
4677 Cave[x][y+1] = XbumperB;
4678 Next[x][y] = Xblank;
4681 Next[x-1][y] = Xspring_w;
4683 Next[x-1][y] = Xspring_pause;
4688 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
4690 Cave[x][y] = Yspring_eB;
4691 Cave[x+1][y] = Yspring_e;
4692 if (Cave[x][y+1] == Xbumper)
4693 Cave[x][y+1] = XbumperB;
4694 Next[x][y] = Xblank;
4697 Next[x+1][y] = Xspring_e;
4699 Next[x+1][y] = Xspring_pause;
4707 static void Lspring_pause(int x, int y)
4709 switch (Cave[x][y+1])
4712 case Xacid_splash_e:
4713 case Xacid_splash_w:
4714 Cave[x][y] = Yspring_sB;
4715 Cave[x][y+1] = Yspring_s;
4716 Next[x][y] = Xblank;
4717 Next[x][y+1] = Xspring_fall;
4728 Cave[x][y] = Yspring_sB;
4729 if (Cave[x+1][y] == Xblank)
4730 Cave[x+1][y] = Xacid_splash_e;
4731 if (Cave[x-1][y] == Xblank)
4732 Cave[x-1][y] = Xacid_splash_w;
4733 Next[x][y] = Xblank;
4734 play_element_sound(x, y, SOUND_acid, Xacid_1);
4738 Cave[x][y] = Xspring;
4739 Next[x][y] = Xspring;
4744 static void Lspring_e(int x, int y)
4746 switch (Cave[x][y+1])
4749 case Xacid_splash_e:
4750 case Xacid_splash_w:
4751 Cave[x][y] = Yspring_sB;
4752 Cave[x][y+1] = Yspring_s;
4753 Next[x][y] = Xblank;
4754 Next[x][y+1] = Xspring_fall;
4765 Cave[x][y] = Yspring_sB;
4766 if (Cave[x+1][y] == Xblank)
4767 Cave[x+1][y] = Xacid_splash_e;
4768 if (Cave[x-1][y] == Xblank)
4769 Cave[x-1][y] = Xacid_splash_w;
4770 Next[x][y] = Xblank;
4771 play_element_sound(x, y, SOUND_acid, Xacid_1);
4775 Cave[x][y+1] = XbumperB;
4778 switch (Cave[x+1][y])
4781 case Xacid_splash_e:
4782 case Xacid_splash_w:
4787 Cave[x][y] = Yspring_eB;
4788 Cave[x+1][y] = Yspring_e;
4789 Next[x][y] = Xblank;
4790 Next[x+1][y] = Xspring_e;
4801 Cave[x][y] = Yspring_eB;
4802 if (Cave[x+2][y-1] == Xblank)
4803 Cave[x+2][y-1] = Xacid_splash_e;
4804 if (Cave[x][y-1] == Xblank)
4805 Cave[x][y-1] = Xacid_splash_w;
4806 Next[x][y] = Xblank;
4807 play_element_sound(x, y, SOUND_acid, Xacid_1);
4816 Cave[x][y] = Yspring_alien_eB;
4817 Cave[x+1][y] = Yspring_alien_e;
4818 Next[x][y] = Xblank;
4819 Next[x+1][y] = Xspring_e;
4820 play_element_sound(x, y, SOUND_slurp, Xalien);
4821 score += lev.slurp_score;
4826 Cave[x+1][y] = XbumperB;
4827 Next[x][y] = Xspring_w;
4828 play_element_sound(x, y, SOUND_spring, Xspring);
4832 Cave[x][y] = Xspring;
4833 Next[x][y] = Xspring;
4834 play_element_sound(x, y, SOUND_spring, Xspring);
4839 static void Lspring_w(int x, int y)
4841 switch (Cave[x][y+1])
4844 case Xacid_splash_e:
4845 case Xacid_splash_w:
4846 Cave[x][y] = Yspring_sB;
4847 Cave[x][y+1] = Yspring_s;
4848 Next[x][y] = Xblank;
4849 Next[x][y+1] = Xspring_fall;
4860 Cave[x][y] = Yspring_sB;
4861 if (Cave[x+1][y] == Xblank)
4862 Cave[x+1][y] = Xacid_splash_e;
4863 if (Cave[x-1][y] == Xblank)
4864 Cave[x-1][y] = Xacid_splash_w;
4865 Next[x][y] = Xblank;
4866 play_element_sound(x, y, SOUND_acid, Xacid_1);
4870 Cave[x][y+1] = XbumperB;
4873 switch (Cave[x-1][y])
4876 case Xacid_splash_e:
4877 case Xacid_splash_w:
4882 Cave[x][y] = Yspring_wB;
4883 Cave[x-1][y] = Yspring_w;
4884 Next[x][y] = Xblank;
4885 Next[x-1][y] = Xspring_w;
4896 Cave[x][y] = Yspring_wB;
4897 if (Cave[x][y-1] == Xblank)
4898 Cave[x][y-1] = Xacid_splash_e;
4899 if (Cave[x-2][y-1] == Xblank)
4900 Cave[x-2][y-1] = Xacid_splash_w;
4901 Next[x][y] = Xblank;
4902 play_element_sound(x, y, SOUND_acid, Xacid_1);
4911 Cave[x][y] = Yspring_alien_wB;
4912 Cave[x-1][y] = Yspring_alien_w;
4913 Next[x][y] = Xblank;
4914 Next[x-1][y] = Xspring_w;
4915 play_element_sound(x, y, SOUND_slurp, Xalien);
4916 score += lev.slurp_score;
4921 Cave[x-1][y] = XbumperB;
4922 Next[x][y] = Xspring_e;
4923 play_element_sound(x, y, SOUND_spring, Xspring);
4927 Cave[x][y] = Xspring;
4928 Next[x][y] = Xspring;
4929 play_element_sound(x, y, SOUND_spring, Xspring);
4934 static void Lspring_fall(int x, int y)
4936 switch (Cave[x][y+1])
4939 case Xacid_splash_e:
4940 case Xacid_splash_w:
4942 Cave[x][y] = Yspring_sB;
4943 Cave[x][y+1] = Yspring_s;
4944 Next[x][y] = Xblank;
4945 Next[x][y+1] = Xspring_fall;
4956 Cave[x][y] = Yspring_sB;
4957 if (Cave[x+1][y] == Xblank)
4958 Cave[x+1][y] = Xacid_splash_e;
4959 if (Cave[x-1][y] == Xblank)
4960 Cave[x-1][y] = Xacid_splash_w;
4961 Next[x][y] = Xblank;
4962 play_element_sound(x, y, SOUND_acid, Xacid_1);
4967 Cave[x][y+1] = Ybomb_blank;
4968 Next[x][y+1] = Znormal;
4969 Boom[x-1][y] = Xblank;
4970 Boom[x][y] = Xblank;
4971 Boom[x+1][y] = Xblank;
4972 Boom[x-1][y+1] = Xblank;
4973 Boom[x][y+1] = Xblank;
4974 Boom[x+1][y+1] = Xblank;
4975 Boom[x-1][y+2] = Xblank;
4976 Boom[x][y+2] = Xblank;
4977 Boom[x+1][y+2] = Xblank;
4978 #if PLAY_ELEMENT_SOUND
4979 play_element_sound(x, y, SOUND_boom, Xspring_fall);
4991 Cave[x][y] = Yspring_sB;
4992 Cave[x][y+1] = Ybug_spring;
4993 Next[x][y+1] = Znormal;
4994 Boom[x-1][y] = Xemerald;
4995 Boom[x][y] = Xemerald;
4996 Boom[x+1][y] = Xemerald;
4997 Boom[x-1][y+1] = Xemerald;
4998 Boom[x][y+1] = Xdiamond;
4999 Boom[x+1][y+1] = Xemerald;
5000 Boom[x-1][y+2] = Xemerald;
5001 Boom[x][y+2] = Xemerald;
5002 Boom[x+1][y+2] = Xemerald;
5003 #if PLAY_ELEMENT_SOUND
5004 play_element_sound(x, y, SOUND_boom, Xspring_fall);
5006 score += lev.bug_score;
5017 Cave[x][y] = Yspring_sB;
5018 Cave[x][y+1] = Ytank_spring;
5019 Next[x][y+1] = Znormal;
5020 Boom[x-1][y] = Xblank;
5021 Boom[x][y] = Xblank;
5022 Boom[x+1][y] = Xblank;
5023 Boom[x-1][y+1] = Xblank;
5024 Boom[x][y+1] = Xblank;
5025 Boom[x+1][y+1] = Xblank;
5026 Boom[x-1][y+2] = Xblank;
5027 Boom[x][y+2] = Xblank;
5028 Boom[x+1][y+2] = Xblank;
5029 #if PLAY_ELEMENT_SOUND
5030 play_element_sound(x, y, SOUND_boom, Xspring_fall);
5032 score += lev.tank_score;
5039 Cave[x][y] = Yspring_sB;
5040 Cave[x][y+1] = Yeater_spring;
5041 Next[x][y+1] = Znormal;
5042 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
5043 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
5044 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
5045 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
5046 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
5047 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
5048 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
5049 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
5050 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
5051 #if PLAY_ELEMENT_SOUND
5052 play_element_sound(x, y, SOUND_boom, Xspring_fall);
5054 lev.eater_pos = (lev.eater_pos + 1) & 7;
5055 score += lev.eater_score;
5060 Cave[x][y] = Yspring_sB;
5061 Cave[x][y+1] = Yalien_spring;
5062 Next[x][y+1] = Znormal;
5063 Boom[x-1][y] = Xblank;
5064 Boom[x][y] = Xblank;
5065 Boom[x+1][y] = Xblank;
5066 Boom[x-1][y+1] = Xblank;
5067 Boom[x][y+1] = Xblank;
5068 Boom[x+1][y+1] = Xblank;
5069 Boom[x-1][y+2] = Xblank;
5070 Boom[x][y+2] = Xblank;
5071 Boom[x+1][y+2] = Xblank;
5072 #if PLAY_ELEMENT_SOUND
5073 play_element_sound(x, y, SOUND_boom, Xspring_fall);
5075 score += lev.alien_score;
5079 Cave[x][y] = Xspring;
5080 Next[x][y] = Xspring;
5081 play_element_sound(x, y, SOUND_spring, Xspring);
5086 static void Lpush_emerald_e(int x, int y)
5088 switch (Cave[x+1][y])
5098 Cave[x][y] = Xemerald;
5099 Next[x][y] = Xemerald;
5103 Cave[x][y] = Yemerald_eB;
5104 Cave[x+1][y] = Yemerald_e;
5105 Next[x][y] = Xblank;
5106 Next[x+1][y] = Xemerald_pause;
5111 static void Lpush_emerald_w(int x, int y)
5113 switch (Cave[x-1][y])
5123 Cave[x][y] = Xemerald;
5124 Next[x][y] = Xemerald;
5128 Cave[x][y] = Yemerald_wB;
5129 Cave[x-1][y] = Yemerald_w;
5130 Next[x][y] = Xblank;
5131 Next[x-1][y] = Xemerald_pause;
5136 static void Lpush_diamond_e(int x, int y)
5138 switch (Cave[x+1][y])
5148 Cave[x][y] = Xdiamond;
5149 Next[x][y] = Xdiamond;
5153 Cave[x][y] = Ydiamond_eB;
5154 Cave[x+1][y] = Ydiamond_e;
5155 Next[x][y] = Xblank;
5156 Next[x+1][y] = Xdiamond_pause;
5161 static void Lpush_diamond_w(int x, int y)
5163 switch (Cave[x-1][y])
5173 Cave[x][y] = Xdiamond;
5174 Next[x][y] = Xdiamond;
5178 Cave[x][y] = Ydiamond_wB;
5179 Cave[x-1][y] = Ydiamond_w;
5180 Next[x][y] = Xblank;
5181 Next[x-1][y] = Xdiamond_pause;
5186 static void Lpush_stone_e(int x, int y)
5188 switch (Cave[x+1][y])
5198 Cave[x][y] = Xstone;
5199 Next[x][y] = Xstone;
5203 Cave[x][y] = Ystone_eB;
5204 Cave[x+1][y] = Ystone_e;
5205 Next[x][y] = Xblank;
5206 Next[x+1][y] = Xstone_pause;
5211 static void Lpush_stone_w(int x, int y)
5213 switch (Cave[x-1][y])
5223 Cave[x][y] = Xstone;
5224 Next[x][y] = Xstone;
5228 Cave[x][y] = Ystone_wB;
5229 Cave[x-1][y] = Ystone_w;
5230 Next[x][y] = Xblank;
5231 Next[x-1][y] = Xstone_pause;
5236 static void Lpush_bomb_e(int x, int y)
5238 switch (Cave[x+1][y])
5253 Cave[x][y] = Ybomb_eB;
5254 Cave[x+1][y] = Ybomb_e;
5255 Next[x][y] = Xblank;
5256 Next[x+1][y] = Xbomb_pause;
5261 static void Lpush_bomb_w(int x, int y)
5263 switch (Cave[x-1][y])
5278 Cave[x][y] = Ybomb_wB;
5279 Cave[x-1][y] = Ybomb_w;
5280 Next[x][y] = Xblank;
5281 Next[x-1][y] = Xbomb_pause;
5286 static void Lpush_nut_e(int x, int y)
5288 switch (Cave[x+1][y])
5303 Cave[x][y] = Ynut_eB;
5304 Cave[x+1][y] = Ynut_e;
5305 Next[x][y] = Xblank;
5306 Next[x+1][y] = Xnut_pause;
5311 static void Lpush_nut_w(int x, int y)
5313 switch (Cave[x-1][y])
5328 Cave[x][y] = Ynut_wB;
5329 Cave[x-1][y] = Ynut_w;
5330 Next[x][y] = Xblank;
5331 Next[x-1][y] = Xnut_pause;
5336 static void Lpush_spring_e(int x, int y)
5338 switch (Cave[x+1][y])
5348 Cave[x][y] = Xspring;
5349 Next[x][y] = Xspring;
5353 Cave[x][y] = Yspring_eB;
5354 Cave[x+1][y] = Yspring_e;
5355 Next[x][y] = Xblank;
5356 Next[x+1][y] = Xspring_e;
5361 static void Lpush_spring_w(int x, int y)
5363 switch (Cave[x-1][y])
5373 Cave[x][y] = Xspring;
5374 Next[x][y] = Xspring;
5378 Cave[x][y] = Yspring_wB;
5379 Cave[x-1][y] = Yspring_w;
5380 Next[x][y] = Xblank;
5381 Next[x-1][y] = Xspring_w;
5386 static void Ldynamite_1(int x, int y)
5388 play_element_sound(x, y, SOUND_tick, Xdynamite_1);
5389 Next[x][y] = Xdynamite_2;
5392 static void Ldynamite_2(int x, int y)
5394 play_element_sound(x, y, SOUND_tick, Xdynamite_2);
5395 Next[x][y] = Xdynamite_3;
5398 static void Ldynamite_3(int x, int y)
5400 play_element_sound(x, y, SOUND_tick, Xdynamite_3);
5401 Next[x][y] = Xdynamite_4;
5404 static void Ldynamite_4(int x, int y)
5406 play_element_sound(x, y, SOUND_tick, Xdynamite_4);
5407 Next[x][y] = Zdynamite;
5408 Boom[x-1][y-1] = Xblank;
5409 Boom[x][y-1] = Xblank;
5410 Boom[x+1][y-1] = Xblank;
5411 Boom[x-1][y] = Xblank;
5412 Boom[x][y] = Xblank;
5413 Boom[x+1][y] = Xblank;
5414 Boom[x-1][y+1] = Xblank;
5415 Boom[x][y+1] = Xblank;
5416 Boom[x+1][y+1] = Xblank;
5419 static void Lfake_door_1(int x, int y)
5421 if (lev.magnify_cnt)
5422 Cave[x][y] = Xdoor_1;
5425 static void Lfake_door_2(int x, int y)
5427 if (lev.magnify_cnt)
5428 Cave[x][y] = Xdoor_2;
5431 static void Lfake_door_3(int x, int y)
5433 if (lev.magnify_cnt)
5434 Cave[x][y] = Xdoor_3;
5437 static void Lfake_door_4(int x, int y)
5439 if (lev.magnify_cnt)
5440 Cave[x][y] = Xdoor_4;
5443 static void Lfake_door_5(int x, int y)
5445 if (lev.magnify_cnt)
5446 Cave[x][y] = Xdoor_5;
5449 static void Lfake_door_6(int x, int y)
5451 if (lev.magnify_cnt)
5452 Cave[x][y] = Xdoor_6;
5455 static void Lfake_door_7(int x, int y)
5457 if (lev.magnify_cnt)
5458 Cave[x][y] = Xdoor_7;
5461 static void Lfake_door_8(int x, int y)
5463 if (lev.magnify_cnt)
5464 Cave[x][y] = Xdoor_8;
5467 static void Lballoon(int x, int y)
5469 if (lev.wind_cnt == 0)
5472 switch (lev.wind_direction)
5475 switch (Cave[x][y-1])
5478 case Xacid_splash_e:
5479 case Xacid_splash_w:
5480 Cave[x][y] = Yballoon_nB;
5481 Cave[x][y-1] = Yballoon_n;
5482 Next[x][y] = Xblank;
5483 Next[x][y-1] = Xballoon;
5494 Cave[x][y] = Yballoon_nB;
5495 if (Cave[x+1][y-2] == Xblank)
5496 Cave[x+1][y-2] = Xacid_splash_e;
5497 if (Cave[x-1][y-2] == Xblank)
5498 Cave[x-1][y-2] = Xacid_splash_w;
5499 Next[x][y] = Xblank;
5500 play_element_sound(x, y, SOUND_acid, Xacid_1);
5506 switch (Cave[x+1][y])
5509 case Xacid_splash_e:
5510 case Xacid_splash_w:
5511 Cave[x][y] = Yballoon_eB;
5512 Cave[x+1][y] = Yballoon_e;
5513 Next[x][y] = Xblank;
5514 Next[x+1][y] = Xballoon;
5525 Cave[x][y] = Yballoon_eB;
5526 if (Cave[x+2][y-1] == Xblank)
5527 Cave[x+2][y-1] = Xacid_splash_e;
5528 if (Cave[x][y-1] == Xblank)
5529 Cave[x][y-1] = Xacid_splash_w;
5530 Next[x][y] = Xblank;
5531 play_element_sound(x, y, SOUND_acid, Xacid_1);
5537 switch (Cave[x][y+1])
5540 case Xacid_splash_e:
5541 case Xacid_splash_w:
5542 Cave[x][y] = Yballoon_sB;
5543 Cave[x][y+1] = Yballoon_s;
5544 Next[x][y] = Xblank;
5545 Next[x][y+1] = Xballoon;
5556 Cave[x][y] = Yballoon_sB;
5557 if (Cave[x+1][y] == Xblank)
5558 Cave[x+1][y] = Xacid_splash_e;
5559 if (Cave[x-1][y] == Xblank)
5560 Cave[x-1][y] = Xacid_splash_w;
5561 Next[x][y] = Xblank;
5562 play_element_sound(x, y, SOUND_acid, Xacid_1);
5568 switch (Cave[x-1][y])
5571 case Xacid_splash_e:
5572 case Xacid_splash_w:
5573 Cave[x][y] = Yballoon_wB;
5574 Cave[x-1][y] = Yballoon_w;
5575 Next[x][y] = Xblank;
5576 Next[x-1][y] = Xballoon;
5587 Cave[x][y] = Yballoon_wB;
5588 if (Cave[x][y-1] == Xblank)
5589 Cave[x][y-1] = Xacid_splash_e;
5590 if (Cave[x-2][y-1] == Xblank)
5591 Cave[x-2][y-1] = Xacid_splash_w;
5592 Next[x][y] = Xblank;
5593 play_element_sound(x, y, SOUND_acid, Xacid_1);
5600 static void Lball_common(int x, int y)
5602 play_element_sound(x, y, SOUND_ball, Xball_1);
5604 if (lev.ball_random)
5609 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
5610 tab_blank[Cave[x-1][y-1]])
5612 Cave[x-1][y-1] = Yball_blank;
5613 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
5618 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
5619 tab_blank[Cave[x][y-1]])
5621 Cave[x][y-1] = Yball_blank;
5622 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
5627 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
5628 tab_blank[Cave[x+1][y-1]])
5630 Cave[x+1][y-1] = Yball_blank;
5631 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
5636 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
5637 tab_blank[Cave[x-1][y]])
5639 Cave[x-1][y] = Yball_blank;
5640 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
5645 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
5646 tab_blank[Cave[x+1][y]])
5648 Cave[x+1][y] = Yball_blank;
5649 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
5654 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
5655 tab_blank[Cave[x-1][y+1]])
5657 Cave[x-1][y+1] = Yball_blank;
5658 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
5663 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
5664 tab_blank[Cave[x][y+1]])
5666 Cave[x][y+1] = Yball_blank;
5667 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
5672 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
5673 tab_blank[Cave[x+1][y+1]])
5675 Cave[x+1][y+1] = Yball_blank;
5676 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
5683 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
5684 tab_blank[Cave[x-1][y-1]])
5686 Cave[x-1][y-1] = Yball_blank;
5687 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
5690 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
5691 tab_blank[Cave[x][y-1]])
5693 Cave[x][y-1] = Yball_blank;
5694 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
5697 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
5698 tab_blank[Cave[x+1][y-1]])
5700 Cave[x+1][y-1] = Yball_blank;
5701 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
5704 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
5705 tab_blank[Cave[x-1][y]])
5707 Cave[x-1][y] = Yball_blank;
5708 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
5711 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
5712 tab_blank[Cave[x+1][y]])
5714 Cave[x+1][y] = Yball_blank;
5715 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
5718 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
5719 tab_blank[Cave[x-1][y+1]])
5721 Cave[x-1][y+1] = Yball_blank;
5722 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
5725 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
5726 tab_blank[Cave[x][y+1]])
5728 Cave[x][y+1] = Yball_blank;
5729 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
5732 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
5733 tab_blank[Cave[x+1][y+1]])
5735 Cave[x+1][y+1] = Yball_blank;
5736 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
5740 lev.ball_pos = (lev.ball_pos + 1) % lev.num_ball_arrays;
5743 static void Lball_1(int x, int y)
5745 if (lev.ball_state == 0)
5748 Cave[x][y] = Yball_1;
5749 Next[x][y] = Xball_2;
5756 static void Lball_2(int x, int y)
5758 if (lev.ball_state == 0)
5761 Cave[x][y] = Yball_2;
5762 Next[x][y] = Xball_1;
5769 static void Ldrip(int x, int y)
5771 Next[x][y] = Xdrip_fall;
5774 static void Ldrip_fall(int x, int y)
5778 switch (Cave[x][y+1])
5781 case Xacid_splash_e:
5782 case Xacid_splash_w:
5786 Cave[x][y] = Ydrip_1_sB;
5787 Cave[x][y+1] = Ydrip_1_s;
5788 Next[x][y] = Xdrip_stretchB;
5789 Next[x][y+1] = Xdrip_stretch;
5800 Cave[x][y] = Ydrip_1_sB;
5801 if (Cave[x+1][y] == Xblank)
5802 Cave[x+1][y] = Xacid_splash_e;
5803 if (Cave[x-1][y] == Xblank)
5804 Cave[x-1][y] = Xacid_splash_w;
5805 Next[x][y] = Xdrip_stretchB;
5806 play_element_sound(x, y, SOUND_acid, Xacid_1);
5812 case 0: temp = Xamoeba_1; break;
5813 case 1: temp = Xamoeba_2; break;
5814 case 2: temp = Xamoeba_3; break;
5815 case 3: temp = Xamoeba_4; break;
5816 case 4: temp = Xamoeba_5; break;
5817 case 5: temp = Xamoeba_6; break;
5818 case 6: temp = Xamoeba_7; break;
5819 case 7: temp = Xamoeba_8; break;
5824 play_element_sound(x, y, SOUND_drip, Xdrip_fall);
5829 static void Ldrip_stretch(int x, int y)
5831 Cave[x][y] = Ydrip_2_s;
5832 Next[x][y] = Xdrip_fall;
5835 static void Ldrip_stretchB(int x, int y)
5837 Cave[x][y] = Ydrip_2_sB;
5838 Next[x][y] = Xblank;
5841 static void Lwonderwall(int x, int y)
5843 if (lev.wonderwall_time && lev.wonderwall_state)
5845 Cave[x][y] = XwonderwallB;
5846 play_element_sound(x, y, SOUND_wonder, Xwonderwall);
5850 static void Lwheel(int x, int y)
5852 if (lev.wheel_cnt && x == lev.wheel_x && y == lev.wheel_y)
5853 Cave[x][y] = XwheelB;
5856 static void Lswitch(int x, int y)
5859 Cave[x][y] = XswitchB;
5862 static void Lfake_blank(int x, int y)
5865 Cave[x][y] = Xfake_blankB;
5868 static void Lfake_grass(int x, int y)
5870 if (lev.magnify_cnt)
5871 Cave[x][y] = Xfake_grassB;
5874 static void Lfake_amoeba(int x, int y)
5877 Cave[x][y] = Xfake_amoebaB;
5880 static void Lsand_stone(int x, int y)
5882 switch (Cave[x][y+1])
5885 case Xacid_splash_e:
5886 case Xacid_splash_w:
5887 Cave[x][y] = Xsand_stonesand_quickout_1;
5888 Cave[x][y+1] = Xsand_stoneout_1;
5889 Next[x][y] = Xsand_stonesand_quickout_2;
5890 Next[x][y+1] = Xsand_stoneout_2;
5901 Cave[x][y] = Xsand_stonesand_quickout_1;
5902 if (Cave[x+1][y] == Xblank)
5903 Cave[x+1][y] = Xacid_splash_e;
5904 if (Cave[x-1][y] == Xblank)
5905 Cave[x-1][y] = Xacid_splash_w;
5906 Next[x][y] = Xsand_stonesand_quickout_2;
5907 play_element_sound(x, y, SOUND_acid, Xacid_1);
5911 Cave[x][y] = Xsand_stonesand_1;
5912 Cave[x][y+1] = Xsand_sandstone_1;
5913 Next[x][y] = Xsand_stonesand_2;
5914 Next[x][y+1] = Xsand_sandstone_2;
5919 static void Lsand_stonein_1(int x, int y)
5921 Next[x][y] = Xsand_stonein_2;
5924 static void Lsand_stonein_2(int x, int y)
5926 Next[x][y] = Xsand_stonein_3;
5929 static void Lsand_stonein_3(int x, int y)
5931 Next[x][y] = Xsand_stonein_4;
5934 static void Lsand_stonein_4(int x, int y)
5936 Next[x][y] = Xblank;
5939 static void Lsand_sandstone_1(int x, int y)
5941 Next[x][y] = Xsand_sandstone_2;
5944 static void Lsand_sandstone_2(int x, int y)
5946 Next[x][y] = Xsand_sandstone_3;
5949 static void Lsand_sandstone_3(int x, int y)
5951 Next[x][y] = Xsand_sandstone_4;
5954 static void Lsand_sandstone_4(int x, int y)
5956 Next[x][y] = Xsand_stone;
5959 static void Lsand_stonesand_1(int x, int y)
5961 Next[x][y] = Xsand_stonesand_2;
5964 static void Lsand_stonesand_2(int x, int y)
5966 Next[x][y] = Xsand_stonesand_3;
5969 static void Lsand_stonesand_3(int x, int y)
5971 Next[x][y] = Xsand_stonesand_4;
5974 static void Lsand_stonesand_4(int x, int y)
5979 static void Lsand_stoneout_1(int x, int y)
5981 Next[x][y] = Xsand_stoneout_2;
5984 static void Lsand_stoneout_2(int x, int y)
5986 Next[x][y] = Xstone_fall;
5989 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
5990 static void Lsand_stonesand_quickout_1(int x, int y)
5992 Next[x][y] = Xsand_stonesand_quickout_2;
5995 static void Lsand_stonesand_quickout_2(int x, int y)
6001 static void Lslidewall_ns(int x, int y)
6003 if (tab_blank[Cave[x][y-1]])
6005 Cave[x][y-1] = Yslidewall_ns_blank;
6006 Next[x][y-1] = Xslidewall_ns;
6007 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
6010 if (tab_blank[Cave[x][y+1]])
6012 Cave[x][y+1] = Yslidewall_ns_blank;
6013 Next[x][y+1] = Xslidewall_ns;
6014 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
6018 static void Lslidewall_ew(int x, int y)
6020 if (tab_blank[Cave[x+1][y]])
6022 Cave[x+1][y] = Yslidewall_ew_blank;
6023 Next[x+1][y] = Xslidewall_ew;
6024 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
6027 if (tab_blank[Cave[x-1][y]])
6029 Cave[x-1][y] = Yslidewall_ew_blank;
6030 Next[x-1][y] = Xslidewall_ew;
6031 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
6035 static void Lexit(int x, int y)
6037 if (lev.required > 0)
6040 switch (RANDOM(64) / 21)
6043 Cave[x][y] = Xexit_1;
6044 Next[x][y] = Xexit_2;
6048 Cave[x][y] = Xexit_2;
6049 Next[x][y] = Xexit_3;
6053 Cave[x][y] = Xexit_3;
6054 Next[x][y] = Xexit_1;
6058 play_element_sound(x, y, SOUND_exit_open, Xexit);
6061 static void Lexit_1(int x, int y)
6063 Next[x][y] = Xexit_2;
6066 static void Lexit_2(int x, int y)
6068 Next[x][y] = Xexit_3;
6071 static void Lexit_3(int x, int y)
6073 Next[x][y] = Xexit_1;
6076 static void Lpause(int x, int y)
6078 Next[x][y] = Xblank;
6081 static void Lamoeba(int x, int y)
6086 case Xacid_splash_e:
6087 case Xacid_splash_w:
6093 if (tab_amoeba[Cave[x][y-1]] ||
6094 tab_amoeba[Cave[x+1][y]] ||
6095 tab_amoeba[Cave[x][y+1]] ||
6096 tab_amoeba[Cave[x-1][y]])
6101 static void Lexplode(int x, int y)
6106 Cave[x][y] = Xboom_1;
6107 Cave[x][y-1] = tab_explode_normal[Cave[x][y-1]];
6108 Cave[x-1][y] = tab_explode_normal[Cave[x-1][y]];
6109 Cave[x+1][y] = tab_explode_normal[Cave[x+1][y]];
6110 Cave[x][y+1] = tab_explode_normal[Cave[x][y+1]];
6111 Cave[x-1][y-1] = tab_explode_normal[Cave[x-1][y-1]];
6112 Cave[x+1][y-1] = tab_explode_normal[Cave[x+1][y-1]];
6113 Cave[x-1][y+1] = tab_explode_normal[Cave[x-1][y+1]];
6114 Cave[x+1][y+1] = tab_explode_normal[Cave[x+1][y+1]];
6118 Cave[x][y] = Xboom_1;
6119 Cave[x][y-1] = tab_explode_dynamite[Cave[x][y-1]];
6120 Cave[x-1][y] = tab_explode_dynamite[Cave[x-1][y]];
6121 Cave[x+1][y] = tab_explode_dynamite[Cave[x+1][y]];
6122 Cave[x][y+1] = tab_explode_dynamite[Cave[x][y+1]];
6123 Cave[x-1][y-1] = tab_explode_dynamite[Cave[x-1][y-1]];
6124 Cave[x+1][y-1] = tab_explode_dynamite[Cave[x+1][y-1]];
6125 Cave[x-1][y+1] = tab_explode_dynamite[Cave[x-1][y+1]];
6126 Cave[x+1][y+1] = tab_explode_dynamite[Cave[x+1][y+1]];
6131 static void Lboom_1(int x, int y)
6133 Next[x][y] = Xboom_2;
6134 #if !PLAY_ELEMENT_SOUND
6135 if (x != lev.exit_x && y != lev.exit_y)
6136 play_sound(x, y, SOUND_boom);
6138 lev.exit_x = lev.exit_y = -1;
6142 static void Lboom_2(int x, int y)
6144 Next[x][y] = Boom[x][y];
6147 static void Lboom_android(int x, int y)
6149 #if PLAY_ELEMENT_SOUND
6150 play_element_sound(x, y, SOUND_boom, Xandroid);
6156 static void handle_tile(int x, int y)
6160 case Xacid_1: Lacid_1(x, y); break;
6161 case Xacid_2: Lacid_2(x, y); break;
6162 case Xacid_3: Lacid_3(x, y); break;
6163 case Xacid_4: Lacid_4(x, y); break;
6164 case Xacid_5: Lacid_5(x, y); break;
6165 case Xacid_6: Lacid_6(x, y); break;
6166 case Xacid_7: Lacid_7(x, y); break;
6167 case Xacid_8: Lacid_8(x, y); break;
6169 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
6170 case Xfake_acid_1: Lfake_acid_1(x, y); break;
6171 case Xfake_acid_2: Lfake_acid_2(x, y); break;
6172 case Xfake_acid_3: Lfake_acid_3(x, y); break;
6173 case Xfake_acid_4: Lfake_acid_4(x, y); break;
6174 case Xfake_acid_5: Lfake_acid_5(x, y); break;
6175 case Xfake_acid_6: Lfake_acid_6(x, y); break;
6176 case Xfake_acid_7: Lfake_acid_7(x, y); break;
6177 case Xfake_acid_8: Lfake_acid_8(x, y); break;
6180 case Xandroid: Landroid(x, y); break;
6181 case Xandroid_1_n: Landroid_1_n(x, y); break;
6182 case Xandroid_2_n: Landroid_2_n(x, y); break;
6183 case Xandroid_1_e: Landroid_1_e(x, y); break;
6184 case Xandroid_2_e: Landroid_2_e(x, y); break;
6185 case Xandroid_1_s: Landroid_1_s(x, y); break;
6186 case Xandroid_2_s: Landroid_2_s(x, y); break;
6187 case Xandroid_1_w: Landroid_1_w(x, y); break;
6188 case Xandroid_2_w: Landroid_2_w(x, y); break;
6190 case Xeater_n: Leater_n(x, y); break;
6191 case Xeater_e: Leater_e(x, y); break;
6192 case Xeater_s: Leater_s(x, y); break;
6193 case Xeater_w: Leater_w(x, y); break;
6195 case Xalien: Lalien(x, y); break;
6196 case Xalien_pause: Lalien_pause(x, y); break;
6198 case Xbug_1_n: Lbug_1_n(x, y); break;
6199 case Xbug_2_n: Lbug_2_n(x, y); break;
6200 case Xbug_1_e: Lbug_1_e(x, y); break;
6201 case Xbug_2_e: Lbug_2_e(x, y); break;
6202 case Xbug_1_s: Lbug_1_s(x, y); break;
6203 case Xbug_2_s: Lbug_2_s(x, y); break;
6204 case Xbug_1_w: Lbug_1_w(x, y); break;
6205 case Xbug_2_w: Lbug_2_w(x, y); break;
6207 case Xtank_1_n: Ltank_1_n(x, y); break;
6208 case Xtank_2_n: Ltank_2_n(x, y); break;
6209 case Xtank_1_e: Ltank_1_e(x, y); break;
6210 case Xtank_2_e: Ltank_2_e(x, y); break;
6211 case Xtank_1_s: Ltank_1_s(x, y); break;
6212 case Xtank_2_s: Ltank_2_s(x, y); break;
6213 case Xtank_1_w: Ltank_1_w(x, y); break;
6214 case Xtank_2_w: Ltank_2_w(x, y); break;
6216 case Xemerald: Lemerald(x, y); break;
6217 case Xemerald_pause: Lemerald_pause(x, y); break;
6218 case Xemerald_fall: Lemerald_fall(x, y); break;
6220 case Xdiamond: Ldiamond(x, y); break;
6221 case Xdiamond_pause: Ldiamond_pause(x, y); break;
6222 case Xdiamond_fall: Ldiamond_fall(x, y); break;
6224 case Xstone: Lstone(x, y); break;
6225 case Xstone_pause: Lstone_pause(x, y); break;
6226 case Xstone_fall: Lstone_fall(x, y); break;
6228 case Xbomb: Lbomb(x, y); break;
6229 case Xbomb_pause: Lbomb_pause(x, y); break;
6230 case Xbomb_fall: Lbomb_fall(x, y); break;
6232 case Xnut: Lnut(x, y); break;
6233 case Xnut_pause: Lnut_pause(x, y); break;
6234 case Xnut_fall: Lnut_fall(x, y); break;
6236 case Xspring: Lspring(x, y); break;
6237 case Xspring_pause: Lspring_pause(x, y); break;
6238 case Xspring_e: Lspring_e(x, y); break;
6239 case Xspring_w: Lspring_w(x, y); break;
6240 case Xspring_fall: Lspring_fall(x, y); break;
6242 case Xpush_emerald_e: Lpush_emerald_e(x, y); break;
6243 case Xpush_emerald_w: Lpush_emerald_w(x, y); break;
6244 case Xpush_diamond_e: Lpush_diamond_e(x, y); break;
6245 case Xpush_diamond_w: Lpush_diamond_w(x, y); break;
6246 case Xpush_stone_e: Lpush_stone_e(x, y); break;
6247 case Xpush_stone_w: Lpush_stone_w(x, y); break;
6248 case Xpush_bomb_e: Lpush_bomb_e(x, y); break;
6249 case Xpush_bomb_w: Lpush_bomb_w(x, y); break;
6250 case Xpush_nut_e: Lpush_nut_e(x, y); break;
6251 case Xpush_nut_w: Lpush_nut_w(x, y); break;
6252 case Xpush_spring_e: Lpush_spring_e(x, y); break;
6253 case Xpush_spring_w: Lpush_spring_w(x, y); break;
6255 case Xdynamite_1: Ldynamite_1(x, y); break;
6256 case Xdynamite_2: Ldynamite_2(x, y); break;
6257 case Xdynamite_3: Ldynamite_3(x, y); break;
6258 case Xdynamite_4: Ldynamite_4(x, y); break;
6260 case Xfake_door_1: Lfake_door_1(x, y); break;
6261 case Xfake_door_2: Lfake_door_2(x, y); break;
6262 case Xfake_door_3: Lfake_door_3(x, y); break;
6263 case Xfake_door_4: Lfake_door_4(x, y); break;
6264 case Xfake_door_5: Lfake_door_5(x, y); break;
6265 case Xfake_door_6: Lfake_door_6(x, y); break;
6266 case Xfake_door_7: Lfake_door_7(x, y); break;
6267 case Xfake_door_8: Lfake_door_8(x, y); break;
6269 case Xballoon: Lballoon(x, y); break;
6271 case Xball_1: Lball_1(x, y); break;
6272 case Xball_2: Lball_2(x, y); break;
6274 case Xdrip: Ldrip(x, y); break;
6275 case Xdrip_fall: Ldrip_fall(x, y); break;
6276 case Xdrip_stretch: Ldrip_stretch(x, y); break;
6277 case Xdrip_stretchB: Ldrip_stretchB(x, y); break;
6279 case Xwonderwall: Lwonderwall(x, y); break;
6281 case Xwheel: Lwheel(x, y); break;
6283 case Xswitch: Lswitch(x, y); break;
6285 case Xfake_blank: Lfake_blank(x, y); break;
6286 case Xfake_grass: Lfake_grass(x, y); break;
6287 case Xfake_amoeba: Lfake_amoeba(x, y); break;
6289 case Xsand_stone: Lsand_stone(x, y); break;
6290 case Xsand_stonein_1: Lsand_stonein_1(x, y); break;
6291 case Xsand_stonein_2: Lsand_stonein_2(x, y); break;
6292 case Xsand_stonein_3: Lsand_stonein_3(x, y); break;
6293 case Xsand_stonein_4: Lsand_stonein_4(x, y); break;
6294 case Xsand_sandstone_1: Lsand_sandstone_1(x, y); break;
6295 case Xsand_sandstone_2: Lsand_sandstone_2(x, y); break;
6296 case Xsand_sandstone_3: Lsand_sandstone_3(x, y); break;
6297 case Xsand_sandstone_4: Lsand_sandstone_4(x, y); break;
6298 case Xsand_stonesand_1: Lsand_stonesand_1(x, y); break;
6299 case Xsand_stonesand_2: Lsand_stonesand_2(x, y); break;
6300 case Xsand_stonesand_3: Lsand_stonesand_3(x, y); break;
6301 case Xsand_stonesand_4: Lsand_stonesand_4(x, y); break;
6302 case Xsand_stoneout_1: Lsand_stoneout_1(x, y); break;
6303 case Xsand_stoneout_2: Lsand_stoneout_2(x, y); break;
6304 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
6305 case Xsand_stonesand_quickout_1: Lsand_stonesand_quickout_1(x, y); break;
6306 case Xsand_stonesand_quickout_2: Lsand_stonesand_quickout_2(x, y); break;
6309 case Xslidewall_ns: Lslidewall_ns(x, y); break;
6310 case Xslidewall_ew: Lslidewall_ew(x, y); break;
6312 case Xexit: Lexit(x, y); break;
6313 case Xexit_1: Lexit_1(x, y); break;
6314 case Xexit_2: Lexit_2(x, y); break;
6315 case Xexit_3: Lexit_3(x, y); break;
6317 case Xpause: Lpause(x, y); break;
6319 case Xboom_bug: Lboom_bug(x, y); break;
6320 case Xboom_bomb: Lboom_tank(x, y); break;
6321 case Xboom_android: Lboom_android(x, y); break;
6322 case Xboom_1: Lboom_1(x, y); break;
6323 case Xboom_2: Lboom_2(x, y); break;
6332 game_em.any_player_moving = FALSE;
6333 game_em.any_player_snapping = FALSE;
6335 /* must test for death and actually kill separately */
6336 for (i = 0; i < MAX_PLAYERS; i++)
6338 boolean ply_kill = player_killed(&ply[i]);
6340 if (ply[i].alive && ply_kill)
6341 kill_player(&ply[i]);
6344 for (i = 0; i < MAX_PLAYERS; i++)
6346 ply[i].oldx = ply[i].x;
6347 ply[i].oldy = ply[i].y;
6348 ply[i].anim = PLY_still;
6351 start_check_nr = (RandomEM & 128 ? 0 : 1) * 2 + (RandomEM & 256 ? 0 : 1);
6353 for (i = 0; i < MAX_PLAYERS; i++)
6355 int check_nr = (start_check_nr + i) % MAX_PLAYERS;
6357 if (ply[check_nr].alive)
6358 check_player(&ply[check_nr]);
6361 for (i = 0; i < MAX_PLAYERS; i++)
6366 if (Cave[ply[i].oldx][ply[i].oldy] == Zplayer)
6368 Cave[ply[i].oldx][ply[i].oldy] = Xblank;
6369 Next[ply[i].oldx][ply[i].oldy] = Xblank;
6372 if (Cave[ply[i].x][ply[i].y] == Xblank)
6374 Cave[ply[i].x][ply[i].y] = Zplayer;
6375 Next[ply[i].x][ply[i].y] = Zplayer;
6387 for (y = 1; y < HEIGHT - 1; y++)
6388 for (x = 0; x < WIDTH; x++)
6391 if (ply[0].alive || ply[1].alive || ply[2].alive || ply[3].alive)
6392 lev.score += score; /* only add a score if someone is alive */
6394 game_em.game_over = TRUE;
6398 /* triple buffering */
6410 unsigned int random;
6412 /* update variables */
6414 if (lev.score > 9999)
6417 if (lev.android_move_cnt-- == 0)
6418 lev.android_move_cnt = lev.android_move_time;
6419 if (lev.android_clone_cnt-- == 0)
6420 lev.android_clone_cnt = lev.android_clone_time;
6422 if (lev.ball_cnt-- == 0)
6423 lev.ball_cnt = lev.ball_time;
6426 if (lev.magnify_cnt)
6432 if (lev.wonderwall_time && lev.wonderwall_state)
6433 lev.wonderwall_time--;
6436 play_element_sound(lev.wheel_x, lev.wheel_y, SOUND_wheel, Xwheel);
6442 for (count = lev.amoeba_time; count--;)
6444 x = (random >> 10) % (WIDTH - 2);
6445 y = (random >> 20) % (HEIGHT - 2);
6449 random = random * 129 + 1;
6454 /* handle explosions */
6456 for (y = 1; y < HEIGHT - 1; y++)
6457 for (x = 1; x < WIDTH - 1; x++)
6460 /* triple buffering */
6462 for (y = 0; y < HEIGHT; y++)
6463 for (x = 0; x < WIDTH; x++)
6464 Next[x][y] = Cave[x][y];