X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=e22a7367d4e296ffc6a0975c2723db1eed6dbdcc;hb=5d264f3e98c7e526922ea961b85d558246fa14f4;hp=504e2d89cf341a2075fb0ed7181bc28c3a87a9e8;hpb=543cccf0bf7339f16c7d40276ce87114a4b99f39;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 504e2d89..e22a7367 100644 --- a/src/game.c +++ b/src/game.c @@ -2844,6 +2844,67 @@ static void InitGameEngine(void) // set flags for bugs and changes according to active game engine version // -------------------------------------------------------------------------- + /* + Summary of bugfix: + Fixed property "can fall" for run-time element "EL_AMOEBA_DROPPING" + + Bug was introduced in version: + 2.0.1 + + Bug was fixed in version: + 4.1.4.2 + + Description: + In version 2.0.1, a new run-time element "EL_AMOEBA_DROPPING" was added, + but the property "can fall" was missing, which caused some levels to be + unsolvable. This was fixed in version 4.1.4.2. + + Affected levels/tapes: + An example for a tape that was fixed by this bugfix is tape 029 from the + level set "rnd_sam_bateman". + The wrong behaviour will still be used for all levels or tapes that were + created/recorded with it. An example for this is tape 023 from the level + set "rnd_gerhard_haeusler", which was recorded with a buggy game engine. + */ + + boolean use_amoeba_dropping_cannot_fall_bug = + ((game.engine_version >= VERSION_IDENT(2,0,1,0) && + game.engine_version <= VERSION_IDENT(4,1,4,1)) || + (tape.playing && + tape.game_version >= VERSION_IDENT(2,0,1,0) && + tape.game_version <= VERSION_IDENT(4,1,4,1))); + + /* + Summary of bugfix/change: + Fixed move speed of elements entering or leaving magic wall. + + Fixed/changed in version: + 2.0.1 + + Description: + Before 2.0.1, move speed of elements entering or leaving magic wall was + twice as fast as it is now. + Since 2.0.1, this is set to a lower value by using move_stepsize_list[]. + + Affected levels/tapes: + The first condition is generally needed for all levels/tapes before version + 2.0.1, which might use the old behaviour before it was changed; known tapes + that are affected: Tape 014 from the level set "rnd_conor_mancone". + The second condition is an exception from the above case and is needed for + the special case of tapes recorded with game (not engine!) version 2.0.1 or + above, but before it was known that this change would break tapes like the + above and was fixed in 4.1.4.2, so that the changed behaviour was active + although the engine version while recording maybe was before 2.0.1. There + are a lot of tapes that are affected by this exception, like tape 006 from + the level set "rnd_conor_mancone". + */ + + boolean use_old_move_stepsize_for_magic_wall = + (game.engine_version < VERSION_IDENT(2,0,1,0) && + !(tape.playing && + tape.game_version >= VERSION_IDENT(2,0,1,0) && + tape.game_version < VERSION_IDENT(4,1,4,2))); + /* Summary of bugfix/change: Fixed handling for custom elements that change when pushed by the player. @@ -2928,6 +2989,12 @@ static void InitGameEngine(void) // dynamically adjust element properties according to game engine version InitElementPropertiesEngine(game.engine_version); + // ---------- initialize special element properties ------------------------- + + // "EL_AMOEBA_DROPPING" missed property "can fall" between 2.0.1 and 4.1.4.1 + if (use_amoeba_dropping_cannot_fall_bug) + SET_PROPERTY(EL_AMOEBA_DROPPING, EP_CAN_FALL, FALSE); + #if 0 printf("level %d: level version == %06d\n", level_nr, level.game_version); printf(" tape version == %06d [%s] [file: %06d]\n", @@ -3181,6 +3248,16 @@ static void InitGameEngine(void) int e = move_stepsize_list[i].element; element_info[e].move_stepsize = move_stepsize_list[i].move_stepsize; + + // set move stepsize value for certain elements for older engine versions + if (use_old_move_stepsize_for_magic_wall) + { + if (e == EL_MAGIC_WALL_FILLING || + e == EL_MAGIC_WALL_EMPTYING || + e == EL_BD_MAGIC_WALL_FILLING || + e == EL_BD_MAGIC_WALL_EMPTYING) + element_info[e].move_stepsize *= 2; + } } // ---------- initialize collect score --------------------------------------