redraw_mask |= REDRAW_FIELD;
}
+static int getPreviewLevelWidth(void)
+{
+ if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ return (level.native_bd_level->cave->x2 - level.native_bd_level->cave->x1 + 1);
+
+ return lev_fieldx;
+}
+
+static int getPreviewLevelHeight(void)
+{
+ if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ return (level.native_bd_level->cave->y2 - level.native_bd_level->cave->y1 + 1);
+
+ return lev_fieldy;
+}
+
static void DrawPreviewLevelPlayfield(int from_x, int from_y)
{
boolean show_level_border = (BorderElement != EL_EMPTY);
- int level_xsize = lev_fieldx + (show_level_border ? 2 : 0);
- int level_ysize = lev_fieldy + (show_level_border ? 2 : 0);
+ int level_xsize = getPreviewLevelWidth() + (show_level_border ? 2 : 0);
+ int level_ysize = getPreviewLevelHeight() + (show_level_border ? 2 : 0);
int tile_size = preview.tile_size;
int preview_width = preview.xsize * tile_size;
int preview_height = preview.ysize * tile_size;
if (!door_panel_drawn[door_index])
{
- ClearRectangle(drawto, door_rect->x, door_rect->y,
- door_rect->width, door_rect->height);
+ ClearRectangleOnBackground(drawto, door_rect->x, door_rect->y,
+ door_rect->width, door_rect->height);
door_panel_drawn[door_index] = TRUE;
}
},
{
O_CONVEYOR_DIR_SWITCH, TRUE,
- EL_BD_CONVEYOR_DIR_SWITCH_RIGHT, -1, -1
+ EL_BD_CONVEYOR_DIR_SWITCH_NORMAL, -1, -1
},
{
O_ACID, TRUE,
},
{
O_CONVEYOR_DIR_NORMAL, FALSE,
- EL_BD_CONVEYOR_DIR_SWITCH_RIGHT, -1, -1
+ EL_BD_CONVEYOR_DIR_SWITCH_NORMAL, -1, -1
},
{
O_CONVEYOR_DIR_CHANGED, FALSE,
- EL_BD_CONVEYOR_DIR_SWITCH_LEFT, -1, -1
+ EL_BD_CONVEYOR_DIR_SWITCH_CHANGED, -1, -1
},
{
O_CONVEYOR_SWITCH_OFF, FALSE,
}
};
-int map_element_RND_to_BD(int element_rnd)
+int map_element_RND_to_BD_cave(int element_rnd)
{
static unsigned short mapping_RND_to_BD[NUM_FILE_ELEMENTS];
static boolean mapping_initialized = FALSE;
return mapping_RND_to_BD[element_rnd];
}
-int map_element_BD_to_RND(int element_bd)
+int map_element_BD_to_RND_cave(int element_bd)
+{
+ static unsigned short mapping_BD_to_RND[O_MAX_ALL];
+ static boolean mapping_initialized = FALSE;
+
+ if (!mapping_initialized)
+ {
+ int i;
+
+ // return "EL_UNKNOWN" for all undefined elements in mapping array
+ for (i = 0; i < O_MAX_ALL; i++)
+ mapping_BD_to_RND[i] = EL_UNKNOWN;
+
+ for (i = 0; bd_object_mapping_list[i].element_bd != -1; i++)
+ if (bd_object_mapping_list[i].is_rnd_to_bd_mapping)
+ mapping_BD_to_RND[bd_object_mapping_list[i].element_bd] =
+ bd_object_mapping_list[i].element_rnd;
+
+ mapping_initialized = TRUE;
+ }
+
+ if (element_bd < 0 || element_bd >= O_MAX_ALL)
+ {
+ Warn("invalid BD element %d", element_bd);
+
+ return EL_UNKNOWN;
+ }
+
+ return mapping_BD_to_RND[element_bd];
+}
+
+int map_element_BD_to_RND_game(int element_bd)
{
static unsigned short mapping_BD_to_RND[O_MAX_ALL];
static boolean mapping_initialized = FALSE;