added setting increased BD cave time also in main game engine 4.4.0.0-test-4
authorHolger Schemel <holger.schemel@virtion.de>
Sun, 1 Dec 2024 15:35:18 +0000 (16:35 +0100)
committerHolger Schemel <holger.schemel@virtion.de>
Sun, 1 Dec 2024 15:58:14 +0000 (16:58 +0100)
This change is required if the BD cave time was increased by
collecting clocks; else the game is running out of time too early in
the main game engine, which still uses the previous level time, even
though the BD cave time is displayed correctly in the game panel.

However, a decreased BD cave time (for example, if a voodoo doll was
destroyed) may not be set in the main engine, as it may result in an
immediate "out of time" event, which is handled separately in the main
game engine.

src/game.c
src/game_bd/bd_caveengine.c
src/game_bd/export_bd.h
src/game_bd/import_bd.h
src/game_bd/main_bd.c

index 00a1012badd61061b7fe39555efb19a1ff4241b2..5a58b1c2d98170861dbef254f939cf8cc04cc542 100644 (file)
@@ -15968,6 +15968,11 @@ boolean isSoundPlaying_BD(int element_bd, int sample)
   return FALSE;
 }
 
+void SetTimeLeft(int time_left)
+{
+  TimeLeft = time_left;
+}
+
 void PlayLevelSound_EM(int xx, int yy, int element_em, int sample)
 {
   int element = (element_em > -1 ? map_element_EM_to_RND_game(element_em) : 0);
index 29f100e80a871bc9d1e1aa53d0a531a22e78aafc..a18d3b858913a762f61f3112e7a38db8dea680d7 100644 (file)
@@ -1162,6 +1162,7 @@ static GdElement player_eat_element(GdCave *cave, const GdElement element, int x
       cave->time += cave->time_bonus * cave->timing_factor;
       if (cave->time > cave->max_time * cave->timing_factor)
        cave->time -= cave->max_time * cave->timing_factor;
+      setTimeLeft_BD();
       // no space, rather a dirt remains there...
       return O_DIRT;
 
index e79e9789e4a4ad58697bdb7d15c22da0b26dc50f..f3b81d5b8c08b2579c5856eba302981bc1fe1dd2 100644 (file)
@@ -121,6 +121,7 @@ boolean checkBonusTime_BD(void);
 int getNonScannedElement_BD(int);
 int getFramesPerSecond_BD(void);
 int getTimeLeft_BD(void);
+void setTimeLeft_BD(void);
 void SetTimeFrames_BD(int);
 
 void InitGfxBuffers_BD(void);
index 08e434c3eab02a87880c3753a4df28ca56bb5db6..c594a9b11441acf73a0e3de6ed38911374d935ce 100644 (file)
@@ -33,6 +33,7 @@ void PlayLevelSound_BD(int, int, int, int);
 void StopSound_BD(int, int);
 boolean isSoundPlaying_BD(int, int);
 
+void SetTimeLeft(int);
 void BackToFront(void);
 
 byte *TapePlayAction_BD(void);
index 1bcd740bdb2946d6807f4b54f08ad70391816f55..febe4341401e8a9176fe992214f044a6ddd8f763 100644 (file)
@@ -262,6 +262,11 @@ int getTimeLeft_BD(void)
   return 0;
 }
 
+void setTimeLeft_BD(void)
+{
+  SetTimeLeft(getTimeLeft_BD());
+}
+
 void SetTimeFrames_BD(int frames_played)
 {
   // needed to store final time after solving game (before counting down remaining time)