rnd-20091210-1-src
[rocksndiamonds.git] / src / files.c
index 78ef9ed7b3d7aa626f20834f2ad84822632134ac..80037699fc8ae90aacadcca7c13d8fc04d1cb747 100644 (file)
@@ -6331,13 +6331,13 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level,
 /* functions for loading SB level                                            */
 /* ------------------------------------------------------------------------- */
 
-int getMappedElement_SB(int element_ascii, boolean use_special_1)
+int getMappedElement_SB(int element_ascii, boolean use_ces)
 {
   static struct
   {
     int ascii;
-    int rnd;
-    int special_1;
+    int sb;
+    int ce;
   }
   sb_element_mapping[] =
   {
@@ -6357,9 +6357,7 @@ int getMappedElement_SB(int element_ascii, boolean use_special_1)
 
   for (i = 0; sb_element_mapping[i].ascii != 0; i++)
     if (element_ascii == sb_element_mapping[i].ascii)
-      return (use_special_1 ?
-             sb_element_mapping[i].special_1 :
-             sb_element_mapping[i].rnd);
+      return (use_ces ? sb_element_mapping[i].ce : sb_element_mapping[i].sb);
 
   return EL_UNDEFINED;
 }
@@ -6378,8 +6376,7 @@ static void LoadLevelFromFileInfo_SB(struct LevelInfo *level,
   boolean reading_playfield = FALSE;
   boolean got_valid_playfield_line = FALSE;
   boolean invalid_playfield_char = FALSE;
-  boolean convert_mode_special_1 = (global.convert_leveldir &&
-                                   global.convert_mode_special_1);
+  boolean load_xsb_to_ces = options.cmd_switches & CMD_SWITCH_LOAD_XSB_TO_CES;
   int file_level_nr = 0;
   int line_nr = 0;
   int x, y;
@@ -6522,7 +6519,7 @@ static void LoadLevelFromFileInfo_SB(struct LevelInfo *level,
 
       for (x = 0; x < MAX_LEV_FIELDX; x++)
        for (y = 0; y < MAX_LEV_FIELDY; y++)
-         level->field[x][y] = EL_EMPTY;
+         level->field[x][y] = getMappedElement_SB(' ', load_xsb_to_ces);
 
       level->fieldx = 0;
       level->fieldy = 0;
@@ -6541,8 +6538,7 @@ static void LoadLevelFromFileInfo_SB(struct LevelInfo *level,
     /* read playfield elements from line */
     for (line_ptr = line; *line_ptr; line_ptr++)
     {
-      int mapped_sb_element = getMappedElement_SB(*line_ptr,
-                                                 convert_mode_special_1);
+      int mapped_sb_element = getMappedElement_SB(*line_ptr, load_xsb_to_ces);
 
       /* stop parsing playfield line if larger column than allowed */
       if (x >= MAX_LEV_FIELDX)
@@ -6615,14 +6611,25 @@ static void LoadLevelFromFileInfo_SB(struct LevelInfo *level,
     sprintf(level->name, "--> Level %d <--", level_file_info->nr);
   }
 
+  /* set all empty fields beyond the border walls to invisible steel wall */
   for (y = 0; y < level->fieldy; y++) for (x = 0; x < level->fieldx; x++)
   {
     if ((x == 0 || x == level->fieldx - 1 ||
         y == 0 || y == level->fieldy - 1) &&
-       level->field[x][y] == getMappedElement_SB(' ', convert_mode_special_1))
-      FloodFillLevel(x, y, getMappedElement_SB('_', convert_mode_special_1),
+       level->field[x][y] == getMappedElement_SB(' ', load_xsb_to_ces))
+      FloodFillLevel(x, y, getMappedElement_SB('_', load_xsb_to_ces),
                     level->field, level->fieldx, level->fieldy);
   }
+
+  if (load_xsb_to_ces)
+  {
+    level->time = 0;
+    level->use_step_counter = TRUE;
+
+    level->initial_player_stepsize[0] = STEPSIZE_SLOW;
+
+    level->use_custom_template = TRUE;
+  }
 }
 
 
@@ -8694,14 +8701,15 @@ void SaveScore(int nr)
 #define SETUP_TOKEN_INPUT_ON_FOCUS             22
 #define SETUP_TOKEN_PREFER_AGA_GRAPHICS                23
 #define SETUP_TOKEN_GAME_FRAME_DELAY           24
-#define SETUP_TOKEN_GRAPHICS_SET               25
-#define SETUP_TOKEN_SOUNDS_SET                 26
-#define SETUP_TOKEN_MUSIC_SET                  27
-#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS    28
-#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS      29
-#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC       30
+#define SETUP_TOKEN_SP_SHOW_BORDER_ELEMENTS    25
+#define SETUP_TOKEN_GRAPHICS_SET               26
+#define SETUP_TOKEN_SOUNDS_SET                 27
+#define SETUP_TOKEN_MUSIC_SET                  28
+#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS    29
+#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS      30
+#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC       31
 
-#define NUM_GLOBAL_SETUP_TOKENS                        31
+#define NUM_GLOBAL_SETUP_TOKENS                        32
 
 /* editor setup */
 #define SETUP_TOKEN_EDITOR_EL_BOULDERDASH      0
@@ -8798,34 +8806,35 @@ static struct OptionInfo soi;
 
 static struct TokenInfo global_setup_tokens[] =
 {
-  { TYPE_STRING, &si.player_name,      "player_name"                   },
-  { TYPE_SWITCH, &si.sound,            "sound"                         },
-  { TYPE_SWITCH, &si.sound_loops,      "repeating_sound_loops"         },
-  { TYPE_SWITCH, &si.sound_music,      "background_music"              },
-  { TYPE_SWITCH, &si.sound_simple,     "simple_sound_effects"          },
-  { TYPE_SWITCH, &si.toons,            "toons"                         },
-  { TYPE_SWITCH, &si.scroll_delay,     "scroll_delay"                  },
-  { TYPE_INTEGER,&si.scroll_delay_value,"scroll_delay_value"           },
-  { TYPE_SWITCH, &si.soft_scrolling,   "soft_scrolling"                },
-  { TYPE_SWITCH, &si.fade_screens,     "fade_screens"                  },
-  { TYPE_SWITCH, &si.autorecord,       "automatic_tape_recording"      },
-  { TYPE_SWITCH, &si.show_titlescreen, "show_titlescreen"              },
-  { TYPE_SWITCH, &si.quick_doors,      "quick_doors"                   },
-  { TYPE_SWITCH, &si.team_mode,                "team_mode"                     },
-  { TYPE_SWITCH, &si.handicap,         "handicap"                      },
-  { TYPE_SWITCH, &si.skip_levels,      "skip_levels"                   },
-  { TYPE_SWITCH, &si.time_limit,       "time_limit"                    },
-  { TYPE_SWITCH, &si.fullscreen,       "fullscreen"                    },
-  { TYPE_STRING, &si.fullscreen_mode,  "fullscreen_mode"               },
-  { TYPE_SWITCH, &si.ask_on_escape,    "ask_on_escape"                 },
-  { TYPE_SWITCH, &si.ask_on_escape_editor, "ask_on_escape_editor"      },
-  { TYPE_SWITCH, &si.quick_switch,     "quick_player_switch"           },
-  { TYPE_SWITCH, &si.input_on_focus,   "input_on_focus"                },
-  { TYPE_SWITCH, &si.prefer_aga_graphics, "prefer_aga_graphics"                },
-  { TYPE_INTEGER,&si.game_frame_delay, "game_frame_delay"              },
-  { TYPE_STRING, &si.graphics_set,     "graphics_set"                  },
-  { TYPE_STRING, &si.sounds_set,       "sounds_set"                    },
-  { TYPE_STRING, &si.music_set,                "music_set"                     },
+  { TYPE_STRING, &si.player_name,             "player_name"            },
+  { TYPE_SWITCH, &si.sound,                   "sound"                  },
+  { TYPE_SWITCH, &si.sound_loops,             "repeating_sound_loops"  },
+  { TYPE_SWITCH, &si.sound_music,             "background_music"       },
+  { TYPE_SWITCH, &si.sound_simple,            "simple_sound_effects"   },
+  { TYPE_SWITCH, &si.toons,                   "toons"                  },
+  { TYPE_SWITCH, &si.scroll_delay,            "scroll_delay"           },
+  { TYPE_INTEGER,&si.scroll_delay_value,      "scroll_delay_value"     },
+  { TYPE_SWITCH, &si.soft_scrolling,          "soft_scrolling"         },
+  { TYPE_SWITCH, &si.fade_screens,            "fade_screens"           },
+  { TYPE_SWITCH, &si.autorecord,              "automatic_tape_recording"},
+  { TYPE_SWITCH, &si.show_titlescreen,        "show_titlescreen"       },
+  { TYPE_SWITCH, &si.quick_doors,             "quick_doors"            },
+  { TYPE_SWITCH, &si.team_mode,               "team_mode"              },
+  { TYPE_SWITCH, &si.handicap,                "handicap"               },
+  { TYPE_SWITCH, &si.skip_levels,             "skip_levels"            },
+  { TYPE_SWITCH, &si.time_limit,              "time_limit"             },
+  { TYPE_SWITCH, &si.fullscreen,              "fullscreen"             },
+  { TYPE_STRING, &si.fullscreen_mode,         "fullscreen_mode"                },
+  { TYPE_SWITCH, &si.ask_on_escape,           "ask_on_escape"          },
+  { TYPE_SWITCH, &si.ask_on_escape_editor,    "ask_on_escape_editor"   },
+  { TYPE_SWITCH, &si.quick_switch,            "quick_player_switch"    },
+  { TYPE_SWITCH, &si.input_on_focus,          "input_on_focus"         },
+  { TYPE_SWITCH, &si.prefer_aga_graphics,     "prefer_aga_graphics"    },
+  { TYPE_INTEGER,&si.game_frame_delay,        "game_frame_delay"       },
+  { TYPE_SWITCH, &si.sp_show_border_elements, "sp_show_border_elements"        },
+  { TYPE_STRING, &si.graphics_set,            "graphics_set"           },
+  { TYPE_STRING, &si.sounds_set,              "sounds_set"             },
+  { TYPE_STRING, &si.music_set,               "music_set"              },
   { TYPE_SWITCH3,&si.override_level_graphics, "override_level_graphics"        },
   { TYPE_SWITCH3,&si.override_level_sounds,   "override_level_sounds"  },
   { TYPE_SWITCH3,&si.override_level_music,    "override_level_music"   },
@@ -8976,6 +8985,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->input_on_focus = FALSE;
   si->prefer_aga_graphics = TRUE;
   si->game_frame_delay = GAME_FRAME_DELAY;
+  si->sp_show_border_elements = FALSE;
 
   si->graphics_set = getStringCopy(GFX_DEFAULT_SUBDIR);
   si->sounds_set = getStringCopy(SND_DEFAULT_SUBDIR);