1 /* second part of synchro.
3 * game logic for monsters.
5 * one giant switch statement to process everything.
7 * this whole thing is a major bottleneck. the compiler must use registers.
14 #define SPRING_ROLL /* spring rolling off round things continues to roll */
16 #define RANDOM_RAW (seed = seed << 31 | seed >> 1)
17 #define RANDOM(x) (RANDOM_RAW & (x - 1))
19 static unsigned int seed;
22 static void Lboom_bug(int x, int y)
25 Boom[x-1][y-1] = Xemerald;
26 Boom[x][y-1] = Xemerald;
27 Boom[x+1][y-1] = Xemerald;
28 Boom[x-1][y] = Xemerald;
29 Boom[x][y] = Xdiamond;
30 Boom[x+1][y] = Xemerald;
31 Boom[x-1][y+1] = Xemerald;
32 Boom[x][y+1] = Xemerald;
33 Boom[x+1][y+1] = Xemerald;
35 #if PLAY_ELEMENT_SOUND
36 play_element_sound(x, y, SOUND_boom, element);
40 static void Lboom_tank(int x, int y)
43 Boom[x-1][y-1] = Xblank;
44 Boom[x][y-1] = Xblank;
45 Boom[x+1][y-1] = Xblank;
46 Boom[x-1][y] = Xblank;
48 Boom[x+1][y] = Xblank;
49 Boom[x-1][y+1] = Xblank;
50 Boom[x][y+1] = Xblank;
51 Boom[x+1][y+1] = Xblank;
52 #if PLAY_ELEMENT_SOUND
53 play_element_sound(x, y, SOUND_boom, element);
57 static void set_nearest_player_xy(int x, int y, int *dx, int *dy)
59 int distance, distance_shortest = EM_MAX_CAVE_WIDTH + EM_MAX_CAVE_HEIGHT;
62 /* default values if no players are alive anymore */
66 for (i = 0; i < MAX_PLAYERS; i++)
71 distance = ABS(ply[i].x - x) + ABS(ply[i].y - y);
73 if (distance < distance_shortest)
78 distance_shortest = distance;
83 static void Lacid_1(int x, int y)
88 static void Lacid_2(int x, int y)
93 static void Lacid_3(int x, int y)
98 static void Lacid_4(int x, int y)
100 Next[x][y] = Xacid_5;
103 static void Lacid_5(int x, int y)
105 Next[x][y] = Xacid_6;
108 static void Lacid_6(int x, int y)
110 Next[x][y] = Xacid_7;
113 static void Lacid_7(int x, int y)
115 Next[x][y] = Xacid_8;
118 static void Lacid_8(int x, int y)
120 Next[x][y] = Xacid_1;
123 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
124 static void Lfake_acid_1(int x, int y)
126 Next[x][y] = Xfake_acid_2;
129 static void Lfake_acid_2(int x, int y)
131 Next[x][y] = Xfake_acid_3;
134 static void Lfake_acid_3(int x, int y)
136 Next[x][y] = Xfake_acid_4;
139 static void Lfake_acid_4(int x, int y)
141 Next[x][y] = Xfake_acid_5;
144 static void Lfake_acid_5(int x, int y)
146 Next[x][y] = Xfake_acid_6;
149 static void Lfake_acid_6(int x, int y)
151 Next[x][y] = Xfake_acid_7;
154 static void Lfake_acid_7(int x, int y)
156 Next[x][y] = Xfake_acid_8;
159 static void Lfake_acid_8(int x, int y)
161 Next[x][y] = Xfake_acid_1;
165 static void Landroid(int x, int y)
169 if (lev.android_clone_cnt == 0)
171 if (Cave[x-1][y-1] != Xblank &&
172 Cave[x][y-1] != Xblank &&
173 Cave[x+1][y-1] != Xblank &&
174 Cave[x-1][y] != Xblank &&
175 Cave[x+1][y] != Xblank &&
176 Cave[x-1][y+1] != Xblank &&
177 Cave[x][y+1] != Xblank &&
178 Cave[x+1][y+1] != Xblank)
183 /* randomly find an object to clone */
185 case 0: /* S,NE,W,NW,SE,E,SW,N */
186 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
187 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
188 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
189 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
190 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
191 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
192 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
193 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
196 case 1: /* NW,SE,N,S,NE,SW,E,W */
197 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
198 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
199 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
200 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
201 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
202 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
203 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
204 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
207 case 2: /* SW,E,S,W,N,NW,SE,NE */
208 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
209 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
210 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
211 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
212 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
213 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
214 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
215 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
218 case 3: /* N,SE,NE,E,W,S,NW,SW */
219 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
220 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
221 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
222 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
223 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
224 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
225 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
226 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
229 case 4: /* SE,NW,E,NE,SW,W,N,S */
230 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
231 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
232 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
233 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
234 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
235 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
236 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
237 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
240 case 5: /* NE,W,SE,SW,S,N,E,NW */
241 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
242 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
243 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
244 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
245 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
246 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
247 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
248 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
251 case 6: /* E,N,SW,S,NW,NE,SE,W */
252 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
253 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
254 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
255 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
256 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
257 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
258 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
259 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
262 case 7: /* W,SW,NW,N,E,SE,NE,S */
263 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
264 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
265 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
266 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
267 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
268 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
269 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
270 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
274 Next[x][y] = temp; /* the item we chose to clone */
275 play_element_sound(x, y, SOUND_android_clone, temp);
279 /* randomly find a direction to move */
281 case 0: /* S,NE,W,NW,SE,E,SW,N */
282 if (Cave[x][y+1] == Xblank) goto android_s;
283 if (Cave[x+1][y-1] == Xblank) goto android_ne;
284 if (Cave[x-1][y] == Xblank) goto android_w;
285 if (Cave[x-1][y-1] == Xblank) goto android_nw;
286 if (Cave[x+1][y+1] == Xblank) goto android_se;
287 if (Cave[x+1][y] == Xblank) goto android_e;
288 if (Cave[x-1][y+1] == Xblank) goto android_sw;
289 if (Cave[x][y-1] == Xblank) goto android_n;
292 case 1: /* NW,SE,N,S,NE,SW,E,W */
293 if (Cave[x-1][y-1] == Xblank) goto android_nw;
294 if (Cave[x+1][y+1] == Xblank) goto android_se;
295 if (Cave[x][y-1] == Xblank) goto android_n;
296 if (Cave[x][y+1] == Xblank) goto android_s;
297 if (Cave[x+1][y-1] == Xblank) goto android_ne;
298 if (Cave[x-1][y+1] == Xblank) goto android_sw;
299 if (Cave[x+1][y] == Xblank) goto android_e;
300 if (Cave[x-1][y] == Xblank) goto android_w;
303 case 2: /* SW,E,S,W,N,NW,SE,NE */
304 if (Cave[x-1][y+1] == Xblank) goto android_sw;
305 if (Cave[x+1][y] == Xblank) goto android_e;
306 if (Cave[x][y+1] == Xblank) goto android_s;
307 if (Cave[x-1][y] == Xblank) goto android_w;
308 if (Cave[x][y-1] == Xblank) goto android_n;
309 if (Cave[x-1][y-1] == Xblank) goto android_nw;
310 if (Cave[x+1][y+1] == Xblank) goto android_se;
311 if (Cave[x+1][y-1] == Xblank) goto android_ne;
314 case 3: /* N,SE,NE,E,W,S,NW,SW */
315 if (Cave[x][y-1] == Xblank) goto android_n;
316 if (Cave[x+1][y+1] == Xblank) goto android_se;
317 if (Cave[x+1][y-1] == Xblank) goto android_ne;
318 if (Cave[x+1][y] == Xblank) goto android_e;
319 if (Cave[x-1][y] == Xblank) goto android_w;
320 if (Cave[x][y+1] == Xblank) goto android_s;
321 if (Cave[x-1][y-1] == Xblank) goto android_nw;
322 if (Cave[x-1][y+1] == Xblank) goto android_sw;
325 case 4: /* SE,NW,E,NE,SW,W,N,S */
326 if (Cave[x+1][y+1] == Xblank) goto android_se;
327 if (Cave[x-1][y-1] == Xblank) goto android_nw;
328 if (Cave[x+1][y] == Xblank) goto android_e;
329 if (Cave[x+1][y-1] == Xblank) goto android_ne;
330 if (Cave[x-1][y+1] == Xblank) goto android_sw;
331 if (Cave[x-1][y] == Xblank) goto android_w;
332 if (Cave[x][y-1] == Xblank) goto android_n;
333 if (Cave[x][y+1] == Xblank) goto android_s;
336 case 5: /* NE,W,SE,SW,S,N,E,NW */
337 if (Cave[x+1][y-1] == Xblank) goto android_ne;
338 if (Cave[x-1][y] == Xblank) goto android_w;
339 if (Cave[x+1][y+1] == Xblank) goto android_se;
340 if (Cave[x-1][y+1] == Xblank) goto android_sw;
341 if (Cave[x][y+1] == Xblank) goto android_s;
342 if (Cave[x][y-1] == Xblank) goto android_n;
343 if (Cave[x+1][y] == Xblank) goto android_e;
344 if (Cave[x-1][y-1] == Xblank) goto android_nw;
347 case 6: /* E,N,SW,S,NW,NE,SE,W */
348 if (Cave[x+1][y] == Xblank) goto android_e;
349 if (Cave[x][y-1] == Xblank) goto android_n;
350 if (Cave[x-1][y+1] == Xblank) goto android_sw;
351 if (Cave[x][y+1] == Xblank) goto android_s;
352 if (Cave[x-1][y-1] == Xblank) goto android_nw;
353 if (Cave[x+1][y-1] == Xblank) goto android_ne;
354 if (Cave[x+1][y+1] == Xblank) goto android_se;
355 if (Cave[x-1][y] == Xblank) goto android_w;
358 case 7: /* W,SW,NW,N,E,SE,NE,S */
359 if (Cave[x-1][y] == Xblank) goto android_w;
360 if (Cave[x-1][y+1] == Xblank) goto android_sw;
361 if (Cave[x-1][y-1] == Xblank) goto android_nw;
362 if (Cave[x][y-1] == Xblank) goto android_n;
363 if (Cave[x+1][y] == Xblank) goto android_e;
364 if (Cave[x+1][y+1] == Xblank) goto android_se;
365 if (Cave[x+1][y-1] == Xblank) goto android_ne;
366 if (Cave[x][y+1] == Xblank) goto android_s;
372 if (lev.android_move_cnt == 0)
374 if (Cave[x-1][y-1] == Zplayer ||
375 Cave[x][y-1] == Zplayer ||
376 Cave[x+1][y-1] == Zplayer ||
377 Cave[x-1][y] == Zplayer ||
378 Cave[x+1][y] == Zplayer ||
379 Cave[x-1][y+1] == Zplayer ||
380 Cave[x][y+1] == Zplayer ||
381 Cave[x+1][y+1] == Zplayer)
384 set_nearest_player_xy(x, y, &dx, &dy);
386 Next[x][y] = Xblank; /* assume we will move */
387 temp = ((x < dx) + 1 - (x > dx)) + ((y < dy) + 1 - (y > dy)) * 3;
393 /* attempt clockwise move first if direct path is blocked */
395 case 0: /* north west */
396 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
397 if (tab_android_move[Cave[x][y-1]]) goto android_n;
398 if (tab_android_move[Cave[x-1][y]]) goto android_w;
402 if (tab_android_move[Cave[x][y-1]]) goto android_n;
403 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
404 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
407 case 2: /* north east */
408 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
409 if (tab_android_move[Cave[x+1][y]]) goto android_e;
410 if (tab_android_move[Cave[x][y-1]]) goto android_n;
414 if (tab_android_move[Cave[x-1][y]]) goto android_w;
415 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
416 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
419 case 4: /* nowhere */
423 if (tab_android_move[Cave[x+1][y]]) goto android_e;
424 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
425 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
428 case 6: /* south west */
429 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
430 if (tab_android_move[Cave[x-1][y]]) goto android_w;
431 if (tab_android_move[Cave[x][y+1]]) goto android_s;
435 if (tab_android_move[Cave[x][y+1]]) goto android_s;
436 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
437 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
440 case 8: /* south east */
441 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
442 if (tab_android_move[Cave[x][y+1]]) goto android_s;
443 if (tab_android_move[Cave[x+1][y]]) goto android_e;
451 /* attempt counterclockwise move first if direct path is blocked */
453 case 0: /* north west */
454 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
455 if (tab_android_move[Cave[x-1][y]]) goto android_w;
456 if (tab_android_move[Cave[x][y-1]]) goto android_n;
460 if (tab_android_move[Cave[x][y-1]]) goto android_n;
461 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
462 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
465 case 2: /* north east */
466 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
467 if (tab_android_move[Cave[x][y-1]]) goto android_n;
468 if (tab_android_move[Cave[x+1][y]]) goto android_e;
472 if (tab_android_move[Cave[x-1][y]]) goto android_w;
473 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
474 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
477 case 4: /* nowhere */
481 if (tab_android_move[Cave[x+1][y]]) goto android_e;
482 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
483 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
486 case 6: /* south west */
487 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
488 if (tab_android_move[Cave[x][y+1]]) goto android_s;
489 if (tab_android_move[Cave[x-1][y]]) goto android_w;
493 if (tab_android_move[Cave[x][y+1]]) goto android_s;
494 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
495 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
498 case 8: /* south east */
499 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
500 if (tab_android_move[Cave[x+1][y]]) goto android_e;
501 if (tab_android_move[Cave[x][y+1]]) goto android_s;
508 Next[x][y] = Xandroid;
512 Cave[x][y] = Yandroid_nB;
513 Cave[x][y-1] = Yandroid_n;
514 Next[x][y-1] = Xandroid;
515 play_element_sound(x, y, SOUND_android_move, Xandroid);
519 Cave[x][y] = Yandroid_neB;
520 Cave[x+1][y-1] = Yandroid_ne;
521 Next[x+1][y-1] = Xandroid;
522 play_element_sound(x, y, SOUND_android_move, Xandroid);
526 Cave[x][y] = Yandroid_eB;
527 Cave[x+1][y] = Yandroid_e;
528 Next[x+1][y] = Xandroid;
529 play_element_sound(x, y, SOUND_android_move, Xandroid);
533 Cave[x][y] = Yandroid_seB;
534 Cave[x+1][y+1] = Yandroid_se;
535 Next[x+1][y+1] = Xandroid;
536 play_element_sound(x, y, SOUND_android_move, Xandroid);
540 Cave[x][y] = Yandroid_sB;
541 Cave[x][y+1] = Yandroid_s;
542 Next[x][y+1] = Xandroid;
543 play_element_sound(x, y, SOUND_android_move, Xandroid);
547 Cave[x][y] = Yandroid_swB;
548 Cave[x-1][y+1] = Yandroid_sw;
549 Next[x-1][y+1] = Xandroid;
550 play_element_sound(x, y, SOUND_android_move, Xandroid);
554 Cave[x][y] = Yandroid_wB;
555 Cave[x-1][y] = Yandroid_w;
556 Next[x-1][y] = Xandroid;
557 play_element_sound(x, y, SOUND_android_move, Xandroid);
561 Cave[x][y] = Yandroid_nwB;
562 Cave[x-1][y-1] = Yandroid_nw;
563 Next[x-1][y-1] = Xandroid;
564 play_element_sound(x, y, SOUND_android_move, Xandroid);
568 static void Landroid_1_n(int x, int y)
570 switch (Cave[x][y-1])
580 Cave[x][y] = Yandroid_nB;
581 if (Cave[x+1][y-2] == Xblank)
582 Cave[x+1][y-2] = Xacid_splash_e;
583 if (Cave[x-1][y-2] == Xblank)
584 Cave[x-1][y-2] = Xacid_splash_w;
586 play_element_sound(x, y, SOUND_acid, Xacid_1);
592 Cave[x][y] = Yandroid_nB;
593 Cave[x][y-1] = Yandroid_n;
595 Next[x][y-1] = Xandroid;
596 play_element_sound(x, y, SOUND_android_move, Xandroid_1_n);
605 static void Landroid_2_n(int x, int y)
607 switch (Cave[x][y-1])
617 Cave[x][y] = Yandroid_nB;
618 if (Cave[x+1][y-2] == Xblank)
619 Cave[x+1][y-2] = Xacid_splash_e;
620 if (Cave[x-1][y-2] == Xblank)
621 Cave[x-1][y-2] = Xacid_splash_w;
623 play_element_sound(x, y, SOUND_acid, Xacid_1);
629 Cave[x][y] = Yandroid_nB;
630 Cave[x][y-1] = Yandroid_n;
632 Next[x][y-1] = Xandroid_1_n;
633 play_element_sound(x, y, SOUND_android_move, Xandroid_2_n);
642 static void Landroid_1_e(int x, int y)
644 switch (Cave[x+1][y])
654 Cave[x][y] = Yandroid_eB;
655 if (Cave[x+2][y-1] == Xblank)
656 Cave[x+2][y-1] = Xacid_splash_e;
657 if (Cave[x][y-1] == Xblank)
658 Cave[x][y-1] = Xacid_splash_w;
660 play_element_sound(x, y, SOUND_acid, Xacid_1);
666 Cave[x][y] = Yandroid_eB;
667 Cave[x+1][y] = Yandroid_e;
669 Next[x+1][y] = Xandroid;
670 play_element_sound(x, y, SOUND_android_move, Xandroid_1_e);
679 static void Landroid_2_e(int x, int y)
681 switch (Cave[x+1][y])
691 Cave[x][y] = Yandroid_eB;
692 if (Cave[x+2][y-1] == Xblank)
693 Cave[x+2][y-1] = Xacid_splash_e;
694 if (Cave[x][y-1] == Xblank)
695 Cave[x][y-1] = Xacid_splash_w;
697 play_element_sound(x, y, SOUND_acid, Xacid_1);
703 Cave[x][y] = Yandroid_eB;
704 Cave[x+1][y] = Yandroid_e;
706 Next[x+1][y] = Xandroid_1_e;
707 play_element_sound(x, y, SOUND_android_move, Xandroid_2_e);
716 static void Landroid_1_s(int x, int y)
718 switch (Cave[x][y+1])
728 Cave[x][y] = Yandroid_sB;
729 if (Cave[x+1][y] == Xblank)
730 Cave[x+1][y] = Xacid_splash_e;
731 if (Cave[x-1][y] == Xblank)
732 Cave[x-1][y] = Xacid_splash_w;
734 play_element_sound(x, y, SOUND_acid, Xacid_1);
740 Cave[x][y] = Yandroid_sB;
741 Cave[x][y+1] = Yandroid_s;
743 Next[x][y+1] = Xandroid;
744 play_element_sound(x, y, SOUND_android_move, Xandroid_1_s);
753 static void Landroid_2_s(int x, int y)
755 switch (Cave[x][y+1])
765 Cave[x][y] = Yandroid_sB;
766 if (Cave[x+1][y] == Xblank)
767 Cave[x+1][y] = Xacid_splash_e;
768 if (Cave[x-1][y] == Xblank)
769 Cave[x-1][y] = Xacid_splash_w;
771 play_element_sound(x, y, SOUND_acid, Xacid_1);
777 Cave[x][y] = Yandroid_sB;
778 Cave[x][y+1] = Yandroid_s;
780 Next[x][y+1] = Xandroid_1_s;
781 play_element_sound(x, y, SOUND_android_move, Xandroid_2_s);
790 static void Landroid_1_w(int x, int y)
792 switch (Cave[x-1][y])
802 Cave[x][y] = Yandroid_wB;
803 if (Cave[x][y-1] == Xblank)
804 Cave[x][y-1] = Xacid_splash_e;
805 if (Cave[x-2][y-1] == Xblank)
806 Cave[x-2][y-1] = Xacid_splash_w;
808 play_element_sound(x, y, SOUND_acid, Xacid_1);
814 Cave[x][y] = Yandroid_wB;
815 Cave[x-1][y] = Yandroid_w;
817 Next[x-1][y] = Xandroid;
818 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
827 static void Landroid_2_w(int x, int y)
829 switch (Cave[x-1][y])
839 Cave[x][y] = Yandroid_wB;
840 if (Cave[x][y-1] == Xblank)
841 Cave[x][y-1] = Xacid_splash_e;
842 if (Cave[x-2][y-1] == Xblank)
843 Cave[x-2][y-1] = Xacid_splash_w;
845 play_element_sound(x, y, SOUND_acid, Xacid_1);
851 Cave[x][y] = Yandroid_wB;
852 Cave[x-1][y] = Yandroid_w;
854 Next[x-1][y] = Xandroid_1_w;
855 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
864 static void Leater_n(int x, int y)
866 if (Cave[x+1][y] == Xdiamond)
868 Cave[x+1][y] = Ydiamond_blank;
869 Next[x+1][y] = Xblank;
870 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
874 if (Cave[x][y+1] == Xdiamond)
876 Cave[x][y+1] = Ydiamond_blank;
877 Next[x][y+1] = Xblank;
878 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
882 if (Cave[x-1][y] == Xdiamond)
884 Cave[x-1][y] = Ydiamond_blank;
885 Next[x-1][y] = Xblank;
886 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
890 if (Cave[x][y-1] == Xdiamond)
892 Cave[x][y-1] = Ydiamond_blank;
893 Next[x][y-1] = Xblank;
894 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
898 switch (Cave[x][y-1])
908 Cave[x][y] = Yeater_nB;
909 if (Cave[x+1][y-2] == Xblank)
910 Cave[x+1][y-2] = Xacid_splash_e;
911 if (Cave[x-1][y-2] == Xblank)
912 Cave[x-1][y-2] = Xacid_splash_w;
914 play_element_sound(x, y, SOUND_acid, Xacid_1);
923 Cave[x][y] = Yeater_nB;
924 Cave[x][y-1] = Yeater_n;
926 Next[x][y-1] = Xeater_n;
930 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
931 play_element_sound(x, y, SOUND_eater, Xeater_n);
936 static void Leater_e(int x, int y)
938 if (Cave[x][y+1] == Xdiamond)
940 Cave[x][y+1] = Ydiamond_blank;
941 Next[x][y+1] = Xblank;
942 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
946 if (Cave[x-1][y] == Xdiamond)
948 Cave[x-1][y] = Ydiamond_blank;
949 Next[x-1][y] = Xblank;
950 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
954 if (Cave[x][y-1] == Xdiamond)
956 Cave[x][y-1] = Ydiamond_blank;
957 Next[x][y-1] = Xblank;
958 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
962 if (Cave[x+1][y] == Xdiamond)
964 Cave[x+1][y] = Ydiamond_blank;
965 Next[x+1][y] = Xblank;
966 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
970 switch (Cave[x+1][y])
980 Cave[x][y] = Yeater_eB;
981 if (Cave[x+2][y-1] == Xblank)
982 Cave[x+2][y-1] = Xacid_splash_e;
983 if (Cave[x][y-1] == Xblank)
984 Cave[x][y-1] = Xacid_splash_w;
986 play_element_sound(x, y, SOUND_acid, Xacid_1);
995 Cave[x][y] = Yeater_eB;
996 Cave[x+1][y] = Yeater_e;
998 Next[x+1][y] = Xeater_e;
1002 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
1003 play_element_sound(x, y, SOUND_eater, Xeater_e);
1008 static void Leater_s(int x, int y)
1010 if (Cave[x-1][y] == Xdiamond)
1012 Cave[x-1][y] = Ydiamond_blank;
1013 Next[x-1][y] = Xblank;
1014 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
1018 if (Cave[x][y-1] == Xdiamond)
1020 Cave[x][y-1] = Ydiamond_blank;
1021 Next[x][y-1] = Xblank;
1022 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
1026 if (Cave[x+1][y] == Xdiamond)
1028 Cave[x+1][y] = Ydiamond_blank;
1029 Next[x+1][y] = Xblank;
1030 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
1034 if (Cave[x][y+1] == Xdiamond)
1036 Cave[x][y+1] = Ydiamond_blank;
1037 Next[x][y+1] = Xblank;
1038 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
1042 switch (Cave[x][y+1])
1052 Cave[x][y] = Yeater_sB;
1053 if (Cave[x+1][y] == Xblank)
1054 Cave[x+1][y] = Xacid_splash_e;
1055 if (Cave[x-1][y] == Xblank)
1056 Cave[x-1][y] = Xacid_splash_w;
1057 Next[x][y] = Xblank;
1058 play_element_sound(x, y, SOUND_acid, Xacid_1);
1062 case Xacid_splash_e:
1063 case Xacid_splash_w:
1067 Cave[x][y] = Yeater_sB;
1068 Cave[x][y+1] = Yeater_s;
1069 Next[x][y] = Xblank;
1070 Next[x][y+1] = Xeater_s;
1074 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
1075 play_element_sound(x, y, SOUND_eater, Xeater_s);
1080 static void Leater_w(int x, int y)
1082 if (Cave[x][y-1] == Xdiamond)
1084 Cave[x][y-1] = Ydiamond_blank;
1085 Next[x][y-1] = Xblank;
1086 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1090 if (Cave[x+1][y] == Xdiamond)
1092 Cave[x+1][y] = Ydiamond_blank;
1093 Next[x+1][y] = Xblank;
1094 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1098 if (Cave[x][y+1] == Xdiamond)
1100 Cave[x][y+1] = Ydiamond_blank;
1101 Next[x][y+1] = Xblank;
1102 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1106 if (Cave[x-1][y] == Xdiamond)
1108 Cave[x-1][y] = Ydiamond_blank;
1109 Next[x-1][y] = Xblank;
1110 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1114 switch (Cave[x-1][y])
1124 Cave[x][y] = Yeater_wB;
1125 if (Cave[x][y-1] == Xblank)
1126 Cave[x][y-1] = Xacid_splash_e;
1127 if (Cave[x-2][y-1] == Xblank)
1128 Cave[x-2][y-1] = Xacid_splash_w;
1129 Next[x][y] = Xblank;
1130 play_element_sound(x, y, SOUND_acid, Xacid_1);
1134 case Xacid_splash_e:
1135 case Xacid_splash_w:
1139 Cave[x][y] = Yeater_wB;
1140 Cave[x-1][y] = Yeater_w;
1141 Next[x][y] = Xblank;
1142 Next[x-1][y] = Xeater_w;
1146 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
1147 play_element_sound(x, y, SOUND_eater, Xeater_w);
1152 static void Lalien(int x, int y)
1163 set_nearest_player_xy(x, y, &dx, &dy);
1170 switch (Cave[x][y-1])
1180 Cave[x][y] = Yalien_nB;
1181 if (Cave[x+1][y-2] == Xblank)
1182 Cave[x+1][y-2] = Xacid_splash_e;
1183 if (Cave[x-1][y-2] == Xblank)
1184 Cave[x-1][y-2] = Xacid_splash_w;
1185 Next[x][y] = Xblank;
1186 play_element_sound(x, y, SOUND_acid, Xacid_1);
1190 case Xacid_splash_e:
1191 case Xacid_splash_w:
1195 Cave[x][y] = Yalien_nB;
1196 Cave[x][y-1] = Yalien_n;
1197 Next[x][y] = Xblank;
1198 Next[x][y-1] = Xalien_pause;
1199 play_element_sound(x, y, SOUND_alien, Xalien);
1205 switch (Cave[x][y+1])
1215 Cave[x][y] = Yalien_sB;
1216 Next[x][y] = Xblank;
1217 if (Cave[x+1][y] == Xblank)
1218 Cave[x+1][y] = Xacid_splash_e;
1219 if (Cave[x-1][y] == Xblank)
1220 Cave[x-1][y] = Xacid_splash_w;
1221 play_element_sound(x, y, SOUND_acid, Xacid_1);
1225 case Xacid_splash_e:
1226 case Xacid_splash_w:
1230 Cave[x][y] = Yalien_sB;
1231 Cave[x][y+1] = Yalien_s;
1232 Next[x][y] = Xblank;
1233 Next[x][y+1] = Xalien_pause;
1234 play_element_sound(x, y, SOUND_alien, Xalien);
1243 switch (Cave[x+1][y])
1253 Cave[x][y] = Yalien_eB;
1254 if (Cave[x+2][y-1] == Xblank)
1255 Cave[x+2][y-1] = Xacid_splash_e;
1256 if (Cave[x][y-1] == Xblank)
1257 Cave[x][y-1] = Xacid_splash_w;
1258 Next[x][y] = Xblank;
1259 play_element_sound(x, y, SOUND_acid, Xacid_1);
1263 case Xacid_splash_e:
1264 case Xacid_splash_w:
1268 Cave[x][y] = Yalien_eB;
1269 Cave[x+1][y] = Yalien_e;
1270 Next[x][y] = Xblank;
1271 Next[x+1][y] = Xalien_pause;
1272 play_element_sound(x, y, SOUND_alien, Xalien);
1278 switch (Cave[x-1][y])
1288 Cave[x][y] = Yalien_wB;
1289 if (Cave[x][y-1] == Xblank)
1290 Cave[x][y-1] = Xacid_splash_e;
1291 if (Cave[x-2][y-1] == Xblank)
1292 Cave[x-2][y-1] = Xacid_splash_w;
1293 Next[x][y] = Xblank;
1294 play_element_sound(x, y, SOUND_acid, Xacid_1);
1298 case Xacid_splash_e:
1299 case Xacid_splash_w:
1303 Cave[x][y] = Yalien_wB;
1304 Cave[x-1][y] = Yalien_w;
1305 Next[x][y] = Xblank;
1306 Next[x-1][y] = Xalien_pause;
1307 play_element_sound(x, y, SOUND_alien, Xalien);
1314 static void Lalien_pause(int x, int y)
1316 Next[x][y] = Xalien;
1319 static void Lbug_n(int x, int y)
1321 switch (Cave[x][y-1])
1331 Cave[x][y] = Ybug_nB;
1332 if (Cave[x+1][y-2] == Xblank)
1333 Cave[x+1][y-2] = Xacid_splash_e;
1334 if (Cave[x-1][y-2] == Xblank)
1335 Cave[x-1][y-2] = Xacid_splash_w;
1336 Next[x][y] = Xblank;
1337 play_element_sound(x, y, SOUND_acid, Xacid_1);
1341 case Xacid_splash_e:
1342 case Xacid_splash_w:
1346 Cave[x][y] = Ybug_nB;
1347 Cave[x][y-1] = Ybug_n;
1348 Next[x][y] = Xblank;
1349 Next[x][y-1] = Xbug_1_n;
1350 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
1354 Cave[x][y] = Ybug_n_w;
1355 Next[x][y] = Xbug_2_w;
1356 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
1361 static void Lbug_1_n(int x, int y)
1363 if (tab_amoeba[Cave[x][y-1]] ||
1364 tab_amoeba[Cave[x+1][y]] ||
1365 tab_amoeba[Cave[x][y+1]] ||
1366 tab_amoeba[Cave[x-1][y]])
1373 switch (Cave[x+1][y])
1376 case Xacid_splash_e:
1377 case Xacid_splash_w:
1389 Cave[x][y] = Ybug_n_e;
1390 Next[x][y] = Xbug_2_e;
1391 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
1400 static void Lbug_2_n(int x, int y)
1402 if (tab_amoeba[Cave[x][y-1]] ||
1403 tab_amoeba[Cave[x+1][y]] ||
1404 tab_amoeba[Cave[x][y+1]] ||
1405 tab_amoeba[Cave[x-1][y]])
1415 static void Lbug_e(int x, int y)
1417 switch (Cave[x+1][y])
1427 Cave[x][y] = Ybug_eB;
1428 if (Cave[x+2][y-1] == Xblank)
1429 Cave[x+2][y-1] = Xacid_splash_e;
1430 if (Cave[x][y-1] == Xblank)
1431 Cave[x][y-1] = Xacid_splash_w;
1432 Next[x][y] = Xblank;
1433 play_element_sound(x, y, SOUND_acid, Xacid_1);
1437 case Xacid_splash_e:
1438 case Xacid_splash_w:
1442 Cave[x][y] = Ybug_eB;
1443 Cave[x+1][y] = Ybug_e;
1444 Next[x][y] = Xblank;
1445 Next[x+1][y] = Xbug_1_e;
1446 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
1450 Cave[x][y] = Ybug_e_n;
1451 Next[x][y] = Xbug_2_n;
1452 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
1457 static void Lbug_1_e(int x, int y)
1459 if (tab_amoeba[Cave[x][y-1]] ||
1460 tab_amoeba[Cave[x+1][y]] ||
1461 tab_amoeba[Cave[x][y+1]] ||
1462 tab_amoeba[Cave[x-1][y]])
1469 switch (Cave[x][y+1])
1472 case Xacid_splash_e:
1473 case Xacid_splash_w:
1485 Cave[x][y] = Ybug_e_s;
1486 Next[x][y] = Xbug_2_s;
1487 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
1496 static void Lbug_2_e(int x, int y)
1498 if (tab_amoeba[Cave[x][y-1]] ||
1499 tab_amoeba[Cave[x+1][y]] ||
1500 tab_amoeba[Cave[x][y+1]] ||
1501 tab_amoeba[Cave[x-1][y]])
1511 static void Lbug_s(int x, int y)
1513 switch (Cave[x][y+1])
1523 Cave[x][y] = Ybug_sB;
1524 if (Cave[x+1][y] == Xblank)
1525 Cave[x+1][y] = Xacid_splash_e;
1526 if (Cave[x-1][y] == Xblank)
1527 Cave[x-1][y] = Xacid_splash_w;
1528 Next[x][y] = Xblank;
1529 play_element_sound(x, y, SOUND_acid, Xacid_1);
1533 case Xacid_splash_e:
1534 case Xacid_splash_w:
1538 Cave[x][y] = Ybug_sB;
1539 Cave[x][y+1] = Ybug_s;
1540 Next[x][y] = Xblank;
1541 Next[x][y+1] = Xbug_1_s;
1542 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
1546 Cave[x][y] = Ybug_s_e;
1547 Next[x][y] = Xbug_2_e;
1548 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
1553 static void Lbug_1_s(int x, int y)
1555 if (tab_amoeba[Cave[x][y-1]] ||
1556 tab_amoeba[Cave[x+1][y]] ||
1557 tab_amoeba[Cave[x][y+1]] ||
1558 tab_amoeba[Cave[x-1][y]])
1565 switch (Cave[x-1][y])
1568 case Xacid_splash_e:
1569 case Xacid_splash_w:
1581 Cave[x][y] = Ybug_s_w;
1582 Next[x][y] = Xbug_2_w;
1583 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
1592 static void Lbug_2_s(int x, int y)
1594 if (tab_amoeba[Cave[x][y-1]] ||
1595 tab_amoeba[Cave[x+1][y]] ||
1596 tab_amoeba[Cave[x][y+1]] ||
1597 tab_amoeba[Cave[x-1][y]])
1607 static void Lbug_w(int x, int y)
1609 switch (Cave[x-1][y])
1619 Cave[x][y] = Ybug_wB;
1620 if (Cave[x][y-1] == Xblank)
1621 Cave[x][y-1] = Xacid_splash_e;
1622 if (Cave[x-2][y-1] == Xblank)
1623 Cave[x-2][y-1] = Xacid_splash_w;
1624 Next[x][y] = Xblank;
1625 play_element_sound(x, y, SOUND_acid, Xacid_1);
1629 case Xacid_splash_e:
1630 case Xacid_splash_w:
1634 Cave[x][y] = Ybug_wB;
1635 Cave[x-1][y] = Ybug_w;
1636 Next[x][y] = Xblank;
1637 Next[x-1][y] = Xbug_1_w;
1638 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
1642 Cave[x][y] = Ybug_w_s;
1643 Next[x][y] = Xbug_2_s;
1644 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
1649 static void Lbug_1_w(int x, int y)
1651 if (tab_amoeba[Cave[x][y-1]] ||
1652 tab_amoeba[Cave[x+1][y]] ||
1653 tab_amoeba[Cave[x][y+1]] ||
1654 tab_amoeba[Cave[x-1][y]])
1661 switch (Cave[x][y-1])
1664 case Xacid_splash_e:
1665 case Xacid_splash_w:
1677 Cave[x][y] = Ybug_w_n;
1678 Next[x][y] = Xbug_2_n;
1679 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
1688 static void Lbug_2_w(int x, int y)
1690 if (tab_amoeba[Cave[x][y-1]] ||
1691 tab_amoeba[Cave[x+1][y]] ||
1692 tab_amoeba[Cave[x][y+1]] ||
1693 tab_amoeba[Cave[x-1][y]])
1703 static void Ltank_n(int x, int y)
1705 switch (Cave[x][y-1])
1715 Cave[x][y] = Ytank_nB;
1716 if (Cave[x+1][y-2] == Xblank)
1717 Cave[x+1][y-2] = Xacid_splash_e;
1718 if (Cave[x-1][y-2] == Xblank)
1719 Cave[x-1][y-2] = Xacid_splash_w;
1720 Next[x][y] = Xblank;
1721 play_element_sound(x, y, SOUND_acid, Xacid_1);
1725 case Xacid_splash_e:
1726 case Xacid_splash_w:
1730 Cave[x][y] = Ytank_nB;
1731 Cave[x][y-1] = Ytank_n;
1732 Next[x][y] = Xblank;
1733 Next[x][y-1] = Xtank_1_n;
1734 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
1738 Cave[x][y] = Ytank_n_e;
1739 Next[x][y] = Xtank_2_e;
1740 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
1745 static void Ltank_1_n(int x, int y)
1747 if (tab_amoeba[Cave[x][y-1]] ||
1748 tab_amoeba[Cave[x+1][y]] ||
1749 tab_amoeba[Cave[x][y+1]] ||
1750 tab_amoeba[Cave[x-1][y]])
1757 switch (Cave[x-1][y])
1760 case Xacid_splash_e:
1761 case Xacid_splash_w:
1773 Cave[x][y] = Ytank_n_w;
1774 Next[x][y] = Xtank_2_w;
1775 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
1784 static void Ltank_2_n(int x, int y)
1786 if (tab_amoeba[Cave[x][y-1]] ||
1787 tab_amoeba[Cave[x+1][y]] ||
1788 tab_amoeba[Cave[x][y+1]] ||
1789 tab_amoeba[Cave[x-1][y]])
1799 static void Ltank_e(int x, int y)
1801 switch (Cave[x+1][y])
1811 Cave[x][y] = Ytank_eB;
1812 if (Cave[x+2][y-1] == Xblank)
1813 Cave[x+2][y-1] = Xacid_splash_e;
1814 if (Cave[x][y-1] == Xblank)
1815 Cave[x][y-1] = Xacid_splash_w;
1816 Next[x][y] = Xblank;
1817 play_element_sound(x, y, SOUND_acid, Xacid_1);
1821 case Xacid_splash_e:
1822 case Xacid_splash_w:
1826 Cave[x][y] = Ytank_eB;
1827 Cave[x+1][y] = Ytank_e;
1828 Next[x][y] = Xblank;
1829 Next[x+1][y] = Xtank_1_e;
1830 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
1834 Cave[x][y] = Ytank_e_s;
1835 Next[x][y] = Xtank_2_s;
1836 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
1841 static void Ltank_1_e(int x, int y)
1843 if (tab_amoeba[Cave[x][y-1]] ||
1844 tab_amoeba[Cave[x+1][y]] ||
1845 tab_amoeba[Cave[x][y+1]] ||
1846 tab_amoeba[Cave[x-1][y]])
1853 switch (Cave[x][y-1])
1856 case Xacid_splash_e:
1857 case Xacid_splash_w:
1869 Cave[x][y] = Ytank_e_n;
1870 Next[x][y] = Xtank_2_n;
1871 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
1880 static void Ltank_2_e(int x, int y)
1882 if (tab_amoeba[Cave[x][y-1]] ||
1883 tab_amoeba[Cave[x+1][y]] ||
1884 tab_amoeba[Cave[x][y+1]] ||
1885 tab_amoeba[Cave[x-1][y]])
1895 static void Ltank_s(int x, int y)
1897 switch (Cave[x][y+1])
1907 Cave[x][y] = Ytank_sB;
1908 if (Cave[x+1][y] == Xblank)
1909 Cave[x+1][y] = Xacid_splash_e;
1910 if (Cave[x-1][y] == Xblank)
1911 Cave[x-1][y] = Xacid_splash_w;
1912 Next[x][y] = Xblank;
1913 play_element_sound(x, y, SOUND_acid, Xacid_1);
1917 case Xacid_splash_e:
1918 case Xacid_splash_w:
1922 Cave[x][y] = Ytank_sB;
1923 Cave[x][y+1] = Ytank_s;
1924 Next[x][y] = Xblank;
1925 Next[x][y+1] = Xtank_1_s;
1926 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
1930 Cave[x][y] = Ytank_s_w;
1931 Next[x][y] = Xtank_2_w;
1932 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
1937 static void Ltank_1_s(int x, int y)
1939 if (tab_amoeba[Cave[x][y-1]] ||
1940 tab_amoeba[Cave[x+1][y]] ||
1941 tab_amoeba[Cave[x][y+1]] ||
1942 tab_amoeba[Cave[x-1][y]])
1949 switch (Cave[x+1][y])
1952 case Xacid_splash_e:
1953 case Xacid_splash_w:
1965 Cave[x][y] = Ytank_s_e;
1966 Next[x][y] = Xtank_2_e;
1967 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
1976 static void Ltank_2_s(int x, int y)
1978 if (tab_amoeba[Cave[x][y-1]] ||
1979 tab_amoeba[Cave[x+1][y]] ||
1980 tab_amoeba[Cave[x][y+1]] ||
1981 tab_amoeba[Cave[x-1][y]])
1991 static void Ltank_w(int x, int y)
1993 switch (Cave[x-1][y])
2003 Cave[x][y] = Ytank_wB;
2004 if (Cave[x][y-1] == Xblank)
2005 Cave[x][y-1] = Xacid_splash_e;
2006 if (Cave[x-2][y-1] == Xblank)
2007 Cave[x-2][y-1] = Xacid_splash_w;
2008 Next[x][y] = Xblank;
2009 play_element_sound(x, y, SOUND_acid, Xacid_1);
2013 case Xacid_splash_e:
2014 case Xacid_splash_w:
2018 Cave[x][y] = Ytank_wB;
2019 Cave[x-1][y] = Ytank_w;
2020 Next[x][y] = Xblank;
2021 Next[x-1][y] = Xtank_1_w;
2022 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
2026 Cave[x][y] = Ytank_w_n;
2027 Next[x][y] = Xtank_2_n;
2028 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
2033 static void Ltank_1_w(int x, int y)
2035 if (tab_amoeba[Cave[x][y-1]] ||
2036 tab_amoeba[Cave[x+1][y]] ||
2037 tab_amoeba[Cave[x][y+1]] ||
2038 tab_amoeba[Cave[x-1][y]])
2045 switch (Cave[x][y+1])
2048 case Xacid_splash_e:
2049 case Xacid_splash_w:
2061 Cave[x][y] = Ytank_w_s;
2062 Next[x][y] = Xtank_2_s;
2063 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
2072 static void Ltank_2_w(int x, int y)
2074 if (tab_amoeba[Cave[x][y-1]] ||
2075 tab_amoeba[Cave[x+1][y]] ||
2076 tab_amoeba[Cave[x][y+1]] ||
2077 tab_amoeba[Cave[x-1][y]])
2087 static void Lemerald(int x, int y)
2089 switch (Cave[x][y+1])
2099 Cave[x][y] = Yemerald_sB;
2100 if (Cave[x+1][y] == Xblank)
2101 Cave[x+1][y] = Xacid_splash_e;
2102 if (Cave[x-1][y] == Xblank)
2103 Cave[x-1][y] = Xacid_splash_w;
2104 Next[x][y] = Xblank;
2105 play_element_sound(x, y, SOUND_acid, Xacid_1);
2109 case Xacid_splash_e:
2110 case Xacid_splash_w:
2111 Cave[x][y] = Yemerald_sB;
2112 Cave[x][y+1] = Yemerald_s;
2113 Next[x][y] = Xblank;
2114 Next[x][y+1] = Xemerald_fall;
2133 case Xemerald_pause:
2135 case Xdiamond_pause:
2172 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2174 Cave[x][y] = Yemerald_eB;
2175 Cave[x+1][y] = Yemerald_e;
2176 Next[x][y] = Xblank;
2177 Next[x+1][y] = Xemerald_pause;
2181 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2183 Cave[x][y] = Yemerald_wB;
2184 Cave[x-1][y] = Yemerald_w;
2185 Next[x][y] = Xblank;
2186 Next[x-1][y] = Xemerald_pause;
2192 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2194 Cave[x][y] = Yemerald_wB;
2195 Cave[x-1][y] = Yemerald_w;
2196 Next[x][y] = Xblank;
2197 Next[x-1][y] = Xemerald_pause;
2201 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2203 Cave[x][y] = Yemerald_eB;
2204 Cave[x+1][y] = Yemerald_e;
2205 Next[x][y] = Xblank;
2206 Next[x+1][y] = Xemerald_pause;
2212 if (++lev.shine_cnt > 50)
2214 lev.shine_cnt = RANDOM(8);
2215 Cave[x][y] = Xemerald_shine;
2222 static void Lemerald_pause(int x, int y)
2224 switch (Cave[x][y+1])
2234 Cave[x][y] = Yemerald_sB;
2235 if (Cave[x+1][y] == Xblank)
2236 Cave[x+1][y] = Xacid_splash_e;
2237 if (Cave[x-1][y] == Xblank)
2238 Cave[x-1][y] = Xacid_splash_w;
2239 Next[x][y] = Xblank;
2240 play_element_sound(x, y, SOUND_acid, Xacid_1);
2244 case Xacid_splash_e:
2245 case Xacid_splash_w:
2246 Cave[x][y] = Yemerald_sB;
2247 Cave[x][y+1] = Yemerald_s;
2248 Next[x][y] = Xblank;
2249 Next[x][y+1] = Xemerald_fall;
2253 Cave[x][y] = Xemerald;
2254 Next[x][y] = Xemerald;
2259 static void Lemerald_fall(int x, int y)
2261 switch (Cave[x][y+1])
2271 Cave[x][y] = Yemerald_sB;
2272 if (Cave[x+1][y] == Xblank)
2273 Cave[x+1][y] = Xacid_splash_e;
2274 if (Cave[x-1][y] == Xblank)
2275 Cave[x-1][y] = Xacid_splash_w;
2276 Next[x][y] = Xblank;
2277 play_element_sound(x, y, SOUND_acid, Xacid_1);
2281 case Xacid_splash_e:
2282 case Xacid_splash_w:
2284 Cave[x][y] = Yemerald_sB;
2285 Cave[x][y+1] = Yemerald_s;
2286 Next[x][y] = Xblank;
2287 Next[x][y+1] = Xemerald_fall;
2291 if (lev.wonderwall_time)
2293 lev.wonderwall_state = 1;
2294 Cave[x][y] = Yemerald_sB;
2295 if (tab_blank[Cave[x][y+2]])
2297 Cave[x][y+2] = Ydiamond_s;
2298 Next[x][y+2] = Xdiamond_fall;
2301 Next[x][y] = Xblank;
2302 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
2307 Cave[x][y] = Xemerald;
2308 Next[x][y] = Xemerald;
2309 play_element_sound(x, y, SOUND_diamond, Xemerald);
2314 static void Ldiamond(int x, int y)
2316 switch (Cave[x][y+1])
2326 Cave[x][y] = Ydiamond_sB;
2327 if (Cave[x+1][y] == Xblank)
2328 Cave[x+1][y] = Xacid_splash_e;
2329 if (Cave[x-1][y] == Xblank)
2330 Cave[x-1][y] = Xacid_splash_w;
2331 Next[x][y] = Xblank;
2332 play_element_sound(x, y, SOUND_acid, Xacid_1);
2336 case Xacid_splash_e:
2337 case Xacid_splash_w:
2338 Cave[x][y] = Ydiamond_sB;
2339 Cave[x][y+1] = Ydiamond_s;
2340 Next[x][y] = Xblank;
2341 Next[x][y+1] = Xdiamond_fall;
2360 case Xemerald_pause:
2362 case Xdiamond_pause:
2399 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2401 Cave[x][y] = Ydiamond_eB;
2402 Cave[x+1][y] = Ydiamond_e;
2403 Next[x][y] = Xblank;
2404 Next[x+1][y] = Xdiamond_pause;
2408 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2410 Cave[x][y] = Ydiamond_wB;
2411 Cave[x-1][y] = Ydiamond_w;
2412 Next[x][y] = Xblank;
2413 Next[x-1][y] = Xdiamond_pause;
2419 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2421 Cave[x][y] = Ydiamond_wB;
2422 Cave[x-1][y] = Ydiamond_w;
2423 Next[x][y] = Xblank;
2424 Next[x-1][y] = Xdiamond_pause;
2428 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2430 Cave[x][y] = Ydiamond_eB;
2431 Cave[x+1][y] = Ydiamond_e;
2432 Next[x][y] = Xblank;
2433 Next[x+1][y] = Xdiamond_pause;
2439 if (++lev.shine_cnt > 50)
2441 lev.shine_cnt = RANDOM(8);
2442 Cave[x][y] = Xdiamond_shine;
2449 static void Ldiamond_pause(int x, int y)
2451 switch (Cave[x][y+1])
2461 Cave[x][y] = Ydiamond_sB;
2462 if (Cave[x+1][y] == Xblank)
2463 Cave[x+1][y] = Xacid_splash_e;
2464 if (Cave[x-1][y] == Xblank)
2465 Cave[x-1][y] = Xacid_splash_w;
2466 Next[x][y] = Xblank;
2467 play_element_sound(x, y, SOUND_acid, Xacid_1);
2471 case Xacid_splash_e:
2472 case Xacid_splash_w:
2473 Cave[x][y] = Ydiamond_sB;
2474 Cave[x][y+1] = Ydiamond_s;
2475 Next[x][y] = Xblank;
2476 Next[x][y+1] = Xdiamond_fall;
2480 Cave[x][y] = Xdiamond;
2481 Next[x][y] = Xdiamond;
2486 static void Ldiamond_fall(int x, int y)
2488 switch (Cave[x][y+1])
2498 Cave[x][y] = Ydiamond_sB;
2499 if (Cave[x+1][y] == Xblank)
2500 Cave[x+1][y] = Xacid_splash_e;
2501 if (Cave[x-1][y] == Xblank)
2502 Cave[x-1][y] = Xacid_splash_w;
2503 Next[x][y] = Xblank;
2504 play_element_sound(x, y, SOUND_acid, Xacid_1);
2508 case Xacid_splash_e:
2509 case Xacid_splash_w:
2511 Cave[x][y] = Ydiamond_sB;
2512 Cave[x][y+1] = Ydiamond_s;
2513 Next[x][y] = Xblank;
2514 Next[x][y+1] = Xdiamond_fall;
2518 if (lev.wonderwall_time)
2520 lev.wonderwall_state = 1;
2521 Cave[x][y] = Ydiamond_sB;
2522 if (tab_blank[Cave[x][y+2]])
2524 Cave[x][y+2] = Ystone_s;
2525 Next[x][y+2] = Xstone_fall;
2528 Next[x][y] = Xblank;
2529 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
2534 Cave[x][y] = Xdiamond;
2535 Next[x][y] = Xdiamond;
2536 play_element_sound(x, y, SOUND_diamond, Xdiamond);
2541 static void Lstone(int x, int y)
2543 switch (Cave[x][y+1])
2553 Cave[x][y] = Ystone_sB;
2554 if (Cave[x+1][y] == Xblank)
2555 Cave[x+1][y] = Xacid_splash_e;
2556 if (Cave[x-1][y] == Xblank)
2557 Cave[x-1][y] = Xacid_splash_w;
2558 Next[x][y] = Xblank;
2559 play_element_sound(x, y, SOUND_acid, Xacid_1);
2563 case Xacid_splash_e:
2564 case Xacid_splash_w:
2567 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
2577 Cave[x][y] = Ystone_sB;
2578 Cave[x][y+1] = Ystone_s;
2579 Next[x][y] = Xblank;
2580 Next[x][y+1] = Xstone_fall;
2584 Cave[x][y] = Xsand_stonein_1;
2585 Cave[x][y+1] = Xsand_sandstone_1;
2586 Next[x][y] = Xsand_stonein_2;
2587 Next[x][y+1] = Xsand_sandstone_2;
2606 case Xemerald_pause:
2608 case Xdiamond_pause:
2638 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2640 Cave[x][y] = Ystone_eB;
2641 Cave[x+1][y] = Ystone_e;
2642 Next[x][y] = Xblank;
2643 Next[x+1][y] = Xstone_pause;
2647 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2649 Cave[x][y] = Ystone_wB;
2650 Cave[x-1][y] = Ystone_w;
2651 Next[x][y] = Xblank;
2652 Next[x-1][y] = Xstone_pause;
2658 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2660 Cave[x][y] = Ystone_wB;
2661 Cave[x-1][y] = Ystone_w;
2662 Next[x][y] = Xblank;
2663 Next[x-1][y] = Xstone_pause;
2667 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2669 Cave[x][y] = Ystone_eB;
2670 Cave[x+1][y] = Ystone_e;
2671 Next[x][y] = Xblank;
2672 Next[x+1][y] = Xstone_pause;
2679 static void Lstone_pause(int x, int y)
2681 switch (Cave[x][y+1])
2691 Cave[x][y] = Ystone_sB;
2692 if (Cave[x+1][y] == Xblank)
2693 Cave[x+1][y] = Xacid_splash_e;
2694 if (Cave[x-1][y] == Xblank)
2695 Cave[x-1][y] = Xacid_splash_w;
2696 Next[x][y] = Xblank;
2697 play_element_sound(x, y, SOUND_acid, Xacid_1);
2701 case Xacid_splash_e:
2702 case Xacid_splash_w:
2703 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
2713 Cave[x][y] = Ystone_sB;
2714 Cave[x][y+1] = Ystone_s;
2715 Next[x][y] = Xblank;
2716 Next[x][y+1] = Xstone_fall;
2720 Cave[x][y] = Xstone;
2721 Next[x][y] = Xstone;
2726 static void Lstone_fall(int x, int y)
2728 switch (Cave[x][y+1])
2738 Cave[x][y] = Ystone_sB;
2739 if (Cave[x+1][y] == Xblank)
2740 Cave[x+1][y] = Xacid_splash_e;
2741 if (Cave[x-1][y] == Xblank)
2742 Cave[x-1][y] = Xacid_splash_w;
2743 Next[x][y] = Xblank;
2744 play_element_sound(x, y, SOUND_acid, Xacid_1);
2748 case Xacid_splash_e:
2749 case Xacid_splash_w:
2751 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
2761 Cave[x][y] = Ystone_sB;
2762 Cave[x][y+1] = Ystone_s;
2763 Next[x][y] = Xblank;
2764 Next[x][y+1] = Xstone_fall;
2769 Cave[x][y+1] = Ynut_stone;
2770 Next[x][y] = Xstone;
2771 Next[x][y+1] = Xemerald;
2772 play_element_sound(x, y, SOUND_crack, Xnut);
2773 score += lev.nut_score;
2784 Cave[x][y] = Ystone_sB;
2785 Cave[x][y+1] = Ybug_stone;
2786 Next[x][y+1] = Znormal;
2787 Boom[x-1][y] = Xemerald;
2788 Boom[x][y] = Xemerald;
2789 Boom[x+1][y] = Xemerald;
2790 Boom[x-1][y+1] = Xemerald;
2791 Boom[x][y+1] = Xdiamond;
2792 Boom[x+1][y+1] = Xemerald;
2793 Boom[x-1][y+2] = Xemerald;
2794 Boom[x][y+2] = Xemerald;
2795 Boom[x+1][y+2] = Xemerald;
2796 #if PLAY_ELEMENT_SOUND
2797 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2799 score += lev.bug_score;
2810 Cave[x][y] = Ystone_sB;
2811 Cave[x][y+1] = Ytank_stone;
2812 Next[x][y+1] = Znormal;
2813 Boom[x-1][y] = Xblank;
2814 Boom[x][y] = Xblank;
2815 Boom[x+1][y] = Xblank;
2816 Boom[x-1][y+1] = Xblank;
2817 Boom[x][y+1] = Xblank;
2818 Boom[x+1][y+1] = Xblank;
2819 Boom[x-1][y+2] = Xblank;
2820 Boom[x][y+2] = Xblank;
2821 Boom[x+1][y+2] = Xblank;
2822 #if PLAY_ELEMENT_SOUND
2823 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2825 score += lev.tank_score;
2831 switch (Cave[x+1][y+1])
2834 case Xacid_splash_e:
2835 case Xacid_splash_w:
2838 Cave[x][y+1] = Xspring_e;
2842 Cave[x][y+1] = Xspring_w;
2848 switch (Cave[x-1][y+1])
2851 case Xacid_splash_e:
2852 case Xacid_splash_w:
2855 Cave[x][y+1] = Xspring_w;
2858 Cave[x][y+1] = Xspring_e;
2863 Next[x][y] = Xstone;
2870 Cave[x][y] = Ystone_sB;
2871 Cave[x][y+1] = Yeater_stone;
2872 Next[x][y+1] = Znormal;
2873 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
2874 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
2875 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
2876 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
2877 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
2878 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
2879 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
2880 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
2881 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
2882 #if PLAY_ELEMENT_SOUND
2883 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2885 lev.eater_pos = (lev.eater_pos + 1) & 7;
2886 score += lev.eater_score;
2891 Cave[x][y] = Ystone_sB;
2892 Cave[x][y+1] = Yalien_stone;
2893 Next[x][y+1] = Znormal;
2894 Boom[x-1][y] = Xblank;
2895 Boom[x][y] = Xblank;
2896 Boom[x+1][y] = Xblank;
2897 Boom[x-1][y+1] = Xblank;
2898 Boom[x][y+1] = Xblank;
2899 Boom[x+1][y+1] = Xblank;
2900 Boom[x-1][y+2] = Xblank;
2901 Boom[x][y+2] = Xblank;
2902 Boom[x+1][y+2] = Xblank;
2903 #if PLAY_ELEMENT_SOUND
2904 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2906 score += lev.alien_score;
2910 case Xdiamond_pause:
2911 switch (Cave[x][y+2])
2914 case Xacid_splash_e:
2915 case Xacid_splash_w:
2959 Next[x][y] = Xstone;
2960 play_element_sound(x, y, SOUND_stone, Xstone);
2964 Cave[x][y] = Ystone_sB;
2965 Cave[x][y+1] = Ydiamond_stone;
2966 Next[x][y] = Xblank;
2967 Next[x][y+1] = Xstone_pause;
2968 play_element_sound(x, y, SOUND_squash, Xdiamond);
2973 Cave[x][y+1] = Ybomb_blank;
2974 Next[x][y+1] = Znormal;
2975 Boom[x-1][y] = Xblank;
2976 Boom[x][y] = Xblank;
2977 Boom[x+1][y] = Xblank;
2978 Boom[x-1][y+1] = Xblank;
2979 Boom[x][y+1] = Xblank;
2980 Boom[x+1][y+1] = Xblank;
2981 Boom[x-1][y+2] = Xblank;
2982 Boom[x][y+2] = Xblank;
2983 Boom[x+1][y+2] = Xblank;
2984 #if PLAY_ELEMENT_SOUND
2985 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2990 if (lev.wonderwall_time)
2992 lev.wonderwall_state = 1;
2993 Cave[x][y] = Ystone_sB;
2995 if (tab_blank[Cave[x][y+2]])
2997 Cave[x][y+2] = Yemerald_s;
2998 Next[x][y+2] = Xemerald_fall;
3001 Next[x][y] = Xblank;
3002 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
3007 Cave[x][y] = Xstone;
3008 Next[x][y] = Xstone;
3009 play_element_sound(x, y, SOUND_stone, Xstone);
3014 static void Lbomb(int x, int y)
3016 switch (Cave[x][y+1])
3026 Cave[x][y] = Ybomb_sB;
3027 if (Cave[x+1][y] == Xblank)
3028 Cave[x+1][y] = Xacid_splash_e;
3029 if (Cave[x-1][y] == Xblank)
3030 Cave[x-1][y] = Xacid_splash_w;
3031 Next[x][y] = Xblank;
3032 play_element_sound(x, y, SOUND_acid, Xacid_1);
3036 case Xacid_splash_e:
3037 case Xacid_splash_w:
3038 Cave[x][y] = Ybomb_sB;
3039 Cave[x][y+1] = Ybomb_s;
3040 Next[x][y] = Xblank;
3041 Next[x][y+1] = Xbomb_fall;
3060 case Xemerald_pause:
3062 case Xdiamond_pause:
3090 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3092 Cave[x][y] = Ybomb_eB;
3093 Cave[x+1][y] = Ybomb_e;
3094 Next[x][y] = Xblank;
3095 Next[x+1][y] = Xbomb_pause;
3099 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3101 Cave[x][y] = Ybomb_wB;
3102 Cave[x-1][y] = Ybomb_w;
3103 Next[x][y] = Xblank;
3104 Next[x-1][y] = Xbomb_pause;
3110 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3112 Cave[x][y] = Ybomb_wB;
3113 Cave[x-1][y] = Ybomb_w;
3114 Next[x][y] = Xblank;
3115 Next[x-1][y] = Xbomb_pause;
3119 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3121 Cave[x][y] = Ybomb_eB;
3122 Cave[x+1][y] = Ybomb_e;
3123 Next[x][y] = Xblank;
3124 Next[x+1][y] = Xbomb_pause;
3131 static void Lbomb_pause(int x, int y)
3133 switch (Cave[x][y+1])
3143 Cave[x][y] = Ybomb_sB;
3144 if (Cave[x+1][y] == Xblank)
3145 Cave[x+1][y] = Xacid_splash_e;
3146 if (Cave[x-1][y] == Xblank)
3147 Cave[x-1][y] = Xacid_splash_w;
3148 Next[x][y] = Xblank;
3149 play_element_sound(x, y, SOUND_acid, Xacid_1);
3153 case Xacid_splash_e:
3154 case Xacid_splash_w:
3155 Cave[x][y] = Ybomb_sB;
3156 Cave[x][y+1] = Ybomb_s;
3157 Next[x][y] = Xblank;
3158 Next[x][y+1] = Xbomb_fall;
3168 static void Lbomb_fall(int x, int y)
3170 switch (Cave[x][y+1])
3180 Cave[x][y] = Ybomb_sB;
3181 if (Cave[x+1][y] == Xblank)
3182 Cave[x+1][y] = Xacid_splash_e;
3183 if (Cave[x-1][y] == Xblank)
3184 Cave[x-1][y] = Xacid_splash_w;
3185 Next[x][y] = Xblank;
3186 play_element_sound(x, y, SOUND_acid, Xacid_1);
3190 case Xacid_splash_e:
3191 case Xacid_splash_w:
3192 Cave[x][y] = Ybomb_sB;
3193 Cave[x][y+1] = Ybomb_s;
3194 Next[x][y] = Xblank;
3195 Next[x][y+1] = Xbomb_fall;
3199 Cave[x][y] = Ybomb_blank;
3200 Next[x][y] = Znormal;
3201 Boom[x-1][y-1] = Xblank;
3202 Boom[x][y-1] = Xblank;
3203 Boom[x+1][y-1] = Xblank;
3204 Boom[x-1][y] = Xblank;
3205 Boom[x][y] = Xblank;
3206 Boom[x+1][y] = Xblank;
3207 Boom[x-1][y+1] = Xblank;
3208 Boom[x][y+1] = Xblank;
3209 Boom[x+1][y+1] = Xblank;
3210 #if PLAY_ELEMENT_SOUND
3211 play_element_sound(x, y, SOUND_boom, Xbomb_fall);
3217 static void Lnut(int x, int y)
3219 switch (Cave[x][y+1])
3229 Cave[x][y] = Ynut_sB;
3230 if (Cave[x+1][y] == Xblank)
3231 Cave[x+1][y] = Xacid_splash_e;
3232 if (Cave[x-1][y] == Xblank)
3233 Cave[x-1][y] = Xacid_splash_w;
3234 Next[x][y] = Xblank;
3235 play_element_sound(x, y, SOUND_acid, Xacid_1);
3239 case Xacid_splash_e:
3240 case Xacid_splash_w:
3241 Cave[x][y] = Ynut_sB;
3242 Cave[x][y+1] = Ynut_s;
3243 Next[x][y] = Xblank;
3244 Next[x][y+1] = Xnut_fall;
3263 case Xemerald_pause:
3265 case Xdiamond_pause:
3293 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3295 Cave[x][y] = Ynut_eB;
3296 Cave[x+1][y] = Ynut_e;
3297 Next[x][y] = Xblank;
3298 Next[x+1][y] = Xnut_pause;
3302 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3304 Cave[x][y] = Ynut_wB;
3305 Cave[x-1][y] = Ynut_w;
3306 Next[x][y] = Xblank;
3307 Next[x-1][y] = Xnut_pause;
3313 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3315 Cave[x][y] = Ynut_wB;
3316 Cave[x-1][y] = Ynut_w;
3317 Next[x][y] = Xblank;
3318 Next[x-1][y] = Xnut_pause;
3322 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3324 Cave[x][y] = Ynut_eB;
3325 Cave[x+1][y] = Ynut_e;
3326 Next[x][y] = Xblank;
3327 Next[x+1][y] = Xnut_pause;
3334 static void Lnut_pause(int x, int y)
3336 switch (Cave[x][y+1])
3346 Cave[x][y] = Ynut_sB;
3347 if (Cave[x+1][y] == Xblank)
3348 Cave[x+1][y] = Xacid_splash_e;
3349 if (Cave[x-1][y] == Xblank)
3350 Cave[x-1][y] = Xacid_splash_w;
3351 Next[x][y] = Xblank;
3352 play_element_sound(x, y, SOUND_acid, Xacid_1);
3356 case Xacid_splash_e:
3357 case Xacid_splash_w:
3358 Cave[x][y] = Ynut_sB;
3359 Cave[x][y+1] = Ynut_s;
3360 Next[x][y] = Xblank;
3361 Next[x][y+1] = Xnut_fall;
3371 static void Lnut_fall(int x, int y)
3373 switch (Cave[x][y+1])
3383 Cave[x][y] = Ynut_sB;
3384 if (Cave[x+1][y] == Xblank)
3385 Cave[x+1][y] = Xacid_splash_e;
3386 if (Cave[x-1][y] == Xblank)
3387 Cave[x-1][y] = Xacid_splash_w;
3388 Next[x][y] = Xblank;
3389 play_element_sound(x, y, SOUND_acid, Xacid_1);
3393 case Xacid_splash_e:
3394 case Xacid_splash_w:
3396 Cave[x][y] = Ynut_sB;
3397 Cave[x][y+1] = Ynut_s;
3398 Next[x][y] = Xblank;
3399 Next[x][y+1] = Xnut_fall;
3405 play_element_sound(x, y, SOUND_nut, Xnut);
3410 static void Lspring(int x, int y)
3412 switch (Cave[x][y+1])
3422 Cave[x][y] = Yspring_sB;
3423 if (Cave[x+1][y] == Xblank)
3424 Cave[x+1][y] = Xacid_splash_e;
3425 if (Cave[x-1][y] == Xblank)
3426 Cave[x-1][y] = Xacid_splash_w;
3427 Next[x][y] = Xblank;
3428 play_element_sound(x, y, SOUND_acid, Xacid_1);
3432 case Xacid_splash_e:
3433 case Xacid_splash_w:
3436 Cave[x][y] = Yspring_sB;
3437 Cave[x][y+1] = Yspring_s;
3438 Next[x][y] = Xblank;
3439 Next[x][y+1] = Xspring_fall;
3458 case Xemerald_pause:
3460 case Xdiamond_pause:
3488 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3490 Cave[x][y] = Yspring_eB;
3491 Cave[x+1][y] = Yspring_e;
3492 if (Cave[x][y+1] == Xbumper)
3493 Cave[x][y+1] = XbumperB;
3494 Next[x][y] = Xblank;
3497 Next[x+1][y] = Xspring_e;
3499 Next[x+1][y] = Xspring_pause;
3504 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3506 Cave[x][y] = Yspring_wB;
3507 Cave[x-1][y] = Yspring_w;
3508 if (Cave[x][y+1] == Xbumper)
3509 Cave[x][y+1] = XbumperB;
3510 Next[x][y] = Xblank;
3513 Next[x-1][y] = Xspring_w;
3515 Next[x-1][y] = Xspring_pause;
3522 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3524 Cave[x][y] = Yspring_wB;
3525 Cave[x-1][y] = Yspring_w;
3526 if (Cave[x][y+1] == Xbumper)
3527 Cave[x][y+1] = XbumperB;
3528 Next[x][y] = Xblank;
3531 Next[x-1][y] = Xspring_w;
3533 Next[x-1][y] = Xspring_pause;
3538 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3540 Cave[x][y] = Yspring_eB;
3541 Cave[x+1][y] = Yspring_e;
3542 if (Cave[x][y+1] == Xbumper)
3543 Cave[x][y+1] = XbumperB;
3544 Next[x][y] = Xblank;
3547 Next[x+1][y] = Xspring_e;
3549 Next[x+1][y] = Xspring_pause;
3557 static void Lspring_pause(int x, int y)
3559 switch (Cave[x][y+1])
3569 Cave[x][y] = Yspring_sB;
3570 if (Cave[x+1][y] == Xblank)
3571 Cave[x+1][y] = Xacid_splash_e;
3572 if (Cave[x-1][y] == Xblank)
3573 Cave[x-1][y] = Xacid_splash_w;
3574 Next[x][y] = Xblank;
3575 play_element_sound(x, y, SOUND_acid, Xacid_1);
3579 case Xacid_splash_e:
3580 case Xacid_splash_w:
3581 Cave[x][y] = Yspring_sB;
3582 Cave[x][y+1] = Yspring_s;
3583 Next[x][y] = Xblank;
3584 Next[x][y+1] = Xspring_fall;
3588 Cave[x][y] = Xspring;
3589 Next[x][y] = Xspring;
3594 static void Lspring_e(int x, int y)
3596 switch (Cave[x][y+1])
3606 Cave[x][y] = Yspring_sB;
3607 if (Cave[x+1][y] == Xblank)
3608 Cave[x+1][y] = Xacid_splash_e;
3609 if (Cave[x-1][y] == Xblank)
3610 Cave[x-1][y] = Xacid_splash_w;
3611 Next[x][y] = Xblank;
3612 play_element_sound(x, y, SOUND_acid, Xacid_1);
3616 case Xacid_splash_e:
3617 case Xacid_splash_w:
3618 Cave[x][y] = Yspring_sB;
3619 Cave[x][y+1] = Yspring_s;
3620 Next[x][y] = Xblank;
3621 Next[x][y+1] = Xspring_fall;
3625 Cave[x][y+1] = XbumperB;
3628 switch (Cave[x+1][y])
3638 Cave[x][y] = Yspring_eB;
3639 if (Cave[x+2][y-1] == Xblank)
3640 Cave[x+2][y-1] = Xacid_splash_e;
3641 if (Cave[x][y-1] == Xblank)
3642 Cave[x][y-1] = Xacid_splash_w;
3643 Next[x][y] = Xblank;
3644 play_element_sound(x, y, SOUND_acid, Xacid_1);
3648 case Xacid_splash_e:
3649 case Xacid_splash_w:
3654 Cave[x][y] = Yspring_eB;
3655 Cave[x+1][y] = Yspring_e;
3656 Next[x][y] = Xblank;
3657 Next[x+1][y] = Xspring_e;
3666 Cave[x][y] = Yspring_alien_eB;
3667 Cave[x+1][y] = Yspring_alien_e;
3668 Next[x][y] = Xblank;
3669 Next[x+1][y] = Xspring_e;
3670 play_element_sound(x, y, SOUND_slurp, Xalien);
3671 score += lev.slurp_score;
3676 Cave[x+1][y] = XbumperB;
3677 Next[x][y] = Xspring_w;
3678 play_element_sound(x, y, SOUND_spring, Xspring);
3682 Cave[x][y] = Xspring;
3683 Next[x][y] = Xspring;
3684 play_element_sound(x, y, SOUND_spring, Xspring);
3689 static void Lspring_w(int x, int y)
3691 switch (Cave[x][y+1])
3701 Cave[x][y] = Yspring_sB;
3702 if (Cave[x+1][y] == Xblank)
3703 Cave[x+1][y] = Xacid_splash_e;
3704 if (Cave[x-1][y] == Xblank)
3705 Cave[x-1][y] = Xacid_splash_w;
3706 Next[x][y] = Xblank;
3707 play_element_sound(x, y, SOUND_acid, Xacid_1);
3711 case Xacid_splash_e:
3712 case Xacid_splash_w:
3713 Cave[x][y] = Yspring_sB;
3714 Cave[x][y+1] = Yspring_s;
3715 Next[x][y] = Xblank;
3716 Next[x][y+1] = Xspring_fall;
3720 Cave[x][y+1] = XbumperB;
3723 switch (Cave[x-1][y])
3733 Cave[x][y] = Yspring_wB;
3734 if (Cave[x][y-1] == Xblank)
3735 Cave[x][y-1] = Xacid_splash_e;
3736 if (Cave[x-2][y-1] == Xblank)
3737 Cave[x-2][y-1] = Xacid_splash_w;
3738 Next[x][y] = Xblank;
3739 play_element_sound(x, y, SOUND_acid, Xacid_1);
3743 case Xacid_splash_e:
3744 case Xacid_splash_w:
3749 Cave[x][y] = Yspring_wB;
3750 Cave[x-1][y] = Yspring_w;
3751 Next[x][y] = Xblank;
3752 Next[x-1][y] = Xspring_w;
3761 Cave[x][y] = Yspring_alien_wB;
3762 Cave[x-1][y] = Yspring_alien_w;
3763 Next[x][y] = Xblank;
3764 Next[x-1][y] = Xspring_w;
3765 play_element_sound(x, y, SOUND_slurp, Xalien);
3766 score += lev.slurp_score;
3771 Cave[x-1][y] = XbumperB;
3772 Next[x][y] = Xspring_e;
3773 play_element_sound(x, y, SOUND_spring, Xspring);
3777 Cave[x][y] = Xspring;
3778 Next[x][y] = Xspring;
3779 play_element_sound(x, y, SOUND_spring, Xspring);
3784 static void Lspring_fall(int x, int y)
3786 switch (Cave[x][y+1])
3796 Cave[x][y] = Yspring_sB;
3797 if (Cave[x+1][y] == Xblank)
3798 Cave[x+1][y] = Xacid_splash_e;
3799 if (Cave[x-1][y] == Xblank)
3800 Cave[x-1][y] = Xacid_splash_w;
3801 Next[x][y] = Xblank;
3802 play_element_sound(x, y, SOUND_acid, Xacid_1);
3806 case Xacid_splash_e:
3807 case Xacid_splash_w:
3809 Cave[x][y] = Yspring_sB;
3810 Cave[x][y+1] = Yspring_s;
3811 Next[x][y] = Xblank;
3812 Next[x][y+1] = Xspring_fall;
3817 Cave[x][y+1] = Ybomb_blank;
3818 Next[x][y+1] = Znormal;
3819 Boom[x-1][y] = Xblank;
3820 Boom[x][y] = Xblank;
3821 Boom[x+1][y] = Xblank;
3822 Boom[x-1][y+1] = Xblank;
3823 Boom[x][y+1] = Xblank;
3824 Boom[x+1][y+1] = Xblank;
3825 Boom[x-1][y+2] = Xblank;
3826 Boom[x][y+2] = Xblank;
3827 Boom[x+1][y+2] = Xblank;
3828 #if PLAY_ELEMENT_SOUND
3829 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3841 Cave[x][y] = Yspring_sB;
3842 Cave[x][y+1] = Ybug_spring;
3843 Next[x][y+1] = Znormal;
3844 Boom[x-1][y] = Xemerald;
3845 Boom[x][y] = Xemerald;
3846 Boom[x+1][y] = Xemerald;
3847 Boom[x-1][y+1] = Xemerald;
3848 Boom[x][y+1] = Xdiamond;
3849 Boom[x+1][y+1] = Xemerald;
3850 Boom[x-1][y+2] = Xemerald;
3851 Boom[x][y+2] = Xemerald;
3852 Boom[x+1][y+2] = Xemerald;
3853 #if PLAY_ELEMENT_SOUND
3854 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3856 score += lev.bug_score;
3867 Cave[x][y] = Yspring_sB;
3868 Cave[x][y+1] = Ytank_spring;
3869 Next[x][y+1] = Znormal;
3870 Boom[x-1][y] = Xblank;
3871 Boom[x][y] = Xblank;
3872 Boom[x+1][y] = Xblank;
3873 Boom[x-1][y+1] = Xblank;
3874 Boom[x][y+1] = Xblank;
3875 Boom[x+1][y+1] = Xblank;
3876 Boom[x-1][y+2] = Xblank;
3877 Boom[x][y+2] = Xblank;
3878 Boom[x+1][y+2] = Xblank;
3879 #if PLAY_ELEMENT_SOUND
3880 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3882 score += lev.tank_score;
3889 Cave[x][y] = Yspring_sB;
3890 Cave[x][y+1] = Yeater_spring;
3891 Next[x][y+1] = Znormal;
3892 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
3893 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
3894 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
3895 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
3896 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
3897 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
3898 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
3899 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
3900 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
3901 #if PLAY_ELEMENT_SOUND
3902 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3904 lev.eater_pos = (lev.eater_pos + 1) & 7;
3905 score += lev.eater_score;
3910 Cave[x][y] = Yspring_sB;
3911 Cave[x][y+1] = Yalien_spring;
3912 Next[x][y+1] = Znormal;
3913 Boom[x-1][y] = Xblank;
3914 Boom[x][y] = Xblank;
3915 Boom[x+1][y] = Xblank;
3916 Boom[x-1][y+1] = Xblank;
3917 Boom[x][y+1] = Xblank;
3918 Boom[x+1][y+1] = Xblank;
3919 Boom[x-1][y+2] = Xblank;
3920 Boom[x][y+2] = Xblank;
3921 Boom[x+1][y+2] = Xblank;
3922 #if PLAY_ELEMENT_SOUND
3923 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3925 score += lev.alien_score;
3929 Cave[x][y] = Xspring;
3930 Next[x][y] = Xspring;
3931 play_element_sound(x, y, SOUND_spring, Xspring);
3936 static void Lpush_emerald_e(int x, int y)
3938 switch (Cave[x+1][y])
3948 Cave[x][y] = Xemerald;
3949 Next[x][y] = Xemerald;
3953 Cave[x][y] = Yemerald_eB;
3954 Cave[x+1][y] = Yemerald_e;
3955 Next[x][y] = Xblank;
3956 Next[x+1][y] = Xemerald_pause;
3961 static void Lpush_emerald_w(int x, int y)
3963 switch (Cave[x-1][y])
3973 Cave[x][y] = Xemerald;
3974 Next[x][y] = Xemerald;
3978 Cave[x][y] = Yemerald_wB;
3979 Cave[x-1][y] = Yemerald_w;
3980 Next[x][y] = Xblank;
3981 Next[x-1][y] = Xemerald_pause;
3986 static void Lpush_diamond_e(int x, int y)
3988 switch (Cave[x+1][y])
3998 Cave[x][y] = Xdiamond;
3999 Next[x][y] = Xdiamond;
4003 Cave[x][y] = Ydiamond_eB;
4004 Cave[x+1][y] = Ydiamond_e;
4005 Next[x][y] = Xblank;
4006 Next[x+1][y] = Xdiamond_pause;
4011 static void Lpush_diamond_w(int x, int y)
4013 switch (Cave[x-1][y])
4023 Cave[x][y] = Xdiamond;
4024 Next[x][y] = Xdiamond;
4028 Cave[x][y] = Ydiamond_wB;
4029 Cave[x-1][y] = Ydiamond_w;
4030 Next[x][y] = Xblank;
4031 Next[x-1][y] = Xdiamond_pause;
4036 static void Lpush_stone_e(int x, int y)
4038 switch (Cave[x+1][y])
4048 Cave[x][y] = Xstone;
4049 Next[x][y] = Xstone;
4053 Cave[x][y] = Ystone_eB;
4054 Cave[x+1][y] = Ystone_e;
4055 Next[x][y] = Xblank;
4056 Next[x+1][y] = Xstone_pause;
4061 static void Lpush_stone_w(int x, int y)
4063 switch (Cave[x-1][y])
4073 Cave[x][y] = Xstone;
4074 Next[x][y] = Xstone;
4078 Cave[x][y] = Ystone_wB;
4079 Cave[x-1][y] = Ystone_w;
4080 Next[x][y] = Xblank;
4081 Next[x-1][y] = Xstone_pause;
4086 static void Lpush_bomb_e(int x, int y)
4088 switch (Cave[x+1][y])
4103 Cave[x][y] = Ybomb_eB;
4104 Cave[x+1][y] = Ybomb_e;
4105 Next[x][y] = Xblank;
4106 Next[x+1][y] = Xbomb_pause;
4111 static void Lpush_bomb_w(int x, int y)
4113 switch (Cave[x-1][y])
4128 Cave[x][y] = Ybomb_wB;
4129 Cave[x-1][y] = Ybomb_w;
4130 Next[x][y] = Xblank;
4131 Next[x-1][y] = Xbomb_pause;
4136 static void Lpush_nut_e(int x, int y)
4138 switch (Cave[x+1][y])
4153 Cave[x][y] = Ynut_eB;
4154 Cave[x+1][y] = Ynut_e;
4155 Next[x][y] = Xblank;
4156 Next[x+1][y] = Xnut_pause;
4161 static void Lpush_nut_w(int x, int y)
4163 switch (Cave[x-1][y])
4178 Cave[x][y] = Ynut_wB;
4179 Cave[x-1][y] = Ynut_w;
4180 Next[x][y] = Xblank;
4181 Next[x-1][y] = Xnut_pause;
4186 static void Lpush_spring_e(int x, int y)
4188 switch (Cave[x+1][y])
4198 Cave[x][y] = Xspring;
4199 Next[x][y] = Xspring;
4203 Cave[x][y] = Yspring_eB;
4204 Cave[x+1][y] = Yspring_e;
4205 Next[x][y] = Xblank;
4206 Next[x+1][y] = Xspring_e;
4211 static void Lpush_spring_w(int x, int y)
4213 switch (Cave[x-1][y])
4223 Cave[x][y] = Xspring;
4224 Next[x][y] = Xspring;
4228 Cave[x][y] = Yspring_wB;
4229 Cave[x-1][y] = Yspring_w;
4230 Next[x][y] = Xblank;
4231 Next[x-1][y] = Xspring_w;
4236 static void Ldynamite_1(int x, int y)
4238 play_element_sound(x, y, SOUND_tick, Xdynamite_1);
4239 Next[x][y] = Xdynamite_2;
4242 static void Ldynamite_2(int x, int y)
4244 play_element_sound(x, y, SOUND_tick, Xdynamite_2);
4245 Next[x][y] = Xdynamite_3;
4248 static void Ldynamite_3(int x, int y)
4250 play_element_sound(x, y, SOUND_tick, Xdynamite_3);
4251 Next[x][y] = Xdynamite_4;
4254 static void Ldynamite_4(int x, int y)
4256 play_element_sound(x, y, SOUND_tick, Xdynamite_4);
4257 Next[x][y] = Zdynamite;
4258 Boom[x-1][y-1] = Xblank;
4259 Boom[x][y-1] = Xblank;
4260 Boom[x+1][y-1] = Xblank;
4261 Boom[x-1][y] = Xblank;
4262 Boom[x][y] = Xblank;
4263 Boom[x+1][y] = Xblank;
4264 Boom[x-1][y+1] = Xblank;
4265 Boom[x][y+1] = Xblank;
4266 Boom[x+1][y+1] = Xblank;
4269 static void Lfake_door_1(int x, int y)
4271 if (lev.magnify_cnt)
4272 Cave[x][y] = Xdoor_1;
4275 static void Lfake_door_2(int x, int y)
4277 if (lev.magnify_cnt)
4278 Cave[x][y] = Xdoor_2;
4281 static void Lfake_door_3(int x, int y)
4283 if (lev.magnify_cnt)
4284 Cave[x][y] = Xdoor_3;
4287 static void Lfake_door_4(int x, int y)
4289 if (lev.magnify_cnt)
4290 Cave[x][y] = Xdoor_4;
4293 static void Lfake_door_5(int x, int y)
4295 if (lev.magnify_cnt)
4296 Cave[x][y] = Xdoor_5;
4299 static void Lfake_door_6(int x, int y)
4301 if (lev.magnify_cnt)
4302 Cave[x][y] = Xdoor_6;
4305 static void Lfake_door_7(int x, int y)
4307 if (lev.magnify_cnt)
4308 Cave[x][y] = Xdoor_7;
4311 static void Lfake_door_8(int x, int y)
4313 if (lev.magnify_cnt)
4314 Cave[x][y] = Xdoor_8;
4317 static void Lballoon(int x, int y)
4319 if (lev.wind_cnt == 0)
4322 switch (lev.wind_direction)
4325 switch (Cave[x][y-1])
4335 Cave[x][y] = Yballoon_nB;
4336 if (Cave[x+1][y-2] == Xblank)
4337 Cave[x+1][y-2] = Xacid_splash_e;
4338 if (Cave[x-1][y-2] == Xblank)
4339 Cave[x-1][y-2] = Xacid_splash_w;
4340 Next[x][y] = Xblank;
4341 play_element_sound(x, y, SOUND_acid, Xacid_1);
4345 case Xacid_splash_e:
4346 case Xacid_splash_w:
4347 Cave[x][y] = Yballoon_nB;
4348 Cave[x][y-1] = Yballoon_n;
4349 Next[x][y] = Xblank;
4350 Next[x][y-1] = Xballoon;
4356 switch (Cave[x+1][y])
4366 Cave[x][y] = Yballoon_eB;
4367 if (Cave[x+2][y-1] == Xblank)
4368 Cave[x+2][y-1] = Xacid_splash_e;
4369 if (Cave[x][y-1] == Xblank)
4370 Cave[x][y-1] = Xacid_splash_w;
4371 Next[x][y] = Xblank;
4372 play_element_sound(x, y, SOUND_acid, Xacid_1);
4376 case Xacid_splash_e:
4377 case Xacid_splash_w:
4378 Cave[x][y] = Yballoon_eB;
4379 Cave[x+1][y] = Yballoon_e;
4380 Next[x][y] = Xblank;
4381 Next[x+1][y] = Xballoon;
4387 switch (Cave[x][y+1])
4397 Cave[x][y] = Yballoon_sB;
4398 if (Cave[x+1][y] == Xblank)
4399 Cave[x+1][y] = Xacid_splash_e;
4400 if (Cave[x-1][y] == Xblank)
4401 Cave[x-1][y] = Xacid_splash_w;
4402 Next[x][y] = Xblank;
4403 play_element_sound(x, y, SOUND_acid, Xacid_1);
4407 case Xacid_splash_e:
4408 case Xacid_splash_w:
4409 Cave[x][y] = Yballoon_sB;
4410 Cave[x][y+1] = Yballoon_s;
4411 Next[x][y] = Xblank;
4412 Next[x][y+1] = Xballoon;
4418 switch (Cave[x-1][y])
4428 Cave[x][y] = Yballoon_wB;
4429 if (Cave[x][y-1] == Xblank)
4430 Cave[x][y-1] = Xacid_splash_e;
4431 if (Cave[x-2][y-1] == Xblank)
4432 Cave[x-2][y-1] = Xacid_splash_w;
4433 Next[x][y] = Xblank;
4434 play_element_sound(x, y, SOUND_acid, Xacid_1);
4438 case Xacid_splash_e:
4439 case Xacid_splash_w:
4440 Cave[x][y] = Yballoon_wB;
4441 Cave[x-1][y] = Yballoon_w;
4442 Next[x][y] = Xblank;
4443 Next[x-1][y] = Xballoon;
4450 static void Lball_common(int x, int y)
4452 play_element_sound(x, y, SOUND_ball, Xball_1);
4454 if (lev.ball_random)
4459 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
4460 tab_blank[Cave[x-1][y-1]])
4462 Cave[x-1][y-1] = Yball_blank;
4463 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
4468 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
4469 tab_blank[Cave[x][y-1]])
4471 Cave[x][y-1] = Yball_blank;
4472 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
4477 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
4478 tab_blank[Cave[x+1][y-1]])
4480 Cave[x+1][y-1] = Yball_blank;
4481 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
4486 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
4487 tab_blank[Cave[x-1][y]])
4489 Cave[x-1][y] = Yball_blank;
4490 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
4495 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
4496 tab_blank[Cave[x+1][y]])
4498 Cave[x+1][y] = Yball_blank;
4499 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
4504 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
4505 tab_blank[Cave[x-1][y+1]])
4507 Cave[x-1][y+1] = Yball_blank;
4508 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
4513 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
4514 tab_blank[Cave[x][y+1]])
4516 Cave[x][y+1] = Yball_blank;
4517 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
4522 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
4523 tab_blank[Cave[x+1][y+1]])
4525 Cave[x+1][y+1] = Yball_blank;
4526 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
4533 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
4534 tab_blank[Cave[x-1][y-1]])
4536 Cave[x-1][y-1] = Yball_blank;
4537 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
4540 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
4541 tab_blank[Cave[x][y-1]])
4543 Cave[x][y-1] = Yball_blank;
4544 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
4547 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
4548 tab_blank[Cave[x+1][y-1]])
4550 Cave[x+1][y-1] = Yball_blank;
4551 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
4554 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
4555 tab_blank[Cave[x-1][y]])
4557 Cave[x-1][y] = Yball_blank;
4558 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
4561 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
4562 tab_blank[Cave[x+1][y]])
4564 Cave[x+1][y] = Yball_blank;
4565 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
4568 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
4569 tab_blank[Cave[x-1][y+1]])
4571 Cave[x-1][y+1] = Yball_blank;
4572 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
4575 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
4576 tab_blank[Cave[x][y+1]])
4578 Cave[x][y+1] = Yball_blank;
4579 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
4582 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
4583 tab_blank[Cave[x+1][y+1]])
4585 Cave[x+1][y+1] = Yball_blank;
4586 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
4590 lev.ball_pos = (lev.ball_pos + 1) % lev.num_ball_arrays;
4593 static void Lball_1(int x, int y)
4595 if (lev.ball_state == 0)
4598 Cave[x][y] = Yball_1;
4599 Next[x][y] = Xball_2;
4606 static void Lball_2(int x, int y)
4608 if (lev.ball_state == 0)
4611 Cave[x][y] = Yball_2;
4612 Next[x][y] = Xball_1;
4619 static void Ldrip(int x, int y)
4621 Next[x][y] = Xdrip_fall;
4624 static void Ldrip_fall(int x, int y)
4628 switch (Cave[x][y+1])
4638 Cave[x][y] = Ydrip_1_sB;
4639 if (Cave[x+1][y] == Xblank)
4640 Cave[x+1][y] = Xacid_splash_e;
4641 if (Cave[x-1][y] == Xblank)
4642 Cave[x-1][y] = Xacid_splash_w;
4643 Next[x][y] = Xdrip_stretchB;
4644 play_element_sound(x, y, SOUND_acid, Xacid_1);
4648 case Xacid_splash_e:
4649 case Xacid_splash_w:
4653 Cave[x][y] = Ydrip_1_sB;
4654 Cave[x][y+1] = Ydrip_1_s;
4655 Next[x][y] = Xdrip_stretchB;
4656 Next[x][y+1] = Xdrip_stretch;
4662 case 0: temp = Xamoeba_1; break;
4663 case 1: temp = Xamoeba_2; break;
4664 case 2: temp = Xamoeba_3; break;
4665 case 3: temp = Xamoeba_4; break;
4666 case 4: temp = Xamoeba_5; break;
4667 case 5: temp = Xamoeba_6; break;
4668 case 6: temp = Xamoeba_7; break;
4669 case 7: temp = Xamoeba_8; break;
4674 play_element_sound(x, y, SOUND_drip, Xdrip_fall);
4679 static void Ldrip_stretch(int x, int y)
4681 Cave[x][y] = Ydrip_2_s;
4682 Next[x][y] = Xdrip_fall;
4685 static void Ldrip_stretchB(int x, int y)
4687 Cave[x][y] = Ydrip_2_sB;
4688 Next[x][y] = Xblank;
4691 static void Lwonderwall(int x, int y)
4693 if (lev.wonderwall_time && lev.wonderwall_state)
4695 Cave[x][y] = XwonderwallB;
4696 play_element_sound(x, y, SOUND_wonder, Xwonderwall);
4700 static void Lwheel(int x, int y)
4702 if (lev.wheel_cnt && x == lev.wheel_x && y == lev.wheel_y)
4703 Cave[x][y] = XwheelB;
4706 static void Lswitch(int x, int y)
4709 Cave[x][y] = XswitchB;
4712 static void Lfake_blank(int x, int y)
4715 Cave[x][y] = Xfake_blankB;
4718 static void Lfake_grass(int x, int y)
4720 if (lev.magnify_cnt)
4721 Cave[x][y] = Xfake_grassB;
4724 static void Lfake_amoeba(int x, int y)
4727 Cave[x][y] = Xfake_amoebaB;
4730 static void Lsand_stone(int x, int y)
4732 switch (Cave[x][y+1])
4742 Cave[x][y] = Xsand_stonesand_quickout_1;
4743 if (Cave[x+1][y] == Xblank)
4744 Cave[x+1][y] = Xacid_splash_e;
4745 if (Cave[x-1][y] == Xblank)
4746 Cave[x-1][y] = Xacid_splash_w;
4747 Next[x][y] = Xsand_stonesand_quickout_2;
4748 play_element_sound(x, y, SOUND_acid, Xacid_1);
4752 case Xacid_splash_e:
4753 case Xacid_splash_w:
4754 Cave[x][y] = Xsand_stonesand_quickout_1;
4755 Cave[x][y+1] = Xsand_stoneout_1;
4756 Next[x][y] = Xsand_stonesand_quickout_2;
4757 Next[x][y+1] = Xsand_stoneout_2;
4761 Cave[x][y] = Xsand_stonesand_1;
4762 Cave[x][y+1] = Xsand_sandstone_1;
4763 Next[x][y] = Xsand_stonesand_2;
4764 Next[x][y+1] = Xsand_sandstone_2;
4769 static void Lsand_stonein_1(int x, int y)
4771 Next[x][y] = Xsand_stonein_2;
4774 static void Lsand_stonein_2(int x, int y)
4776 Next[x][y] = Xsand_stonein_3;
4779 static void Lsand_stonein_3(int x, int y)
4781 Next[x][y] = Xsand_stonein_4;
4784 static void Lsand_stonein_4(int x, int y)
4786 Next[x][y] = Xblank;
4789 static void Lsand_sandstone_1(int x, int y)
4791 Next[x][y] = Xsand_sandstone_2;
4794 static void Lsand_sandstone_2(int x, int y)
4796 Next[x][y] = Xsand_sandstone_3;
4799 static void Lsand_sandstone_3(int x, int y)
4801 Next[x][y] = Xsand_sandstone_4;
4804 static void Lsand_sandstone_4(int x, int y)
4806 Next[x][y] = Xsand_stone;
4809 static void Lsand_stonesand_1(int x, int y)
4811 Next[x][y] = Xsand_stonesand_2;
4814 static void Lsand_stonesand_2(int x, int y)
4816 Next[x][y] = Xsand_stonesand_3;
4819 static void Lsand_stonesand_3(int x, int y)
4821 Next[x][y] = Xsand_stonesand_4;
4824 static void Lsand_stonesand_4(int x, int y)
4829 static void Lsand_stoneout_1(int x, int y)
4831 Next[x][y] = Xsand_stoneout_2;
4834 static void Lsand_stoneout_2(int x, int y)
4836 Next[x][y] = Xstone_fall;
4839 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
4840 static void Lsand_stonesand_quickout_1(int x, int y)
4842 Next[x][y] = Xsand_stonesand_quickout_2;
4845 static void Lsand_stonesand_quickout_2(int x, int y)
4851 static void Lslidewall_ns(int x, int y)
4853 if (tab_blank[Cave[x][y-1]])
4855 Cave[x][y-1] = Yslidewall_ns_blank;
4856 Next[x][y-1] = Xslidewall_ns;
4857 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
4860 if (tab_blank[Cave[x][y+1]])
4862 Cave[x][y+1] = Yslidewall_ns_blank;
4863 Next[x][y+1] = Xslidewall_ns;
4864 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
4868 static void Lslidewall_ew(int x, int y)
4870 if (tab_blank[Cave[x+1][y]])
4872 Cave[x+1][y] = Yslidewall_ew_blank;
4873 Next[x+1][y] = Xslidewall_ew;
4874 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
4877 if (tab_blank[Cave[x-1][y]])
4879 Cave[x-1][y] = Yslidewall_ew_blank;
4880 Next[x-1][y] = Xslidewall_ew;
4881 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
4885 static void Lexit(int x, int y)
4887 if (lev.required > 0)
4890 switch (RANDOM(64) / 21)
4893 Cave[x][y] = Xexit_1;
4894 Next[x][y] = Xexit_2;
4898 Cave[x][y] = Xexit_2;
4899 Next[x][y] = Xexit_3;
4903 Cave[x][y] = Xexit_3;
4904 Next[x][y] = Xexit_1;
4908 play_element_sound(x, y, SOUND_exit_open, Xexit);
4911 static void Lexit_1(int x, int y)
4913 Next[x][y] = Xexit_2;
4916 static void Lexit_2(int x, int y)
4918 Next[x][y] = Xexit_3;
4921 static void Lexit_3(int x, int y)
4923 Next[x][y] = Xexit_1;
4926 static void Lpause(int x, int y)
4928 Next[x][y] = Xblank;
4931 static void Lboom_1(int x, int y)
4933 Next[x][y] = Xboom_2;
4934 #if !PLAY_ELEMENT_SOUND
4935 if (x != lev.exit_x && y != lev.exit_y)
4936 play_sound(x, y, SOUND_boom);
4938 lev.exit_x = lev.exit_y = -1;
4942 static void Lboom_2(int x, int y)
4944 Next[x][y] = Boom[x][y];
4947 static void Lboom_android(int x, int y)
4949 #if PLAY_ELEMENT_SOUND
4950 play_element_sound(x, y, SOUND_boom, Xandroid);
4956 static void handle_tile(int x, int y)
4960 case Xacid_1: Lacid_1(x, y); break;
4961 case Xacid_2: Lacid_2(x, y); break;
4962 case Xacid_3: Lacid_3(x, y); break;
4963 case Xacid_4: Lacid_4(x, y); break;
4964 case Xacid_5: Lacid_5(x, y); break;
4965 case Xacid_6: Lacid_6(x, y); break;
4966 case Xacid_7: Lacid_7(x, y); break;
4967 case Xacid_8: Lacid_8(x, y); break;
4969 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
4970 case Xfake_acid_1: Lfake_acid_1(x, y); break;
4971 case Xfake_acid_2: Lfake_acid_2(x, y); break;
4972 case Xfake_acid_3: Lfake_acid_3(x, y); break;
4973 case Xfake_acid_4: Lfake_acid_4(x, y); break;
4974 case Xfake_acid_5: Lfake_acid_5(x, y); break;
4975 case Xfake_acid_6: Lfake_acid_6(x, y); break;
4976 case Xfake_acid_7: Lfake_acid_7(x, y); break;
4977 case Xfake_acid_8: Lfake_acid_8(x, y); break;
4980 case Xandroid: Landroid(x, y); break;
4981 case Xandroid_1_n: Landroid_1_n(x, y); break;
4982 case Xandroid_2_n: Landroid_2_n(x, y); break;
4983 case Xandroid_1_e: Landroid_1_e(x, y); break;
4984 case Xandroid_2_e: Landroid_2_e(x, y); break;
4985 case Xandroid_1_s: Landroid_1_s(x, y); break;
4986 case Xandroid_2_s: Landroid_2_s(x, y); break;
4987 case Xandroid_1_w: Landroid_1_w(x, y); break;
4988 case Xandroid_2_w: Landroid_2_w(x, y); break;
4990 case Xeater_n: Leater_n(x, y); break;
4991 case Xeater_e: Leater_e(x, y); break;
4992 case Xeater_s: Leater_s(x, y); break;
4993 case Xeater_w: Leater_w(x, y); break;
4995 case Xalien: Lalien(x, y); break;
4996 case Xalien_pause: Lalien_pause(x, y); break;
4998 case Xbug_1_n: Lbug_1_n(x, y); break;
4999 case Xbug_2_n: Lbug_2_n(x, y); break;
5000 case Xbug_1_e: Lbug_1_e(x, y); break;
5001 case Xbug_2_e: Lbug_2_e(x, y); break;
5002 case Xbug_1_s: Lbug_1_s(x, y); break;
5003 case Xbug_2_s: Lbug_2_s(x, y); break;
5004 case Xbug_1_w: Lbug_1_w(x, y); break;
5005 case Xbug_2_w: Lbug_2_w(x, y); break;
5007 case Xtank_1_n: Ltank_1_n(x, y); break;
5008 case Xtank_2_n: Ltank_2_n(x, y); break;
5009 case Xtank_1_e: Ltank_1_e(x, y); break;
5010 case Xtank_2_e: Ltank_2_e(x, y); break;
5011 case Xtank_1_s: Ltank_1_s(x, y); break;
5012 case Xtank_2_s: Ltank_2_s(x, y); break;
5013 case Xtank_1_w: Ltank_1_w(x, y); break;
5014 case Xtank_2_w: Ltank_2_w(x, y); break;
5016 case Xemerald: Lemerald(x, y); break;
5017 case Xemerald_pause: Lemerald_pause(x, y); break;
5018 case Xemerald_fall: Lemerald_fall(x, y); break;
5020 case Xdiamond: Ldiamond(x, y); break;
5021 case Xdiamond_pause: Ldiamond_pause(x, y); break;
5022 case Xdiamond_fall: Ldiamond_fall(x, y); break;
5024 case Xstone: Lstone(x, y); break;
5025 case Xstone_pause: Lstone_pause(x, y); break;
5026 case Xstone_fall: Lstone_fall(x, y); break;
5028 case Xbomb: Lbomb(x, y); break;
5029 case Xbomb_pause: Lbomb_pause(x, y); break;
5030 case Xbomb_fall: Lbomb_fall(x, y); break;
5032 case Xnut: Lnut(x, y); break;
5033 case Xnut_pause: Lnut_pause(x, y); break;
5034 case Xnut_fall: Lnut_fall(x, y); break;
5036 case Xspring: Lspring(x, y); break;
5037 case Xspring_pause: Lspring_pause(x, y); break;
5038 case Xspring_e: Lspring_e(x, y); break;
5039 case Xspring_w: Lspring_w(x, y); break;
5040 case Xspring_fall: Lspring_fall(x, y); break;
5042 case Xpush_emerald_e: Lpush_emerald_e(x, y); break;
5043 case Xpush_emerald_w: Lpush_emerald_w(x, y); break;
5044 case Xpush_diamond_e: Lpush_diamond_e(x, y); break;
5045 case Xpush_diamond_w: Lpush_diamond_w(x, y); break;
5046 case Xpush_stone_e: Lpush_stone_e(x, y); break;
5047 case Xpush_stone_w: Lpush_stone_w(x, y); break;
5048 case Xpush_bomb_e: Lpush_bomb_e(x, y); break;
5049 case Xpush_bomb_w: Lpush_bomb_w(x, y); break;
5050 case Xpush_nut_e: Lpush_nut_e(x, y); break;
5051 case Xpush_nut_w: Lpush_nut_w(x, y); break;
5052 case Xpush_spring_e: Lpush_spring_e(x, y); break;
5053 case Xpush_spring_w: Lpush_spring_w(x, y); break;
5055 case Xdynamite_1: Ldynamite_1(x, y); break;
5056 case Xdynamite_2: Ldynamite_2(x, y); break;
5057 case Xdynamite_3: Ldynamite_3(x, y); break;
5058 case Xdynamite_4: Ldynamite_4(x, y); break;
5060 case Xfake_door_1: Lfake_door_1(x, y); break;
5061 case Xfake_door_2: Lfake_door_2(x, y); break;
5062 case Xfake_door_3: Lfake_door_3(x, y); break;
5063 case Xfake_door_4: Lfake_door_4(x, y); break;
5064 case Xfake_door_5: Lfake_door_5(x, y); break;
5065 case Xfake_door_6: Lfake_door_6(x, y); break;
5066 case Xfake_door_7: Lfake_door_7(x, y); break;
5067 case Xfake_door_8: Lfake_door_8(x, y); break;
5069 case Xballoon: Lballoon(x, y); break;
5071 case Xball_1: Lball_1(x, y); break;
5072 case Xball_2: Lball_2(x, y); break;
5074 case Xdrip: Ldrip(x, y); break;
5075 case Xdrip_fall: Ldrip_fall(x, y); break;
5076 case Xdrip_stretch: Ldrip_stretch(x, y); break;
5077 case Xdrip_stretchB: Ldrip_stretchB(x, y); break;
5079 case Xwonderwall: Lwonderwall(x, y); break;
5081 case Xwheel: Lwheel(x, y); break;
5083 case Xswitch: Lswitch(x, y); break;
5085 case Xfake_blank: Lfake_blank(x, y); break;
5086 case Xfake_grass: Lfake_grass(x, y); break;
5087 case Xfake_amoeba: Lfake_amoeba(x, y); break;
5089 case Xsand_stone: Lsand_stone(x, y); break;
5090 case Xsand_stonein_1: Lsand_stonein_1(x, y); break;
5091 case Xsand_stonein_2: Lsand_stonein_2(x, y); break;
5092 case Xsand_stonein_3: Lsand_stonein_3(x, y); break;
5093 case Xsand_stonein_4: Lsand_stonein_4(x, y); break;
5094 case Xsand_sandstone_1: Lsand_sandstone_1(x, y); break;
5095 case Xsand_sandstone_2: Lsand_sandstone_2(x, y); break;
5096 case Xsand_sandstone_3: Lsand_sandstone_3(x, y); break;
5097 case Xsand_sandstone_4: Lsand_sandstone_4(x, y); break;
5098 case Xsand_stonesand_1: Lsand_stonesand_1(x, y); break;
5099 case Xsand_stonesand_2: Lsand_stonesand_2(x, y); break;
5100 case Xsand_stonesand_3: Lsand_stonesand_3(x, y); break;
5101 case Xsand_stonesand_4: Lsand_stonesand_4(x, y); break;
5102 case Xsand_stoneout_1: Lsand_stoneout_1(x, y); break;
5103 case Xsand_stoneout_2: Lsand_stoneout_2(x, y); break;
5104 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
5105 case Xsand_stonesand_quickout_1: Lsand_stonesand_quickout_1(x, y); break;
5106 case Xsand_stonesand_quickout_2: Lsand_stonesand_quickout_2(x, y); break;
5109 case Xslidewall_ns: Lslidewall_ns(x, y); break;
5110 case Xslidewall_ew: Lslidewall_ew(x, y); break;
5112 case Xexit: Lexit(x, y); break;
5113 case Xexit_1: Lexit_1(x, y); break;
5114 case Xexit_2: Lexit_2(x, y); break;
5115 case Xexit_3: Lexit_3(x, y); break;
5117 case Xpause: Lpause(x, y); break;
5119 case Xboom_bug: Lboom_bug(x, y); break;
5120 case Xboom_bomb: Lboom_tank(x, y); break;
5121 case Xboom_android: Lboom_android(x, y); break;
5122 case Xboom_1: Lboom_1(x, y); break;
5123 case Xboom_2: Lboom_2(x, y); break;
5127 void synchro_2(void)
5134 for (y = 1; y < HEIGHT - 1; y++)
5135 for (x = 0; x < WIDTH; x++)
5138 if (ply[0].alive || ply[1].alive || ply[2].alive || ply[3].alive)
5139 lev.score += score; /* only add a score if someone is alive */
5141 game_em.game_over = TRUE;
5145 /* triple buffering */