fixed support for wrap-around levels in EM engine for old tapes 4.2.0.1
authorHolger Schemel <info@artsoft.org>
Wed, 19 Aug 2020 22:55:32 +0000 (00:55 +0200)
committerHolger Schemel <info@artsoft.org>
Thu, 20 Aug 2020 18:11:11 +0000 (20:11 +0200)
When playing tapes that solved wrap-around levels with the EM engine
that were recorded before wrap-around support was added, deactivate
wrap-around to not break old tapes.

src/game.c
src/game_em/convert.c
src/game_em/export.h
src/game_em/reademc.c

index d67a91a0b8c743ba46cbb55d245067f314897fa4..8c243a4954c3bbec07e28c79afa20bfbbc1cec21 100644 (file)
@@ -2991,6 +2991,9 @@ static void InitGameEngine(void)
   game_em.use_old_explosions =
     (game.engine_version < VERSION_IDENT(4,1,4,2));
 
+  game_em.use_wrap_around =
+    (game.engine_version > VERSION_IDENT(4,1,4,1));
+
   // --------------------------------------------------------------------------
 
   // set maximal allowed number of custom element changes per game frame
index 6b09ece6a7b26ec5a06e9e4975dbdf32d6b1a490..bae0130c3920adcd4ed56a4e3e0ea4a0474855d5 100644 (file)
@@ -459,6 +459,7 @@ void prepare_em_level(void)
   // - game_em.use_single_button (default: TRUE)
   // - game_em.use_snap_key_bug (default: FALSE)
   // - game_em.use_old_explosions (default: FALSE)
+  // - game_em.use_wrap_around (default: TRUE)
 
   game_em.level_solved = FALSE;
   game_em.game_over = FALSE;
index 4766101bbba223798c96361b7e77fd9575042749..e1519ea65659b80544f6b421b8d082511e56d8c9 100644 (file)
@@ -46,6 +46,7 @@ struct GameInfo_EM
   boolean use_single_button;
   boolean use_snap_key_bug;
   boolean use_old_explosions;
+  boolean use_wrap_around;
 };
 
 struct LevelInfo_EM
index 3f366227a6785c7d0cee3010ac22f8c723c66209..1308615c363d7ceee40d581fa8c11036e933ca1d 100644 (file)
@@ -293,7 +293,7 @@ void convert_em_level(unsigned char *src, int file_version)
   cav.time_seconds = MIN(GET_BE16(src[2110]), 9999);
   cav.gems_needed = src[2095];
 
-  cav.infinite = TRUE;
+  cav.infinite = game_em.use_wrap_around;
   cav.testmode = FALSE;
   cav.teamwork = (src[2150] & 128) != 0;