X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_cave.c;h=6a22a6379556b13d962f2cd26f7eb293eeb8aa09;hb=3fa87bc018874afae7bfca06c6d509411a441b09;hp=8cc703a493a7022241d47e4e63467cd7e95fc06d;hpb=70d64256513a57f375431931c606ae85ed5b9d3f;p=rocksndiamonds.git diff --git a/src/game_bd/bd_cave.c b/src/game_bd/bd_cave.c index 8cc703a4..6a22a637 100644 --- a/src/game_bd/bd_cave.c +++ b/src/game_bd/bd_cave.c @@ -1455,6 +1455,16 @@ void gd_drawcave_game(const GdCave *cave, draw = gd_elements[O_PLAYER].image_game; } } + else if (cave->last_direction == GD_MV_UP && use_bd_up_down_graphics()) + { + map = O_PLAYER_UP; + draw = gd_elements[O_PLAYER_UP].image_game; + } + else if (cave->last_direction == GD_MV_DOWN && use_bd_up_down_graphics()) + { + map = O_PLAYER_DOWN; + draw = gd_elements[O_PLAYER_DOWN].image_game; + } else if (cave->last_horizontal_direction == GD_MV_LEFT) { map = O_PLAYER_LEFT; @@ -1512,8 +1522,8 @@ void gd_drawcave_game(const GdCave *cave, // change only graphically if (hate_invisible_outbox) { - elemmapping[O_PRE_INVIS_OUTBOX] = O_PRE_OUTBOX; - elemmapping[O_INVIS_OUTBOX] = O_OUTBOX; + elemmapping[O_PRE_INVIS_OUTBOX] = elemmapping[O_PRE_OUTBOX]; + elemmapping[O_INVIS_OUTBOX] = elemmapping[O_OUTBOX]; } if (hate_invisible_outbox) @@ -1541,7 +1551,8 @@ void gd_drawcave_game(const GdCave *cave, draw = elemdrawing[actual]; // draw special graphics if player is pushing something - if ((cave->last_direction == GD_MV_LEFT || cave->last_direction == GD_MV_RIGHT) && + if (use_bd_pushing_graphics() && + (cave->last_direction == GD_MV_LEFT || cave->last_direction == GD_MV_RIGHT) && is_player(cave, x, y) && can_be_pushed_dir(cave, x, y, cave->last_direction)) { // special check needed when smooth game element movements selected in setup menu: @@ -1667,3 +1678,60 @@ unsigned int gd_cave_adler_checksum(GdCave *cave) gd_cave_adler_checksum_more(cave, &a, &b); return (b << 16) + a; } + +boolean gd_cave_has_levels(GdCave *cave) +{ + GdCave c = *cave; + int *cave_level_value[] = + { + c.level_diamonds, + c.level_speed, + c.level_ckdelay, + c.level_time, + c.level_magic_wall_time, + c.level_amoeba_time, + c.level_amoeba_threshold, + c.level_amoeba_2_time, + c.level_amoeba_2_threshold, + c.level_slime_permeability, + c.level_slime_permeability_c64, + c.level_slime_seed_c64, + c.level_hatching_delay_frame, + c.level_hatching_delay_time, + c.level_bonus_time, + c.level_penalty_time, + + NULL + }; + int i, j; + + for (i = 0; cave_level_value[i] != NULL; i++) + for (j = 1; j < 5; j++) + if (cave_level_value[i][j] != cave_level_value[i][0]) + return TRUE; + + for (j = 1; j < 5; j++) + if (cave->level_rand[j] != j && + cave->level_rand[j - 1] != j - 1 && + cave->level_rand[j] != cave->level_rand[0]) + return TRUE; + + for (j = 1; j < 5; j++) + if (cave->level_timevalue[j] != j + 1 && + cave->level_timevalue[j - 1] != j && + cave->level_timevalue[j] != cave->level_timevalue[0]) + return TRUE; + + return FALSE; +} + +boolean gd_caveset_has_levels(void) +{ + List *iter; + + for (iter = gd_caveset; iter != NULL; iter = iter->next) + if (gd_cave_has_levels((GdCave *)iter->data)) + return TRUE; + + return FALSE; +}