X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_caveengine.c;h=e221ca7784551455c8e7e5d376129f8c31dac05b;hb=1117b0f4a823be4971201f24df067203b54dbf59;hp=e95236ce6b73c8a5994635adf1d08ee76fc82ebf;hpb=ee1d57d74c4e4037fafb677953f8363489a263d0;p=rocksndiamonds.git diff --git a/src/game_bd/bd_caveengine.c b/src/game_bd/bd_caveengine.c index e95236ce..e221ca77 100644 --- a/src/game_bd/bd_caveengine.c +++ b/src/game_bd/bd_caveengine.c @@ -1371,6 +1371,9 @@ static boolean do_fall_try_magic(GdCave *cave, int x, int y, // active or non-active or anything, element falling in will always disappear store(cave, x, y, O_SPACE); + if (cave->magic_wall_breakscan && cave->amoeba_state == GD_AM_AWAKE) + cave->convert_amoeba_this_frame = TRUE; + return TRUE; } else @@ -1604,6 +1607,9 @@ void gd_cave_iterate(GdCave *cave, GdDirection player_move, boolean player_fire, // score collected this frame cave->score = 0; + // to implement buggy bd1 amoeba+magic wall behaviour + cave->convert_amoeba_this_frame = FALSE; + // suicide only kills the active player // player_x, player_y was set by the previous iterate routine, or the cave setup. // we must check if there is a player or not - he may have exploded or something like that @@ -2847,6 +2853,13 @@ void gd_cave_iterate(GdCave *cave, GdDirection player_move, boolean player_fire, // ============================================================================ case O_AMOEBA: + // emulating BD1 amoeba+magic wall bug + if (cave->convert_amoeba_this_frame && amoeba_found_enclosed) + { + store(cave, x, y, cave->amoeba_enclosed_effect); + break; + } + amoeba_count++; switch (cave->amoeba_state) { @@ -3713,7 +3726,8 @@ void gd_cave_iterate(GdCave *cave, GdDirection player_move, boolean player_fire, // magic wall; if active&wait or not wait for hatching if (cave->magic_wall_state == GD_MW_ACTIVE && - (cave->hatched || !cave->magic_timer_wait_for_hatching)) + (cave->hatched || !cave->magic_timer_wait_for_hatching) && + !(cave->magic_wall_time == 0 && cave->magic_timer_zero_is_infinite)) { cave->magic_wall_time -= cave->speed; if (cave->magic_wall_time < 0)