fixed bug with marking level as changed for certain non-level-changing gadgets
[rocksndiamonds.git] / src / main.c
index aaf7998abd5277c7dd6a11a43be76541b9ee00ef..141a00a305d9d3626316bc8044cb5286d81a6925 100644 (file)
 #include "events.h"
 #include "config.h"
 
-Bitmap                *bitmap_db_store;
-Bitmap                *bitmap_db_cross;
 Bitmap                *bitmap_db_field;
 Bitmap                *bitmap_db_panel;
 Bitmap                *bitmap_db_door_1;
 Bitmap                *bitmap_db_door_2;
-Bitmap                *bitmap_db_toons;
+Bitmap                *bitmap_db_store_1;
+Bitmap                *bitmap_db_store_2;
 DrawBuffer            *fieldbuffer;
 DrawBuffer            *drawto_field;
 
@@ -119,6 +118,7 @@ int                 ScrollStepSize;
 int                    ScreenMovDir = MV_NONE, ScreenMovPos = 0;
 int                    ScreenGfxPos = 0;
 int                    BorderElement = EL_STEELWALL;
+int                    MenuFrameDelay = MENU_FRAME_DELAY;
 int                    GameFrameDelay = GAME_FRAME_DELAY;
 int                    FfwdFrameDelay = FFWD_FRAME_DELAY;
 int                    BX1, BY1;
@@ -144,19 +144,25 @@ struct GlobalInfo global;
 struct BorderInfo      border;
 struct ViewportInfo    viewport;
 struct TitleFadingInfo fading;
+struct TitleFadingInfo title_initial_first_default;
 struct TitleFadingInfo title_initial_default;
+struct TitleFadingInfo title_first_default;
 struct TitleFadingInfo title_default;
-struct TitleMessageInfo        titlescreen_initial_default;
+struct TitleMessageInfo        titlescreen_initial_first_default;
 struct TitleMessageInfo        titlescreen_initial_first[MAX_NUM_TITLE_IMAGES];
+struct TitleMessageInfo        titlescreen_initial_default;
 struct TitleMessageInfo        titlescreen_initial[MAX_NUM_TITLE_IMAGES];
-struct TitleMessageInfo        titlescreen_default;
+struct TitleMessageInfo        titlescreen_first_default;
 struct TitleMessageInfo        titlescreen_first[MAX_NUM_TITLE_IMAGES];
+struct TitleMessageInfo        titlescreen_default;
 struct TitleMessageInfo        titlescreen[MAX_NUM_TITLE_IMAGES];
-struct TitleMessageInfo        titlemessage_initial_default;
+struct TitleMessageInfo        titlemessage_initial_first_default;
 struct TitleMessageInfo        titlemessage_initial_first[MAX_NUM_TITLE_MESSAGES];
+struct TitleMessageInfo        titlemessage_initial_default;
 struct TitleMessageInfo        titlemessage_initial[MAX_NUM_TITLE_MESSAGES];
-struct TitleMessageInfo        titlemessage_default;
+struct TitleMessageInfo        titlemessage_first_default;
 struct TitleMessageInfo        titlemessage_first[MAX_NUM_TITLE_MESSAGES];
+struct TitleMessageInfo        titlemessage_default;
 struct TitleMessageInfo        titlemessage[MAX_NUM_TITLE_MESSAGES];
 struct TitleMessageInfo        readme;
 struct InitInfo                init, init_last;
@@ -5475,7 +5481,17 @@ struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] =
   { ".[DEFAULT]",              GFX_SPECIAL_ARG_DEFAULT,                },
   { ".LOADING",                        GFX_SPECIAL_ARG_LOADING,                },
   { ".TITLE_INITIAL",          GFX_SPECIAL_ARG_TITLE_INITIAL,          },
+  { ".TITLE_INITIAL_1",                GFX_SPECIAL_ARG_TITLE_INITIAL_1,        },
+  { ".TITLE_INITIAL_2",                GFX_SPECIAL_ARG_TITLE_INITIAL_2,        },
+  { ".TITLE_INITIAL_3",                GFX_SPECIAL_ARG_TITLE_INITIAL_3,        },
+  { ".TITLE_INITIAL_4",                GFX_SPECIAL_ARG_TITLE_INITIAL_4,        },
+  { ".TITLE_INITIAL_5",                GFX_SPECIAL_ARG_TITLE_INITIAL_5,        },
   { ".TITLE",                  GFX_SPECIAL_ARG_TITLE,                  },
+  { ".TITLE_1",                        GFX_SPECIAL_ARG_TITLE_1,                },
+  { ".TITLE_2",                        GFX_SPECIAL_ARG_TITLE_2,                },
+  { ".TITLE_3",                        GFX_SPECIAL_ARG_TITLE_3,                },
+  { ".TITLE_4",                        GFX_SPECIAL_ARG_TITLE_4,                },
+  { ".TITLE_5",                        GFX_SPECIAL_ARG_TITLE_5,                },
   { ".MAIN",                   GFX_SPECIAL_ARG_MAIN,                   },
   { ".LEVELS",                 GFX_SPECIAL_ARG_LEVELS                  },
   { ".LEVELNR",                        GFX_SPECIAL_ARG_LEVELNR                 },
@@ -5489,6 +5505,7 @@ struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] =
   { ".PANEL",                  GFX_SPECIAL_ARG_PANEL,                  },
   { ".PREVIEW",                        GFX_SPECIAL_ARG_PREVIEW,                },
   { ".CRUMBLED",               GFX_SPECIAL_ARG_CRUMBLED,               },
+  { ".MAINONLY",               GFX_SPECIAL_ARG_MAINONLY,               },
   { ".TYPENAME",               GFX_SPECIAL_ARG_TYPENAME,               },
   { ".SUBMENU",                        GFX_SPECIAL_ARG_SUBMENU,                },
   { ".MENU",                   GFX_SPECIAL_ARG_MENU,                   },
@@ -5542,11 +5559,14 @@ struct FontInfo font_info[NUM_FONTS + 1] =
   { "font.input_2.active"      },
   { "font.input_1"             },
   { "font.input_2"             },
+  { "font.option_off_narrow"   },
   { "font.option_off"          },
+  { "font.option_on_narrow"    },
   { "font.option_on"           },
   { "font.value_1"             },
   { "font.value_2"             },
   { "font.value_old"           },
+  { "font.value_narrow"                },
   { "font.level_number.active" },
   { "font.level_number"                },
   { "font.tape_recorder"       },
@@ -5560,14 +5580,14 @@ struct FontInfo font_info[NUM_FONTS + 1] =
 struct GlobalAnimInfo global_anim_info[NUM_GLOBAL_ANIM_TOKENS + 1] =
 {
   /* (real) graphic definitions used to define animation graphics */
-  { "global.anim_1.gfx",       },
-  { "global.anim_2.gfx",       },
-  { "global.anim_3.gfx",       },
-  { "global.anim_4.gfx",       },
-  { "global.anim_5.gfx",       },
-  { "global.anim_6.gfx",       },
-  { "global.anim_7.gfx",       },
-  { "global.anim_8.gfx",       },
+  { "gfx.global.anim_1",       },
+  { "gfx.global.anim_2",       },
+  { "gfx.global.anim_3",       },
+  { "gfx.global.anim_4",       },
+  { "gfx.global.anim_5",       },
+  { "gfx.global.anim_6",       },
+  { "gfx.global.anim_7",       },
+  { "gfx.global.anim_8",       },
 
   /* (dummy) graphic definitions used to define animation controls */
   { "global.anim_1",           },
@@ -5605,12 +5625,12 @@ static void print_usage()
        "Usage: %s [OPTION]... [HOSTNAME [PORT]]\n"
        "\n"
        "Options:\n"
-       "  -d, --display HOSTNAME[:SCREEN]  specify X server display\n"
        "  -b, --basepath DIRECTORY         alternative base DIRECTORY\n"
        "  -l, --level DIRECTORY            alternative level DIRECTORY\n"
        "  -g, --graphics DIRECTORY         alternative graphics DIRECTORY\n"
        "  -s, --sounds DIRECTORY           alternative sounds DIRECTORY\n"
        "  -m, --music DIRECTORY            alternative music DIRECTORY\n"
+       "      --mytapes                    use private tapes for tape tests\n"
        "  -n, --network                    network multiplayer game\n"
        "      --serveronly                 only start network server\n"
        "  -v, --verbose                    verbose mode\n"
@@ -5630,6 +5650,7 @@ static void print_usage()
        "  \"autotest LEVELDIR [NR ...]\"     test level tapes for LEVELDIR\n"
        "  \"autoplay LEVELDIR [NR ...]\"     play level tapes for LEVELDIR\n"
        "  \"autoffwd LEVELDIR [NR ...]\"     ffwd level tapes for LEVELDIR\n"
+       "  \"autowarp LEVELDIR [NR ...]\"     warp 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"
@@ -5639,12 +5660,13 @@ static void print_usage()
 
 static void print_version()
 {
-  Print("%s %d.%d.%d.%d\n",
+  Print("%s %d.%d.%d.%d%s\n",
        PROGRAM_TITLE_STRING,
        PROGRAM_VERSION_MAJOR,
        PROGRAM_VERSION_MINOR,
        PROGRAM_VERSION_PATCH,
-       PROGRAM_VERSION_BUILD);
+       PROGRAM_VERSION_BUILD,
+       PROGRAM_VERSION_EXTRA);
 
   if (options.debug)
   {
@@ -5718,6 +5740,14 @@ static void InitProgramConfig(char *command_filename)
   userdata_subdir = USERDATA_DIRECTORY_OTHER;
 #endif
 
+  // set default window size (only relevant on program startup)
+  if (setup.internal.default_window_width  != 0 &&
+      setup.internal.default_window_height != 0)
+  {
+    WIN_XSIZE = setup.internal.default_window_width;
+    WIN_YSIZE = setup.internal.default_window_height;
+  }
+
   InitProgramInfo(command_filename,
                  config_filename,
                  userdata_subdir,