fixed special function to generate custom element graphics
[rocksndiamonds.git] / src / main.c
index 94c5c3ace7cdc47034b96f86ae1989d38d4545d1..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"
 
@@ -17,6 +15,7 @@
 #include "init.h"
 #include "game.h"
 #include "tape.h"
+#include "tools.h"
 #include "events.h"
 #include "config.h"
 
@@ -24,7 +23,8 @@ Bitmap                       *bitmap_db_store;
 Bitmap                *bitmap_db_cross;
 Bitmap                *bitmap_db_field;
 Bitmap                *bitmap_db_panel;
-Bitmap                *bitmap_db_door;
+Bitmap                *bitmap_db_door_1;
+Bitmap                *bitmap_db_door_2;
 Bitmap                *bitmap_db_toons;
 DrawBuffer            *fieldbuffer;
 DrawBuffer            *drawto_field;
@@ -40,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];
@@ -93,38 +85,41 @@ 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                    SX = 8, SY = 8;
+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                    SXSIZE = 17 * TILEX;    /* SCR_FIELDX * TILEX */
-int                    SYSIZE = 17 * TILEY;    /* SCR_FIELDY * TILEY */
-int                    FULL_SXSIZE = 2 + 17 * TILEX + 2; /* 2 + SXSIZE + 2 */
-int                    FULL_SYSIZE = 2 + 17 * TILEY + 2; /* 2 + SYSIZE + 2 */
+
+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;
+int                    VYSIZE = 100;
+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;
@@ -156,12 +151,16 @@ struct TitleMessageInfo   readme;
 struct InitInfo                init, init_last;
 struct MenuInfo                menu;
 struct DoorInfo                door_1, door_2;
+struct RequestInfo     request;
 struct PreviewInfo     preview;
+struct EditorInfo      editor;
+
 struct GraphicInfo     *graphic_info = NULL;
 struct SoundInfo       *sound_info = NULL;
 struct MusicInfo       *music_info = NULL;
 struct MusicFileInfo   *music_file_info = NULL;
 struct HelpAnimInfo    *helpanim_info = NULL;
+
 SetupFileHash          *helptext_info = NULL;
 SetupFileHash         *image_config_hash = NULL;
 SetupFileHash         *element_token_hash = NULL;
@@ -1101,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",
@@ -4161,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",
@@ -5513,6 +5512,7 @@ struct FontInfo font_info[NUM_FONTS + 1] =
   { "font.envelope_2"          },
   { "font.envelope_3"          },
   { "font.envelope_4"          },
+  { "font.request"             },
   { "font.input_1.active"      },
   { "font.input_2.active"      },
   { "font.input_1"             },
@@ -5564,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"
@@ -5580,24 +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()
 {
-  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);
+                 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();