cleanup of unnecessarily convoluted function call
[rocksndiamonds.git] / src / main.h
index 2481f3da9eaf5eb1b0cfd579437d63eecdc00fd0..cbd7c1a4319ba5723d4c0f785a3d2521827162db 100644 (file)
@@ -34,8 +34,6 @@
 
 #define IMG_UNDEFINED                  (-1)
 #define IMG_EMPTY                      IMG_EMPTY_SPACE
-#define IMG_SP_EMPTY                   IMG_EMPTY_SPACE
-#define IMG_SP_EMPTY_SPACE             IMG_EMPTY_SPACE
 #define IMG_EXPLOSION                  IMG_DEFAULT_EXPLODING
 #define IMG_CHAR_START                 IMG_CHAR_SPACE
 #define IMG_STEEL_CHAR_START           IMG_STEEL_CHAR_SPACE
                                         (e) == EL_CRYSTAL        ? EL_CRYSTAL :    \
                                         EL_ROCK)
 
-#define IS_BD_PLAYER_ELEMENT(e)                ((e) == EL_BD_INBOX ||                  \
-                                        (e) == EL_BD_PLAYER ||                 \
-                                        (e) == EL_BD_PLAYER_WITH_BOMB ||       \
-                                        (e) == EL_BD_PLAYER_GLUED ||           \
-                                        (e) == EL_BD_PLAYER_STIRRING)
-
-#define IS_BD_BITER(e)                 ((e) == EL_BD_BITER ||                  \
-                                        (e) == EL_BD_BITER_RIGHT ||            \
-                                        (e) == EL_BD_BITER_UP ||               \
-                                        (e) == EL_BD_BITER_LEFT ||             \
-                                        (e) == EL_BD_BITER_DOWN)
-
-#define IS_BD_EXPANDABLE_WALL(e)       ((e) == EL_BD_EXPANDABLE_WALL_HORIZONTAL ||     \
-                                        (e) == EL_BD_EXPANDABLE_WALL_VERTICAL ||       \
-                                        (e) == EL_BD_EXPANDABLE_WALL_ANY)
-
-#define IS_BD_EXPANDABLE_STEELWALL(e)  ((e) == EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL ||\
-                                        (e) == EL_BD_EXPANDABLE_STEELWALL_VERTICAL ||  \
-                                        (e) == EL_BD_EXPANDABLE_STEELWALL_ANY)
-
-#define IS_BD_CONVEYOR_BELT(e)         ((e) == EL_BD_CONVEYOR_LEFT ||                  \
-                                        (e) == EL_BD_CONVEYOR_LEFT_ACTIVE ||           \
-                                        (e) == EL_BD_CONVEYOR_RIGHT ||                 \
-                                        (e) == EL_BD_CONVEYOR_RIGHT_ACTIVE)
-
-#define IS_BD_CONVEYOR_BELT_SWITCH(e)  ((e) == EL_BD_CONVEYOR_SWITCH ||                \
-                                        (e) == EL_BD_CONVEYOR_SWITCH_ACTIVE ||         \
-                                        (e) == EL_BD_CONVEYOR_DIR_SWITCH_NORMAL ||     \
-                                        (e) == EL_BD_CONVEYOR_DIR_SWITCH_CHANGED)
+#define IS_BDX_PLAYER_ELEMENT(e)       ((e) == EL_BDX_INBOX ||                 \
+                                        (e) == EL_BDX_PLAYER ||                \
+                                        (e) == EL_BDX_PLAYER_WITH_BOMB ||      \
+                                        (e) == EL_BDX_PLAYER_GLUED ||          \
+                                        (e) == EL_BDX_PLAYER_STIRRING)
+
+#define IS_BD_FIREFLY(e)               ((e) == EL_BD_FIREFLY ||                \
+                                        (e) == EL_BD_FIREFLY_RIGHT ||          \
+                                        (e) == EL_BD_FIREFLY_UP ||             \
+                                        (e) == EL_BD_FIREFLY_LEFT ||           \
+                                        (e) == EL_BD_FIREFLY_DOWN)
+
+#define IS_BDX_FIREFLY_1(e)            ((e) == EL_BDX_FIREFLY_1 ||             \
+                                        (e) == EL_BDX_FIREFLY_1_RIGHT ||       \
+                                        (e) == EL_BDX_FIREFLY_1_UP ||          \
+                                        (e) == EL_BDX_FIREFLY_1_LEFT ||        \
+                                        (e) == EL_BDX_FIREFLY_1_DOWN)
+
+#define IS_BDX_FIREFLY_2(e)            ((e) == EL_BDX_FIREFLY_2 ||             \
+                                        (e) == EL_BDX_FIREFLY_2_RIGHT ||       \
+                                        (e) == EL_BDX_FIREFLY_2_UP ||          \
+                                        (e) == EL_BDX_FIREFLY_2_LEFT ||        \
+                                        (e) == EL_BDX_FIREFLY_2_DOWN)
+
+#define IS_BD_BUTTERFLY(e)             ((e) == EL_BD_BUTTERFLY ||              \
+                                        (e) == EL_BD_BUTTERFLY_RIGHT ||        \
+                                        (e) == EL_BD_BUTTERFLY_UP ||           \
+                                        (e) == EL_BD_BUTTERFLY_LEFT ||         \
+                                        (e) == EL_BD_BUTTERFLY_DOWN)
+
+#define IS_BDX_BUTTERFLY_1(e)          ((e) == EL_BDX_BUTTERFLY_1 ||           \
+                                        (e) == EL_BDX_BUTTERFLY_1_RIGHT ||     \
+                                        (e) == EL_BDX_BUTTERFLY_1_UP ||        \
+                                        (e) == EL_BDX_BUTTERFLY_1_LEFT ||      \
+                                        (e) == EL_BDX_BUTTERFLY_1_DOWN)
+
+#define IS_BDX_BUTTERFLY_2(e)          ((e) == EL_BDX_BUTTERFLY_2 ||           \
+                                        (e) == EL_BDX_BUTTERFLY_2_RIGHT ||     \
+                                        (e) == EL_BDX_BUTTERFLY_2_UP ||        \
+                                        (e) == EL_BDX_BUTTERFLY_2_LEFT ||      \
+                                        (e) == EL_BDX_BUTTERFLY_2_DOWN)
+
+#define IS_BDX_STONEFLY(e)             ((e) == EL_BDX_STONEFLY ||              \
+                                        (e) == EL_BDX_STONEFLY_RIGHT ||        \
+                                        (e) == EL_BDX_STONEFLY_UP ||           \
+                                        (e) == EL_BDX_STONEFLY_LEFT ||         \
+                                        (e) == EL_BDX_STONEFLY_DOWN)
+
+#define IS_BDX_DRAGONFLY(e)            ((e) == EL_BDX_DRAGONFLY ||             \
+                                        (e) == EL_BDX_DRAGONFLY_RIGHT ||       \
+                                        (e) == EL_BDX_DRAGONFLY_UP ||          \
+                                        (e) == EL_BDX_DRAGONFLY_LEFT ||        \
+                                        (e) == EL_BDX_DRAGONFLY_DOWN)
+
+#define IS_BDX_BITER(e)                        ((e) == EL_BDX_BITER ||                 \
+                                        (e) == EL_BDX_BITER_RIGHT ||           \
+                                        (e) == EL_BDX_BITER_UP ||              \
+                                        (e) == EL_BDX_BITER_LEFT ||            \
+                                        (e) == EL_BDX_BITER_DOWN)
+
+#define IS_BDX_EXPANDABLE_WALL(e)      ((e) == EL_BDX_EXPANDABLE_WALL_HORIZONTAL ||            \
+                                        (e) == EL_BDX_EXPANDABLE_WALL_VERTICAL ||              \
+                                        (e) == EL_BDX_EXPANDABLE_WALL_ANY)
+
+#define IS_BDX_EXPANDABLE_STEELWALL(e) ((e) == EL_BDX_EXPANDABLE_STEELWALL_HORIZONTAL ||       \
+                                        (e) == EL_BDX_EXPANDABLE_STEELWALL_VERTICAL ||         \
+                                        (e) == EL_BDX_EXPANDABLE_STEELWALL_ANY)
+
+#define IS_BDX_CONVEYOR_BELT(e)                ((e) == EL_BDX_CONVEYOR_LEFT ||         \
+                                        (e) == EL_BDX_CONVEYOR_LEFT_ACTIVE ||  \
+                                        (e) == EL_BDX_CONVEYOR_RIGHT ||        \
+                                        (e) == EL_BDX_CONVEYOR_RIGHT_ACTIVE)
+
+#define IS_BDX_CONVEYOR_BELT_SWITCH(e) ((e) == EL_BDX_CONVEYOR_SWITCH ||       \
+                                        (e) == EL_BDX_CONVEYOR_SWITCH_ACTIVE ||\
+                                        (e) == EL_BDX_CONVEYOR_DIR_SWITCH ||   \
+                                        (e) == EL_BDX_CONVEYOR_DIR_SWITCH_ACTIVE)
+
+#define IS_BDX_ELEMENT(e)              ((e) >= EL_BDX_START &&                 \
+                                        (e) <= EL_BDX_END)
+
+#define IS_BDX_RUNTIME_ELEMENT(e)      ((e) >= EL_BDX_RUNTIME_START &&         \
+                                        (e) <= EL_BDX_RUNTIME_END)
 
 #define IS_SOKOBAN_OBJECT_OR_FIELD(e)  ((e) == EL_SOKOBAN_OBJECT ||            \
                                         (e) == EL_SOKOBAN_FIELD_EMPTY ||       \
 #define EL_DF_WALL_START                       EL_DF_WOODEN_WALL_START
 #define EL_DF_WALL_END                         EL_DF_STEEL_WALL_END
 
-#define EL_DF_EMPTY                            (EL_DF_START2 + 304)
+#define EL_DF_EMPTY_SPACE                      (EL_DF_START2 + 304)
+#define EL_DF_EMPTY                            EL_DF_EMPTY_SPACE
 #define EL_DF_CELL                             (EL_DF_START2 + 305)
 #define EL_DF_MINE                             (EL_DF_START2 + 306)
 #define EL_DF_REFRACTOR                                (EL_DF_START2 + 307)
 #define EL_DF_END_2                            EL_DF_SLOPE_END
 
 // BD style elements (normal)
-#define EL_BD_EMPTY_SPACE                      1253
-#define EL_BD_EMPTY                            EL_BD_EMPTY_SPACE
-#define EL_BD_SAND                             1254
-#define EL_BD_SAND_2                           1255
-#define EL_BD_SAND_BALL                                1256
-#define EL_BD_SAND_LOOSE                       1257
-#define EL_BD_SAND_SLOPED_UP_RIGHT             1258
-#define EL_BD_SAND_SLOPED_UP_LEFT              1259
-#define EL_BD_SAND_SLOPED_DOWN_LEFT            1260
-#define EL_BD_SAND_SLOPED_DOWN_RIGHT           1261
-#define EL_BD_SAND_GLUED                       1262
-#define EL_BD_WALL_SLOPED_UP_RIGHT             1263
-#define EL_BD_WALL_SLOPED_UP_LEFT              1264
-#define EL_BD_WALL_SLOPED_DOWN_LEFT            1265
-#define EL_BD_WALL_SLOPED_DOWN_RIGHT           1266
-#define EL_BD_WALL_NON_SLOPED                  1267
-#define EL_BD_WALL_DIGGABLE                    1268
-#define EL_BD_WALL_DIAMOND                     1269
-#define EL_BD_WALL_KEY_1                       1270
-#define EL_BD_WALL_KEY_2                       1271
-#define EL_BD_WALL_KEY_3                       1272
-#define EL_BD_FALLING_WALL                     1273
-#define EL_BD_STEELWALL                                1274
-#define EL_BD_STEELWALL_SLOPED_UP_RIGHT                1275
-#define EL_BD_STEELWALL_SLOPED_UP_LEFT         1276
-#define EL_BD_STEELWALL_SLOPED_DOWN_LEFT       1277
-#define EL_BD_STEELWALL_SLOPED_DOWN_RIGHT      1278
-#define EL_BD_STEELWALL_EXPLODABLE             1279
-#define EL_BD_STEELWALL_DIGGABLE               1280
-#define EL_BD_EXPANDABLE_WALL_HORIZONTAL       1281
-#define EL_BD_EXPANDABLE_WALL_VERTICAL         1282
-#define EL_BD_EXPANDABLE_WALL_ANY              1283
-#define EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL  1284
-#define EL_BD_EXPANDABLE_STEELWALL_VERTICAL    1285
-#define EL_BD_EXPANDABLE_STEELWALL_ANY         1286
-#define EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL        1287
-#define EL_BD_EXPANDABLE_WALL_SWITCH_VERTICAL  1288
-#define EL_BD_INBOX                            1289
-#define EL_BD_EXIT_CLOSED                      1290
-#define EL_BD_EXIT_OPEN                                1291
-#define EL_BD_INVISIBLE_EXIT_CLOSED            1292
-#define EL_BD_INVISIBLE_EXIT_OPEN              1293
-#define EL_BD_FLYING_ROCK                      1294
-#define EL_BD_MEGA_ROCK                                1295
-#define EL_BD_ROCK_GLUED                       1296
-#define EL_BD_FLYING_DIAMOND                   1297
-#define EL_BD_DIAMOND_GLUED                    1298
-#define EL_BD_DIAMOND_KEY                      1299
-#define EL_BD_TRAPPED_DIAMOND                  1300
-#define EL_BD_NUT                              1301
-#define EL_BD_AMOEBA_2                         1302
-#define EL_BD_BLADDER                          1303
-#define EL_BD_BLADDER_SPENDER                  1304
-#define EL_BD_CREATURE_SWITCH                  1305
-#define EL_BD_CREATURE_SWITCH_ACTIVE           1306
-#define EL_BD_BITER_SWITCH_1                   1307
-#define EL_BD_BITER_SWITCH_2                   1308
-#define EL_BD_BITER_SWITCH_3                   1309
-#define EL_BD_BITER_SWITCH_4                   1310
-#define EL_BD_REPLICATOR                       1311
-#define EL_BD_REPLICATOR_ACTIVE                        1312
-#define EL_BD_REPLICATOR_SWITCH                        1313
-#define EL_BD_REPLICATOR_SWITCH_ACTIVE         1314
-#define EL_BD_CONVEYOR_LEFT                    1315
-#define EL_BD_CONVEYOR_LEFT_ACTIVE             1316
-#define EL_BD_CONVEYOR_RIGHT                   1317
-#define EL_BD_CONVEYOR_RIGHT_ACTIVE            1318
-#define EL_BD_CONVEYOR_SWITCH                  1319
-#define EL_BD_CONVEYOR_SWITCH_ACTIVE           1320
-#define EL_BD_CONVEYOR_DIR_SWITCH_NORMAL       1321
-#define EL_BD_CONVEYOR_DIR_SWITCH_CHANGED      1322
-#define EL_BD_GRAVITY_SWITCH                   1323
-#define EL_BD_GRAVITY_SWITCH_ACTIVE            1324
-#define EL_BD_ACID                             1325
-#define EL_BD_BOX                              1326
-#define EL_BD_TIME_PENALTY                     1327
-#define EL_BD_GRAVESTONE                       1328
-#define EL_BD_CLOCK                            1329
-#define EL_BD_POT                              1330
-#define EL_BD_PNEUMATIC_HAMMER                 1331
-#define EL_BD_TELEPORTER                       1332
-#define EL_BD_SKELETON                         1333
-#define EL_BD_WATER                            1334
-#define EL_BD_KEY_1                            1335
-#define EL_BD_KEY_2                            1336
-#define EL_BD_KEY_3                            1337
-#define EL_BD_GATE_1                           1338
-#define EL_BD_GATE_2                           1339
-#define EL_BD_GATE_3                           1340
-#define EL_BD_LAVA                             1341
-#define EL_BD_SWEET                            1342
-#define EL_BD_VOODOO_DOLL                      1343
-#define EL_BD_SLIME                            1344
-#define EL_BD_WAITING_ROCK                     1345
-#define EL_BD_CHASING_ROCK                     1346
-#define EL_BD_GHOST                            1347
-#define EL_BD_COW                              1348
-#define EL_BD_COW_LEFT                         1349
-#define EL_BD_COW_UP                           1350
-#define EL_BD_COW_RIGHT                                1351
-#define EL_BD_COW_DOWN                         1352
-#define EL_BD_BUTTERFLY_2                      1353
-#define EL_BD_BUTTERFLY_2_RIGHT                        1354
-#define EL_BD_BUTTERFLY_2_UP                   1355
-#define EL_BD_BUTTERFLY_2_LEFT                 1356
-#define EL_BD_BUTTERFLY_2_DOWN                 1357
-#define EL_BD_FIREFLY_2                                1358
-#define EL_BD_FIREFLY_2_RIGHT                  1359
-#define EL_BD_FIREFLY_2_UP                     1360
-#define EL_BD_FIREFLY_2_LEFT                   1361
-#define EL_BD_FIREFLY_2_DOWN                   1362
-#define EL_BD_STONEFLY                         1363
-#define EL_BD_STONEFLY_RIGHT                   1364
-#define EL_BD_STONEFLY_UP                      1365
-#define EL_BD_STONEFLY_LEFT                    1366
-#define EL_BD_STONEFLY_DOWN                    1367
-#define EL_BD_BITER                            1368
-#define EL_BD_BITER_RIGHT                      1369
-#define EL_BD_BITER_UP                         1370
-#define EL_BD_BITER_LEFT                       1371
-#define EL_BD_BITER_DOWN                       1372
-#define EL_BD_DRAGONFLY                                1373
-#define EL_BD_DRAGONFLY_RIGHT                  1374
-#define EL_BD_DRAGONFLY_UP                     1375
-#define EL_BD_DRAGONFLY_LEFT                   1376
-#define EL_BD_DRAGONFLY_DOWN                   1377
-#define EL_BD_BOMB                             1378
-#define EL_BD_NITRO_PACK                       1379
-#define EL_BD_PLAYER                           1380
-#define EL_BD_PLAYER_WITH_BOMB                 1381
-#define EL_BD_PLAYER_GLUED                     1382
-#define EL_BD_PLAYER_STIRRING                  1383
-#define EL_BD_FAKE_BONUS                       1384
-#define EL_BD_COVERED                          1385
+#define EL_BDX_START                           1253
+#define EL_BDX_EMPTY_SPACE                     EL_BDX_START
+#define EL_BDX_EMPTY                           EL_BDX_EMPTY_SPACE
+#define EL_BDX_SAND_1                          1254
+#define EL_BDX_SAND_2                          1255
+#define EL_BDX_SAND_BALL                       1256
+#define EL_BDX_SAND_LOOSE                      1257
+#define EL_BDX_SAND_SLOPED_UP_RIGHT            1258
+#define EL_BDX_SAND_SLOPED_UP_LEFT             1259
+#define EL_BDX_SAND_SLOPED_DOWN_LEFT           1260
+#define EL_BDX_SAND_SLOPED_DOWN_RIGHT          1261
+#define EL_BDX_SAND_GLUED                      1262
+#define EL_BDX_WALL_SLOPED_UP_RIGHT            1263
+#define EL_BDX_WALL_SLOPED_UP_LEFT             1264
+#define EL_BDX_WALL_SLOPED_DOWN_LEFT           1265
+#define EL_BDX_WALL_SLOPED_DOWN_RIGHT          1266
+#define EL_BDX_WALL_NON_SLOPED                 1267
+#define EL_BDX_WALL_DIGGABLE                   1268
+#define EL_BDX_WALL_DIAMOND                    1269
+#define EL_BDX_WALL_KEY_1                      1270
+#define EL_BDX_WALL_KEY_2                      1271
+#define EL_BDX_WALL_KEY_3                      1272
+#define EL_BDX_FALLING_WALL                    1273
+#define EL_BDX_STEELWALL                       1274
+#define EL_BDX_STEELWALL_SLOPED_UP_RIGHT       1275
+#define EL_BDX_STEELWALL_SLOPED_UP_LEFT                1276
+#define EL_BDX_STEELWALL_SLOPED_DOWN_LEFT      1277
+#define EL_BDX_STEELWALL_SLOPED_DOWN_RIGHT     1278
+#define EL_BDX_STEELWALL_EXPLODABLE            1279
+#define EL_BDX_STEELWALL_DIGGABLE              1280
+#define EL_BDX_EXPANDABLE_WALL_HORIZONTAL      1281
+#define EL_BDX_EXPANDABLE_WALL_VERTICAL                1282
+#define EL_BDX_EXPANDABLE_WALL_ANY             1283
+#define EL_BDX_EXPANDABLE_STEELWALL_HORIZONTAL 1284
+#define EL_BDX_EXPANDABLE_STEELWALL_VERTICAL   1285
+#define EL_BDX_EXPANDABLE_STEELWALL_ANY                1286
+#define EL_BDX_EXPANDABLE_WALL_SWITCH          1287
+#define EL_BDX_EXPANDABLE_WALL_SWITCH_ACTIVE   1288
+#define EL_BDX_INBOX                           1289
+#define EL_BDX_EXIT_CLOSED                     1290
+#define EL_BDX_EXIT_OPEN                       1291
+#define EL_BDX_INVISIBLE_EXIT_CLOSED           1292
+#define EL_BDX_INVISIBLE_EXIT_OPEN             1293
+#define EL_BDX_FLYING_ROCK                     1294
+#define EL_BDX_MEGA_ROCK                       1295
+#define EL_BDX_ROCK_GLUED                      1296
+#define EL_BDX_FLYING_DIAMOND                  1297
+#define EL_BDX_DIAMOND_GLUED                   1298
+#define EL_BDX_DIAMOND_KEY                     1299
+#define EL_BDX_TRAPPED_DIAMOND                 1300
+#define EL_BDX_NUT                             1301
+#define EL_BDX_AMOEBA_1                                1302
+#define EL_BDX_AMOEBA_2                                1303
+#define EL_BDX_BLADDER                         1304
+#define EL_BDX_BLADDER_SPENDER                 1305
+#define EL_BDX_CREATURE_SWITCH                 1306
+#define EL_BDX_CREATURE_SWITCH_ACTIVE          1307
+#define EL_BDX_BITER_SWITCH_1                  1308
+#define EL_BDX_BITER_SWITCH_2                  1309
+#define EL_BDX_BITER_SWITCH_3                  1310
+#define EL_BDX_BITER_SWITCH_4                  1311
+#define EL_BDX_REPLICATOR                      1312
+#define EL_BDX_REPLICATOR_ACTIVE               1313
+#define EL_BDX_REPLICATOR_SWITCH               1314
+#define EL_BDX_REPLICATOR_SWITCH_ACTIVE                1315
+#define EL_BDX_CONVEYOR_LEFT                   1316
+#define EL_BDX_CONVEYOR_LEFT_ACTIVE            1317
+#define EL_BDX_CONVEYOR_RIGHT                  1318
+#define EL_BDX_CONVEYOR_RIGHT_ACTIVE           1319
+#define EL_BDX_CONVEYOR_SWITCH                 1320
+#define EL_BDX_CONVEYOR_SWITCH_ACTIVE          1321
+#define EL_BDX_CONVEYOR_DIR_SWITCH             1322
+#define EL_BDX_CONVEYOR_DIR_SWITCH_ACTIVE      1323
+#define EL_BDX_GRAVITY_SWITCH                  1324
+#define EL_BDX_GRAVITY_SWITCH_ACTIVE           1325
+#define EL_BDX_ACID                            1326
+#define EL_BDX_BOX                             1327
+#define EL_BDX_TIME_PENALTY                    1328
+#define EL_BDX_GRAVESTONE                      1329
+#define EL_BDX_CLOCK                           1330
+#define EL_BDX_POT                             1331
+#define EL_BDX_PNEUMATIC_HAMMER                        1332
+#define EL_BDX_TELEPORTER                      1333
+#define EL_BDX_SKELETON                                1334
+#define EL_BDX_WATER                           1335
+#define EL_BDX_KEY_1                           1336
+#define EL_BDX_KEY_2                           1337
+#define EL_BDX_KEY_3                           1338
+#define EL_BDX_GATE_1                          1339
+#define EL_BDX_GATE_2                          1340
+#define EL_BDX_GATE_3                          1341
+#define EL_BDX_LAVA                            1342
+#define EL_BDX_SWEET                           1343
+#define EL_BDX_VOODOO_DOLL                     1344
+#define EL_BDX_SLIME                           1345
+#define EL_BDX_WAITING_ROCK                    1346
+#define EL_BDX_CHASING_ROCK                    1347
+#define EL_BDX_GHOST                           1348
+#define EL_BDX_COW                             1349
+#define EL_BDX_COW_LEFT                                1350
+#define EL_BDX_COW_UP                          1351
+#define EL_BDX_COW_RIGHT                       1352
+#define EL_BDX_COW_DOWN                                1353
+#define EL_BDX_BUTTERFLY_1                     1354
+#define EL_BDX_BUTTERFLY_1_RIGHT               1355
+#define EL_BDX_BUTTERFLY_1_UP                  1356
+#define EL_BDX_BUTTERFLY_1_LEFT                        1357
+#define EL_BDX_BUTTERFLY_1_DOWN                        1358
+#define EL_BDX_BUTTERFLY_2                     1359
+#define EL_BDX_BUTTERFLY_2_RIGHT               1360
+#define EL_BDX_BUTTERFLY_2_UP                  1361
+#define EL_BDX_BUTTERFLY_2_LEFT                        1362
+#define EL_BDX_BUTTERFLY_2_DOWN                        1363
+#define EL_BDX_FIREFLY_1                       1364
+#define EL_BDX_FIREFLY_1_RIGHT                 1365
+#define EL_BDX_FIREFLY_1_UP                    1366
+#define EL_BDX_FIREFLY_1_LEFT                  1367
+#define EL_BDX_FIREFLY_1_DOWN                  1368
+#define EL_BDX_FIREFLY_2                       1369
+#define EL_BDX_FIREFLY_2_RIGHT                 1370
+#define EL_BDX_FIREFLY_2_UP                    1371
+#define EL_BDX_FIREFLY_2_LEFT                  1372
+#define EL_BDX_FIREFLY_2_DOWN                  1373
+#define EL_BDX_STONEFLY                                1374
+#define EL_BDX_STONEFLY_RIGHT                  1375
+#define EL_BDX_STONEFLY_UP                     1376
+#define EL_BDX_STONEFLY_LEFT                   1377
+#define EL_BDX_STONEFLY_DOWN                   1378
+#define EL_BDX_BITER                           1379
+#define EL_BDX_BITER_RIGHT                     1380
+#define EL_BDX_BITER_UP                                1381
+#define EL_BDX_BITER_LEFT                      1382
+#define EL_BDX_BITER_DOWN                      1383
+#define EL_BDX_DRAGONFLY                       1384
+#define EL_BDX_DRAGONFLY_RIGHT                 1385
+#define EL_BDX_DRAGONFLY_UP                    1386
+#define EL_BDX_DRAGONFLY_LEFT                  1387
+#define EL_BDX_DRAGONFLY_DOWN                  1388
+#define EL_BDX_BOMB                            1389
+#define EL_BDX_NITRO_PACK                      1390
+#define EL_BDX_PLAYER                          1391
+#define EL_BDX_PLAYER_WITH_BOMB                        1392
+#define EL_BDX_PLAYER_WITH_ROCKET_LAUNCHER     1393
+#define EL_BDX_PLAYER_GLUED                    1394
+#define EL_BDX_PLAYER_STIRRING                 1395
+#define EL_BDX_ROCKET_LAUNCHER                 1396
+#define EL_BDX_ROCKET                          1397
+#define EL_BDX_ROCKET_RIGHT                    1398
+#define EL_BDX_ROCKET_UP                       1399
+#define EL_BDX_ROCKET_LEFT                     1400
+#define EL_BDX_ROCKET_DOWN                     1401
+#define EL_BDX_FAKE_BONUS                      1402
+#define EL_BDX_COVERED                         1403
+#define EL_BDX_WALL                            1404
+#define EL_BDX_ROCK                            1405
+#define EL_BDX_DIAMOND                         1406
+#define EL_BDX_MAGIC_WALL                      1407
 
 // BD style elements ("effects"; mostly runtime elements, but can also be stored in level file)
-#define EL_BD_SAND_BALL_FALLING                        1386
-#define EL_BD_SAND_LOOSE_FALLING               1387
-#define EL_BD_ROCK_FALLING                     1388
-#define EL_BD_FLYING_ROCK_FLYING               1389
-#define EL_BD_MEGA_ROCK_FALLING                        1390
-#define EL_BD_DIAMOND_FALLING                  1391
-#define EL_BD_FLYING_DIAMOND_FLYING            1392
-#define EL_BD_NUT_FALLING                      1393
-#define EL_BD_FALLING_WALL_FALLING             1394
-#define EL_BD_NITRO_PACK_FALLING               1395
-#define EL_BD_WATER_1                          1396
-#define EL_BD_WATER_2                          1397
-#define EL_BD_WATER_3                          1398
-#define EL_BD_WATER_4                          1399
-#define EL_BD_WATER_5                          1400
-#define EL_BD_WATER_6                          1401
-#define EL_BD_WATER_7                          1402
-#define EL_BD_WATER_8                          1403
-#define EL_BD_WATER_9                          1404
-#define EL_BD_WATER_10                         1405
-#define EL_BD_WATER_11                         1406
-#define EL_BD_WATER_12                         1407
-#define EL_BD_WATER_13                         1408
-#define EL_BD_WATER_14                         1409
-#define EL_BD_WATER_15                         1410
-#define EL_BD_WATER_16                         1411
-#define EL_BD_COW_ENCLOSED_1                   1412
-#define EL_BD_COW_ENCLOSED_2                   1413
-#define EL_BD_COW_ENCLOSED_3                   1414
-#define EL_BD_COW_ENCLOSED_4                   1415
-#define EL_BD_COW_ENCLOSED_5                   1416
-#define EL_BD_COW_ENCLOSED_6                   1417
-#define EL_BD_COW_ENCLOSED_7                   1418
-#define EL_BD_BLADDER_1                                1419
-#define EL_BD_BLADDER_2                                1420
-#define EL_BD_BLADDER_3                                1421
-#define EL_BD_BLADDER_4                                1422
-#define EL_BD_BLADDER_5                                1423
-#define EL_BD_BLADDER_6                                1424
-#define EL_BD_BLADDER_7                                1425
-#define EL_BD_BLADDER_8                                1426
-#define EL_BD_PLAYER_GROWING_1                 1427
-#define EL_BD_PLAYER_GROWING_2                 1428
-#define EL_BD_PLAYER_GROWING_3                 1429
-#define EL_BD_BOMB_TICKING_1                   1430
-#define EL_BD_BOMB_TICKING_2                   1431
-#define EL_BD_BOMB_TICKING_3                   1432
-#define EL_BD_BOMB_TICKING_4                   1433
-#define EL_BD_BOMB_TICKING_5                   1434
-#define EL_BD_BOMB_TICKING_6                   1435
-#define EL_BD_BOMB_TICKING_7                   1436
-#define EL_BD_CLOCK_GROWING_1                  1437
-#define EL_BD_CLOCK_GROWING_2                  1438
-#define EL_BD_CLOCK_GROWING_3                  1439
-#define EL_BD_CLOCK_GROWING_4                  1440
-#define EL_BD_DIAMOND_GROWING_1                        1441
-#define EL_BD_DIAMOND_GROWING_2                        1442
-#define EL_BD_DIAMOND_GROWING_3                        1443
-#define EL_BD_DIAMOND_GROWING_4                        1444
-#define EL_BD_DIAMOND_GROWING_5                        1445
-#define EL_BD_EXPLODING_1                      1446
-#define EL_BD_EXPLODING_2                      1447
-#define EL_BD_EXPLODING_3                      1448
-#define EL_BD_EXPLODING_4                      1449
-#define EL_BD_EXPLODING_5                      1450
-#define EL_BD_ROCK_GROWING_1                   1451
-#define EL_BD_ROCK_GROWING_2                   1452
-#define EL_BD_ROCK_GROWING_3                   1453
-#define EL_BD_ROCK_GROWING_4                   1454
-#define EL_BD_STEELWALL_GROWING_1              1455
-#define EL_BD_STEELWALL_GROWING_2              1456
-#define EL_BD_STEELWALL_GROWING_3              1457
-#define EL_BD_STEELWALL_GROWING_4              1458
-#define EL_BD_GHOST_EXPLODING_1                        1459
-#define EL_BD_GHOST_EXPLODING_2                        1460
-#define EL_BD_GHOST_EXPLODING_3                        1461
-#define EL_BD_GHOST_EXPLODING_4                        1462
-#define EL_BD_BOMB_EXPLODING_1                 1463
-#define EL_BD_BOMB_EXPLODING_2                 1464
-#define EL_BD_BOMB_EXPLODING_3                 1465
-#define EL_BD_BOMB_EXPLODING_4                 1466
-#define EL_BD_NITRO_PACK_EXPLODING             1467
-#define EL_BD_NITRO_PACK_EXPLODING_1           1468
-#define EL_BD_NITRO_PACK_EXPLODING_2           1469
-#define EL_BD_NITRO_PACK_EXPLODING_3           1470
-#define EL_BD_NITRO_PACK_EXPLODING_4           1471
-#define EL_BD_AMOEBA_2_EXPLODING_1             1472
-#define EL_BD_AMOEBA_2_EXPLODING_2             1473
-#define EL_BD_AMOEBA_2_EXPLODING_3             1474
-#define EL_BD_AMOEBA_2_EXPLODING_4             1475
-#define EL_BD_NUT_BREAKING_1                   1476
-#define EL_BD_NUT_BREAKING_2                   1477
-#define EL_BD_NUT_BREAKING_3                   1478
-#define EL_BD_NUT_BREAKING_4                   1479
-
-#define NUM_FILE_ELEMENTS                      1480
+#define EL_BDX_RUNTIME_START                   1408
+#define EL_BDX_SAND_BALL_FALLING               EL_BDX_RUNTIME_START
+#define EL_BDX_SAND_LOOSE_FALLING              1409
+#define EL_BDX_ROCK_FALLING                    1410
+#define EL_BDX_FLYING_ROCK_FLYING              1411
+#define EL_BDX_MEGA_ROCK_FALLING               1412
+#define EL_BDX_DIAMOND_FALLING                 1413
+#define EL_BDX_FLYING_DIAMOND_FLYING           1414
+#define EL_BDX_NUT_FALLING                     1415
+#define EL_BDX_FALLING_WALL_FALLING            1416
+#define EL_BDX_NITRO_PACK_FALLING              1417
+#define EL_BDX_WATER_1                         1418
+#define EL_BDX_WATER_2                         1419
+#define EL_BDX_WATER_3                         1420
+#define EL_BDX_WATER_4                         1421
+#define EL_BDX_WATER_5                         1422
+#define EL_BDX_WATER_6                         1423
+#define EL_BDX_WATER_7                         1424
+#define EL_BDX_WATER_8                         1425
+#define EL_BDX_WATER_9                         1426
+#define EL_BDX_WATER_10                                1427
+#define EL_BDX_WATER_11                                1428
+#define EL_BDX_WATER_12                                1429
+#define EL_BDX_WATER_13                                1430
+#define EL_BDX_WATER_14                                1431
+#define EL_BDX_WATER_15                                1432
+#define EL_BDX_WATER_16                                1433
+#define EL_BDX_COW_ENCLOSED_1                  1434
+#define EL_BDX_COW_ENCLOSED_2                  1435
+#define EL_BDX_COW_ENCLOSED_3                  1436
+#define EL_BDX_COW_ENCLOSED_4                  1437
+#define EL_BDX_COW_ENCLOSED_5                  1438
+#define EL_BDX_COW_ENCLOSED_6                  1439
+#define EL_BDX_COW_ENCLOSED_7                  1440
+#define EL_BDX_BLADDER_1                       1441
+#define EL_BDX_BLADDER_2                       1442
+#define EL_BDX_BLADDER_3                       1443
+#define EL_BDX_BLADDER_4                       1444
+#define EL_BDX_BLADDER_5                       1445
+#define EL_BDX_BLADDER_6                       1446
+#define EL_BDX_BLADDER_7                       1447
+#define EL_BDX_BLADDER_8                       1448
+#define EL_BDX_PLAYER_GROWING_1                        1449
+#define EL_BDX_PLAYER_GROWING_2                        1450
+#define EL_BDX_PLAYER_GROWING_3                        1451
+#define EL_BDX_BOMB_TICKING_1                  1452
+#define EL_BDX_BOMB_TICKING_2                  1453
+#define EL_BDX_BOMB_TICKING_3                  1454
+#define EL_BDX_BOMB_TICKING_4                  1455
+#define EL_BDX_BOMB_TICKING_5                  1456
+#define EL_BDX_BOMB_TICKING_6                  1457
+#define EL_BDX_BOMB_TICKING_7                  1458
+#define EL_BDX_CLOCK_GROWING_1                 1459
+#define EL_BDX_CLOCK_GROWING_2                 1460
+#define EL_BDX_CLOCK_GROWING_3                 1461
+#define EL_BDX_CLOCK_GROWING_4                 1462
+#define EL_BDX_DIAMOND_GROWING_1               1463
+#define EL_BDX_DIAMOND_GROWING_2               1464
+#define EL_BDX_DIAMOND_GROWING_3               1465
+#define EL_BDX_DIAMOND_GROWING_4               1466
+#define EL_BDX_DIAMOND_GROWING_5               1467
+#define EL_BDX_EXPLODING_1                     1468
+#define EL_BDX_EXPLODING_2                     1469
+#define EL_BDX_EXPLODING_3                     1470
+#define EL_BDX_EXPLODING_4                     1471
+#define EL_BDX_EXPLODING_5                     1472
+#define EL_BDX_ROCK_GROWING_1                  1473
+#define EL_BDX_ROCK_GROWING_2                  1474
+#define EL_BDX_ROCK_GROWING_3                  1475
+#define EL_BDX_ROCK_GROWING_4                  1476
+#define EL_BDX_STEELWALL_GROWING_1             1477
+#define EL_BDX_STEELWALL_GROWING_2             1478
+#define EL_BDX_STEELWALL_GROWING_3             1479
+#define EL_BDX_STEELWALL_GROWING_4             1480
+#define EL_BDX_GHOST_EXPLODING_1               1481
+#define EL_BDX_GHOST_EXPLODING_2               1482
+#define EL_BDX_GHOST_EXPLODING_3               1483
+#define EL_BDX_GHOST_EXPLODING_4               1484
+#define EL_BDX_BOMB_EXPLODING_1                        1485
+#define EL_BDX_BOMB_EXPLODING_2                        1486
+#define EL_BDX_BOMB_EXPLODING_3                        1487
+#define EL_BDX_BOMB_EXPLODING_4                        1488
+#define EL_BDX_NITRO_PACK_EXPLODING            1489
+#define EL_BDX_NITRO_PACK_EXPLODING_1          1490
+#define EL_BDX_NITRO_PACK_EXPLODING_2          1491
+#define EL_BDX_NITRO_PACK_EXPLODING_3          1492
+#define EL_BDX_NITRO_PACK_EXPLODING_4          1493
+#define EL_BDX_AMOEBA_2_EXPLODING_1            1494
+#define EL_BDX_AMOEBA_2_EXPLODING_2            1495
+#define EL_BDX_AMOEBA_2_EXPLODING_3            1496
+#define EL_BDX_AMOEBA_2_EXPLODING_4            1497
+#define EL_BDX_NUT_BREAKING_1                  1498
+#define EL_BDX_NUT_BREAKING_2                  1499
+#define EL_BDX_NUT_BREAKING_3                  1500
+#define EL_BDX_NUT_BREAKING_4                  1501
+#define EL_BDX_RUNTIME_END                     EL_BDX_NUT_BREAKING_4
+#define EL_BDX_END                             EL_BDX_RUNTIME_END
+
+#define NUM_FILE_ELEMENTS                      1502
 
 
 // "real" (and therefore drawable) runtime elements
 #define EL_MM_PACMAN_EATING_DOWN               (EL_FIRST_RUNTIME_REAL + 81)
 #define EL_MM_BOMB_ACTIVE                      (EL_FIRST_RUNTIME_REAL + 82)
 #define EL_DF_MINE_ACTIVE                      (EL_FIRST_RUNTIME_REAL + 83)
+#define EL_BDX_MAGIC_WALL_ACTIVE               (EL_FIRST_RUNTIME_REAL + 84)
 
-#define NUM_DRAWABLE_ELEMENTS                  (EL_FIRST_RUNTIME_REAL + 84)
+#define NUM_DRAWABLE_ELEMENTS                  (EL_FIRST_RUNTIME_REAL + 85)
 
 #define EL_MM_RUNTIME_START                    EL_MM_EXIT_OPENING
 #define EL_MM_RUNTIME_END                      EL_MM_AMOEBA_WALL_GROWING
 #define EL_MM_LIGHTBALL_YELLOW                 (EL_FIRST_DUMMY + 23)
 #define EL_DEFAULT                             (EL_FIRST_DUMMY + 24)
 #define EL_BD_DEFAULT                          (EL_FIRST_DUMMY + 25)
-#define EL_SP_DEFAULT                          (EL_FIRST_DUMMY + 26)
-#define EL_SB_DEFAULT                          (EL_FIRST_DUMMY + 27)
-#define EL_MM_DEFAULT                          (EL_FIRST_DUMMY + 28)
-#define EL_GRAPHIC_1                           (EL_FIRST_DUMMY + 29)
-#define EL_GRAPHIC_2                           (EL_FIRST_DUMMY + 30)
-#define EL_GRAPHIC_3                           (EL_FIRST_DUMMY + 31)
-#define EL_GRAPHIC_4                           (EL_FIRST_DUMMY + 32)
-#define EL_GRAPHIC_5                           (EL_FIRST_DUMMY + 33)
-#define EL_GRAPHIC_6                           (EL_FIRST_DUMMY + 34)
-#define EL_GRAPHIC_7                           (EL_FIRST_DUMMY + 35)
-#define EL_GRAPHIC_8                           (EL_FIRST_DUMMY + 36)
-#define EL_BD_GAME_GRAPHICS_COLOR_TEMPLATE     (EL_FIRST_DUMMY + 37)
+#define EL_BDX_DEFAULT                         (EL_FIRST_DUMMY + 26)
+#define EL_SP_DEFAULT                          (EL_FIRST_DUMMY + 27)
+#define EL_SB_DEFAULT                          (EL_FIRST_DUMMY + 28)
+#define EL_MM_DEFAULT                          (EL_FIRST_DUMMY + 29)
+#define EL_GRAPHIC_1                           (EL_FIRST_DUMMY + 30)
+#define EL_GRAPHIC_2                           (EL_FIRST_DUMMY + 31)
+#define EL_GRAPHIC_3                           (EL_FIRST_DUMMY + 32)
+#define EL_GRAPHIC_4                           (EL_FIRST_DUMMY + 33)
+#define EL_GRAPHIC_5                           (EL_FIRST_DUMMY + 34)
+#define EL_GRAPHIC_6                           (EL_FIRST_DUMMY + 35)
+#define EL_GRAPHIC_7                           (EL_FIRST_DUMMY + 36)
+#define EL_GRAPHIC_8                           (EL_FIRST_DUMMY + 37)
+#define EL_BDX_GAME_GRAPHICS_COLOR_TEMPLATE    (EL_FIRST_DUMMY + 38)
 
 // internal elements (only used for internal purposes like copying)
-#define EL_FIRST_INTERNAL                      (EL_FIRST_DUMMY + 38)
+#define EL_FIRST_INTERNAL                      (EL_FIRST_DUMMY + 39)
 
 #define EL_INTERNAL_CLIPBOARD_CUSTOM           (EL_FIRST_INTERNAL + 0)
 #define EL_INTERNAL_CLIPBOARD_CHANGE           (EL_FIRST_INTERNAL + 1)
 
 #define EL_INTERNAL_CASCADE_BD                 (EL_FIRST_INTERNAL + 4)
 #define EL_INTERNAL_CASCADE_BD_ACTIVE          (EL_FIRST_INTERNAL + 5)
-#define EL_INTERNAL_CASCADE_BD_NATIVE          (EL_FIRST_INTERNAL + 6)
-#define EL_INTERNAL_CASCADE_BD_NATIVE_ACTIVE   (EL_FIRST_INTERNAL + 7)
-#define EL_INTERNAL_CASCADE_BD_EFFECTS         (EL_FIRST_INTERNAL + 8)
-#define EL_INTERNAL_CASCADE_BD_EFFECTS_ACTIVE  (EL_FIRST_INTERNAL + 9)
+#define EL_INTERNAL_CASCADE_BDX                        (EL_FIRST_INTERNAL + 6)
+#define EL_INTERNAL_CASCADE_BDX_ACTIVE         (EL_FIRST_INTERNAL + 7)
+#define EL_INTERNAL_CASCADE_BDX_EFFECTS                (EL_FIRST_INTERNAL + 8)
+#define EL_INTERNAL_CASCADE_BDX_EFFECTS_ACTIVE (EL_FIRST_INTERNAL + 9)
 #define EL_INTERNAL_CASCADE_EM                 (EL_FIRST_INTERNAL + 10)
 #define EL_INTERNAL_CASCADE_EM_ACTIVE          (EL_FIRST_INTERNAL + 11)
 #define EL_INTERNAL_CASCADE_EMC                        (EL_FIRST_INTERNAL + 12)
@@ -2700,6 +2781,7 @@ enum
   GFX_SPECIAL_ARG_SETUP_SHORTCUTS_3,
   GFX_SPECIAL_ARG_SETUP_SHORTCUTS_4,
   GFX_SPECIAL_ARG_SETUP_SHORTCUTS_5,
+  GFX_SPECIAL_ARG_SETUP_SHORTCUTS_6,
   GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK,
   GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER,
 
@@ -2940,7 +3022,7 @@ enum
 #define PROGRAM_VERSION_MAJOR          4
 #define PROGRAM_VERSION_MINOR          0
 #define PROGRAM_VERSION_PATCH          0
-#define PROGRAM_VERSION_EXTRA          ""
+#define PROGRAM_VERSION_EXTRA          "-test-2"
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
@@ -3612,7 +3694,6 @@ struct LevelInfo
   boolean bd_line_shifting_borders;    // BD engine uses line-shifting wrap-around
   boolean bd_scan_first_and_last_row;  // BD engine scans top and bottom border rows
   boolean bd_short_explosions;         // BD engine uses four game cycles for explosions
-  boolean bd_gravity_affects_all;      // BD engine gravity affects all falling objects
   boolean bd_intermission;             // BD level is intermission
   boolean bd_diagonal_movements;       // BD style diagonal movements
   boolean bd_topmost_player_active;    // BD engine uses first player found on playfield
@@ -3620,8 +3701,11 @@ struct LevelInfo
   int bd_pushing_prob;                 // BD player probability to push rocks
   int bd_pushing_prob_with_sweet;      // BD player probability to push rocks after eating sweet
   boolean bd_push_mega_rock_with_sweet;        // BD player can push mega rocks after eating sweet
+  boolean bd_magic_wall_zero_infinite; // BD magic wall with timer of zero runs infinitely
   boolean bd_magic_wall_wait_hatching; // BD magic wall waits for player's birth
   boolean bd_magic_wall_stops_amoeba;  // BD magic wall can stop amoeba and turn to diamonds
+  boolean bd_magic_wall_break_scan;    // BD magic wall setting to implement buggy BD1 behaviour
+  int bd_magic_wall_time;              // BD magic wall time
   int bd_magic_wall_diamond_to;                // BD magic wall turns diamonds to specified element
   int bd_magic_wall_rock_to;           // BD magic wall turns rocks to specified element
   int bd_magic_wall_mega_rock_to;      // BD magic wall turns mega rocks to specified element
@@ -3632,12 +3716,12 @@ struct LevelInfo
   boolean bd_amoeba_wait_for_hatching; // BD amoeba waits for player's birth
   boolean bd_amoeba_start_immediately; // BD amoeba growth starts immediately
   boolean bd_amoeba_2_explode_by_amoeba;// BD amoeba 2 explodes if touched by BD amoeba
-  int bd_amoeba_threshold_too_big;     // BD amoeba turns to stones if threshold reached
-  int bd_amoeba_slow_growth_time;      // BD amoeba slow growth time (in seconds)
-  int bd_amoeba_slow_growth_rate;      // BD amoeba slow growth rate (in percent)
-  int bd_amoeba_fast_growth_rate;      // BD amoeba fast growth rate (in percent)
-  int bd_amoeba_content_too_big;       // BD amoeba changes to this element if too big
-  int bd_amoeba_content_enclosed;      // BD amoeba changes to this element if enclosed
+  int bd_amoeba_1_threshold_too_big;   // BD amoeba 1 turns to stones if threshold reached
+  int bd_amoeba_1_slow_growth_time;    // BD amoeba 1 slow growth time (in seconds)
+  int bd_amoeba_1_slow_growth_rate;    // BD amoeba 1 slow growth rate (in percent)
+  int bd_amoeba_1_fast_growth_rate;    // BD amoeba 1 fast growth rate (in percent)
+  int bd_amoeba_1_content_too_big;     // BD amoeba 1 changes to this element if too big
+  int bd_amoeba_1_content_enclosed;    // BD amoeba 1 changes to this element if enclosed
   int bd_amoeba_2_threshold_too_big;   // BD amoeba 2 turns to stones if threshold reached
   int bd_amoeba_2_slow_growth_time;    // BD amoeba 2 slow growth time (in seconds)
   int bd_amoeba_2_slow_growth_rate;    // BD amoeba 2 slow growth rate (in percent)
@@ -3680,10 +3764,39 @@ struct LevelInfo
   int bd_hammer_walls_break_delay;     // BD hammer time for breaking walls (in BD frames)
   boolean bd_hammer_walls_reappear;    // BD hammered walls are reappearing after some delay
   int bd_hammer_walls_reappear_delay;  // BD hammer time for reappearing walls (in BD frames)
+  boolean bd_infinite_rockets;         // BD rocket launcher has infinite number of rockets
   int bd_num_skeletons_needed_for_pot; // BD skeletons amount must be collected to use a pot
   int bd_skeleton_worth_num_diamonds;  // BD skeleton collected is worth this number of diamonds
   int bd_expanding_wall_looks_like;    // BD expanding wall looks like this other game element
   int bd_sand_looks_like;              // BD sand looks like this other game element
+  boolean bd_creatures_start_backwards;        // BD creatures start moving in opposite direction
+  boolean bd_creatures_turn_on_hatching;// BD creatures change direction after hatching
+  int bd_creatures_auto_turn_delay;    // BD creatures change direction after delay (in seconds)
+  int bd_gravity_direction;            // BD engine initial gravity direction
+  boolean bd_gravity_switch_active;    // BD engine gravity switch starts in active state
+  int bd_gravity_switch_delay;         // BD engine gravity change delay for switch (in seconds)
+  boolean bd_gravity_affects_all;      // BD engine gravity affects all falling objects
+  int bd_rock_turns_to_on_falling;     // BD rock changes to specified element when falling
+  int bd_rock_turns_to_on_impact;      // BD rock changes to specified element on impact
+  int bd_diamond_turns_to_on_falling;  // BD diamond changes to specified element when falling
+  int bd_diamond_turns_to_on_impact;   // BD diamond changes to specified element on impact
+  int bd_firefly_1_explodes_to;                // BD firefly 1 explodes to specified element
+  int bd_firefly_2_explodes_to;                // BD firefly 2 explodes to specified element
+  int bd_butterfly_1_explodes_to;      // BD butterfly 1 explodes to specified element
+  int bd_butterfly_2_explodes_to;      // BD butterfly 2 explodes to specified element
+  int bd_stonefly_explodes_to;         // BD stonefly explodes to specified element
+  int bd_dragonfly_explodes_to;                // BD dragonfly explodes to specified element
+  int bd_diamond_birth_turns_to;       // BD diamond birth changes to specified element
+  int bd_bomb_explosion_turns_to;      // BD bomb explosion changes to specified element
+  int bd_nitro_explosion_turns_to;     // BD nitro pack explosion changes to specified element
+  int bd_explosion_turns_to;           // BD other explosions change to specified element
+  int bd_color_b;                      // BD engine C64-style cave color (border)
+  int bd_color_0;                      // BD engine C64-style cave color (background)
+  int bd_color_1;                      // BD engine C64-style cave color (sand)
+  int bd_color_2;                      // BD engine C64-style cave color (steel wall)
+  int bd_color_3;                      // BD engine C64-style cave color (wall)
+  int bd_color_4;                      // BD engine C64-style cave color (amoeba)
+  int bd_color_5;                      // BD engine C64-style cave color (slime)
 
   boolean em_slippery_gems;            // EM style "gems slip from wall" behaviour
   boolean em_explodes_by_fire;         // EM style chain explosion behaviour
@@ -3732,6 +3845,8 @@ struct LevelInfo
 
   boolean file_has_custom_elements;    // set when level file contains CEs
 
+  int bd_color_type;                   // set according to BD colors in level
+
   boolean no_valid_file;               // set when level file missing or invalid
   boolean no_level_file;               // set when falling back to level template
 
@@ -3768,6 +3883,8 @@ struct GlobalInfo
   char *convert_leveldir;
   int convert_level_nr;
 
+  char *dumplevelset_leveldir;
+
   char *dumplevel_leveldir;
   int dumplevel_level_nr;