rnd-20001210-2-src
[rocksndiamonds.git] / src / main.c
index e18599dfd383ca4f1e93fdaa11a761704b3456fb..0ef3af3bf416752680d24a6bf2b7bc030059b613 100644 (file)
@@ -1,46 +1,30 @@
 /***********************************************************
 /***********************************************************
-*  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-2000 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 "main.h"
 #include "init.h"
 #include "game.h"
 #include "events.h"
-#include "sound.h"
 #include "joystick.h"
 #include "joystick.h"
-#include "misc.h"
-
-#ifdef MSDOS
-#include <fcntl.h>
-#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];
-#endif
 
 
-Drawable        drawto, drawto_field, backbuffer, fieldbuffer;
-Colormap       cmap;
+GC             tile_clip_gc;
+Bitmap        *pix[NUM_BITMAPS];
+Pixmap         tile_clipmask[NUM_TILES];
+DrawBuffer     *fieldbuffer;
+DrawBuffer     *drawto_field;
 
 
-int            sound_pipe[2];
-int            sound_device;
-char          *sound_device_name = SOUND_DEVICE;
 int            joystick_device = 0;
 char          *joystick_device_name[MAX_PLAYERS] =
 {
 int            joystick_device = 0;
 char          *joystick_device_name[MAX_PLAYERS] =
 {
@@ -50,23 +34,16 @@ char               *joystick_device_name[MAX_PLAYERS] =
   DEV_JOYSTICK_3
 };
 
   DEV_JOYSTICK_3
 };
 
-char          *program_name = NULL;
-
 int            game_status = MAINMENU;
 boolean                level_editor_test_game = FALSE;
 boolean                network_playing = FALSE;
 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            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;
 
 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];
 
 short          Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -78,12 +55,13 @@ short               Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[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];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
-unsigned long  Elementeigenschaften[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften1[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften2[MAX_ELEMENTS];
 
 
-int            level_nr, leveldir_nr, num_leveldirs;
+int            level_nr;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 int            FX = SX, FY = SY, ScrollStepSize;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 int            FX = SX, FY = SY, ScrollStepSize;
@@ -97,93 +75,83 @@ int         SBX_Left, SBX_Right;
 int            SBY_Upper, SBY_Lower;
 int            ZX,ZY, ExitX,ExitY;
 int            AllPlayersGone;
 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;
 
 
 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 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 TapeInfo                tape;
-struct OptionInfo      options;
 struct SetupInfo       setup;
 struct SetupInfo       setup;
-struct SetupFileList   *setup_list = NULL;
-struct SetupFileList   *level_setup_list = NULL;
 struct GameInfo                game;
 struct GlobalInfo      global;
 
 struct GameInfo                game;
 struct GlobalInfo      global;
 
-/* data needed for playing sounds */
+/* filenames of sound effects */
 char *sound_name[NUM_SOUNDS] =
 {
 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[] =
 {
 };
 
 /* background music */
 int background_loop[] =
 {
+#if 0
   SND_ALCHEMY,
   SND_CHASE,
   SND_NETWORK,
   SND_ALCHEMY,
   SND_CHASE,
   SND_NETWORK,
@@ -191,12 +159,13 @@ int background_loop[] =
   SND_TYGER,
   SND_VOYAGER,
   SND_TWILIGHT
   SND_TYGER,
   SND_VOYAGER,
   SND_TWILIGHT
+#endif
 };
 int num_bg_loops = sizeof(background_loop)/sizeof(int);
 
 char *element_info[] =
 {
 };
 int num_bg_loops = sizeof(background_loop)/sizeof(int);
 
 char *element_info[] =
 {
-  "empty space",
+  "empty space",                               /* 0 */
   "sand",
   "normal wall",
   "round wall",
   "sand",
   "normal wall",
   "round wall",
@@ -206,7 +175,7 @@ char *element_info[] =
   "closed exit",
   "player",
   "bug",
   "closed exit",
   "player",
   "bug",
-  "spaceship",
+  "spaceship",                                 /* 10 */
   "yam yam",
   "robot",
   "steel wall",
   "yam yam",
   "robot",
   "steel wall",
@@ -216,7 +185,7 @@ char *element_info[] =
   "quicksand with rock",
   "amoeba drop",
   "bomb",
   "quicksand with rock",
   "amoeba drop",
   "bomb",
-  "magic wall",
+  "magic wall",                                        /* 20 */
   "speed ball",
   "acid pool",
   "dropping amoeba",
   "speed ball",
   "acid pool",
   "dropping amoeba",
@@ -226,7 +195,7 @@ char *element_info[] =
   "biomaze",
   "burning dynamite",
   "unknown",
   "biomaze",
   "burning dynamite",
   "unknown",
-  "magic wheel",
+  "magic wheel",                               /* 30 */
   "running wire",
   "red key",
   "yellow key",
   "running wire",
   "red key",
   "yellow key",
@@ -236,17 +205,17 @@ char *element_info[] =
   "yellow door",
   "green door",
   "blue 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)",
+  "gray door (opened by red key)",             /* 40 */
+  "gray door (opened by yellow key)",
+  "gray door (opened by green key)",
+  "gray door (opened by blue key)",
   "dynamite",
   "pac man",
   "invisible normal wall",
   "light bulb (dark)",
   "ligh bulb (glowing)",
   "wall with emerald",
   "dynamite",
   "pac man",
   "invisible normal wall",
   "light bulb (dark)",
   "ligh bulb (glowing)",
   "wall with emerald",
-  "wall with diamond",
+  "wall with diamond",                         /* 50 */
   "amoeba with content",
   "amoeba (BD style)",
   "time orb (full)",
   "amoeba with content",
   "amoeba (BD style)",
   "time orb (full)",
@@ -256,17 +225,17 @@ char *element_info[] =
   "yellow emerald",
   "wall with BD style diamond",
   "wall with yellow emerald",
   "yellow emerald",
   "wall with BD style diamond",
   "wall with yellow emerald",
-  "dark yam yam",
+  "dark yam yam",                              /* 60 */
   "magic wall (BD style)",
   "invisible steel wall",
   "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",
   "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 right)",           /* 70 */
   "butterfly (starts moving up)",
   "butterfly (starts moving left)",
   "butterfly (starts moving down)",
   "butterfly (starts moving up)",
   "butterfly (starts moving left)",
   "butterfly (starts moving down)",
@@ -276,7 +245,7 @@ char *element_info[] =
   "firefly (starts moving down)",
   "butterfly",
   "firefly",
   "firefly (starts moving down)",
   "butterfly",
   "firefly",
-  "yellow player",
+  "yellow player",                             /* 80 */
   "red player",
   "green player",
   "blue player",
   "red player",
   "green player",
   "blue player",
@@ -286,7 +255,7 @@ char *element_info[] =
   "bug (starts moving down)",
   "spaceship (starts moving right)",
   "spaceship (starts moving up)",
   "bug (starts moving down)",
   "spaceship (starts moving right)",
   "spaceship (starts moving up)",
-  "spaceship (starts moving left)",
+  "spaceship (starts moving left)",            /* 90 */
   "spaceship (starts moving down)",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
   "spaceship (starts moving down)",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
@@ -296,17 +265,17 @@ char *element_info[] =
   "violet emerald",
   "wall with red emerald",
   "wall with violet emerald",
   "violet emerald",
   "wall with red emerald",
   "wall with violet emerald",
+  "unknown",                                   /* 100 */
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
-  "unknown",
-  "unknown",
-  "unknown",
+  "normal wall (BD style)",
+  "rock (BD style)",
   "open exit",
   "unknown",
   "amoeba",
   "open exit",
   "unknown",
   "amoeba",
-  "mole",
+  "mole",                                      /* 110 */
   "penguin",
   "satellite",
   "arrow left",
   "penguin",
   "satellite",
   "arrow left",
@@ -316,7 +285,7 @@ char *element_info[] =
   "pig",
   "fire breathing dragon",
   "unknown",
   "pig",
   "fire breathing dragon",
   "unknown",
-  "letter ' '",
+  "letter ' '",                                        /* 120 */
   "letter '!'",
   "letter '\"'",
   "letter '#'",
   "letter '!'",
   "letter '\"'",
   "letter '#'",
@@ -326,7 +295,7 @@ char *element_info[] =
   "letter '''",
   "letter '('",
   "letter ')'",
   "letter '''",
   "letter '('",
   "letter ')'",
-  "letter '*'",
+  "letter '*'",                                        /* 130 */
   "letter '+'",
   "letter ','",
   "letter '-'",
   "letter '+'",
   "letter ','",
   "letter '-'",
@@ -336,7 +305,7 @@ char *element_info[] =
   "letter '1'",
   "letter '2'",
   "letter '3'",
   "letter '1'",
   "letter '2'",
   "letter '3'",
-  "letter '4'",
+  "letter '4'",                                        /* 140 */
   "letter '5'",
   "letter '6'",
   "letter '7'",
   "letter '5'",
   "letter '6'",
   "letter '7'",
@@ -346,7 +315,7 @@ char *element_info[] =
   "letter ';'",
   "letter '<'",
   "letter '='",
   "letter ';'",
   "letter '<'",
   "letter '='",
-  "letter '>'",
+  "letter '>'",                                        /* 150 */
   "letter '?'",
   "letter '@'",
   "letter 'A'",
   "letter '?'",
   "letter '@'",
   "letter 'A'",
@@ -356,7 +325,7 @@ char *element_info[] =
   "letter 'E'",
   "letter 'F'",
   "letter 'G'",
   "letter 'E'",
   "letter 'F'",
   "letter 'G'",
-  "letter 'H'",
+  "letter 'H'",                                        /* 160 */
   "letter 'I'",
   "letter 'J'",
   "letter 'K'",
   "letter 'I'",
   "letter 'J'",
   "letter 'K'",
@@ -366,7 +335,7 @@ char *element_info[] =
   "letter 'O'",
   "letter 'P'",
   "letter 'Q'",
   "letter 'O'",
   "letter 'P'",
   "letter 'Q'",
-  "letter 'R'",
+  "letter 'R'",                                        /* 170 */
   "letter 'S'",
   "letter 'T'",
   "letter 'U'",
   "letter 'S'",
   "letter 'T'",
   "letter 'U'",
@@ -376,7 +345,7 @@ char *element_info[] =
   "letter 'Y'",
   "letter 'Z'",
   "letter 'Ä'",
   "letter 'Y'",
   "letter 'Z'",
   "letter 'Ä'",
-  "letter 'Ö'",
+  "letter 'Ö'",                                        /* 180 */
   "letter 'Ü'",
   "letter '^'",
   "letter ''",
   "letter 'Ü'",
   "letter '^'",
   "letter ''",
@@ -386,6 +355,7 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
+  "letter ''",                                 /* 190 */
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
@@ -395,9 +365,8 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
-  "letter ''",
-  "growing wall (horizontally)",
-  "growing wall (vertically)",
+  "growing wall (horizontal)",                 /* 200 */
+  "growing wall (vertical)",
   "growing wall (all directions)",
   "unused",
   "unused",
   "growing wall (all directions)",
   "unused",
   "unused",
@@ -406,7 +375,7 @@ char *element_info[] =
   "unused",
   "unused",
   "unused",
   "unused",
   "unused",
   "unused",
-  "empty space",
+  "empty space",                               /* 210 */
   "zonk",
   "base",
   "murphy",
   "zonk",
   "base",
   "murphy",
@@ -416,7 +385,7 @@ char *element_info[] =
   "exit",
   "orange disk",
   "port (leading right)",
   "exit",
   "orange disk",
   "port (leading right)",
-  "port (leading down)",
+  "port (leading down)",                       /* 220 */
   "port (leading left)",
   "port (leading up)",
   "port (leading right)",
   "port (leading left)",
   "port (leading up)",
   "port (leading right)",
@@ -426,9 +395,9 @@ char *element_info[] =
   "snik snak",
   "yellow disk",
   "terminal",
   "snik snak",
   "yellow disk",
   "terminal",
-  "red disk",
-  "port (vertically)",
-  "port (horizontally)",
+  "red disk",                                  /* 230 */
+  "port (vertical)",
+  "port (horizontal)",
   "port (all directions)",
   "electron",
   "buggy base",
   "port (all directions)",
   "electron",
   "buggy base",
@@ -436,7 +405,7 @@ char *element_info[] =
   "chip (right half)",
   "hardware",
   "hardware",
   "chip (right half)",
   "hardware",
   "hardware",
-  "hardware",
+  "hardware",                                  /* 240 */
   "hardware",
   "hardware",
   "hardware",
   "hardware",
   "hardware",
   "hardware",
@@ -446,24 +415,139 @@ char *element_info[] =
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
+  "unknown",                                   /* 250 */
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
-  "unknown"
+
+  /* 256 */
+
+  "pearl",                                     /* (256) */
+  "crystal",
+  "wall with pearl",
+  "wall with crystal",
+  "white door",                                        /* 260 */
+  "gray door (opened by white key)",
+  "white key",
+  "shield (passive)",
+  "extra time",
+  "switch gate (open)",
+  "switch gate (closed)",
+  "switch for switch gate",
+  "switch for switch gate",
+  "-",
+  "-",                                         /* 270 */
+  "red conveyor belt (left)",
+  "red conveyor belt (middle)",
+  "red conveyor belt (right)",
+  "switch for red conveyor belt (left)",
+  "switch for red conveyor belt (middle)",
+  "switch for red conveyor belt (right)",
+  "yellow conveyor belt (left)",
+  "yellow conveyor belt (middle)",
+  "yellow conveyor belt (right)",
+  "switch for yellow conveyor belt (left)",    /* 280 */
+  "switch for yellow conveyor belt (middle)",
+  "switch for yellow conveyor belt (right)",
+  "green conveyor belt (left)",
+  "green conveyor belt (middle)",
+  "green conveyor belt (right)",
+  "switch for green conveyor belt (left)",
+  "switch for green conveyor belt (middle)",
+  "switch for green conveyor belt (right)",
+  "blue conveyor belt (left)",
+  "blue conveyor belt (middle)",               /* 290 */
+  "blue conveyor belt (right)",
+  "switch for blue conveyor belt (left)",
+  "switch for blue conveyor belt (middle)",
+  "switch for blue conveyor belt (right)",
+  "land mine",
+  "mail envelope",
+  "light switch (off)",
+  "light switch (on)",
+  "sign (exclamation)",
+  "sign (radio activity)",                     /* 300 */
+  "sign (stop)",
+  "sign (wheel chair)",
+  "sign (parking)",
+  "sign (one way)",
+  "sign (heart)",
+  "sign (triangle)",
+  "sign (round)",
+  "sign (exit)",
+  "sign (yin yang)",
+  "sign (other)",                              /* 310 */
+  "mole (starts moving left)",
+  "mole (starts moving right)",
+  "mole (starts moving up)",
+  "mole (starts moving down)",
+  "steel wall (slanted)",
+  "invisible sand",
+  "dx unknown 15",
+  "dx unknown 42",
+  "-",
+  "-",                                         /* 320 */
+  "shield (active, kills enemies)",
+  "time gate (open)",
+  "time gate (closed)",
+  "switch for time gate",
+  "switch for time gate",
+  "balloon",
+  "send balloon to the left",
+  "send balloon to the right",
+  "send balloon up",
+  "send balloon down",                         /* 330 */
+  "send balloon in any direction",
+  "steel wall",
+  "steel wall",
+  "steel wall",
+  "steel wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",                               /* 340 */
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "tube (all directions)",
+  "tube (vertical)",
+  "tube (horizontal)",
+  "tube (vertical & left)",
+  "tube (vertical & right)",
+  "tube (horizontal & up)",
+  "tube (horizontal & down)",                  /* 350 */
+  "tube (left & up)",
+  "tube (left & down)",
+  "tube (right & up)",
+  "tube (right & down)",
+  "spring",
+  "trap",
+  "stable bomb (DX style)",
+  "-"
+
+  /*
+  "-------------------------------",
+  */
 };
 };
+int num_element_info = sizeof(element_info)/sizeof(char *);
+
+
+/* ========================================================================= */
+/* main()                                                                    */
+/* ========================================================================= */
 
 int main(int argc, char *argv[])
 {
 
 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);
 
   GetOptions(argv);
-  OpenAll(argc,argv);
+  OpenAll();
+
   EventLoop();
   CloseAllAndExit(0);
   exit(0);     /* to keep compilers happy */
   EventLoop();
   CloseAllAndExit(0);
   exit(0);     /* to keep compilers happy */