rnd-20020402-1-src
[rocksndiamonds.git] / src / init.c
index 8cdbae4d60fb96a928fb0d5eb7ecd52e56b75b54..fe585257360fc68d0dc3785be8dbf0f4761013b4 100644 (file)
 #include "tape.h"
 #include "tools.h"
 #include "files.h"
-#include "joystick.h"
 #include "network.h"
 #include "netserv.h"
+#include "cartoons.h"
+#include "config.h"
 
+static char *image_filename[NUM_PICTURES] =
+{
+  "RocksScreen.pcx",
+  "RocksDoor.pcx",
+  "RocksHeroes.pcx",
+  "RocksToons.pcx",
+  "RocksSP.pcx",
+  "RocksDC.pcx",
+  "RocksMore.pcx",
+  "RocksFont.pcx",
+  "RocksFont2.pcx",
+  "RocksFont3.pcx"
+}; 
+
+static void InitSetup(void);
 static void InitPlayerInfo(void);
 static void InitLevelInfo(void);
+static void InitArtworkInfo(void);
 static void InitNetworkServer(void);
 static void InitSound(void);
 static void InitGfx(void);
@@ -47,10 +64,12 @@ void OpenAll(void)
   }
 
   InitProgramInfo(UNIX_USERDATA_DIRECTORY,
-                 PROGRAM_TITLE_STRING, WINDOW_TITLE_STRING,
+                 PROGRAM_TITLE_STRING, getWindowTitleString(),
                  ICON_TITLE_STRING, X11_ICON_FILENAME, X11_ICONMASK_FILENAME,
-                 MSDOS_POINTER_FILENAME);
+                 MSDOS_POINTER_FILENAME,
+                 COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);
 
+  InitSetup();
   InitPlayerInfo();
 
   InitCounter();
@@ -64,6 +83,7 @@ void OpenAll(void)
 
   InitEventFilter(FilterMouseMotionEvents);
 
+  InitArtworkInfo();
   InitGfx();
   InitElementProperties();     /* initializes IS_CHAR() for el2gfx() */
 
@@ -71,11 +91,18 @@ void OpenAll(void)
   InitGadgets();               /* needs to know number of level series */
 
   InitGfxBackground();
+  InitToons();
+
   DrawMainMenu();
 
   InitNetworkServer();
 }
 
+void InitSetup()
+{
+  LoadSetup();                                 /* global setup info */
+}
+
 void InitPlayerInfo()
 {
   int i;
@@ -84,14 +111,9 @@ void InitPlayerInfo()
   local_player = &stored_player[0];
 
   for (i=0; i<MAX_PLAYERS; i++)
-  {
-    stored_player[i].joystick_fd = -1; /* joystick device closed */
     stored_player[i].connected = FALSE;
-  }
 
   local_player->connected = TRUE;
-
-  LoadSetup();                                 /* global setup info */
 }
 
 void InitLevelInfo()
@@ -101,6 +123,11 @@ void InitLevelInfo()
   LoadLevelSetup_SeriesInfo();                 /* last played level info */
 }
 
+void InitArtworkInfo()
+{
+  LoadArtworkInfo();
+}
+
 void InitNetworkServer()
 {
 #if defined(PLATFORM_UNIX)
@@ -147,158 +174,14 @@ void InitSound()
   StartSoundserver();
 }
 
-void InitJoysticks()
-{
-#if defined(TARGET_SDL)
-  static boolean sdl_joystick_subsystem_initialized = FALSE;
-#endif
-
-  int i;
-
-  if (global_joystick_status == JOYSTICK_OFF)
-    return;
-
-  joystick_status = JOYSTICK_OFF;
-
-#if defined(TARGET_SDL)
-
-  if (!sdl_joystick_subsystem_initialized)
-  {
-    sdl_joystick_subsystem_initialized = TRUE;
-
-    if (SDL_Init(SDL_INIT_JOYSTICK) < 0)
-    {
-      Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
-      return;
-    }
-  }
-
-  for (i=0; i<MAX_PLAYERS; i++)
-  {
-    char *device_name = setup.input[i].joy.device_name;
-    int joystick_nr = getJoystickNrFromDeviceName(device_name);
-
-    if (joystick_nr >= SDL_NumJoysticks())
-      joystick_nr = -1;
-
-    /* misuse joystick file descriptor variable to store joystick number */
-    stored_player[i].joystick_fd = joystick_nr;
-
-    /* this allows subsequent calls to 'InitJoysticks' for re-initialization */
-    if (Check_SDL_JoystickOpened(joystick_nr))
-      Close_SDL_Joystick(joystick_nr);
-
-    if (!setup.input[i].use_joystick)
-      continue;
-
-    if (!Open_SDL_Joystick(joystick_nr))
-    {
-      Error(ERR_WARN, "cannot open joystick %d", joystick_nr);
-      continue;
-    }
-
-    joystick_status = JOYSTICK_AVAILABLE;
-  }
-
-#else /* !TARGET_SDL */
-
-#if defined(PLATFORM_UNIX)
-  for (i=0; i<MAX_PLAYERS; i++)
-  {
-    char *device_name = setup.input[i].joy.device_name;
-
-    /* this allows subsequent calls to 'InitJoysticks' for re-initialization */
-    if (stored_player[i].joystick_fd != -1)
-    {
-      close(stored_player[i].joystick_fd);
-      stored_player[i].joystick_fd = -1;
-    }
-
-    if (!setup.input[i].use_joystick)
-      continue;
-
-    if (access(device_name, R_OK) != 0)
-    {
-      Error(ERR_WARN, "cannot access joystick device '%s'", device_name);
-      continue;
-    }
-
-    if ((stored_player[i].joystick_fd = open(device_name, O_RDONLY)) < 0)
-    {
-      Error(ERR_WARN, "cannot open joystick device '%s'", device_name);
-      continue;
-    }
-
-    joystick_status = JOYSTICK_AVAILABLE;
-  }
-
-#else /* !PLATFORM_UNIX */
-
-  /* try to access two joysticks; if that fails, try to access just one */
-  if (install_joystick(JOY_TYPE_2PADS) == 0 ||
-      install_joystick(JOY_TYPE_AUTODETECT) == 0)
-    joystick_status = JOYSTICK_AVAILABLE;
-
-  /*
-  load_joystick_data(JOYSTICK_FILENAME);
-  */
-
-  for (i=0; i<MAX_PLAYERS; i++)
-  {
-    char *device_name = setup.input[i].joy.device_name;
-    int joystick_nr = getJoystickNrFromDeviceName(device_name);
-
-    if (joystick_nr >= num_joysticks)
-      joystick_nr = -1;
-
-    /* misuse joystick file descriptor variable to store joystick number */
-    stored_player[i].joystick_fd = joystick_nr;
-  }
-#endif
-
-#endif /* !TARGET_SDL */
-}
-
-void InitGfx()
+void InitTileClipmasks()
 {
-  int i;
-
 #if defined(TARGET_X11)
   GC copy_clipmask_gc;
   XGCValues clip_gc_values;
   unsigned long clip_gc_valuemask;
 #endif
 
-#if !defined(PLATFORM_MSDOS)
-  static char *image_filename[NUM_PICTURES] =
-  {
-    "RocksScreen.pcx",
-    "RocksDoor.pcx",
-    "RocksHeroes.pcx",
-    "RocksToons.pcx",
-    "RocksSP.pcx",
-    "RocksDC.pcx",
-    "RocksMore.pcx",
-    "RocksFont.pcx",
-    "RocksFont2.pcx",
-    "RocksFont3.pcx"
-  }; 
-#else
-  static char *image_filename[NUM_PICTURES] =
-  {
-    "Screen.pcx",
-    "Door.pcx",
-    "Heroes.pcx",
-    "Toons.pcx",
-    "SP.pcx",
-    "DC.pcx",
-    "More.pcx",
-    "Font.pcx",
-    "Font2.pcx",
-    "Font3.pcx"
-  }; 
-#endif
-
 #if defined(TARGET_X11_NATIVE)
   static struct
   {
@@ -353,43 +236,7 @@ void InitGfx()
   };
 #endif
 
-  /* initialize some global variables */
-  global.frames_per_second = 0;
-  global.fps_slowdown = FALSE;
-  global.fps_slowdown_factor = 1;
-
-  /* initialize screen properties */
-  InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE,
-                  REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
-  InitGfxDoor1Info(DX, DY, DXSIZE, DYSIZE);
-  InitGfxDoor2Info(VX, VY, VXSIZE, VYSIZE);
-  InitGfxScrollbufferInfo(FXSIZE, FYSIZE);
-
-  /* create additional image buffers for double-buffering */
-  pix[PIX_DB_DOOR] = CreateBitmap(3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH);
-  pix[PIX_DB_FIELD] = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH);
-
-  pix[PIX_SMALLFONT] = LoadImage(image_filename[PIX_SMALLFONT]);
-  InitFontInfo(NULL, NULL, pix[PIX_SMALLFONT]);
-
-  DrawInitText(WINDOW_TITLE_STRING, 20, FC_YELLOW);
-  DrawInitText(WINDOW_SUBTITLE_STRING, 50, FC_RED);
-#if defined(PLATFORM_MSDOS)
-  DrawInitText(PROGRAM_DOS_PORT_STRING, 210, FC_BLUE);
-  rest(200);
-#endif
-  DrawInitText("Loading graphics:",120,FC_GREEN);
-
-  for(i=0; i<NUM_PICTURES; i++)
-  {
-    if (i != PIX_SMALLFONT)
-    {
-      DrawInitText(image_filename[i], 150, FC_YELLOW);
-      pix[i] = LoadImage(image_filename[i]);
-    }
-  }
-
-  InitFontInfo(pix[PIX_BIGFONT], pix[PIX_MEDIUMFONT], pix[PIX_SMALLFONT]);
+  int i;
 
   /* initialize pixmap array for special X11 tile clipping to Pixmap 'None' */
   for(i=0; i<NUM_TILES; i++)
@@ -453,6 +300,53 @@ void InitGfx()
 #endif /* TARGET_X11 */
 }
 
+void InitGfx()
+{
+  int i;
+
+  /* initialize some global variables */
+  global.frames_per_second = 0;
+  global.fps_slowdown = FALSE;
+  global.fps_slowdown_factor = 1;
+
+  /* initialize screen properties */
+  InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE,
+                  REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
+  InitGfxDoor1Info(DX, DY, DXSIZE, DYSIZE);
+  InitGfxDoor2Info(VX, VY, VXSIZE, VYSIZE);
+  InitGfxScrollbufferInfo(FXSIZE, FYSIZE);
+
+  /* create additional image buffers for double-buffering */
+  pix[PIX_DB_DOOR] = CreateBitmap(3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH);
+  pix[PIX_DB_FIELD] = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH);
+
+  pix[PIX_SMALLFONT] = LoadCustomImage(image_filename[PIX_SMALLFONT]);
+
+  InitFontInfo(NULL, NULL, pix[PIX_SMALLFONT]);
+
+  DrawInitText(WINDOW_TITLE_STRING, 20, FC_YELLOW);
+  DrawInitText(WINDOW_SUBTITLE_STRING, 50, FC_RED);
+#if defined(PLATFORM_MSDOS)
+  DrawInitText(PROGRAM_DOS_PORT_STRING, 210, FC_BLUE);
+  rest(200);
+#endif
+  DrawInitText("Loading graphics:",120,FC_GREEN);
+
+  for(i=0; i<NUM_PICTURES; i++)
+  {
+    if (i != PIX_SMALLFONT)
+    {
+      DrawInitText(image_filename[i], 150, FC_YELLOW);
+
+      pix[i] = LoadCustomImage(image_filename[i]);
+    }
+  }
+
+  InitFontInfo(pix[PIX_BIGFONT], pix[PIX_MEDIUMFONT], pix[PIX_SMALLFONT]);
+
+  InitTileClipmasks();
+}
+
 void InitGfxBackground()
 {
   int x, y;
@@ -1640,8 +1534,8 @@ void CloseAllAndExit(int exit_value)
 
   for(i=0; i<NUM_BITMAPS; i++)
     FreeBitmap(pix[i]);
-  CloseVideoDisplay();
 
+  CloseVideoDisplay();
   ClosePlatformDependantStuff();
 
   exit(exit_value);