added mapping (scanned) BD run-time elements to normal BD elements
authorHolger Schemel <info@artsoft.org>
Sun, 30 Jun 2024 14:40:19 +0000 (16:40 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 30 Jun 2024 14:48:27 +0000 (16:48 +0200)
src/game_bd/bd_cave.c
src/game_bd/bd_caveengine.c
src/tools.c

index 6e474620bd9bd6fcad38365453133dbbcd70ea3e..0adabeb842bb4ef70443da559a2035c1d8eef62e 100644 (file)
@@ -1665,7 +1665,7 @@ void gd_cave_adler_checksum_more(GdCave *cave, unsigned int *a, unsigned int *b)
   for (y = 0; y < cave->h; y++)
     for (x = 0; x < cave->w; x++)
     {
-      *a += gd_elements[cave->map[y][x]].character;
+      *a += gd_elements[cave->map[y][x] & O_MASK].character;
       *b += *a;
 
       *a %= 65521;
index 888c73d32cdf9519ce7ab37cf8c9131ad82ffbc1..0f9eecc7d35f0092b49577013ae7b2d8ed61ef63 100644 (file)
@@ -1713,7 +1713,7 @@ void gd_cave_iterate(GdCave *cave, GdDirection player_move, boolean player_fire,
       }
 
       // add the ckdelay correction value for every element seen.
-      cave->ckdelay += gd_elements[get(cave, x, y)].ckdelay;
+      cave->ckdelay += gd_elements[get(cave, x, y) & O_MASK].ckdelay;
 
       switch (get(cave, x, y))
       {
@@ -3975,7 +3975,7 @@ void set_initial_cave_speed(GdCave *cave)
     for (x = 0; x < cave->w; x++)
     {
       // add the ckdelay correction value for every element seen.
-      cave->ckdelay += gd_elements[get(cave, x, y)].ckdelay;
+      cave->ckdelay += gd_elements[get(cave, x, y) & O_MASK].ckdelay;
     }
   }
 
index d56532d189d8143d7c4ea734a624d615aad68114..17cd794a2dfa2c3fc1021ac48144143f33579323 100644 (file)
@@ -7686,6 +7686,9 @@ int map_element_BD_to_RND_cave(int element_bd)
     mapping_initialized = TRUE;
   }
 
+  // always map (scanned) run-time elements to normal elements
+  element_bd &= O_MASK;
+
   if (element_bd < 0 || element_bd >= O_MAX_ALL)
   {
     Warn("invalid BD element %d", element_bd);
@@ -7716,6 +7719,9 @@ int map_element_BD_to_RND_game(int element_bd)
     mapping_initialized = TRUE;
   }
 
+  // always map (scanned) run-time elements to normal elements
+  element_bd &= O_MASK;
+
   if (element_bd < 0 || element_bd >= O_MAX_ALL)
   {
     Warn("invalid BD element %d", element_bd);