fixed support for wrap-around levels in EM engine
authorHolger Schemel <info@artsoft.org>
Thu, 24 Sep 2020 23:59:21 +0000 (01:59 +0200)
committerHolger Schemel <info@artsoft.org>
Thu, 24 Sep 2020 23:59:21 +0000 (01:59 +0200)
Fixed initializing wrap-around levels in the EM game engine; this was
done when loading the cave, but using a run-time flag, which is not
set until starting the game.

This is a regression bug of commit 04c0f302.

src/game_em/convert.c
src/game_em/emerald.h
src/game_em/reademc.c

index 9219e19774ee95b5ddbaeaa20ba28c11aebf64a3..59c9a81e2d95ded94a1071865a7172f19aa76573 100644 (file)
@@ -277,7 +277,9 @@ void prepare_em_level(void)
   lev.right = lev.left + lev.width;
   lev.bottom = lev.top + lev.height;
 
-  if (cav.infinite)
+  lev.infinite = game_em.use_wrap_around;
+
+  if (lev.infinite)
   {
     /* add linked cave buffer columns for wrap-around movement */
     for (x = 0; x < lev.left; x++)
index 629d66e399999587a8a8d436b358ec0f6b013f43..5a4ab2e64a8a984377dbcb07e85fe5f6038a3cde 100644 (file)
@@ -710,6 +710,7 @@ struct LOGIC
                                /* 0 == all players at home */
 
   boolean testmode;            /* test mode */
+  boolean infinite;            /* flag for infinitely wide cave */
   boolean killed_out_of_time;  /* kill player due to time out */
 
   int exit_x, exit_y;          /* kludge for playing player exit sound */
index 012c3b5fc62ad094ed89bd74a92b53ac43a1f1c0..dae246c94555350b5b926fae0fa4efc182985d4c 100644 (file)
@@ -299,8 +299,6 @@ 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 = game_em.use_wrap_around;
-  cav.testmode = FALSE;
   cav.teamwork = (src[2150] & 128) != 0;
 
   /* scores */