rnd-20020610-2-src
[rocksndiamonds.git] / src / init.c
index 763ed518dd35ff6d894eef70f03c31a40a5f23a4..f89f107d8eefb2b59b8081af3bf195dafd3cb2db 100644 (file)
@@ -105,8 +105,6 @@ void OpenAll(void)
   InitGfxBackground();
   InitToons();
 
-  InitGameEngine();
-
   DrawMainMenu();
 
   InitNetworkServer();
@@ -180,8 +178,12 @@ static void InitMixer()
 
 static void InitSound()
 {
+  /* load custom sounds and music */
   InitReloadSounds(artwork.snd_current->name);
   InitReloadMusic(artwork.mus_current->name);
+
+  /* initialize sound effect lookup table for element actions */
+  InitGameSound();
 }
 
 static void InitTileClipmasks()
@@ -409,7 +411,23 @@ void InitGfxBackground()
 
 void ReloadCustomArtwork()
 {
-  if (artwork.graphics_set_current != artwork.gfx_current->name)
+  static char *leveldir_current_name = NULL;
+  static boolean last_override_level_graphics = FALSE;
+  static boolean last_override_level_sounds = FALSE;
+  static boolean last_override_level_music = FALSE;
+
+  if (leveldir_current_name != leveldir_current->name)
+  {
+    /* force reload of custom artwork after new level series was selected */
+    artwork.graphics_set_current_name = NULL;
+    artwork.sounds_set_current_name = NULL;
+    artwork.music_set_current_name = NULL;
+
+    leveldir_current_name = leveldir_current->name;
+  }
+
+  if (artwork.graphics_set_current_name != artwork.gfx_current->name ||
+      last_override_level_graphics != setup.override_level_graphics)
   {
     int i;
 
@@ -427,21 +445,26 @@ void ReloadCustomArtwork()
 
     SetDoorState(DOOR_OPEN_1 | DOOR_CLOSE_2);
 
-    artwork.graphics_set_current = artwork.gfx_current->name;
+    artwork.graphics_set_current_name = artwork.gfx_current->name;
+    last_override_level_graphics = setup.override_level_graphics;
   }
 
-  if (artwork.sounds_set_current != artwork.snd_current->name)
+  if (artwork.sounds_set_current_name != artwork.snd_current->name ||
+      last_override_level_sounds != setup.override_level_sounds)
   {
     InitReloadSounds(artwork.snd_current->name);
 
-    artwork.sounds_set_current = artwork.snd_current->name;
+    artwork.sounds_set_current_name = artwork.snd_current->name;
+    last_override_level_sounds = setup.override_level_sounds;
   }
 
-  if (artwork.music_set_current != artwork.mus_current->name)
+  if (artwork.music_set_current_name != artwork.mus_current->name ||
+      last_override_level_music != setup.override_level_music)
   {
     InitReloadMusic(artwork.mus_current->name);
 
-    artwork.music_set_current = artwork.mus_current->name;
+    artwork.music_set_current_name = artwork.mus_current->name;
+    last_override_level_music = setup.override_level_music;
   }
 }
 
@@ -509,9 +532,13 @@ void InitElementProperties()
     EL_EM_GATE_3X,
     EL_EM_GATE_4X,
     EL_SWITCHGATE_OPEN,
+    EL_SWITCHGATE_OPENING,
     EL_SWITCHGATE_CLOSED,
+    EL_SWITCHGATE_CLOSING,
     EL_TIMEGATE_OPEN,
+    EL_TIMEGATE_OPENING,
     EL_TIMEGATE_CLOSED,
+    EL_TIMEGATE_CLOSING,
     EL_TUBE_CROSS,
     EL_TUBE_VERTICAL,
     EL_TUBE_HORIZONTAL,
@@ -550,11 +577,15 @@ void InitElementProperties()
     EL_QUICKSAND_EMPTYING,
     EL_MAGIC_WALL_OFF,
     EL_MAGIC_WALL_EMPTY,
+    EL_MAGIC_WALL_EMPTYING,
+    EL_MAGIC_WALL_FILLING,
     EL_MAGIC_WALL_FULL,
     EL_MAGIC_WALL_DEAD,
     EL_MAGIC_WALL_BD_OFF,
     EL_MAGIC_WALL_BD_EMPTY,
+    EL_MAGIC_WALL_BD_EMPTYING,
     EL_MAGIC_WALL_BD_FULL,
+    EL_MAGIC_WALL_BD_FILLING,
     EL_MAGIC_WALL_BD_DEAD,
     EL_LIFE,
     EL_LIFE_ASYNC,
@@ -580,6 +611,7 @@ void InitElementProperties()
     EL_SP_HARD_BASE5,
     EL_SP_HARD_BASE6,
     EL_SP_TERMINAL,
+    EL_SP_TERMINAL_ACTIVE,
     EL_SP_EXIT,
     EL_INVISIBLE_STEEL,
     EL_BELT1_SWITCH_LEFT,
@@ -628,6 +660,30 @@ void InitElementProperties()
     EL_CRYSTAL,
     EL_WALL_PEARL,
     EL_WALL_CRYSTAL,
+    EL_PFORTE1,
+    EL_PFORTE2,
+    EL_PFORTE3,
+    EL_PFORTE4,
+    EL_PFORTE1X,
+    EL_PFORTE2X,
+    EL_PFORTE3X,
+    EL_PFORTE4X,
+    EL_EM_GATE_1,
+    EL_EM_GATE_2,
+    EL_EM_GATE_3,
+    EL_EM_GATE_4,
+    EL_EM_GATE_1X,
+    EL_EM_GATE_2X,
+    EL_EM_GATE_3X,
+    EL_EM_GATE_4X,
+    EL_SWITCHGATE_OPEN,
+    EL_SWITCHGATE_OPENING,
+    EL_SWITCHGATE_CLOSED,
+    EL_SWITCHGATE_CLOSING,
+    EL_TIMEGATE_OPEN,
+    EL_TIMEGATE_OPENING,
+    EL_TIMEGATE_CLOSED,
+    EL_TIMEGATE_CLOSING,
     EL_TUBE_CROSS,
     EL_TUBE_VERTICAL,
     EL_TUBE_HORIZONTAL,
@@ -651,26 +707,6 @@ void InitElementProperties()
     EL_BADEWANNE3,
     EL_BADEWANNE4,
     EL_BADEWANNE5,
-    EL_PFORTE1,
-    EL_PFORTE2,
-    EL_PFORTE3,
-    EL_PFORTE4,
-    EL_PFORTE1X,
-    EL_PFORTE2X,
-    EL_PFORTE3X,
-    EL_PFORTE4X,
-    EL_EM_GATE_1,
-    EL_EM_GATE_2,
-    EL_EM_GATE_3,
-    EL_EM_GATE_4,
-    EL_EM_GATE_1X,
-    EL_EM_GATE_2X,
-    EL_EM_GATE_3X,
-    EL_EM_GATE_4X,
-    EL_SWITCHGATE_OPEN,
-    EL_SWITCHGATE_CLOSED,
-    EL_TIMEGATE_OPEN,
-    EL_TIMEGATE_CLOSED,
     EL_SP_HARD_GRAY,
     EL_SP_HARD_GREEN,
     EL_SP_HARD_BLUE,
@@ -715,6 +751,30 @@ void InitElementProperties()
     EL_EMC_STEEL_WALL_3,
     EL_EMC_STEEL_WALL_4,
     EL_CRYSTAL,
+    EL_PFORTE1,
+    EL_PFORTE2,
+    EL_PFORTE3,
+    EL_PFORTE4,
+    EL_PFORTE1X,
+    EL_PFORTE2X,
+    EL_PFORTE3X,
+    EL_PFORTE4X,
+    EL_EM_GATE_1,
+    EL_EM_GATE_2,
+    EL_EM_GATE_3,
+    EL_EM_GATE_4,
+    EL_EM_GATE_1X,
+    EL_EM_GATE_2X,
+    EL_EM_GATE_3X,
+    EL_EM_GATE_4X,
+    EL_SWITCHGATE_OPEN,
+    EL_SWITCHGATE_OPENING,
+    EL_SWITCHGATE_CLOSED,
+    EL_SWITCHGATE_CLOSING,
+    EL_TIMEGATE_OPEN,
+    EL_TIMEGATE_OPENING,
+    EL_TIMEGATE_CLOSED,
+    EL_TIMEGATE_CLOSING,
     EL_TUBE_CROSS,
     EL_TUBE_VERTICAL,
     EL_TUBE_HORIZONTAL,
@@ -828,6 +888,7 @@ void InitElementProperties()
     EL_SP_HARD_BASE5,
     EL_SP_HARD_BASE6,
     EL_SP_TERMINAL,
+    EL_SP_TERMINAL_ACTIVE,
     EL_SP_EXIT,
     EL_INVISIBLE_STEEL,
     EL_STEEL_SLANTED,