game.team_mode = (num_players > 1);
}
+#if 0
+ printf("level %d: level.game_version == %06d\n", level_nr,
+ level.game_version);
+ printf(" tape.file_version == %06d\n",
+ tape.file_version);
+ printf(" tape.game_version == %06d\n",
+ tape.game_version);
+ printf(" tape.engine_version == %06d\n",
+ tape.engine_version);
+ printf(" => game.engine_version == %06d [tape mode: %s]\n",
+ game.engine_version, (tape.playing ? "PLAYING" : "RECORDING"));
+#endif
+
// --------------------------------------------------------------------------
// 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.
// dynamically adjust element properties according to game engine version
InitElementPropertiesEngine(game.engine_version);
-#if 0
- printf("level %d: level version == %06d\n", level_nr, level.game_version);
- printf(" tape version == %06d [%s] [file: %06d]\n",
- tape.engine_version, (tape.playing ? "PLAYING" : "RECORDING"),
- tape.file_version);
- printf(" => game.engine_version == %06d\n", game.engine_version);
-#endif
+ // ---------- 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);
// ---------- initialize player's initial move delay ------------------------
void PlayLevelSound_EM(int xx, int yy, int element_em, int sample)
{
int element = (element_em > -1 ? map_element_EM_to_RND_game(element_em) : 0);
- int offset = (BorderElement == EL_STEELWALL ? 1 : 0);
+ int offset = 0;
int x = xx - 1 - offset;
int y = yy - 1 - offset;