X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=fa991030d9ccaa7882e59fc2cc49b9eb953dbdd8;hb=45befdabd623ea1d67a3db27de22f63cb7156f72;hp=b92cf01b747cd3dbd61a90c4d85790f88f2b7001;hpb=459e3ba4589c247d389e315d1f501ee099a8a125;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index b92cf01b..fa991030 100644 --- a/src/tools.c +++ b/src/tools.c @@ -3465,11 +3465,27 @@ void DrawMiniLevel(int size_x, int size_y, int scroll_x, int scroll_y) 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; @@ -5564,8 +5580,8 @@ unsigned int MoveDoor(unsigned int door_state) 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; } @@ -6268,7 +6284,7 @@ bd_object_mapping_list[] = }, { O_CONVEYOR_DIR_SWITCH, TRUE, - EL_BD_CONVEYOR_DIR_SWITCH_RIGHT, -1, -1 + EL_BD_CONVEYOR_DIR_SWITCH_NORMAL, -1, -1 }, { O_ACID, TRUE, @@ -7015,11 +7031,11 @@ bd_object_mapping_list[] = }, { 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, @@ -7068,7 +7084,7 @@ bd_object_mapping_list[] = } }; -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; @@ -7099,7 +7115,38 @@ int map_element_RND_to_BD(int element_rnd) 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;