fixed special function to generate custom element graphics
[rocksndiamonds.git] / src / main.c
index 53ead02dbd0448d5a0fcd18fcc4f9217c82aec70..17a1b3cb3c31fe0c4b3cd0676ff70b9f62c2c09e 100644 (file)
@@ -1,15 +1,13 @@
-/***********************************************************
-* Rocks'n'Diamonds -- McDuffin Strikes Back!               *
-*----------------------------------------------------------*
-* (c) 1995-2006 Artsoft Entertainment                      *
-*               Holger Schemel                             *
-*               Detmolder Strasse 189                      *
-*               33604 Bielefeld                            *
-*               Germany                                    *
-*               e-mail: info@artsoft.org                   *
-*----------------------------------------------------------*
-* main.c                                                   *
-***********************************************************/
+// ============================================================================
+// Rocks'n'Diamonds - McDuffin Strikes Back!
+// ----------------------------------------------------------------------------
+// (c) 1995-2014 by Artsoft Entertainment
+//                         Holger Schemel
+//                 info@artsoft.org
+//                 http://www.artsoft.org/
+// ----------------------------------------------------------------------------
+// main.c
+// ============================================================================
 
 #include "libgame/libgame.h"
 
@@ -25,9 +23,6 @@ Bitmap                       *bitmap_db_store;
 Bitmap                *bitmap_db_cross;
 Bitmap                *bitmap_db_field;
 Bitmap                *bitmap_db_panel;
-#if 0
-Bitmap                *bitmap_db_door;
-#endif
 Bitmap                *bitmap_db_door_1;
 Bitmap                *bitmap_db_door_2;
 Bitmap                *bitmap_db_toons;
@@ -45,15 +40,7 @@ SDL_Thread          *server_thread;
 
 int                    key_joystick_mapping = 0;
 
-#if 1
-#if NEW_SCROLL
 boolean                        redraw[2 + MAX_LEV_FIELDX + 2][2 + MAX_LEV_FIELDY + 2];
-#else
-boolean                        redraw[MAX_LEV_FIELDX + 2][MAX_LEV_FIELDY + 2];
-#endif
-#else
-boolean                        redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
-#endif
 int                    redraw_x1 = 0, redraw_y1 = 0;
 
 short                  Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -98,18 +85,24 @@ int                 ActiveFont[NUM_FONTS];
 int                    lev_fieldx, lev_fieldy;
 int                    scroll_x, scroll_y;
 
-int                    WIN_XSIZE = 672, WIN_YSIZE = 560;
-int                    SCR_FIELDX = 17, SCR_FIELDY = 17;
+int                    WIN_XSIZE = WIN_XSIZE_DEFAULT;
+int                    WIN_YSIZE = WIN_YSIZE_DEFAULT;
+
+int                    SCR_FIELDX = SCR_FIELDX_DEFAULT;
+int                    SCR_FIELDY = SCR_FIELDY_DEFAULT;
+
 int                    REAL_SX = 6, REAL_SY = 6;
 int                    SX = 8, SY = 8;
 int                    DX = 566, DY = 60;
 int                    VX = 566, VY = 400;
 int                    EX = 566, EY = 356;
 int                    dDX, dDY;
-int                    FULL_SXSIZE = 2 + 17 * TILEX + 2; /* 2 + SXSIZE + 2 */
-int                    FULL_SYSIZE = 2 + 17 * TILEY + 2; /* 2 + SYSIZE + 2 */
-int                    SXSIZE = 17 * TILEX;    /* SCR_FIELDX * TILEX */
-int                    SYSIZE = 17 * TILEY;    /* SCR_FIELDY * TILEY */
+
+int                    FULL_SXSIZE = 2 + SXSIZE_DEFAULT + 2;
+int                    FULL_SYSIZE = 2 + SYSIZE_DEFAULT + 2;
+int                    SXSIZE = SXSIZE_DEFAULT;
+int                    SYSIZE = SYSIZE_DEFAULT;
+
 int                    DXSIZE = 100;
 int                    DYSIZE = 280;
 int                    VXSIZE = 100;
@@ -118,24 +111,15 @@ int                       EXSIZE = 100;
 int                    EYSIZE = 144;
 int                    TILESIZE_VAR = TILESIZE;
 
-#if 1
 int                    FX, FY;
-#else
-int                    FX = SX, FY = SY;
-#endif
 int                    ScrollStepSize;
 int                    ScreenMovDir = MV_NONE, ScreenMovPos = 0;
 int                    ScreenGfxPos = 0;
 int                    BorderElement = EL_STEELWALL;
 int                    GameFrameDelay = GAME_FRAME_DELAY;
 int                    FfwdFrameDelay = FFWD_FRAME_DELAY;
-#if 1
 int                    BX1, BY1;
 int                    BX2, BY2;
-#else
-int                    BX1 = 0, BY1 = 0;
-int                    BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1;
-#endif
 int                    SBX_Left, SBX_Right;
 int                    SBY_Upper, SBY_Lower;
 int                    ZX, ZY;
@@ -1116,37 +1100,37 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] =
   {
     "char_copyright",
     "char",
-    "letter '©'"
+    "letter '\xa9'"
   },
   {
     "char_aumlaut",
     "char",
-    "letter 'Ä'"
+    "letter '\xc4'"
   },
   {
     "char_oumlaut",
     "char",
-    "letter 'Ö'"
+    "letter '\xd6'"
   },
   {
     "char_uumlaut",
     "char",
-    "letter 'Ü'"
+    "letter '\xdc'"
   },
   {
     "char_degree",
     "char",
-    "letter '°'"
+    "letter '\xb0'"
   },
   {
     "char_trademark",
     "char",
-    "letter '®'"
+    "letter '\xae'"
   },
   {
     "char_cursor",
     "char",
-    "letter ' '"
+    "letter '\xa0'"
   },
   {
     "char_unused",
@@ -4176,37 +4160,37 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] =
   {
     "steel_char_copyright",
     "steel_char",
-    "steel letter '©'"
+    "steel letter '\xa9'"
   },
   {
     "steel_char_aumlaut",
     "steel_char",
-    "steel letter 'Ä'"
+    "steel letter '\xc4'"
   },
   {
     "steel_char_oumlaut",
     "steel_char",
-    "steel letter 'Ö'"
+    "steel letter '\xd6'"
   },
   {
     "steel_char_uumlaut",
     "steel_char",
-    "steel letter 'Ü'"
+    "steel letter '\xdc'"
   },
   {
     "steel_char_degree",
     "steel_char",
-    "steel letter '°'"
+    "steel letter '\xb0'"
   },
   {
     "steel_char_trademark",
     "steel_char",
-    "steel letter '®'"
+    "steel letter '\xae'"
   },
   {
     "steel_char_cursor",
     "steel_char",
-    "steel letter ' '"
+    "steel letter '\xa0'"
   },
   {
     "steel_char_unused",
@@ -5580,8 +5564,8 @@ static void print_usage()
         "  -n, --network                    network multiplayer game\n"
         "      --serveronly                 only start network server\n"
         "  -v, --verbose                    verbose mode\n"
+        "  -V, --version                    show program version\n"
         "      --debug                      display debugging information\n"
-        "      --debug-x11-sync             enable X11 synchronous mode\n"
         "  -e, --execute COMMAND            execute batch COMMAND\n"
         "\n"
         "Valid commands for '--execute' option:\n"
@@ -5596,34 +5580,62 @@ static void print_usage()
         "  \"autoplay LEVELDIR [NR ...]\"     play level tapes for LEVELDIR\n"
         "  \"convert LEVELDIR [NR]\"          convert levels in LEVELDIR\n"
         "  \"create images DIRECTORY\"        write BMP images to DIRECTORY\n"
+        "  \"create CE image DIRECTORY\"      write BMP image to DIRECTORY\n"
         "\n",
         program.command_basename);
 }
 
-int main(int argc, char *argv[])
+static void print_version()
 {
-#if 1
-  InitProgramInfo(argv[0], USERDATA_DIRECTORY, USERDATA_DIRECTORY_UNIX,
-                 PROGRAM_TITLE_STRING, ICON_TITLE_STRING,
-                 X11_ICON_FILENAME, X11_ICONMASK_FILENAME, SDL_ICON_FILENAME,
-                 MSDOS_POINTER_FILENAME,
-                 COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);
-#else
-  char *window_title_string = getWindowTitleString();
+  printf("%s %d.%d.%d.%d\n",
+        PROGRAM_TITLE_STRING,
+        PROGRAM_VERSION_MAJOR,
+        PROGRAM_VERSION_MINOR,
+        PROGRAM_VERSION_PATCH,
+        PROGRAM_VERSION_BUILD);
 
+  if (options.debug)
+  {
+    SDL_version sdl_version;
+
+    SDL_VERSION(&sdl_version);
+    printf("- SDL %d.%d.%d\n",
+          sdl_version.major,
+          sdl_version.minor,
+          sdl_version.patch);
+
+    SDL_IMAGE_VERSION(&sdl_version);
+    printf("- SDL_image %d.%d.%d\n",
+          sdl_version.major,
+          sdl_version.minor,
+          sdl_version.patch);
+
+    SDL_MIXER_VERSION(&sdl_version);
+    printf("- SDL_mixer %d.%d.%d\n",
+          sdl_version.major,
+          sdl_version.minor,
+          sdl_version.patch);
+
+    SDL_NET_VERSION(&sdl_version);
+    printf("- SDL_net %d.%d.%d\n",
+          sdl_version.major,
+          sdl_version.minor,
+          sdl_version.patch);
+  }
+}
+
+int main(int argc, char *argv[])
+{
   InitProgramInfo(argv[0], USERDATA_DIRECTORY, USERDATA_DIRECTORY_UNIX,
-                 PROGRAM_TITLE_STRING, window_title_string, ICON_TITLE_STRING,
-                 X11_ICON_FILENAME, X11_ICONMASK_FILENAME, SDL_ICON_FILENAME,
-                 MSDOS_POINTER_FILENAME,
-                 COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);
-#endif
+                 PROGRAM_TITLE_STRING, ICON_TITLE_STRING, SDL_ICON_FILENAME,
+                 COOKIE_PREFIX, GAME_VERSION_ACTUAL);
 
   InitWindowTitleFunction(getWindowTitleString);
   InitExitMessageFunction(DisplayExitMessage);
   InitExitFunction(CloseAllAndExit);
   InitPlatformDependentStuff();
 
-  GetOptions(argv, print_usage);
+  GetOptions(argv, print_usage, print_version);
   OpenAll();
 
   EventLoop();