X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.c;h=46277b95ad0dccae43801e9992d668be4fe2de28;hb=fa26d82a378cebf6b519c566c3f33739ebba7823;hp=e18599dfd383ca4f1e93fdaa11a761704b3456fb;hpb=0c27626bae90cb1eeea4939de0130a49b9aac507;p=rocksndiamonds.git diff --git a/src/main.c b/src/main.c index e18599df..46277b95 100644 --- a/src/main.c +++ b/src/main.c @@ -1,72 +1,40 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1995-2002 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* main.c * +* main.c * ***********************************************************/ +#include "libgame/libgame.h" + #include "main.h" #include "init.h" #include "game.h" #include "events.h" -#include "sound.h" -#include "joystick.h" -#include "misc.h" - -#ifdef MSDOS -#include -#endif - -Display *display; -Visual *visual; -int screen; -Window window; -GC gc, clip_gc[NUM_PIXMAPS], tile_clip_gc; -Pixmap pix[NUM_PIXMAPS]; -Pixmap clipmask[NUM_PIXMAPS], tile_clipmask[NUM_TILES]; -#ifdef USE_XPM_LIBRARY -XpmAttributes xpm_att[NUM_PICTURES]; +GC tile_clip_gc; +#if 0 +Bitmap *pix[NUM_BITMAPS]; #endif - -Drawable drawto, drawto_field, backbuffer, fieldbuffer; -Colormap cmap; - -int sound_pipe[2]; -int sound_device; -char *sound_device_name = SOUND_DEVICE; -int joystick_device = 0; -char *joystick_device_name[MAX_PLAYERS] = -{ - DEV_JOYSTICK_0, - DEV_JOYSTICK_1, - DEV_JOYSTICK_2, - DEV_JOYSTICK_3 -}; - -char *program_name = NULL; +Bitmap *bitmap_db_field, *bitmap_db_door; +Pixmap tile_clipmask[NUM_TILES]; +DrawBuffer *fieldbuffer; +DrawBuffer *drawto_field; int game_status = MAINMENU; boolean level_editor_test_game = FALSE; boolean network_playing = FALSE; -int button_status = MB_NOT_PRESSED; -boolean motion_status = FALSE; + int key_joystick_mapping = 0; -int global_joystick_status = JOYSTICK_STATUS; -int joystick_status = JOYSTICK_STATUS; -int sound_status = SOUND_STATUS; -boolean sound_loops_allowed = FALSE; boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; int redraw_x1 = 0, redraw_y1 = 0; -int redraw_mask; -int redraw_tiles; short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -77,19 +45,21 @@ short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA]; -unsigned long Elementeigenschaften[MAX_ELEMENTS]; +short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +unsigned long Elementeigenschaften1[MAX_ELEMENTS]; +unsigned long Elementeigenschaften2[MAX_ELEMENTS]; -int level_nr, leveldir_nr, num_leveldirs; int lev_fieldx,lev_fieldy, scroll_x,scroll_y; int FX = SX, FY = SY, ScrollStepSize; int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0; int ScreenGfxPos = 0; -int BorderElement = EL_BETON; +int BorderElement = EL_STEELWALL; int GameFrameDelay = GAME_FRAME_DELAY; int FfwdFrameDelay = FFWD_FRAME_DELAY; int BX1 = 0, BY1 = 0, BX2 = SCR_FIELDX-1, BY2 = SCR_FIELDY-1; @@ -97,374 +67,635 @@ int SBX_Left, SBX_Right; int SBY_Upper, SBY_Lower; int ZX,ZY, ExitX,ExitY; int AllPlayersGone; -int FrameCounter, TimeFrames, TimePlayed, TimeLeft; + +int TimeFrames, TimePlayed, TimeLeft; boolean network_player_action_received = FALSE; -struct LevelDirInfo leveldir[MAX_LEVDIR_ENTRIES]; struct LevelInfo level; struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL; struct HiScore highscore[MAX_SCORE_ENTRIES]; -struct SoundInfo Sound[NUM_SOUNDS]; struct TapeInfo tape; -struct OptionInfo options; struct SetupInfo setup; -struct SetupFileList *setup_list = NULL; -struct SetupFileList *level_setup_list = NULL; struct GameInfo game; struct GlobalInfo global; -/* data needed for playing sounds */ +/* filenames of sound effects */ char *sound_name[NUM_SOUNDS] = { - "alchemy", - "amoebe", - "antigrav", - "autsch", - "blurb", - "bong", - "buing", - "chase", - "czardasz", - "deng", - "fuel", - "gong", - "halloffame", - "holz", - "hui", - "kabumm", - "kink", - "klapper", - "kling", - "klopf", - "klumpf", - "knack", - "knurk", - "krach", - "lachen", - "laser", - "miep", - "network", - "njam", - "oeffnen", - "pling", - "pong", - "pusch", - "quiek", - "quirk", - "rhythmloop", - "roaaar", - "roehr", - "rumms", - "schlopp", - "schlurf", - "schrff", - "schwirr", - "sirr", - "slurp", - "sproing", - "twilight", - "tyger", - "voyager", - "warnton", - "whoosh", - "zisch", - "base", - "infotron", - "zonkdown", - "zonkpush", - "bug", - "boom", - "booom", - "exit", - "empty", - "gate" + "amoebe.wav", + "antigrav.wav", + "autsch.wav", + "blurb.wav", + "bong.wav", + "buing.wav", + "deng.wav", + "fuel.wav", + "gong.wav", + "halloffame.wav", + "holz.wav", + "hui.wav", + "kabumm.wav", + "kink.wav", + "klapper.wav", + "kling.wav", + "klopf.wav", + "klumpf.wav", + "knack.wav", + "knurk.wav", + "krach.wav", + "lachen.wav", + "laser.wav", + "miep.wav", + "njam.wav", + "oeffnen.wav", + "pling.wav", + "pong.wav", + "pusch.wav", + "quiek.wav", + "quirk.wav", + "rhythmloop.wav", + "roaaar.wav", + "roehr.wav", + "rumms.wav", + "schlopp.wav", + "schlurf.wav", + "schrff.wav", + "schwirr.wav", + "sirr.wav", + "slurp.wav", + "sproing.wav", + "warnton.wav", + "whoosh.wav", + "zisch.wav", + "base.wav", + "infotron.wav", + "zonkdown.wav", + "zonkpush.wav", + "bug.wav", + "boom.wav", + "booom.wav", + "exit.wav", + "empty.wav", + "gate.wav" }; -/* background music */ -int background_loop[] = +/* this is used to reduce memory usage of the different animation types */ +int graphics_action_mapping[] = { - SND_ALCHEMY, - SND_CHASE, - SND_NETWORK, - SND_CZARDASZ, - SND_TYGER, - SND_VOYAGER, - SND_TWILIGHT + 0, /* GFX_ACTION_DEFAULT (0) */ + 0, /* GFX_ACTION_WAITING (1) */ + + 1, /* GFX_ACTION_FALLING (2) */ + 2, /* GFX_ACTION_MOVING (3) */ + 3, /* GFX_ACTION_DIGGING (4) */ + 4, /* GFX_ACTION_SNAPPING (5) */ + 5, /* GFX_ACTION_COLLECTING (6) */ + 6, /* GFX_ACTION_PUSHING (7) */ + + 7, /* GFX_ACTION_PASSING (8) */ + 7, /* GFX_ACTION_IMPACT (9) */ + 7, /* GFX_ACTION_CRACKING (10) */ + 7, /* GFX_ACTION_BREAKING (11) */ + 7, /* GFX_ACTION_ACTIVATING (12) */ + 7, /* GFX_ACTION_OPENING (13) */ + 7, /* GFX_ACTION_CLOSING (14) */ + 7, /* GFX_ACTION_EATING (15) */ + 7, /* GFX_ACTION_ATTACKING (16) */ + 7, /* GFX_ACTION_GROWING (17) */ + 7, /* GFX_ACTION_SHRINKING (18) */ + 7 /* GFX_ACTION_OTHER (19) */ }; -int num_bg_loops = sizeof(background_loop)/sizeof(int); -char *element_info[] = +struct FileInfo *image_files; +struct FileInfo *sound_files; + +struct ElementInfo element_info[MAX_ELEMENTS] = { - "empty space", - "sand", - "normal wall", - "round wall", - "rock", - "key", - "emerald", - "closed exit", - "player", - "bug", - "spaceship", - "yam yam", - "robot", - "steel wall", - "diamond", - "dead amoeba", - "empty quicksand", - "quicksand with rock", - "amoeba drop", - "bomb", - "magic wall", - "speed ball", - "acid pool", - "dropping amoeba", - "normal amoeba", - "nut with emerald", - "life wall", - "biomaze", - "burning dynamite", - "unknown", - "magic wheel", - "running wire", - "red key", - "yellow key", - "green key", - "blue key", - "red door", - "yellow door", - "green door", - "blue door", - "grey door (opened by red key)", - "grey door (opened by yellow key)", - "grey door (opened by green key)", - "grey door (opened by blue key)", - "dynamite", - "pac man", - "invisible normal wall", - "light bulb (dark)", - "ligh bulb (glowing)", - "wall with emerald", - "wall with diamond", - "amoeba with content", - "amoeba (BD style)", - "time orb (full)", - "time orb (empty)", - "growing wall", - "diamond (BD style)", - "yellow emerald", - "wall with BD style diamond", - "wall with yellow emerald", - "dark yam yam", - "magic wall (BD style)", - "invisible steel wall", - "dynabomb", - "increases number of bombs", - "increases explosion size", - "increases power of explosion", - "sokoban object", - "sokoban empty field", - "sokoban field with object", - "butterfly (starts moving right)", - "butterfly (starts moving up)", - "butterfly (starts moving left)", - "butterfly (starts moving down)", - "firefly (starts moving right)", - "firefly (starts moving up)", - "firefly (starts moving left)", - "firefly (starts moving down)", - "butterfly", - "firefly", - "yellow player", - "red player", - "green player", - "blue player", - "bug (starts moving right)", - "bug (starts moving up)", - "bug (starts moving left)", - "bug (starts moving down)", - "spaceship (starts moving right)", - "spaceship (starts moving up)", - "spaceship (starts moving left)", - "spaceship (starts moving down)", - "pac man (starts moving right)", - "pac man (starts moving up)", - "pac man (starts moving left)", - "pac man (starts moving down)", - "red emerald", - "violet emerald", - "wall with red emerald", - "wall with violet emerald", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "open exit", - "unknown", - "amoeba", - "mole", - "penguin", - "satellite", - "arrow left", - "arrow right", - "arrow up", - "arrow down", - "pig", - "fire breathing dragon", - "unknown", - "letter ' '", - "letter '!'", - "letter '\"'", - "letter '#'", - "letter '$'", - "letter '%'", - "letter '&'", - "letter '''", - "letter '('", - "letter ')'", - "letter '*'", - "letter '+'", - "letter ','", - "letter '-'", - "letter '.'", - "letter '/'", - "letter '0'", - "letter '1'", - "letter '2'", - "letter '3'", - "letter '4'", - "letter '5'", - "letter '6'", - "letter '7'", - "letter '8'", - "letter '9'", - "letter ':'", - "letter ';'", - "letter '<'", - "letter '='", - "letter '>'", - "letter '?'", - "letter '@'", - "letter 'A'", - "letter 'B'", - "letter 'C'", - "letter 'D'", - "letter 'E'", - "letter 'F'", - "letter 'G'", - "letter 'H'", - "letter 'I'", - "letter 'J'", - "letter 'K'", - "letter 'L'", - "letter 'M'", - "letter 'N'", - "letter 'O'", - "letter 'P'", - "letter 'Q'", - "letter 'R'", - "letter 'S'", - "letter 'T'", - "letter 'U'", - "letter 'V'", - "letter 'W'", - "letter 'X'", - "letter 'Y'", - "letter 'Z'", - "letter 'Ä'", - "letter 'Ö'", - "letter 'Ü'", - "letter '^'", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "letter ''", - "growing wall (horizontally)", - "growing wall (vertically)", - "growing wall (all directions)", - "unused", - "unused", - "unused", - "unused", - "unused", - "unused", - "unused", - "empty space", - "zonk", - "base", - "murphy", - "infotron", - "chip (single)", - "hardware", - "exit", - "orange disk", - "port (leading right)", - "port (leading down)", - "port (leading left)", - "port (leading up)", - "port (leading right)", - "port (leading down)", - "port (leading left)", - "port (leading up)", - "snik snak", - "yellow disk", - "terminal", - "red disk", - "port (vertically)", - "port (horizontally)", - "port (all directions)", - "electron", - "buggy base", - "chip (left half)", - "chip (right half)", - "hardware", - "hardware", - "hardware", - "hardware", - "hardware", - "hardware", - "hardware", - "hardware", - "hardware", - "hardware", - "chip (upper half)", - "chip (lower half)", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown", - "unknown" + { "empty_space", "empty space" }, /* 0 */ + { "sand", "sand" }, + { "wall", "normal wall" }, + { "wall", "round wall" }, + { "rock", "rock" }, + { "key", "key" }, + { "emerald", "emerald" }, + { "exit", "closed exit" }, + { "player", "player" }, + { "bug", "bug" }, + { "spaceship", "spaceship" }, /* 10 */ + { "yamyam", "yam yam" }, + { "robot", "robot" }, + { "wall", "steel wall" }, + { "diamond", "diamond" }, + { "amoeba", "dead amoeba" }, + { "quicksand", "empty quicksand" }, + { "quicksand", "quicksand with rock" }, + { "amoeba", "amoeba drop" }, + { "bomb", "bomb" }, + { "magic_wall", "magic wall" }, /* 20 */ + { "speed_pill", "speed pill" }, + { "acid", "acid" }, + { "amoeba", "dropping amoeba" }, + { "amoeba", "normal amoeba" }, + { "nut", "nut with emerald" }, + { "gameoflife", "Conway's wall of life" }, + { "biomaze", "biomaze" }, + { "dynamite", "burning dynamite" }, + { "wall", "wall" }, + { "robot_wheel", "magic wheel" }, /* 30 */ + { "robot_wheel", "magic wheel (running)" }, + { "key", "red key" }, + { "key", "yellow key" }, + { "key", "green key" }, + { "key", "blue key" }, + { "gate", "red door" }, + { "gate", "yellow door" }, + { "gate", "green door" }, + { "gate", "blue door" }, + { "gate", "gray door (opened by red key)" }, /* 40 */ + { "gate", "gray door (opened by yellow key)"}, + { "gate", "gray door (opened by green key)"}, + { "gate", "gray door (opened by blue key)"}, + { "dynamite", "dynamite" }, + { "pacman", "pac man" }, + { "wall", "invisible normal wall" }, + { "lamp", "lamp (off)" }, + { "lamp", "lamp (on)" }, + { "wall", "wall with emerald" }, + { "wall", "wall with diamond" }, /* 50 */ + { "amoeba", "amoeba with content" }, + { "bd_amoeba", "amoeba (BD style)" }, + { "time_orb_full", "time orb (full)" }, + { "time_orb_empty", "time orb (empty)" }, + { "wall", "growing wall" }, + { "bd_diamond", "diamond (BD style)" }, + { "emerald", "yellow emerald" }, + { "wall", "wall with BD style diamond" }, + { "wall", "wall with yellow emerald" }, + { "dark_yamyam", "dark yam yam" }, /* 60 */ + { "bd_magic_wall", "magic wall (BD style)" }, + { "wall", "invisible steel wall" }, + + { NULL, "(not used)" }, + + { "dynabomb_nr", "increases number of bombs" }, + { "dynabomb_sz", "increases explosion size" }, + { "dynabomb_xl", "increases power of explosion" }, + { "sokoban_object", "sokoban object" }, + { "sokoban_field", "sokoban empty field" }, + { "sokoban_field", "sokoban field with object" }, + { "bd_butterfly", "butterfly (starts moving right)"}, /* 70 */ + { "bd_butterfly", "butterfly (starts moving up)" }, + { "bd_butterfly", "butterfly (starts moving left)"}, + { "bd_butterfly", "butterfly (starts moving down)"}, + { "bd_firefly", "firefly (starts moving right)" }, + { "bd_firefly", "firefly (starts moving up)" }, + { "bd_firefly", "firefly (starts moving left)" }, + { "bd_firefly", "firefly (starts moving down)" }, + { "bd_butterfly", "butterfly" }, + { "bd_firefly", "firefly" }, + { "player", "yellow player" }, /* 80 */ + { "player", "red player" }, + { "player", "green player" }, + { "player", "blue player" }, + { "bug", "bug (starts moving right)" }, + { "bug", "bug (starts moving up)" }, + { "bug", "bug (starts moving left)" }, + { "bug", "bug (starts moving down)" }, + { "spaceship", "spaceship (starts moving right)"}, + { "spaceship", "spaceship (starts moving up)" }, + { "spaceship", "spaceship (starts moving left)"}, /* 90 */ + { "spaceship", "spaceship (starts moving down)"}, + { "pacman", "pac man (starts moving right)" }, + { "pacman", "pac man (starts moving up)" }, + { "pacman", "pac man (starts moving left)" }, + { "pacman", "pac man (starts moving down)" }, + { "emerald", "red emerald" }, + { "emerald", "purple emerald" }, + { "wall", "wall with red emerald" }, + { "wall", "wall with purple emerald" }, + { "wall", "acid pool (top left)" }, /* 100 */ + { "wall", "acid pool (top right)" }, + { "wall", "acid pool (bottom left)" }, + { "wall", "acid pool (bottom)" }, + { "wall", "acid pool (bottom right)" }, + { "wall", "normal wall (BD style)" }, + { "bd_rock", "rock (BD style)" }, + { "exit", "open exit" }, + { NULL, "black orb bomb" }, + { "amoeba", "amoeba" }, + { "mole", "mole" }, /* 110 */ + { "penguin", "penguin" }, + { "satellite", "satellite" }, + { NULL, "arrow left" }, + { NULL, "arrow right" }, + { NULL, "arrow up" }, + { NULL, "arrow down" }, + { "pig", "pig" }, + { "dragon", "fire breathing dragon" }, + { "key", "red key (EM style)" }, + { NULL, "letter ' '" }, /* 120 */ + { NULL, "letter '!'" }, + { NULL, "letter '\"'" }, + { NULL, "letter '#'" }, + { NULL, "letter '$'" }, + { NULL, "letter '%'" }, + { NULL, "letter '&'" }, + { NULL, "letter '''" }, + { NULL, "letter '('" }, + { NULL, "letter ')'" }, + { NULL, "letter '*'" }, /* 130 */ + { NULL, "letter '+'" }, + { NULL, "letter ','" }, + { NULL, "letter '-'" }, + { NULL, "letter '.'" }, + { NULL, "letter '/'" }, + { NULL, "letter '0'" }, + { NULL, "letter '1'" }, + { NULL, "letter '2'" }, + { NULL, "letter '3'" }, + { NULL, "letter '4'" }, /* 140 */ + { NULL, "letter '5'" }, + { NULL, "letter '6'" }, + { NULL, "letter '7'" }, + { NULL, "letter '8'" }, + { NULL, "letter '9'" }, + { NULL, "letter ':'" }, + { NULL, "letter ';'" }, + { NULL, "letter '<'" }, + { NULL, "letter '='" }, + { NULL, "letter '>'" }, /* 150 */ + { NULL, "letter '?'" }, + { NULL, "letter '@'" }, + { NULL, "letter 'A'" }, + { NULL, "letter 'B'" }, + { NULL, "letter 'C'" }, + { NULL, "letter 'D'" }, + { NULL, "letter 'E'" }, + { NULL, "letter 'F'" }, + { NULL, "letter 'G'" }, + { NULL, "letter 'H'" }, /* 160 */ + { NULL, "letter 'I'" }, + { NULL, "letter 'J'" }, + { NULL, "letter 'K'" }, + { NULL, "letter 'L'" }, + { NULL, "letter 'M'" }, + { NULL, "letter 'N'" }, + { NULL, "letter 'O'" }, + { NULL, "letter 'P'" }, + { NULL, "letter 'Q'" }, + { NULL, "letter 'R'" }, /* 170 */ + { NULL, "letter 'S'" }, + { NULL, "letter 'T'" }, + { NULL, "letter 'U'" }, + { NULL, "letter 'V'" }, + { NULL, "letter 'W'" }, + { NULL, "letter 'X'" }, + { NULL, "letter 'Y'" }, + { NULL, "letter 'Z'" }, + { NULL, "letter 'Ä'" }, + { NULL, "letter 'Ö'" }, /* 180 */ + { NULL, "letter 'Ü'" }, + { NULL, "letter '^'" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, /* 190 */ + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { NULL, "letter ''" }, + { "wall", "growing wall (horizontal)" }, /* 200 */ + { "wall", "growing wall (vertical)" }, + { "wall", "growing wall (all directions)" }, + { "gate", "red door (EM style)" }, + { "gate", "yellow door (EM style)" }, + { "gate", "green door (EM style)" }, + { "gate", "blue door (EM style)" }, + { "key", "yellow key (EM style)" }, + { "key", "green key (EM style)" }, + { "key", "blue key (EM style)" }, + { "empty_space", "empty space" }, /* 210 */ + { "sp_zonk", "zonk" }, + { "sp_base", "base" }, + { "player", "murphy" }, + { "sp_infotron", "infotron" }, + { "wall", "chip (single)" }, + { "wall", "hardware" }, + { "sp_exit", "exit" }, + { "sp_disk_orange", "orange disk" }, + { "sp_port", "port (leading right)" }, + { "sp_port", "port (leading down)" }, /* 220 */ + { "sp_port", "port (leading left)" }, + { "sp_port", "port (leading up)" }, + { "sp_port", "port (leading right)" }, + { "sp_port", "port (leading down)" }, + { "sp_port", "port (leading left)" }, + { "sp_port", "port (leading up)" }, + { "sp_sniksnak", "snik snak" }, + { "sp_disk_yellow", "yellow disk" }, + { "sp_terminal", "terminal" }, + { "sp_disk_red", "red disk" }, /* 230 */ + { "sp_port", "port (vertical)" }, + { "sp_port", "port (horizontal)" }, + { "sp_port", "port (all directions)" }, + { "sp_electron", "electron" }, + { "sp_buggy_base", "buggy base" }, + { "wall", "chip (left half)" }, + { "wall", "chip (right half)" }, + { "wall", "hardware" }, + { "wall", "hardware" }, + { "wall", "hardware" }, /* 240 */ + { "wall", "hardware" }, + { "wall", "hardware" }, + { "wall", "hardware" }, + { "wall", "hardware" }, + { "wall", "hardware" }, + { "wall", "hardware" }, + { "wall", "hardware" }, + { "wall", "chip (upper half)" }, + { "wall", "chip (lower half)" }, + { "gate", "gray door (EM style, red key)" }, /* 250 */ + { "gate", "gray door (EM style, yellow key)"}, + { "gate", "gray door (EM style, green key)"}, + { "gate", "gray door (EM style, blue key)"}, + + { NULL, "(not used)" }, + { NULL, "(not used)" }, + + /* 256 */ + + { "pearl", "pearl" }, /* (256) */ + { "crystal", "crystal" }, + { "wall", "wall with pearl" }, + { "wall", "wall with crystal" }, + { "gate", "white door" }, /* 260 */ + { "gate", "gray door (opened by white key)"}, + { "key", "white key" }, + { "shield_normal", "shield (normal)" }, + { "extra_time", "extra time" }, + { "switchgate", "switch gate (open)" }, + { "switchgate", "switch gate (closed)" }, + { "switchgate_switch", "switch for switch gate" }, + { "switchgate_switch", "switch for switch gate" }, + { NULL, "-" }, + { NULL, "-" }, /* 270 */ + { "conveyor_belt", "red conveyor belt (left)" }, + { "conveyor_belt", "red conveyor belt (middle)" }, + { "conveyor_belt", "red conveyor belt (right)" }, + { "conveyor_belt_switch", "switch for red conveyor belt (left)"}, + { "conveyor_belt_switch", "switch for red conveyor belt (middle)"}, + { "conveyor_belt_switch", "switch for red conveyor belt (right)"}, + { "conveyor_belt", "yellow conveyor belt (left)" }, + { "conveyor_belt", "yellow conveyor belt (middle)" }, + { "conveyor_belt", "yellow conveyor belt (right)" }, + { "conveyor_belt_switch", "switch for yellow conveyor belt (left)"}, + { "conveyor_belt_switch", "switch for yellow conveyor belt (middle)"}, + { "conveyor_belt_switch", "switch for yellow conveyor belt (right)"}, + { "conveyor_belt", "green conveyor belt (left)" }, + { "conveyor_belt", "green conveyor belt (middle)" }, + { "conveyor_belt", "green conveyor belt (right)" }, + { "conveyor_belt_switch", "switch for green conveyor belt (left)"}, + { "conveyor_belt_switch", "switch for green conveyor belt (middle)"}, + { "conveyor_belt_switch", "switch for green conveyor belt (right)"}, + { "conveyor_belt", "blue conveyor belt (left)" }, + { "conveyor_belt", "blue conveyor belt (middle)" }, + { "conveyor_belt", "blue conveyor belt (right)" }, + { "conveyor_belt_switch", "switch for blue conveyor belt (left)"}, + { "conveyor_belt_switch", "switch for blue conveyor belt (middle)"}, + { "conveyor_belt_switch", "switch for blue conveyor belt (right)"}, + { "sand", "land mine" }, + { "envelope", "mail envelope" }, + { "light_switch", "light switch (off)" }, + { "light_switch", "light switch (on)" }, + { "wall", "sign (exclamation)" }, + { "wall", "sign (radio activity)" }, /* 300 */ + { "wall", "sign (stop)" }, + { "wall", "sign (wheel chair)" }, + { "wall", "sign (parking)" }, + { "wall", "sign (one way)" }, + { "wall", "sign (heart)" }, + { "wall", "sign (triangle)" }, + { "wall", "sign (round)" }, + { "wall", "sign (exit)" }, + { "wall", "sign (yin yang)" }, + { "wall", "sign (other)" }, /* 310 */ + { "mole", "mole (starts moving left)" }, + { "mole", "mole (starts moving right)" }, + { "mole", "mole (starts moving up)" }, + { "mole", "mole (starts moving down)" }, + { "wall", "steel wall (slanted)" }, + { "sand", "invisible sand" }, + + { NULL, "dx unknown element 15" }, + { NULL, "dx unknown element 42" }, + + { NULL, "(not used)" }, + { NULL, "(not used)" }, /* 320 */ + + { "shield_deadly", "shield (deadly, kills enemies)"}, + { "timegate", "time gate (open)" }, + { "timegate", "time gate (closed)" }, + { "timegate_switch", "switch for time gate" }, + { "timegate_switch", "switch for time gate" }, + { "balloon", "balloon" }, + { "balloon_switch", "send balloon to the left" }, + { "balloon_switch", "send balloon to the right" }, + { "balloon_switch", "send balloon up" }, + { "balloon_switch", "send balloon down" }, /* 330 */ + { "balloon_switch", "send balloon in any direction" }, + { "wall", "steel wall" }, + { "wall", "steel wall" }, + { "wall", "steel wall" }, + { "wall", "steel wall" }, + { "wall", "normal wall" }, + { "wall", "normal wall" }, + { "wall", "normal wall" }, + { "wall", "normal wall" }, + { "wall", "normal wall" }, /* 340 */ + { "wall", "normal wall" }, + { "wall", "normal wall" }, + { "wall", "normal wall" }, + { "tube", "tube (all directions)" }, + { "tube", "tube (vertical)" }, + { "tube", "tube (horizontal)" }, + { "tube", "tube (vertical & left)" }, + { "tube", "tube (vertical & right)" }, + { "tube", "tube (horizontal & up)" }, + { "tube", "tube (horizontal & down)" }, /* 350 */ + { "tube", "tube (left & up)" }, + { "tube", "tube (left & down)" }, + { "tube", "tube (right & up)" }, + { "tube", "tube (right & down)" }, + { "spring", "spring" }, + { "trap", "trap" }, + { "dx_bomb", "stable bomb (DX style)" }, + { NULL, "-" }, + { NULL, "-" }, + { "custom", "custom element 0" }, + { "custom", "custom element 1" }, + { "custom", "custom element 2" }, + { "custom", "custom element 3" }, + { "custom", "custom element 4" }, + { "custom", "custom element 5" }, + { "custom", "custom element 6" }, + { "custom", "custom element 7" }, + { "custom", "custom element 8" }, + { "custom", "custom element 9" }, + { "custom", "custom element 10" }, + { "custom", "custom element 11" }, + { "custom", "custom element 12" }, + { "custom", "custom element 13" }, + { "custom", "custom element 14" }, + { "custom", "custom element 15" }, + { "custom", "custom element 16" }, + { "custom", "custom element 17" }, + { "custom", "custom element 18" }, + { "custom", "custom element 19" }, + { "custom", "custom element 20" }, + { "custom", "custom element 21" }, + { "custom", "custom element 22" }, + { "custom", "custom element 23" }, + { "custom", "custom element 24" }, + { "custom", "custom element 25" }, + { "custom", "custom element 26" }, + { "custom", "custom element 27" }, + { "custom", "custom element 28" }, + { "custom", "custom element 29" }, + { "custom", "custom element 30" }, + { "custom", "custom element 31" }, + { "custom", "custom element 32" }, + { "custom", "custom element 33" }, + { "custom", "custom element 34" }, + { "custom", "custom element 35" }, + { "custom", "custom element 36" }, + { "custom", "custom element 37" }, + { "custom", "custom element 38" }, + { "custom", "custom element 39" }, + { "custom", "custom element 40" }, + { "custom", "custom element 41" }, + { "custom", "custom element 42" }, + { "custom", "custom element 43" }, + { "custom", "custom element 44" }, + { "custom", "custom element 45" }, + { "custom", "custom element 46" }, + { "custom", "custom element 47" }, + { "custom", "custom element 48" }, + { "custom", "custom element 49" }, + { "custom", "custom element 50" }, + { "custom", "custom element 51" }, + { "custom", "custom element 52" }, + { "custom", "custom element 53" }, + { "custom", "custom element 54" }, + { "custom", "custom element 55" }, + { "custom", "custom element 56" }, + { "custom", "custom element 57" }, + { "custom", "custom element 58" }, + { "custom", "custom element 59" }, + { "custom", "custom element 60" }, + { "custom", "custom element 61" }, + { "custom", "custom element 62" }, + { "custom", "custom element 63" }, + { "custom", "custom element 64" }, + { "custom", "custom element 65" }, + { "custom", "custom element 66" }, + { "custom", "custom element 67" }, + { "custom", "custom element 68" }, + { "custom", "custom element 69" }, + { "custom", "custom element 70" }, + { "custom", "custom element 71" }, + { "custom", "custom element 72" }, + { "custom", "custom element 73" }, + { "custom", "custom element 74" }, + { "custom", "custom element 75" }, + { "custom", "custom element 76" }, + { "custom", "custom element 77" }, + { "custom", "custom element 78" }, + { "custom", "custom element 79" }, + { "custom", "custom element 80" }, + { "custom", "custom element 81" }, + { "custom", "custom element 82" }, + { "custom", "custom element 83" }, + { "custom", "custom element 84" }, + { "custom", "custom element 85" }, + { "custom", "custom element 86" }, + { "custom", "custom element 87" }, + { "custom", "custom element 88" }, + { "custom", "custom element 89" }, + { "custom", "custom element 90" }, + { "custom", "custom element 91" }, + { "custom", "custom element 92" }, + { "custom", "custom element 93" }, + { "custom", "custom element 94" }, + { "custom", "custom element 95" }, + { "custom", "custom element 96" }, + { "custom", "custom element 97" }, + { "custom", "custom element 98" }, + { "custom", "custom element 99" }, + { "custom", "custom element 100" }, + { "custom", "custom element 101" }, + { "custom", "custom element 102" }, + { "custom", "custom element 103" }, + { "custom", "custom element 104" }, + { "custom", "custom element 105" }, + { "custom", "custom element 106" }, + { "custom", "custom element 107" }, + { "custom", "custom element 108" }, + { "custom", "custom element 109" }, + { "custom", "custom element 110" }, + { "custom", "custom element 111" }, + { "custom", "custom element 112" }, + { "custom", "custom element 113" }, + { "custom", "custom element 114" }, + { "custom", "custom element 115" }, + { "custom", "custom element 116" }, + { "custom", "custom element 117" }, + { "custom", "custom element 118" }, + { "custom", "custom element 119" }, + { "custom", "custom element 120" }, + { "custom", "custom element 121" }, + { "custom", "custom element 122" }, + { "custom", "custom element 123" }, + { "custom", "custom element 124" }, + { "custom", "custom element 125" }, + { "custom", "custom element 126" }, + { "custom", "custom element 127" }, + + { NULL, "-" } + + /* + "-------------------------------", + */ }; +struct GraphicInfo graphic_info[MAX_GRAPHICS]; +struct NewGraphicInfo new_graphic_info[NUM_IMAGE_FILES]; + + +/* ========================================================================= */ +/* main() */ +/* ========================================================================= */ + int main(int argc, char *argv[]) { - program_name = (strrchr(argv[0],'/') ? strrchr(argv[0],'/') + 1 : argv[0]); - -#ifdef MSDOS - _fmode = O_BINARY; -#endif + InitCommandName(argv[0]); + InitExitFunction(CloseAllAndExit); + InitPlatformDependantStuff(); GetOptions(argv); - OpenAll(argc,argv); + OpenAll(); + EventLoop(); CloseAllAndExit(0); - exit(0); /* to keep compilers happy */ + + return 0; /* to keep compilers happy */ }