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 set_nearest_player_xy(int x, int y, int *dx, int *dy)
24 int distance, distance_shortest = EM_MAX_CAVE_WIDTH + EM_MAX_CAVE_HEIGHT;
27 /* default values if no players are alive anymore */
31 for (i = 0; i < MAX_PLAYERS; i++)
36 distance = ABS(ply[i].x - x) + ABS(ply[i].y - y);
38 if (distance < distance_shortest)
43 distance_shortest = distance;
48 static void Lboom_bug(int x, int y)
51 Boom[x-1][y-1] = Xemerald;
52 Boom[x][y-1] = Xemerald;
53 Boom[x+1][y-1] = Xemerald;
54 Boom[x-1][y] = Xemerald;
55 Boom[x][y] = Xdiamond;
56 Boom[x+1][y] = Xemerald;
57 Boom[x-1][y+1] = Xemerald;
58 Boom[x][y+1] = Xemerald;
59 Boom[x+1][y+1] = Xemerald;
61 #if PLAY_ELEMENT_SOUND
62 play_element_sound(x, y, SOUND_boom, element);
66 static void Lboom_tank(int x, int y)
69 Boom[x-1][y-1] = Xblank;
70 Boom[x][y-1] = Xblank;
71 Boom[x+1][y-1] = Xblank;
72 Boom[x-1][y] = Xblank;
74 Boom[x+1][y] = Xblank;
75 Boom[x-1][y+1] = Xblank;
76 Boom[x][y+1] = Xblank;
77 Boom[x+1][y+1] = Xblank;
78 #if PLAY_ELEMENT_SOUND
79 play_element_sound(x, y, SOUND_boom, element);
83 static void Landroid(int x, int y)
87 if (lev.android_clone_cnt == 0)
89 if (Cave[x-1][y-1] != Xblank &&
90 Cave[x][y-1] != Xblank &&
91 Cave[x+1][y-1] != Xblank &&
92 Cave[x-1][y] != Xblank &&
93 Cave[x+1][y] != Xblank &&
94 Cave[x-1][y+1] != Xblank &&
95 Cave[x][y+1] != Xblank &&
96 Cave[x+1][y+1] != Xblank)
101 /* randomly find an object to clone */
103 case 0: /* S,NE,W,NW,SE,E,SW,N */
104 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
105 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
106 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
107 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
108 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
109 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
110 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
111 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
114 case 1: /* NW,SE,N,S,NE,SW,E,W */
115 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
116 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
117 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
118 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
119 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
120 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
121 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
122 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
125 case 2: /* SW,E,S,W,N,NW,SE,NE */
126 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
127 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
128 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
129 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
130 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
131 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
132 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
133 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
136 case 3: /* N,SE,NE,E,W,S,NW,SW */
137 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
138 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
139 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
140 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
141 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
142 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
143 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
144 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
147 case 4: /* SE,NW,E,NE,SW,W,N,S */
148 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
149 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
150 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
151 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
152 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
153 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
154 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
155 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
158 case 5: /* NE,W,SE,SW,S,N,E,NW */
159 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
160 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
161 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
162 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
163 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
164 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
165 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
166 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
169 case 6: /* E,N,SW,S,NW,NE,SE,W */
170 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
171 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
172 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
173 temp = lev.android_array[Cave[x][y+1]]; if (temp != Xblank) break;
174 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
175 temp = lev.android_array[Cave[x+1][y-1]]; if (temp != Xblank) break;
176 temp = lev.android_array[Cave[x+1][y+1]]; if (temp != Xblank) break;
177 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
180 case 7: /* W,SW,NW,N,E,SE,NE,S */
181 temp = lev.android_array[Cave[x-1][y]]; if (temp != Xblank) break;
182 temp = lev.android_array[Cave[x-1][y+1]]; if (temp != Xblank) break;
183 temp = lev.android_array[Cave[x-1][y-1]]; if (temp != Xblank) break;
184 temp = lev.android_array[Cave[x][y-1]]; if (temp != Xblank) break;
185 temp = lev.android_array[Cave[x+1][y]]; if (temp != Xblank) break;
186 temp = lev.android_array[Cave[x+1][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][y+1]]; if (temp != Xblank) break;
192 Next[x][y] = temp; /* the item we chose to clone */
193 play_element_sound(x, y, SOUND_android_clone, temp);
197 /* randomly find a direction to move */
199 case 0: /* S,NE,W,NW,SE,E,SW,N */
200 if (Cave[x][y+1] == Xblank) goto android_s;
201 if (Cave[x+1][y-1] == Xblank) goto android_ne;
202 if (Cave[x-1][y] == Xblank) goto android_w;
203 if (Cave[x-1][y-1] == Xblank) goto android_nw;
204 if (Cave[x+1][y+1] == Xblank) goto android_se;
205 if (Cave[x+1][y] == Xblank) goto android_e;
206 if (Cave[x-1][y+1] == Xblank) goto android_sw;
207 if (Cave[x][y-1] == Xblank) goto android_n;
210 case 1: /* NW,SE,N,S,NE,SW,E,W */
211 if (Cave[x-1][y-1] == Xblank) goto android_nw;
212 if (Cave[x+1][y+1] == Xblank) goto android_se;
213 if (Cave[x][y-1] == Xblank) goto android_n;
214 if (Cave[x][y+1] == Xblank) goto android_s;
215 if (Cave[x+1][y-1] == Xblank) goto android_ne;
216 if (Cave[x-1][y+1] == Xblank) goto android_sw;
217 if (Cave[x+1][y] == Xblank) goto android_e;
218 if (Cave[x-1][y] == Xblank) goto android_w;
221 case 2: /* SW,E,S,W,N,NW,SE,NE */
222 if (Cave[x-1][y+1] == Xblank) goto android_sw;
223 if (Cave[x+1][y] == Xblank) goto android_e;
224 if (Cave[x][y+1] == Xblank) goto android_s;
225 if (Cave[x-1][y] == Xblank) goto android_w;
226 if (Cave[x][y-1] == Xblank) goto android_n;
227 if (Cave[x-1][y-1] == Xblank) goto android_nw;
228 if (Cave[x+1][y+1] == Xblank) goto android_se;
229 if (Cave[x+1][y-1] == Xblank) goto android_ne;
232 case 3: /* N,SE,NE,E,W,S,NW,SW */
233 if (Cave[x][y-1] == Xblank) goto android_n;
234 if (Cave[x+1][y+1] == Xblank) goto android_se;
235 if (Cave[x+1][y-1] == Xblank) goto android_ne;
236 if (Cave[x+1][y] == Xblank) goto android_e;
237 if (Cave[x-1][y] == Xblank) goto android_w;
238 if (Cave[x][y+1] == Xblank) goto android_s;
239 if (Cave[x-1][y-1] == Xblank) goto android_nw;
240 if (Cave[x-1][y+1] == Xblank) goto android_sw;
243 case 4: /* SE,NW,E,NE,SW,W,N,S */
244 if (Cave[x+1][y+1] == Xblank) goto android_se;
245 if (Cave[x-1][y-1] == Xblank) goto android_nw;
246 if (Cave[x+1][y] == Xblank) goto android_e;
247 if (Cave[x+1][y-1] == Xblank) goto android_ne;
248 if (Cave[x-1][y+1] == Xblank) goto android_sw;
249 if (Cave[x-1][y] == Xblank) goto android_w;
250 if (Cave[x][y-1] == Xblank) goto android_n;
251 if (Cave[x][y+1] == Xblank) goto android_s;
254 case 5: /* NE,W,SE,SW,S,N,E,NW */
255 if (Cave[x+1][y-1] == Xblank) goto android_ne;
256 if (Cave[x-1][y] == Xblank) goto android_w;
257 if (Cave[x+1][y+1] == Xblank) goto android_se;
258 if (Cave[x-1][y+1] == Xblank) goto android_sw;
259 if (Cave[x][y+1] == Xblank) goto android_s;
260 if (Cave[x][y-1] == Xblank) goto android_n;
261 if (Cave[x+1][y] == Xblank) goto android_e;
262 if (Cave[x-1][y-1] == Xblank) goto android_nw;
265 case 6: /* E,N,SW,S,NW,NE,SE,W */
266 if (Cave[x+1][y] == Xblank) goto android_e;
267 if (Cave[x][y-1] == Xblank) goto android_n;
268 if (Cave[x-1][y+1] == Xblank) goto android_sw;
269 if (Cave[x][y+1] == Xblank) goto android_s;
270 if (Cave[x-1][y-1] == Xblank) goto android_nw;
271 if (Cave[x+1][y-1] == Xblank) goto android_ne;
272 if (Cave[x+1][y+1] == Xblank) goto android_se;
273 if (Cave[x-1][y] == Xblank) goto android_w;
276 case 7: /* W,SW,NW,N,E,SE,NE,S */
277 if (Cave[x-1][y] == Xblank) goto android_w;
278 if (Cave[x-1][y+1] == Xblank) goto android_sw;
279 if (Cave[x-1][y-1] == Xblank) goto android_nw;
280 if (Cave[x][y-1] == Xblank) goto android_n;
281 if (Cave[x+1][y] == Xblank) goto android_e;
282 if (Cave[x+1][y+1] == Xblank) goto android_se;
283 if (Cave[x+1][y-1] == Xblank) goto android_ne;
284 if (Cave[x][y+1] == Xblank) goto android_s;
290 if (lev.android_move_cnt == 0)
292 if (Cave[x-1][y-1] == Zplayer ||
293 Cave[x][y-1] == Zplayer ||
294 Cave[x+1][y-1] == Zplayer ||
295 Cave[x-1][y] == Zplayer ||
296 Cave[x+1][y] == Zplayer ||
297 Cave[x-1][y+1] == Zplayer ||
298 Cave[x][y+1] == Zplayer ||
299 Cave[x+1][y+1] == Zplayer)
302 set_nearest_player_xy(x, y, &dx, &dy);
304 Next[x][y] = Xblank; /* assume we will move */
305 temp = ((x < dx) + 1 - (x > dx)) + ((y < dy) + 1 - (y > dy)) * 3;
311 /* attempt clockwise move first if direct path is blocked */
313 case 0: /* north west */
314 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
315 if (tab_android_move[Cave[x][y-1]]) goto android_n;
316 if (tab_android_move[Cave[x-1][y]]) goto android_w;
320 if (tab_android_move[Cave[x][y-1]]) goto android_n;
321 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
322 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
325 case 2: /* north east */
326 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
327 if (tab_android_move[Cave[x+1][y]]) goto android_e;
328 if (tab_android_move[Cave[x][y-1]]) goto android_n;
332 if (tab_android_move[Cave[x-1][y]]) goto android_w;
333 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
334 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
337 case 4: /* nowhere */
341 if (tab_android_move[Cave[x+1][y]]) goto android_e;
342 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
343 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
346 case 6: /* south west */
347 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
348 if (tab_android_move[Cave[x-1][y]]) goto android_w;
349 if (tab_android_move[Cave[x][y+1]]) goto android_s;
353 if (tab_android_move[Cave[x][y+1]]) goto android_s;
354 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
355 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
358 case 8: /* south east */
359 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
360 if (tab_android_move[Cave[x][y+1]]) goto android_s;
361 if (tab_android_move[Cave[x+1][y]]) goto android_e;
369 /* attempt counterclockwise move first if direct path is blocked */
371 case 0: /* north west */
372 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
373 if (tab_android_move[Cave[x-1][y]]) goto android_w;
374 if (tab_android_move[Cave[x][y-1]]) goto android_n;
378 if (tab_android_move[Cave[x][y-1]]) goto android_n;
379 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
380 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
383 case 2: /* north east */
384 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
385 if (tab_android_move[Cave[x][y-1]]) goto android_n;
386 if (tab_android_move[Cave[x+1][y]]) goto android_e;
390 if (tab_android_move[Cave[x-1][y]]) goto android_w;
391 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
392 if (tab_android_move[Cave[x-1][y-1]]) goto android_nw;
395 case 4: /* nowhere */
399 if (tab_android_move[Cave[x+1][y]]) goto android_e;
400 if (tab_android_move[Cave[x+1][y-1]]) goto android_ne;
401 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
404 case 6: /* south west */
405 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
406 if (tab_android_move[Cave[x][y+1]]) goto android_s;
407 if (tab_android_move[Cave[x-1][y]]) goto android_w;
411 if (tab_android_move[Cave[x][y+1]]) goto android_s;
412 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
413 if (tab_android_move[Cave[x-1][y+1]]) goto android_sw;
416 case 8: /* south east */
417 if (tab_android_move[Cave[x+1][y+1]]) goto android_se;
418 if (tab_android_move[Cave[x+1][y]]) goto android_e;
419 if (tab_android_move[Cave[x][y+1]]) goto android_s;
426 Next[x][y] = Xandroid;
430 Cave[x][y] = Yandroid_nB;
431 Cave[x][y-1] = Yandroid_n;
432 Next[x][y-1] = Xandroid;
433 play_element_sound(x, y, SOUND_android_move, Xandroid);
437 Cave[x][y] = Yandroid_neB;
438 Cave[x+1][y-1] = Yandroid_ne;
439 Next[x+1][y-1] = Xandroid;
440 play_element_sound(x, y, SOUND_android_move, Xandroid);
444 Cave[x][y] = Yandroid_eB;
445 Cave[x+1][y] = Yandroid_e;
446 Next[x+1][y] = Xandroid;
447 play_element_sound(x, y, SOUND_android_move, Xandroid);
451 Cave[x][y] = Yandroid_seB;
452 Cave[x+1][y+1] = Yandroid_se;
453 Next[x+1][y+1] = Xandroid;
454 play_element_sound(x, y, SOUND_android_move, Xandroid);
458 Cave[x][y] = Yandroid_sB;
459 Cave[x][y+1] = Yandroid_s;
460 Next[x][y+1] = Xandroid;
461 play_element_sound(x, y, SOUND_android_move, Xandroid);
465 Cave[x][y] = Yandroid_swB;
466 Cave[x-1][y+1] = Yandroid_sw;
467 Next[x-1][y+1] = Xandroid;
468 play_element_sound(x, y, SOUND_android_move, Xandroid);
472 Cave[x][y] = Yandroid_wB;
473 Cave[x-1][y] = Yandroid_w;
474 Next[x-1][y] = Xandroid;
475 play_element_sound(x, y, SOUND_android_move, Xandroid);
479 Cave[x][y] = Yandroid_nwB;
480 Cave[x-1][y-1] = Yandroid_nw;
481 Next[x-1][y-1] = Xandroid;
482 play_element_sound(x, y, SOUND_android_move, Xandroid);
486 static void Landroid_1_n(int x, int y)
488 switch (Cave[x][y-1])
498 Cave[x][y] = Yandroid_nB;
499 if (Cave[x+1][y-2] == Xblank)
500 Cave[x+1][y-2] = Xacid_splash_e;
501 if (Cave[x-1][y-2] == Xblank)
502 Cave[x-1][y-2] = Xacid_splash_w;
504 play_element_sound(x, y, SOUND_acid, Xacid_1);
510 Cave[x][y] = Yandroid_nB;
511 Cave[x][y-1] = Yandroid_n;
513 Next[x][y-1] = Xandroid;
514 play_element_sound(x, y, SOUND_android_move, Xandroid_1_n);
523 static void Landroid_2_n(int x, int y)
525 switch (Cave[x][y-1])
535 Cave[x][y] = Yandroid_nB;
536 if (Cave[x+1][y-2] == Xblank)
537 Cave[x+1][y-2] = Xacid_splash_e;
538 if (Cave[x-1][y-2] == Xblank)
539 Cave[x-1][y-2] = Xacid_splash_w;
541 play_element_sound(x, y, SOUND_acid, Xacid_1);
547 Cave[x][y] = Yandroid_nB;
548 Cave[x][y-1] = Yandroid_n;
550 Next[x][y-1] = Xandroid_1_n;
551 play_element_sound(x, y, SOUND_android_move, Xandroid_2_n);
560 static void Landroid_1_e(int x, int y)
562 switch (Cave[x+1][y])
572 Cave[x][y] = Yandroid_eB;
573 if (Cave[x+2][y-1] == Xblank)
574 Cave[x+2][y-1] = Xacid_splash_e;
575 if (Cave[x][y-1] == Xblank)
576 Cave[x][y-1] = Xacid_splash_w;
578 play_element_sound(x, y, SOUND_acid, Xacid_1);
584 Cave[x][y] = Yandroid_eB;
585 Cave[x+1][y] = Yandroid_e;
587 Next[x+1][y] = Xandroid;
588 play_element_sound(x, y, SOUND_android_move, Xandroid_1_e);
597 static void Landroid_2_e(int x, int y)
599 switch (Cave[x+1][y])
609 Cave[x][y] = Yandroid_eB;
610 if (Cave[x+2][y-1] == Xblank)
611 Cave[x+2][y-1] = Xacid_splash_e;
612 if (Cave[x][y-1] == Xblank)
613 Cave[x][y-1] = Xacid_splash_w;
615 play_element_sound(x, y, SOUND_acid, Xacid_1);
621 Cave[x][y] = Yandroid_eB;
622 Cave[x+1][y] = Yandroid_e;
624 Next[x+1][y] = Xandroid_1_e;
625 play_element_sound(x, y, SOUND_android_move, Xandroid_2_e);
634 static void Landroid_1_s(int x, int y)
636 switch (Cave[x][y+1])
646 Cave[x][y] = Yandroid_sB;
647 if (Cave[x+1][y] == Xblank)
648 Cave[x+1][y] = Xacid_splash_e;
649 if (Cave[x-1][y] == Xblank)
650 Cave[x-1][y] = Xacid_splash_w;
652 play_element_sound(x, y, SOUND_acid, Xacid_1);
658 Cave[x][y] = Yandroid_sB;
659 Cave[x][y+1] = Yandroid_s;
661 Next[x][y+1] = Xandroid;
662 play_element_sound(x, y, SOUND_android_move, Xandroid_1_s);
671 static void Landroid_2_s(int x, int y)
673 switch (Cave[x][y+1])
683 Cave[x][y] = Yandroid_sB;
684 if (Cave[x+1][y] == Xblank)
685 Cave[x+1][y] = Xacid_splash_e;
686 if (Cave[x-1][y] == Xblank)
687 Cave[x-1][y] = Xacid_splash_w;
689 play_element_sound(x, y, SOUND_acid, Xacid_1);
695 Cave[x][y] = Yandroid_sB;
696 Cave[x][y+1] = Yandroid_s;
698 Next[x][y+1] = Xandroid_1_s;
699 play_element_sound(x, y, SOUND_android_move, Xandroid_2_s);
708 static void Landroid_1_w(int x, int y)
710 switch (Cave[x-1][y])
720 Cave[x][y] = Yandroid_wB;
721 if (Cave[x][y-1] == Xblank)
722 Cave[x][y-1] = Xacid_splash_e;
723 if (Cave[x-2][y-1] == Xblank)
724 Cave[x-2][y-1] = Xacid_splash_w;
726 play_element_sound(x, y, SOUND_acid, Xacid_1);
732 Cave[x][y] = Yandroid_wB;
733 Cave[x-1][y] = Yandroid_w;
735 Next[x-1][y] = Xandroid;
736 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
745 static void Landroid_2_w(int x, int y)
747 switch (Cave[x-1][y])
757 Cave[x][y] = Yandroid_wB;
758 if (Cave[x][y-1] == Xblank)
759 Cave[x][y-1] = Xacid_splash_e;
760 if (Cave[x-2][y-1] == Xblank)
761 Cave[x-2][y-1] = Xacid_splash_w;
763 play_element_sound(x, y, SOUND_acid, Xacid_1);
769 Cave[x][y] = Yandroid_wB;
770 Cave[x-1][y] = Yandroid_w;
772 Next[x-1][y] = Xandroid_1_w;
773 play_element_sound(x, y, SOUND_android_move, Xandroid_1_w);
782 static void Leater_n(int x, int y)
784 if (Cave[x+1][y] == Xdiamond)
786 Cave[x+1][y] = Ydiamond_blank;
787 Next[x+1][y] = Xblank;
788 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
792 if (Cave[x][y+1] == Xdiamond)
794 Cave[x][y+1] = Ydiamond_blank;
795 Next[x][y+1] = Xblank;
796 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
800 if (Cave[x-1][y] == Xdiamond)
802 Cave[x-1][y] = Ydiamond_blank;
803 Next[x-1][y] = Xblank;
804 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
808 if (Cave[x][y-1] == Xdiamond)
810 Cave[x][y-1] = Ydiamond_blank;
811 Next[x][y-1] = Xblank;
812 play_element_sound(x, y, SOUND_eater_eat, Xeater_n);
816 switch (Cave[x][y-1])
826 Cave[x][y] = Yeater_nB;
827 if (Cave[x+1][y-2] == Xblank)
828 Cave[x+1][y-2] = Xacid_splash_e;
829 if (Cave[x-1][y-2] == Xblank)
830 Cave[x-1][y-2] = Xacid_splash_w;
832 play_element_sound(x, y, SOUND_acid, Xacid_1);
841 Cave[x][y] = Yeater_nB;
842 Cave[x][y-1] = Yeater_n;
844 Next[x][y-1] = Xeater_n;
848 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
849 play_element_sound(x, y, SOUND_eater, Xeater_n);
854 static void Leater_e(int x, int y)
856 if (Cave[x][y+1] == Xdiamond)
858 Cave[x][y+1] = Ydiamond_blank;
859 Next[x][y+1] = Xblank;
860 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
864 if (Cave[x-1][y] == Xdiamond)
866 Cave[x-1][y] = Ydiamond_blank;
867 Next[x-1][y] = Xblank;
868 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
872 if (Cave[x][y-1] == Xdiamond)
874 Cave[x][y-1] = Ydiamond_blank;
875 Next[x][y-1] = Xblank;
876 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
880 if (Cave[x+1][y] == Xdiamond)
882 Cave[x+1][y] = Ydiamond_blank;
883 Next[x+1][y] = Xblank;
884 play_element_sound(x, y, SOUND_eater_eat, Xeater_e);
888 switch (Cave[x+1][y])
898 Cave[x][y] = Yeater_eB;
899 if (Cave[x+2][y-1] == Xblank)
900 Cave[x+2][y-1] = Xacid_splash_e;
901 if (Cave[x][y-1] == Xblank)
902 Cave[x][y-1] = Xacid_splash_w;
904 play_element_sound(x, y, SOUND_acid, Xacid_1);
913 Cave[x][y] = Yeater_eB;
914 Cave[x+1][y] = Yeater_e;
916 Next[x+1][y] = Xeater_e;
920 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
921 play_element_sound(x, y, SOUND_eater, Xeater_e);
926 static void Leater_s(int x, int y)
928 if (Cave[x-1][y] == Xdiamond)
930 Cave[x-1][y] = Ydiamond_blank;
931 Next[x-1][y] = Xblank;
932 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
936 if (Cave[x][y-1] == Xdiamond)
938 Cave[x][y-1] = Ydiamond_blank;
939 Next[x][y-1] = Xblank;
940 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
944 if (Cave[x+1][y] == Xdiamond)
946 Cave[x+1][y] = Ydiamond_blank;
947 Next[x+1][y] = Xblank;
948 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
952 if (Cave[x][y+1] == Xdiamond)
954 Cave[x][y+1] = Ydiamond_blank;
955 Next[x][y+1] = Xblank;
956 play_element_sound(x, y, SOUND_eater_eat, Xeater_s);
960 switch (Cave[x][y+1])
970 Cave[x][y] = Yeater_sB;
971 if (Cave[x+1][y] == Xblank)
972 Cave[x+1][y] = Xacid_splash_e;
973 if (Cave[x-1][y] == Xblank)
974 Cave[x-1][y] = Xacid_splash_w;
976 play_element_sound(x, y, SOUND_acid, Xacid_1);
985 Cave[x][y] = Yeater_sB;
986 Cave[x][y+1] = Yeater_s;
988 Next[x][y+1] = Xeater_s;
992 Next[x][y] = RANDOM(2) ? Xeater_e : Xeater_w;
993 play_element_sound(x, y, SOUND_eater, Xeater_s);
998 static void Leater_w(int x, int y)
1000 if (Cave[x][y-1] == Xdiamond)
1002 Cave[x][y-1] = Ydiamond_blank;
1003 Next[x][y-1] = Xblank;
1004 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1008 if (Cave[x+1][y] == Xdiamond)
1010 Cave[x+1][y] = Ydiamond_blank;
1011 Next[x+1][y] = Xblank;
1012 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1016 if (Cave[x][y+1] == Xdiamond)
1018 Cave[x][y+1] = Ydiamond_blank;
1019 Next[x][y+1] = Xblank;
1020 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1024 if (Cave[x-1][y] == Xdiamond)
1026 Cave[x-1][y] = Ydiamond_blank;
1027 Next[x-1][y] = Xblank;
1028 play_element_sound(x, y, SOUND_eater_eat, Xeater_w);
1032 switch (Cave[x-1][y])
1042 Cave[x][y] = Yeater_wB;
1043 if (Cave[x][y-1] == Xblank)
1044 Cave[x][y-1] = Xacid_splash_e;
1045 if (Cave[x-2][y-1] == Xblank)
1046 Cave[x-2][y-1] = Xacid_splash_w;
1047 Next[x][y] = Xblank;
1048 play_element_sound(x, y, SOUND_acid, Xacid_1);
1052 case Xacid_splash_e:
1053 case Xacid_splash_w:
1057 Cave[x][y] = Yeater_wB;
1058 Cave[x-1][y] = Yeater_w;
1059 Next[x][y] = Xblank;
1060 Next[x-1][y] = Xeater_w;
1064 Next[x][y] = RANDOM(2) ? Xeater_n : Xeater_s;
1065 play_element_sound(x, y, SOUND_eater, Xeater_w);
1070 static void Lalien(int x, int y)
1081 set_nearest_player_xy(x, y, &dx, &dy);
1088 switch (Cave[x][y-1])
1098 Cave[x][y] = Yalien_nB;
1099 if (Cave[x+1][y-2] == Xblank)
1100 Cave[x+1][y-2] = Xacid_splash_e;
1101 if (Cave[x-1][y-2] == Xblank)
1102 Cave[x-1][y-2] = Xacid_splash_w;
1103 Next[x][y] = Xblank;
1104 play_element_sound(x, y, SOUND_acid, Xacid_1);
1108 case Xacid_splash_e:
1109 case Xacid_splash_w:
1113 Cave[x][y] = Yalien_nB;
1114 Cave[x][y-1] = Yalien_n;
1115 Next[x][y] = Xblank;
1116 Next[x][y-1] = Xalien_pause;
1117 play_element_sound(x, y, SOUND_alien, Xalien);
1123 switch (Cave[x][y+1])
1133 Cave[x][y] = Yalien_sB;
1134 Next[x][y] = Xblank;
1135 if (Cave[x+1][y] == Xblank)
1136 Cave[x+1][y] = Xacid_splash_e;
1137 if (Cave[x-1][y] == Xblank)
1138 Cave[x-1][y] = Xacid_splash_w;
1139 play_element_sound(x, y, SOUND_acid, Xacid_1);
1143 case Xacid_splash_e:
1144 case Xacid_splash_w:
1148 Cave[x][y] = Yalien_sB;
1149 Cave[x][y+1] = Yalien_s;
1150 Next[x][y] = Xblank;
1151 Next[x][y+1] = Xalien_pause;
1152 play_element_sound(x, y, SOUND_alien, Xalien);
1161 switch (Cave[x+1][y])
1171 Cave[x][y] = Yalien_eB;
1172 if (Cave[x+2][y-1] == Xblank)
1173 Cave[x+2][y-1] = Xacid_splash_e;
1174 if (Cave[x][y-1] == Xblank)
1175 Cave[x][y-1] = Xacid_splash_w;
1176 Next[x][y] = Xblank;
1177 play_element_sound(x, y, SOUND_acid, Xacid_1);
1181 case Xacid_splash_e:
1182 case Xacid_splash_w:
1186 Cave[x][y] = Yalien_eB;
1187 Cave[x+1][y] = Yalien_e;
1188 Next[x][y] = Xblank;
1189 Next[x+1][y] = Xalien_pause;
1190 play_element_sound(x, y, SOUND_alien, Xalien);
1196 switch (Cave[x-1][y])
1206 Cave[x][y] = Yalien_wB;
1207 if (Cave[x][y-1] == Xblank)
1208 Cave[x][y-1] = Xacid_splash_e;
1209 if (Cave[x-2][y-1] == Xblank)
1210 Cave[x-2][y-1] = Xacid_splash_w;
1211 Next[x][y] = Xblank;
1212 play_element_sound(x, y, SOUND_acid, Xacid_1);
1216 case Xacid_splash_e:
1217 case Xacid_splash_w:
1221 Cave[x][y] = Yalien_wB;
1222 Cave[x-1][y] = Yalien_w;
1223 Next[x][y] = Xblank;
1224 Next[x-1][y] = Xalien_pause;
1225 play_element_sound(x, y, SOUND_alien, Xalien);
1232 static void Lalien_pause(int x, int y)
1234 Next[x][y] = Xalien;
1237 static void Lbug_n(int x, int y)
1239 switch (Cave[x][y-1])
1249 Cave[x][y] = Ybug_nB;
1250 if (Cave[x+1][y-2] == Xblank)
1251 Cave[x+1][y-2] = Xacid_splash_e;
1252 if (Cave[x-1][y-2] == Xblank)
1253 Cave[x-1][y-2] = Xacid_splash_w;
1254 Next[x][y] = Xblank;
1255 play_element_sound(x, y, SOUND_acid, Xacid_1);
1259 case Xacid_splash_e:
1260 case Xacid_splash_w:
1264 Cave[x][y] = Ybug_nB;
1265 Cave[x][y-1] = Ybug_n;
1266 Next[x][y] = Xblank;
1267 Next[x][y-1] = Xbug_1_n;
1268 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
1272 Cave[x][y] = Ybug_n_w;
1273 Next[x][y] = Xbug_2_w;
1274 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
1279 static void Lbug_1_n(int x, int y)
1281 if (tab_amoeba[Cave[x][y-1]] ||
1282 tab_amoeba[Cave[x+1][y]] ||
1283 tab_amoeba[Cave[x][y+1]] ||
1284 tab_amoeba[Cave[x-1][y]])
1291 switch (Cave[x+1][y])
1294 case Xacid_splash_e:
1295 case Xacid_splash_w:
1307 Cave[x][y] = Ybug_n_e;
1308 Next[x][y] = Xbug_2_e;
1309 play_element_sound(x, y, SOUND_bug, Xbug_1_n);
1318 static void Lbug_2_n(int x, int y)
1320 if (tab_amoeba[Cave[x][y-1]] ||
1321 tab_amoeba[Cave[x+1][y]] ||
1322 tab_amoeba[Cave[x][y+1]] ||
1323 tab_amoeba[Cave[x-1][y]])
1333 static void Lbug_e(int x, int y)
1335 switch (Cave[x+1][y])
1345 Cave[x][y] = Ybug_eB;
1346 if (Cave[x+2][y-1] == Xblank)
1347 Cave[x+2][y-1] = Xacid_splash_e;
1348 if (Cave[x][y-1] == Xblank)
1349 Cave[x][y-1] = Xacid_splash_w;
1350 Next[x][y] = Xblank;
1351 play_element_sound(x, y, SOUND_acid, Xacid_1);
1355 case Xacid_splash_e:
1356 case Xacid_splash_w:
1360 Cave[x][y] = Ybug_eB;
1361 Cave[x+1][y] = Ybug_e;
1362 Next[x][y] = Xblank;
1363 Next[x+1][y] = Xbug_1_e;
1364 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
1368 Cave[x][y] = Ybug_e_n;
1369 Next[x][y] = Xbug_2_n;
1370 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
1375 static void Lbug_1_e(int x, int y)
1377 if (tab_amoeba[Cave[x][y-1]] ||
1378 tab_amoeba[Cave[x+1][y]] ||
1379 tab_amoeba[Cave[x][y+1]] ||
1380 tab_amoeba[Cave[x-1][y]])
1387 switch (Cave[x][y+1])
1390 case Xacid_splash_e:
1391 case Xacid_splash_w:
1403 Cave[x][y] = Ybug_e_s;
1404 Next[x][y] = Xbug_2_s;
1405 play_element_sound(x, y, SOUND_bug, Xbug_1_e);
1414 static void Lbug_2_e(int x, int y)
1416 if (tab_amoeba[Cave[x][y-1]] ||
1417 tab_amoeba[Cave[x+1][y]] ||
1418 tab_amoeba[Cave[x][y+1]] ||
1419 tab_amoeba[Cave[x-1][y]])
1429 static void Lbug_s(int x, int y)
1431 switch (Cave[x][y+1])
1441 Cave[x][y] = Ybug_sB;
1442 if (Cave[x+1][y] == Xblank)
1443 Cave[x+1][y] = Xacid_splash_e;
1444 if (Cave[x-1][y] == Xblank)
1445 Cave[x-1][y] = Xacid_splash_w;
1446 Next[x][y] = Xblank;
1447 play_element_sound(x, y, SOUND_acid, Xacid_1);
1451 case Xacid_splash_e:
1452 case Xacid_splash_w:
1456 Cave[x][y] = Ybug_sB;
1457 Cave[x][y+1] = Ybug_s;
1458 Next[x][y] = Xblank;
1459 Next[x][y+1] = Xbug_1_s;
1460 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
1464 Cave[x][y] = Ybug_s_e;
1465 Next[x][y] = Xbug_2_e;
1466 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
1471 static void Lbug_1_s(int x, int y)
1473 if (tab_amoeba[Cave[x][y-1]] ||
1474 tab_amoeba[Cave[x+1][y]] ||
1475 tab_amoeba[Cave[x][y+1]] ||
1476 tab_amoeba[Cave[x-1][y]])
1483 switch (Cave[x-1][y])
1486 case Xacid_splash_e:
1487 case Xacid_splash_w:
1499 Cave[x][y] = Ybug_s_w;
1500 Next[x][y] = Xbug_2_w;
1501 play_element_sound(x, y, SOUND_bug, Xbug_1_s);
1510 static void Lbug_2_s(int x, int y)
1512 if (tab_amoeba[Cave[x][y-1]] ||
1513 tab_amoeba[Cave[x+1][y]] ||
1514 tab_amoeba[Cave[x][y+1]] ||
1515 tab_amoeba[Cave[x-1][y]])
1525 static void Lbug_w(int x, int y)
1527 switch (Cave[x-1][y])
1537 Cave[x][y] = Ybug_wB;
1538 if (Cave[x][y-1] == Xblank)
1539 Cave[x][y-1] = Xacid_splash_e;
1540 if (Cave[x-2][y-1] == Xblank)
1541 Cave[x-2][y-1] = Xacid_splash_w;
1542 Next[x][y] = Xblank;
1543 play_element_sound(x, y, SOUND_acid, Xacid_1);
1547 case Xacid_splash_e:
1548 case Xacid_splash_w:
1552 Cave[x][y] = Ybug_wB;
1553 Cave[x-1][y] = Ybug_w;
1554 Next[x][y] = Xblank;
1555 Next[x-1][y] = Xbug_1_w;
1556 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
1560 Cave[x][y] = Ybug_w_s;
1561 Next[x][y] = Xbug_2_s;
1562 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
1567 static void Lbug_1_w(int x, int y)
1569 if (tab_amoeba[Cave[x][y-1]] ||
1570 tab_amoeba[Cave[x+1][y]] ||
1571 tab_amoeba[Cave[x][y+1]] ||
1572 tab_amoeba[Cave[x-1][y]])
1579 switch (Cave[x][y-1])
1582 case Xacid_splash_e:
1583 case Xacid_splash_w:
1595 Cave[x][y] = Ybug_w_n;
1596 Next[x][y] = Xbug_2_n;
1597 play_element_sound(x, y, SOUND_bug, Xbug_1_w);
1606 static void Lbug_2_w(int x, int y)
1608 if (tab_amoeba[Cave[x][y-1]] ||
1609 tab_amoeba[Cave[x+1][y]] ||
1610 tab_amoeba[Cave[x][y+1]] ||
1611 tab_amoeba[Cave[x-1][y]])
1621 static void Ltank_n(int x, int y)
1623 switch (Cave[x][y-1])
1633 Cave[x][y] = Ytank_nB;
1634 if (Cave[x+1][y-2] == Xblank)
1635 Cave[x+1][y-2] = Xacid_splash_e;
1636 if (Cave[x-1][y-2] == Xblank)
1637 Cave[x-1][y-2] = Xacid_splash_w;
1638 Next[x][y] = Xblank;
1639 play_element_sound(x, y, SOUND_acid, Xacid_1);
1643 case Xacid_splash_e:
1644 case Xacid_splash_w:
1648 Cave[x][y] = Ytank_nB;
1649 Cave[x][y-1] = Ytank_n;
1650 Next[x][y] = Xblank;
1651 Next[x][y-1] = Xtank_1_n;
1652 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
1656 Cave[x][y] = Ytank_n_e;
1657 Next[x][y] = Xtank_2_e;
1658 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
1663 static void Ltank_1_n(int x, int y)
1665 if (tab_amoeba[Cave[x][y-1]] ||
1666 tab_amoeba[Cave[x+1][y]] ||
1667 tab_amoeba[Cave[x][y+1]] ||
1668 tab_amoeba[Cave[x-1][y]])
1675 switch (Cave[x-1][y])
1678 case Xacid_splash_e:
1679 case Xacid_splash_w:
1691 Cave[x][y] = Ytank_n_w;
1692 Next[x][y] = Xtank_2_w;
1693 play_element_sound(x, y, SOUND_tank, Xtank_1_n);
1702 static void Ltank_2_n(int x, int y)
1704 if (tab_amoeba[Cave[x][y-1]] ||
1705 tab_amoeba[Cave[x+1][y]] ||
1706 tab_amoeba[Cave[x][y+1]] ||
1707 tab_amoeba[Cave[x-1][y]])
1717 static void Ltank_e(int x, int y)
1719 switch (Cave[x+1][y])
1729 Cave[x][y] = Ytank_eB;
1730 if (Cave[x+2][y-1] == Xblank)
1731 Cave[x+2][y-1] = Xacid_splash_e;
1732 if (Cave[x][y-1] == Xblank)
1733 Cave[x][y-1] = Xacid_splash_w;
1734 Next[x][y] = Xblank;
1735 play_element_sound(x, y, SOUND_acid, Xacid_1);
1739 case Xacid_splash_e:
1740 case Xacid_splash_w:
1744 Cave[x][y] = Ytank_eB;
1745 Cave[x+1][y] = Ytank_e;
1746 Next[x][y] = Xblank;
1747 Next[x+1][y] = Xtank_1_e;
1748 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
1752 Cave[x][y] = Ytank_e_s;
1753 Next[x][y] = Xtank_2_s;
1754 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
1759 static void Ltank_1_e(int x, int y)
1761 if (tab_amoeba[Cave[x][y-1]] ||
1762 tab_amoeba[Cave[x+1][y]] ||
1763 tab_amoeba[Cave[x][y+1]] ||
1764 tab_amoeba[Cave[x-1][y]])
1771 switch (Cave[x][y-1])
1774 case Xacid_splash_e:
1775 case Xacid_splash_w:
1787 Cave[x][y] = Ytank_e_n;
1788 Next[x][y] = Xtank_2_n;
1789 play_element_sound(x, y, SOUND_tank, Xtank_1_e);
1798 static void Ltank_2_e(int x, int y)
1800 if (tab_amoeba[Cave[x][y-1]] ||
1801 tab_amoeba[Cave[x+1][y]] ||
1802 tab_amoeba[Cave[x][y+1]] ||
1803 tab_amoeba[Cave[x-1][y]])
1813 static void Ltank_s(int x, int y)
1815 switch (Cave[x][y+1])
1825 Cave[x][y] = Ytank_sB;
1826 if (Cave[x+1][y] == Xblank)
1827 Cave[x+1][y] = Xacid_splash_e;
1828 if (Cave[x-1][y] == Xblank)
1829 Cave[x-1][y] = Xacid_splash_w;
1830 Next[x][y] = Xblank;
1831 play_element_sound(x, y, SOUND_acid, Xacid_1);
1835 case Xacid_splash_e:
1836 case Xacid_splash_w:
1840 Cave[x][y] = Ytank_sB;
1841 Cave[x][y+1] = Ytank_s;
1842 Next[x][y] = Xblank;
1843 Next[x][y+1] = Xtank_1_s;
1844 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
1848 Cave[x][y] = Ytank_s_w;
1849 Next[x][y] = Xtank_2_w;
1850 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
1855 static void Ltank_1_s(int x, int y)
1857 if (tab_amoeba[Cave[x][y-1]] ||
1858 tab_amoeba[Cave[x+1][y]] ||
1859 tab_amoeba[Cave[x][y+1]] ||
1860 tab_amoeba[Cave[x-1][y]])
1867 switch (Cave[x+1][y])
1870 case Xacid_splash_e:
1871 case Xacid_splash_w:
1883 Cave[x][y] = Ytank_s_e;
1884 Next[x][y] = Xtank_2_e;
1885 play_element_sound(x, y, SOUND_tank, Xtank_1_s);
1894 static void Ltank_2_s(int x, int y)
1896 if (tab_amoeba[Cave[x][y-1]] ||
1897 tab_amoeba[Cave[x+1][y]] ||
1898 tab_amoeba[Cave[x][y+1]] ||
1899 tab_amoeba[Cave[x-1][y]])
1909 static void Ltank_w(int x, int y)
1911 switch (Cave[x-1][y])
1921 Cave[x][y] = Ytank_wB;
1922 if (Cave[x][y-1] == Xblank)
1923 Cave[x][y-1] = Xacid_splash_e;
1924 if (Cave[x-2][y-1] == Xblank)
1925 Cave[x-2][y-1] = Xacid_splash_w;
1926 Next[x][y] = Xblank;
1927 play_element_sound(x, y, SOUND_acid, Xacid_1);
1931 case Xacid_splash_e:
1932 case Xacid_splash_w:
1936 Cave[x][y] = Ytank_wB;
1937 Cave[x-1][y] = Ytank_w;
1938 Next[x][y] = Xblank;
1939 Next[x-1][y] = Xtank_1_w;
1940 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
1944 Cave[x][y] = Ytank_w_n;
1945 Next[x][y] = Xtank_2_n;
1946 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
1951 static void Ltank_1_w(int x, int y)
1953 if (tab_amoeba[Cave[x][y-1]] ||
1954 tab_amoeba[Cave[x+1][y]] ||
1955 tab_amoeba[Cave[x][y+1]] ||
1956 tab_amoeba[Cave[x-1][y]])
1963 switch (Cave[x][y+1])
1966 case Xacid_splash_e:
1967 case Xacid_splash_w:
1979 Cave[x][y] = Ytank_w_s;
1980 Next[x][y] = Xtank_2_s;
1981 play_element_sound(x, y, SOUND_tank, Xtank_1_w);
1990 static void Ltank_2_w(int x, int y)
1992 if (tab_amoeba[Cave[x][y-1]] ||
1993 tab_amoeba[Cave[x+1][y]] ||
1994 tab_amoeba[Cave[x][y+1]] ||
1995 tab_amoeba[Cave[x-1][y]])
2005 static void Lemerald(int x, int y)
2007 switch (Cave[x][y+1])
2017 Cave[x][y] = Yemerald_sB;
2018 if (Cave[x+1][y] == Xblank)
2019 Cave[x+1][y] = Xacid_splash_e;
2020 if (Cave[x-1][y] == Xblank)
2021 Cave[x-1][y] = Xacid_splash_w;
2022 Next[x][y] = Xblank;
2023 play_element_sound(x, y, SOUND_acid, Xacid_1);
2027 case Xacid_splash_e:
2028 case Xacid_splash_w:
2029 Cave[x][y] = Yemerald_sB;
2030 Cave[x][y+1] = Yemerald_s;
2031 Next[x][y] = Xblank;
2032 Next[x][y+1] = Xemerald_fall;
2051 case Xemerald_pause:
2053 case Xdiamond_pause:
2090 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2092 Cave[x][y] = Yemerald_eB;
2093 Cave[x+1][y] = Yemerald_e;
2094 Next[x][y] = Xblank;
2095 Next[x+1][y] = Xemerald_pause;
2099 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2101 Cave[x][y] = Yemerald_wB;
2102 Cave[x-1][y] = Yemerald_w;
2103 Next[x][y] = Xblank;
2104 Next[x-1][y] = Xemerald_pause;
2110 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2112 Cave[x][y] = Yemerald_wB;
2113 Cave[x-1][y] = Yemerald_w;
2114 Next[x][y] = Xblank;
2115 Next[x-1][y] = Xemerald_pause;
2119 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2121 Cave[x][y] = Yemerald_eB;
2122 Cave[x+1][y] = Yemerald_e;
2123 Next[x][y] = Xblank;
2124 Next[x+1][y] = Xemerald_pause;
2130 if (++lev.shine_cnt > 50)
2132 lev.shine_cnt = RANDOM(8);
2133 Cave[x][y] = Xemerald_shine;
2140 static void Lemerald_pause(int x, int y)
2142 switch (Cave[x][y+1])
2152 Cave[x][y] = Yemerald_sB;
2153 if (Cave[x+1][y] == Xblank)
2154 Cave[x+1][y] = Xacid_splash_e;
2155 if (Cave[x-1][y] == Xblank)
2156 Cave[x-1][y] = Xacid_splash_w;
2157 Next[x][y] = Xblank;
2158 play_element_sound(x, y, SOUND_acid, Xacid_1);
2162 case Xacid_splash_e:
2163 case Xacid_splash_w:
2164 Cave[x][y] = Yemerald_sB;
2165 Cave[x][y+1] = Yemerald_s;
2166 Next[x][y] = Xblank;
2167 Next[x][y+1] = Xemerald_fall;
2171 Cave[x][y] = Xemerald;
2172 Next[x][y] = Xemerald;
2177 static void Lemerald_fall(int x, int y)
2179 switch (Cave[x][y+1])
2189 Cave[x][y] = Yemerald_sB;
2190 if (Cave[x+1][y] == Xblank)
2191 Cave[x+1][y] = Xacid_splash_e;
2192 if (Cave[x-1][y] == Xblank)
2193 Cave[x-1][y] = Xacid_splash_w;
2194 Next[x][y] = Xblank;
2195 play_element_sound(x, y, SOUND_acid, Xacid_1);
2199 case Xacid_splash_e:
2200 case Xacid_splash_w:
2202 Cave[x][y] = Yemerald_sB;
2203 Cave[x][y+1] = Yemerald_s;
2204 Next[x][y] = Xblank;
2205 Next[x][y+1] = Xemerald_fall;
2209 if (lev.wonderwall_time)
2211 lev.wonderwall_state = 1;
2212 Cave[x][y] = Yemerald_sB;
2213 if (tab_blank[Cave[x][y+2]])
2215 Cave[x][y+2] = Ydiamond_s;
2216 Next[x][y+2] = Xdiamond_fall;
2219 Next[x][y] = Xblank;
2220 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
2225 Cave[x][y] = Xemerald;
2226 Next[x][y] = Xemerald;
2227 play_element_sound(x, y, SOUND_diamond, Xemerald);
2232 static void Ldiamond(int x, int y)
2234 switch (Cave[x][y+1])
2244 Cave[x][y] = Ydiamond_sB;
2245 if (Cave[x+1][y] == Xblank)
2246 Cave[x+1][y] = Xacid_splash_e;
2247 if (Cave[x-1][y] == Xblank)
2248 Cave[x-1][y] = Xacid_splash_w;
2249 Next[x][y] = Xblank;
2250 play_element_sound(x, y, SOUND_acid, Xacid_1);
2254 case Xacid_splash_e:
2255 case Xacid_splash_w:
2256 Cave[x][y] = Ydiamond_sB;
2257 Cave[x][y+1] = Ydiamond_s;
2258 Next[x][y] = Xblank;
2259 Next[x][y+1] = Xdiamond_fall;
2278 case Xemerald_pause:
2280 case Xdiamond_pause:
2317 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2319 Cave[x][y] = Ydiamond_eB;
2320 Cave[x+1][y] = Ydiamond_e;
2321 Next[x][y] = Xblank;
2322 Next[x+1][y] = Xdiamond_pause;
2326 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2328 Cave[x][y] = Ydiamond_wB;
2329 Cave[x-1][y] = Ydiamond_w;
2330 Next[x][y] = Xblank;
2331 Next[x-1][y] = Xdiamond_pause;
2337 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2339 Cave[x][y] = Ydiamond_wB;
2340 Cave[x-1][y] = Ydiamond_w;
2341 Next[x][y] = Xblank;
2342 Next[x-1][y] = Xdiamond_pause;
2346 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2348 Cave[x][y] = Ydiamond_eB;
2349 Cave[x+1][y] = Ydiamond_e;
2350 Next[x][y] = Xblank;
2351 Next[x+1][y] = Xdiamond_pause;
2357 if (++lev.shine_cnt > 50)
2359 lev.shine_cnt = RANDOM(8);
2360 Cave[x][y] = Xdiamond_shine;
2367 static void Ldiamond_pause(int x, int y)
2369 switch (Cave[x][y+1])
2379 Cave[x][y] = Ydiamond_sB;
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 Next[x][y] = Xblank;
2385 play_element_sound(x, y, SOUND_acid, Xacid_1);
2389 case Xacid_splash_e:
2390 case Xacid_splash_w:
2391 Cave[x][y] = Ydiamond_sB;
2392 Cave[x][y+1] = Ydiamond_s;
2393 Next[x][y] = Xblank;
2394 Next[x][y+1] = Xdiamond_fall;
2398 Cave[x][y] = Xdiamond;
2399 Next[x][y] = Xdiamond;
2404 static void Ldiamond_fall(int x, int y)
2406 switch (Cave[x][y+1])
2416 Cave[x][y] = Ydiamond_sB;
2417 if (Cave[x+1][y] == Xblank)
2418 Cave[x+1][y] = Xacid_splash_e;
2419 if (Cave[x-1][y] == Xblank)
2420 Cave[x-1][y] = Xacid_splash_w;
2421 Next[x][y] = Xblank;
2422 play_element_sound(x, y, SOUND_acid, Xacid_1);
2426 case Xacid_splash_e:
2427 case Xacid_splash_w:
2429 Cave[x][y] = Ydiamond_sB;
2430 Cave[x][y+1] = Ydiamond_s;
2431 Next[x][y] = Xblank;
2432 Next[x][y+1] = Xdiamond_fall;
2436 if (lev.wonderwall_time)
2438 lev.wonderwall_state = 1;
2439 Cave[x][y] = Ydiamond_sB;
2440 if (tab_blank[Cave[x][y+2]])
2442 Cave[x][y+2] = Ystone_s;
2443 Next[x][y+2] = Xstone_fall;
2446 Next[x][y] = Xblank;
2447 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
2452 Cave[x][y] = Xdiamond;
2453 Next[x][y] = Xdiamond;
2454 play_element_sound(x, y, SOUND_diamond, Xdiamond);
2459 static void Lstone(int x, int y)
2461 switch (Cave[x][y+1])
2471 Cave[x][y] = Ystone_sB;
2472 if (Cave[x+1][y] == Xblank)
2473 Cave[x+1][y] = Xacid_splash_e;
2474 if (Cave[x-1][y] == Xblank)
2475 Cave[x-1][y] = Xacid_splash_w;
2476 Next[x][y] = Xblank;
2477 play_element_sound(x, y, SOUND_acid, Xacid_1);
2481 case Xacid_splash_e:
2482 case Xacid_splash_w:
2485 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
2495 Cave[x][y] = Ystone_sB;
2496 Cave[x][y+1] = Ystone_s;
2497 Next[x][y] = Xblank;
2498 Next[x][y+1] = Xstone_fall;
2502 Cave[x][y] = Xsand_stonein_1;
2503 Cave[x][y+1] = Xsand_sandstone_1;
2504 Next[x][y] = Xsand_stonein_2;
2505 Next[x][y+1] = Xsand_sandstone_2;
2524 case Xemerald_pause:
2526 case Xdiamond_pause:
2556 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2558 Cave[x][y] = Ystone_eB;
2559 Cave[x+1][y] = Ystone_e;
2560 Next[x][y] = Xblank;
2561 Next[x+1][y] = Xstone_pause;
2565 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2567 Cave[x][y] = Ystone_wB;
2568 Cave[x-1][y] = Ystone_w;
2569 Next[x][y] = Xblank;
2570 Next[x-1][y] = Xstone_pause;
2576 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
2578 Cave[x][y] = Ystone_wB;
2579 Cave[x-1][y] = Ystone_w;
2580 Next[x][y] = Xblank;
2581 Next[x-1][y] = Xstone_pause;
2585 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
2587 Cave[x][y] = Ystone_eB;
2588 Cave[x+1][y] = Ystone_e;
2589 Next[x][y] = Xblank;
2590 Next[x+1][y] = Xstone_pause;
2597 static void Lstone_pause(int x, int y)
2599 switch (Cave[x][y+1])
2609 Cave[x][y] = Ystone_sB;
2610 if (Cave[x+1][y] == Xblank)
2611 Cave[x+1][y] = Xacid_splash_e;
2612 if (Cave[x-1][y] == Xblank)
2613 Cave[x-1][y] = Xacid_splash_w;
2614 Next[x][y] = Xblank;
2615 play_element_sound(x, y, SOUND_acid, Xacid_1);
2619 case Xacid_splash_e:
2620 case Xacid_splash_w:
2621 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
2631 Cave[x][y] = Ystone_sB;
2632 Cave[x][y+1] = Ystone_s;
2633 Next[x][y] = Xblank;
2634 Next[x][y+1] = Xstone_fall;
2638 Cave[x][y] = Xstone;
2639 Next[x][y] = Xstone;
2644 static void Lstone_fall(int x, int y)
2646 switch (Cave[x][y+1])
2656 Cave[x][y] = Ystone_sB;
2657 if (Cave[x+1][y] == Xblank)
2658 Cave[x+1][y] = Xacid_splash_e;
2659 if (Cave[x-1][y] == Xblank)
2660 Cave[x-1][y] = Xacid_splash_w;
2661 Next[x][y] = Xblank;
2662 play_element_sound(x, y, SOUND_acid, Xacid_1);
2666 case Xacid_splash_e:
2667 case Xacid_splash_w:
2669 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
2679 Cave[x][y] = Ystone_sB;
2680 Cave[x][y+1] = Ystone_s;
2681 Next[x][y] = Xblank;
2682 Next[x][y+1] = Xstone_fall;
2687 Cave[x][y+1] = Ynut_stone;
2688 Next[x][y] = Xstone;
2689 Next[x][y+1] = Xemerald;
2690 play_element_sound(x, y, SOUND_crack, Xnut);
2691 score += lev.nut_score;
2702 Cave[x][y] = Ystone_sB;
2703 Cave[x][y+1] = Ybug_stone;
2704 Next[x][y+1] = Znormal;
2705 Boom[x-1][y] = Xemerald;
2706 Boom[x][y] = Xemerald;
2707 Boom[x+1][y] = Xemerald;
2708 Boom[x-1][y+1] = Xemerald;
2709 Boom[x][y+1] = Xdiamond;
2710 Boom[x+1][y+1] = Xemerald;
2711 Boom[x-1][y+2] = Xemerald;
2712 Boom[x][y+2] = Xemerald;
2713 Boom[x+1][y+2] = Xemerald;
2714 #if PLAY_ELEMENT_SOUND
2715 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2717 score += lev.bug_score;
2728 Cave[x][y] = Ystone_sB;
2729 Cave[x][y+1] = Ytank_stone;
2730 Next[x][y+1] = Znormal;
2731 Boom[x-1][y] = Xblank;
2732 Boom[x][y] = Xblank;
2733 Boom[x+1][y] = Xblank;
2734 Boom[x-1][y+1] = Xblank;
2735 Boom[x][y+1] = Xblank;
2736 Boom[x+1][y+1] = Xblank;
2737 Boom[x-1][y+2] = Xblank;
2738 Boom[x][y+2] = Xblank;
2739 Boom[x+1][y+2] = Xblank;
2740 #if PLAY_ELEMENT_SOUND
2741 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2743 score += lev.tank_score;
2749 switch (Cave[x+1][y+1])
2752 case Xacid_splash_e:
2753 case Xacid_splash_w:
2756 Cave[x][y+1] = Xspring_e;
2760 Cave[x][y+1] = Xspring_w;
2766 switch (Cave[x-1][y+1])
2769 case Xacid_splash_e:
2770 case Xacid_splash_w:
2773 Cave[x][y+1] = Xspring_w;
2776 Cave[x][y+1] = Xspring_e;
2781 Next[x][y] = Xstone;
2788 Cave[x][y] = Ystone_sB;
2789 Cave[x][y+1] = Yeater_stone;
2790 Next[x][y+1] = Znormal;
2791 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
2792 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
2793 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
2794 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
2795 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
2796 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
2797 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
2798 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
2799 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
2800 #if PLAY_ELEMENT_SOUND
2801 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2803 lev.eater_pos = (lev.eater_pos + 1) & 7;
2804 score += lev.eater_score;
2809 Cave[x][y] = Ystone_sB;
2810 Cave[x][y+1] = Yalien_stone;
2811 Next[x][y+1] = Znormal;
2812 Boom[x-1][y] = Xblank;
2813 Boom[x][y] = Xblank;
2814 Boom[x+1][y] = Xblank;
2815 Boom[x-1][y+1] = Xblank;
2816 Boom[x][y+1] = Xblank;
2817 Boom[x+1][y+1] = Xblank;
2818 Boom[x-1][y+2] = Xblank;
2819 Boom[x][y+2] = Xblank;
2820 Boom[x+1][y+2] = Xblank;
2821 #if PLAY_ELEMENT_SOUND
2822 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2824 score += lev.alien_score;
2828 case Xdiamond_pause:
2829 switch (Cave[x][y+2])
2832 case Xacid_splash_e:
2833 case Xacid_splash_w:
2877 Next[x][y] = Xstone;
2878 play_element_sound(x, y, SOUND_stone, Xstone);
2882 Cave[x][y] = Ystone_sB;
2883 Cave[x][y+1] = Ydiamond_stone;
2884 Next[x][y] = Xblank;
2885 Next[x][y+1] = Xstone_pause;
2886 play_element_sound(x, y, SOUND_squash, Xdiamond);
2891 Cave[x][y+1] = Ybomb_blank;
2892 Next[x][y+1] = Znormal;
2893 Boom[x-1][y] = Xblank;
2894 Boom[x][y] = Xblank;
2895 Boom[x+1][y] = Xblank;
2896 Boom[x-1][y+1] = Xblank;
2897 Boom[x][y+1] = Xblank;
2898 Boom[x+1][y+1] = Xblank;
2899 Boom[x-1][y+2] = Xblank;
2900 Boom[x][y+2] = Xblank;
2901 Boom[x+1][y+2] = Xblank;
2902 #if PLAY_ELEMENT_SOUND
2903 play_element_sound(x, y, SOUND_boom, Xstone_fall);
2908 if (lev.wonderwall_time)
2910 lev.wonderwall_state = 1;
2911 Cave[x][y] = Ystone_sB;
2913 if (tab_blank[Cave[x][y+2]])
2915 Cave[x][y+2] = Yemerald_s;
2916 Next[x][y+2] = Xemerald_fall;
2919 Next[x][y] = Xblank;
2920 play_element_sound(x, y, SOUND_wonderfall, Xwonderwall);
2925 Cave[x][y] = Xstone;
2926 Next[x][y] = Xstone;
2927 play_element_sound(x, y, SOUND_stone, Xstone);
2932 static void Lbomb(int x, int y)
2934 switch (Cave[x][y+1])
2944 Cave[x][y] = Ybomb_sB;
2945 if (Cave[x+1][y] == Xblank)
2946 Cave[x+1][y] = Xacid_splash_e;
2947 if (Cave[x-1][y] == Xblank)
2948 Cave[x-1][y] = Xacid_splash_w;
2949 Next[x][y] = Xblank;
2950 play_element_sound(x, y, SOUND_acid, Xacid_1);
2954 case Xacid_splash_e:
2955 case Xacid_splash_w:
2956 Cave[x][y] = Ybomb_sB;
2957 Cave[x][y+1] = Ybomb_s;
2958 Next[x][y] = Xblank;
2959 Next[x][y+1] = Xbomb_fall;
2978 case Xemerald_pause:
2980 case Xdiamond_pause:
3008 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3010 Cave[x][y] = Ybomb_eB;
3011 Cave[x+1][y] = Ybomb_e;
3012 Next[x][y] = Xblank;
3013 Next[x+1][y] = Xbomb_pause;
3017 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3019 Cave[x][y] = Ybomb_wB;
3020 Cave[x-1][y] = Ybomb_w;
3021 Next[x][y] = Xblank;
3022 Next[x-1][y] = Xbomb_pause;
3028 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3030 Cave[x][y] = Ybomb_wB;
3031 Cave[x-1][y] = Ybomb_w;
3032 Next[x][y] = Xblank;
3033 Next[x-1][y] = Xbomb_pause;
3037 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3039 Cave[x][y] = Ybomb_eB;
3040 Cave[x+1][y] = Ybomb_e;
3041 Next[x][y] = Xblank;
3042 Next[x+1][y] = Xbomb_pause;
3049 static void Lbomb_pause(int x, int y)
3051 switch (Cave[x][y+1])
3061 Cave[x][y] = Ybomb_sB;
3062 if (Cave[x+1][y] == Xblank)
3063 Cave[x+1][y] = Xacid_splash_e;
3064 if (Cave[x-1][y] == Xblank)
3065 Cave[x-1][y] = Xacid_splash_w;
3066 Next[x][y] = Xblank;
3067 play_element_sound(x, y, SOUND_acid, Xacid_1);
3071 case Xacid_splash_e:
3072 case Xacid_splash_w:
3073 Cave[x][y] = Ybomb_sB;
3074 Cave[x][y+1] = Ybomb_s;
3075 Next[x][y] = Xblank;
3076 Next[x][y+1] = Xbomb_fall;
3086 static void Lbomb_fall(int x, int y)
3088 switch (Cave[x][y+1])
3098 Cave[x][y] = Ybomb_sB;
3099 if (Cave[x+1][y] == Xblank)
3100 Cave[x+1][y] = Xacid_splash_e;
3101 if (Cave[x-1][y] == Xblank)
3102 Cave[x-1][y] = Xacid_splash_w;
3103 Next[x][y] = Xblank;
3104 play_element_sound(x, y, SOUND_acid, Xacid_1);
3108 case Xacid_splash_e:
3109 case Xacid_splash_w:
3110 Cave[x][y] = Ybomb_sB;
3111 Cave[x][y+1] = Ybomb_s;
3112 Next[x][y] = Xblank;
3113 Next[x][y+1] = Xbomb_fall;
3117 Cave[x][y] = Ybomb_blank;
3118 Next[x][y] = Znormal;
3119 Boom[x-1][y-1] = Xblank;
3120 Boom[x][y-1] = Xblank;
3121 Boom[x+1][y-1] = Xblank;
3122 Boom[x-1][y] = Xblank;
3123 Boom[x][y] = Xblank;
3124 Boom[x+1][y] = Xblank;
3125 Boom[x-1][y+1] = Xblank;
3126 Boom[x][y+1] = Xblank;
3127 Boom[x+1][y+1] = Xblank;
3128 #if PLAY_ELEMENT_SOUND
3129 play_element_sound(x, y, SOUND_boom, Xbomb_fall);
3135 static void Lnut(int x, int y)
3137 switch (Cave[x][y+1])
3147 Cave[x][y] = Ynut_sB;
3148 if (Cave[x+1][y] == Xblank)
3149 Cave[x+1][y] = Xacid_splash_e;
3150 if (Cave[x-1][y] == Xblank)
3151 Cave[x-1][y] = Xacid_splash_w;
3152 Next[x][y] = Xblank;
3153 play_element_sound(x, y, SOUND_acid, Xacid_1);
3157 case Xacid_splash_e:
3158 case Xacid_splash_w:
3159 Cave[x][y] = Ynut_sB;
3160 Cave[x][y+1] = Ynut_s;
3161 Next[x][y] = Xblank;
3162 Next[x][y+1] = Xnut_fall;
3181 case Xemerald_pause:
3183 case Xdiamond_pause:
3211 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3213 Cave[x][y] = Ynut_eB;
3214 Cave[x+1][y] = Ynut_e;
3215 Next[x][y] = Xblank;
3216 Next[x+1][y] = Xnut_pause;
3220 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3222 Cave[x][y] = Ynut_wB;
3223 Cave[x-1][y] = Ynut_w;
3224 Next[x][y] = Xblank;
3225 Next[x-1][y] = Xnut_pause;
3231 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3233 Cave[x][y] = Ynut_wB;
3234 Cave[x-1][y] = Ynut_w;
3235 Next[x][y] = Xblank;
3236 Next[x-1][y] = Xnut_pause;
3240 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3242 Cave[x][y] = Ynut_eB;
3243 Cave[x+1][y] = Ynut_e;
3244 Next[x][y] = Xblank;
3245 Next[x+1][y] = Xnut_pause;
3252 static void Lnut_pause(int x, int y)
3254 switch (Cave[x][y+1])
3264 Cave[x][y] = Ynut_sB;
3265 if (Cave[x+1][y] == Xblank)
3266 Cave[x+1][y] = Xacid_splash_e;
3267 if (Cave[x-1][y] == Xblank)
3268 Cave[x-1][y] = Xacid_splash_w;
3269 Next[x][y] = Xblank;
3270 play_element_sound(x, y, SOUND_acid, Xacid_1);
3274 case Xacid_splash_e:
3275 case Xacid_splash_w:
3276 Cave[x][y] = Ynut_sB;
3277 Cave[x][y+1] = Ynut_s;
3278 Next[x][y] = Xblank;
3279 Next[x][y+1] = Xnut_fall;
3289 static void Lnut_fall(int x, int y)
3291 switch (Cave[x][y+1])
3301 Cave[x][y] = Ynut_sB;
3302 if (Cave[x+1][y] == Xblank)
3303 Cave[x+1][y] = Xacid_splash_e;
3304 if (Cave[x-1][y] == Xblank)
3305 Cave[x-1][y] = Xacid_splash_w;
3306 Next[x][y] = Xblank;
3307 play_element_sound(x, y, SOUND_acid, Xacid_1);
3311 case Xacid_splash_e:
3312 case Xacid_splash_w:
3314 Cave[x][y] = Ynut_sB;
3315 Cave[x][y+1] = Ynut_s;
3316 Next[x][y] = Xblank;
3317 Next[x][y+1] = Xnut_fall;
3323 play_element_sound(x, y, SOUND_nut, Xnut);
3328 static void Lspring(int x, int y)
3330 switch (Cave[x][y+1])
3340 Cave[x][y] = Yspring_sB;
3341 if (Cave[x+1][y] == Xblank)
3342 Cave[x+1][y] = Xacid_splash_e;
3343 if (Cave[x-1][y] == Xblank)
3344 Cave[x-1][y] = Xacid_splash_w;
3345 Next[x][y] = Xblank;
3346 play_element_sound(x, y, SOUND_acid, Xacid_1);
3350 case Xacid_splash_e:
3351 case Xacid_splash_w:
3354 Cave[x][y] = Yspring_sB;
3355 Cave[x][y+1] = Yspring_s;
3356 Next[x][y] = Xblank;
3357 Next[x][y+1] = Xspring_fall;
3376 case Xemerald_pause:
3378 case Xdiamond_pause:
3406 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3408 Cave[x][y] = Yspring_eB;
3409 Cave[x+1][y] = Yspring_e;
3410 if (Cave[x][y+1] == Xbumper)
3411 Cave[x][y+1] = XbumperB;
3412 Next[x][y] = Xblank;
3415 Next[x+1][y] = Xspring_e;
3417 Next[x+1][y] = Xspring_pause;
3422 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3424 Cave[x][y] = Yspring_wB;
3425 Cave[x-1][y] = Yspring_w;
3426 if (Cave[x][y+1] == Xbumper)
3427 Cave[x][y+1] = XbumperB;
3428 Next[x][y] = Xblank;
3431 Next[x-1][y] = Xspring_w;
3433 Next[x-1][y] = Xspring_pause;
3440 if (tab_blank[Cave[x-1][y]] && tab_acid[Cave[x-1][y+1]])
3442 Cave[x][y] = Yspring_wB;
3443 Cave[x-1][y] = Yspring_w;
3444 if (Cave[x][y+1] == Xbumper)
3445 Cave[x][y+1] = XbumperB;
3446 Next[x][y] = Xblank;
3449 Next[x-1][y] = Xspring_w;
3451 Next[x-1][y] = Xspring_pause;
3456 if (tab_blank[Cave[x+1][y]] && tab_acid[Cave[x+1][y+1]])
3458 Cave[x][y] = Yspring_eB;
3459 Cave[x+1][y] = Yspring_e;
3460 if (Cave[x][y+1] == Xbumper)
3461 Cave[x][y+1] = XbumperB;
3462 Next[x][y] = Xblank;
3465 Next[x+1][y] = Xspring_e;
3467 Next[x+1][y] = Xspring_pause;
3475 static void Lspring_pause(int x, int y)
3477 switch (Cave[x][y+1])
3487 Cave[x][y] = Yspring_sB;
3488 if (Cave[x+1][y] == Xblank)
3489 Cave[x+1][y] = Xacid_splash_e;
3490 if (Cave[x-1][y] == Xblank)
3491 Cave[x-1][y] = Xacid_splash_w;
3492 Next[x][y] = Xblank;
3493 play_element_sound(x, y, SOUND_acid, Xacid_1);
3497 case Xacid_splash_e:
3498 case Xacid_splash_w:
3499 Cave[x][y] = Yspring_sB;
3500 Cave[x][y+1] = Yspring_s;
3501 Next[x][y] = Xblank;
3502 Next[x][y+1] = Xspring_fall;
3506 Cave[x][y] = Xspring;
3507 Next[x][y] = Xspring;
3512 static void Lspring_e(int x, int y)
3514 switch (Cave[x][y+1])
3524 Cave[x][y] = Yspring_sB;
3525 if (Cave[x+1][y] == Xblank)
3526 Cave[x+1][y] = Xacid_splash_e;
3527 if (Cave[x-1][y] == Xblank)
3528 Cave[x-1][y] = Xacid_splash_w;
3529 Next[x][y] = Xblank;
3530 play_element_sound(x, y, SOUND_acid, Xacid_1);
3534 case Xacid_splash_e:
3535 case Xacid_splash_w:
3536 Cave[x][y] = Yspring_sB;
3537 Cave[x][y+1] = Yspring_s;
3538 Next[x][y] = Xblank;
3539 Next[x][y+1] = Xspring_fall;
3543 Cave[x][y+1] = XbumperB;
3546 switch (Cave[x+1][y])
3556 Cave[x][y] = Yspring_eB;
3557 if (Cave[x+2][y-1] == Xblank)
3558 Cave[x+2][y-1] = Xacid_splash_e;
3559 if (Cave[x][y-1] == Xblank)
3560 Cave[x][y-1] = Xacid_splash_w;
3561 Next[x][y] = Xblank;
3562 play_element_sound(x, y, SOUND_acid, Xacid_1);
3566 case Xacid_splash_e:
3567 case Xacid_splash_w:
3572 Cave[x][y] = Yspring_eB;
3573 Cave[x+1][y] = Yspring_e;
3574 Next[x][y] = Xblank;
3575 Next[x+1][y] = Xspring_e;
3584 Cave[x][y] = Yspring_alien_eB;
3585 Cave[x+1][y] = Yspring_alien_e;
3586 Next[x][y] = Xblank;
3587 Next[x+1][y] = Xspring_e;
3588 play_element_sound(x, y, SOUND_slurp, Xalien);
3589 score += lev.slurp_score;
3594 Cave[x+1][y] = XbumperB;
3595 Next[x][y] = Xspring_w;
3596 play_element_sound(x, y, SOUND_spring, Xspring);
3600 Cave[x][y] = Xspring;
3601 Next[x][y] = Xspring;
3602 play_element_sound(x, y, SOUND_spring, Xspring);
3607 static void Lspring_w(int x, int y)
3609 switch (Cave[x][y+1])
3619 Cave[x][y] = Yspring_sB;
3620 if (Cave[x+1][y] == Xblank)
3621 Cave[x+1][y] = Xacid_splash_e;
3622 if (Cave[x-1][y] == Xblank)
3623 Cave[x-1][y] = Xacid_splash_w;
3624 Next[x][y] = Xblank;
3625 play_element_sound(x, y, SOUND_acid, Xacid_1);
3629 case Xacid_splash_e:
3630 case Xacid_splash_w:
3631 Cave[x][y] = Yspring_sB;
3632 Cave[x][y+1] = Yspring_s;
3633 Next[x][y] = Xblank;
3634 Next[x][y+1] = Xspring_fall;
3638 Cave[x][y+1] = XbumperB;
3641 switch (Cave[x-1][y])
3651 Cave[x][y] = Yspring_wB;
3652 if (Cave[x][y-1] == Xblank)
3653 Cave[x][y-1] = Xacid_splash_e;
3654 if (Cave[x-2][y-1] == Xblank)
3655 Cave[x-2][y-1] = Xacid_splash_w;
3656 Next[x][y] = Xblank;
3657 play_element_sound(x, y, SOUND_acid, Xacid_1);
3661 case Xacid_splash_e:
3662 case Xacid_splash_w:
3667 Cave[x][y] = Yspring_wB;
3668 Cave[x-1][y] = Yspring_w;
3669 Next[x][y] = Xblank;
3670 Next[x-1][y] = Xspring_w;
3679 Cave[x][y] = Yspring_alien_wB;
3680 Cave[x-1][y] = Yspring_alien_w;
3681 Next[x][y] = Xblank;
3682 Next[x-1][y] = Xspring_w;
3683 play_element_sound(x, y, SOUND_slurp, Xalien);
3684 score += lev.slurp_score;
3689 Cave[x-1][y] = XbumperB;
3690 Next[x][y] = Xspring_e;
3691 play_element_sound(x, y, SOUND_spring, Xspring);
3695 Cave[x][y] = Xspring;
3696 Next[x][y] = Xspring;
3697 play_element_sound(x, y, SOUND_spring, Xspring);
3702 static void Lspring_fall(int x, int y)
3704 switch (Cave[x][y+1])
3714 Cave[x][y] = Yspring_sB;
3715 if (Cave[x+1][y] == Xblank)
3716 Cave[x+1][y] = Xacid_splash_e;
3717 if (Cave[x-1][y] == Xblank)
3718 Cave[x-1][y] = Xacid_splash_w;
3719 Next[x][y] = Xblank;
3720 play_element_sound(x, y, SOUND_acid, Xacid_1);
3724 case Xacid_splash_e:
3725 case Xacid_splash_w:
3727 Cave[x][y] = Yspring_sB;
3728 Cave[x][y+1] = Yspring_s;
3729 Next[x][y] = Xblank;
3730 Next[x][y+1] = Xspring_fall;
3735 Cave[x][y+1] = Ybomb_blank;
3736 Next[x][y+1] = Znormal;
3737 Boom[x-1][y] = Xblank;
3738 Boom[x][y] = Xblank;
3739 Boom[x+1][y] = Xblank;
3740 Boom[x-1][y+1] = Xblank;
3741 Boom[x][y+1] = Xblank;
3742 Boom[x+1][y+1] = Xblank;
3743 Boom[x-1][y+2] = Xblank;
3744 Boom[x][y+2] = Xblank;
3745 Boom[x+1][y+2] = Xblank;
3746 #if PLAY_ELEMENT_SOUND
3747 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3759 Cave[x][y] = Yspring_sB;
3760 Cave[x][y+1] = Ybug_spring;
3761 Next[x][y+1] = Znormal;
3762 Boom[x-1][y] = Xemerald;
3763 Boom[x][y] = Xemerald;
3764 Boom[x+1][y] = Xemerald;
3765 Boom[x-1][y+1] = Xemerald;
3766 Boom[x][y+1] = Xdiamond;
3767 Boom[x+1][y+1] = Xemerald;
3768 Boom[x-1][y+2] = Xemerald;
3769 Boom[x][y+2] = Xemerald;
3770 Boom[x+1][y+2] = Xemerald;
3771 #if PLAY_ELEMENT_SOUND
3772 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3774 score += lev.bug_score;
3785 Cave[x][y] = Yspring_sB;
3786 Cave[x][y+1] = Ytank_spring;
3787 Next[x][y+1] = Znormal;
3788 Boom[x-1][y] = Xblank;
3789 Boom[x][y] = Xblank;
3790 Boom[x+1][y] = Xblank;
3791 Boom[x-1][y+1] = Xblank;
3792 Boom[x][y+1] = Xblank;
3793 Boom[x+1][y+1] = Xblank;
3794 Boom[x-1][y+2] = Xblank;
3795 Boom[x][y+2] = Xblank;
3796 Boom[x+1][y+2] = Xblank;
3797 #if PLAY_ELEMENT_SOUND
3798 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3800 score += lev.tank_score;
3807 Cave[x][y] = Yspring_sB;
3808 Cave[x][y+1] = Yeater_spring;
3809 Next[x][y+1] = Znormal;
3810 Boom[x-1][y] = lev.eater_array[lev.eater_pos][0];
3811 Boom[x][y] = lev.eater_array[lev.eater_pos][1];
3812 Boom[x+1][y] = lev.eater_array[lev.eater_pos][2];
3813 Boom[x-1][y+1] = lev.eater_array[lev.eater_pos][3];
3814 Boom[x][y+1] = lev.eater_array[lev.eater_pos][4];
3815 Boom[x+1][y+1] = lev.eater_array[lev.eater_pos][5];
3816 Boom[x-1][y+2] = lev.eater_array[lev.eater_pos][6];
3817 Boom[x][y+2] = lev.eater_array[lev.eater_pos][7];
3818 Boom[x+1][y+2] = lev.eater_array[lev.eater_pos][8];
3819 #if PLAY_ELEMENT_SOUND
3820 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3822 lev.eater_pos = (lev.eater_pos + 1) & 7;
3823 score += lev.eater_score;
3828 Cave[x][y] = Yspring_sB;
3829 Cave[x][y+1] = Yalien_spring;
3830 Next[x][y+1] = Znormal;
3831 Boom[x-1][y] = Xblank;
3832 Boom[x][y] = Xblank;
3833 Boom[x+1][y] = Xblank;
3834 Boom[x-1][y+1] = Xblank;
3835 Boom[x][y+1] = Xblank;
3836 Boom[x+1][y+1] = Xblank;
3837 Boom[x-1][y+2] = Xblank;
3838 Boom[x][y+2] = Xblank;
3839 Boom[x+1][y+2] = Xblank;
3840 #if PLAY_ELEMENT_SOUND
3841 play_element_sound(x, y, SOUND_boom, Xspring_fall);
3843 score += lev.alien_score;
3847 Cave[x][y] = Xspring;
3848 Next[x][y] = Xspring;
3849 play_element_sound(x, y, SOUND_spring, Xspring);
3854 static void Lpush_emerald_e(int x, int y)
3856 switch (Cave[x+1][y])
3866 Cave[x][y] = Xemerald;
3867 Next[x][y] = Xemerald;
3871 Cave[x][y] = Yemerald_eB;
3872 Cave[x+1][y] = Yemerald_e;
3873 Next[x][y] = Xblank;
3874 Next[x+1][y] = Xemerald_pause;
3879 static void Lpush_emerald_w(int x, int y)
3881 switch (Cave[x-1][y])
3891 Cave[x][y] = Xemerald;
3892 Next[x][y] = Xemerald;
3896 Cave[x][y] = Yemerald_wB;
3897 Cave[x-1][y] = Yemerald_w;
3898 Next[x][y] = Xblank;
3899 Next[x-1][y] = Xemerald_pause;
3904 static void Lpush_diamond_e(int x, int y)
3906 switch (Cave[x+1][y])
3916 Cave[x][y] = Xdiamond;
3917 Next[x][y] = Xdiamond;
3921 Cave[x][y] = Ydiamond_eB;
3922 Cave[x+1][y] = Ydiamond_e;
3923 Next[x][y] = Xblank;
3924 Next[x+1][y] = Xdiamond_pause;
3929 static void Lpush_diamond_w(int x, int y)
3931 switch (Cave[x-1][y])
3941 Cave[x][y] = Xdiamond;
3942 Next[x][y] = Xdiamond;
3946 Cave[x][y] = Ydiamond_wB;
3947 Cave[x-1][y] = Ydiamond_w;
3948 Next[x][y] = Xblank;
3949 Next[x-1][y] = Xdiamond_pause;
3954 static void Lpush_stone_e(int x, int y)
3956 switch (Cave[x+1][y])
3966 Cave[x][y] = Xstone;
3967 Next[x][y] = Xstone;
3971 Cave[x][y] = Ystone_eB;
3972 Cave[x+1][y] = Ystone_e;
3973 Next[x][y] = Xblank;
3974 Next[x+1][y] = Xstone_pause;
3979 static void Lpush_stone_w(int x, int y)
3981 switch (Cave[x-1][y])
3991 Cave[x][y] = Xstone;
3992 Next[x][y] = Xstone;
3996 Cave[x][y] = Ystone_wB;
3997 Cave[x-1][y] = Ystone_w;
3998 Next[x][y] = Xblank;
3999 Next[x-1][y] = Xstone_pause;
4004 static void Lpush_bomb_e(int x, int y)
4006 switch (Cave[x+1][y])
4021 Cave[x][y] = Ybomb_eB;
4022 Cave[x+1][y] = Ybomb_e;
4023 Next[x][y] = Xblank;
4024 Next[x+1][y] = Xbomb_pause;
4029 static void Lpush_bomb_w(int x, int y)
4031 switch (Cave[x-1][y])
4046 Cave[x][y] = Ybomb_wB;
4047 Cave[x-1][y] = Ybomb_w;
4048 Next[x][y] = Xblank;
4049 Next[x-1][y] = Xbomb_pause;
4054 static void Lpush_nut_e(int x, int y)
4056 switch (Cave[x+1][y])
4071 Cave[x][y] = Ynut_eB;
4072 Cave[x+1][y] = Ynut_e;
4073 Next[x][y] = Xblank;
4074 Next[x+1][y] = Xnut_pause;
4079 static void Lpush_nut_w(int x, int y)
4081 switch (Cave[x-1][y])
4096 Cave[x][y] = Ynut_wB;
4097 Cave[x-1][y] = Ynut_w;
4098 Next[x][y] = Xblank;
4099 Next[x-1][y] = Xnut_pause;
4104 static void Lpush_spring_e(int x, int y)
4106 switch (Cave[x+1][y])
4116 Cave[x][y] = Xspring;
4117 Next[x][y] = Xspring;
4121 Cave[x][y] = Yspring_eB;
4122 Cave[x+1][y] = Yspring_e;
4123 Next[x][y] = Xblank;
4124 Next[x+1][y] = Xspring_e;
4129 static void Lpush_spring_w(int x, int y)
4131 switch (Cave[x-1][y])
4141 Cave[x][y] = Xspring;
4142 Next[x][y] = Xspring;
4146 Cave[x][y] = Yspring_wB;
4147 Cave[x-1][y] = Yspring_w;
4148 Next[x][y] = Xblank;
4149 Next[x-1][y] = Xspring_w;
4154 static void Lballoon(int x, int y)
4156 if (lev.wind_cnt == 0)
4159 switch (lev.wind_direction)
4162 switch (Cave[x][y-1])
4172 Cave[x][y] = Yballoon_nB;
4173 if (Cave[x+1][y-2] == Xblank)
4174 Cave[x+1][y-2] = Xacid_splash_e;
4175 if (Cave[x-1][y-2] == Xblank)
4176 Cave[x-1][y-2] = Xacid_splash_w;
4177 Next[x][y] = Xblank;
4178 play_element_sound(x, y, SOUND_acid, Xacid_1);
4182 case Xacid_splash_e:
4183 case Xacid_splash_w:
4184 Cave[x][y] = Yballoon_nB;
4185 Cave[x][y-1] = Yballoon_n;
4186 Next[x][y] = Xblank;
4187 Next[x][y-1] = Xballoon;
4193 switch (Cave[x+1][y])
4203 Cave[x][y] = Yballoon_eB;
4204 if (Cave[x+2][y-1] == Xblank)
4205 Cave[x+2][y-1] = Xacid_splash_e;
4206 if (Cave[x][y-1] == Xblank)
4207 Cave[x][y-1] = Xacid_splash_w;
4208 Next[x][y] = Xblank;
4209 play_element_sound(x, y, SOUND_acid, Xacid_1);
4213 case Xacid_splash_e:
4214 case Xacid_splash_w:
4215 Cave[x][y] = Yballoon_eB;
4216 Cave[x+1][y] = Yballoon_e;
4217 Next[x][y] = Xblank;
4218 Next[x+1][y] = Xballoon;
4224 switch (Cave[x][y+1])
4234 Cave[x][y] = Yballoon_sB;
4235 if (Cave[x+1][y] == Xblank)
4236 Cave[x+1][y] = Xacid_splash_e;
4237 if (Cave[x-1][y] == Xblank)
4238 Cave[x-1][y] = Xacid_splash_w;
4239 Next[x][y] = Xblank;
4240 play_element_sound(x, y, SOUND_acid, Xacid_1);
4244 case Xacid_splash_e:
4245 case Xacid_splash_w:
4246 Cave[x][y] = Yballoon_sB;
4247 Cave[x][y+1] = Yballoon_s;
4248 Next[x][y] = Xblank;
4249 Next[x][y+1] = Xballoon;
4255 switch (Cave[x-1][y])
4265 Cave[x][y] = Yballoon_wB;
4266 if (Cave[x][y-1] == Xblank)
4267 Cave[x][y-1] = Xacid_splash_e;
4268 if (Cave[x-2][y-1] == Xblank)
4269 Cave[x-2][y-1] = Xacid_splash_w;
4270 Next[x][y] = Xblank;
4271 play_element_sound(x, y, SOUND_acid, Xacid_1);
4275 case Xacid_splash_e:
4276 case Xacid_splash_w:
4277 Cave[x][y] = Yballoon_wB;
4278 Cave[x-1][y] = Yballoon_w;
4279 Next[x][y] = Xblank;
4280 Next[x-1][y] = Xballoon;
4287 static void Lball_common(int x, int y)
4289 play_element_sound(x, y, SOUND_ball, Xball_1);
4291 if (lev.ball_random)
4296 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
4297 tab_blank[Cave[x-1][y-1]])
4299 Cave[x-1][y-1] = Yball_blank;
4300 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
4305 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
4306 tab_blank[Cave[x][y-1]])
4308 Cave[x][y-1] = Yball_blank;
4309 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
4314 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
4315 tab_blank[Cave[x+1][y-1]])
4317 Cave[x+1][y-1] = Yball_blank;
4318 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
4323 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
4324 tab_blank[Cave[x-1][y]])
4326 Cave[x-1][y] = Yball_blank;
4327 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
4332 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
4333 tab_blank[Cave[x+1][y]])
4335 Cave[x+1][y] = Yball_blank;
4336 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
4341 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
4342 tab_blank[Cave[x-1][y+1]])
4344 Cave[x-1][y+1] = Yball_blank;
4345 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
4350 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
4351 tab_blank[Cave[x][y+1]])
4353 Cave[x][y+1] = Yball_blank;
4354 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
4359 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
4360 tab_blank[Cave[x+1][y+1]])
4362 Cave[x+1][y+1] = Yball_blank;
4363 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
4370 if (lev.ball_array[lev.ball_pos][0] != Xblank &&
4371 tab_blank[Cave[x-1][y-1]])
4373 Cave[x-1][y-1] = Yball_blank;
4374 Next[x-1][y-1] = lev.ball_array[lev.ball_pos][0];
4377 if (lev.ball_array[lev.ball_pos][1] != Xblank &&
4378 tab_blank[Cave[x][y-1]])
4380 Cave[x][y-1] = Yball_blank;
4381 Next[x][y-1] = lev.ball_array[lev.ball_pos][1];
4384 if (lev.ball_array[lev.ball_pos][2] != Xblank &&
4385 tab_blank[Cave[x+1][y-1]])
4387 Cave[x+1][y-1] = Yball_blank;
4388 Next[x+1][y-1] = lev.ball_array[lev.ball_pos][2];
4391 if (lev.ball_array[lev.ball_pos][3] != Xblank &&
4392 tab_blank[Cave[x-1][y]])
4394 Cave[x-1][y] = Yball_blank;
4395 Next[x-1][y] = lev.ball_array[lev.ball_pos][3];
4398 if (lev.ball_array[lev.ball_pos][4] != Xblank &&
4399 tab_blank[Cave[x+1][y]])
4401 Cave[x+1][y] = Yball_blank;
4402 Next[x+1][y] = lev.ball_array[lev.ball_pos][4];
4405 if (lev.ball_array[lev.ball_pos][5] != Xblank &&
4406 tab_blank[Cave[x-1][y+1]])
4408 Cave[x-1][y+1] = Yball_blank;
4409 Next[x-1][y+1] = lev.ball_array[lev.ball_pos][5];
4412 if (lev.ball_array[lev.ball_pos][6] != Xblank &&
4413 tab_blank[Cave[x][y+1]])
4415 Cave[x][y+1] = Yball_blank;
4416 Next[x][y+1] = lev.ball_array[lev.ball_pos][6];
4419 if (lev.ball_array[lev.ball_pos][7] != Xblank &&
4420 tab_blank[Cave[x+1][y+1]])
4422 Cave[x+1][y+1] = Yball_blank;
4423 Next[x+1][y+1] = lev.ball_array[lev.ball_pos][7];
4427 lev.ball_pos = (lev.ball_pos + 1) % lev.num_ball_arrays;
4430 static void Lball_1(int x, int y)
4432 if (lev.ball_state == 0)
4435 Cave[x][y] = Yball_1;
4436 Next[x][y] = Xball_2;
4443 static void Lball_2(int x, int y)
4445 if (lev.ball_state == 0)
4448 Cave[x][y] = Yball_2;
4449 Next[x][y] = Xball_1;
4456 static void Ldrip(int x, int y)
4458 Next[x][y] = Xdrip_fall;
4461 static void Ldrip_fall(int x, int y)
4465 switch (Cave[x][y+1])
4475 Cave[x][y] = Ydrip_1_sB;
4476 if (Cave[x+1][y] == Xblank)
4477 Cave[x+1][y] = Xacid_splash_e;
4478 if (Cave[x-1][y] == Xblank)
4479 Cave[x-1][y] = Xacid_splash_w;
4480 Next[x][y] = Xdrip_stretchB;
4481 play_element_sound(x, y, SOUND_acid, Xacid_1);
4485 case Xacid_splash_e:
4486 case Xacid_splash_w:
4490 Cave[x][y] = Ydrip_1_sB;
4491 Cave[x][y+1] = Ydrip_1_s;
4492 Next[x][y] = Xdrip_stretchB;
4493 Next[x][y+1] = Xdrip_stretch;
4499 case 0: temp = Xamoeba_1; break;
4500 case 1: temp = Xamoeba_2; break;
4501 case 2: temp = Xamoeba_3; break;
4502 case 3: temp = Xamoeba_4; break;
4503 case 4: temp = Xamoeba_5; break;
4504 case 5: temp = Xamoeba_6; break;
4505 case 6: temp = Xamoeba_7; break;
4506 case 7: temp = Xamoeba_8; break;
4511 play_element_sound(x, y, SOUND_drip, Xdrip_fall);
4516 static void Ldrip_stretch(int x, int y)
4518 Cave[x][y] = Ydrip_2_s;
4519 Next[x][y] = Xdrip_fall;
4522 static void Ldrip_stretchB(int x, int y)
4524 Cave[x][y] = Ydrip_2_sB;
4525 Next[x][y] = Xblank;
4528 static void Lwonderwall(int x, int y)
4530 if (lev.wonderwall_time && lev.wonderwall_state)
4532 Cave[x][y] = XwonderwallB;
4533 play_element_sound(x, y, SOUND_wonder, Xwonderwall);
4537 static void Lsand_stone(int x, int y)
4539 switch (Cave[x][y+1])
4549 Cave[x][y] = Xsand_stonesand_quickout_1;
4550 if (Cave[x+1][y] == Xblank)
4551 Cave[x+1][y] = Xacid_splash_e;
4552 if (Cave[x-1][y] == Xblank)
4553 Cave[x-1][y] = Xacid_splash_w;
4554 Next[x][y] = Xsand_stonesand_quickout_2;
4555 play_element_sound(x, y, SOUND_acid, Xacid_1);
4559 case Xacid_splash_e:
4560 case Xacid_splash_w:
4561 Cave[x][y] = Xsand_stonesand_quickout_1;
4562 Cave[x][y+1] = Xsand_stoneout_1;
4563 Next[x][y] = Xsand_stonesand_quickout_2;
4564 Next[x][y+1] = Xsand_stoneout_2;
4568 Cave[x][y] = Xsand_stonesand_1;
4569 Cave[x][y+1] = Xsand_sandstone_1;
4570 Next[x][y] = Xsand_stonesand_2;
4571 Next[x][y+1] = Xsand_sandstone_2;
4576 static void Lsand_stonein_1(int x, int y)
4578 Next[x][y] = Xsand_stonein_2;
4581 static void Lsand_stonein_2(int x, int y)
4583 Next[x][y] = Xsand_stonein_3;
4586 static void Lsand_stonein_3(int x, int y)
4588 Next[x][y] = Xsand_stonein_4;
4591 static void Lsand_stonein_4(int x, int y)
4593 Next[x][y] = Xblank;
4596 static void Lsand_stonesand_1(int x, int y)
4598 Next[x][y] = Xsand_stonesand_2;
4601 static void Lsand_stonesand_2(int x, int y)
4603 Next[x][y] = Xsand_stonesand_3;
4606 static void Lsand_stonesand_3(int x, int y)
4608 Next[x][y] = Xsand_stonesand_4;
4611 static void Lsand_stonesand_4(int x, int y)
4616 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
4617 static void Lsand_stonesand_quickout_1(int x, int y)
4619 Next[x][y] = Xsand_stonesand_quickout_2;
4622 static void Lsand_stonesand_quickout_2(int x, int y)
4628 static void Lsand_stoneout_1(int x, int y)
4630 Next[x][y] = Xsand_stoneout_2;
4633 static void Lsand_stoneout_2(int x, int y)
4635 Next[x][y] = Xstone_fall;
4638 static void Lsand_sandstone_1(int x, int y)
4640 Next[x][y] = Xsand_sandstone_2;
4643 static void Lsand_sandstone_2(int x, int y)
4645 Next[x][y] = Xsand_sandstone_3;
4648 static void Lsand_sandstone_3(int x, int y)
4650 Next[x][y] = Xsand_sandstone_4;
4653 static void Lsand_sandstone_4(int x, int y)
4655 Next[x][y] = Xsand_stone;
4658 static void Lslidewall_ns(int x, int y)
4660 if (tab_blank[Cave[x][y-1]])
4662 Cave[x][y-1] = Yslidewall_ns_blank;
4663 Next[x][y-1] = Xslidewall_ns;
4664 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
4667 if (tab_blank[Cave[x][y+1]])
4669 Cave[x][y+1] = Yslidewall_ns_blank;
4670 Next[x][y+1] = Xslidewall_ns;
4671 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ns);
4675 static void Lslidewall_ew(int x, int y)
4677 if (tab_blank[Cave[x+1][y]])
4679 Cave[x+1][y] = Yslidewall_ew_blank;
4680 Next[x+1][y] = Xslidewall_ew;
4681 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
4684 if (tab_blank[Cave[x-1][y]])
4686 Cave[x-1][y] = Yslidewall_ew_blank;
4687 Next[x-1][y] = Xslidewall_ew;
4688 play_element_sound(x, y, SOUND_slidewall, Xslidewall_ew);
4692 static void Lexit(int x, int y)
4694 if (lev.required > 0)
4697 switch (RANDOM(64) / 21)
4700 Cave[x][y] = Xexit_1;
4701 Next[x][y] = Xexit_2;
4705 Cave[x][y] = Xexit_2;
4706 Next[x][y] = Xexit_3;
4710 Cave[x][y] = Xexit_3;
4711 Next[x][y] = Xexit_1;
4715 play_element_sound(x, y, SOUND_exit_open, Xexit);
4718 static void Lexit_1(int x, int y)
4720 Next[x][y] = Xexit_2;
4723 static void Lexit_2(int x, int y)
4725 Next[x][y] = Xexit_3;
4728 static void Lexit_3(int x, int y)
4730 Next[x][y] = Xexit_1;
4733 static void Lacid_1(int x, int y)
4735 Next[x][y] = Xacid_2;
4738 static void Lacid_2(int x, int y)
4740 Next[x][y] = Xacid_3;
4743 static void Lacid_3(int x, int y)
4745 Next[x][y] = Xacid_4;
4748 static void Lacid_4(int x, int y)
4750 Next[x][y] = Xacid_5;
4753 static void Lacid_5(int x, int y)
4755 Next[x][y] = Xacid_6;
4758 static void Lacid_6(int x, int y)
4760 Next[x][y] = Xacid_7;
4763 static void Lacid_7(int x, int y)
4765 Next[x][y] = Xacid_8;
4768 static void Lacid_8(int x, int y)
4770 Next[x][y] = Xacid_1;
4773 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
4774 static void Lfake_acid_1(int x, int y)
4776 Next[x][y] = Xfake_acid_2;
4779 static void Lfake_acid_2(int x, int y)
4781 Next[x][y] = Xfake_acid_3;
4784 static void Lfake_acid_3(int x, int y)
4786 Next[x][y] = Xfake_acid_4;
4789 static void Lfake_acid_4(int x, int y)
4791 Next[x][y] = Xfake_acid_5;
4794 static void Lfake_acid_5(int x, int y)
4796 Next[x][y] = Xfake_acid_6;
4799 static void Lfake_acid_6(int x, int y)
4801 Next[x][y] = Xfake_acid_7;
4804 static void Lfake_acid_7(int x, int y)
4806 Next[x][y] = Xfake_acid_8;
4809 static void Lfake_acid_8(int x, int y)
4811 Next[x][y] = Xfake_acid_1;
4815 static void Lpause(int x, int y)
4817 Next[x][y] = Xblank;
4820 static void Ldynamite_1(int x, int y)
4822 play_element_sound(x, y, SOUND_tick, Xdynamite_1);
4823 Next[x][y] = Xdynamite_2;
4826 static void Ldynamite_2(int x, int y)
4828 play_element_sound(x, y, SOUND_tick, Xdynamite_2);
4829 Next[x][y] = Xdynamite_3;
4832 static void Ldynamite_3(int x, int y)
4834 play_element_sound(x, y, SOUND_tick, Xdynamite_3);
4835 Next[x][y] = Xdynamite_4;
4838 static void Ldynamite_4(int x, int y)
4840 play_element_sound(x, y, SOUND_tick, Xdynamite_4);
4841 Next[x][y] = Zdynamite;
4842 Boom[x-1][y-1] = Xblank;
4843 Boom[x][y-1] = Xblank;
4844 Boom[x+1][y-1] = Xblank;
4845 Boom[x-1][y] = Xblank;
4846 Boom[x][y] = Xblank;
4847 Boom[x+1][y] = Xblank;
4848 Boom[x-1][y+1] = Xblank;
4849 Boom[x][y+1] = Xblank;
4850 Boom[x+1][y+1] = Xblank;
4853 static void Lwheel(int x, int y)
4855 if (lev.wheel_cnt && x == lev.wheel_x && y == lev.wheel_y)
4856 Cave[x][y] = XwheelB;
4859 static void Lswitch(int x, int y)
4862 Cave[x][y] = XswitchB;
4865 static void Lfake_amoeba(int x, int y)
4868 Cave[x][y] = Xfake_amoebaB;
4871 static void Lfake_blank(int x, int y)
4874 Cave[x][y] = Xfake_blankB;
4877 static void Lfake_grass(int x, int y)
4879 if (lev.magnify_cnt)
4880 Cave[x][y] = Xfake_grassB;
4883 static void Lfake_door_1(int x, int y)
4885 if (lev.magnify_cnt)
4886 Cave[x][y] = Xdoor_1;
4889 static void Lfake_door_2(int x, int y)
4891 if (lev.magnify_cnt)
4892 Cave[x][y] = Xdoor_2;
4895 static void Lfake_door_3(int x, int y)
4897 if (lev.magnify_cnt)
4898 Cave[x][y] = Xdoor_3;
4901 static void Lfake_door_4(int x, int y)
4903 if (lev.magnify_cnt)
4904 Cave[x][y] = Xdoor_4;
4907 static void Lfake_door_5(int x, int y)
4909 if (lev.magnify_cnt)
4910 Cave[x][y] = Xdoor_5;
4913 static void Lfake_door_6(int x, int y)
4915 if (lev.magnify_cnt)
4916 Cave[x][y] = Xdoor_6;
4919 static void Lfake_door_7(int x, int y)
4921 if (lev.magnify_cnt)
4922 Cave[x][y] = Xdoor_7;
4925 static void Lfake_door_8(int x, int y)
4927 if (lev.magnify_cnt)
4928 Cave[x][y] = Xdoor_8;
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 */