// set flags for bugs and changes according to active game engine version
// --------------------------------------------------------------------------
+ /*
+ 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.
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 --------------------------------------
if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
level.time = 0;
- // ---------- initialize mask for handling game action events ---------------
+ // ---------- initialize flags for handling game actions --------------------
- // set game action events mask to default value
- game.event_mask = GAME_EVENTS_DEFAULT;
+ // set flags for game actions to default values
+ game.use_key_actions = TRUE;
+ game.use_mouse_actions = FALSE;
// when using Mirror Magic game engine, handle mouse events only
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
- game.event_mask = GAME_EVENTS_MOUSE;
+ {
+ game.use_key_actions = FALSE;
+ game.use_mouse_actions = TRUE;
+ }
// check for custom elements with mouse click events
if (level.game_engine_type == GAME_ENGINE_TYPE_RND)
HAS_CHANGE_EVENT(element, CE_PRESSED_BY_MOUSE) ||
HAS_CHANGE_EVENT(element, CE_MOUSE_CLICKED_ON_X) ||
HAS_CHANGE_EVENT(element, CE_MOUSE_PRESSED_ON_X))
- game.event_mask = GAME_EVENTS_KEYS | GAME_EVENTS_MOUSE;
+ game.use_mouse_actions = TRUE;
}
}
}
InitGameEngine();
InitGameControlValues();
- // initialize tape action events from game when recording tape
+ // initialize tape actions from game when recording tape
if (tape.recording)
- tape.event_mask = game.event_mask;
+ {
+ tape.use_key_actions = game.use_key_actions;
+ tape.use_mouse_actions = game.use_mouse_actions;
+ }
// don't play tapes over network
network_playing = (network.enabled && !tape.playing);
static void SetMouseActionFromTapeAction(struct MouseActionInfo *mouse_action,
byte *tape_action)
{
- if (!(tape.event_mask & GAME_EVENTS_MOUSE))
+ if (!tape.use_mouse_actions)
return;
mouse_action->lx = tape_action[TAPE_ACTION_LX];
static void SetTapeActionFromMouseAction(byte *tape_action,
struct MouseActionInfo *mouse_action)
{
- if (!(tape.event_mask & GAME_EVENTS_MOUSE))
+ if (!tape.use_mouse_actions)
return;
tape_action[TAPE_ACTION_LX] = mouse_action->lx;