1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back! *
3 *----------------------------------------------------------*
4 * (c) 1995-2002 Artsoft Entertainment *
6 * Detmolder Strasse 189 *
9 * e-mail: info@artsoft.org *
10 *----------------------------------------------------------*
12 ***********************************************************/
14 #include "libgame/libgame.h"
22 Bitmap *pix[NUM_BITMAPS];
23 Pixmap tile_clipmask[NUM_TILES];
24 DrawBuffer *fieldbuffer;
25 DrawBuffer *drawto_field;
27 int game_status = MAINMENU;
28 boolean level_editor_test_game = FALSE;
29 boolean network_playing = FALSE;
31 int key_joystick_mapping = 0;
33 boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
34 int redraw_x1 = 0, redraw_y1 = 0;
36 short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
37 short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
38 short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
39 short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
40 short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
41 short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
42 short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
43 short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
44 short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
45 boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
46 short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
47 short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
48 short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
49 short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
50 unsigned long Elementeigenschaften1[MAX_ELEMENTS];
51 unsigned long Elementeigenschaften2[MAX_ELEMENTS];
53 int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
55 int FX = SX, FY = SY, ScrollStepSize;
56 int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0;
58 int BorderElement = EL_BETON;
59 int GameFrameDelay = GAME_FRAME_DELAY;
60 int FfwdFrameDelay = FFWD_FRAME_DELAY;
61 int BX1 = 0, BY1 = 0, BX2 = SCR_FIELDX-1, BY2 = SCR_FIELDY-1;
62 int SBX_Left, SBX_Right;
63 int SBY_Upper, SBY_Lower;
64 int ZX,ZY, ExitX,ExitY;
67 int TimeFrames, TimePlayed, TimeLeft;
69 boolean network_player_action_received = FALSE;
71 struct LevelInfo level;
72 struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL;
73 struct HiScore highscore[MAX_SCORE_ENTRIES];
75 struct SetupInfo setup;
77 struct GlobalInfo global;
79 /* filenames of sound effects */
80 char *sound_name[NUM_SOUNDS] =
139 struct SoundEffectInfo sound_effects[] =
141 /* sounds for Boulder Dash style elements and actions */
142 { "bd_empty_space.digging", "empty.wav" },
143 { "bd_sand.digging", "schlurf.wav" },
144 { "bd_diamond.collecting", "pong.wav" },
145 { "bd_diamond.impact", "pling.wav" },
146 { "bd_rock.pushing", "pusch.wav" },
147 { "bd_rock.impact", "klopf.wav" },
148 { "bd_magic_wall.activating", "quirk.wav" },
149 { "bd_magic_wall.changing", "quirk.wav" },
150 { "bd_magic_wall.running", "miep.wav" },
151 { "bd_amoeba.waiting", SND_FILE_UNDEFINED },
152 { "bd_amoeba.creating", "amoebe.wav" },
153 { "bd_amoeba.turning_to_gem", "pling.wav" },
154 { "bd_amoeba.turning_to_rock", "klopf.wav" },
155 { "bd_butterfly.moving", "klapper.wav" },
156 { "bd_butterfly.waiting", "klapper.wav" },
157 { "bd_firefly.moving", "roehr.wav" },
158 { "bd_firefly.waiting", "roehr.wav" },
159 { "bd_exit.entering", "buing.wav" },
161 /* sounds for Supaplex style elements and actions */
162 { "sp_empty_space.digging", "empty.wav" },
163 { "sp_base.digging", "base.wav" },
164 { "sp_buggy_base.digging", "base.wav" },
165 { "sp_buggy_base.activating", "bug.wav" },
166 { "sp_infotron.collecting", "infotron.wav" },
167 { "sp_infotron.impact", "pling.wav" },
168 { "sp_zonk.pushing", "zonkpush.wav" },
169 { "sp_zonk.impact", "zonkdown.wav" },
170 { "sp_disk_red.collecting", "infotron.wav" },
171 { "sp_disk_orange.pushing", "zonkpush.wav" },
172 { "sp_disk_yellow.pushing", "pusch.wav" },
173 { "sp_port.passing", "gate.wav" },
174 { "sp_exit.entering", "exit.wav" },
175 { "sp_element.exploding", "booom.wav" },
176 { "sp_sniksnak.moving", SND_FILE_UNDEFINED },
177 { "sp_sniksnak.waiting", SND_FILE_UNDEFINED },
178 { "sp_electron.moving", SND_FILE_UNDEFINED },
179 { "sp_electron.waiting", SND_FILE_UNDEFINED },
180 { "sp_terminal.activating", SND_FILE_UNDEFINED },
182 /* sounds for Sokoban style elements and actions */
183 { "sokoban_object.pushing", "pusch.wav" },
184 { "sokoban_field.filling", "deng.wav" },
185 { "sokoban_field.clearing", SND_FILE_UNDEFINED },
186 { "sokoban_game.solving", "buing.wav" },
188 /* sounds for Emerald Mine style elements and actions */
189 { "empty_space.digging", "empty.wav" },
190 { "sand.digging", "schlurf.wav" },
191 { "emerald.collecting", "pong.wav" },
192 { "emerald.impact", "pling.wav" },
193 { "diamond.collecting", "pong.wav" },
194 { "diamond.impact", "pling.wav" },
195 { "diamond.breaking", "quirk.wav" },
196 { "rock.pushing", "pusch.wav" },
197 { "rock.impact", "klopf.wav" },
198 { "bomb.pushing", "pusch.wav" },
199 { "nut.pushing", "knurk.wav" },
200 { "nut.cracking", "knack.wav" },
201 { "nut.impact", "klumpf.wav" },
202 { "dynamite.collecting", "pong.wav" },
203 { "dynamite.placing", "deng.wav" },
204 { "dynamite.burning", "zisch.wav" },
205 { "key.collecting", "pong.wav" },
206 { "gate.passing", "gate.wav" },
207 { "bug.moving", "klapper.wav" },
208 { "bug.waiting", "klapper.wav" },
209 { "spaceship.moving", "roehr.wav" },
210 { "spaceship.waiting", "roehr.wav" },
211 { "yamyam.moving", SND_FILE_UNDEFINED },
212 { "yamyam.waiting", "njam.wav" },
213 { "yamyam.eating_diamond", SND_FILE_UNDEFINED },
214 { "robot.stepping", "schlurf.wav" },
215 { "robot.waiting", SND_FILE_UNDEFINED },
216 { "robot_wheel.activating", "deng.wav" },
217 { "robot_wheel.running", "miep.wav" },
218 { "magic_wall.activating", "quirk.wav" },
219 { "magic_wall.changing", "quirk.wav" },
220 { "magic_wall.running", "miep.wav" },
221 { "amoeba.waiting", SND_FILE_UNDEFINED },
222 { "amoeba.creating", "amoebe.wav" },
223 { "amoeba.dropping", SND_FILE_UNDEFINED },
224 { "acid.splashing", "blurb.wav" },
225 { "quicksand.filling", SND_FILE_UNDEFINED },
226 { "quicksand.slipping_through", SND_FILE_UNDEFINED },
227 { "quicksand.emptying", SND_FILE_UNDEFINED },
228 { "exit.opening", "oeffnen.wav" },
229 { "exit.entering", "buing.wav" },
231 /* sounds for Emerald Mine Club style elements and actions */
232 { "balloon.moving", SND_FILE_UNDEFINED },
233 { "balloon.waiting", SND_FILE_UNDEFINED },
234 { "balloon.pushing", "schlurf.wav" },
235 { "balloon_switch.activating", SND_FILE_UNDEFINED },
236 { "spring.moving", SND_FILE_UNDEFINED },
237 { "spring.pushing", "pusch.wav" },
238 { "spring.impact", "klopf.wav" },
239 { "wall.growing", SND_FILE_UNDEFINED },
241 /* sounds for Diamond Caves style elements and actions */
242 { "pearl.collecting", "pong.wav" },
243 { "pearl.breaking", "knack.wav" },
244 { "pearl.impact", "pling.wav" },
245 { "crystal.collecting", "pong.wav" },
246 { "crystal.impact", "pling.wav" },
247 { "envelope.collecting", "pong.wav" },
248 { "sand_invisible.digging", "schlurf.wav" },
249 { "shield_passive.collecting", "pong.wav" },
250 { "shield_passive.activated", SND_FILE_UNDEFINED },
251 { "shield_active.collecting", "pong.wav" },
252 { "shield_active.activated", SND_FILE_UNDEFINED },
253 { "extra_time.collecting", "gong.wav" },
254 { "mole.moving", SND_FILE_UNDEFINED },
255 { "mole.waiting", SND_FILE_UNDEFINED },
256 { "mole.eating_amoeba", "blurb.wav" },
257 { "switchgate_switch.activating", SND_FILE_UNDEFINED },
258 { "switchgate.opening", "oeffnen.wav" },
259 { "switchgate.closing", "oeffnen.wav" },
260 { "switchgate.passing", "gate.wav" },
261 { "timegate_wheel.activating", "deng.wav" },
262 { "timegate_wheel.running", "miep.wav" },
263 { "timegate.opening", "oeffnen.wav" },
264 { "timegate.closing", "oeffnen.wav" },
265 { "timegate.passing", "gate.wav" },
266 { "conveyor_belt_switch.activating", SND_FILE_UNDEFINED },
267 { "conveyor_belt.running", SND_FILE_UNDEFINED },
268 { "light_switch.activating", SND_FILE_UNDEFINED },
269 { "light_switch.deactivating", SND_FILE_UNDEFINED },
271 /* sounds for DX Boulderdash style elements and actions */
272 { "dx_bomb.pushing", "pusch.wav" },
273 { "trap_inactive.digging", "schlurf.wav" },
274 { "trap.activating", SND_FILE_UNDEFINED },
275 { "tube.passing", SND_FILE_UNDEFINED },
277 /* sounds for Rocks'n'Diamonds style elements and actions */
278 { "amoeba.turning_to_gem", "pling.wav" },
279 { "amoeba.turning_to_rock", "klopf.wav" },
280 { "speed_pill.collecting", "pong.wav" },
281 { "dynabomb_nr.collecting", "pong.wav" },
282 { "dynabomb_sz.collecting", "pong.wav" },
283 { "dynabomb_xl.collecting", "pong.wav" },
284 { "dynabomb.placing", "deng.wav" },
285 { "dynabomb.burning", "zisch.wav" },
286 { "satellite.moving", SND_FILE_UNDEFINED },
287 { "satellite.waiting", SND_FILE_UNDEFINED },
288 { "satellite.pushing", "pusch.wav" },
289 { "lamp.activating", "deng.wav" },
290 { "lamp.deactivating", "deng.wav" },
291 { "time_orb_full.collecting", "gong.wav" },
292 { "time_orb_full.impact", "deng.wav" },
293 { "time_orb_empty.pushing", "pusch.wav" },
294 { "time_orb_empty.impact", "deng.wav" },
295 { "gameoflife.waiting", SND_FILE_UNDEFINED },
296 { "gameoflife.creating", "amoebe.wav" },
297 { "biomaze.waiting", SND_FILE_UNDEFINED },
298 { "biomaze.creating", "amoebe.wav" },
299 { "pacman.moving", SND_FILE_UNDEFINED },
300 { "pacman.waiting", SND_FILE_UNDEFINED },
301 { "pacman.eating_amoeba", SND_FILE_UNDEFINED },
302 { "dark_yamyam.moving", SND_FILE_UNDEFINED },
303 { "dark_yamyam.waiting", "njam.wav" },
304 { "dark_yamyam.eating_any", SND_FILE_UNDEFINED },
305 { "penguin.moving", SND_FILE_UNDEFINED },
306 { "penguin.waiting", SND_FILE_UNDEFINED },
307 { "penguin.entering_exit", "buing.wav" },
308 { "pig.moving", SND_FILE_UNDEFINED },
309 { "pig.waiting", SND_FILE_UNDEFINED },
310 { "pig.eating_gem", SND_FILE_UNDEFINED },
311 { "dragon.moving", SND_FILE_UNDEFINED },
312 { "dragon.waiting", SND_FILE_UNDEFINED },
313 { "dragon.attacking", SND_FILE_UNDEFINED },
315 /* sounds for generic elements and actions */
316 { "player.dying", "autsch.wav" },
317 { "element.exploding", "roaaar.wav" },
319 /* sounds for other game actions */
320 { "game.starting", SND_FILE_UNDEFINED },
321 { "game.running_out_of_time", "gong.wav" },
322 { "game.leveltime_bonus", "sirr.wav" },
323 { "game.losing", "lachen.wav" },
324 { "game.winning", SND_FILE_UNDEFINED },
326 /* sounds for other non-game actions */
327 { "menu.door_opening", "oeffnen.wav" },
328 { "menu.door_closing", "oeffnen.wav" },
329 { "menu.hall_of_fame", "halloffame.wav" },
330 { "menu.info_screen", "rhythmloop.wav" },
333 { "[not used]", "antigrav.wav" },
334 { "[not used]", "bong.wav" },
335 { "[not used]", "fuel.wav" },
336 { "[not used]", "holz.wav" },
337 { "[not used]", "hui.wav" },
338 { "[not used]", "kabumm.wav" },
339 { "[not used]", "kink.wav" },
340 { "[not used]", "kling.wav" },
341 { "[not used]", "krach.wav" },
342 { "[not used]", "laser.wav" },
343 { "[not used]", "quiek.wav" },
344 { "[not used]", "rumms.wav" },
345 { "[not used]", "schlopp.wav" },
346 { "[not used]", "schrff.wav" },
347 { "[not used]", "schwirr.wav" },
348 { "[not used]", "slurp.wav" },
349 { "[not used]", "sproing.wav" },
350 { "[not used]", "warnton.wav" },
351 { "[not used]", "whoosh.wav" },
352 { "[not used]", "boom.wav" },
356 struct ElementInfo element_info[] =
358 { "empty_space", "empty space" }, /* 0 */
360 { "wall", "normal wall" },
361 { "wall", "round wall" },
364 { "emerald", "emerald" },
365 { "exit", "closed exit" },
366 { "player", "player" },
368 { "spaceship", "spaceship" }, /* 10 */
369 { "yamyam", "yam yam" },
370 { "robot", "robot" },
371 { "wall", "steel wall" },
372 { "diamond", "diamond" },
373 { "amoeba", "dead amoeba" },
374 { "quicksand", "empty quicksand" },
375 { "quicksand", "quicksand with rock" },
376 { "amoeba", "amoeba drop" },
378 { "magic_wall", "magic wall" }, /* 20 */
379 { "speed_pill", "speed pill" },
380 { "acid", "acid pool" },
381 { "amoeba", "dropping amoeba" },
382 { "amoeba", "normal amoeba" },
383 { "nut", "nut with emerald" },
384 { "gameoflife", "Conway's wall of life" },
385 { "biomaze", "biomaze" },
386 { "dynamite", "burning dynamite" },
388 { "robot_wheel", "magic wheel" }, /* 30 */
389 { "robot_wheel", "magic wheel (running)" },
390 { "key", "red key" },
391 { "key", "yellow key" },
392 { "key", "green key" },
393 { "key", "blue key" },
394 { "gate", "red door" },
395 { "gate", "yellow door" },
396 { "gate", "green door" },
397 { "gate", "blue door" },
398 { "gate", "gray door (opened by red key)" }, /* 40 */
399 { "gate", "gray door (opened by yellow key)"},
400 { "gate", "gray door (opened by green key)"},
401 { "gate", "gray door (opened by blue key)"},
402 { "dynamite", "dynamite" },
403 { "pacman", "pac man" },
404 { "wall", "invisible normal wall" },
405 { "lamp", "lamp (off)" },
406 { "lamp", "lamp (on)" },
407 { "wall", "wall with emerald" },
408 { "wall", "wall with diamond" }, /* 50 */
409 { "amoeba", "amoeba with content" },
410 { "bd_amoeba", "amoeba (BD style)" },
411 { "time_orb_full", "time orb (full)" },
412 { "time_orb_empty", "time orb (empty)" },
413 { "wall", "growing wall" },
414 { "bd_diamond", "diamond (BD style)" },
415 { "emerald", "yellow emerald" },
416 { "wall", "wall with BD style diamond" },
417 { "wall", "wall with yellow emerald" },
418 { "dark_yamyam", "dark yam yam" }, /* 60 */
419 { "bd_magic_wall", "magic wall (BD style)" },
420 { "wall", "invisible steel wall" },
422 { "dynabomb_nr", "increases number of bombs" },
423 { "dynabomb_sz", "increases explosion size" },
424 { "dynabomb_xl", "increases power of explosion" },
425 { "sokoban_object", "sokoban object" },
426 { "sokoban_field", "sokoban empty field" },
427 { "sokoban_field", "sokoban field with object" },
428 { "bd_butterfly", "butterfly (starts moving right)"}, /* 70 */
429 { "bd_butterfly", "butterfly (starts moving up)" },
430 { "bd_butterfly", "butterfly (starts moving left)"},
431 { "bd_butterfly", "butterfly (starts moving down)"},
432 { "bd_firefly", "firefly (starts moving right)" },
433 { "bd_firefly", "firefly (starts moving up)" },
434 { "bd_firefly", "firefly (starts moving left)" },
435 { "bd_firefly", "firefly (starts moving down)" },
436 { "bd_butterfly", "butterfly" },
437 { "bd_firefly", "firefly" },
438 { "player", "yellow player" }, /* 80 */
439 { "player", "red player" },
440 { "player", "green player" },
441 { "player", "blue player" },
442 { "bug", "bug (starts moving right)" },
443 { "bug", "bug (starts moving up)" },
444 { "bug", "bug (starts moving left)" },
445 { "bug", "bug (starts moving down)" },
446 { "spaceship", "spaceship (starts moving right)"},
447 { "spaceship", "spaceship (starts moving up)" },
448 { "spaceship", "spaceship (starts moving left)"}, /* 90 */
449 { "spaceship", "spaceship (starts moving down)"},
450 { "pacman", "pac man (starts moving right)" },
451 { "pacman", "pac man (starts moving up)" },
452 { "pacman", "pac man (starts moving left)" },
453 { "pacman", "pac man (starts moving down)" },
454 { "emerald", "red emerald" },
455 { "emerald", "purple emerald" },
456 { "wall", "wall with red emerald" },
457 { "wall", "wall with purple emerald" },
458 { NULL, "unknown" }, /* 100 */
463 { NULL, "normal wall (BD style)" },
464 { "bd_rock", "rock (BD style)" },
465 { "exit", "open exit" },
466 { NULL, "black orb bomb" },
467 { "amoeba", "amoeba" },
468 { "mole", "mole" }, /* 110 */
469 { "penguin", "penguin" },
470 { "satellite", "satellite" },
471 { NULL, "arrow left" },
472 { NULL, "arrow right" },
473 { NULL, "arrow up" },
474 { NULL, "arrow down" },
476 { "dragon", "fire breathing dragon" },
477 { "key", "red key (EM style)" },
478 { NULL, "letter ' '" }, /* 120 */
479 { NULL, "letter '!'" },
480 { NULL, "letter '\"'" },
481 { NULL, "letter '#'" },
482 { NULL, "letter '$'" },
483 { NULL, "letter '%'" },
484 { NULL, "letter '&'" },
485 { NULL, "letter '''" },
486 { NULL, "letter '('" },
487 { NULL, "letter ')'" },
488 { NULL, "letter '*'" }, /* 130 */
489 { NULL, "letter '+'" },
490 { NULL, "letter ','" },
491 { NULL, "letter '-'" },
492 { NULL, "letter '.'" },
493 { NULL, "letter '/'" },
494 { NULL, "letter '0'" },
495 { NULL, "letter '1'" },
496 { NULL, "letter '2'" },
497 { NULL, "letter '3'" },
498 { NULL, "letter '4'" }, /* 140 */
499 { NULL, "letter '5'" },
500 { NULL, "letter '6'" },
501 { NULL, "letter '7'" },
502 { NULL, "letter '8'" },
503 { NULL, "letter '9'" },
504 { NULL, "letter ':'" },
505 { NULL, "letter ';'" },
506 { NULL, "letter '<'" },
507 { NULL, "letter '='" },
508 { NULL, "letter '>'" }, /* 150 */
509 { NULL, "letter '?'" },
510 { NULL, "letter '@'" },
511 { NULL, "letter 'A'" },
512 { NULL, "letter 'B'" },
513 { NULL, "letter 'C'" },
514 { NULL, "letter 'D'" },
515 { NULL, "letter 'E'" },
516 { NULL, "letter 'F'" },
517 { NULL, "letter 'G'" },
518 { NULL, "letter 'H'" }, /* 160 */
519 { NULL, "letter 'I'" },
520 { NULL, "letter 'J'" },
521 { NULL, "letter 'K'" },
522 { NULL, "letter 'L'" },
523 { NULL, "letter 'M'" },
524 { NULL, "letter 'N'" },
525 { NULL, "letter 'O'" },
526 { NULL, "letter 'P'" },
527 { NULL, "letter 'Q'" },
528 { NULL, "letter 'R'" }, /* 170 */
529 { NULL, "letter 'S'" },
530 { NULL, "letter 'T'" },
531 { NULL, "letter 'U'" },
532 { NULL, "letter 'V'" },
533 { NULL, "letter 'W'" },
534 { NULL, "letter 'X'" },
535 { NULL, "letter 'Y'" },
536 { NULL, "letter 'Z'" },
537 { NULL, "letter 'Ä'" },
538 { NULL, "letter 'Ö'" }, /* 180 */
539 { NULL, "letter 'Ü'" },
540 { NULL, "letter '^'" },
541 { NULL, "letter ''" },
542 { NULL, "letter ''" },
543 { NULL, "letter ''" },
544 { NULL, "letter ''" },
545 { NULL, "letter ''" },
546 { NULL, "letter ''" },
547 { NULL, "letter ''" },
548 { NULL, "letter ''" }, /* 190 */
549 { NULL, "letter ''" },
550 { NULL, "letter ''" },
551 { NULL, "letter ''" },
552 { NULL, "letter ''" },
553 { NULL, "letter ''" },
554 { NULL, "letter ''" },
555 { NULL, "letter ''" },
556 { NULL, "letter ''" },
557 { NULL, "letter ''" },
558 { "wall", "growing wall (horizontal)" }, /* 200 */
559 { "wall", "growing wall (vertical)" },
560 { "wall", "growing wall (all directions)" },
561 { "gate", "red door (EM style)" },
562 { "gate", "yellow door (EM style)" },
563 { "gate", "green door (EM style)" },
564 { "gate", "blue door (EM style)" },
565 { "key", "yellow key (EM style)" },
566 { "key", "green key (EM style)" },
567 { "key", "blue key (EM style)" },
568 { "empty_space", "empty space" }, /* 210 */
569 { "sp_zonk", "zonk" },
570 { "sp_base", "base" },
571 { "player", "murphy" },
572 { "sp_infotron", "infotron" },
573 { "wall", "chip (single)" },
574 { "wall", "hardware" },
575 { "sp_exit", "exit" },
576 { "sp_disk_orange", "orange disk" },
577 { "sp_port", "port (leading right)" },
578 { "sp_port", "port (leading down)" }, /* 220 */
579 { "sp_port", "port (leading left)" },
580 { "sp_port", "port (leading up)" },
581 { "sp_port", "port (leading right)" },
582 { "sp_port", "port (leading down)" },
583 { "sp_port", "port (leading left)" },
584 { "sp_port", "port (leading up)" },
585 { "sp_sniksnak", "snik snak" },
586 { "sp_disk_yellow", "yellow disk" },
587 { "sp_terminal", "terminal" },
588 { "sp_disk_red", "red disk" }, /* 230 */
589 { "sp_port", "port (vertical)" },
590 { "sp_port", "port (horizontal)" },
591 { "sp_port", "port (all directions)" },
592 { "sp_electron", "electron" },
593 { "sp_buggy_base", "buggy base" },
594 { "wall", "chip (left half)" },
595 { "wall", "chip (right half)" },
596 { "wall", "hardware" },
597 { "wall", "hardware" },
598 { "wall", "hardware" }, /* 240 */
599 { "wall", "hardware" },
600 { "wall", "hardware" },
601 { "wall", "hardware" },
602 { "wall", "hardware" },
603 { "wall", "hardware" },
604 { "wall", "hardware" },
605 { "wall", "hardware" },
606 { "wall", "chip (upper half)" },
607 { "wall", "chip (lower half)" },
608 { "gate", "gray door (EM style, red key)" }, /* 250 */
609 { "gate", "gray door (EM style, yellow key)"},
610 { "gate", "gray door (EM style, green key)"},
611 { "gate", "gray door (EM style, blue key)"},
617 { "pearl", "pearl" }, /* (256) */
618 { "crystal", "crystal" },
619 { "wall", "wall with pearl" },
620 { "wall", "wall with crystal" },
621 { "gate", "white door" }, /* 260 */
622 { "gate", "gray door (opened by white key)"},
623 { "key", "white key" },
624 { "shield_passive", "shield (passive)" },
625 { "extra_time", "extra time" },
626 { "switchgate", "switch gate (open)" },
627 { "switchgate", "switch gate (closed)" },
628 { "switchgate_switch", "switch for switch gate" },
629 { "switchgate_switch", "switch for switch gate" },
631 { NULL, "-" }, /* 270 */
632 { "conveyor_belt", "red conveyor belt (left)" },
633 { "conveyor_belt", "red conveyor belt (middle)" },
634 { "conveyor_belt", "red conveyor belt (right)" },
635 { "conveyor_belt_switch", "switch for red conveyor belt (left)"},
636 { "conveyor_belt_switch", "switch for red conveyor belt (middle)"},
637 { "conveyor_belt_switch", "switch for red conveyor belt (right)"},
638 { "conveyor_belt", "yellow conveyor belt (left)" },
639 { "conveyor_belt", "yellow conveyor belt (middle)" },
640 { "conveyor_belt", "yellow conveyor belt (right)" },
641 { "conveyor_belt_switch", "switch for yellow conveyor belt (left)"},
642 { "conveyor_belt_switch", "switch for yellow conveyor belt (middle)"},
643 { "conveyor_belt_switch", "switch for yellow conveyor belt (right)"},
644 { "conveyor_belt", "green conveyor belt (left)" },
645 { "conveyor_belt", "green conveyor belt (middle)" },
646 { "conveyor_belt", "green conveyor belt (right)" },
647 { "conveyor_belt_switch", "switch for green conveyor belt (left)"},
648 { "conveyor_belt_switch", "switch for green conveyor belt (middle)"},
649 { "conveyor_belt_switch", "switch for green conveyor belt (right)"},
650 { "conveyor_belt", "blue conveyor belt (left)" },
651 { "conveyor_belt", "blue conveyor belt (middle)" },
652 { "conveyor_belt", "blue conveyor belt (right)" },
653 { "conveyor_belt_switch", "switch for blue conveyor belt (left)"},
654 { "conveyor_belt_switch", "switch for blue conveyor belt (middle)"},
655 { "conveyor_belt_switch", "switch for blue conveyor belt (right)"},
656 { "sand", "land mine" },
657 { "envelope", "mail envelope" },
658 { "light_switch", "light switch (off)" },
659 { "light_switch", "light switch (on)" },
660 { "wall", "sign (exclamation)" },
661 { "wall", "sign (radio activity)" }, /* 300 */
662 { "wall", "sign (stop)" },
663 { "wall", "sign (wheel chair)" },
664 { "wall", "sign (parking)" },
665 { "wall", "sign (one way)" },
666 { "wall", "sign (heart)" },
667 { "wall", "sign (triangle)" },
668 { "wall", "sign (round)" },
669 { "wall", "sign (exit)" },
670 { "wall", "sign (yin yang)" },
671 { "wall", "sign (other)" }, /* 310 */
672 { "mole", "mole (starts moving left)" },
673 { "mole", "mole (starts moving right)" },
674 { "mole", "mole (starts moving up)" },
675 { "mole", "mole (starts moving down)" },
676 { "wall", "steel wall (slanted)" },
677 { "sand", "invisible sand" },
678 { NULL, "dx unknown 15" },
679 { NULL, "dx unknown 42" },
681 { NULL, "-" }, /* 320 */
682 { "shield_active", "shield (active, kills enemies)"},
683 { "timegate", "time gate (open)" },
684 { "timegate", "time gate (closed)" },
685 { "timegate_wheel", "switch for time gate" },
686 { "timegate_wheel", "switch for time gate" },
687 { "balloon", "balloon" },
688 { "wall", "send balloon to the left" },
689 { "wall", "send balloon to the right" },
690 { "balloon_switch", "send balloon up" },
691 { "balloon_switch", "send balloon down" }, /* 330 */
692 { "balloon_switch", "send balloon in any direction" },
693 { "wall", "steel wall" },
694 { "wall", "steel wall" },
695 { "wall", "steel wall" },
696 { "wall", "steel wall" },
697 { "wall", "normal wall" },
698 { "wall", "normal wall" },
699 { "wall", "normal wall" },
700 { "wall", "normal wall" },
701 { "wall", "normal wall" }, /* 340 */
702 { "wall", "normal wall" },
703 { "wall", "normal wall" },
704 { "wall", "normal wall" },
705 { "tube", "tube (all directions)" },
706 { "tube", "tube (vertical)" },
707 { "tube", "tube (horizontal)" },
708 { "tube", "tube (vertical & left)" },
709 { "tube", "tube (vertical & right)" },
710 { "tube", "tube (horizontal & up)" },
711 { "tube", "tube (horizontal & down)" }, /* 350 */
712 { "tube", "tube (left & up)" },
713 { "tube", "tube (left & down)" },
714 { "tube", "tube (right & up)" },
715 { "tube", "tube (right & down)" },
716 { "spring", "spring" },
718 { "dx_bomb", "stable bomb (DX style)" },
722 "-------------------------------",
727 /* ========================================================================= */
729 /* ========================================================================= */
731 int main(int argc, char *argv[])
733 InitCommandName(argv[0]);
734 InitExitFunction(CloseAllAndExit);
735 InitPlatformDependantStuff();
743 return 0; /* to keep compilers happy */