added config parameters for native BD graphics/sound engine (not used yet)
[rocksndiamonds.git] / src / files.c
index 3480ed7458e11af0d36f8b1989f1a3f8c687448b..ae0dbf7dc053f11ad0c966185bc2b0115227c2d7 100644 (file)
@@ -2891,7 +2891,7 @@ static int LoadLevel_CUS3(File *file, int chunk_size, struct LevelInfo *level)
     ei->change->delay_random = getFile16BitBE(file);
     ei->change->delay_frames = getFile16BitBE(file);
 
-    ei->change->initial_trigger_element= getMappedElement(getFile16BitBE(file));
+    ei->change->initial_trigger_element = getMappedElement(getFile16BitBE(file));
 
     ei->change->explode = getFile8Bit(file);
     ei->change->use_target_content = getFile8Bit(file);
@@ -3650,6 +3650,27 @@ static void LoadLevelFromFileInfo_RND(struct LevelInfo *level,
 }
 
 
+// ----------------------------------------------------------------------------
+// functions for loading BD level
+// ----------------------------------------------------------------------------
+
+static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
+{
+  struct LevelInfo_BD *level_bd = level->native_bd_level;
+
+  level_bd->width  = MIN(level->fieldx, MAX_PLAYFIELD_WIDTH);
+  level_bd->height = MIN(level->fieldy, MAX_PLAYFIELD_HEIGHT);
+}
+
+static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
+{
+  struct LevelInfo_BD *level_bd = level->native_bd_level;
+
+  level->fieldx = MIN(level_bd->width,  MAX_LEV_FIELDX);
+  level->fieldy = MIN(level_bd->height, MAX_LEV_FIELDY);
+}
+
+
 // ----------------------------------------------------------------------------
 // functions for loading EM level
 // ----------------------------------------------------------------------------
@@ -6323,7 +6344,9 @@ static void LoadLevelFromFileInfo_MM(struct LevelInfo *level,
 
 void CopyNativeLevel_RND_to_Native(struct LevelInfo *level)
 {
-  if (level->game_engine_type == GAME_ENGINE_TYPE_EM)
+  if (level->game_engine_type == GAME_ENGINE_TYPE_BD)
+    CopyNativeLevel_RND_to_BD(level);
+  else if (level->game_engine_type == GAME_ENGINE_TYPE_EM)
     CopyNativeLevel_RND_to_EM(level);
   else if (level->game_engine_type == GAME_ENGINE_TYPE_SP)
     CopyNativeLevel_RND_to_SP(level);
@@ -6333,7 +6356,9 @@ void CopyNativeLevel_RND_to_Native(struct LevelInfo *level)
 
 void CopyNativeLevel_Native_to_RND(struct LevelInfo *level)
 {
-  if (level->game_engine_type == GAME_ENGINE_TYPE_EM)
+  if (level->game_engine_type == GAME_ENGINE_TYPE_BD)
+    CopyNativeLevel_BD_to_RND(level);
+  else if (level->game_engine_type == GAME_ENGINE_TYPE_EM)
     CopyNativeLevel_EM_to_RND(level);
   else if (level->game_engine_type == GAME_ENGINE_TYPE_SP)
     CopyNativeLevel_SP_to_RND(level);
@@ -8135,7 +8160,7 @@ static int LoadTape_BODY(File *file, int chunk_size, struct TapeInfo *tape)
       byte action = tape->pos[i].action[0];
       int k, num_moves = 0;
 
-      for (k = 0; k<4; k++)
+      for (k = 0; k < 4; k++)
       {
        if (action & joy_dir[k])
        {
@@ -9843,6 +9868,10 @@ static struct TokenInfo editor_cascade_setup_tokens[] =
     TYPE_SWITCH,
     &setup.editor_cascade.el_bd,               "editor.cascade.el_bd"
   },
+  {
+    TYPE_SWITCH,
+    &setup.editor_cascade.el_bd_native,                "editor.cascade.el_bd_native"
+  },
   {
     TYPE_SWITCH,
     &setup.editor_cascade.el_em,               "editor.cascade.el_em"
@@ -10532,6 +10561,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->touch.overlay_buttons            = FALSE;
 
   si->editor.el_boulderdash            = TRUE;
+  si->editor.el_boulderdash_native     = TRUE;
   si->editor.el_emerald_mine           = TRUE;
   si->editor.el_emerald_mine_club      = TRUE;
   si->editor.el_more                   = TRUE;
@@ -10591,7 +10621,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   for (i = 0; i < MAX_PLAYERS; i++)
   {
     si->input[i].use_joystick = FALSE;
-    si->input[i].joy.device_name=getStringCopy(getDeviceNameFromJoystickNr(i));
+    si->input[i].joy.device_name = getStringCopy(getDeviceNameFromJoystickNr(i));
     si->input[i].joy.xleft   = JOYSTICK_XLEFT;
     si->input[i].joy.xmiddle = JOYSTICK_XMIDDLE;
     si->input[i].joy.xright  = JOYSTICK_XRIGHT;
@@ -10705,6 +10735,7 @@ static void setSetupInfoToDefaults_ServerSetup(struct SetupInfo *si)
 static void setSetupInfoToDefaults_EditorCascade(struct SetupInfo *si)
 {
   si->editor_cascade.el_bd             = TRUE;
+  si->editor_cascade.el_bd_native      = TRUE;
   si->editor_cascade.el_em             = TRUE;
   si->editor_cascade.el_emc            = TRUE;
   si->editor_cascade.el_rnd            = TRUE;
@@ -12863,6 +12894,65 @@ void LoadMenuDesignSettings_AfterGraphics(void)
   InitMenuDesignSettings_SpecialPostProcessing_AfterGraphics();
 }
 
+void InitSoundSettings_FromHash(SetupFileHash *setup_file_hash,
+                               boolean ignore_defaults)
+{
+  int i;
+
+  for (i = 0; sound_config_vars[i].token != NULL; i++)
+  {
+    char *value = getHashEntry(setup_file_hash, sound_config_vars[i].token);
+
+    // (ignore definitions set to "[DEFAULT]" which are already initialized)
+    if (ignore_defaults && strEqual(value, ARG_DEFAULT))
+      continue;
+
+    if (value != NULL)
+      *sound_config_vars[i].value =
+       get_token_parameter_value(sound_config_vars[i].token, value);
+  }
+}
+
+void InitSoundSettings_Static(void)
+{
+  // always start with reliable default values from static default config
+  InitSoundSettings_FromHash(sound_config_hash, FALSE);
+}
+
+static void LoadSoundSettingsFromFilename(char *filename)
+{
+  SetupFileHash *setup_file_hash;
+
+  if ((setup_file_hash = loadSetupFileHash(filename)) == NULL)
+    return;
+
+  // read (and overwrite with) values that may be specified in config file
+  InitSoundSettings_FromHash(setup_file_hash, TRUE);
+
+  freeSetupFileHash(setup_file_hash);
+}
+
+void LoadSoundSettings(void)
+{
+  char *filename_base = UNDEFINED_FILENAME, *filename_local;
+
+  InitSoundSettings_Static();
+
+  if (!GFX_OVERRIDE_ARTWORK(ARTWORK_TYPE_SOUNDS))
+  {
+    // first look for special settings configured in level series config
+    filename_base = getCustomArtworkLevelConfigFilename(ARTWORK_TYPE_SOUNDS);
+
+    if (fileExists(filename_base))
+      LoadSoundSettingsFromFilename(filename_base);
+  }
+
+  filename_local = getCustomArtworkConfigFilename(ARTWORK_TYPE_SOUNDS);
+
+  if (filename_local != NULL && !strEqual(filename_base, filename_local))
+    LoadSoundSettingsFromFilename(filename_local);
+}
+
 void LoadUserDefinedEditorElementList(int **elements, int *num_elements)
 {
   char *filename = getEditorSetupFilename();