fixed crash bug with wrongly covering the screen for native BD engine
[rocksndiamonds.git] / src / files.c
index 3e9f7fa2b8f607a5c1c6a1663c1558fc9595590d..587e71b956c02b45bd64682399db1464b1c2477f 100644 (file)
@@ -2334,6 +2334,11 @@ void setElementChangeInfoToDefaults(struct ElementChangeInfo *change)
 
 static void setLevelInfoToDefaults_Level(struct LevelInfo *level)
 {
+  boolean add_border = FALSE;
+  int x1 = 0;
+  int y1 = 0;
+  int x2 = STD_LEV_FIELDX - 1;
+  int y2 = STD_LEV_FIELDY - 1;
   int i, x, y;
 
   li = *level;         // copy level data into temporary buffer
@@ -2369,15 +2374,38 @@ static void setLevelInfoToDefaults_Level(struct LevelInfo *level)
   strcpy(level->name, NAMELESS_LEVEL_NAME);
   strcpy(level->author, ANONYMOUS_NAME);
 
+  // set default game engine type
+  level->game_engine_type = setup.default_game_engine_type;
+
+  // some game engines should have a default playfield with border elements
+  if (level->game_engine_type == GAME_ENGINE_TYPE_BD ||
+      level->game_engine_type == GAME_ENGINE_TYPE_EM ||
+      level->game_engine_type == GAME_ENGINE_TYPE_SP)
+  {
+    add_border = TRUE;
+    x1++;
+    y1++;
+    x2--;
+    y2--;
+  }
+
   // set level playfield to playable default level with player and exit
   for (x = 0; x < MAX_LEV_FIELDX; x++)
+  {
     for (y = 0; y < MAX_LEV_FIELDY; y++)
-      level->field[x][y] = EL_SAND;
+    {
+      if (add_border && (x == 0 || x == STD_LEV_FIELDX - 1 ||
+                        y == 0 || y == STD_LEV_FIELDY - 1))
+       level->field[x][y] = getEngineElement(EL_STEELWALL);
+      else
+       level->field[x][y] = getEngineElement(EL_SAND);
+    }
+  }
 
-  level->field[0][0] = EL_PLAYER_1;
-  level->field[STD_LEV_FIELDX - 1][STD_LEV_FIELDY - 1] = EL_EXIT_CLOSED;
+  level->field[x1][y1] = getEngineElement(EL_PLAYER_1);
+  level->field[x2][y2] = getEngineElement(EL_EXIT_CLOSED);
 
-  BorderElement = EL_STEELWALL;
+  BorderElement = getEngineElement(EL_STEELWALL);
 
   // detect custom elements when loading them
   level->file_has_custom_elements = FALSE;
@@ -10727,6 +10755,10 @@ static struct TokenInfo global_setup_tokens[] =
     TYPE_INTEGER,
     &setup.game_frame_delay,                   "game_frame_delay"
   },
+  {
+    TYPE_INTEGER,
+    &setup.default_game_engine_type,           "default_game_engine_type"
+  },
   {
     TYPE_SWITCH,
     &setup.bd_skip_uncovering,                 "bd_skip_uncovering"
@@ -10739,10 +10771,26 @@ static struct TokenInfo global_setup_tokens[] =
     TYPE_SWITCH,
     &setup.bd_scroll_delay,                    "bd_scroll_delay"
   },
+  {
+    TYPE_SWITCH,
+    &setup.bd_show_invisible_outbox,           "bd_show_invisible_outbox"
+  },
   {
     TYPE_SWITCH3,
     &setup.bd_smooth_movements,                        "bd_smooth_movements"
   },
+  {
+    TYPE_SWITCH3,
+    &setup.bd_pushing_graphics,                        "bd_pushing_graphics"
+  },
+  {
+    TYPE_SWITCH3,
+    &setup.bd_up_down_graphics,                        "bd_up_down_graphics"
+  },
+  {
+    TYPE_SWITCH3,
+    &setup.bd_skip_falling_sounds,             "bd_skip_falling_sounds"
+  },
   {
     TYPE_INTEGER,
     &setup.bd_palette_c64,                     "bd_palette_c64"
@@ -10759,6 +10807,10 @@ static struct TokenInfo global_setup_tokens[] =
     TYPE_INTEGER,
     &setup.bd_default_color_type,              "bd_default_color_type"
   },
+  {
+    TYPE_SWITCH,
+    &setup.bd_random_colors,                   "bd_random_colors"
+  },
   {
     TYPE_SWITCH,
     &setup.sp_show_border_elements,            "sp_show_border_elements"
@@ -10815,6 +10867,10 @@ static struct TokenInfo global_setup_tokens[] =
     TYPE_INTEGER,
     &setup.volume_music,                       "volume_music"
   },
+  {
+    TYPE_SWITCH,
+    &setup.audio_sample_rate_44100,            "audio_sample_rate_44100"
+  },
   {
     TYPE_SWITCH,
     &setup.network_mode,                       "network_mode"
@@ -11135,6 +11191,14 @@ static struct TokenInfo shortcut_setup_tokens[] =
     TYPE_KEY_X11,
     &setup.shortcut.snap_down,                 "shortcut.snap_down"
   },
+  {
+    TYPE_KEY_X11,
+    &setup.shortcut.speed_fast,                        "shortcut.speed_fast"
+  },
+  {
+    TYPE_KEY_X11,
+    &setup.shortcut.speed_slow,                        "shortcut.speed_slow"
+  },
 };
 
 static struct SetupInputInfo setup_input;
@@ -11376,6 +11440,10 @@ static struct TokenInfo internal_setup_tokens[] =
     TYPE_BOOLEAN,
     &setup.internal.menu_shortcuts_snap,       "menu_shortcuts_snap"
   },
+  {
+    TYPE_BOOLEAN,
+    &setup.internal.menu_shortcuts_speed,      "menu_shortcuts_speed"
+  },
   {
     TYPE_BOOLEAN,
     &setup.internal.info_title,                        "info_title"
@@ -11579,14 +11647,20 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->prefer_extra_panel_items = TRUE;
   si->game_speed_extended = FALSE;
   si->game_frame_delay = GAME_FRAME_DELAY;
+  si->default_game_engine_type = GAME_ENGINE_TYPE_RND;
   si->bd_skip_uncovering = FALSE;
   si->bd_skip_hatching = FALSE;
   si->bd_scroll_delay = TRUE;
+  si->bd_show_invisible_outbox = FALSE;
   si->bd_smooth_movements = AUTO;
+  si->bd_pushing_graphics = TRUE;
+  si->bd_up_down_graphics = TRUE;
+  si->bd_skip_falling_sounds = AUTO;
   si->bd_palette_c64 = GD_DEFAULT_PALETTE_C64;
   si->bd_palette_c64dtv = GD_DEFAULT_PALETTE_C64DTV;
   si->bd_palette_atari = GD_DEFAULT_PALETTE_ATARI;
   si->bd_default_color_type = GD_DEFAULT_COLOR_TYPE;
+  si->bd_random_colors = FALSE;
   si->sp_show_border_elements = FALSE;
   si->small_game_graphics = FALSE;
   si->show_load_save_buttons = FALSE;
@@ -11604,6 +11678,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->volume_simple = 100;             // percent
   si->volume_loops = 100;              // percent
   si->volume_music = 100;              // percent
+  si->audio_sample_rate_44100 = FALSE;
 
   si->network_mode = FALSE;
   si->network_player_nr = 0;           // first player
@@ -11726,6 +11801,9 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->shortcut.snap_up         = DEFAULT_KEY_SNAP_UP;
   si->shortcut.snap_down       = DEFAULT_KEY_SNAP_DOWN;
 
+  si->shortcut.speed_fast      = DEFAULT_KEY_SPEED_FAST;
+  si->shortcut.speed_slow      = DEFAULT_KEY_SPEED_SLOW;
+
   for (i = 0; i < MAX_PLAYERS; i++)
   {
     si->input[i].use_joystick = FALSE;