rnd-19990928-1-src
[rocksndiamonds.git] / src / init.c
index 78e38abed59c678931755f597e8a3e5bd3e6ce64..b8fe9cc7125afa26aa412c06c1215c0271848911 100644 (file)
@@ -55,6 +55,10 @@ static void InitElementProperties(void);
 
 void OpenAll(int argc, char *argv[])
 {
+#ifdef MSDOS
+  initErrorFile();
+#endif
+
   if (options.serveronly)
   {
     NetworkServer(options.server_port, options.serveronly);
@@ -63,8 +67,6 @@ void OpenAll(int argc, char *argv[])
     exit(0);
   }
 
-  InitLevelAndPlayerInfo();
-
   InitCounter();
   InitSound();
   InitSoundServer();
@@ -81,8 +83,10 @@ void OpenAll(int argc, char *argv[])
   XFlush(display);
 
   InitGfx();
-  InitElementProperties();
+  InitElementProperties();     /* initializes IS_CHAR() for el2gfx() */
+
   InitGadgets();
+  InitLevelAndPlayerInfo();
 
   DrawMainMenu();
 
@@ -104,9 +108,10 @@ void InitLevelAndPlayerInfo()
 
   local_player->connected = TRUE;
 
-  LoadLevelInfo();                     /* global level info */
-  LoadSetup();                         /* global setup info */
-  LoadLevelSetup();                    /* info about last played level */
+  LoadLevelInfo();                             /* global level info */
+  LoadSetup();                                 /* global setup info */
+  LoadLevelSetup_LastSeries();                 /* last played series info */
+  LoadLevelSetup_SeriesInfo(leveldir_nr);      /* last played level info */
 }
 
 void InitNetworkServer()
@@ -455,17 +460,6 @@ void InitWindow(int argc, char *argv[])
   gc = XCreateGC(display, window, gc_valuemask, &gc_values);
 }
 
-void DrawInitText(char *text, int ypos, int color)
-{
-  if (display && window && pix[PIX_SMALLFONT])
-  {
-    XFillRectangle(display,window,gc,0,ypos, WIN_XSIZE,FONT2_YSIZE);
-    DrawTextExt(window,gc,(WIN_XSIZE-strlen(text)*FONT2_XSIZE)/2,
-               ypos,text,FS_SMALL,color);
-    XFlush(display);
-  }
-}
-
 void InitGfx()
 {
   int i,j;
@@ -483,7 +477,8 @@ void InitGfx()
     { "SP",    TRUE },
     { "DC",    TRUE },
     { "Font",  FALSE },
-    { "Font2", FALSE }
+    { "Font2", FALSE },
+    { "Font3", FALSE }
   }; 
 #else
   static struct PictureFileInfo pic[NUM_PICTURES] =
@@ -495,7 +490,8 @@ void InitGfx()
     { "RocksSP",       TRUE },
     { "RocksDC",       TRUE },
     { "RocksFont",     FALSE },
-    { "RocksFont2",    FALSE }
+    { "RocksFont2",    FALSE },
+    { "RocksFont3",    FALSE }
   }; 
 #endif
 
@@ -561,6 +557,8 @@ void InitGfx()
     { GFX_SOKOBAN_OBJEKT, 1 },
     { GFX_FUNKELN_BLAU, 3 },
     { GFX_FUNKELN_WEISS, 3 },
+    { GFX2_SHIELD_PASSIVE, 3 },
+    { GFX2_SHIELD_ACTIVE, 3 },
     { -1, 0 }
   };
 
@@ -872,7 +870,9 @@ void InitElementProperties()
     EL_EM_GATE_3X,
     EL_EM_GATE_4X,
     EL_SWITCHGATE_OPEN,
-    EL_SWITCHGATE_CLOSED
+    EL_SWITCHGATE_CLOSED,
+    EL_TIMEGATE_OPEN,
+    EL_TIMEGATE_CLOSED
   };
   static int ep_pforte_num = sizeof(ep_pforte)/sizeof(int);
 
@@ -941,8 +941,12 @@ void InitElementProperties()
     EL_BELT4_SWITCH_LEFT,
     EL_BELT4_SWITCH_MIDDLE,
     EL_BELT4_SWITCH_RIGHT,
+    EL_SWITCHGATE_SWITCH_1,
+    EL_SWITCHGATE_SWITCH_2,
     EL_LIGHT_SWITCH_OFF,
     EL_LIGHT_SWITCH_ON,
+    EL_TIMEGATE_SWITCH_OFF,
+    EL_TIMEGATE_SWITCH_ON,
     EL_SIGN_EXCLAMATION,
     EL_SIGN_RADIOACTIVITY,
     EL_SIGN_STOP,
@@ -955,7 +959,19 @@ void InitElementProperties()
     EL_SIGN_EXIT,
     EL_SIGN_YINYANG,
     EL_SIGN_OTHER,
-    EL_STEEL_SLANTED
+    EL_STEEL_SLANTED,
+    EL_EMC_STEEL_WALL_1,
+    EL_EMC_STEEL_WALL_2,
+    EL_EMC_STEEL_WALL_3,
+    EL_EMC_STEEL_WALL_4,
+    EL_EMC_WALL_1,
+    EL_EMC_WALL_2,
+    EL_EMC_WALL_3,
+    EL_EMC_WALL_4,
+    EL_EMC_WALL_5,
+    EL_EMC_WALL_6,
+    EL_EMC_WALL_7,
+    EL_EMC_WALL_8
   };
   static int ep_solid_num = sizeof(ep_solid)/sizeof(int);
 
@@ -986,6 +1002,8 @@ void InitElementProperties()
     EL_EM_GATE_4X,
     EL_SWITCHGATE_OPEN,
     EL_SWITCHGATE_CLOSED,
+    EL_TIMEGATE_OPEN,
+    EL_TIMEGATE_CLOSED,
     EL_SP_HARD_GRAY,
     EL_SP_HARD_GREEN,
     EL_SP_HARD_BLUE,
@@ -1024,7 +1042,11 @@ void InitElementProperties()
     EL_SIGN_EXIT,
     EL_SIGN_YINYANG,
     EL_SIGN_OTHER,
-    EL_STEEL_SLANTED
+    EL_STEEL_SLANTED,
+    EL_EMC_STEEL_WALL_1,
+    EL_EMC_STEEL_WALL_2,
+    EL_EMC_STEEL_WALL_3,
+    EL_EMC_STEEL_WALL_4
   };
   static int ep_massive_num = sizeof(ep_massive)/sizeof(int);
 
@@ -1124,7 +1146,19 @@ void InitElementProperties()
     EL_SP_TERMINAL,
     EL_SP_EXIT,
     EL_INVISIBLE_STEEL,
-    EL_STEEL_SLANTED
+    EL_STEEL_SLANTED,
+    EL_EMC_STEEL_WALL_1,
+    EL_EMC_STEEL_WALL_2,
+    EL_EMC_STEEL_WALL_3,
+    EL_EMC_STEEL_WALL_4,
+    EL_EMC_WALL_1,
+    EL_EMC_WALL_2,
+    EL_EMC_WALL_3,
+    EL_EMC_WALL_4,
+    EL_EMC_WALL_5,
+    EL_EMC_WALL_6,
+    EL_EMC_WALL_7,
+    EL_EMC_WALL_8
   };
   static int ep_mauer_num = sizeof(ep_mauer)/sizeof(int);
 
@@ -1207,7 +1241,8 @@ void InitElementProperties()
     EL_DRACHE,
     EL_SONDE,
     EL_SP_SNIKSNAK,
-    EL_SP_ELECTRON
+    EL_SP_ELECTRON,
+    EL_BALLOON
   };
   static int ep_can_move_num = sizeof(ep_can_move)/sizeof(int);
 
@@ -1460,7 +1495,19 @@ void InitElementProperties()
     EL_SIGN_EXIT,
     EL_SIGN_YINYANG,
     EL_SIGN_OTHER,
-    EL_STEEL_SLANTED
+    EL_STEEL_SLANTED,
+    EL_EMC_STEEL_WALL_1,
+    EL_EMC_STEEL_WALL_2,
+    EL_EMC_STEEL_WALL_3,
+    EL_EMC_STEEL_WALL_4,
+    EL_EMC_WALL_1,
+    EL_EMC_WALL_2,
+    EL_EMC_WALL_3,
+    EL_EMC_WALL_4,
+    EL_EMC_WALL_5,
+    EL_EMC_WALL_6,
+    EL_EMC_WALL_7,
+    EL_EMC_WALL_8
   };
   static int ep_inactive_num = sizeof(ep_inactive)/sizeof(int);
 
@@ -1512,7 +1559,8 @@ void InitElementProperties()
     EL_SONDE,
     EL_SP_ZONK,
     EL_SP_DISK_ORANGE,
-    EL_SP_DISK_YELLOW
+    EL_SP_DISK_YELLOW,
+    EL_BALLOON
   };
   static int ep_pushable_num = sizeof(ep_pushable)/sizeof(int);
 
@@ -1613,7 +1661,8 @@ void InitElementProperties()
     EL_SP_PORT_X,
     EL_SP_PORT_Y,
     EL_SP_PORT_XY,
-    EL_SWITCHGATE_OPEN
+    EL_SWITCHGATE_OPEN,
+    EL_TIMEGATE_OPEN
   };
   static int ep_quick_gate_num = sizeof(ep_quick_gate)/sizeof(int);